{
  "version": 3,
  "sources": ["../../../../node_modules/@snapchat/self-xss-warning/dist/localization/ar_aa.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/bn_bd.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/bn_in.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/da_dk.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/de_de.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/el_gr.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/en_gb.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/en_us.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/es_ar.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/es_es.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/es_mx.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/es.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/fi_fi.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/fil_ph.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/fr_fr.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/gu_in.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/hi_in.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/id_id.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/it_it.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/ja_jp.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/kn_in.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/ko_kr.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/ml_in.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/mr_in.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/ms_my.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/nb_no.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/nl_nl.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/pa_in.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/pl_pl.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/pt_br.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/pt_pt.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/ro_ro.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/ru_ru.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/sv_se.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/ta_in.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/te_in.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/th_th.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/tr_tr.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/ur_pk.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/vi_vn.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/zh_cn.json", "../../../../node_modules/@snapchat/self-xss-warning/dist/localization/zh_tw.json", "../../../../node_modules/@snapchat/self-xss-warning/src/localization/index.ts", "../../../../node_modules/@snapchat/self-xss-warning/src/index.ts", "../../../../node_modules/react-dom/client.js", "../../../../node_modules/@contentful/rich-text-types/dist/blocks.js", "../../../../node_modules/@contentful/rich-text-types/dist/inlines.js", "../../../../node_modules/@contentful/rich-text-types/dist/marks.js", "../../../../node_modules/@contentful/rich-text-types/dist/schemaConstraints.js", "../../../../node_modules/@contentful/rich-text-types/dist/types.js", "../../../../node_modules/@contentful/rich-text-types/dist/nodeTypes.js", "../../../../node_modules/@contentful/rich-text-types/dist/emptyDocument.js", "../../../../node_modules/@contentful/rich-text-types/dist/helpers.js", "../../../../node_modules/@contentful/rich-text-types/dist/schemas/index.js", "../../../../node_modules/@contentful/rich-text-types/dist/index.js", "../../../../node_modules/node_modules/escape-html/index.js", "../../../../node_modules/@contentful/rich-text-html-renderer/src/index.ts", "../../../../node_modules/multiselect-react-dropdown/node_modules/style-inject/dist/style-inject.es.js", "../../../../node_modules/multiselect-react-dropdown/src/multiselect/multiselect.component.tsx", "../../../../node_modules/multiselect-react-dropdown/dist/index.js", "../../../../node_modules/react-fast-compare/index.js", "../../../../node_modules/invariant/browser.js", "../../../../node_modules/shallowequal/index.js", "../../../../node_modules/ms/index.js", "../../node_modules/debug/src/common.js", "../../node_modules/debug/src/browser.js", "../../../../node_modules/jsonp/index.js", "../../../../node_modules/isarray/index.js", "../../../../node_modules/react-router/node_modules/path-to-regexp/index.js", "../../../../node_modules/@contentful/rich-text-types/src/blocks.ts", "../../../../node_modules/@contentful/rich-text-types/src/inlines.ts", "../../../../node_modules/@contentful/rich-text-types/src/marks.ts", "../../../../node_modules/@contentful/rich-text-types/src/schemaConstraints.ts", "../../../../node_modules/@contentful/rich-text-types/src/emptyDocument.ts", "../../../../node_modules/@contentful/rich-text-types/src/helpers.ts", "../../../../node_modules/@contentful/rich-text-types/src/index.ts", "../../../../node_modules/@contentful/rich-text-react-renderer/src/util/appendKeyToValidElement.ts", "../../../../node_modules/@contentful/rich-text-react-renderer/src/util/nodeListToReactComponents.tsx", "../../../../node_modules/@contentful/rich-text-react-renderer/src/index.tsx", "../../../../node_modules/promise-memoize/lib/resolver.js", "../../../../node_modules/promise-memoize/lib/memoize.js", "../../../../node_modules/promise-memoize/index.js", "../../../../node_modules/@snapchat/async-data/src/asyncData.ts", "../../../../node_modules/@snapchat/client-hints-browser/src/ClientBrowserFeature.ts", "../../src/index.tsx", "../../../../node_modules/@snapchat/async-data-browser/src/useAsyncData.ts", "../../../global-components/src/analytics/Action.ts", "../../../global-components/src/components/Contentful/PlainRichText.tsx", "../../../../node_modules/lodash-es/head.js", "../../../../node_modules/lodash-es/isUndefined.js", "../../../../node_modules/lodash-es/_baseIsMatch.js", "../../../../node_modules/lodash-es/_isStrictComparable.js", "../../../../node_modules/lodash-es/_getMatchData.js", "../../../../node_modules/lodash-es/_matchesStrictComparable.js", "../../../../node_modules/lodash-es/_baseMatches.js", "../../../../node_modules/lodash-es/get.js", "../../../../node_modules/lodash-es/_baseHasIn.js", "../../../../node_modules/lodash-es/_hasPath.js", "../../../../node_modules/lodash-es/hasIn.js", "../../../../node_modules/lodash-es/_baseMatchesProperty.js", "../../../../node_modules/lodash-es/_baseProperty.js", "../../../../node_modules/lodash-es/_basePropertyDeep.js", "../../../../node_modules/lodash-es/property.js", "../../../../node_modules/lodash-es/_baseIteratee.js", "../../../../node_modules/lodash-es/_baseSet.js", "../../../../node_modules/lodash-es/_basePickBy.js", "../../../../node_modules/lodash-es/pickBy.js", "../../../cookie-components/src/components/CookieModal/CookieModal.tsx", "../../../cookie-components/src/context/ContentfulContext.tsx", "../../../cookie-components/src/context/DesignSystemContext.tsx", "../../../cookie-components/src/generated/contentful-types.ts", "../../../cookie-components/src/helpers/logging/BrowserGrapheneClient.ts", "../../../cookie-components/src/utils/acceptCookieOptions.ts", "../../../cookie-components/src/utils/auditForUncategorizedCookies.ts", "../../../cookie-components/src/utils/createCookieMapping.ts", "../../../cookie-components/src/utils/fetchShouldDisplayModal.ts", "../../../cookie-components/src/utils/fetchUserLocation.ts", "../../../cookie-components/src/utils/getAllCookies.ts", "../../../cookie-components/src/utils/getCookieDomain.ts", "../../../cookie-components/src/utils/removeCookiesForNonacceptedCategories.ts", "../../../cookie-components/src/utils/setOptInCookies.ts", "../../../cookie-components/src/components/designAgnostic/DesignAgnosticButton.tsx", "../../../cookie-components/src/components/designAgnostic/DesignAgnosticLocaleDropdown.tsx", "../../../cookie-components/src/components/designAgnostic/DesignAgnosticModal.tsx", "../../../cookie-components/src/components/designAgnostic/DesignAgnosticSection.tsx", "../../../cookie-components/src/components/designAgnostic/DesignAgnosticToggle.tsx", "../../../cookie-components/src/components/ErrorBoundary/BrowserErrorBoundary.tsx", "../../../cookie-components/src/components/shared/CookieRichText.tsx", "../../../cookie-components/src/components/CookieModal/CookieModalFooter.tsx", "../../../cookie-components/src/components/CookieModal/CookieModalHeader.tsx", "../../../cookie-components/src/components/Logo/Ghost.tsx", "../../../cookie-components/src/components/CookieModal/CookieLandingScreen.tsx", "../../../cookie-components/src/components/shared/CookieCategories.tsx", "../../../cookie-components/src/components/CookieModal/CookieSettingsScreen.tsx", "../../../cookie-components/src/components/CookieProvider/CookieProvider.tsx", "../../../cookie-components/src/components/CookieSettings/CookieSettings.tsx", "../../../snap-design-system-marketing/src/components/Accordion/Accordion.tsx", "../../../snap-design-system-marketing/src/constants/alignment.ts", "../../../snap-design-system-marketing/src/constants/background.ts", "../../../snap-design-system-marketing/src/constants/fontFallbackSettings.ts", "../../../snap-design-system-marketing/src/constants/fonts.ts", "../../../snap-design-system-marketing/src/constants/scrollbars.ts", "../../../snap-design-system-marketing/src/utils/alignment.ts", "../../../snap-design-system-marketing/src/utils/blockBackgroundColor.ts", "../../../snap-design-system-marketing/src/utils/date.ts", "../../../snap-design-system-marketing/src/utils/fontFallbacks.ts", "../../../snap-design-system-marketing/src/utils/themeUtils.ts", "../../../snap-design-system-marketing/src/utils/tracking.ts", "../../../snap-design-system-marketing/src/utils/useWindowFocused.ts", "../../../snap-design-system-marketing/src/components/Accordion/AccordionContext.tsx", "../../../snap-design-system-marketing/src/components/Accordion/styles.ts", "../../../snap-design-system-marketing/src/components/Accordion/AccordionItem/AccordionItem.tsx", "../../../snap-design-system-marketing/src/hooks/useToggleState.ts", "../../../snap-design-system-marketing/src/components/DetailsSummary/DetailsSummary.tsx", "../../../snap-design-system-marketing/src/constants/animation.ts", "../../../snap-design-system-marketing/src/components/DetailsSummary/DetailsSummary.styles.tsx", "../../../snap-design-system-marketing/src/components/Accordion/AccordionItem/styles.ts", "../../../snap-design-system-marketing/src/components/AiLocalizationBanner/styles.ts", "../../../snap-design-system-marketing/src/components/AiLocalizationBanner/AiLocalizationBanner.tsx", "../../../snap-design-system-marketing/src/hooks/useDisableBodyScroll.ts", "../../../snap-design-system-marketing/src/hooks/useOnScreen.ts", "../../../snap-design-system-marketing/src/components/AnimatedAccordion/Accordion/Accordion.tsx", "../../../snap-design-system-marketing/src/components/Media/Media.tsx", "../../../snap-design-system-marketing/src/utils/useCombinesRefs.ts", "../../../snap-design-system-marketing/src/components/Picture/PictureWithStickers.tsx", "../../../snap-design-system-marketing/src/components/Sticker/styles.ts", "../../../snap-design-system-marketing/src/components/Sticker/Sticker.tsx", "../../../snap-design-system-marketing/src/components/Picture/styles.ts", "../../../snap-design-system-marketing/src/components/Video/utils.ts", "../../../snap-design-system-marketing/src/components/Video/Video.tsx", "../../../snap-design-system-marketing/src/components/Tabs/TabsContext.tsx", "../../../snap-design-system-marketing/src/components/Video/styles.ts", "../../../snap-design-system-marketing/src/components/Video/VideoWithStickers.tsx", "../../../snap-design-system-marketing/src/components/Media/LaptopWrapper.tsx", "../../../snap-design-system-marketing/src/components/Media/Media.styled.ts", "../../../snap-design-system-marketing/src/components/Media/PhoneWrapper.tsx", "../../../snap-design-system-marketing/src/components/Media/MediaWithStickers.tsx", "../../../snap-design-system-marketing/src/components/AnimatedAccordion/Accordion/AccordionItem.tsx", "../../../snap-design-system-marketing/src/components/AnimatedAccordion/Accordion/ProgressIndicator.tsx", "../../../snap-design-system-marketing/src/components/AnimatedAccordion/Accordion/styles.ts", "../../../snap-design-system-marketing/src/components/AnimatedAccordion/AnimatedAccordionMobile/AnimatedAccordionMobile.tsx", "../../../snap-design-system-marketing/src/components/AnimatedAccordion/AnimatedAccordionMobile/ProgressIndicatorMobile.tsx", "../../../snap-design-system-marketing/src/components/AnimatedAccordion/AnimatedAccordionMobile/styles.ts", "../../../snap-design-system-marketing/src/components/AnimatedAccordion/AnimatedAccordionMobile/AnimatedAccordionControls.tsx", "../../../snap-design-system-marketing/src/components/AnimatedAccordion/AnimatedAccordion.tsx", "../../../snap-design-system-marketing/src/components/Animations/useAnimations.ts", "../../../snap-design-system-marketing/src/components/AuthorByline/styles.ts", "../../../snap-design-system-marketing/src/components/AuthorByline/AuthorByLine.tsx", "../../../snap-design-system-marketing/src/components/AutoComplete/AutoComplete.tsx", "../../../snap-design-system-marketing/src/components/IconButton/IconButton.tsx", "../../../snap-design-system-marketing/src/components/Primitives/PrimitiveTable/PrimitiveTable.tsx", "../../../snap-design-system-marketing/src/components/Primitives/PrimitiveTable/PrimitiveTable.styles.ts", "../../../snap-design-system-marketing/src/components/Primitives/PrimitiveTable/PrimitiveTableComponents.tsx", "../../../snap-design-system-marketing/src/components/IconButton/IconButton.style.ts", "../../../snap-design-system-marketing/src/components/AutoComplete/styles.ts", "../../../snap-design-system-marketing/src/components/Banner/Banner.tsx", "../../../snap-design-system-marketing/src/components/Banner/Banner.styles.ts", "../../../snap-design-system-marketing/src/components/Block/Block.tsx", "../../../snap-design-system-marketing/src/components/BlockBoundary/BlockBoundary.tsx", "../../../snap-design-system-marketing/src/components/GlobalHeader/GlobalHeader.tsx", "../../../snap-design-system-marketing/src/components/GlobalHeader/GlobalHeaderContext.ts", "../../../snap-design-system-marketing/src/components/GlobalHeader/GlobalHeader.styles.ts", "../../../snap-design-system-marketing/src/components/GlobalHeader/GlobalHeaderDesktop.tsx", "../../../snap-design-system-marketing/src/components/GlobalHeader/GlobalHeaderAnimatedIcon/GlobalHeaderAnimatedIcon.tsx", "../../../snap-design-system-marketing/src/components/GlobalHeader/GlobalHeaderAnimatedIcon/GlobalHeaderAnimatedIcon.styles.ts", "../../../snap-design-system-marketing/src/components/GlobalHeader/GlobalNavScreen/GlobalNavScreen.constants.ts", "../../../snap-design-system-marketing/src/components/GlobalHeader/GlobalHeaderMobile.tsx", "../../../snap-design-system-marketing/src/components/GlobalHeader/GlobalNavGroup/GlobalNavGroup.tsx", "../../../snap-design-system-marketing/src/components/GlobalHeader/GlobalNavItem/GlobalNavItem.styles.ts", "../../../snap-design-system-marketing/src/components/GlobalHeader/GlobalNavGroup/GlobalNavGroup.styles.ts", "../../../snap-design-system-marketing/src/components/GlobalHeader/GlobalNavHighlight/GlobalNavHighlight.tsx", "../../../snap-design-system-marketing/src/components/GlobalHeader/GlobalNavHighlight/GlobalNavHighlight.styles.ts", "../../../snap-design-system-marketing/src/components/GlobalHeader/GlobalNavHighlight/GlobalNavHighlightDesktop.tsx", "../../../snap-design-system-marketing/src/components/GlobalHeader/GlobalNavHighlight/GlobalNavHighlightReel.tsx", "../../../snap-design-system-marketing/src/components/GlobalHeader/GlobalNavItem/GlobalNavItem.tsx", "../../../snap-design-system-marketing/src/utils/domains.ts", "../../../snap-design-system-marketing/src/components/GlobalHeader/GlobalNavScreen/GlobalNavScreen.tsx", "../../../snap-design-system-marketing/src/utils/scrollbarCss.ts", "../../../snap-design-system-marketing/src/components/GlobalHeader/GlobalNavScreen/GlobalNavScreen.styles.ts", "../../../snap-design-system-marketing/src/components/GlobalHeader/GlobalNavScreen/GlobalNavScreenDesktop.tsx", "../../../snap-design-system-marketing/src/components/GlobalHeader/GlobalNavScreen/GlobalNavScreenMobile.tsx", "../../../snap-design-system-marketing/src/components/Block/Block.styled.ts", "../../../snap-design-system-marketing/src/components/SideNavigation/styles.ts", "../../../snap-design-system-marketing/src/components/Page/Page.styled.ts", "../../../snap-design-system-marketing/src/components/Break/Break.styled.ts", "../../../snap-design-system-marketing/src/components/Break/templates/Head.tsx", "../../../snap-design-system-marketing/src/components/Break/templates/HeadFlipped.tsx", "../../../snap-design-system-marketing/src/components/Break/templates/Line.tsx", "../../../snap-design-system-marketing/src/components/Break/templates/Skirt.tsx", "../../../snap-design-system-marketing/src/components/Break/templates/Skirt2.tsx", "../../../snap-design-system-marketing/src/components/Break/templates/Skirt3.tsx", "../../../snap-design-system-marketing/src/components/Break/templates/Straight.tsx", "../../../snap-design-system-marketing/src/components/Break/utils.ts", "../../../snap-design-system-marketing/src/components/Break/Break.tsx", "../../../snap-design-system-marketing/src/components/Break/BreakSpacer.tsx", "../../../snap-design-system-marketing/src/components/CarouselV3/CarouselCardItem/CarouselCardItem.tsx", "../../../snap-design-system-marketing/src/components/EditorialGalleryCard/EditorialGalleryCard.styles.ts", "../../../snap-design-system-marketing/src/components/EditorialGalleryCard/EditorialGalleryCard.tsx", "../../../snap-design-system-marketing/src/components/EditorialGalleryCard/SkeletonEditorialGalleryCard.tsx", "../../../snap-design-system-marketing/src/components/CarouselV3/CarouselCardItem/CarouselCardItem.styles.ts", "../../../snap-design-system-marketing/src/components/CarouselV3/CarouselTextItem/CarouselTextItem.tsx", "../../../snap-design-system-marketing/src/components/CarouselV3/CarouselTextItem/CarouselTextItem.styles.ts", "../../../../node_modules/lodash-es/_baseClamp.js", "../../../../node_modules/lodash-es/clamp.js", "../../../../node_modules/lodash-es/_baseInRange.js", "../../../../node_modules/lodash-es/inRange.js", "../../../snap-design-system-marketing/src/components/CarouselV3/CarouselV3.tsx", "../../../snap-design-system-marketing/src/components/CarouselV3/CarouselV3.styles.ts", "../../../snap-design-system-marketing/src/components/CarouselV3/Dots.tsx", "../../../snap-design-system-marketing/src/components/CarouselV3/utils.ts", "../../../snap-design-system-marketing/src/components/Category/styles.ts", "../../../snap-design-system-marketing/src/components/Category/Category.tsx", "../../../snap-design-system-marketing/src/components/Content/Content.tsx", "../../../snap-design-system-marketing/src/utils/styles.ts", "../../../snap-design-system-marketing/src/components/Content/Content.styled.ts", "../../../snap-design-system-marketing/src/components/Definition/Definition.tsx", "../../../snap-design-system-marketing/src/components/Definition/Definition.styles.ts", "../../../snap-design-system-marketing/src/components/DirectionalOverlay/DirectionalOverlay.styles.ts", "../../../snap-design-system-marketing/src/components/DirectionalOverlay/DirectionalOverlay.tsx", "../../../snap-design-system-marketing/src/components/visualizations/ChartToggle/styles.ts", "../../../snap-design-system-marketing/src/components/DropdownMenu/DropdownSkeleton.styles.ts", "../../../snap-design-system-marketing/src/components/DropdownMenu/DropdownSkeleton.tsx", "../../../snap-design-system-marketing/src/components/EmphasizedText/EmphasizedText.styles.ts", "../../../snap-design-system-marketing/src/components/EmphasizedText/EmphasizedText.tsx", "../../../snap-design-system-marketing/src/components/FilterDropdown/FilterDropdownMenu.tsx", "../../../snap-design-system-marketing/src/components/FilterDropdown/filterDropdownMenuStyles.ts", "../../../snap-design-system-marketing/src/components/SideNavigation/SideNavigation.tsx", "../../../snap-design-system-marketing/src/components/SideNavigation/SideNavigationLinks.tsx", "../../../snap-design-system-marketing/src/components/FooterV2/FooterBar/styles.tsx", "../../../snap-design-system-marketing/src/components/FooterV2/FooterBar/FooterBar.tsx", "../../../snap-design-system-marketing/src/components/FooterV2/FooterColumns/FooterColumns.tsx", "../../../snap-design-system-marketing/src/components/FooterV2/FooterContext.tsx", "../../../snap-design-system-marketing/src/components/FooterV2/FooterColumns/styles.ts", "../../../snap-design-system-marketing/src/components/FooterV2/FooterColumns/FooterColumnsDesktop.tsx", "../../../snap-design-system-marketing/src/components/FooterV2/FooterColumns/FooterColumnsMobile.tsx", "../../../snap-design-system-marketing/src/components/FooterV2/FooterGroup/FooterGroup.tsx", "../../../snap-design-system-marketing/src/components/FooterV2/FooterGroup/styles.ts", "../../../snap-design-system-marketing/src/components/FooterV2/FooterItem/FooterItem.tsx", "../../../snap-design-system-marketing/src/components/FooterV2/FooterItem/styles.ts", "../../../snap-design-system-marketing/src/components/FooterV2/FooterSocial/styles.tsx", "../../../snap-design-system-marketing/src/components/FooterV2/FooterSocial/FooterSocial.tsx", "../../../snap-design-system-marketing/src/components/FooterV2/FooterV2.tsx", "../../../snap-design-system-marketing/src/components/Footnote/Footnote.styled.ts", "../../../snap-design-system-marketing/src/components/Footnote/Footnote.tsx", "../../../snap-design-system-marketing/src/components/FootnoteBlock/FootnoteBlock.tsx", "../../../snap-design-system-marketing/src/components/FootnoteBlock/FootnoteBlock.styles.ts", "../../../snap-design-system-marketing/src/components/Form/Form.tsx", "../../../snap-design-system-marketing/src/components/Form/FormContext.tsx", "../../../snap-design-system-marketing/src/components/Form/formReducer.ts", "../../../snap-design-system-marketing/src/components/Form/FormErrorMessage.tsx", "../../../snap-design-system-marketing/src/components/Form/styles.ts", "../../../snap-design-system-marketing/src/components/Form/FormMessage.tsx", "../../../snap-design-system-marketing/src/components/Form/FormRow.tsx", "../../../snap-design-system-marketing/src/components/Form/Input.tsx", "../../../snap-design-system-marketing/src/components/Form/Field.tsx", "../../../snap-design-system-marketing/src/components/Form/formUtils.ts", "../../../snap-design-system-marketing/src/components/Form/MultiSelectDropdown.tsx", "../../../snap-design-system-marketing/src/components/MultiSelect/MultiSelect.tsx", "../../../snap-design-system-marketing/src/components/MultiSelect/styles.ts", "../../../snap-design-system-marketing/src/components/Form/Select.tsx", "../../../snap-design-system-marketing/src/components/Gallery/GalleryFiltersV2.tsx", "../../../snap-design-system-marketing/src/components/Gallery/galleryFiltersV2Styles.ts", "../../../snap-design-system-marketing/src/components/Gallery/styles.ts", "../../../snap-design-system-marketing/src/components/Gallery/GalleryGridV2.tsx", "../../../../node_modules/lodash-es/_createBaseEach.js", "../../../../node_modules/lodash-es/_baseEach.js", "../../../../node_modules/lodash-es/_baseMap.js", "../../../../node_modules/lodash-es/map.js", "../../../../node_modules/lodash-es/_unescapeHtmlChar.js", "../../../../node_modules/lodash-es/unescape.js", "../../../../node_modules/react-helmet-async/src/constants.js", "../../../../node_modules/react-helmet-async/src/utils.js", "../../../../node_modules/react-helmet-async/src/server.js", "../../../../node_modules/react-helmet-async/src/HelmetData.js", "../../../../node_modules/react-helmet-async/src/Provider.js", "../../../../node_modules/react-helmet-async/src/client.js", "../../../../node_modules/react-helmet-async/src/Dispatcher.js", "../../../../node_modules/react-helmet-async/src/index.js", "../../../snap-design-system-marketing/src/components/Header/Header.tsx", "../../../snap-design-system-marketing/src/components/Hero/Hero.tsx", "../../../snap-design-system-marketing/src/components/Breadcrumbs/Breadcrumb.tsx", "../../../snap-design-system-marketing/src/components/Breadcrumbs/Breadcrumb.styles.ts", "../../../snap-design-system-marketing/src/components/Breadcrumbs/Breadcrumbs.styles.ts", "../../../snap-design-system-marketing/src/components/Breadcrumbs/Breadcrumbs.tsx", "../../../snap-design-system-marketing/src/components/Social/Social.tsx", "../../../../node_modules/react-share/src/hocs/createIcon.tsx", "../../../../node_modules/react-share/src/EmailIcon.ts", "../../../../node_modules/react-share/src/utils/objectToGetParams.ts", "../../../../node_modules/react-share/src/ShareButton.tsx", "../../../../node_modules/react-share/src/hocs/createShareButton.tsx", "../../../../node_modules/react-share/src/EmailShareButton.ts", "../../../../node_modules/react-share/src/FacebookIcon.ts", "../../../../node_modules/react-share/src/FacebookMessengerIcon.ts", "../../../../node_modules/react-share/src/FacebookMessengerShareButton.ts", "../../../../node_modules/react-share/src/utils/assert.ts", "../../../../node_modules/react-share/src/FacebookShareButton.ts", "../../../../node_modules/react-share/src/hooks/useIsMounted.ts", "../../../../node_modules/react-share/src/hocs/createShareCount.tsx", "../../../../node_modules/react-share/src/FacebookShareCount.ts", "../../../../node_modules/react-share/src/HatenaIcon.ts", "../../../../node_modules/react-share/src/HatenaShareButton.ts", "../../../../node_modules/react-share/src/HatenaShareCount.ts", "../../../../node_modules/react-share/src/InstapaperIcon.ts", "../../../../node_modules/react-share/src/InstapaperShareButton.ts", "../../../../node_modules/react-share/src/LineIcon.ts", "../../../../node_modules/react-share/src/LineShareButton.ts", "../../../../node_modules/react-share/src/LinkedinIcon.ts", "../../../../node_modules/react-share/src/LinkedinShareButton.ts", "../../../../node_modules/react-share/src/LivejournalIcon.ts", "../../../../node_modules/react-share/src/LivejournalShareButton.ts", "../../../../node_modules/react-share/src/MailruIcon.ts", "../../../../node_modules/react-share/src/MailruShareButton.ts", "../../../../node_modules/react-share/src/OKIcon.ts", "../../../../node_modules/react-share/src/OKShareButton.ts", "../../../../node_modules/react-share/src/OKShareCount.ts", "../../../../node_modules/react-share/src/PinterestIcon.ts", "../../../../node_modules/react-share/src/PinterestShareButton.ts", "../../../../node_modules/react-share/src/PinterestShareCount.ts", "../../../../node_modules/react-share/src/PocketIcon.ts", "../../../../node_modules/react-share/src/PocketShareButton.ts", "../../../../node_modules/react-share/src/RedditIcon.ts", "../../../../node_modules/react-share/src/RedditShareButton.ts", "../../../../node_modules/react-share/src/GabShareButton.ts", "../../../../node_modules/react-share/src/GabIcon.ts", "../../../../node_modules/react-share/src/RedditShareCount.ts", "../../../../node_modules/react-share/src/TelegramIcon.ts", "../../../../node_modules/react-share/src/TelegramShareButton.ts", "../../../../node_modules/react-share/src/TumblrIcon.ts", "../../../../node_modules/react-share/src/TumblrShareButton.ts", "../../../../node_modules/react-share/src/TumblrShareCount.ts", "../../../../node_modules/react-share/src/TwitterIcon.ts", "../../../../node_modules/react-share/src/TwitterShareButton.ts", "../../../../node_modules/react-share/src/ViberIcon.ts", "../../../../node_modules/react-share/src/ViberShareButton.ts", "../../../../node_modules/react-share/src/VKIcon.ts", "../../../../node_modules/react-share/src/VKShareButton.ts", "../../../../node_modules/react-share/src/VKShareCount.ts", "../../../../node_modules/react-share/src/WeiboIcon.ts", "../../../../node_modules/react-share/src/WeiboShareButton.ts", "../../../../node_modules/react-share/src/WhatsappIcon.ts", "../../../../node_modules/react-share/src/WhatsappShareButton.ts", "../../../../node_modules/react-share/src/WorkplaceIcon.ts", "../../../../node_modules/react-share/src/WorkplaceShareButton.ts", "../../../../node_modules/react-share/src/XIcon.ts", "../../../snap-design-system-marketing/src/components/Hero/Hero.styled.ts", "../../../snap-design-system-marketing/src/components/Hero/HeroHeader.styles.ts", "../../../snap-design-system-marketing/src/components/Hero/utils.ts", "../../../snap-design-system-marketing/src/components/Hero/HeroHeader.tsx", "../../../snap-design-system-marketing/src/components/Hero/HeroMedia/HeroMedia.tsx", "../../../snap-design-system-marketing/src/components/SummaryCard/SummaryCard.styled.ts", "../../../snap-design-system-marketing/src/components/SummaryCard/SkeletonSummaryCard.tsx", "../../../snap-design-system-marketing/src/components/SummaryCard/SummaryCard.tsx", "../../../snap-design-system-marketing/src/components/SummaryCard/utils.ts", "../../../snap-design-system-marketing/src/components/Hero/HeroMedia/HeroMedia.styles.ts", "../../../snap-design-system-marketing/src/components/Hyperlink/Hyperlink.tsx", "../../../snap-design-system-marketing/src/components/Hyperlink/Hyperlink.styled.ts", "../../../snap-design-system-marketing/src/components/ImageButton/ImageButton.tsx", "../../../snap-design-system-marketing/src/components/ImmersiveScrollBlock/ImmersiveScrollBlock.tsx", "../../../snap-design-system-marketing/src/components/ImmersiveScrollBlock/styles.ts", "../../../snap-design-system-marketing/src/components/ImmersiveScrollBlock/useActiveCardObserver.ts", "../../../snap-design-system-marketing/src/components/ImmersiveScrollBlock/useWheelScrollAnimation.ts", "../../../snap-design-system-marketing/src/components/LatestPosts/styles.ts", "../../../snap-design-system-marketing/src/components/LatestPosts/LatestPosts.tsx", "../../../snap-design-system-marketing/src/components/LoadingBar/LoadingBar.tsx", "../../../snap-design-system-marketing/src/components/Logo/Logo.tsx", "../../../snap-design-system-marketing/src/components/Logo/Logo.styles.ts", "../../../snap-design-system-marketing/src/components/Logo/Logo.Ghost.tsx", "../../../snap-design-system-marketing/src/components/Logo/Logo.SnapInc.tsx", "../../../snap-design-system-marketing/src/components/Modal/Modal.tsx", "../../../snap-design-system-marketing/src/components/Modal/styles.ts", "../../../snap-design-system-marketing/src/components/Mosaic/Mosaic.tsx", "../../../snap-design-system-marketing/src/components/Mosaic/MosaicFilters.tsx", "../../../snap-design-system-marketing/src/components/Mosaic/styles.ts", "../../../snap-design-system-marketing/src/components/Mosaic/MosaicLightBox.tsx", "../../../snap-design-system-marketing/src/components/Mosaic/MosaicTile.tsx", "../../../snap-design-system-marketing/src/components/MultiValuePropBlock/styles.ts", "../../../snap-design-system-marketing/src/components/MultiValuePropBlock/ImageSubtopic.tsx", "../../../snap-design-system-marketing/src/components/MultiValuePropBlock/MultiValuePropBlock.tsx", "../../../snap-design-system-marketing/src/components/MultiValuePropBlock/StatSubtopic.tsx", "../../../snap-design-system-marketing/src/components/MultiValuePropBlock/TextSubtopic.tsx", "../../../snap-design-system-marketing/src/components/MultiVideoBlock/MultiVideoBlock.tsx", "../../../snap-design-system-marketing/src/components/MultiVideoBlock/styles.ts", "../../../snap-design-system-marketing/src/components/MultiVideoBlock/VideoItem.tsx", "../../../snap-design-system-marketing/src/components/Navigator/NavigatorItemDesktop/NavigatorItemDesktop.tsx", "../../../snap-design-system-marketing/src/components/GlobalHeader/GlobalHeader.utils.ts", "../../../snap-design-system-marketing/src/components/Navigator/NavigatorItemFeaturedLink/NavigatorItemFeaturedLink.tsx", "../../../snap-design-system-marketing/src/components/Navigator/IconOrImage/IconOrImage.tsx", "../../../snap-design-system-marketing/src/components/Navigator/NavigatorItemFeaturedLink/NavigatorItemFeaturedLink.styled.ts", "../../../snap-design-system-marketing/src/components/Navigator/NavigatorItemLink/NavigatorItemLink.tsx", "../../../snap-design-system-marketing/src/components/Navigator/NavigatorItemLink/NavigatorItemLink.styled.ts", "../../../snap-design-system-marketing/src/components/Navigator/utils.tsx", "../../../snap-design-system-marketing/src/components/Navigator/NavigatorItemDesktop/NavigatorItemDesktop.styled.ts", "../../../snap-design-system-marketing/src/components/Navigator/NavigatorItemMobile/NavigatorItemMobile.tsx", "../../../snap-design-system-marketing/src/components/Navigator/NavigatorItemMobile/NavigatorItemMobile.styled.ts", "../../../snap-design-system-marketing/src/components/Page/ScrollSnapContainer.tsx", "../../../snap-design-system-marketing/src/components/Page/Page.tsx", "../../../snap-design-system-marketing/src/components/Pagination/Pagination.tsx", "../../../snap-design-system-marketing/src/components/Pagination/styles.ts", "../../../snap-design-system-marketing/src/components/Pagination/PaginationItem.tsx", "../../../snap-design-system-marketing/src/components/Pagination/utils.ts", "../../../snap-design-system-marketing/src/components/Quote/Quote.styled.ts", "../../../snap-design-system-marketing/src/components/Quote/Quote.tsx", "../../../snap-design-system-marketing/src/components/QuoteV2/QuoteV2.styled.ts", "../../../snap-design-system-marketing/src/components/QuoteV2/QuoteV2.tsx", "../../../snap-design-system-marketing/src/components/RadioSelectField/RadioSelectField.tsx", "../../../snap-design-system-marketing/src/components/RadioSelectField/InputRadio.tsx", "../../../snap-design-system-marketing/src/components/RadioSelectField/styles.ts", "../../../snap-design-system-marketing/src/components/ScrollAnimatedSection/styles.ts", "../../../snap-design-system-marketing/src/components/ScrollAnimatedSection/ScrollAnimatedSection.tsx", "../../../snap-design-system-marketing/src/components/ScrollAnimatedVideo/ScrollAnimatedVideo.tsx", "../../../snap-design-system-marketing/src/components/SideOverlay/SideOverlay.tsx", "../../../snap-design-system-marketing/src/components/SideOverlay/SideOverlay.styles.ts", "../../../snap-design-system-marketing/src/components/SnapchatEmbed/SnapchatEmbed.tsx", "../../../snap-design-system-marketing/src/components/SnapchatEmbed/SnapchatEmbed.styles.ts", "../../../snap-design-system-marketing/src/components/SplitBlock/SplitBlock.tsx", "../../../snap-design-system-marketing/src/components/SplitBlock/styles.ts", "../../../snap-design-system-marketing/src/components/Stats/Stats.tsx", "../../../snap-design-system-marketing/src/components/Stats/Stats.styled.ts", "../../../snap-design-system-marketing/src/components/SubNavigation/SubNavigation.tsx", "../../../snap-design-system-marketing/src/components/SubNavigation/styles.ts", "../../../snap-design-system-marketing/src/components/SubNavigation/SubNavigationItem.tsx", "../../../snap-design-system-marketing/src/components/Tabs/TabItems.tsx", "../../../snap-design-system-marketing/src/components/Tabs/styles.ts", "../../../snap-design-system-marketing/src/components/Tabs/TabArrows.tsx", "../../../snap-design-system-marketing/src/components/Tabs/Tabs.tsx", "../../../snap-design-system-marketing/src/components/Tabs/TabsPanels.tsx", "../../../snap-design-system-marketing/src/components/Tile/types.ts", "../../../snap-design-system-marketing/src/components/Tile/constants.ts", "../../../snap-design-system-marketing/src/components/Tile/Tile.tsx", "../../../snap-design-system-marketing/src/components/Tile/Tile.styled.ts", "../../../snap-design-system-marketing/src/components/Tile/utils.ts", "../../../snap-design-system-marketing/src/components/Topic/Topic.styles.tsx", "../../../snap-design-system-marketing/src/components/Topic/Topic.tsx", "../../../snap-design-system-marketing/src/components/visualizations/ChartSkeleton/styles.ts", "../../../snap-design-system-marketing/src/components/visualizations/ChartSkeleton/ChartSkeleton.tsx", "../../../snap-design-system-marketing/src/components/visualizations/ChartToggle/ChartToggle.tsx", "../../../snap-design-system-marketing/src/components/visualizations/ChartToggle/ChartToggleButton.tsx", "../../../snap-design-system-marketing/src/components/visualizations/ChartToggle/ChartToggleButtons.tsx", "../../../snap-design-system-marketing/src/components/visualizations/ChartToggle/ChartTogglePanels.tsx", "../../../snap-design-system-marketing/src/components/visualizations/ChartToggle/ChartTogglePanelsV2.tsx", "../../../snap-design-system-marketing/src/components/visualizations/ChartToggle/ChartToggleV2.tsx", "../../../snap-design-system-marketing/src/components/visualizations/ChartToggle/ChartToggleDropdowns.tsx", "../../../snap-design-system-marketing/src/components/visualizations/ChartToggle/ChartToggleWrapper.tsx", "../../../global-components/src/components/CookieModal/CookieModal.tsx", "../../../global-components/src/context/GlobalComponentsContext.tsx", "../../../global-components/src/components/CookieModal/analytics.ts", "../../../global-components/src/components/LocaleDropdown/LocaleDropdown.tsx", "../../../global-components/src/components/LocaleDropdown/localeConstants.ts", "../../../global-components/src/components/LocaleDropdown/LocaleDropdown.styles.ts", "../../../global-components/src/components/CookieModal/SdsmCookieModal.tsx", "../../../global-components/src/components/CookieModal/SdsmCookieModal.styles.ts", "../../../global-components/src/components/CookieModal/SdsmComponents.tsx", "../../../global-components/src/components/CookieSettings/CookieSettings.tsx", "../../../global-components/src/components/GlobalFooter/GlobalFooter.tsx", "../../../global-components/src/components/FooterV3/FooterCollectionV3/FooterCollectionV3.tsx", "../../../global-components/src/generated/contentful-types.ts", "../../../../node_modules/lodash-es/snakeCase.js", "../../../global-components/src/components/FooterV3/FooterItemV3/FooterItemV3.tsx", "../../../global-components/src/components/FooterV3/FooterGroup/FooterGroup.tsx", "../../../global-components/src/components/FooterV3/FooterGroup/FooterGroup.styles.ts", "../../../global-components/src/components/FooterV3/FooterLocaleDropdown/FooterLocaleDropdown.styles.ts", "../../../global-components/src/components/FooterV3/FooterLocaleDropdown/FooterLocaleDropdown.tsx", "../../../global-components/src/components/FooterV3/FooterCollectionV3/utils.ts", "../../../global-components/src/components/GlobalHeader/GlobalHeader.tsx", "../../../global-components/src/components/GlobalNavHighlight/GlobalNavHighlight.tsx", "../../../global-components/src/components/CallToAction/CallToAction.tsx", "../../../global-components/src/components/Button/Button.tsx", "../../../global-components/src/components/CallToAction/useActivation.tsx", "../../../contentful-client/src/contentfulImageUtils.ts", "../../../contentful-client/src/getImageUrl.ts", "../../../contentful-client/src/useContentfulImages.ts", "../../../global-components/src/components/Media/Media.tsx", "../../../global-components/src/components/Media/mediaUtils.ts", "../../../global-components/src/components/GlobalNavScreen/GlobalNavScreen.tsx", "../../../../node_modules/lodash-es/_baseFilter.js", "../../../../node_modules/lodash-es/negate.js", "../../../../node_modules/lodash-es/reject.js", "../../../global-components/src/components/GlobalNavGroupCollection/GlobalNavGroupCollection.tsx", "../../../global-components/src/components/GlobalNavGroup/GlobalNavGroup.tsx", "../../../global-components/src/components/GlobalNavItem/GlobalNavItem.tsx", "../../../global-components/src/components/GlobalNavHighlightCollection/GlobalNavHighlightCollection.tsx", "../../../global-components/src/components/Media/useMediaPreload.ts", "../../../../node_modules/@apollo/src/link/retry/delayFunction.ts", "../../../../node_modules/@apollo/src/link/retry/retryFunction.ts", "../../../../node_modules/@apollo/src/link/retry/retryLink.ts", "../../src/App.tsx", "../../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js", "../../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js", "../../../../node_modules/resolve-pathname/esm/resolve-pathname.js", "../../../../node_modules/tiny-invariant/dist/esm/tiny-invariant.js", "../../../../node_modules/history/esm/history.js", "../../../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js", "../../../../node_modules/react-router/modules/miniCreateReactContext.js", "../../../../node_modules/react-router/modules/createContext.js", "../../../../node_modules/react-router/modules/createNamedContext.js", "../../../../node_modules/react-router/modules/HistoryContext.js", "../../../../node_modules/react-router/modules/RouterContext.js", "../../../../node_modules/react-router/modules/Router.js", "../../../../node_modules/react-router/modules/MemoryRouter.js", "../../../../node_modules/react-router/modules/Lifecycle.js", "../../../../node_modules/react-router/modules/Prompt.js", "../../../../node_modules/react-router/modules/generatePath.js", "../../../../node_modules/react-router/modules/Redirect.js", "../../../../node_modules/react-router/modules/matchPath.js", "../../../../node_modules/react-router/modules/Route.js", "../../../../node_modules/react-router/modules/StaticRouter.js", "../../../../node_modules/react-router/modules/Switch.js", "../../../../node_modules/react-router/modules/withRouter.js", "../../../../node_modules/react-router/modules/hooks.js", "../../../../node_modules/react-router/modules/index.js", "../../../../node_modules/react-router-dom/modules/BrowserRouter.js", "../../../../node_modules/react-router-dom/modules/HashRouter.js", "../../../../node_modules/react-router-dom/modules/utils/locationUtils.js", "../../../../node_modules/react-router-dom/modules/Link.js", "../../../../node_modules/react-router-dom/modules/NavLink.js", "../../src/AppPortal.tsx", "../../src/components/Anchor/Anchor.tsx", "../../src/helpers/getLocalPath.ts", "../../src/helpers/redirectTo.ts", "../../src/helpers/businessHelpUrl.ts", "../../src/helpers/uri.ts", "../../src/helpers/getLinkProps.ts", "../../src/components/Cart/Cart.tsx", "../../src/context/ElementLocationContext/ElementLocationContext.ts", "../../src/components/AddToCart/AddToCart.tsx", "../../src/components/Cart/CartProvider.tsx", "../../src/components/Cart/useCart.ts", "../../src/components/ShopifyProvider/ShopifyProvider.tsx", "../../src/components/ShopifyProvider/normalizeCatalog.ts", "../../src/styles/screenSizes.ts", "../../src/styles/mediaQueries.ts", "../../src/components/AddToCart/styles.ts", "../../src/components/Cart/CartItem.tsx", "../../src/components/Cart/usePrice.ts", "../../src/components/Cart/Price.tsx", "../../src/components/Cart/styles.ts", "../../src/components/Cart/useCheckoutUrl.ts", "../../src/components/Cart/CartIcon.tsx", "../../src/components/ConsumerContextProvider/ConsumerContextProvider.tsx", "../../../../node_modules/lodash-es/_castFunction.js", "../../../../node_modules/lodash-es/forEach.js", "../../src/components/ConsumerContextProvider/utils.ts", "../../src/components/ContentfulLivePreview/ContentfulLivePreview.tsx", "../../src/components/useContentfulContext.ts", "../../src/utils/contentful/ContentfulContext.ts", "../../src/helpers/locale.ts", "../../src/components/ContentfulLivePreview/ContentfulLivePreviewContext.tsx", "../../src/components/CookiePopup/CookiePopup.tsx", "../../src/utils/persona/personaConstants.ts", "../../src/utils/persona/personaUtils.ts", "../../src/components/ShopifyProvider/submitShopifyTrackingConsent.ts", "../../src/components/DirectionDirective/DirectionDirective.tsx", "../../src/components/DirectionDirective/languageDirection.ts", "../../src/hooks/useContentfulQuery.ts", "../../../../node_modules/lodash-es/mapValues.js", "../../src/utils/contentful/convertNullsToUndefined.ts", "../../src/utils/contentful/contentfulQuery.ts", "../../src/components/Media/Media.tsx", "../../src/utils/getFileInfo.ts", "../../src/utils/isElementInViewport.ts", "../../src/components/Video/utils.ts", "../../src/components/Media/query.ts", "../../src/components/Favicon/query.ts", "../../src/components/Favicon/Favicon.tsx", "../../src/components/FooterWrapper/Footer.tsx", "../../src/context/PageLayoutContext.ts", "../../src/hooks/useAlternateBrandPropOverride.ts", "../../src/hooks/useBrand.ts", "../../src/hooks/useMotifScheme.ts", "../../src/components/CallToAction/CallToAction.tsx", "../../src/utils/contentful.ts", "../../src/utils/contentful/getContentfulInspectorProps.ts", "../../src/components/Button/Button.tsx", "../../src/utils/renderText/renderRichText.ts", "../../src/components/Hyperlink/Hyperlink.tsx", "../../src/utils/renderText/NoHeadingRichTextComponents.tsx", "../../src/utils/renderText/renderText.tsx", "../../../../node_modules/lodash-es/_arrayAggregator.js", "../../../../node_modules/lodash-es/_baseAggregator.js", "../../../../node_modules/lodash-es/_createAggregator.js", "../../../../node_modules/lodash-es/keyBy.js", "../../src/components/Hyperlink/AssetEntryHyperlink.tsx", "../../src/components/SuspenseWrapper.tsx", "../../src/components/Code/Code.tsx", "../../src/components/Code/query.ts", "../../src/components/Definition/Definition.tsx", "../../src/components/Definition/DefinitionContext.tsx", "../../src/components/Definition/DefinitionOverlay.tsx", "../../src/components/DownloadableAsset/query.ts", "../../src/components/DownloadableAsset/DownloadableAsset.tsx", "../../src/components/EmphasizedText/EmphasizedText.tsx", "../../src/components/EmphasizedText/query.ts", "../../src/components/FootnoteInline/FootnoteInline.styles.ts", "../../src/components/FootnoteInline/FootnoteInline.tsx", "../../src/utils/combineImageSources.ts", "../../src/utils/media.ts", "../../src/components/Image/utils.ts", "../../src/components/Image/Image.tsx", "../../src/components/Sticker/query.ts", "../../src/components/Image/query.ts", "../../src/components/Quote/query.ts", "../../src/components/Quote/Quote.tsx", "../../src/components/SnapchatEmbed/SnapchatEmbed.query.ts", "../../src/components/SnapchatEmbed/SnapchatEmbed.tsx", "../../src/components/Video/query.ts", "../../src/components/Video/Video.tsx", "../../src/hooks/useParseMediaContainer.ts", "../../src/utils/contentfulComponentMap.tsx", "../../src/utils/renderText/embeddedEntryStyles.ts", "../../src/utils/renderText/RichTextComponents.tsx", "../../../../node_modules/lodash-es/flatMap.js", "../../src/utils/renderText/textUtils.tsx", "../../src/components/Button/query.ts", "../../src/components/Analytics/query.ts", "../../src/components/CallToAction/query.ts", "../../src/components/Content/Content.tsx", "../../src/components/Animations/useEntranceAnimation.tsx", "../../src/components/ImageButton/LazyImageButton.tsx", "../../src/components/ImageButton/imageButtonQuery.ts", "../../src/components/Content/Content.styles.ts", "../../src/components/Animations/query.ts", "../../src/components/Definition/query.ts", "../../src/components/Footnote/Footnote.tsx", "../../src/components/Footnote/query.ts", "../../src/components/Stats/query.ts", "../../src/components/Content/queries.ts", "../../src/components/Block/query.ts", "../../src/components/Experiment/experimentQuery.ts", "../../src/components/Experiment/useExperiments.ts", "../../src/hooks/useAbExperiments.ts", "../../src/utils/adler32.ts", "../../src/hooks/useSingleCallback.ts", "../../src/utils/singleCallback.ts", "../../src/hooks/useUserBusinessProfile.ts", "../../src/hooks/useUserSnapProfile.ts", "../../src/components/Experiment/utils.ts", "../../src/components/FooterWrapper/Footer.styles.ts", "../../src/components/FooterWrapper/utils.ts", "../../src/components/HardcodedComponents/HardcodedComponents.tsx", "../../src/components/Header/Header.tsx", "../../src/components/NavigationCta/NavigationCta.tsx", "../../src/components/NavigationCta/query.ts", "../../src/components/GlobalHeaderCta/GlobalHeaderCta.tsx", "../../src/components/GlobalHeaderLogo/GlobalHeaderLogo.tsx", "../../src/components/GlobalHeaderSearch/GlobalHeaderSearch.tsx", "../../src/components/LocalNavDesktop/LocalNavDesktop.tsx", "../../src/components/LocalNavMobile/LocalNavMobile.tsx", "../../src/components/LocalNavMobile/LocalNavItemMobile.tsx", "../../src/components/useConsumerContext.ts", "../../src/components/Header/Header.styles.ts", "../../src/components/Header/headerNavGroupUtils.ts", "../../src/components/Header/HeaderPortal.tsx", "../../src/components/Header/headerSizeUtils.ts", "../../src/components/IntlProvider/index.tsx", "../../src/components/IntlProvider/query.ts", "../../src/components/LanguageDirective/LanguageDirective.tsx", "../../src/components/LanguageDirective/language.ts", "../../src/components/LoadingBar/LoadingBar.tsx", "../../src/utils/fetch/customFetch.ts", "../../src/utils/tracing/noopTracer.ts", "../../src/utils/tracing/tracer.ts", "../../../../node_modules/@snapchat/core-browser/src/useImperativeEffect.ts", "../../src/components/logging/LogAdBlockUsage.tsx", "../../src/components/logging/LogCspViolation.tsx", "../../src/utils/url/sanitizeCspResource.ts", "../../../../node_modules/lodash-es/_basePick.js", "../../../../node_modules/lodash-es/pick.js", "../../src/components/logging/LogPageLoad.tsx", "../../src/components/logging/LogScrollDepth.tsx", "../../src/components/MotifRootWrapper/MotifRootWrapper.tsx", "../../src/brands/snap/snapMotif.ts", "../../src/styles/customBlueMotif.ts", "../../src/styles/customGreenMotif.ts", "../../src/components/Viewport/Viewport.tsx", "../../src/context/PageLayoutProvider.tsx", "../../src/context/SitewideConfiguration/SitewideConfigurationProvider.tsx", "../../src/components/FooterWrapper/query.ts", "../../src/components/Header/headerQuery.ts", "../../src/context/SitewideConfiguration/SitewideConfigurationQuery.ts", "../../src/ErrorBoundary.tsx", "../../src/pages/Error500/Error500.tsx", "../../src/helpers/FontChecker.tsx", "../../../../node_modules/@snapchat/logging-browser/src/BlizzardClientEventListener.ts", "../../../../node_modules/@snapchat/logging-browser/src/ConsoleClientEventListener.ts", "../../../../node_modules/@snapchat/logging-browser/src/GoogleAnalytics4EventListener.ts", "../../../../node_modules/@snapchat/logging-browser/src/GoogleTagManagerClientEventListener.ts", "../../../../node_modules/@snapchat/logging-browser/src/GrapheneClientEventListener.ts", "../../../../node_modules/@snapchat/logging-browser/src/SentryClientEventListener.ts", "../../src/helpers/logging/google/GoogleEventListener.ts", "../../src/Routes.tsx", "../../src/components/Block/Block.tsx", "../../src/components/Accordion/Accordion.tsx", "../../src/components/Accordion/query.ts", "../../src/components/AnimatedAccordion/AnimatedAccordion.tsx", "../../src/components/AnimatedAccordion/query.ts", "../../src/components/CarouselV3/CarouselV3.tsx", "../../src/components/CarouselV3/CarouselV3ImageItem.tsx", "../../src/components/CarouselV3/CarouselV3TextItem.tsx", "../../src/components/CarouselV3/CarouselV3VideoItem.tsx", "../../src/components/CarouselV3/queries.ts", "../../src/components/Content/ContentShallow.tsx", "../../src/components/Form/Form.tsx", "../../src/hooks/useArkose.ts", "../../src/constants/arkose.ts", "../../src/components/Form/FieldByType.tsx", "../../src/components/Form/utils.ts", "../../src/components/Form/queries.ts", "../../src/components/Form/FormShallow.tsx", "../../src/components/Gallery/EditorialGallery.tsx", "../../src/components/Gallery/constants.ts", "../../src/components/EditorialGalleryCard/EditorialGalleryCard.tsx", "../../src/constants/gallery.ts", "../../src/hooks/useFormatDate.ts", "../../src/components/Tile/query.ts", "../../src/components/Topic/Topic.query.ts", "../../src/components/Gallery/query.ts", "../../src/components/Gallery/styles.ts", "../../src/components/Gallery/EditorialGalleryLazyTiles.tsx", "../../src/components/Gallery/Gallery.tsx", "../../src/components/SummaryCard/SummaryCard.tsx", "../../src/components/SummaryCard/SummaryCard.styled.ts", "../../src/components/Gallery/LazyTiles.tsx", "../../src/components/Gallery/useGalleryTiles.ts", "../../src/components/Gallery/utils.ts", "../../src/components/Gallery/LazyGallery.tsx", "../../src/components/Mosaic/Mosaic.tsx", "../../src/components/Mosaic/query.ts", "../../src/components/Mosaic/MosaicShallow.tsx", "../../src/components/RelatedContent/RelatedContent.tsx", "../../src/components/Slug/SlugContext.tsx", "../../src/components/RelatedContent/query.ts", "../../src/components/RelatedContent/useRelatedContent.ts", "../../src/components/Tabs/queries.ts", "../../src/components/Tabs/Tabs.tsx", "../../src/components/visualizations/BarChart/BarChart.tsx", "../../src/components/visualizations/query.ts", "../../src/components/visualizations/BarChart/query.ts", "../../src/components/visualizations/BarChart/BarChartShallow.tsx", "../../src/components/visualizations/ChartToggle/ChartToggle.tsx", "../../src/components/visualizations/GeoMap/GeoMap.tsx", "../../src/components/visualizations/GeoMap/query.ts", "../../src/components/visualizations/GeoMap/GeoMapShallow.tsx", "../../src/components/visualizations/LineChart/LineChart.tsx", "../../src/components/visualizations/LineChart/query.ts", "../../src/components/visualizations/LineChart/LineChartShallow.tsx", "../../src/components/visualizations/Table/query.ts", "../../src/components/visualizations/Table/Table.tsx", "../../src/components/visualizations/Table/TableShallow.tsx", "../../src/components/visualizations/ChartToggle/query.ts", "../../src/components/visualizations/ChartToggle/ChartToggleWrapper.tsx", "../../src/components/visualizations/MultiVisualization/MultiVisualization.tsx", "../../src/components/visualizations/MultiVisualization/query.ts", "../../src/components/BlockTabs/BlockTabs.tsx", "../../src/components/MultiValuePropBlock/MultiValuePropBlock.tsx", "../../src/components/MultiValuePropBlock/ImageSubtopic.tsx", "../../src/components/MultiValuePropBlock/StatSubtopic.tsx", "../../src/components/MultiValuePropBlock/TextSubtopic.tsx", "../../src/components/MultiValuePropBlock/query.ts", "../../src/components/BlockTabs/query.ts", "../../src/components/Break/query.ts", "../../src/components/Hero/Hero.tsx", "../../src/components/Breadcrumbs/query.ts", "../../src/components/Breadcrumbs/utils.ts", "../../src/utils/renderString.tsx", "../../src/components/Hero/getHeroHeaderComponent.tsx", "../../src/components/Hero/utils.ts", "../../src/components/Hero/query.ts", "../../src/components/ImmersiveScrollBlock/ImmersiveScrollBlockCard.tsx", "../../src/components/ImmersiveScrollBlock/ImmersiveScrollBlock.tsx", "../../src/components/Tile/Tile.tsx", "../../src/components/ImmersiveScrollBlock/query.ts", "../../src/components/Metas/Metas.tsx", "../../src/components/WebSchema/blogSchemaQuery.ts", "../../src/components/WebSchema/faqPageSchemaQuery.ts", "../../src/components/WebSchema/generateWebSchema.ts", "../../src/components/WebSchema/organizationSchemaQuery.ts", "../../src/components/WebSchema/WebSchemas.tsx", "../../src/components/Metas/query.ts", "../../src/components/ScrollAnimatedSection/query.ts", "../../src/components/SplitBlock/SplitBlock.query.ts", "../../src/components/SubNavigation/query.ts", "../../src/components/SubNavigation/SubNavigation.tsx", "../../src/components/Page/Page.tsx", "../../src/utils/direction.ts", "../../src/components/AlternateLang/AlternateLang.tsx", "../../src/helpers/filterMetadataUrl.ts", "../../src/components/Canonical/Canonical.tsx", "../../src/sites/snap/components/CookieInformationBlock/CookieInformationBlock.tsx", "../../src/sites/snap/components/CookieInformationBlock/CookieInformationBlock.query.ts", "../../src/sites/snap/pages/SnapHomePage.tsx", "../../src/components/Block/BlockShallow.tsx", "../../src/sites/snap/components/CardBlock/CardBlock.tsx", "../../src/sites/snap/components/AnimatedMediaCard/AnimatedMediaCard.tsx", "../../src/sites/snap/components/AnimatedMediaCard/AnimatedMediaCard.styles.ts", "../../src/sites/snap/components/CardBlock/CardBlock.styles.ts", "../../src/sites/snap/components/CardBlock/CardBlock.query.ts", "../../src/sites/snap/components/CardBlock/CardBlockShallow.tsx", "../../src/sites/snap/components/LatestNewsBlock/LatestNewsBlock.styles.ts", "../../src/sites/snap/context/useNewsroomContentfulContext.ts", "../../../../node_modules/@apollo/src/link/error/index.ts", "../../src/utils/contentful/getQueryName.ts", "../../src/utils/contentful/ContentfulCache.ts", "../../src/utils/contentful/queryOptimizeVisitor.ts", "../../src/utils/contentful/RequestLatencyLogLink.ts", "../../src/utils/contentful/ContentfulProvider.tsx", "../../src/utils/contentful/ContentfulClientCache.ts", "../../src/sites/snap/hooks/useNewsroomGalleryTiles.ts", "../../src/sites/snap/hooks/useNewsroomContentfulQuery.ts", "../../src/sites/snap/components/LatestNewsBlock/LatestNewsBlockLoading.tsx", "../../src/sites/snap/components/LatestNewsBlock/LatestNewsBlockTiles.tsx", "../../src/sites/snap/components/LatestNewsBlock/LatestNewsBlockGallery.tsx", "../../src/sites/snap/components/LatestNewsBlock/LatestNewsBlock.tsx", "../../src/sites/snap/components/LatestNewsBlock/LatestNewsBlock.query.tsx", "../../src/sites/snap/components/LatestNewsBlock/LatestNewsBlockShallow.tsx", "../../src/sites/snap/components/SideMenu/SideMenu.tsx", "../../src/sites/snap/components/SideMenu/SideMenu.styles.ts", "../../src/sites/snap/components/SnapHomeHero/SnapHomeHero.tsx", "../../src/sites/snap/components/SnapHomeHero/SnapHomeHero.styles.ts", "../../src/sites/snap/components/SnapHomeHero/SnapHomeHero.query.ts", "../../src/sites/snap/components/SnapHomeHero/SnapHomeHeroShallow.tsx", "../../src/sites/snap/components/SnapHomePageWrapper/SnapHomePageWrapper.tsx", "../../src/sites/snap/styleConstants.ts", "../../src/sites/snap/components/SnapHomePageWrapper/SnapHomePageWrapper.styles.ts", "../../src/sites/snap/pages/SnapHomePage.query.ts", "../../src/sites/snap/pages/SnapHomePage.styles.ts", "../../src/sites/snap/pages/SnapHomePageV2.tsx", "../../src/sites/snap/pages/SnapHomePageV2.query.ts", "../../src/sites/snap/pages/SnapHomePageV2.styles.ts", "../../src/components/QuestionnaireBlock/queries.ts", "../../src/components/QuestionnaireBlock/QuestionnaireBlock.tsx", "../../src/components/customComponents.ts", "../../src/components/Hero/LatestPostHero.tsx", "../../src/components/Page/pageAssetQuery.ts", "../../src/components/Hero/latestPostQuery.ts", "../../src/components/HlsInitializer/HlsInitializer.tsx", "../../src/components/LatestPostBlock/query.ts", "../../src/components/LatestPostBlock/LatestPostBlock.tsx", "../../src/components/MultiVideoBlock/query.ts", "../../src/components/MultiVideoBlock/MultiVideoBlock.tsx", "../../src/components/PersistentCta/PersistentCta.tsx", "../../src/components/PersistentCta/PersistentCta.styles.ts", "../../src/components/ScrollAnimatedSection/ScrollAnimatedSection.tsx", "../../src/components/Slug/Slug.styles.tsx", "../../src/components/SplitBlock/SplitBlock.tsx", "../../src/components/tracing/ActiveEventCountTracker.tsx", "../../src/components/Page/Page.styles.ts", "../../src/components/Page/PageBottomStickyPortal.tsx", "../../src/components/Page/PageFixedPortal.tsx", "../../src/components/Page/pageStickyUtils.ts", "../../src/components/Page/pageQuery.ts", "../../src/components/Slug/allSideNavQuery.ts", "../../src/components/Slug/Slug.tsx", "../../src/components/SideNavigation/query.ts", "../../src/components/SideNavigation/SideNavigation.tsx", "../../src/components/SideNavigation/styles.ts", "../../src/pages/NoMatch/NoMatch.tsx", "../../src/components/Page/PageShallow.tsx", "../../src/utils/contentful/contentfulTypeQueries.ts", "../../src/pages/NoMatch/NoMatchDefault.tsx", "../../src/pages/NoMatch/styles.ts", "../../src/pages/NoMatch/query.ts", "../../src/components/Redirect/Redirect.tsx", "../../src/components/Redirect/redirectQuery.ts", "../../src/components/Slug/slugQuery.ts", "../../src/components/Slug/slugCollectionQuery.ts", "../../src/components/Slug/SlugCollection.tsx", "../../src/components/Slug/slugNavigationQuery.ts", "../../src/components/Slug/useSlugToNavMap.ts", "../../src/pages/CookieSettings/CookieSettings.tsx", "../../src/pages/Search/Search.tsx", "../../src/components/Search/NoResultsFound/NoResultsFound.styles.ts", "../../src/components/Search/NoResultsFound/NoResultsFound.tsx", "../../src/components/Search/Search.types.ts", "../../src/components/Search/SearchResultItem/SearchResultItem.styled.ts", "../../src/components/Search/SearchResultItem/SearchResultItem.tsx", "../../src/hooks/useQueryParams.ts", "../../src/hooks/useSearchResults.ts", "../../src/pages/Search/styles.ts", "../../src/sites/snap/components/PoliticalAdAsset/PoliticalAdAsset.tsx", "../../src/sites/snap/components/PoliticalAdAsset/PoliticalAdAsset.styles.ts", "../../src/styles/getSiteFontFallbacks.ts", "../../src/styles/getSiteMotif.ts", "../../../../node_modules/web-vitals/dist/web-vitals.js", "../../src/utils/initWebVitalsLogging.ts", "../../src/utils/userAgent/userAgentHints.ts", "../../src/utils/cookies/CookieManager.ts", "../../src/clientonly/BrowserCookieManager.ts", "../../src/clientonly/browserCreateUuidV4.ts", "../../../../node_modules/lodash-es/_createFind.js", "../../../../node_modules/lodash-es/findLastIndex.js", "../../../../node_modules/lodash-es/findLast.js", "../../../../node_modules/lodash-es/isString.js", "../../../../node_modules/lodash-es/_asciiSize.js", "../../../../node_modules/lodash-es/_unicodeSize.js", "../../../../node_modules/lodash-es/_stringSize.js", "../../../../node_modules/lodash-es/size.js", "../../src/helpers/logging/blizzard/eventFormats/marketingWeb.ts", "../../src/helpers/logging/blizzard/eventFormats/forBusiness.ts", "../../src/helpers/logging/graphene/utils.ts", "../../src/helpers/logging/sentry/beforeSend.ts", "../../src/clientonly/ClientExportEventListener.ts", "../../src/clientonly/loggingInitClient.ts", "../../src/clientonly/loggingStartClient.ts", "../../src/utils/contentful/contentfulUrlOverrides.ts", "../../src/utils/contentful/generateFragmentTypes.ts", "../../src/utils/tracing/browserTracer.ts", "../../src/utils/webClientId/webClientIdConstants.ts", "../../src/utils/webClientId/webClientIdUtils.ts"],
  "sourcesContent": ["{\n    \"warning\": \"\u062A\u062D\u0630\u064A\u0631\",\n    \"message\": \"\u0644\u0627 \u062A\u062F\u062E\u0644 \u0631\u0645\u0632\u064B\u0627 \u0644\u0627 \u062A\u0641\u0647\u0645\u0647 \u0623\u0648 \u062A\u0644\u0635\u0642\u0647.\\n\u0642\u062F \u064A\u0633\u0645\u062D \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0648\u062D\u062F\u0629 \u0627\u0644\u062A\u062D\u0643\u0645 \u0647\u0630\u0647 \u0644\u0644\u0645\u0639\u062A\u062F\u064A\u0646 \u0628\u0627\u0646\u062A\u062D\u0627\u0644 \u0634\u062E\u0635\u064A\u062A\u0643 \u0648\u0633\u0631\u0642\u0629 \u0645\u0639\u0644\u0648\u0645\u0627\u062A\u0643 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0647\u062C\u0645\u0629 \u062A\u0633\u0645\u0649 \\\"\u0627\u0644\u0647\u062C\u0648\u0645 \u0627\u0644\u0630\u0627\u062A\u064A XSS\\\".\"\n}\n", "{\n    \"warning\": \"\u09B8\u09A4\u09B0\u09CD\u0995\u09C0\u0995\u09B0\u09A3!\",\n    \"message\": \"\u0986\u09AA\u09A8\u09BF \u09AC\u09C1\u099D\u09A4\u09C7 \u09AA\u09BE\u09B0\u099B\u09C7 \u09A8\u09BE \u098F\u09AE\u09A8 \u0995\u09CB\u09A1 \u09B2\u09BF\u0996\u09AC\u09C7 \u09A8\u09BE \u09AC\u09BE \u09AA\u09C7\u09B8\u09CD\u099F \u0995\u09B0\u09AC\u09C7\u09A8 \u09A8\u09BE\u0964\\n\u098F\u0987 \u0995\u09A8\u09B8\u09CB\u09B2\u099F\u09BF \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0995\u09B0\u09C7 \u0986\u0995\u09CD\u09B0\u09AE\u09A3\u0995\u09BE\u09B0\u09C0\u09B0\u09BE \u0986\u09AA\u09A8\u09BE\u09B0 \u099B\u09A6\u09CD\u09AE\u09AC\u09C7\u09B6 \u09A7\u09BE\u09B0\u09A3 \u0995\u09B0\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7 \u098F\u09AC\u0982 Self-XSS \u09A8\u09BE\u09AE\u0995 \u0986\u0995\u09CD\u09B0\u09AE\u09A3 \u09AA\u09A6\u09CD\u09A7\u09A4\u09BF \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0995\u09B0\u09C7 \u0986\u09AA\u09A8\u09BE\u09B0 \u09A4\u09A5\u09CD\u09AF \u099A\u09C1\u09B0\u09BF \u0995\u09B0\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u0964\"\n}\n", "{\n    \"warning\": \"\u09B8\u09A4\u09B0\u09CD\u0995\u09A4\u09BE!\",\n    \"message\": \"\u0986\u09AA\u09A8\u09BF \u09AC\u09C1\u099D\u09A4\u09C7 \u09AA\u09BE\u09B0\u099B\u09C7 \u09A8\u09BE \u098F\u09AE\u09A8 \u0995\u09CB\u09A1 \u09B2\u09BF\u0996\u09AC\u09C7\u09A8 \u09A8\u09BE \u09AC\u09BE \u09AA\u09C7\u09B8\u09CD\u099F \u0995\u09B0\u09AC\u09C7\u09A8 \u09A8\u09BE\u0964\\n\u098F\u0987 \u0995\u09A8\u09B8\u09CB\u09B2\u099F\u09BF \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0995\u09B0\u09C7 \u0986\u0995\u09CD\u09B0\u09AE\u09A3\u0995\u09BE\u09B0\u09C0\u09B0\u09BE \u0986\u09AA\u09A8\u09BE\u09B0 \u099B\u09A6\u09CD\u09AE\u09AC\u09C7\u09B6 \u09A8\u09BF\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7 \u098F\u09AC\u0982 Self-XSS \u09A8\u09BE\u09AE\u09C7 \u098F\u0995\u099F\u09BF \u0986\u0995\u09CD\u09B0\u09AE\u09A3 \u09AA\u09A6\u09CD\u09A7\u09A4\u09BF \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0995\u09B0\u09C7 \u0986\u09AA\u09A8\u09BE\u09B0 \u09A4\u09A5\u09CD\u09AF \u09B9\u09BE\u09A4\u09BF\u09DF\u09C7 \u09A8\u09BF\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u0964\"\n}\n", "{\n    \"warning\": \"ADVARSEL!\",\n    \"message\": \"Undlad at indtaste eller inds\u00E6tte kode, som du ikke forst\u00E5r.\\nBrug af denne konsol kan s\u00E6tte hackere i stand til at efterligne dig og stj\u00E6le dine oplysninger ved hj\u00E6lp af et angreb ved navn Self-XSS.\"\n}\n", "{\n    \"warning\": \"WARNUNG!\",\n    \"message\": \"Gib oder f\u00FCge keinen Code ein, den du nicht verstehst.\\nDiese Konsole erm\u00F6glicht es Angreifern, sich als du auszugeben und deine Daten mithilfe eines Angriffs namens Self-XSS zu stehlen.\"\n}\n", "{\n    \"warning\": \"\u03A0\u03A1\u039F\u03A3\u039F\u03A7\u0397!\",\n    \"message\": \"\u039C\u03B7\u03BD \u03B5\u03B9\u03C3\u03AC\u03B3\u03B5\u03B9\u03C2 \u03AE \u03BA\u03AC\u03BD\u03B5\u03B9\u03C2 \u03B5\u03C0\u03B9\u03BA\u03CC\u03BB\u03BB\u03B7\u03C3\u03B7 \u03BA\u03C9\u03B4\u03B9\u03BA\u03CE\u03BD \u03C0\u03BF\u03C5 \u03B4\u03B5\u03BD \u03BA\u03B1\u03C4\u03B1\u03BD\u03BF\u03B5\u03AF\u03C2.\\n\u0397 \u03C7\u03C1\u03AE\u03C3\u03B7 \u03B1\u03C5\u03C4\u03AE\u03C2 \u03C4\u03B7\u03C2 \u03BA\u03BF\u03BD\u03C3\u03CC\u03BB\u03B1\u03C2 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03C0\u03B9\u03B8\u03B1\u03BD\u03CC \u03BD\u03B1 \u03B5\u03C0\u03B9\u03C4\u03C1\u03AD\u03C8\u03B5\u03B9 \u03C3\u03C4\u03BF\u03C5\u03C2 \u03B5\u03B9\u03C3\u03B2\u03BF\u03BB\u03B5\u03AF\u03C2 \u03BD\u03B1 \u03C0\u03C1\u03BF\u03C3\u03C0\u03BF\u03B9\u03B7\u03B8\u03BF\u03CD\u03BD \u03CC\u03C4\u03B9 \u03B5\u03AF\u03C3\u03B1\u03B9 \u03B5\u03C3\u03CD \u03BA\u03B1\u03B9 \u03BD\u03B1 \u03BA\u03BB\u03AD\u03C8\u03BF\u03C5\u03BD \u03C4\u03B9\u03C2 \u03C0\u03BB\u03B7\u03C1\u03BF\u03C6\u03BF\u03C1\u03AF\u03B5\u03C2 \u03C3\u03BF\u03C5 \u03BC\u03AD\u03C3\u03C9 \u03BC\u03B9\u03B1\u03C2 \u03B5\u03C0\u03AF\u03B8\u03B5\u03C3\u03B7\u03C2 \u03C0\u03BF\u03C5 \u03BB\u03AD\u03B3\u03B5\u03C4\u03B1\u03B9 Self-XSS.\"\n}\n", "{\n    \"warning\": \"WARNING!\",\n    \"message\": \"Do not enter or paste code that you do not understand.\\nUsing this console could allow attackers to impersonate you and steal your information using an attack called Self-XSS.\"\n}\n", "{\n    \"warning\": \"WARNING!\",\n    \"message\": \"Do not enter or paste code that you do not understand.\\nUsing this console may allow attackers to impersonate you and steal your information using an attack called Self-XSS.\"\n}\n", "{\n    \"warning\": \"\u00A1ADVERTENCIA!\",\n    \"message\": \"No ingreses ni pegues c\u00F3digo que no entiendas.\\nSi us\u00E1s esta consola, los atacantes podr\u00EDan hacerse pasar por vos y robar tu informaci\u00F3n por medio de un ataque llamado Self-XSS.\"\n}\n", "{\n    \"warning\": \"\u00A1ADVERTENCIA!\",\n    \"message\": \"No introduzcas ni pegues c\u00F3digos que no comprendas.\\nSi usas esta consola, los atacantes podr\u00EDan suplantar tu identidad y robar tu informaci\u00F3n mediante un ataque llamado Self-XSS.\"\n}\n", "{\n    \"warning\": \"\u00A1ADVERTENCIA!\",\n    \"message\": \"No escribas o pegues c\u00F3digo que no entiendas.\\nUsar esta consola podr\u00EDa permitir que personas malintencionadas roben tu identidad y tu informaci\u00F3n usando un ataque llamado Self-XSS.\"\n}\n", "{\n    \"warning\": \"\u00A1ADVERTENCIA!\",\n    \"message\": \"No ingreses ni pegues c\u00F3digo que no entiendes.\\nSi usas esta consola, puedes permitir que los atacantes se hagan pasar por ti y roben tu informaci\u00F3n con un ataque conocido como Self-XSS.\"\n}\n", "{\n    \"warning\": \"VAROITUS!\",\n    \"message\": \"\u00C4l\u00E4 anna tai liit\u00E4 t\u00E4h\u00E4n koodia, jota et ymm\u00E4rr\u00E4.\\nT\u00E4m\u00E4n konsolin k\u00E4ytt\u00E4minen saattaa johtaa XSS-hy\u00F6kk\u00E4ykseen, jolloin hy\u00F6kk\u00E4\u00E4j\u00E4t pystyv\u00E4t esiintym\u00E4\u00E4n sinuna ja varastamaan tietosi.\"\n}\n", "{\n    \"warning\": \"BABALA!\",\n    \"message\": \"Huwag maglagay o mag-paste ng code na hindi mo naiintindihan\\nAng paggamit sa console na ito ay puwedeng magbigay-daan sa mga attacker na magpanggap bilang ikaw at nakawin ang iyong impormasyon gamit ang isang attack na tinatawag na Self-XSS.\"\n}\n", "{\n    \"warning\": \"ATTENTION\u00A0!\",\n    \"message\": \"Ne saisissez pas ou ne collez pas de code que vous ne comprenez pas.\\nL'utilisation de cette console risque de permettre aux hackers de se faire passer pour vous et de voler vos informations au moyen d'une attaque appel\u00E9e Self-XSS.\"\n}\n", "{\n    \"warning\": \"\u0A9A\u0AC7\u0AA4\u0AB5\u0AA3\u0AC0!\",\n    \"message\": \"\u0AA4\u0AAE\u0AC7 \u0AB8\u0AAE\u0A9C\u0AA4\u0ABE \u0AA8 \u0AB9\u0ACB \u0A8F\u0AB5\u0ACB \u0A95\u0ACB\u0AA1 \u0AB2\u0A96\u0AB6\u0ACB \u0A95\u0AC7 \u0AAA\u0AC7\u0AB8\u0ACD\u0A9F \u0A95\u0AB0\u0AB6\u0ACB \u0AA8\u0AB9\u0AC0\u0A82.\\n\u0A86 \u0A95\u0AA8\u0ACD\u0AB8\u0ACB\u0AB2\u0AA8\u0ACB \u0A89\u0AAA\u0AAF\u0ACB\u0A97 \u0A95\u0AB0\u0AB5\u0ABE\u0AA5\u0AC0 \u0AB9\u0AC1\u0AAE\u0AB2\u0ABE\u0A96\u0ACB\u0AB0\u0ACB \u0AB8\u0AC7\u0AB2\u0ACD\u0AAB-XSS \u0AA8\u0ABE\u0AAE\u0AA8\u0ABE \u0AB9\u0AC1\u0AAE\u0AB2\u0ABE\u0AA8\u0ACB \u0A89\u0AAA\u0AAF\u0ACB\u0A97 \u0A95\u0AB0\u0AC0\u0AA8\u0AC7 \u0AA4\u0AAE\u0AC7 \u0AB9\u0ACB\u0AB5\u0ABE\u0AA8\u0AC1\u0A82 \u0A85\u0AA8\u0AC1\u0A95\u0AB0\u0AA3 \u0A95\u0AB0\u0AC0 \u0AB6\u0A95\u0AC7 \u0A9B\u0AC7 \u0A85\u0AA8\u0AC7 \u0AA4\u0AAE\u0ABE\u0AB0\u0AC0 \u0AAE\u0ABE\u0AB9\u0ABF\u0AA4\u0AC0 \u0A9A\u0ACB\u0AB0\u0AC0 \u0AB6\u0A95\u0AC7 \u0A9B\u0AC7.\"\n}\n", "{\n    \"warning\": \"\u091A\u0947\u0924\u093E\u0935\u0928\u0940!\",\n    \"message\": \"\u0915\u094B\u0908 \u0910\u0938\u093E \u0915\u094B\u0921 \u0926\u0930\u094D\u091C \u092F\u093E \u092A\u0947\u0938\u094D\u091F \u0928 \u0915\u0930\u0947\u0902 \u091C\u094B \u0906\u092A\u0915\u0940 \u0938\u092E\u091D \u0938\u0947 \u092A\u0930\u0947 \u0939\u094B\u0964\\n\u0907\u0938 \u0915\u0902\u0938\u094B\u0932 \u0915\u093E \u0907\u0938\u094D\u0924\u0947\u092E\u093E\u0932 \u0915\u0930\u0928\u0947 \u0938\u0947 \u0939\u092E\u0932\u093E\u0935\u0930 Self-XSS \u0915\u0939\u0947 \u091C\u093E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0939\u092E\u0932\u0947 \u0915\u093E \u0907\u0938\u094D\u0924\u0947\u092E\u093E\u0932 \u0915\u0930\u0924\u0947 \u0939\u0941\u090F \u0906\u092A\u0915\u093E \u092D\u0947\u0937 \u0927\u093E\u0930\u0923 \u0915\u0930\u0915\u0947 \u0906\u092A\u0915\u0940 \u091C\u093E\u0928\u0915\u093E\u0930\u0940 \u091A\u0941\u0930\u093E \u0938\u0915\u0924\u0947 \u0939\u0948\u0902\u0964\"\n}\n", "{\n    \"warning\": \"PERINGATAN!\",\n    \"message\": \"Jangan memasukkan atau menempelkan kode yang tidak Anda pahami.\\nMenggunakan konsol ini dapat memberikan akses kepada penyerang untuk menyamar sebagai Anda dan mencuri informasi menggunakan serangan yang disebut Self-XSS.\"\n}\n", "{\n    \"warning\": \"ATTENZIONE!\",\n    \"message\": \"Non inserire o incollare codici che non conosci.\\nL'utilizzo di questa console potrebbe consentire a utenti malintenzionati di assumere la tua identit\u00E0 e rubare le tue informazioni tramite un attacco chiamato Self-XSS.\"\n}\n", "{\n    \"warning\": \"\u8B66\u544A\uFF01\",\n    \"message\": \"\u4E0D\u660E\u306A\u30B3\u30FC\u30C9\u3092\u5165\u529B\u307E\u305F\u306F\u8CBC\u308A\u4ED8\u3051\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002\\n\u3053\u306E\u30B3\u30F3\u30BD\u30FC\u30EB\u3092\u4F7F\u7528\u3059\u308B\u3068\u3001\u653B\u6483\u8005\u304CSelf-XSS\u3068\u3044\u3046\u653B\u6483\u3092\u4F7F\u7528\u3057\u3066\u3042\u306A\u305F\u306B\u306A\u308A\u3059\u307E\u3057\u3001\u60C5\u5831\u3092\u76D7\u3080\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\"\n}\n", "{\n    \"warning\": \"\u0C8E\u0C9A\u0CCD\u0C9A\u0CB0\u0CBF\u0C95\u0CC6!\",\n    \"message\": \"\u0CA8\u0CBF\u0CAE\u0C97\u0CC6 \u0C85\u0CB0\u0CCD\u0CA5\u0CB5\u0CBE\u0C97\u0CA6 \u0C95\u0CCB\u0CA1\u0CCD \u0C85\u0CA8\u0CCD\u0CA8\u0CC1 \u0CA8\u0CAE\u0CC2\u0CA6\u0CBF\u0CB8\u0CAC\u0CC7\u0CA1\u0CBF \u0C85\u0CA5\u0CB5\u0CBE \u0C85\u0C82\u0C9F\u0CBF\u0CB8\u0CAC\u0CC7\u0CA1\u0CBF.\\n\u0C88 \u0C95\u0CA8\u0CCD\u0CB8\u0CCB\u0CB2\u0CCD \u0CAC\u0CB3\u0CB8\u0CC1\u0CB5\u0CC1\u0CA6\u0CB0\u0CBF\u0C82\u0CA6 \u0CA6\u0CBE\u0CB3\u0CBF\u0C95\u0CCB\u0CB0\u0CB0\u0CC1 \u0CA8\u0CBF\u0CAE\u0CCD\u0CAE\u0C82\u0CA4\u0CC6 \u0CB8\u0CCB\u0C97\u0CC1 \u0CB9\u0CBE\u0C95\u0CB2\u0CC1 \u0CAE\u0CA4\u0CCD\u0CA4\u0CC1 Self-XSS \u0C8E\u0CA8\u0CCD\u0CA8\u0CC1\u0CB5 \u0C92\u0C82\u0CA6\u0CC1 \u0CA6\u0CBE\u0CB3\u0CBF\u0CAF\u0CA8\u0CCD\u0CA8\u0CC1 \u0CAC\u0CB3\u0CB8\u0CBF\u0C95\u0CCA\u0C82\u0CA1\u0CC1 \u0CA8\u0CBF\u0CAE\u0CCD\u0CAE \u0CAE\u0CBE\u0CB9\u0CBF\u0CA4\u0CBF\u0CAF\u0CA8\u0CCD\u0CA8\u0CC1 \u0C95\u0CA6\u0CBF\u0CAF\u0CB2\u0CC1 \u0C85\u0CB5\u0C95\u0CBE\u0CB6 \u0CAE\u0CBE\u0CA1\u0CBF\u0C95\u0CCA\u0CA1\u0CAC\u0CB9\u0CC1\u0CA6\u0CC1.\"\n}\n", "{\n    \"warning\": \"\uACBD\uACE0!\",\n    \"message\": \"\uBAA8\uB974\uB294 \uCF54\uB4DC\uB97C \uC785\uB825\uD558\uAC70\uB098 \uBD99\uC5EC\uB123\uC9C0 \uB9C8\uC138\uC694.\\n\uC774 \uCF58\uC194\uC744 \uC0AC\uC6A9\uD558\uBA74 \uD574\uCEE4\uAC00 Self-XSS\uB77C\uACE0 \uBD88\uB9AC\uB294 \uACF5\uACA9\uC744 \uC0AC\uC6A9\uD574 \uD68C\uC6D0\uB2D8\uC744 \uC0AC\uCE6D\uD558\uC5EC \uAC1C\uC778 \uC815\uBCF4\uB97C \uD6D4\uCCD0 \uAC08 \uC218\uB3C4 \uC788\uC2B5\uB2C8\uB2E4.\"\n}\n", "{\n    \"warning\": \"\u0D2E\u0D41\u0D28\u0D4D\u0D28\u0D31\u0D3F\u0D2F\u0D3F\u0D2A\u0D4D\u0D2A\u0D4D!\",\n    \"message\": \"\u0D28\u0D3F\u0D19\u0D4D\u0D19\u0D7E\u0D15\u0D4D\u0D15\u0D4D \u0D2E\u0D28\u0D38\u0D4D\u0D38\u0D3F\u0D32\u0D3E\u0D15\u0D3E\u0D24\u0D4D\u0D24 \u0D15\u0D4B\u0D21\u0D4D \u0D28\u0D7D\u0D15\u0D41\u0D15\u0D2F\u0D4B \u0D12\u0D1F\u0D4D\u0D1F\u0D3F\u0D15\u0D4D\u0D15\u0D41\u0D15\u0D2F\u0D4B \u0D1A\u0D46\u0D2F\u0D4D\u0D2F\u0D30\u0D41\u0D24\u0D4D.\\n\u0D08 \u0D15\u0D7A\u0D38\u0D4B\u0D7E \u0D09\u0D2A\u0D2F\u0D4B\u0D17\u0D3F\u0D15\u0D4D\u0D15\u0D41\u0D28\u0D4D\u0D28\u0D24\u0D3F\u0D32\u0D42\u0D1F\u0D46, Self-XSS \u0D0E\u0D28\u0D4D\u0D28\u0D4D \u0D05\u0D31\u0D3F\u0D2F\u0D2A\u0D4D\u0D2A\u0D46\u0D1F\u0D41\u0D28\u0D4D\u0D28 \u0D06\u0D15\u0D4D\u0D30\u0D2E\u0D23\u0D02 \u0D35\u0D34\u0D3F \u0D05\u0D31\u0D4D\u0D31\u0D3E\u0D15\u0D4D\u0D15\u0D7C\u0D2E\u0D3E\u0D7C\u0D15\u0D4D\u0D15\u0D4D \u0D28\u0D3F\u0D19\u0D4D\u0D19\u0D33\u0D41\u0D1F\u0D46 \u0D35\u0D3F\u0D35\u0D30\u0D19\u0D4D\u0D19\u0D7E \u0D2E\u0D4B\u0D37\u0D4D\u0D1F\u0D3F\u0D15\u0D4D\u0D15\u0D3E\u0D28\u0D41\u0D02 \u0D28\u0D3F\u0D19\u0D4D\u0D19\u0D33\u0D3E\u0D2F\u0D3F \u0D06\u0D7E\u0D2E\u0D3E\u0D31\u0D3E\u0D1F\u0D4D\u0D1F\u0D02 \u0D28\u0D1F\u0D24\u0D4D\u0D24\u0D3E\u0D28\u0D41\u0D02 \u0D15\u0D34\u0D3F\u0D2F\u0D41\u0D02.\"\n}\n", "{\n    \"warning\": \"\u091A\u0947\u0924\u093E\u0935\u0923\u0940!\",\n    \"message\": \"\u0924\u0941\u092E\u094D\u0939\u093E\u0932\u093E \u0938\u092E\u091C\u0924 \u0928\u0938\u0947\u0932 \u0905\u0938\u093E \u0915\u094B\u0921 \u092A\u094D\u0930\u0935\u093F\u0937\u094D\u091F \u0915\u093F\u0902\u0935\u093E \u092A\u0947\u0938\u094D\u091F \u0915\u0930\u0942 \u0928\u0915\u093E.\\n\u0939\u093E \u0915\u0902\u0938\u094B\u0932 \u0935\u093E\u092A\u0930\u0923\u094D\u092F\u093E\u0928\u0947 \u0906\u0915\u094D\u0930\u092E\u0923\u0915\u0930\u094D\u0924\u094D\u092F\u093E\u0902\u0928\u093E Self-XSS \u0928\u093E\u0935\u093E\u091A\u093E \u0906\u0915\u094D\u0930\u092E\u0923 \u0935\u093E\u092A\u0930\u0942\u0928 \u0924\u0941\u092E\u091A\u0940 \u0924\u094B\u0924\u092F\u093E\u0917\u093F\u0930\u0940 \u0915\u0930\u0923\u094D\u092F\u093E\u091A\u0940 \u0906\u0923\u093F \u0924\u0941\u092E\u091A\u0940 \u092E\u093E\u0939\u093F\u0924\u0940 \u091A\u094B\u0930\u0923\u094D\u092F\u093E\u091A\u0940 \u0905\u0928\u0941\u092E\u0924\u0940 \u092E\u093F\u0933\u0942 \u0936\u0915\u0924\u0947.\"\n}\n", "{\n    \"warning\": \"AMARAN!\",\n    \"message\": \"Jangan masukkan atau tampal kod yang anda tidak faham.\\nPenggunaan konsol ini membenarkan penyerang untuk menyamar sebagai anda dan mencuri maklumat anda menggunakan serangan yang dipanggil XSS-Kendiri (Self-XSS)\"\n}\n", "{\n    \"warning\": \"ADVARSEL!\",\n    \"message\": \"Ikke skriv inn eller lim inn kode som du ikke forst\u00E5r.\\nHvis du bruker denne konsollen, kan du gi uvedkommende anledning til \u00E5 etterligne deg og stjele informasjon gjennom s\u00E5kalte XSS-angrep.\"\n}\n", "{\n    \"warning\": \"WAARSCHUWING!\",\n    \"message\": \"Voer geen code in en plak geen code die je niet begrijpt.\\nMet deze console kunnen aanvallers zich mogelijk als jou voordoen en gegevens stelen via een aanval die Self-XSS heet.\"\n}\n", "{\n    \"warning\": \"\u0A1A\u0A47\u0A24\u0A3E\u0A35\u0A28\u0A40!\",\n    \"message\": \"\u0A09\u0A39 \u0A15\u0A4B\u0A21 \u0A26\u0A3E\u0A16\u0A32 \u0A1C\u0A3E\u0A02 \u0A2A\u0A47\u0A38\u0A1F \u0A28\u0A3E \u0A15\u0A30\u0A4B \u0A1C\u0A3F\u0A38 \u0A26\u0A40 \u0A24\u0A41\u0A39\u0A3E\u0A28\u0A42\u0A70 \u0A38\u0A2E\u0A1D \u0A28\u0A39\u0A40\u0A02 \u0A39\u0A48\u0964\\n\u0A07\u0A38 \u0A15\u0A70\u0A38\u0A4B\u0A32 \u0A26\u0A40 \u0A35\u0A30\u0A24\u0A4B\u0A02 \u0A15\u0A30\u0A28 \u0A28\u0A3E\u0A32 \u0A39\u0A2E\u0A32\u0A3E\u0A35\u0A30 \u0A24\u0A41\u0A39\u0A3E\u0A21\u0A40 \u0A2A\u0A1B\u0A3E\u0A23 \u0A2C\u0A23\u0A3E \u0A38\u0A15\u0A26\u0A47 \u0A39\u0A28 \u0A05\u0A24\u0A47 Self-XSS \u0A28\u0A3E\u0A2E\u0A15 \u0A39\u0A2E\u0A32\u0A47 \u0A26\u0A40 \u0A35\u0A30\u0A24\u0A4B\u0A02 \u0A15\u0A30\u0A15\u0A47 \u0A24\u0A41\u0A39\u0A3E\u0A21\u0A40 \u0A1C\u0A3E\u0A23\u0A15\u0A3E\u0A30\u0A40 \u0A1A\u0A4B\u0A30\u0A40 \u0A15\u0A30 \u0A38\u0A15\u0A26\u0A47 \u0A39\u0A28\u0964\"\n}\n", "{\n    \"warning\": \"OSTRZE\u017BENIE!\",\n    \"message\": \"Nie wpisuj ani nie wklejaj kodu, kt\u00F3rego nie rozumiesz.\\nU\u017Cywanie tej konsoli mo\u017Ce umo\u017Cliwia\u0107 osobom, kt\u00F3re wykorzystuj\u0105 atak Self-XSS, podszywanie si\u0119 pod Ciebie i wykradanie informacji.\"\n}\n", "{\n    \"warning\": \"AVISO!\",\n    \"message\": \"N\u00E3o insira nem cole c\u00F3digos que voc\u00EA n\u00E3o entende.\\nO uso deste console pode permitir que invasores se passem por voc\u00EA e roubem suas informa\u00E7\u00F5es usando um ataque chamado Self-XSS.\"\n}\n", "{\n    \"warning\": \"AVISO!\",\n    \"message\": \"N\u00E3o introduzas nem coles c\u00F3digo que n\u00E3o compreendes.\\nA utiliza\u00E7\u00E3o desta consola pode permitir que atacantes se fa\u00E7am passar por ti e roubem as tuas informa\u00E7\u00F5es atrav\u00E9s de um ataque chamado Self-XSS.\"\n}\n", "{\n    \"warning\": \"AVERTIZARE!\",\n    \"message\": \"Nu introdu sau lipi cod pe care nu \u00EEl \u00EEn\u021Belegi.\\nDac\u0103 folose\u0219ti aceast\u0103 consol\u0103, le po\u021Bi permite atacatorilor s\u0103 \u00EE\u021Bi fure identitatea \u0219i informa\u021Biile printr-un atac denumit Self-XSS.\"\n}\n", "{\n    \"warning\": \"\u0412\u041D\u0418\u041C\u0410\u041D\u0418\u0415!\",\n    \"message\": \"\u041D\u0435 \u0432\u0432\u043E\u0434\u0438\u0442\u0435 \u0438 \u043D\u0435 \u0432\u0441\u0442\u0430\u0432\u043B\u044F\u0439\u0442\u0435 \u043A\u043E\u0434, \u0444\u0443\u043D\u043A\u0446\u0438\u0438 \u043A\u043E\u0442\u043E\u0440\u043E\u0433\u043E \u0432\u044B \u043D\u0435 \u043F\u043E\u043D\u0438\u043C\u0430\u0435\u0442\u0435.\\n\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435 \u044D\u0442\u043E\u0439 \u043A\u043E\u043D\u0441\u043E\u043B\u0438 \u043C\u043E\u0436\u0435\u0442 \u043F\u043E\u0437\u0432\u043E\u043B\u0438\u0442\u044C \u0437\u043B\u043E\u0443\u043C\u044B\u0448\u043B\u0435\u043D\u043D\u0438\u043A\u0430\u043C \u0432\u044B\u0434\u0430\u0442\u044C \u0441\u0435\u0431\u044F \u0437\u0430 \u0432\u0430\u0441 \u0438 \u0443\u043A\u0440\u0430\u0441\u0442\u044C \u0432\u0430\u0448\u0443 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044E \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u0430\u0442\u0430\u043A\u0438 \u0442\u0438\u043F\u0430 Self-XSS.\"\n}\n", "{\n    \"warning\": \"VARNING!\",\n    \"message\": \"Ange inte eller klistra in kod du inte f\u00F6rst\u00E5r.\\nN\u00E4r du anv\u00E4nder den h\u00E4r konsolen kan hackare h\u00E4rma din identitet eller stj\u00E4la din information med en attack som heter Self-XSS.\"\n}\n", "{\n    \"warning\": \"\u0B8E\u0B9A\u0BCD\u0B9A\u0BB0\u0BBF\u0B95\u0BCD\u0B95\u0BC8!\",\n    \"message\": \"\u0B89\u0B99\u0BCD\u0B95\u0BB3\u0BC1\u0B95\u0BCD\u0B95\u0BC1\u0BAA\u0BCD \u0BAA\u0BC1\u0BB0\u0BBF\u0BAF\u0BBE\u0BA4 \u0B95\u0BC1\u0BB1\u0BBF\u0BAF\u0BC0\u0B9F\u0BCD\u0B9F\u0BC8 \u0B89\u0BB3\u0BCD\u0BB3\u0BBF\u0B9F\u0BBE\u0BA4\u0BC0\u0BB0\u0BCD\u0B95\u0BB3\u0BCD \u0B85\u0BB2\u0BCD\u0BB2\u0BA4\u0BC1 \u0B92\u0B9F\u0BCD\u0B9F\u0BBE\u0BA4\u0BC0\u0BB0\u0BCD\u0B95\u0BB3\u0BCD.\\n\u0B87\u0BA8\u0BCD\u0BA4\u0B95\u0BCD \u0B95\u0B9F\u0BCD\u0B9F\u0BC1\u0BAA\u0BCD\u0BAA\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1\u0BA4\u0BCD \u0BA4\u0BBF\u0BB0\u0BC8\u0BAF\u0BC8(Console\u0B90)\u0BAA\u0BCD \u0BAA\u0BAF\u0BA9\u0BCD\u0BAA\u0B9F\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0BB5\u0BA4\u0BA9\u0BCD \u0BAE\u0BC2\u0BB2\u0BAE\u0BCD,\u0BA4\u0BC0\u0B99\u0BCD\u0B95\u0BBF\u0BB4\u0BC8\u0BAA\u0BCD\u0BAA\u0BB5\u0BB0\u0BCD\u0B95\u0BB3\u0BCD Self-XSS \u0B8E\u0BA9\u0BAA\u0BCD\u0BAA\u0B9F\u0BC1\u0BAE\u0BCD \u0BA4\u0BBE\u0B95\u0BCD\u0B95\u0BC1\u0BA4\u0BB2\u0BC8\u0BAA\u0BCD \u0BAA\u0BAF\u0BA9\u0BCD\u0BAA\u0B9F\u0BC1\u0BA4\u0BCD\u0BA4\u0BBF \u0B89\u0B99\u0BCD\u0B95\u0BB3\u0BC8\u0BAA\u0BCD\u0BAA\u0BCB\u0BB2\u0BCD \u0BA8\u0B9F\u0BBF\u0B95\u0BCD\u0B95\u0BB5\u0BC1\u0BAE\u0BCD \u0B89\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0BA4\u0B95\u0BB5\u0BB2\u0BCD\u0B95\u0BB3\u0BC8\u0BA4\u0BCD \u0BA4\u0BBF\u0BB0\u0BC1\u0B9F\u0BB5\u0BC1\u0BAE\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BAF\u0BC1\u0BAE\u0BCD.\"\n}\n", "{\n    \"warning\": \"\u0C39\u0C46\u0C1A\u0C4D\u0C1A\u0C30\u0C3F\u0C15!\",\n    \"message\": \"\u0C2E\u0C40\u0C15\u0C41 \u0C05\u0C30\u0C4D\u0C25\u0C02 \u0C15\u0C3E\u0C28\u0C3F \u0C15\u0C4B\u0C21\u0C4D\u200C\u0C28\u0C3F \u0C0E\u0C02\u0C1F\u0C30\u0C4D \u0C32\u0C47\u0C26\u0C3E \u0C2A\u0C47\u0C38\u0C4D\u0C1F\u0C4D \u0C1A\u0C47\u0C2F\u0C15\u0C02\u0C21\u0C3F.\\n\u0C08 \u0C15\u0C28\u0C4D\u0C38\u0C4B\u0C32\u0C4D\u200C\u0C28\u0C3F \u0C09\u0C2A\u0C2F\u0C4B\u0C17\u0C3F\u0C02\u0C1A\u0C21\u0C02 \u0C35\u0C32\u0C28 \u0C26\u0C3E\u0C21\u0C3F \u0C1A\u0C47\u0C38\u0C47\u0C35\u0C3E\u0C30\u0C41 \u0C2E\u0C3F\u0C2E\u0C4D\u0C2E\u0C32\u0C4D\u0C28\u0C3F \u0C05\u0C28\u0C41\u0C15\u0C30\u0C3F\u0C38\u0C4D\u0C24\u0C42 \u0C2E\u0C30\u0C3F\u0C2F\u0C41 Self-XSS \u0C05\u0C28\u0C47 \u0C26\u0C3E\u0C21\u0C3F\u0C28\u0C3F \u0C09\u0C2A\u0C2F\u0C4B\u0C17\u0C3F\u0C02\u0C1A\u0C3F \u0C2E\u0C40 \u0C38\u0C2E\u0C3E\u0C1A\u0C3E\u0C30\u0C3E\u0C28\u0C4D\u0C28\u0C3F \u0C26\u0C4A\u0C02\u0C17\u0C3F\u0C32\u0C3F\u0C02\u0C1A\u0C35\u0C1A\u0C4D\u0C1A\u0C41.\"\n}\n", "{\n    \"warning\": \"\u0E04\u0E33\u0E40\u0E15\u0E37\u0E2D\u0E19!\",\n    \"message\": \"\u0E2D\u0E22\u0E48\u0E32\u0E43\u0E2A\u0E48\u0E2B\u0E23\u0E37\u0E2D\u0E27\u0E32\u0E07\u0E23\u0E2B\u0E31\u0E2A\u0E17\u0E35\u0E48\u0E04\u0E38\u0E13\u0E44\u0E21\u0E48\u0E40\u0E02\u0E49\u0E32\u0E43\u0E08\u0E25\u0E07\u0E44\u0E1B\\n\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E04\u0E2D\u0E19\u0E42\u0E0B\u0E25\u0E19\u0E35\u0E49\u0E2D\u0E32\u0E08\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E1C\u0E39\u0E49\u0E42\u0E08\u0E21\u0E15\u0E35\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E41\u0E2D\u0E1A\u0E2D\u0E49\u0E32\u0E07\u0E27\u0E48\u0E32\u0E40\u0E1B\u0E47\u0E19\u0E04\u0E38\u0E13 \u0E41\u0E25\u0E30\u0E02\u0E42\u0E21\u0E22\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13\u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49\u0E01\u0E32\u0E23\u0E42\u0E08\u0E21\u0E15\u0E35\u0E17\u0E35\u0E48\u0E40\u0E23\u0E35\u0E22\u0E01\u0E27\u0E48\u0E32 Self-XSS\"\n}\n", "{\n    \"warning\": \"D\u0130KKAT!\",\n    \"message\": \"Anlamad\u0131\u011F\u0131n\u0131z kodu girmeyin veya yap\u0131\u015Ft\u0131rmay\u0131n.\\nBu konsolu kullanmak, sald\u0131rganlar\u0131n sizi taklit etmesine ve Self-XSS adl\u0131 bir sald\u0131r\u0131 kullanarak bilgilerinizi \u00E7almas\u0131na izin verebilir.\"\n}\n", "{\n    \"warning\": \"\u0627\u0646\u062A\u0628\u0627\u06C1!\",\n    \"message\": \"\u0627\u06CC\u0633\u0627 \u06A9\u0648\u0688 \u062F\u0631\u062C \u06CC\u0627 \u067E\u06CC\u0633\u0679 \u0646\u06C1 \u06A9\u0631\u06CC\u06BA \u062C\u0648 \u0622\u067E \u0633\u0645\u062C\u06BE\u062A\u06D2 \u0646\u06C1 \u06C1\u0648\u06BA\u06D4\\n\u06CC\u06C1 \u06A9\u0646\u0633\u0648\u0644 \u0627\u0633\u062A\u0639\u0645\u0627\u0644 \u06A9\u0631\u0646\u06D2 \u0633\u06D2 \u062D\u0645\u0644\u06C1 \u0622\u0648\u0631\u0648\u06BA \u06A9\u0648 Self-XSS \u0646\u0627\u0645\u06CC \u062D\u0645\u0644\u06D2 \u06A9\u06D2 \u0630\u0631\u06CC\u0639\u06D2 \u0622\u067E \u06A9\u06CC \u0646\u0642\u0627\u0644\u06CC \u0627\u0648\u0631 \u0622\u067E \u06A9\u06CC \u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0686\u0631\u0627\u0646\u06D2 \u06A9\u0627 \u0645\u0648\u0642\u0639 \u0645\u0644 \u0633\u06A9\u062A\u0627 \u06C1\u06D2\u06D4\"\n}\n", "{\n    \"warning\": \"C\u1EA2NH B\u00C1O!\",\n    \"message\": \"\u0110\u1EEBng nh\u1EADp hay d\u00E1n m\u00E3 m\u00E0 b\u1EA1n kh\u00F4ng hi\u1EC3u r\u00F5.\\nN\u1EBFu b\u1EA1n s\u1EED d\u1EE5ng console n\u00E0y, nh\u1EEFng k\u1EBB t\u1EA5n c\u00F4ng c\u00F3 th\u1EC3 m\u1EA1o nh\u1EADn b\u1EA1n, r\u1ED3i \u0111\u00E1nh c\u1EAFp th\u00F4ng tin c\u1EE7a b\u1EA1n b\u1EB1ng c\u00E1ch s\u1EED d\u1EE5ng ph\u01B0\u01A1ng ph\u00E1p t\u1EA5n c\u00F4ng Self-XSS.\"\n}\n", "{\n    \"warning\": \"\u8B66\u544A\uFF01\",\n    \"message\": \"\u8BF7\u52FF\u8F93\u5165\u6216\u7C98\u8D34\u4F60\u4E0D\u4E86\u89E3\u7684\u4EE3\u7801\u3002\\n\u5982\u679C\u4F7F\u7528\u6B64\u63A7\u5236\u53F0\uFF0C\u53EF\u80FD\u4F1A\u8BA9\u653B\u51FB\u8005\u80FD\u591F\u4F7F\u7528\u79F0\u4E3A Self-XSS \u7684\u653B\u51FB\u6A21\u4EFF\u4F60\u548C\u7A83\u53D6\u4F60\u7684\u4FE1\u606F\u3002\"\n}\n", "{\n    \"warning\": \"\u8B66\u544A\uFF01\",\n    \"message\": \"\u8ACB\u52FF\u8F38\u5165\u6216\u8CBC\u4E0A\u4F60\u4E0D\u4E86\u89E3\u7684\u4EE3\u78BC\u3002\\n\u4F7F\u7528\u6B64\u64CD\u4F5C\u4ECB\u9762\u53EF\u80FD\u6703\u8B93\u653B\u64CA\u8005\u5047\u5192\u4F60\u7684\u8EAB\u5206\uFF0C\u4E26\u4F7F\u7528 Self-XSS \u653B\u64CA\u65B9\u5F0F\u4F86\u7ACA\u53D6\u4F60\u7684\u8CC7\u8A0A\u3002\"\n}\n", null, null, "'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n  exports.createRoot = m.createRoot;\n  exports.hydrateRoot = m.hydrateRoot;\n} else {\n  var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n  exports.createRoot = function(c, o) {\n    i.usingClientEntryPoint = true;\n    try {\n      return m.createRoot(c, o);\n    } finally {\n      i.usingClientEntryPoint = false;\n    }\n  };\n  exports.hydrateRoot = function(c, h, o) {\n    i.usingClientEntryPoint = true;\n    try {\n      return m.hydrateRoot(c, h, o);\n    } finally {\n      i.usingClientEntryPoint = false;\n    }\n  };\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BLOCKS = void 0;\n/**\n * Map of all Contentful block types. Blocks contain inline or block nodes.\n */\nvar BLOCKS;\n(function (BLOCKS) {\n    BLOCKS[\"DOCUMENT\"] = \"document\";\n    BLOCKS[\"PARAGRAPH\"] = \"paragraph\";\n    BLOCKS[\"HEADING_1\"] = \"heading-1\";\n    BLOCKS[\"HEADING_2\"] = \"heading-2\";\n    BLOCKS[\"HEADING_3\"] = \"heading-3\";\n    BLOCKS[\"HEADING_4\"] = \"heading-4\";\n    BLOCKS[\"HEADING_5\"] = \"heading-5\";\n    BLOCKS[\"HEADING_6\"] = \"heading-6\";\n    BLOCKS[\"OL_LIST\"] = \"ordered-list\";\n    BLOCKS[\"UL_LIST\"] = \"unordered-list\";\n    BLOCKS[\"LIST_ITEM\"] = \"list-item\";\n    BLOCKS[\"HR\"] = \"hr\";\n    BLOCKS[\"QUOTE\"] = \"blockquote\";\n    BLOCKS[\"EMBEDDED_ENTRY\"] = \"embedded-entry-block\";\n    BLOCKS[\"EMBEDDED_ASSET\"] = \"embedded-asset-block\";\n    BLOCKS[\"EMBEDDED_RESOURCE\"] = \"embedded-resource-block\";\n    BLOCKS[\"TABLE\"] = \"table\";\n    BLOCKS[\"TABLE_ROW\"] = \"table-row\";\n    BLOCKS[\"TABLE_CELL\"] = \"table-cell\";\n    BLOCKS[\"TABLE_HEADER_CELL\"] = \"table-header-cell\";\n})(BLOCKS || (exports.BLOCKS = BLOCKS = {}));\n//# sourceMappingURL=blocks.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.INLINES = void 0;\n/**\n * Map of all Contentful inline types. Inline contain inline or text nodes.\n *\n * @note This should be kept in alphabetical order since the\n * [validation package](https://github.com/contentful/content-stack/tree/master/packages/validation)\n *  relies on the values being in a predictable order.\n */\nvar INLINES;\n(function (INLINES) {\n    INLINES[\"ASSET_HYPERLINK\"] = \"asset-hyperlink\";\n    INLINES[\"EMBEDDED_ENTRY\"] = \"embedded-entry-inline\";\n    INLINES[\"EMBEDDED_RESOURCE\"] = \"embedded-resource-inline\";\n    INLINES[\"ENTRY_HYPERLINK\"] = \"entry-hyperlink\";\n    INLINES[\"HYPERLINK\"] = \"hyperlink\";\n    INLINES[\"RESOURCE_HYPERLINK\"] = \"resource-hyperlink\";\n})(INLINES || (exports.INLINES = INLINES = {}));\n//# sourceMappingURL=inlines.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MARKS = void 0;\n/**\n * Map of all Contentful marks.\n */\nvar MARKS;\n(function (MARKS) {\n    MARKS[\"BOLD\"] = \"bold\";\n    MARKS[\"ITALIC\"] = \"italic\";\n    MARKS[\"UNDERLINE\"] = \"underline\";\n    MARKS[\"CODE\"] = \"code\";\n    MARKS[\"SUPERSCRIPT\"] = \"superscript\";\n    MARKS[\"SUBSCRIPT\"] = \"subscript\";\n    MARKS[\"STRIKETHROUGH\"] = \"strikethrough\";\n})(MARKS || (exports.MARKS = MARKS = {}));\n//# sourceMappingURL=marks.js.map", "\"use strict\";\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.V1_MARKS = exports.V1_NODE_TYPES = exports.TEXT_CONTAINERS = exports.HEADINGS = exports.CONTAINERS = exports.VOID_BLOCKS = exports.TABLE_BLOCKS = exports.LIST_ITEM_BLOCKS = exports.TOP_LEVEL_BLOCKS = void 0;\nvar blocks_1 = require(\"./blocks\");\nvar inlines_1 = require(\"./inlines\");\nvar marks_1 = require(\"./marks\");\n/**\n * Array of all top level block types.\n * Only these block types can be the direct children of the document.\n */\nexports.TOP_LEVEL_BLOCKS = [\n    blocks_1.BLOCKS.PARAGRAPH,\n    blocks_1.BLOCKS.HEADING_1,\n    blocks_1.BLOCKS.HEADING_2,\n    blocks_1.BLOCKS.HEADING_3,\n    blocks_1.BLOCKS.HEADING_4,\n    blocks_1.BLOCKS.HEADING_5,\n    blocks_1.BLOCKS.HEADING_6,\n    blocks_1.BLOCKS.OL_LIST,\n    blocks_1.BLOCKS.UL_LIST,\n    blocks_1.BLOCKS.HR,\n    blocks_1.BLOCKS.QUOTE,\n    blocks_1.BLOCKS.EMBEDDED_ENTRY,\n    blocks_1.BLOCKS.EMBEDDED_ASSET,\n    blocks_1.BLOCKS.EMBEDDED_RESOURCE,\n    blocks_1.BLOCKS.TABLE,\n];\n/**\n * Array of all allowed block types inside list items\n */\nexports.LIST_ITEM_BLOCKS = [\n    blocks_1.BLOCKS.PARAGRAPH,\n    blocks_1.BLOCKS.HEADING_1,\n    blocks_1.BLOCKS.HEADING_2,\n    blocks_1.BLOCKS.HEADING_3,\n    blocks_1.BLOCKS.HEADING_4,\n    blocks_1.BLOCKS.HEADING_5,\n    blocks_1.BLOCKS.HEADING_6,\n    blocks_1.BLOCKS.OL_LIST,\n    blocks_1.BLOCKS.UL_LIST,\n    blocks_1.BLOCKS.HR,\n    blocks_1.BLOCKS.QUOTE,\n    blocks_1.BLOCKS.EMBEDDED_ENTRY,\n    blocks_1.BLOCKS.EMBEDDED_ASSET,\n    blocks_1.BLOCKS.EMBEDDED_RESOURCE,\n];\nexports.TABLE_BLOCKS = [\n    blocks_1.BLOCKS.TABLE,\n    blocks_1.BLOCKS.TABLE_ROW,\n    blocks_1.BLOCKS.TABLE_CELL,\n    blocks_1.BLOCKS.TABLE_HEADER_CELL,\n];\n/**\n * Array of all void block types\n */\nexports.VOID_BLOCKS = [\n    blocks_1.BLOCKS.HR,\n    blocks_1.BLOCKS.EMBEDDED_ENTRY,\n    blocks_1.BLOCKS.EMBEDDED_ASSET,\n    blocks_1.BLOCKS.EMBEDDED_RESOURCE,\n];\n/**\n * Dictionary of all container block types, and the set block types they accept as children.\n *\n * Note: This does not include `[BLOCKS.DOCUMENT]: TOP_LEVEL_BLOCKS`\n */\nexports.CONTAINERS = (_a = {},\n    _a[blocks_1.BLOCKS.OL_LIST] = [blocks_1.BLOCKS.LIST_ITEM],\n    _a[blocks_1.BLOCKS.UL_LIST] = [blocks_1.BLOCKS.LIST_ITEM],\n    _a[blocks_1.BLOCKS.LIST_ITEM] = exports.LIST_ITEM_BLOCKS,\n    _a[blocks_1.BLOCKS.QUOTE] = [blocks_1.BLOCKS.PARAGRAPH],\n    _a[blocks_1.BLOCKS.TABLE] = [blocks_1.BLOCKS.TABLE_ROW],\n    _a[blocks_1.BLOCKS.TABLE_ROW] = [blocks_1.BLOCKS.TABLE_CELL, blocks_1.BLOCKS.TABLE_HEADER_CELL],\n    _a[blocks_1.BLOCKS.TABLE_CELL] = [blocks_1.BLOCKS.PARAGRAPH, blocks_1.BLOCKS.UL_LIST, blocks_1.BLOCKS.OL_LIST],\n    _a[blocks_1.BLOCKS.TABLE_HEADER_CELL] = [blocks_1.BLOCKS.PARAGRAPH],\n    _a);\n/**\n * Array of all heading levels\n */\nexports.HEADINGS = [\n    blocks_1.BLOCKS.HEADING_1,\n    blocks_1.BLOCKS.HEADING_2,\n    blocks_1.BLOCKS.HEADING_3,\n    blocks_1.BLOCKS.HEADING_4,\n    blocks_1.BLOCKS.HEADING_5,\n    blocks_1.BLOCKS.HEADING_6,\n];\n/**\n * Array of all block types that may contain text and inline nodes.\n */\nexports.TEXT_CONTAINERS = __spreadArray([blocks_1.BLOCKS.PARAGRAPH], exports.HEADINGS, true);\n/**\n * Node types before `tables` release.\n */\nexports.V1_NODE_TYPES = [\n    blocks_1.BLOCKS.DOCUMENT,\n    blocks_1.BLOCKS.PARAGRAPH,\n    blocks_1.BLOCKS.HEADING_1,\n    blocks_1.BLOCKS.HEADING_2,\n    blocks_1.BLOCKS.HEADING_3,\n    blocks_1.BLOCKS.HEADING_4,\n    blocks_1.BLOCKS.HEADING_5,\n    blocks_1.BLOCKS.HEADING_6,\n    blocks_1.BLOCKS.OL_LIST,\n    blocks_1.BLOCKS.UL_LIST,\n    blocks_1.BLOCKS.LIST_ITEM,\n    blocks_1.BLOCKS.HR,\n    blocks_1.BLOCKS.QUOTE,\n    blocks_1.BLOCKS.EMBEDDED_ENTRY,\n    blocks_1.BLOCKS.EMBEDDED_ASSET,\n    inlines_1.INLINES.HYPERLINK,\n    inlines_1.INLINES.ENTRY_HYPERLINK,\n    inlines_1.INLINES.ASSET_HYPERLINK,\n    inlines_1.INLINES.EMBEDDED_ENTRY,\n    'text',\n];\n/**\n * Marks before `superscript` & `subscript` release.\n */\nexports.V1_MARKS = [marks_1.MARKS.BOLD, marks_1.MARKS.CODE, marks_1.MARKS.ITALIC, marks_1.MARKS.UNDERLINE];\n//# sourceMappingURL=schemaConstraints.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=types.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=nodeTypes.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EMPTY_DOCUMENT = void 0;\nvar blocks_1 = require(\"./blocks\");\n/**\n * A rich text document considered to be empty.\n * Any other document structure than this is not considered empty.\n */\nexports.EMPTY_DOCUMENT = {\n    nodeType: blocks_1.BLOCKS.DOCUMENT,\n    data: {},\n    content: [\n        {\n            nodeType: blocks_1.BLOCKS.PARAGRAPH,\n            data: {},\n            content: [\n                {\n                    nodeType: 'text',\n                    value: '',\n                    marks: [],\n                    data: {},\n                },\n            ],\n        },\n    ],\n};\n//# sourceMappingURL=emptyDocument.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isInline = isInline;\nexports.isBlock = isBlock;\nexports.isText = isText;\nvar blocks_1 = require(\"./blocks\");\nvar inlines_1 = require(\"./inlines\");\n/**\n * Tiny replacement for Object.values(object).includes(key) to\n * avoid including CoreJS polyfills\n */\nfunction hasValue(obj, value) {\n    for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n        var key = _a[_i];\n        if (value === obj[key]) {\n            return true;\n        }\n    }\n    return false;\n}\n/**\n * Checks if the node is an instance of Inline.\n */\nfunction isInline(node) {\n    return hasValue(inlines_1.INLINES, node.nodeType);\n}\n/**\n * Checks if the node is an instance of Block.\n */\nfunction isBlock(node) {\n    return hasValue(blocks_1.BLOCKS, node.nodeType);\n}\n/**\n * Checks if the node is an instance of Text.\n */\nfunction isText(node) {\n    return node.nodeType === 'text';\n}\n//# sourceMappingURL=helpers.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getSchemaWithNodeType = getSchemaWithNodeType;\nfunction getSchemaWithNodeType(nodeType) {\n    try {\n        return require(\"./generated/\".concat(nodeType, \".json\"));\n    }\n    catch (error) {\n        throw new Error(\"Schema for nodeType \\\"\".concat(nodeType, \"\\\" was not found.\"));\n    }\n}\n//# sourceMappingURL=index.js.map", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getSchemaWithNodeType = exports.helpers = exports.EMPTY_DOCUMENT = exports.MARKS = exports.INLINES = exports.BLOCKS = void 0;\nvar blocks_1 = require(\"./blocks\");\nObject.defineProperty(exports, \"BLOCKS\", { enumerable: true, get: function () { return blocks_1.BLOCKS; } });\nvar inlines_1 = require(\"./inlines\");\nObject.defineProperty(exports, \"INLINES\", { enumerable: true, get: function () { return inlines_1.INLINES; } });\nvar marks_1 = require(\"./marks\");\nObject.defineProperty(exports, \"MARKS\", { enumerable: true, get: function () { return marks_1.MARKS; } });\n__exportStar(require(\"./schemaConstraints\"), exports);\n__exportStar(require(\"./types\"), exports);\n__exportStar(require(\"./nodeTypes\"), exports);\nvar emptyDocument_1 = require(\"./emptyDocument\");\nObject.defineProperty(exports, \"EMPTY_DOCUMENT\", { enumerable: true, get: function () { return emptyDocument_1.EMPTY_DOCUMENT; } });\nvar helpers = __importStar(require(\"./helpers\"));\nexports.helpers = helpers;\nvar schemas_1 = require(\"./schemas\");\nObject.defineProperty(exports, \"getSchemaWithNodeType\", { enumerable: true, get: function () { return schemas_1.getSchemaWithNodeType; } });\n//# sourceMappingURL=index.js.map", "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param  {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n  var str = '' + string;\n  var match = matchHtmlRegExp.exec(str);\n\n  if (!match) {\n    return str;\n  }\n\n  var escape;\n  var html = '';\n  var index = 0;\n  var lastIndex = 0;\n\n  for (index = match.index; index < str.length; index++) {\n    switch (str.charCodeAt(index)) {\n      case 34: // \"\n        escape = '&quot;';\n        break;\n      case 38: // &\n        escape = '&amp;';\n        break;\n      case 39: // '\n        escape = '&#39;';\n        break;\n      case 60: // <\n        escape = '&lt;';\n        break;\n      case 62: // >\n        escape = '&gt;';\n        break;\n      default:\n        continue;\n    }\n\n    if (lastIndex !== index) {\n      html += str.substring(lastIndex, index);\n    }\n\n    lastIndex = index + 1;\n    html += escape;\n  }\n\n  return lastIndex !== index\n    ? html + str.substring(lastIndex, index)\n    : html;\n}\n", "import {\n  BLOCKS,\n  Block,\n  Document,\n  INLINES,\n  Inline,\n  MARKS,\n  Mark,\n  Text,\n  helpers,\n} from '@contentful/rich-text-types';\nimport escape from 'escape-html';\n\nconst attributeValue = (value: string) => `\"${value.replace(/\"/g, '&quot;')}\"`;\n\nconst defaultNodeRenderers: RenderNode = {\n  [BLOCKS.PARAGRAPH]: (node, next) => `<p>${next(node.content)}</p>`,\n  [BLOCKS.HEADING_1]: (node, next) => `<h1>${next(node.content)}</h1>`,\n  [BLOCKS.HEADING_2]: (node, next) => `<h2>${next(node.content)}</h2>`,\n  [BLOCKS.HEADING_3]: (node, next) => `<h3>${next(node.content)}</h3>`,\n  [BLOCKS.HEADING_4]: (node, next) => `<h4>${next(node.content)}</h4>`,\n  [BLOCKS.HEADING_5]: (node, next) => `<h5>${next(node.content)}</h5>`,\n  [BLOCKS.HEADING_6]: (node, next) => `<h6>${next(node.content)}</h6>`,\n  [BLOCKS.EMBEDDED_ENTRY]: (node, next) => `<div>${next(node.content)}</div>`,\n  [BLOCKS.EMBEDDED_RESOURCE]: (node, next) => `<div>${next(node.content)}</div>`,\n  [BLOCKS.UL_LIST]: (node, next) => `<ul>${next(node.content)}</ul>`,\n  [BLOCKS.OL_LIST]: (node, next) => `<ol>${next(node.content)}</ol>`,\n  [BLOCKS.LIST_ITEM]: (node, next) => `<li>${next(node.content)}</li>`,\n  [BLOCKS.QUOTE]: (node, next) => `<blockquote>${next(node.content)}</blockquote>`,\n  [BLOCKS.HR]: () => '<hr/>',\n  [BLOCKS.TABLE]: (node, next) => `<table>${next(node.content)}</table>`,\n  [BLOCKS.TABLE_ROW]: (node, next) => `<tr>${next(node.content)}</tr>`,\n  [BLOCKS.TABLE_HEADER_CELL]: (node, next) => `<th>${next(node.content)}</th>`,\n  [BLOCKS.TABLE_CELL]: (node, next) => `<td>${next(node.content)}</td>`,\n  [INLINES.ASSET_HYPERLINK]: (node) => defaultInline(INLINES.ASSET_HYPERLINK, node as Inline),\n  [INLINES.ENTRY_HYPERLINK]: (node) => defaultInline(INLINES.ENTRY_HYPERLINK, node as Inline),\n  [INLINES.RESOURCE_HYPERLINK]: (node) =>\n    defaultInlineResource(INLINES.RESOURCE_HYPERLINK, node as Inline),\n  [INLINES.EMBEDDED_ENTRY]: (node) => defaultInline(INLINES.EMBEDDED_ENTRY, node as Inline),\n  [INLINES.EMBEDDED_RESOURCE]: (node) =>\n    defaultInlineResource(INLINES.EMBEDDED_RESOURCE, node as Inline),\n  [INLINES.HYPERLINK]: (node, next) => {\n    const href = typeof node.data.uri === 'string' ? node.data.uri : '';\n    return `<a href=${attributeValue(href)}>${next(node.content)}</a>`;\n  },\n};\n\nconst defaultMarkRenderers: RenderMark = {\n  [MARKS.BOLD]: (text) => `<b>${text}</b>`,\n  [MARKS.ITALIC]: (text) => `<i>${text}</i>`,\n  [MARKS.UNDERLINE]: (text) => `<u>${text}</u>`,\n  [MARKS.CODE]: (text) => `<code>${text}</code>`,\n  [MARKS.SUPERSCRIPT]: (text) => `<sup>${text}</sup>`,\n  [MARKS.SUBSCRIPT]: (text) => `<sub>${text}</sub>`,\n  [MARKS.STRIKETHROUGH]: (text) => `<s>${text}</s>`,\n};\n\nconst defaultInline = (type: string, node: Inline) =>\n  `<span>type: ${escape(type)} id: ${escape(node.data.target.sys.id)}</span>`;\n\nconst defaultInlineResource = (type: string, node: Inline) =>\n  `<span>type: ${escape(type)} urn: ${escape(node.data.target.sys.urn)}</span>`;\n\nexport type CommonNode = Text | Block | Inline;\n\nexport interface Next {\n  (nodes: CommonNode[]): string;\n}\n\nexport interface NodeRenderer {\n  (node: Block | Inline, next: Next): string;\n}\n\nexport interface RenderNode {\n  [k: string]: NodeRenderer;\n}\n\nexport interface RenderMark {\n  [k: string]: (text: string) => string;\n}\n\nexport interface Options {\n  /**\n   * Node renderers\n   */\n  renderNode?: RenderNode;\n  /**\n   * Mark renderers\n   */\n  renderMark?: RenderMark;\n  /**\n   * Keep line breaks and multiple spaces\n   */\n  preserveWhitespace?: boolean;\n}\n\n/**\n * Serialize a Contentful Rich Text `document` to an html string.\n */\nexport function documentToHtmlString(\n  richTextDocument: Document,\n  options: Partial<Options> = {},\n): string {\n  if (!richTextDocument || !richTextDocument.content) {\n    return '';\n  }\n\n  return nodeListToHtmlString(richTextDocument.content, {\n    renderNode: {\n      ...defaultNodeRenderers,\n      ...options.renderNode,\n    },\n    renderMark: {\n      ...defaultMarkRenderers,\n      ...options.renderMark,\n    },\n    preserveWhitespace: options.preserveWhitespace,\n  });\n}\n\nfunction nodeListToHtmlString(\n  nodes: CommonNode[],\n  { renderNode, renderMark, preserveWhitespace }: Options,\n): string {\n  return nodes\n    .map<string>((node) => nodeToHtmlString(node, { renderNode, renderMark, preserveWhitespace }))\n    .join('');\n}\n\nfunction nodeToHtmlString(\n  node: CommonNode,\n  { renderNode, renderMark, preserveWhitespace }: Options,\n): string {\n  if (helpers.isText(node)) {\n    let nodeValue = escape(node.value);\n\n    // If preserveWhitespace is true, handle line breaks and spaces.\n    if (preserveWhitespace) {\n      nodeValue = nodeValue\n        .replace(/\\n/g, '<br/>')\n        .replace(/ {2,}/g, (match) => '&nbsp;'.repeat(match.length));\n    }\n\n    if (node.marks.length > 0) {\n      return node.marks.reduce((value: string, mark: Mark) => {\n        if (!renderMark[mark.type]) {\n          return value;\n        }\n        return renderMark[mark.type](value);\n      }, nodeValue);\n    }\n\n    return nodeValue;\n  } else {\n    const nextNode: Next = (nodes) =>\n      nodeListToHtmlString(nodes, { renderMark, renderNode, preserveWhitespace });\n    if (!node.nodeType || !renderNode[node.nodeType]) {\n      // TODO: Figure what to return when passed an unrecognized node.\n      return '';\n    }\n    return renderNode[node.nodeType](node, nextNode);\n  }\n}\n", "function styleInject(css, ref) {\n  if ( ref === void 0 ) ref = {};\n  var insertAt = ref.insertAt;\n\n  if (!css || typeof document === 'undefined') { return; }\n\n  var head = document.head || document.getElementsByTagName('head')[0];\n  var style = document.createElement('style');\n  style.type = 'text/css';\n\n  if (insertAt === 'top') {\n    if (head.firstChild) {\n      head.insertBefore(style, head.firstChild);\n    } else {\n      head.appendChild(style);\n    }\n  } else {\n    head.appendChild(style);\n  }\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nexport default styleInject;\n", "// @ts-nocheck\nimport React, { useRef, useEffect } from \"react\";\nimport \"./styles.css\";\nimport CloseCircle from '../assets/svg/closeCircle.svg';\nimport CloseCircleDark from '../assets/svg/closeCircleDark.svg';\nimport CloseLine from '../assets/svg/closeLine.svg';\nimport CloseSquare from '../assets/svg/closeSquare.svg';\nimport DownArrow from '../assets/svg/downArrow.svg';\nimport {IMultiselectProps} from \"./interface\";\n\nconst closeIconTypes = {\n  circle: CloseCircleDark,\n  circle2: CloseCircle,\n  close: CloseSquare,\n  cancel: CloseLine\n};\n\nfunction useOutsideAlerter(ref, clickEvent) {\n  useEffect(() => {\n      function handleClickOutside(event) {\n          if (ref.current && !ref.current.contains(event.target)) {\n            clickEvent();\n          }\n      }\n\n      document.addEventListener(\"mousedown\", handleClickOutside);\n      return () => {\n          document.removeEventListener(\"mousedown\", handleClickOutside);\n      };\n  }, [ref]);\n}\n\n/**\n* Component that alerts if you click outside of it\n*/\nfunction OutsideAlerter(props) {\n  const wrapperRef = useRef(null);\n  useOutsideAlerter(wrapperRef, props.outsideClick);\n  return <div ref={wrapperRef}>{props.children}</div>;\n}\n\nexport class Multiselect extends React.Component<IMultiselectProps, any> {\n  static defaultProps: IMultiselectProps;\n  constructor(props) {\n    super(props);\n    this.state = {\n      inputValue: \"\",\n      options: props.options,\n      filteredOptions: props.options,\n      unfilteredOptions: props.options,\n      selectedValues: Object.assign([], props.selectedValues),\n      preSelectedValues: Object.assign([], props.selectedValues),\n      toggleOptionsList: false,\n      highlightOption: props.avoidHighlightFirstOption ? -1 : 0,\n\t\t\tshowCheckbox: props.showCheckbox,\n      keepSearchTerm: props.keepSearchTerm,\n      groupedObject: [],\n      closeIconType: closeIconTypes[props.closeIcon] || closeIconTypes['circle']\n    };\n    // @ts-ignore\n    this.optionTimeout = null;\n    // @ts-ignore\n\t\tthis.searchWrapper = React.createRef();\n    // @ts-ignore\n\t\tthis.searchBox = React.createRef();\n    this.onChange = this.onChange.bind(this);\n    this.onKeyPress = this.onKeyPress.bind(this);\n    this.onFocus = this.onFocus.bind(this);\n    this.onBlur = this.onBlur.bind(this);\n    this.renderMultiselectContainer = this.renderMultiselectContainer.bind(this);\n    this.renderSelectedList = this.renderSelectedList.bind(this);\n    this.onRemoveSelectedItem = this.onRemoveSelectedItem.bind(this);\n    this.toggelOptionList = this.toggelOptionList.bind(this);\n    this.onArrowKeyNavigation = this.onArrowKeyNavigation.bind(this);\n    this.onSelectItem = this.onSelectItem.bind(this);\n    this.filterOptionsByInput = this.filterOptionsByInput.bind(this);\n    this.removeSelectedValuesFromOptions = this.removeSelectedValuesFromOptions.bind(this);\n    this.isSelectedValue = this.isSelectedValue.bind(this);\n    this.fadeOutSelection = this.fadeOutSelection.bind(this);\n    this.isDisablePreSelectedValues = this.isDisablePreSelectedValues.bind(this);\n    this.renderGroupByOptions = this.renderGroupByOptions.bind(this);\n    this.renderNormalOption = this.renderNormalOption.bind(this);\n    this.listenerCallback = this.listenerCallback.bind(this);\n    this.resetSelectedValues = this.resetSelectedValues.bind(this);\n    this.getSelectedItems = this.getSelectedItems.bind(this);\n    this.getSelectedItemsCount = this.getSelectedItemsCount.bind(this);\n    this.hideOnClickOutside = this.hideOnClickOutside.bind(this);\n    this.onCloseOptionList = this.onCloseOptionList.bind(this);\n    this.isVisible = this.isVisible.bind(this);\n  }\n\n  initialSetValue() {\n    const { showCheckbox, groupBy, singleSelect } = this.props;\n\t\tconst { options } = this.state;\n    if (!showCheckbox && !singleSelect) {\n      this.removeSelectedValuesFromOptions(false);\n\t\t}\n    // if (singleSelect) {\n    //   this.hideOnClickOutside();\n    // }\n\t\tif (groupBy) {\n\t\t\tthis.groupByOptions(options);\n\t\t}\n  }\n\n  resetSelectedValues() {\n    const { unfilteredOptions } = this.state;\n    return new Promise((resolve) => {\n      this.setState({\n        selectedValues: [],\n        preSelectedValues: [],\n        options: unfilteredOptions,\n        filteredOptions: unfilteredOptions\n      }, () => {\n        // @ts-ignore\n        resolve();\n        this.initialSetValue();\n      });\n    });\n  }\n\n  getSelectedItems() {\n    return this.state.selectedValues;\n  }\n\n  getSelectedItemsCount() {\n    return this.state.selectedValues.length;\n  }\n\n  componentDidMount() {\n\t\tthis.initialSetValue();\n    // @ts-ignore\n    this.searchWrapper.current.addEventListener(\"click\", this.listenerCallback);\n  }\n\n  componentDidUpdate(prevProps) {\n    const { options, selectedValues } = this.props;\n    const { options: prevOptions, selectedValues: prevSelectedvalues } = prevProps;\n    if (JSON.stringify(prevOptions) !== JSON.stringify(options)) {\n      this.setState({ options, filteredOptions: options, unfilteredOptions: options }, this.initialSetValue);\n    }\n    if (JSON.stringify(prevSelectedvalues) !== JSON.stringify(selectedValues)) {\n      this.setState({ selectedValues: Object.assign([], selectedValues), preSelectedValues: Object.assign([], selectedValues) }, this.initialSetValue);\n    }\n  }\n\n  listenerCallback() {\n    // @ts-ignore\n    this.searchBox.current.focus();\n  }\n\n  componentWillUnmount() {\n    // @ts-ignore\n    if (this.optionTimeout) {\n      // @ts-ignore\n      clearTimeout(this.optionTimeout);\n    }\n    // @ts-ignore\n    this.searchWrapper.current.removeEventListener('click', this.listenerCallback);\n  }\n\n  // Skipcheck flag - value will be true when the func called from on deselect anything.\n  removeSelectedValuesFromOptions(skipCheck) {\n    const { isObject, displayValue, groupBy } = this.props;\n    const { selectedValues = [], unfilteredOptions, options } = this.state;\n    if (!skipCheck && groupBy) {\n      this.groupByOptions(options);\n    }\n    if (!selectedValues.length && !skipCheck) {\n      return;\n    }\n    if (isObject) {\n      let optionList = unfilteredOptions.filter(item => {\n        return selectedValues.findIndex(\n          v => v[displayValue] === item[displayValue]\n        ) === -1\n          ? true\n          : false;\n      });\n      if (groupBy) {\n        this.groupByOptions(optionList);\n      }\n      this.setState(\n        { options: optionList, filteredOptions: optionList },\n        this.filterOptionsByInput\n      );\n      return;\n    }\n    let optionList = unfilteredOptions.filter(\n      item => selectedValues.indexOf(item) === -1\n    );\n\n    this.setState(\n      { options: optionList, filteredOptions: optionList },\n      this.filterOptionsByInput\n    );\n  }\n\n  groupByOptions(options) {\n    const { groupBy } = this.props;\n    const groupedObject = options.reduce(function(r, a) {\n      const key = a[groupBy] || \"Others\";\n      r[key] = r[key] || [];\n      r[key].push(a);\n      return r;\n    }, Object.create({}));\n\n    this.setState({ groupedObject });\n  }\n\n  onChange(event) {\n    const { onSearch } = this.props;\n    this.setState(\n      { inputValue: event.target.value },\n      this.filterOptionsByInput\n    );\n    if (onSearch) {\n      onSearch(event.target.value);\n    }\n  }\n\n  onKeyPress(event) {\n    const { onKeyPressFn } = this.props;\n    if (onKeyPressFn) {\n        onKeyPressFn(event, event.target.value);\n    }\n  }\n\n  filterOptionsByInput() {\n    let { options, filteredOptions, inputValue } = this.state;\n    const { isObject, displayValue } = this.props;\n    if (isObject) {\n      options = filteredOptions.filter(i => this.matchValues(i[displayValue], inputValue))\n    } else {\n      options = filteredOptions.filter(i => this.matchValues(i, inputValue));\n    }\n    this.groupByOptions(options);\n    this.setState({ options });\n  }\n\n  matchValues(value, search) {\n    if (this.props.caseSensitiveSearch) {\n      return value.indexOf(search) > -1;\n    }\n    if (value.toLowerCase) {\n      return value.toLowerCase().indexOf(search.toLowerCase()) > -1;\n    }\n    return value.toString().indexOf(search) > -1;\n  }\n\n  onArrowKeyNavigation(e) {\n    const {\n      options,\n      highlightOption,\n      toggleOptionsList,\n      inputValue,\n      selectedValues\n    } = this.state;\n    const { disablePreSelectedValues } = this.props;\n    if (e.keyCode === 8 && !inputValue && !disablePreSelectedValues && selectedValues.length) {\n      this.onRemoveSelectedItem(selectedValues.length - 1);\n    }\n    if (!options.length) {\n      return;\n    }\n    if (e.keyCode === 38) {\n      if (highlightOption > 0) {\n        this.setState(previousState => ({\n          highlightOption: previousState.highlightOption - 1\n        }));\n      } else {\n        this.setState({ highlightOption: options.length - 1 });\n      }\n    } else if (e.keyCode === 40) {\n      if (highlightOption < options.length - 1) {\n        this.setState(previousState => ({\n          highlightOption: previousState.highlightOption + 1\n        }));\n      } else {\n        this.setState({ highlightOption: 0 });\n      }\n    } else if (e.key === \"Enter\" && options.length && toggleOptionsList) {\n      if (highlightOption === -1) {\n        return;\n      }\n      this.onSelectItem(options[highlightOption]);\n    }\n    // TODO: Instead of scrollIntoView need to find better soln for scroll the dropwdown container.\n    // setTimeout(() => {\n    //   const element = document.querySelector(\"ul.optionContainer .highlight\");\n    //   if (element) {\n    //     element.scrollIntoView();\n    //   }\n    // });\n  }\n\n  onRemoveSelectedItem(item) {\n\t\tlet { selectedValues, index = 0 } = this.state;\n\t\tconst { onRemove, showCheckbox, displayValue, isObject } = this.props;\n    if (isObject) {\n      index = selectedValues.findIndex(\n        i => i[displayValue] === item[displayValue]\n      );\n    } else {\n      index = selectedValues.indexOf(item);\n    }\n\t\tselectedValues.splice(index, 1);\n\t\tonRemove(selectedValues, item);\n    this.setState({ selectedValues }, () => {\n      if (!showCheckbox) {\n\t\t\t\tthis.removeSelectedValuesFromOptions(true);\n      }\n    });\n    if (!this.props.closeOnSelect) {\n      // @ts-ignore\n      this.searchBox.current.focus();\n    }\n  }\n\n  onSelectItem(item) {\n    const { selectedValues } = this.state;\n    const { selectionLimit, onSelect, singleSelect, showCheckbox } = this.props;\n    if (!this.state.keepSearchTerm){\n      this.setState({\n        inputValue: ''\n      });\n    }\n    if (singleSelect) {\n      this.onSingleSelect(item);\n      onSelect([item], item);\n      return;\n    }\n    if (this.isSelectedValue(item)) {\n      this.onRemoveSelectedItem(item);\n      return;\n    }\n    if (selectionLimit == selectedValues.length) {\n      return;\n    }\n\t\tselectedValues.push(item);\n\t\tonSelect(selectedValues, item);\n    this.setState({ selectedValues }, () => {\n      if (!showCheckbox) {\n\t\t\t\tthis.removeSelectedValuesFromOptions(true);\n      } else {\n        this.filterOptionsByInput();\n      }\n    });\n    if (!this.props.closeOnSelect) {\n      // @ts-ignore\n      this.searchBox.current.focus();\n    }\n  }\n\n  onSingleSelect(item) {\n    this.setState({ selectedValues: [item], toggleOptionsList: false });\n  }\n\n  isSelectedValue(item) {\n    const { isObject, displayValue } = this.props;\n    const { selectedValues } = this.state;\n    if (isObject) {\n      return (\n        selectedValues.filter(i => i[displayValue] === item[displayValue])\n          .length > 0\n      );\n    }\n    return selectedValues.filter(i => i === item).length > 0;\n  }\n\n  renderOptionList() {\n    const { groupBy, style, emptyRecordMsg, loading, loadingMessage = 'loading...' } = this.props;\n    const { options } = this.state;\n    if (loading) {\n      return (\n        <ul className={`optionContainer`} style={style['optionContainer']}>\n          {typeof loadingMessage === 'string' && <span style={style['loadingMessage']} className={`notFound`}>{loadingMessage}</span>}\n          {typeof loadingMessage !== 'string' && loadingMessage}\n        </ul>\n      );\n    }\n    return (\n      <ul className={`optionContainer`} style={style['optionContainer']}>\n        {options.length === 0 && <span style={style['notFound']} className={`notFound`}>{emptyRecordMsg}</span>}\n        {!groupBy ? this.renderNormalOption() : this.renderGroupByOptions()}\n      </ul>\n    );\n  }\n\n  renderGroupByOptions() {\n    const { isObject = false, displayValue, showCheckbox, style, singleSelect } = this.props;\n    const { groupedObject } = this.state;\n    return Object.keys(groupedObject).map(obj => {\n\t\t\treturn (\n\t\t\t\t<React.Fragment key={obj}>\n\t\t\t\t\t<li className=\"groupHeading\" style={style['groupHeading']}>{obj}</li>\n\t\t\t\t\t{groupedObject[obj].map((option, i) => {\n            const isSelected = this.isSelectedValue(option);\n            return (\n              <li\n                key={`option${i}`}\n                style={style['option']}\n                className={`groupChildEle option ${isSelected ? 'selected' : ''} ${this.fadeOutSelection(option) ? 'disableSelection' : ''} ${this.isDisablePreSelectedValues(option) ? 'disableSelection' : ''}`}\n                onClick={() => this.onSelectItem(option)}\n              >\n                {showCheckbox && !singleSelect && (\n                    <input\n                      type=\"checkbox\"\n                      className={'checkbox'}\n                      readOnly\n                      checked={isSelected}\n                    />\n                )}\n                {this.props.optionValueDecorator(isObject ? option[displayValue] : (option || '').toString(), option)}\n              </li>\n            )}\n          )}\n\t\t\t\t</React.Fragment>\n\t\t\t)\n\t\t});\n  }\n\n  renderNormalOption() {\n    const { isObject = false, displayValue, showCheckbox, style, singleSelect } = this.props;\n    const { highlightOption } = this.state;\n    return this.state.options.map((option, i) => {\n        const isSelected = this.isSelectedValue(option);\n        return (\n          <li\n            key={`option${i}`}\n            style={style['option']}\n            className={`option ${isSelected ? 'selected' : ''} ${highlightOption === i ? `highlightOption highlight` : \"\"} ${this.fadeOutSelection(option) ? 'disableSelection' : ''} ${this.isDisablePreSelectedValues(option) ? 'disableSelection' : ''}`}\n            onClick={() => this.onSelectItem(option)}\n          >\n            {showCheckbox && !singleSelect && (\n              <input\n                type=\"checkbox\"\n                readOnly\n                className={`checkbox`}\n                checked={isSelected}\n              />\n            )}\n            {this.props.optionValueDecorator(isObject ? option[displayValue] : (option || '').toString(), option)}\n          </li>\n      )\n    });\n  }\n\n  renderSelectedList() {\n    const { isObject = false, displayValue, style, singleSelect, customCloseIcon } = this.props;\n    const { selectedValues, closeIconType } = this.state;\n    return selectedValues.map((value, index) => (\n      <span className={`chip  ${singleSelect && 'singleChip'} ${this.isDisablePreSelectedValues(value) && 'disableSelection'}`} key={index} style={style['chips']}>\n        {this.props.selectedValueDecorator(!isObject ? (value || '').toString() : value[displayValue], value)}\n        {!this.isDisablePreSelectedValues(value) && (!customCloseIcon ? <img\n          className=\"icon_cancel closeIcon\"\n          src={closeIconType}\n          onClick={() => this.onRemoveSelectedItem(value)}\n        /> : <i className=\"custom-close\" onClick={() => this.onRemoveSelectedItem(value)}>{customCloseIcon}</i>)}\n      </span>\n    ));\n  }\n\n  isDisablePreSelectedValues(value) {\n    const { isObject, disablePreSelectedValues, displayValue } = this.props;\n    const { preSelectedValues } = this.state;\n    if (!disablePreSelectedValues || !preSelectedValues.length) {\n      return false;\n    }\n    if (isObject) {\n      return (\n        preSelectedValues.filter(i => i[displayValue] === value[displayValue])\n          .length > 0\n      );\n    }\n    return preSelectedValues.filter(i => i === value).length > 0;\n  }\n\n  fadeOutSelection(item) {\n    const { selectionLimit, showCheckbox, singleSelect } = this.props;\n    if (singleSelect) {\n      return;\n    }\n    const { selectedValues } = this.state;\n    if (selectionLimit == -1) {\n      return false;\n    }\n    if (selectionLimit != selectedValues.length) {\n      return false;\n    }\n    if (selectionLimit == selectedValues.length) {\n      if (!showCheckbox) {\n        return true;\n      } else {\n        if (this.isSelectedValue(item)) {\n          return false;\n        }\n        return true;\n      }\n    }\n  }\n\n  toggelOptionList() {\n    this.setState({\n      toggleOptionsList: !this.state.toggleOptionsList,\n      highlightOption: this.props.avoidHighlightFirstOption ? -1 : 0\n    });\n  }\n\n  onCloseOptionList() {\n    this.setState({\n      toggleOptionsList: false,\n      highlightOption: this.props.avoidHighlightFirstOption ? -1 : 0,\n      inputValue: ''\n    });\n  }\n\n  onFocus(){\n    if (this.state.toggleOptionsList) {\n      // @ts-ignore\n      clearTimeout(this.optionTimeout);\n    } else {\n      this.toggelOptionList();\n    }\n  }\n\n  onBlur(){\n    this.setState({ inputValue: '' }, this.filterOptionsByInput);\n    // @ts-ignore\n    this.optionTimeout = setTimeout(this.onCloseOptionList, 250);\n  }\n\n  isVisible(elem) {\n    return !!elem && !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length )\n  }\n\n  hideOnClickOutside() {\n    const element = document.getElementsByClassName('multiselect-container')[0];\n    const outsideClickListener = event => {\n        if (element && !element.contains(event.target) && this.isVisible(element)) {\n          this.toggelOptionList();\n        }\n    }\n    document.addEventListener('click', outsideClickListener)\n  }\n\n  renderMultiselectContainer() {\n    const { inputValue, toggleOptionsList, selectedValues } = this.state;\n    const { placeholder, style, singleSelect, id, name, hidePlaceholder, disable, showArrow, className, customArrow, hideSelectedList } = this.props;\n    return (\n      <div className={`multiselect-container multiSelectContainer ${disable ? `disable_ms` : ''} ${className || ''}`} id={id || 'multiselectContainerReact'} style={style['multiselectContainer']}>\n        <div className={`search-wrapper searchWrapper ${singleSelect ? 'singleSelect' : ''}`}\n          ref={this.searchWrapper} style={style['searchBox']}\n          onClick={singleSelect ? this.toggelOptionList : () => {}}\n        >\n          {!hideSelectedList && this.renderSelectedList()}\n          <input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tref={this.searchBox}\n            className={`searchBox ${singleSelect && selectedValues.length ? 'display-none' : ''}`}\n            id={`${id || 'search'}_input`}\n\t          name={`${name || 'search_name'}_input`}\n            onChange={this.onChange}\n            onKeyPress={this.onKeyPress}\n            value={inputValue}\n            onFocus={this.onFocus}\n            onBlur={this.onBlur}\n            placeholder={((singleSelect && selectedValues.length) || (hidePlaceholder && selectedValues.length)) ? '' : placeholder}\n            onKeyDown={this.onArrowKeyNavigation}\n            style={style['inputField']}\n            autoComplete=\"off\"\n            disabled={singleSelect || disable}\n          />\n          {(singleSelect || showArrow) && (\n            <>\n              {customArrow ? <span className=\"icon_down_dir\">{customArrow}</span> : <img src={DownArrow} className={`icon_cancel icon_down_dir`} />}\n            </>\n          )}\n        </div>\n        <div\n          className={`optionListContainer ${\n            toggleOptionsList ? 'displayBlock' : 'displayNone'\n          }`}\n          onMouseDown={(e) => {\n            e.preventDefault();\n          }}\n        >\n          {this.renderOptionList()}\n        </div>\n      </div>\n    );\n  }\n\n  render() {\n    return (\n      <OutsideAlerter outsideClick={this.onCloseOptionList}>\n        {this.renderMultiselectContainer()}\n      </OutsideAlerter>\n    );\n  }\n}\n\nMultiselect.defaultProps = {\n  options: [],\n  disablePreSelectedValues: false,\n  selectedValues: [],\n  isObject: true,\n  displayValue: \"model\",\n  showCheckbox: false,\n  selectionLimit: -1,\n  placeholder: \"Select\",\n\tgroupBy: \"\",\n\tstyle: {},\n\temptyRecordMsg: \"No Options Available\",\n\tonSelect: () => {},\n  onRemove: () => {},\n  onKeyPressFn: () => {},\n  closeIcon: 'circle2',\n  singleSelect: false,\n  caseSensitiveSearch: false,\n  id: '',\n  name: '',\n  closeOnSelect: true,\n  avoidHighlightFirstOption: false,\n  hidePlaceholder: false,\n  showArrow: false,\n  keepSearchTerm: false,\n  customCloseIcon: '',\n  className: '',\n  customArrow: undefined,\n  selectedValueDecorator: v => v,\n  optionValueDecorator: v => v\n} as IMultiselectProps;\n", "\n'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./multiselect-react-dropdown.cjs.production.min.js')\n} else {\n  module.exports = require('./multiselect-react-dropdown.cjs.development.js')\n}\n", "/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n  // START: fast-deep-equal es6/index.js 3.1.3\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n    // START: Modifications:\n    // 1. Extra `has<Type> &&` helpers in initial condition allow es6 code\n    //    to co-exist with es5.\n    // 2. Replace `for of` with es5 compliant iteration using `for`.\n    //    Basically, take:\n    //\n    //    ```js\n    //    for (i of a.entries())\n    //      if (!b.has(i[0])) return false;\n    //    ```\n    //\n    //    ... and convert to:\n    //\n    //    ```js\n    //    it = a.entries();\n    //    while (!(i = it.next()).done)\n    //      if (!b.has(i.value[0])) return false;\n    //    ```\n    //\n    //    **Note**: `i` access switches to `i.value`.\n    var it;\n    if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n      if (a.size !== b.size) return false;\n      it = a.entries();\n      while (!(i = it.next()).done)\n        if (!b.has(i.value[0])) return false;\n      it = a.entries();\n      while (!(i = it.next()).done)\n        if (!equal(i.value[1], b.get(i.value[0]))) return false;\n      return true;\n    }\n\n    if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n      if (a.size !== b.size) return false;\n      it = a.entries();\n      while (!(i = it.next()).done)\n        if (!b.has(i.value[0])) return false;\n      return true;\n    }\n    // END: Modifications\n\n    if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (a[i] !== b[i]) return false;\n      return true;\n    }\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    // START: Modifications:\n    // Apply guards for `Object.create(null)` handling. See:\n    // - https://github.com/FormidableLabs/react-fast-compare/issues/64\n    // - https://github.com/epoberezkin/fast-deep-equal/issues/49\n    if (a.valueOf !== Object.prototype.valueOf && typeof a.valueOf === 'function' && typeof b.valueOf === 'function') return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString && typeof a.toString === 'function' && typeof b.toString === 'function') return a.toString() === b.toString();\n    // END: Modifications\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n    // END: fast-deep-equal\n\n    // START: react-fast-compare\n    // custom handling for DOM elements\n    if (hasElementType && a instanceof Element) return false;\n\n    // custom handling for React/Preact\n    for (i = length; i-- !== 0;) {\n      if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n        // React-specific: avoid traversing React elements' _owner\n        // Preact-specific: avoid traversing Preact elements' __v and __o\n        //    __v = $_original / $_vnode\n        //    __o = $_owner\n        // These properties contain circular references and are not needed when\n        // comparing the actual elements (and not their owners)\n        // .$$typeof and ._store on just reasonable markers of elements\n\n        continue;\n      }\n\n      // all other properties should be traversed as usual\n      if (!equal(a[keys[i]], b[keys[i]])) return false;\n    }\n    // END: react-fast-compare\n\n    // START: fast-deep-equal\n    return true;\n  }\n\n  return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n  try {\n    return equal(a, b);\n  } catch (error) {\n    if (((error.message || '').match(/stack|recursion/i))) {\n      // warn on circular references, don't crash\n      // browsers give this different errors name and messages:\n      // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n      // firefox: \"InternalError\", too much recursion\"\n      // edge: \"Error\", \"Out of stack space\"\n      console.warn('react-fast-compare cannot handle circular refs');\n      return false;\n    }\n    // some other error. we should definitely know about these\n    throw error;\n  }\n};\n", "/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error(\n        'Minified exception occurred; use the non-minified dev environment ' +\n        'for the full error message and additional helpful warnings.'\n      );\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(\n        format.replace(/%s/g, function() { return args[argIndex++]; })\n      );\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n};\n\nmodule.exports = invariant;\n", "//\n\nmodule.exports = function shallowEqual(objA, objB, compare, compareContext) {\n  var ret = compare ? compare.call(compareContext, objA, objB) : void 0;\n\n  if (ret !== void 0) {\n    return !!ret;\n  }\n\n  if (objA === objB) {\n    return true;\n  }\n\n  if (typeof objA !== \"object\" || !objA || typeof objB !== \"object\" || !objB) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n\n  if (keysA.length !== keysB.length) {\n    return false;\n  }\n\n  var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);\n\n  // Test for A's keys different from B.\n  for (var idx = 0; idx < keysA.length; idx++) {\n    var key = keysA[idx];\n\n    if (!bHasOwnProperty(key)) {\n      return false;\n    }\n\n    var valueA = objA[key];\n    var valueB = objB[key];\n\n    ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n\n    if (ret === false || (ret === void 0 && valueA !== valueB)) {\n      return false;\n    }\n  }\n\n  return true;\n};\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n", "/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n", "/**\n * Module dependencies\n */\n\nvar debug = require('debug')('jsonp');\n\n/**\n * Module exports.\n */\n\nmodule.exports = jsonp;\n\n/**\n * Callback index.\n */\n\nvar count = 0;\n\n/**\n * Noop function.\n */\n\nfunction noop(){}\n\n/**\n * JSONP handler\n *\n * Options:\n *  - param {String} qs parameter (`callback`)\n *  - prefix {String} qs parameter (`__jp`)\n *  - name {String} qs parameter (`prefix` + incr)\n *  - timeout {Number} how long after a timeout error is emitted (`60000`)\n *\n * @param {String} url\n * @param {Object|Function} optional options / callback\n * @param {Function} optional callback\n */\n\nfunction jsonp(url, opts, fn){\n  if ('function' == typeof opts) {\n    fn = opts;\n    opts = {};\n  }\n  if (!opts) opts = {};\n\n  var prefix = opts.prefix || '__jp';\n\n  // use the callback name that was passed if one was provided.\n  // otherwise generate a unique name by incrementing our counter.\n  var id = opts.name || (prefix + (count++));\n\n  var param = opts.param || 'callback';\n  var timeout = null != opts.timeout ? opts.timeout : 60000;\n  var enc = encodeURIComponent;\n  var target = document.getElementsByTagName('script')[0] || document.head;\n  var script;\n  var timer;\n\n\n  if (timeout) {\n    timer = setTimeout(function(){\n      cleanup();\n      if (fn) fn(new Error('Timeout'));\n    }, timeout);\n  }\n\n  function cleanup(){\n    if (script.parentNode) script.parentNode.removeChild(script);\n    window[id] = noop;\n    if (timer) clearTimeout(timer);\n  }\n\n  function cancel(){\n    if (window[id]) {\n      cleanup();\n    }\n  }\n\n  window[id] = function(data){\n    debug('jsonp got', data);\n    cleanup();\n    if (fn) fn(null, data);\n  };\n\n  // add qs component\n  url += (~url.indexOf('?') ? '&' : '?') + param + '=' + enc(id);\n  url = url.replace('?&', '?');\n\n  debug('jsonp req \"%s\"', url);\n\n  // create script\n  script = document.createElement('script');\n  script.src = url;\n  target.parentNode.insertBefore(script, target);\n\n  return cancel;\n}\n", "var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n", "var isarray = require('isarray')\n\n/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n  // Match escaped characters that would otherwise appear in future matches.\n  // This allows the user to escape special characters that won't transform.\n  '(\\\\\\\\.)',\n  // Match Express-style parameters and un-named parameters with a prefix\n  // and optional suffixes. Matches appear as:\n  //\n  // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n  // \"/route(\\\\d+)\"  => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n  // \"/*\"            => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n  '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param  {string}  str\n * @param  {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n  var tokens = []\n  var key = 0\n  var index = 0\n  var path = ''\n  var defaultDelimiter = options && options.delimiter || '/'\n  var res\n\n  while ((res = PATH_REGEXP.exec(str)) != null) {\n    var m = res[0]\n    var escaped = res[1]\n    var offset = res.index\n    path += str.slice(index, offset)\n    index = offset + m.length\n\n    // Ignore already escaped sequences.\n    if (escaped) {\n      path += escaped[1]\n      continue\n    }\n\n    var next = str[index]\n    var prefix = res[2]\n    var name = res[3]\n    var capture = res[4]\n    var group = res[5]\n    var modifier = res[6]\n    var asterisk = res[7]\n\n    // Push the current path onto the tokens.\n    if (path) {\n      tokens.push(path)\n      path = ''\n    }\n\n    var partial = prefix != null && next != null && next !== prefix\n    var repeat = modifier === '+' || modifier === '*'\n    var optional = modifier === '?' || modifier === '*'\n    var delimiter = prefix || defaultDelimiter\n    var pattern = capture || group\n    var prevText = prefix || (typeof tokens[tokens.length - 1] === 'string' ? tokens[tokens.length - 1] : '')\n\n    tokens.push({\n      name: name || key++,\n      prefix: prefix || '',\n      delimiter: delimiter,\n      optional: optional,\n      repeat: repeat,\n      partial: partial,\n      asterisk: !!asterisk,\n      pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : restrictBacktrack(delimiter, prevText))\n    })\n  }\n\n  // Match any characters still remaining.\n  if (index < str.length) {\n    path += str.substr(index)\n  }\n\n  // If the path exists, push it onto the end.\n  if (path) {\n    tokens.push(path)\n  }\n\n  return tokens\n}\n\nfunction restrictBacktrack(delimiter, prevText) {\n  if (!prevText || prevText.indexOf(delimiter) > -1) {\n    return '[^' + escapeString(delimiter) + ']+?'\n  }\n\n  return escapeString(prevText) + '|(?:(?!' + escapeString(prevText) + ')[^' + escapeString(delimiter) + '])+?'\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param  {string}             str\n * @param  {Object=}            options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n  return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param  {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n  return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n  })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param  {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n  return encodeURI(str).replace(/[?#]/g, function (c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n  })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n  // Compile all the tokens into regexps.\n  var matches = new Array(tokens.length)\n\n  // Compile all the patterns before compilation.\n  for (var i = 0; i < tokens.length; i++) {\n    if (typeof tokens[i] === 'object') {\n      matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))\n    }\n  }\n\n  return function (obj, opts) {\n    var path = ''\n    var data = obj || {}\n    var options = opts || {}\n    var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent\n\n    for (var i = 0; i < tokens.length; i++) {\n      var token = tokens[i]\n\n      if (typeof token === 'string') {\n        path += token\n\n        continue\n      }\n\n      var value = data[token.name]\n      var segment\n\n      if (value == null) {\n        if (token.optional) {\n          // Prepend partial segment prefixes.\n          if (token.partial) {\n            path += token.prefix\n          }\n\n          continue\n        } else {\n          throw new TypeError('Expected \"' + token.name + '\" to be defined')\n        }\n      }\n\n      if (isarray(value)) {\n        if (!token.repeat) {\n          throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n        }\n\n        if (value.length === 0) {\n          if (token.optional) {\n            continue\n          } else {\n            throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n          }\n        }\n\n        for (var j = 0; j < value.length; j++) {\n          segment = encode(value[j])\n\n          if (!matches[i].test(segment)) {\n            throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n          }\n\n          path += (j === 0 ? token.prefix : token.delimiter) + segment\n        }\n\n        continue\n      }\n\n      segment = token.asterisk ? encodeAsterisk(value) : encode(value)\n\n      if (!matches[i].test(segment)) {\n        throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n      }\n\n      path += token.prefix + segment\n    }\n\n    return path\n  }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param  {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n  return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param  {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n  return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param  {!RegExp} re\n * @param  {Array}   keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n  re.keys = keys\n  return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param  {Object} options\n * @return {string}\n */\nfunction flags (options) {\n  return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param  {!RegExp} path\n * @param  {!Array}  keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n  // Use a negative lookahead to match only capturing groups.\n  var groups = path.source.match(/\\((?!\\?)/g)\n\n  if (groups) {\n    for (var i = 0; i < groups.length; i++) {\n      keys.push({\n        name: i,\n        prefix: null,\n        delimiter: null,\n        optional: false,\n        repeat: false,\n        partial: false,\n        asterisk: false,\n        pattern: null\n      })\n    }\n  }\n\n  return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param  {!Array}  path\n * @param  {Array}   keys\n * @param  {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n  var parts = []\n\n  for (var i = 0; i < path.length; i++) {\n    parts.push(pathToRegexp(path[i], keys, options).source)\n  }\n\n  var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))\n\n  return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param  {string}  path\n * @param  {!Array}  keys\n * @param  {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n  return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param  {!Array}          tokens\n * @param  {(Array|Object)=} keys\n * @param  {Object=}         options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n  if (!isarray(keys)) {\n    options = /** @type {!Object} */ (keys || options)\n    keys = []\n  }\n\n  options = options || {}\n\n  var strict = options.strict\n  var end = options.end !== false\n  var route = ''\n\n  // Iterate over the tokens and create our regexp string.\n  for (var i = 0; i < tokens.length; i++) {\n    var token = tokens[i]\n\n    if (typeof token === 'string') {\n      route += escapeString(token)\n    } else {\n      var prefix = escapeString(token.prefix)\n      var capture = '(?:' + token.pattern + ')'\n\n      keys.push(token)\n\n      if (token.repeat) {\n        capture += '(?:' + prefix + capture + ')*'\n      }\n\n      if (token.optional) {\n        if (!token.partial) {\n          capture = '(?:' + prefix + '(' + capture + '))?'\n        } else {\n          capture = prefix + '(' + capture + ')?'\n        }\n      } else {\n        capture = prefix + '(' + capture + ')'\n      }\n\n      route += capture\n    }\n  }\n\n  var delimiter = escapeString(options.delimiter || '/')\n  var endsWithDelimiter = route.slice(-delimiter.length) === delimiter\n\n  // In non-strict mode we allow a slash at the end of match. If the path to\n  // match already ends with a slash, we remove it for consistency. The slash\n  // is valid at the end of a path match, not in the middle. This is important\n  // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n  if (!strict) {\n    route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'\n  }\n\n  if (end) {\n    route += '$'\n  } else {\n    // In non-ending mode, we need the capturing groups to match as much as\n    // possible by using a positive lookahead to the end or next path segment.\n    route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'\n  }\n\n  return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param  {(string|RegExp|Array)} path\n * @param  {(Array|Object)=}       keys\n * @param  {Object=}               options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n  if (!isarray(keys)) {\n    options = /** @type {!Object} */ (keys || options)\n    keys = []\n  }\n\n  options = options || {}\n\n  if (path instanceof RegExp) {\n    return regexpToRegexp(path, /** @type {!Array} */ (keys))\n  }\n\n  if (isarray(path)) {\n    return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n  }\n\n  return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n", "/**\n * Map of all Contentful block types. Blocks contain inline or block nodes.\n */\nexport enum BLOCKS {\n  DOCUMENT = 'document',\n  PARAGRAPH = 'paragraph',\n\n  HEADING_1 = 'heading-1',\n  HEADING_2 = 'heading-2',\n  HEADING_3 = 'heading-3',\n  HEADING_4 = 'heading-4',\n  HEADING_5 = 'heading-5',\n  HEADING_6 = 'heading-6',\n\n  OL_LIST = 'ordered-list',\n  UL_LIST = 'unordered-list',\n  LIST_ITEM = 'list-item',\n\n  HR = 'hr',\n  QUOTE = 'blockquote',\n\n  EMBEDDED_ENTRY = 'embedded-entry-block',\n  EMBEDDED_ASSET = 'embedded-asset-block',\n  EMBEDDED_RESOURCE = 'embedded-resource-block',\n\n  TABLE = 'table',\n  TABLE_ROW = 'table-row',\n  TABLE_CELL = 'table-cell',\n  TABLE_HEADER_CELL = 'table-header-cell',\n}\n", "/**\n * Map of all Contentful inline types. Inline contain inline or text nodes.\n */\nexport enum INLINES {\n  HYPERLINK = 'hyperlink',\n  ENTRY_HYPERLINK = 'entry-hyperlink',\n  ASSET_HYPERLINK = 'asset-hyperlink',\n  RESOURCE_HYPERLINK = 'resource-hyperlink',\n  EMBEDDED_ENTRY = 'embedded-entry-inline',\n  EMBEDDED_RESOURCE = 'embedded-resource-inline',\n}\n", "/**\n * Map of all Contentful marks.\n */\nexport enum MARKS {\n  BOLD = 'bold',\n  ITALIC = 'italic',\n  UNDERLINE = 'underline',\n  CODE = 'code',\n  SUPERSCRIPT = 'superscript',\n  SUBSCRIPT = 'subscript',\n}\n", "import { BLOCKS } from './blocks';\nimport { INLINES } from './inlines';\nimport { MARKS } from './marks';\n\nexport type TopLevelBlockEnum =\n  | BLOCKS.PARAGRAPH\n  | BLOCKS.HEADING_1\n  | BLOCKS.HEADING_2\n  | BLOCKS.HEADING_3\n  | BLOCKS.HEADING_4\n  | BLOCKS.HEADING_5\n  | BLOCKS.HEADING_6\n  | BLOCKS.OL_LIST\n  | BLOCKS.UL_LIST\n  | BLOCKS.HR\n  | BLOCKS.QUOTE\n  | BLOCKS.EMBEDDED_ENTRY\n  | BLOCKS.EMBEDDED_ASSET\n  | BLOCKS.EMBEDDED_RESOURCE\n  | BLOCKS.TABLE;\n\n/**\n * Array of all top level block types.\n * Only these block types can be the direct children of the document.\n */\nexport const TOP_LEVEL_BLOCKS: TopLevelBlockEnum[] = [\n  BLOCKS.PARAGRAPH,\n  BLOCKS.HEADING_1,\n  BLOCKS.HEADING_2,\n  BLOCKS.HEADING_3,\n  BLOCKS.HEADING_4,\n  BLOCKS.HEADING_5,\n  BLOCKS.HEADING_6,\n  BLOCKS.OL_LIST,\n  BLOCKS.UL_LIST,\n  BLOCKS.HR,\n  BLOCKS.QUOTE,\n  BLOCKS.EMBEDDED_ENTRY,\n  BLOCKS.EMBEDDED_ASSET,\n  BLOCKS.EMBEDDED_RESOURCE,\n  BLOCKS.TABLE,\n];\n\nexport type ListItemBlockEnum =\n  | BLOCKS.PARAGRAPH\n  | BLOCKS.HEADING_1\n  | BLOCKS.HEADING_2\n  | BLOCKS.HEADING_3\n  | BLOCKS.HEADING_4\n  | BLOCKS.HEADING_5\n  | BLOCKS.HEADING_6\n  | BLOCKS.OL_LIST\n  | BLOCKS.UL_LIST\n  | BLOCKS.HR\n  | BLOCKS.QUOTE\n  | BLOCKS.EMBEDDED_ENTRY\n  | BLOCKS.EMBEDDED_ASSET\n  | BLOCKS.EMBEDDED_RESOURCE;\n\n/**\n * Array of all allowed block types inside list items\n */\nexport const LIST_ITEM_BLOCKS: TopLevelBlockEnum[] = [\n  BLOCKS.PARAGRAPH,\n  BLOCKS.HEADING_1,\n  BLOCKS.HEADING_2,\n  BLOCKS.HEADING_3,\n  BLOCKS.HEADING_4,\n  BLOCKS.HEADING_5,\n  BLOCKS.HEADING_6,\n  BLOCKS.OL_LIST,\n  BLOCKS.UL_LIST,\n  BLOCKS.HR,\n  BLOCKS.QUOTE,\n  BLOCKS.EMBEDDED_ENTRY,\n  BLOCKS.EMBEDDED_ASSET,\n  BLOCKS.EMBEDDED_RESOURCE,\n];\n\nexport const TABLE_BLOCKS = [\n  BLOCKS.TABLE,\n  BLOCKS.TABLE_ROW,\n  BLOCKS.TABLE_CELL,\n  BLOCKS.TABLE_HEADER_CELL,\n];\n\n/**\n * Array of all void block types\n */\nexport const VOID_BLOCKS = [\n  BLOCKS.HR,\n  BLOCKS.EMBEDDED_ENTRY,\n  BLOCKS.EMBEDDED_ASSET,\n  BLOCKS.EMBEDDED_RESOURCE,\n];\n\n/**\n * Dictionary of all container block types, and the set block types they accept as children.\n *\n * Note: This does not include `[BLOCKS.DOCUMENT]: TOP_LEVEL_BLOCKS`\n */\nexport const CONTAINERS = {\n  [BLOCKS.OL_LIST]: [BLOCKS.LIST_ITEM],\n  [BLOCKS.UL_LIST]: [BLOCKS.LIST_ITEM],\n  [BLOCKS.LIST_ITEM]: LIST_ITEM_BLOCKS,\n  [BLOCKS.QUOTE]: [BLOCKS.PARAGRAPH],\n  [BLOCKS.TABLE]: [BLOCKS.TABLE_ROW],\n  [BLOCKS.TABLE_ROW]: [BLOCKS.TABLE_CELL, BLOCKS.TABLE_HEADER_CELL],\n  [BLOCKS.TABLE_CELL]: [BLOCKS.PARAGRAPH],\n  [BLOCKS.TABLE_HEADER_CELL]: [BLOCKS.PARAGRAPH],\n};\n\n/**\n * Array of all heading levels\n */\nexport const HEADINGS = [\n  BLOCKS.HEADING_1,\n  BLOCKS.HEADING_2,\n  BLOCKS.HEADING_3,\n  BLOCKS.HEADING_4,\n  BLOCKS.HEADING_5,\n  BLOCKS.HEADING_6,\n];\n\n/**\n * Array of all block types that may contain text and inline nodes.\n */\nexport const TEXT_CONTAINERS = [BLOCKS.PARAGRAPH, ...HEADINGS];\n\n/**\n * Node types before `tables` release.\n */\nexport const V1_NODE_TYPES = [\n  BLOCKS.DOCUMENT,\n  BLOCKS.PARAGRAPH,\n  BLOCKS.HEADING_1,\n  BLOCKS.HEADING_2,\n  BLOCKS.HEADING_3,\n  BLOCKS.HEADING_4,\n  BLOCKS.HEADING_5,\n  BLOCKS.HEADING_6,\n  BLOCKS.OL_LIST,\n  BLOCKS.UL_LIST,\n  BLOCKS.LIST_ITEM,\n  BLOCKS.HR,\n  BLOCKS.QUOTE,\n  BLOCKS.EMBEDDED_ENTRY,\n  BLOCKS.EMBEDDED_ASSET,\n  INLINES.HYPERLINK,\n  INLINES.ENTRY_HYPERLINK,\n  INLINES.ASSET_HYPERLINK,\n  INLINES.EMBEDDED_ENTRY,\n  'text',\n];\n\n/**\n * Marks before `superscript` & `subscript` release.\n */\nexport const V1_MARKS = [MARKS.BOLD, MARKS.CODE, MARKS.ITALIC, MARKS.UNDERLINE];\n", "import { Document } from './types';\nimport { BLOCKS } from './blocks';\n\n/**\n * A rich text document considered to be empty.\n * Any other document structure than this is not considered empty.\n */\nexport const EMPTY_DOCUMENT: Document = {\n  nodeType: BLOCKS.DOCUMENT,\n  data: {},\n  content: [\n    {\n      nodeType: BLOCKS.PARAGRAPH,\n      data: {},\n      content: [\n        {\n          nodeType: 'text',\n          value: '',\n          marks: [],\n          data: {},\n        },\n      ],\n    },\n  ],\n};\n", "import { Node, Block, Inline, Text } from './types';\nimport { BLOCKS } from './blocks';\nimport { INLINES } from './inlines';\n\n/**\n * Tiny replacement for Object.values(object).includes(key) to\n * avoid including CoreJS polyfills\n */\nfunction hasValue(obj: Record<string, unknown>, value: unknown) {\n  for (const key of Object.keys(obj)) {\n    if (value === obj[key]) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * Checks if the node is an instance of Inline.\n */\nexport function isInline(node: Node): node is Inline {\n  return hasValue(INLINES, node.nodeType);\n}\n\n/**\n * Checks if the node is an instance of Block.\n */\nexport function isBlock(node: Node): node is Block {\n  return hasValue(BLOCKS, node.nodeType);\n}\n\n/**\n * Checks if the node is an instance of Text.\n */\nexport function isText(node: Node): node is Text {\n  return node.nodeType === 'text';\n}\n", "export { BLOCKS } from './blocks';\nexport { INLINES } from './inlines';\nexport { MARKS } from './marks';\n\nexport * from './schemaConstraints';\n\nexport * from './types';\nexport * from './nodeTypes';\n\nexport { EMPTY_DOCUMENT } from './emptyDocument';\n\nimport * as helpers from './helpers';\nexport { helpers };\n", "import { cloneElement, isValidElement, ReactNode } from 'react';\n\nexport function appendKeyToValidElement(element: ReactNode, key: number): ReactNode {\n  if (isValidElement(element) && element.key === null) {\n    return cloneElement(element, { key });\n  }\n  return element;\n}\n", "import React, { ReactNode } from 'react';\nimport { helpers, Mark } from '@contentful/rich-text-types';\nimport { CommonNode, Options } from '..';\nimport { appendKeyToValidElement } from './appendKeyToValidElement';\n\nexport function nodeListToReactComponents(nodes: CommonNode[], options: Options): ReactNode {\n  return nodes.map((node: CommonNode, index: number): ReactNode => {\n    return appendKeyToValidElement(nodeToReactComponent(node, options), index);\n  });\n}\n\nexport function nodeToReactComponent(node: CommonNode, options: Options): ReactNode {\n  const { renderNode, renderMark, renderText, preserveWhitespace } = options;\n\n  if (helpers.isText(node)) {\n    let nodeValue: ReactNode = renderText ? renderText(node.value) : node.value;\n\n    if (preserveWhitespace) {\n      // Preserve multiple spaces.\n      nodeValue = (nodeValue as string).replace(/ {2,}/g, (match) => '\\u00A0'.repeat(match.length));\n\n      // Preserve line breaks.\n      let lines = (nodeValue as string).split('\\n');\n      let jsxLines: (string | JSX.Element)[] = [];\n      lines.forEach((line, index) => {\n        jsxLines.push(line);\n        if (index !== lines.length - 1) {\n          jsxLines.push(<br />);\n        }\n      });\n      nodeValue = jsxLines;\n    }\n\n    return node.marks.reduce((value: ReactNode, mark: Mark): ReactNode => {\n      if (!renderMark[mark.type]) {\n        return value;\n      }\n      return renderMark[mark.type](value);\n    }, nodeValue);\n  } else {\n    const children: ReactNode = nodeListToReactComponents(node.content, options);\n    if (!node.nodeType || !renderNode[node.nodeType]) {\n      return <>{children}</>;\n    }\n    return renderNode[node.nodeType](node, children);\n  }\n}\n", "import React, { ReactNode } from 'react';\nimport { Block, BLOCKS, Document, Inline, INLINES, MARKS, Text } from '@contentful/rich-text-types';\nimport { nodeToReactComponent } from './util/nodeListToReactComponents';\n\nconst defaultNodeRenderers: RenderNode = {\n  [BLOCKS.DOCUMENT]: (node, children) => children,\n  [BLOCKS.PARAGRAPH]: (node, children) => <p>{children}</p>,\n  [BLOCKS.HEADING_1]: (node, children) => <h1>{children}</h1>,\n  [BLOCKS.HEADING_2]: (node, children) => <h2>{children}</h2>,\n  [BLOCKS.HEADING_3]: (node, children) => <h3>{children}</h3>,\n  [BLOCKS.HEADING_4]: (node, children) => <h4>{children}</h4>,\n  [BLOCKS.HEADING_5]: (node, children) => <h5>{children}</h5>,\n  [BLOCKS.HEADING_6]: (node, children) => <h6>{children}</h6>,\n  [BLOCKS.EMBEDDED_ENTRY]: (node, children) => <div>{children}</div>,\n  [BLOCKS.EMBEDDED_RESOURCE]: (node, children) => <div>{children}</div>,\n  [BLOCKS.UL_LIST]: (node, children) => <ul>{children}</ul>,\n  [BLOCKS.OL_LIST]: (node, children) => <ol>{children}</ol>,\n  [BLOCKS.LIST_ITEM]: (node, children) => <li>{children}</li>,\n  [BLOCKS.QUOTE]: (node, children) => <blockquote>{children}</blockquote>,\n  [BLOCKS.HR]: () => <hr />,\n  [BLOCKS.TABLE]: (node, children) => (\n    <table>\n      <tbody>{children}</tbody>\n    </table>\n  ),\n  [BLOCKS.TABLE_ROW]: (node, children) => <tr>{children}</tr>,\n  [BLOCKS.TABLE_HEADER_CELL]: (node, children) => <th>{children}</th>,\n  [BLOCKS.TABLE_CELL]: (node, children) => <td>{children}</td>,\n  [INLINES.ASSET_HYPERLINK]: (node) => defaultInline(INLINES.ASSET_HYPERLINK, node as Inline),\n  [INLINES.ENTRY_HYPERLINK]: (node) => defaultInline(INLINES.ENTRY_HYPERLINK, node as Inline),\n  [INLINES.RESOURCE_HYPERLINK]: (node) =>\n    defaultInlineResource(INLINES.RESOURCE_HYPERLINK, node as Inline),\n  [INLINES.EMBEDDED_ENTRY]: (node) => defaultInline(INLINES.EMBEDDED_ENTRY, node as Inline),\n  [INLINES.EMBEDDED_RESOURCE]: (node, children) =>\n    defaultInlineResource(INLINES.EMBEDDED_RESOURCE, node as Inline),\n  [INLINES.HYPERLINK]: (node, children) => <a href={node.data.uri}>{children}</a>,\n};\n\nconst defaultMarkRenderers: RenderMark = {\n  [MARKS.BOLD]: (text) => <b>{text}</b>,\n  [MARKS.ITALIC]: (text) => <i>{text}</i>,\n  [MARKS.UNDERLINE]: (text) => <u>{text}</u>,\n  [MARKS.CODE]: (text) => <code>{text}</code>,\n  [MARKS.SUPERSCRIPT]: (text) => <sup>{text}</sup>,\n  [MARKS.SUBSCRIPT]: (text) => <sub>{text}</sub>,\n};\n\nfunction defaultInline(type: string, node: Inline): ReactNode {\n  return (\n    <span key={node.data.target.sys.id}>\n      type: {node.nodeType} id: {node.data.target.sys.id}\n    </span>\n  );\n}\n\nfunction defaultInlineResource(type: string, node: Inline) {\n  return (\n    <span key={node.data.target.sys.urn}>\n      type: {node.nodeType} urn: {node.data.target.sys.urn}\n    </span>\n  );\n}\n\nexport type CommonNode = Text | Block | Inline;\n\nexport interface NodeRenderer {\n  (node: Block | Inline, children: ReactNode): ReactNode;\n}\n\nexport interface RenderNode {\n  [k: string]: NodeRenderer;\n}\n\nexport interface RenderMark {\n  [k: string]: (text: ReactNode) => ReactNode;\n}\n\nexport interface RenderText {\n  (text: string): ReactNode;\n}\n\nexport interface Options {\n  /**\n   * Node renderers\n   */\n  renderNode?: RenderNode;\n  /**\n   * Mark renderers\n   */\n  renderMark?: RenderMark;\n  /**\n   * Text renderer\n   */\n  renderText?: RenderText;\n  /**\n   * Keep line breaks and multiple spaces\n   */\n  preserveWhitespace?: boolean;\n}\n\n/**\n * Serialize a Contentful Rich Text `document` to React tree\n */\nexport function documentToReactComponents(\n  richTextDocument: Document,\n  options: Options = {},\n): ReactNode {\n  if (!richTextDocument) {\n    return null;\n  }\n\n  return nodeToReactComponent(richTextDocument, {\n    renderNode: {\n      ...defaultNodeRenderers,\n      ...options.renderNode,\n    },\n    renderMark: {\n      ...defaultMarkRenderers,\n      ...options.renderMark,\n    },\n    renderText: options.renderText,\n    preserveWhitespace: options.preserveWhitespace,\n  });\n}\n", "'use strict';\n\n\nvar resolvers = {\n  simple: function (args) {\n    if (!args.length) return '\\u0001';\n\n    return args.join('\\u0002');\n  },\n\n  json: function (args) {\n    if (!args.length) return '\\u0001';\n\n    var res = [];\n\n    for (var i = args.length - 1; i >= 0; i--) {\n      res.push(JSON.stringify(args[i]));\n    }\n\n    return res.join('\\u0002');\n  }\n};\n\n\nfunction createFlexResolver(params) {\n  params.forEach(function (p) {\n    if (typeof p === 'string' && !resolvers.hasOwnProperty(p)) {\n      throw new Error('promise-memoize: unknown value \"' + p + '\" in resolve option');\n    }\n  });\n\n  return function (args) {\n    var max = Math.min(params.length, args.length);\n\n    if (!max) return '\\u0001';\n\n    var res = [];\n\n    for (var i = 0; i < max; i++) {\n      if (typeof params[i] === 'string') {\n        res.push(resolvers[params[i]]([ args[i] ]));\n      } else {\n        res.push(params[i](args[i]));\n      }\n    }\n\n    return res.join('\\u0002');\n  };\n}\n\n\nmodule.exports = function createResolver(how) {\n  if (typeof how === 'undefined') return resolvers.simple;\n\n  if (typeof how === 'string' && resolvers.hasOwnProperty(how)) return resolvers[how];\n\n  if (Array.isArray(how)) return createFlexResolver(how);\n\n  if (Object.prototype.toString.call(how) === '[object Function]') return how;\n\n  throw new Error('promise-memoize: invalid resolve option');\n};\n", "'use strict';\n\n\nvar resolver = require('./resolver');\n\n////////////////////////////////////////////////////////////////////////////////\n// Helpers\n\nfunction _toTrue()  { return true; }\nfunction _toFalse() { return false; }\n\nfunction pSuccess(promise) { return promise.then(_toTrue, _toFalse); }\n\nfunction _pass(data) { return data; }\nfunction _throw(err) { throw err; }\n\nfunction ensurePromise(thenable) {\n  return thenable.then(_pass, _throw);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction createCacheObj(result, args) {\n  return {\n    result:         result,\n    args:           args,\n    expire_id:      0,\n    prefetch_id:    0,\n    need_prefetch:  false\n  };\n}\n\n\nfunction destroyCacheObj(cache, key) {\n  if (!cache[key]) return; // Safeguard\n\n  clearTimeout(cache[key].expire_id);\n  clearTimeout(cache[key].prefetch_id);\n\n  delete cache[key];\n}\n\n\nfunction askPrefetch(cache, key) {\n  if (!cache[key]) return; // Safeguard\n\n  cache[key].need_prefetch = true;\n}\n\n\nfunction _track_proceed(args) {\n  // args = [ pSuccess(cache[key].result), cache, key, config ]\n  var success = args[0],\n      cache   = args[1],\n      key     = args[2],\n      config  = args[3];\n\n  if (!cache[key]) return; // Safeguard, if .clear() happens while fetch\n\n  if (success) {\n\n    if (!config.maxAge) return;\n\n    // Such call will not work in IE9 without polyfill.\n    // https://developer.mozilla.org/docs/Web/API/WindowTimers/setTimeout\n    cache[key].expire_id   = setTimeout(destroyCacheObj, config.maxAge, cache, key);\n    cache[key].prefetch_id = setTimeout(askPrefetch, config.maxAge * 0.7, cache, key);\n\n    /* istanbul ignore else */\n    if (cache[key].expire_id.unref) cache[key].expire_id.unref();\n\n    /* istanbul ignore else */\n    if (cache[key].prefetch_id.unref) cache[key].prefetch_id.unref();\n\n    return;\n  }\n\n  // on fail\n\n  if (!config.maxErrorAge) {\n    destroyCacheObj(cache, key);\n    return;\n  }\n\n  // Don't try to prefetch on error, for simplicity\n  cache[key].expire_id = setTimeout(destroyCacheObj, config.maxErrorAge, cache, key);\n\n  /* istanbul ignore else */\n  if (cache[key].expire_id.unref) cache[key].expire_id.unref();\n\n}\n\n\n// Wait for data & start timers, depending on result & options\nfunction trackCacheObj(cache, key, config) {\n  var P = cache[key].result.constructor;\n\n  P.all([\n    pSuccess(cache[key].result),\n    cache,\n    key,\n    config\n  ])\n    .then(_track_proceed);\n}\n\n\nfunction _prefetch_proceed(args) {\n  // args = [ pSuccess(cache[key].result), cache, key, config, [ result ] ]\n  var success = args[0],\n      cache   = args[1],\n      key     = args[2],\n      config  = args[3],\n      result  = args[4][0];\n\n  if (!cache[key]) return; // Safeguard, if .clear() happens while fetch\n\n  if (!success) return;\n\n  cache[key].result = result;\n  clearTimeout(cache[key].expire_id);\n\n  /*eslint-disable no-use-before-define*/\n  trackCacheObj(cache, key, config);\n}\n\n\nfunction doPrefetch(cache, key, config) {\n  var result = ensurePromise(config.fn.apply(null, cache[key].args)),\n      P      = result.constructor;\n\n  cache[key].need_prefetch = false;\n\n  // On success - substitute data & restart tracker.\n  // On fail - do nothing, data will be killed by expiration timer.\n  P.all([\n    pSuccess(result),\n    cache,\n    key,\n    config,\n    [ result ] // protect from resolve\n  ])\n    .then(_prefetch_proceed);\n}\n\n\nmodule.exports = function promiseMemoize(fn, options) {\n  var cache       = {},\n      _options    = options || {},\n      resolve     = resolver(_options.resolve),\n      config      = {\n        fn:          fn,\n        maxAge:      _options.maxAge || 0,\n        maxErrorAge: _options.maxErrorAge || 0\n      };\n\n  function memoizedFn() {\n    var args = new Array(arguments.length);\n\n    for (var i = 0; i < args.length; i++) args[i] = arguments[i];\n\n    var key = resolve(args);\n\n    if (cache[key]) {\n      if (cache[key].need_prefetch) doPrefetch(cache, key, config);\n\n    } else {\n      cache[key] = createCacheObj(\n        ensurePromise(config.fn.apply(null, args)),\n        config.maxAge || config.maxErrorAge ? args : null // Store args only if needed\n      );\n      trackCacheObj(cache, key, config);\n    }\n\n    return cache[key].result;\n  }\n\n  memoizedFn.clear = function () {\n    var keys = Object.keys(cache);\n\n    keys.forEach(function (key) { destroyCacheObj(cache, key); });\n\n    return keys.length; // Number of cleared keys, useful for tests\n  };\n\n  return memoizedFn;\n};\n", "'use strict';\n\n\nmodule.exports = require('./lib/memoize');\n", "/** State that is returned when something is registered to the async data controller. */\nexport interface AsyncDataState<T> {\n  data?: T;\n  error?: unknown;\n  isLoading: boolean;\n  hasLoaded: boolean;\n}\n/** Props for registering something to the async data controller */\nexport interface AsyncDataProps<T> {\n  /**\n   * The id used to store the related callbacks in the Map/Cache. Make sure this is shared only\n   * among things that are listening to the same promise, otherwise things will need their own\n   * unique dataId.\n   */\n  dataId: string;\n  /** The time to live in the cache. */\n  ttlMs?: number;\n  /**\n   * Async function that we want to track with the async data controller. Will not fire if entry is\n   * found in the cache.\n   */\n  dataAsync: () => Promise<T>;\n  /** Fires if the async function errors (or onData errors). */\n  onError?: (error: unknown) => void;\n  /** Fires when the async function resolves. */\n  onData?: (data: T) => void;\n}\n\nexport interface CacheEntry {\n  data?: unknown;\n  error?: unknown;\n  expiryTime: number;\n}\n\ntype DataListener<T = unknown> = (data: T) => void;\ntype ErrorListener = (error: unknown) => void;\n\n/**\n * Class that helps track the completion of multiple async functions. This can be used to make sure\n * all async calls have finished running on the server side before passing the html to the client.\n *\n * Also includes a simple cache to prevent re-fetching data that we already have.\n */\nexport class AsyncDataController {\n  private readonly clock: () => number;\n  private readonly resultCache: Map<string, CacheEntry>;\n  private readonly onDataListeners = new Map<string, Set<DataListener>>();\n  private readonly onErrorListeners = new Map<string, Set<ErrorListener>>();\n  private readonly unsettledPromises = new Map<string, Promise<unknown>>();\n  private readonly defaultExpiryTimeMs: number;\n  private readonly errorHandler: (e: unknown) => unknown;\n  private settledPromiseCount = 0;\n\n  constructor(props: {\n    clock?: () => number;\n    cache?: Map<string, CacheEntry>;\n    defaultExpiryTimeMs?: number;\n    errorHandler?: (e: unknown) => unknown;\n  }) {\n    this.clock = props.clock ?? Date.now;\n    this.resultCache = props.cache ?? new Map<string, CacheEntry>();\n    this.defaultExpiryTimeMs = props.defaultExpiryTimeMs ?? 30e3;\n    this.errorHandler = props.errorHandler ?? console.error;\n  }\n\n  /**\n   * Registers an async function to the AsyncDataController. This is used to tell the controller\n   * that this is an async call that we want to wait for. If the dataId is already found in the\n   * cache, it will return the data, otherwise it will return the loading state.\n   *\n   * TODO: https://jira.sc-corp.net/browse/ENTWEB-8313 Add Retry Capabilities !IMPORTANT!\n   *\n   * @param props List of props and options for registering an async function to the listener\n   * @returns The state of the function. If it is loading, it will return the loading state. If the\n   *   promise has resolved already, it will return the data found in the cache.\n   */\n  public register = <T>(props: AsyncDataProps<T>): AsyncDataState<T> => {\n    const now = this.clock();\n\n    // Check to see if data is in the store.\n    if (this.resultCache.has(props.dataId)) {\n      const cachedEntry = this.resultCache.get(props.dataId)!;\n\n      if (cachedEntry.expiryTime >= now) {\n        if (cachedEntry.error) {\n          return {\n            error: cachedEntry.error,\n            hasLoaded: true,\n            isLoading: false,\n          };\n        }\n        // Not checking for !!data because it's OK for it to be undefined.\n        return {\n          data: cachedEntry.data as T,\n          hasLoaded: true,\n          isLoading: false,\n        };\n      }\n      this.delete(props.dataId);\n    }\n\n    // Adds listeners for future events.\n    if (!this.onDataListeners.has(props.dataId)) this.onDataListeners.set(props.dataId, new Set());\n    if (!this.onErrorListeners.has(props.dataId))\n      this.onErrorListeners.set(props.dataId, new Set());\n\n    props.onData &&\n      (this.onDataListeners.get(props.dataId)! as Set<DataListener<T>>).add(props.onData);\n    props.onError && this.onErrorListeners.get(props.dataId)!.add(props.onError);\n\n    // If promise is already in progress, return is loading state.\n    if (this.unsettledPromises.has(props.dataId)) {\n      return {\n        hasLoaded: false,\n        isLoading: true,\n      };\n    }\n\n    const promise = props.dataAsync();\n    this.unsettledPromises.set(props.dataId, promise);\n    promise\n      .then(result => {\n        this.resultCache.set(props.dataId, {\n          data: result,\n          expiryTime: this.clock() + (props.ttlMs ?? this.defaultExpiryTimeMs),\n        });\n\n        const dataListeners = this.onDataListeners.get(props.dataId)!;\n\n        for (const listener of dataListeners) {\n          try {\n            listener(result);\n          } catch (e) {\n            try {\n              this.errorHandler(e);\n            } catch (_) {\n              /* Explicitly do nothing. */\n            }\n          }\n        }\n        dataListeners.clear();\n      })\n      .catch(error => {\n        this.resultCache.set(props.dataId, {\n          error,\n          expiryTime: this.clock() + (props.ttlMs ?? this.defaultExpiryTimeMs),\n        });\n\n        const errorListeners = this.onErrorListeners.get(props.dataId)!;\n\n        for (const listener of errorListeners) {\n          try {\n            listener(error);\n          } catch (e) {\n            try {\n              this.errorHandler(e);\n            } catch (_) {\n              /* Explicitly do nothing. */\n            }\n          }\n        }\n\n        errorListeners.clear();\n      })\n      .finally(() => {\n        this.unsettledPromises.delete(props.dataId);\n        this.settledPromiseCount++;\n      });\n\n    return {\n      isLoading: true,\n      hasLoaded: false,\n    };\n  };\n\n  /** Returns the number of unsettledPromises */\n  public countUnsettledPromises = (): number => {\n    return this.unsettledPromises.size;\n  };\n\n  /**\n   * Returns the number of promises that have settled.\n   *\n   * This can be useful to know if there were async changes that happened and completed which isn't\n   * captured by `countUnsettledPromises`.\n   */\n  public countSettledPromises = (): number => {\n    return this.settledPromiseCount;\n  };\n\n  /** Returns the keys (dataId) of unsettledPromises */\n  public unawaitedPromiseKeys = (): string[] => {\n    return [...this.unsettledPromises.keys()];\n  };\n\n  /**\n   * Function that waits for all promises to finish. We do not return results as of right now,\n   * because there is no need to handle them at this level (since we attach onData or onError). We\n   * might need to return whether or not there were any rejections though. TBD.\n   *\n   * TODO: revisit how we handle errors at this level\n   *\n   * @returns A Promise that returns nothing\n   */\n  public allUnawaitedPromises = async (): Promise<void> => {\n    await Promise.allSettled(this.unsettledPromises.values());\n  };\n\n  /**\n   * Removes expired entries in cache and returns the cache.\n   *\n   * @returns Cached data.\n   */\n  public getCache = (): Map<string, CacheEntry> => {\n    this.cleanCache();\n    return this.resultCache;\n  };\n\n  /**\n   * Removes expired entries from the cache, and returns how many entries were removed.\n   *\n   * @returns Number of entries removed from the cache.\n   */\n  public cleanCache = (): number => {\n    let numDeleted = 0;\n\n    this.resultCache.forEach((value, key) => {\n      if (value.expiryTime < this.clock()) {\n        this.delete(key);\n        numDeleted++;\n      }\n    });\n\n    return numDeleted;\n  };\n\n  /**\n   * Deletes all listeners and the entry in the result cache if it exists.\n   *\n   * @param key DataId of the entry you want to clear\n   */\n  public delete = (key: string): void => {\n    this.resultCache.delete(key);\n    this.onDataListeners.delete(key);\n    this.onErrorListeners.delete(key);\n  };\n}\n\nexport const asyncDataController = new AsyncDataController({ clock: Date.now });\n", "import type {\n  BrowserBrand,\n  HighEntropyBrowserHints,\n  LowEntropyBrowserHints,\n} from '@snapchat/client-hints';\nimport {\n  AbstractBrowserFeature,\n  parseBrowserBrand,\n  parseMajorVersion,\n  parsePlatform,\n  parseUserAgent,\n} from '@snapchat/client-hints';\n\nimport type { BrowserFeaturesWindow, HighEntropyUserAgentValues } from './navigatorData';\n\n/**\n * Keys to the getHighEntropyValues function based on the client hints requested.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/NavigatorUAData/getHighEntropyValues\n */\nconst highEntropyUserAgentHints: Partial<\n  Record<keyof HighEntropyBrowserHints, keyof HighEntropyUserAgentValues>\n> = {\n  platformVersion: 'platformVersion',\n  architecture: 'architecture',\n  bitness: 'bitness',\n  model: 'model',\n  fullBrowsers: 'fullVersionList',\n};\n\n/** Browser feature looking for the client. */\nexport class ClientBrowserFeature extends AbstractBrowserFeature {\n  private readonly featuresWindow: BrowserFeaturesWindow;\n\n  constructor(featuresWindow: BrowserFeaturesWindow = window as BrowserFeaturesWindow) {\n    super({\n      /* Nothing here. Can use window object. */\n    });\n    this.featuresWindow = featuresWindow;\n  }\n\n  /** @override */\n  protected computeLowEntropyHints(): LowEntropyBrowserHints {\n    const legacy = parseUserAgent(this.featuresWindow.navigator.userAgent);\n    const browsers = this.featuresWindow.navigator.userAgentData?.brands?.map(brand => ({\n      brand: parseBrowserBrand(brand.brand),\n      majorVersion: Number(parseMajorVersion(brand.version)),\n    }));\n\n    return {\n      browsers: browsers ?? legacy.browsers,\n      platform:\n        parsePlatform(this.featuresWindow.navigator.userAgentData?.platform) ?? legacy.platform,\n      isMobile: this.featuresWindow.navigator.userAgentData?.mobile ?? legacy.isMobile,\n      saveData: this.featuresWindow.navigator.connection?.saveData ?? legacy.isMobile,\n    };\n  }\n\n  /** @override */\n  protected async computeHighEntropyHintsAsync(\n    ...hints: Array<keyof HighEntropyBrowserHints>\n  ): Promise<HighEntropyBrowserHints> {\n    const highEntropyValues =\n      await this.featuresWindow.navigator.userAgentData?.getHighEntropyValues(\n        hints.map(hint => highEntropyUserAgentHints[hint]!).filter(Boolean)\n      );\n    const reduceMotion = this.featuresWindow.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    const preferDark = this.featuresWindow.matchMedia('(prefers-color-scheme: dark)').matches;\n    const preferLight = this.featuresWindow.matchMedia('(prefers-color-scheme: light)').matches;\n    return {\n      viewportWidth: this.featuresWindow.innerWidth,\n      viewportHeight: this.featuresWindow.innerHeight,\n      fullBrowsers: highEntropyValues?.fullVersionList?.map(brand => ({\n        brand: brand.brand as BrowserBrand,\n        fullVersion: brand.version,\n      })),\n      model: highEntropyValues?.model,\n      downlinkMbps: this.featuresWindow.navigator.connection?.downlink,\n      devicePixelRatio: this.featuresWindow.devicePixelRatio,\n      connection: this.featuresWindow.navigator.connection?.effectiveType,\n      architecture: highEntropyValues?.architecture,\n      bitness: highEntropyValues?.bitness ? Number(highEntropyValues?.bitness) : undefined,\n      reduceMotion,\n      colorScheme: preferDark ? 'dark' : preferLight ? 'light' : undefined,\n      platformVersion: highEntropyValues?.platformVersion,\n    };\n  }\n}\n", "import type { NormalizedCacheObject } from '@apollo/client';\nimport createCache from '@emotion/cache';\nimport { CacheProvider as EmotionCacheProvider } from '@emotion/react';\nimport { AsyncDataController } from '@snapchat/async-data';\nimport { ClientBrowserFeature } from '@snapchat/client-hints-browser';\nimport { printWarning } from '@snapchat/self-xss-warning';\nimport type { History } from 'history';\nimport { createRoot, hydrateRoot } from 'react-dom/client';\nimport type { HelmetData } from 'react-helmet-async';\n\nimport type { AppProps } from './App';\nimport { App } from './App';\nimport type { RedirectOptions, UserInfo } from './AppContext';\nimport { defaultContext } from './AppContext';\nimport { BrowserCookieManager } from './clientonly/BrowserCookieManager';\nimport { createUuidV4Browser } from './clientonly/browserCreateUuidV4';\nimport { initializeClientLogging } from './clientonly/loggingInitClient';\nimport { startClientLogging } from './clientonly/loggingStartClient';\nimport { Config } from './config';\nimport { defaultCacheExpiryTimeMs } from './constants/defaultCacheExpiryTime';\nimport { UrlParameter } from './constants/urlParameters';\nimport { FooterView, HeaderView } from './context/PageLayoutContext';\nimport { defaultLocale } from './helpers/locale';\nimport type { SerializedAppProps } from './index.template';\nimport { getOrCreateApolloClient } from './utils/contentful/ContentfulClientCache';\nimport { applyUrlOverrides } from './utils/contentful/contentfulUrlOverrides';\nimport { generateFragmentTypes } from './utils/contentful/generateFragmentTypes';\nimport type { PersonaResponse } from './utils/persona/personaTypes';\nimport { setTracer } from './utils/tracing';\nimport { BrowserTracer } from './utils/tracing/browserTracer';\nimport { ensureWebClientId } from './utils/webClientId/webClientIdUtils';\n\ninterface EsBuildDevError {\n  errors: {\n    location: {\n      file: string;\n      line: string;\n      column: string;\n    };\n    text: string;\n  }[];\n  // TODO: Add warnings here if they're useful.\n}\n\nconst defaultState: SerializedAppProps = {\n  currentLocale: defaultContext.currentLocale,\n  supportedLocales: defaultContext.supportedLocales,\n  userLocation: defaultContext.userLocation,\n  pageLayoutContext: {\n    footerView: FooterView.FULL_FOOTER,\n    headerView: HeaderView.FULL_HEADER,\n    hasSubNav: false,\n    hasSideNav: false,\n    hasCustomSideNav: false,\n  },\n};\n\n// TODO: Move this into src/browser\nasync function main() {\n  // ===========================================================================\n  // Read APP_STATE\n  // ===========================================================================\n  // Note: APP_STATE is exported when server uses renderHtml.tsx.\n  const state: SerializedAppProps = window.APP_STATE ?? defaultState;\n\n  // print xss warning in console\n  printWarning(state.currentLocale);\n\n  // ===========================================================================\n  // Initialize logging and tracing.\n  // ===========================================================================\n  const loggingConfig = {\n    ...Config,\n    locale: state.currentLocale,\n    globalPrivacyControl: navigator.globalPrivacyControl,\n  };\n  initializeClientLogging(loggingConfig);\n  startClientLogging(loggingConfig);\n\n  setTracer(new BrowserTracer());\n\n  // ===========================================================================\n  // Locale prefix redirect.\n  // ===========================================================================\n\n  // We should be redirecting on the server, but we change the url here for redundancy.\n  if (window.location.pathname.startsWith(`/${state.currentLocale}`)) {\n    const url = new URL(window.location.href);\n    url.pathname = url.pathname.replace(`/${state.currentLocale}`, '');\n\n    if (state.currentLocale !== defaultLocale) {\n      url.searchParams.set('lang', state.currentLocale);\n    }\n    window.history.pushState({}, '', url);\n  }\n\n  // ===========================================================================\n  // Initialize Apollo Clients\n  // ===========================================================================\n\n  // Note: APOLLO_STATE and GLOBAL_APOLLO_STATE is exported when server uses renderHtml.tsx.\n  const apolloCache: NormalizedCacheObject = window.APOLLO_STATE; // OK to be undefined.\n  const globalApolloCache: NormalizedCacheObject = window.GLOBAL_APOLLO_STATE; // OK to be undefined.\n  const requestUrl = new URLSearchParams(window.location.search);\n  const contentfulConfigWithOverrides = applyUrlOverrides(Config.contentful, requestUrl);\n  // Note: APOLLO_FRAGMENTS is exported when server uses renderHtml.tsx.\n  const localApolloFragments =\n    window.APOLLO_FRAGMENTS && Object.keys(window.APOLLO_FRAGMENTS).length > 0\n      ? window.APOLLO_FRAGMENTS\n      : await generateFragmentTypes(contentfulConfigWithOverrides);\n\n  const globalApolloFragments =\n    window.GLOBAL_APOLLO_FRAGMENTS && Object.keys(window.GLOBAL_APOLLO_FRAGMENTS).length > 0\n      ? window.GLOBAL_APOLLO_FRAGMENTS\n      : await generateFragmentTypes(Config.contentfulGlobal);\n\n  const apolloClient = getOrCreateApolloClient(state.currentLocale, [\n    contentfulConfigWithOverrides,\n    localApolloFragments,\n    apolloCache,\n  ]);\n\n  const globalApolloClient = getOrCreateApolloClient(state.currentLocale, [\n    Config.contentfulGlobal,\n    globalApolloFragments,\n    globalApolloCache,\n  ]);\n\n  // ===========================================================================\n  // Initialize Async data controller\n  // ===========================================================================\n\n  let asyncDataControllerCache = new Map();\n\n  if (window.ASYNC_DATA_CONTROLLER_CACHE) {\n    asyncDataControllerCache = new Map(Object.entries(window.ASYNC_DATA_CONTROLLER_CACHE ?? {}));\n  }\n\n  const asyncDataController = new AsyncDataController({\n    cache: asyncDataControllerCache,\n    // 1 hour 30 second default expiry time so that cached results returned from CDN\n    // do not expire immediately. Keep in sync with the server-side AsyncDataController\n    // in the renderHtml.tsx file in web.\n    defaultExpiryTimeMs: defaultCacheExpiryTimeMs,\n    clock: Date.now,\n  });\n\n  // ===========================================================================\n  // Initialize Web Client ID\n  // ===========================================================================\n\n  const cookieManager = new BrowserCookieManager();\n  const createUuidV4 = createUuidV4Browser;\n\n  // Getting the web-client-id will set it if it doesn't exist.\n  // We can't do this in the App because we don't want the setting to happen\n  // on the server-side (blocks contents from being cached in CDN).\n  const webClientId = ensureWebClientId({\n    cookieManager,\n    createUuidV4,\n    currentUrl: new URL(window.location.href),\n    userLocation: state.userLocation,\n  });\n\n  /**\n   * Implementation of UserInfo provider that may short-circuit getting the cookie from the server\n   * if it's already available on the client.\n   *\n   * TODO: If the complexity of the UserInfo increases, we may want to break out the experiment\n   * bucket source into a separate provider.\n   */\n  const getUserInfoClient = (): Promise<UserInfo> => {\n    if (webClientId) {\n      return Promise.resolve({ experimentBucket: { id: webClientId } });\n    }\n\n    // If the sc-wcid cookie is not available, we need to fetch the experiment\n    // bucket source (ip address) from the server.\n    return fetch('/api/userinfo')\n      .then(response => response.json())\n      .catch(() => ({ experimentBucket: { id: 'default' } }));\n  };\n\n  // ===========================================================================\n  // Persona\n  // ===========================================================================\n\n  const getPersonaClient = (): Promise<PersonaResponse> => {\n    const hashedIpOverride = new URLSearchParams(window.location.search).get(\n      UrlParameter.OVERRIDE_HASHED_IP\n    );\n\n    // If we are not in production, allow overriding IP on client side for testing purposes\n    const overrideIp = !Config.isDeploymentTypeProd && !!hashedIpOverride;\n    const url = `/api/persona${\n      overrideIp ? `?${UrlParameter.OVERRIDE_HASHED_IP}=${hashedIpOverride}` : ''\n    }`;\n\n    return fetch(url)\n      .then(response => response.json())\n      .catch(() => ({}));\n  };\n\n  // ===========================================================================\n  // Initialize redirect logic\n  // ===========================================================================\n\n  const onRedirectClient = (location: string, options?: RedirectOptions) => {\n    // Short circuit full urls.\n    const newTab = options?.newTab;\n\n    if (location.startsWith('http')) {\n      window.open(location, newTab ? '_blank' : '_self');\n      return;\n    }\n\n    // If we have access to React history object, we can update the state without\n    // a full page reload.\n    if (history && !newTab) {\n      // For internal links, we can push the state to the react history object.\n      history.push(location);\n      // But we do also want to add an item to the browser history.\n      window.history.pushState(null, '', new URL(location, window.location.href));\n      return;\n    }\n    // no history so need to do full reload.\n    window.open(location, newTab ? '_blank' : '_self');\n  };\n\n  // ===========================================================================\n  // Initialize client-side App props\n  // ===========================================================================\n\n  const browserFeatures = new ClientBrowserFeature();\n\n  let history: History<unknown> | undefined;\n\n  const clientAppProps: AppProps = {\n    ...state,\n    getCurrentUrl: () => window.location.href,\n    routerContext: {},\n    helmetContext: {} as HelmetData,\n    apolloClient,\n    globalApolloClient,\n    onRedirect: onRedirectClient,\n    onHistory: capturedHistory => {\n      history = capturedHistory;\n    },\n    browserFeatures,\n    asyncDataController,\n    globalPrivacyControl: navigator.globalPrivacyControl,\n    cookieManager,\n    createUuidV4,\n    getUserInfo: getUserInfoClient,\n    getPersona: getPersonaClient,\n    singleCallbackCache: new Map(),\n    // This is only useful in server context so is noop for the client\n    onHlsVideo: () => {},\n  };\n\n  // ===========================================================================\n  // Render App\n  // ===========================================================================\n\n  // Reads the stylesheet from `<style data-emotion=\"marketing-web-emotion ...\">...</style>` */\n  const cache = createCache({ key: 'marketing-web-emotion' });\n\n  // Server should pre-render the initial body using SSR, so we can call hydrate instead of render\n  const jsx = (\n    <EmotionCacheProvider value={cache}>\n      <App {...clientAppProps} />\n    </EmotionCacheProvider>\n  );\n\n  // Note: <main> element is specified in index.ejs.\n  const rootElement = document.querySelector('main');\n\n  if (!rootElement) {\n    console.error('HTML must contain a <main> element.');\n  } else if (rootElement.hasChildNodes() ?? false) {\n    hydrateRoot(rootElement, jsx);\n  } else {\n    // If SSR failed, we render fully. Without this SSR failures result in blank pages.\n    createRoot(rootElement).render(jsx);\n  }\n\n  // ==========================================================================\n  // Client Recompile Dev Reload\n  // ==========================================================================\n\n  let errorCount = 0;\n\n  if (Config.isLocal && Config.compilationMode === 'development') {\n    const serverStatus = new EventSource('/esbuild', {});\n\n    serverStatus.addEventListener('error', () => {\n      console.error('/esbuild server disconnected.');\n      errorCount++;\n\n      if (errorCount > 1e3) {\n        serverStatus.close();\n\n        console.info(\n          'Esbuild could not connnect after a 1000 attempts. Closing connection. Please reload.'\n        );\n      }\n      // TODO: Figure out if we want to close this. I.e. calling serverStatus.close();\n      // But that breaks the live reload if you restart dev server which isn't desirable in all\n      // circumstances.\n    });\n\n    serverStatus.addEventListener('change', event => {\n      const data = JSON.parse(event.data) as EsBuildDevError;\n\n      if (data.errors?.length) {\n        // biome-ignore lint/complexity/noForEach: was already like this before, ignoring to unblock build TODO: fix this\n        data.errors.forEach(error => {\n          const location = error.location;\n          const path = `${location.file}:${location.line}:${location.column}`;\n\n          console.error(` 'Build failed. Not reloading.', ${error.text} (${path})`);\n        });\n      } else {\n        console.info('Served content changed. Reloading');\n        location.reload();\n      }\n    });\n  }\n}\n\nmain().catch(error => console.error(error));\n", "import type { AsyncDataController, AsyncDataProps, AsyncDataState } from '@snapchat/async-data';\nimport { asyncDataController } from '@snapchat/async-data';\nimport { createContext, useCallback, useContext, useState } from 'react';\n\ninterface AsyncDataContextProps {\n  controller: AsyncDataController;\n}\n\nexport const AsyncDataContext = createContext<AsyncDataContextProps>({\n  controller: asyncDataController,\n});\n\nexport interface UseAsyncDataProps<T> extends AsyncDataProps<T> {\n  /** Turns off calling the async data and always returns 'undefined'. */\n  skip?: boolean;\n}\n\n/**\n * Helper hook to interface with the asyncData controller.\n *\n * Can exclude from test coverage, since this is a very simple hook that interfaces with\n * asyncDataController. Low ROI on testing this since it's really only testing one line.\n *\n * @returns {data, error, isLoading, hasLoaded} From registering the request to the async data\n *   controller\n */\nexport function useAsyncData<T>(\n  props: UseAsyncDataProps<T>\n): Pick<AsyncDataState<T>, 'data' | 'error' | 'isLoading' | 'hasLoaded'> {\n  const { controller } = useContext(AsyncDataContext);\n\n  const [_invariant, setInvariant] = useState<number>(0);\n\n  // biome-ignore lint/correctness/useExhaustiveDependencies: We do want the invariant to trigger change.\n  const onData = useCallback(\n    (data: T) => {\n      props.onData?.(data);\n      setInvariant(invariant => invariant + 1);\n    },\n    // Skipping deps on ALL props.\n    [setInvariant, props.onData]\n  );\n\n  // biome-ignore lint/correctness/useExhaustiveDependencies: We do want the invariant to trigger change.\n  const onError = useCallback(\n    (error: unknown) => {\n      props.onError?.(error);\n      setInvariant(invariant => invariant + 1);\n    },\n    // Skipping deps on ALL props.\n    [setInvariant, props.onError]\n  );\n\n  // Do nothing if there's an explicit skip.\n  if (props.skip) {\n    return {\n      hasLoaded: true,\n      isLoading: false,\n    };\n  }\n\n  return controller.register({\n    ...props,\n    onError,\n    onData,\n  });\n}\n", "import type { ValueOf } from '../types/ValueOf';\n\n/**\n * Actions that we track that the user can do.\n *\n * These have to be context-free. I.e. \"Click\" instead of \"HeaderClick\" or \"Scroll\" instead of\n * \"FooScroll\"\n */\nexport const Action = {\n  Click: 'Click',\n  Warning: 'Warning',\n  LocaleSelect: 'LocaleSelect',\n} as const;\n\nexport type Action = ValueOf<typeof Action>;\n", "import { documentToPlainTextString } from '@contentful/rich-text-plain-text-renderer';\nimport type { Document } from '@contentful/rich-text-types';\nimport type { FC } from 'react';\n\n/**\n * Returns just the text from the RichText. This is useful if you want to get the text value without\n * any wrapping elements like <p>s or <span>s.\n *\n * If you do want rendered HTML, use <HtmlRichText document={field.json} />.\n */\nexport const PlainRichText: FC<{ document: string | Record<string, unknown> | Document }> = ({\n  document,\n}) => {\n  if (typeof document === 'string') {\n    return <>{document}</>;\n  }\n\n  return <>{documentToPlainTextString(document as unknown as Document)}</>;\n};\n\nPlainRichText.displayName = 'PlainRichText';\n", "/**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\nfunction head(array) {\n  return (array && array.length) ? array[0] : undefined;\n}\n\nexport default head;\n", "/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n  return value === undefined;\n}\n\nexport default isUndefined;\n", "import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var stack = new Stack;\n      if (customizer) {\n        var result = customizer(objValue, srcValue, key, object, source, stack);\n      }\n      if (!(result === undefined\n            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n            : result\n          )) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\nexport default baseIsMatch;\n", "import isObject from './isObject.js';\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\nexport default isStrictComparable;\n", "import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = keys(object),\n      length = result.length;\n\n  while (length--) {\n    var key = result[length],\n        value = object[key];\n\n    result[length] = [key, value, isStrictComparable(value)];\n  }\n  return result;\n}\n\nexport default getMatchData;\n", "/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    return object[key] === srcValue &&\n      (srcValue !== undefined || (key in Object(object)));\n  };\n}\n\nexport default matchesStrictComparable;\n", "import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n  }\n  return function(object) {\n    return object === source || baseIsMatch(object, source, matchData);\n  };\n}\n\nexport default baseMatches;\n", "import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\nexport default get;\n", "/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n  return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n", "import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      result = false;\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n    if (!(result = object != null && hasFunc(object, key))) {\n      break;\n    }\n    object = object[key];\n  }\n  if (result || ++index != length) {\n    return result;\n  }\n  length = object == null ? 0 : object.length;\n  return !!length && isLength(length) && isIndex(key, length) &&\n    (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n", "import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n  return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n", "import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  if (isKey(path) && isStrictComparable(srcValue)) {\n    return matchesStrictComparable(toKey(path), srcValue);\n  }\n  return function(object) {\n    var objValue = get(object, path);\n    return (objValue === undefined && objValue === srcValue)\n      ? hasIn(object, path)\n      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n  };\n}\n\nexport default baseMatchesProperty;\n", "/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nexport default baseProperty;\n", "import baseGet from './_baseGet.js';\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n  return function(object) {\n    return baseGet(object, path);\n  };\n}\n\nexport default basePropertyDeep;\n", "import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': 2 } },\n *   { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nexport default property;\n", "import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n  if (typeof value == 'function') {\n    return value;\n  }\n  if (value == null) {\n    return identity;\n  }\n  if (typeof value == 'object') {\n    return isArray(value)\n      ? baseMatchesProperty(value[0], value[1])\n      : baseMatches(value);\n  }\n  return property(value);\n}\n\nexport default baseIteratee;\n", "import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n  if (!isObject(object)) {\n    return object;\n  }\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      lastIndex = length - 1,\n      nested = object;\n\n  while (nested != null && ++index < length) {\n    var key = toKey(path[index]),\n        newValue = value;\n\n    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n      return object;\n    }\n\n    if (index != lastIndex) {\n      var objValue = nested[key];\n      newValue = customizer ? customizer(objValue, key, nested) : undefined;\n      if (newValue === undefined) {\n        newValue = isObject(objValue)\n          ? objValue\n          : (isIndex(path[index + 1]) ? [] : {});\n      }\n    }\n    assignValue(nested, key, newValue);\n    nested = nested[key];\n  }\n  return object;\n}\n\nexport default baseSet;\n", "import baseGet from './_baseGet.js';\nimport baseSet from './_baseSet.js';\nimport castPath from './_castPath.js';\n\n/**\n * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n  var index = -1,\n      length = paths.length,\n      result = {};\n\n  while (++index < length) {\n    var path = paths[index],\n        value = baseGet(object, path);\n\n    if (predicate(value, path)) {\n      baseSet(result, castPath(path, object), value);\n    }\n  }\n  return result;\n}\n\nexport default basePickBy;\n", "import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport basePickBy from './_basePickBy.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\n\n/**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\nfunction pickBy(object, predicate) {\n  if (object == null) {\n    return {};\n  }\n  var props = arrayMap(getAllKeysIn(object), function(prop) {\n    return [prop];\n  });\n  predicate = baseIteratee(predicate);\n  return basePickBy(object, props, function(value, path) {\n    return predicate(value, path[0]);\n  });\n}\n\nexport default pickBy;\n", "import { parseError } from '@snapchat/core';\nimport type { Dimensions } from '@snapchat/graphene';\nimport { Partition } from '@snapchat/graphene';\nimport { useGlobalComponentsContentfulQuery } from '@snapchat/mw-global-components-schema';\nimport clone from 'lodash/clone.js';\nimport head from 'lodash/head.js';\nimport isUndefined from 'lodash/isUndefined.js';\nimport pickBy from 'lodash/pickBy.js';\nimport type { FC } from 'react';\nimport { useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport { ContentfulContext } from '../../context';\nimport type { CookieModalType } from '../../generated/contentful-types';\nimport { CookieModalQueryDocumentType } from '../../generated/contentful-types';\nimport { BrowserGrapheneClient, DevelopmentDomains } from '../../helpers/logging';\nimport type { CategorizedCookie } from '../../utils';\nimport {\n  acceptAllCookies,\n  acceptCustomCookies,\n  auditForUncategorizedCookies,\n  createCookieMapping,\n  essentialOnlyCookies,\n  fetchShouldDisplayModal,\n  fetchUserLocation,\n  getAllCookies,\n  getCookieDomain,\n  removeCookiesForNonacceptedCategories,\n  setOptInCookies,\n} from '../../utils';\nimport { DesignAgnosticModal } from '../designAgnostic';\nimport type { WithOnError } from '../ErrorBoundary';\nimport { withErrorBoundary } from '../ErrorBoundary';\nimport type { CookieAcceptance, LocaleOption } from '../types';\nimport { BackgroundType, CategoryOptInCookie, CookieScreen, EventAction } from '../types';\nimport { CookieLandingScreen } from './CookieLandingScreen';\nimport { CookieSettingsScreen } from './CookieSettingsScreen';\n\ninterface OnCompleteEvent {\n  /**\n   * User's location per API endpoint. Included as a convenience for consuming applications to avoid\n   * multiple calls to that endpoint if configuring GTM/GA, etc.\n   */\n  userLocation: string;\n  /** Whether the modal shown to the user. */\n  didUserInteract: boolean;\n  /** Category Cookies and acceptance state for the user. */\n  cookieAcceptance: CookieAcceptance;\n  /** Whether cookies were changed based on global privacy control */\n  isGlobalPrivacyControlApplied: boolean;\n}\n\nexport interface CookieModalProps extends WithOnError {\n  supportedLocales: Record<string, LocaleOption>;\n  /** If not specified, defaults to the top level domain of the current location */\n  cookieDomain?: string;\n  /** Optional, use to specify parent element within which to render the modal */\n  portalRoot?: HTMLElement;\n  /** If not specified, defaults to `LightMode` */\n  backgroundType?: BackgroundType;\n  /** On change listener for Locale Dropdown */\n  onLocaleChange?: (locale: string) => void;\n  /**\n   * Fires whenever the modal interaction is complete (whether it was visually shown or not). This\n   * event hook is used to enable/disable features per user cookie acceptance.\n   */\n  onComplete?: (event: OnCompleteEvent) => void;\n  /** On event listener for modal actions */\n  onEvent?: (event: { component: string; label: string; action: EventAction }) => void;\n  /** Fires whenever global privacy control is in place */\n  onGlobalPrivacyControlSet?: () => void;\n  /** Whether to force the modal to be visible (for testing) */\n  forceVisible?: boolean;\n  /** Whether the user has enabled Global Privacy Control */\n  globalPrivacyControl?: boolean;\n}\n\nconst displayName = 'CookieModal';\n\nconst CookieModal: FC<CookieModalProps> = ({\n  supportedLocales,\n  cookieDomain: inputCookieDomain,\n  portalRoot,\n  backgroundType = BackgroundType.LightMode,\n  onLocaleChange,\n  onComplete,\n  onEvent,\n  onGlobalPrivacyControlSet,\n  globalPrivacyControl,\n  forceVisible,\n}) => {\n  // ==============================================================================================\n  // Fetch content from Contentful\n  // ==============================================================================================\n\n  const context = useContext(ContentfulContext);\n  const { data } = useGlobalComponentsContentfulQuery(CookieModalQueryDocumentType, context, {\n    client: context.client,\n  });\n  const config = head(data?.cookieModalCollection.items) as CookieModalType | undefined;\n\n  const gpcLocations = config?.gpcLocations;\n  // Convert configuration into optimized data structures\n  const { categorySettings, cookieCategoryMap, enableCookieDeletion } = useMemo(() => {\n    if (!config?.cookieCategoriesCollection?.items?.length)\n      return {\n        categorySettings: undefined,\n        cookieCategoryMap: undefined,\n        enableCookieDeletion: false,\n      };\n\n    // Settings for generating UI, storing user selections\n    const categorySettings = config.cookieCategoriesCollection.items;\n\n    // Map of related cookies by category, used for deleting after opt out\n    const cookieCategoryMap = createCookieMapping(config.cookieCategoriesCollection.items);\n\n    // Settings for cookie deletion\n    const { enableCookieDeletion } = config;\n\n    return { categorySettings, cookieCategoryMap, enableCookieDeletion };\n  }, [config]);\n\n  // ==============================================================================================\n  // Internal State\n  // ==============================================================================================\n  const cookieDomain = getCookieDomain(inputCookieDomain);\n\n  const [isInModalRequiredRegion, setIsInModalRequiredRegion] = useState<boolean>();\n  const [userLocation, setUserLocation] = useState('Unknown');\n  const [isDisplayed, setIsDisplayed] = useState(false);\n\n  const [categoryState, setCategoryState] = useState<CookieAcceptance>({});\n\n  const updateCategoryState = (key: CategoryOptInCookie, value: boolean) => {\n    const newState = clone(categoryState);\n    newState[key] = value;\n    setCategoryState(newState);\n  };\n\n  const [isLoaded, setIsLoaded] = useState(false);\n  const [activeScreen, setActiveScreen] = useState(CookieScreen.LANDING);\n\n  const [grapheneClient, setGrapheneClient] = useState<BrowserGrapheneClient>();\n\n  // @ts-ignore navigator does have globalPrivacyControl\n  const hasGlobalPrivacyControl = window?.navigator?.globalPrivacyControl || globalPrivacyControl;\n\n  const isGlobalPrivacyControlApplied = !!(\n    hasGlobalPrivacyControl &&\n    cookieCategoryMap &&\n    // If the user location is not in the list of locations that require GPC, then GPC is not applied.\n    // Alternatively if no locations are set in contentful GPC is applied by default.\n    (gpcLocations?.includes(userLocation) || gpcLocations?.length === 0 || !gpcLocations)\n  );\n  // ==============================================================================================\n  // Helper Functions\n  // ==============================================================================================\n\n  /** Detect and log uncategorized cookies */\n  const logUncategorizedCookies = useCallback(\n    (cookieCategoryMap: Map<string, Set<CategorizedCookie>>) => {\n      const isProductionDomain = !DevelopmentDomains.has(cookieDomain);\n      if (!isProductionDomain) return; // noop for Development environments\n\n      const uncategorizedCookies = auditForUncategorizedCookies(cookieCategoryMap);\n\n      for (const cookieName of uncategorizedCookies) {\n        const dimensions: Dimensions = {\n          cookieName,\n          userLocation,\n        };\n\n        grapheneClient?.logMetric('modal_uncategorized_cookie', dimensions);\n      }\n    },\n    [grapheneClient, cookieDomain, userLocation]\n  );\n\n  /**\n   * Centralized function for setting cookies and triggering callback functions. The optional\n   * `existingCookies` parameter controls whether update all setting cookies or apply changes only.\n   */\n  const updateUserCookies = useCallback(\n    (cookiesToSet: CookieAcceptance, existingCookies?: CookieAcceptance) => {\n      // If mappings have not been loaded, treat as noop\n      if (!cookieCategoryMap || !categorySettings) return;\n\n      const filterToChanges = (\n        cookiesToSet: CookieAcceptance,\n        existingCookies: CookieAcceptance = {}\n      ): CookieAcceptance => {\n        return pickBy(\n          cookiesToSet,\n          // @ts-ignore TODO: Fix types.\n          (value, key) => isUndefined(existingCookies[key]) || existingCookies[key] !== value\n        );\n      };\n\n      // Apply user settings to Cookies\n      const changesToApply = filterToChanges(cookiesToSet, existingCookies);\n\n      setOptInCookies(cookieDomain, changesToApply);\n\n      const results = removeCookiesForNonacceptedCategories(\n        cookieDomain,\n        cookiesToSet,\n        cookieCategoryMap,\n        enableCookieDeletion\n      );\n\n      // log any cookie removals that were incomplete (indicates misconfiguration of cookie attributes)\n      for (const cookieName in results) {\n        // removal was successful, noop\n        if (results[cookieName]?.wasRemoved) continue;\n\n        // otherwise log so we can review the configuration.  Graphene doesn't support enough dimensions\n        // for us to store the full configuration, so domain and cookieName will have to do.\n        const dimensions: Dimensions = {\n          cookieName,\n          userLocation,\n        };\n        grapheneClient?.logMetric('tracking_cookie_misconfiguration', dimensions);\n      }\n\n      logUncategorizedCookies(cookieCategoryMap);\n\n      // Fire onComplete event hook\n      onComplete?.({\n        didUserInteract: isDisplayed,\n        userLocation,\n        cookieAcceptance: cookiesToSet,\n        isGlobalPrivacyControlApplied,\n      });\n\n      setIsDisplayed(false);\n    },\n    [\n      cookieDomain,\n      cookieCategoryMap,\n      categorySettings,\n      grapheneClient,\n      isDisplayed,\n      onComplete,\n      userLocation,\n      setIsDisplayed,\n      logUncategorizedCookies,\n      isGlobalPrivacyControlApplied,\n      enableCookieDeletion,\n    ]\n  );\n\n  // ==============================================================================================\n  // useEffect calls\n  // ==============================================================================================\n\n  useEffect(() => {\n    const host = window.location.hostname;\n    const client = new BrowserGrapheneClient(Partition.COOKIE_MODAL_COMPONENTS, host);\n    setGrapheneClient(client);\n  }, [setGrapheneClient]);\n\n  // Determine whether user is in GDPR region and should display modal\n  useEffect(() => {\n    // Wait for grapheneClient to initialize before executing\n    if (!grapheneClient) return;\n\n    const getIsInModalRequiredRegion = async () => {\n      try {\n        const shouldDisplayModal = await fetchShouldDisplayModal();\n        setIsInModalRequiredRegion(shouldDisplayModal);\n      } catch (unknownError) {\n        const error = parseError(unknownError);\n        grapheneClient.logError(displayName, 'shouldDisplayModal', error);\n        // Failure of security or network connection prompts the popup to show\n        setIsInModalRequiredRegion(true);\n      }\n    };\n    void getIsInModalRequiredRegion();\n  }, [grapheneClient, setIsInModalRequiredRegion]);\n\n  // Retrieve user's location\n  useEffect(() => {\n    // Wait for grapheneClient to initialize before executing\n    if (!grapheneClient) return;\n\n    const fetchUserRegion = async () => {\n      try {\n        const userLocation = await fetchUserLocation();\n        setUserLocation(userLocation);\n      } catch (unknownError) {\n        const error = parseError(unknownError);\n        grapheneClient.logError(displayName, 'userLocation', error);\n      }\n    };\n    void fetchUserRegion();\n  }, [grapheneClient, setUserLocation]);\n\n  // Set default categoryState - ensures toggles for essential categories default to enabled.\n  useEffect(() => {\n    if (!categorySettings) return;\n\n    const defaultState = essentialOnlyCookies(categorySettings);\n    setCategoryState(defaultState);\n  }, [categorySettings, setCategoryState]);\n\n  // Business logic for whether to render the Cookie Modal, trigger callbacks, etc.\n  // Defers execution until all async data calls are complete.\n  useEffect(() => {\n    // Wait for async data fetches to complete before executing\n    if (isUndefined(isInModalRequiredRegion) || !cookieCategoryMap || !categorySettings) return;\n\n    // Ensure this useEffect function fires only once\n    if (isLoaded) return;\n    setIsLoaded(true);\n\n    // fetch current cookie values (outside GDPR region: default to true, inside of GDPR region: default to false)\n    const retrievedCookies = getAllCookies(categorySettings);\n    const hasPreviouslyAcceptedCookies = retrievedCookies[CategoryOptInCookie.Essential];\n    const gpcDimensions = {\n      userLocation,\n      cookieDomain,\n    };\n\n    // Scenario 1: Returning user outside of GDPR, recreate missing cookies (default true), and trigger callback functions\n    // Scenario 2: Returning user inside of GDPR, recreate missing cookies (default false), and trigger callback functions\n    // Edge case: if user manually deleted one of the necessary cookies (e.g. Performance, Marketing, etc.), this will recreate them.\n    if (hasPreviouslyAcceptedCookies) {\n      const defaultCookies = !isInModalRequiredRegion\n        ? acceptAllCookies(categorySettings) // Scenario 1\n        : essentialOnlyCookies(categorySettings); // Scenario 2\n\n      const cookiesToRecreate = { ...defaultCookies, ...retrievedCookies };\n\n      if (isGlobalPrivacyControlApplied && retrievedCookies[CategoryOptInCookie.Marketing]) {\n        updateUserCookies(\n          { ...cookiesToRecreate, [CategoryOptInCookie.Marketing]: false },\n          retrievedCookies\n        );\n\n        onGlobalPrivacyControlSet?.();\n        grapheneClient?.logMetric('global_privacy_control', gpcDimensions);\n      } else {\n        updateUserCookies(cookiesToRecreate, retrievedCookies);\n      }\n\n      return;\n    }\n\n    if (!isInModalRequiredRegion) {\n      // Scenario 3: First time user located outside GDPR region, auto-accept all cookie categories and trigger callback functions.\n      const acceptAll = acceptAllCookies(categorySettings);\n\n      if (isGlobalPrivacyControlApplied) {\n        updateUserCookies({ ...acceptAll, [CategoryOptInCookie.Marketing]: false });\n        onGlobalPrivacyControlSet?.();\n        grapheneClient?.logMetric('global_privacy_control', gpcDimensions);\n      } else {\n        updateUserCookies(acceptAll);\n      }\n    } else {\n      // Scenario 4: First time user located inside GDPR region, display modal\n      setIsDisplayed(true);\n    }\n  }, [\n    isLoaded,\n    isInModalRequiredRegion,\n    cookieCategoryMap,\n    categorySettings,\n    setIsLoaded,\n    setIsDisplayed,\n    updateUserCookies,\n    globalPrivacyControl,\n    userLocation,\n    isGlobalPrivacyControlApplied,\n    cookieDomain,\n    grapheneClient,\n    onGlobalPrivacyControlSet,\n  ]);\n\n  // ==============================================================================================\n  // User Interaction handlers\n  // ==============================================================================================\n\n  const acceptAll = () => {\n    // If mappings have not been loaded, treat as noop\n    if (!categorySettings) return;\n\n    const cookiesToSet = acceptAllCookies(categorySettings);\n    updateUserCookies(cookiesToSet);\n    logUserAction('accept_all', cookiesToSet);\n  };\n\n  const logUserAction = (label: string, cookieCategories: CookieAcceptance) => {\n    // Log event to event listener prop\n    onEvent?.({ component: displayName, action: EventAction.Click, label });\n\n    // Also log event to dedicated CookieComponents Graphene Partition\n    const dimensions: Dimensions = {\n      preferences: `${cookieCategories[CategoryOptInCookie.Preferences] ?? false}`,\n      performance: `${cookieCategories[CategoryOptInCookie.Performance] ?? false}`,\n      marketing: `${cookieCategories[CategoryOptInCookie.Marketing] ?? false}`,\n      userLocation,\n    };\n    grapheneClient?.logMetric(`${label}_clicks_modal`, dimensions);\n  };\n\n  const acceptEssential = () => {\n    // If mappings have not been loaded, treat as noop\n    if (!categorySettings) return;\n\n    const cookiesToSet = essentialOnlyCookies(categorySettings);\n    updateUserCookies(cookiesToSet);\n    logUserAction('accept_essential', cookiesToSet);\n  };\n\n  const acceptSelected = () => {\n    // If mappings have not been loaded, treat as noop\n    if (!categorySettings) return;\n\n    const cookiesToSet = acceptCustomCookies(categorySettings, categoryState);\n    updateUserCookies(cookiesToSet);\n    logUserAction('accept_selected', cookiesToSet);\n  };\n\n  // ==============================================================================================\n  // Render\n  // ==============================================================================================\n\n  if (!config) {\n    return null;\n  }\n\n  return (\n    <DesignAgnosticModal\n      isDisplayed={forceVisible ?? isDisplayed}\n      backgroundType={backgroundType}\n      portalRoot={portalRoot}\n    >\n      {activeScreen === CookieScreen.LANDING && (\n        <CookieLandingScreen\n          backgroundType={backgroundType}\n          supportedLocales={supportedLocales}\n          title={config.landingScreenTitle}\n          content={config.content.json}\n          settingsButtonText={config.settingsButtonText}\n          onSettingsbuttonClick={() => setActiveScreen(CookieScreen.SETTINGS)}\n          acceptAllButtonText={config.acceptAllButtonText}\n          onAcceptAllButtonClick={acceptAll}\n          essentialOnlyButtonText={config.essentialOnlyButtonText}\n          onAcceptEssentialButtonClick={acceptEssential}\n          onLocaleChange={onLocaleChange}\n        />\n      )}\n      {activeScreen === CookieScreen.SETTINGS && (\n        <CookieSettingsScreen\n          backgroundType={backgroundType}\n          supportedLocales={supportedLocales}\n          title={config.landingScreenTitle}\n          cookieCategories={config.cookieCategoriesCollection.items}\n          activeToggleLabel={config.toggleEnabledText}\n          inactiveToggleLabel={config.toggleDisabledText}\n          categoriesState={categoryState}\n          updateCategoriesState={updateCategoryState}\n          acceptAllButtonText={config.acceptAllButtonText}\n          essentialOnlyButtonText={config.essentialOnlyButtonText}\n          acceptSelectedButtonText={config.acceptSelectedButtonText}\n          onAcceptAllButtonClick={acceptAll}\n          onAcceptEssentialButtonClick={acceptEssential}\n          onAcceptSelectedButtonClick={acceptSelected}\n          onLocaleChange={onLocaleChange}\n        />\n      )}\n    </DesignAgnosticModal>\n  );\n};\n\n// NOTE: for some reason displayName is not automatically deetected by ErrorBoundary.  Need to explicitly set it.\nCookieModal.displayName = displayName;\n\nconst wrapped = withErrorBoundary(CookieModal, Partition.COOKIE_MODAL_COMPONENTS);\n\nexport { wrapped as CookieModal };\n", "import type { ApolloClient } from '@apollo/client';\nimport { createContext } from 'react';\n\nexport interface ContentfulProps {\n  isPreview: boolean;\n  isSSR: boolean;\n  currentLocale: string;\n  /**\n   * Optional: if defined, will use the provided Apollo client. Otherwise one will be created using\n   * default settings.\n   */\n  client?: ApolloClient<object>;\n}\n\n/** Context used to configure Contentful Client */\nexport const ContentfulContext = createContext<ContentfulProps>({\n  isPreview: false,\n  isSSR: false,\n  currentLocale: 'en-US',\n});\n", "import type { FC } from 'react';\nimport { createContext } from 'react';\n\nimport type {\n  DesignAgnosticButtonProps,\n  DesignAgnosticLocaleDropdownProps,\n  DesignAgnosticModalProps,\n  DesignAgnosticSectionProps,\n  DesignAgnosticToggleProps,\n} from '../components/designAgnostic';\n\nexport interface DesignSystemProps {\n  buttonComponent: FC<DesignAgnosticButtonProps>;\n  localeDropdownComponent: FC<DesignAgnosticLocaleDropdownProps>;\n  modalComponent: FC<DesignAgnosticModalProps>;\n  sectionComponent: FC<DesignAgnosticSectionProps>;\n  toggleComponent: FC<DesignAgnosticToggleProps>;\n}\n\ninterface NotImplementedProps {\n  component: string;\n}\n\nconst NotImplemented: FC<NotImplementedProps> = ({ component }) => {\n  console.error(`${component} not implemented! This must be specified via DesignSystemContext.`);\n  return null;\n};\n\n/** Context used by consumers to define UI implementations used to render Cookie Components. */\nexport const DesignSystemContext = createContext<DesignSystemProps>({\n  buttonComponent: () => <NotImplemented component=\"buttonComponent\" />,\n  localeDropdownComponent: () => <NotImplemented component=\"localeDropdownComponent\" />,\n  modalComponent: () => <NotImplemented component=\"modalComponent\" />,\n  sectionComponent: () => <NotImplemented component=\"sectionComponent\" />,\n  toggleComponent: () => <NotImplemented component=\"toggleComponent\" />,\n});\n", "import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core';\nexport type Maybe<T> = T;\nexport type InputMaybe<T> = T;\nexport type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };\nexport type MakeEmpty<T extends { [key: string]: unknown }, K extends keyof T> = { [_ in K]?: never };\nexport type Incremental<T> = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n  ID: { input: string; output: string; }\n  String: { input: string; output: string; }\n  Boolean: { input: boolean; output: boolean; }\n  Int: { input: number; output: number; }\n  Float: { input: number; output: number; }\n  /**\n   * A date-time string at UTC, such as 2007-12-03T10:15:30Z,\n   *     compliant with the 'date-time' format outlined in section 5.6 of\n   *     the RFC 3339 profile of the ISO 8601 standard for representation\n   *     of dates and times using the Gregorian calendar.\n   */\n  DateTime: { input: string; output: string; }\n  /** The 'Dimension' type represents dimensions as whole numeric values between `1` and `4000`. */\n  Dimension: { input: number; output: number; }\n  /** The 'Quality' type represents quality as whole numeric values between `1` and `100`. */\n  Quality: { input: number; output: number; }\n  /** The 'HexColor' type represents color in `rgb:ffffff` string format. */\n  HexColor: { input: string; output: string; }\n  /** The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */\n  JSON: { input: Record<string, unknown>; output: Record<string, unknown>; }\n};\n\nexport type QueryType = {\n  readonly __typename?: 'Query';\n  readonly asset: Maybe<AssetType>;\n  readonly assetCollection: Maybe<AssetCollectionType>;\n  readonly globalNavConfig: Maybe<GlobalNavConfigType>;\n  readonly globalNavConfigCollection: Maybe<GlobalNavConfigCollectionType>;\n  readonly cookieModal: Maybe<CookieModalType>;\n  readonly cookieModalCollection: Maybe<CookieModalCollectionType>;\n  readonly trackingCookie: Maybe<TrackingCookieType>;\n  readonly trackingCookieCollection: Maybe<TrackingCookieCollectionType>;\n  readonly image: Maybe<ImageType>;\n  readonly imageCollection: Maybe<ImageCollectionType>;\n  readonly globalNavHighlight: Maybe<GlobalNavHighlightType>;\n  readonly globalNavHighlightCollection: Maybe<GlobalNavHighlightCollectionType>;\n  readonly globalNav: Maybe<GlobalNavType>;\n  readonly globalNavCollection: Maybe<GlobalNavCollectionType>;\n  readonly cookieCategory: Maybe<CookieCategoryType>;\n  readonly cookieCategoryCollection: Maybe<CookieCategoryCollectionType>;\n  readonly footerV3: Maybe<FooterV3Type>;\n  readonly footerV3Collection: Maybe<FooterV3CollectionType>;\n  readonly footerItemV3: Maybe<FooterItemV3Type>;\n  readonly footerItemV3Collection: Maybe<FooterItemV3CollectionType>;\n  readonly footerLocaleDropdown: Maybe<FooterLocaleDropdownType>;\n  readonly footerLocaleDropdownCollection: Maybe<FooterLocaleDropdownCollectionType>;\n  readonly footerCookiesSettingsLink: Maybe<FooterCookiesSettingsLinkType>;\n  readonly footerCookiesSettingsLinkCollection: Maybe<FooterCookiesSettingsLinkCollectionType>;\n  readonly footerGroup: Maybe<FooterGroupType>;\n  readonly footerGroupCollection: Maybe<FooterGroupCollectionType>;\n  readonly cookieBanner: Maybe<CookieBannerType>;\n  readonly cookieBannerCollection: Maybe<CookieBannerCollectionType>;\n  readonly footer: Maybe<FooterType>;\n  readonly footerCollection: Maybe<FooterCollectionType>;\n  readonly analytics: Maybe<AnalyticsType>;\n  readonly analyticsCollection: Maybe<AnalyticsCollectionType>;\n  readonly globalNavItem: Maybe<GlobalNavItemType>;\n  readonly globalNavItemCollection: Maybe<GlobalNavItemCollectionType>;\n  readonly button: Maybe<ButtonType>;\n  readonly buttonCollection: Maybe<ButtonCollectionType>;\n  readonly callToAction: Maybe<CallToActionType>;\n  readonly callToActionCollection: Maybe<CallToActionCollectionType>;\n  readonly message: Maybe<MessageType>;\n  readonly messageCollection: Maybe<MessageCollectionType>;\n  readonly legalMessage: Maybe<LegalMessageType>;\n  readonly legalMessageCollection: Maybe<LegalMessageCollectionType>;\n  readonly video: Maybe<VideoType>;\n  readonly videoCollection: Maybe<VideoCollectionType>;\n  readonly footerItem: Maybe<FooterItemType>;\n  readonly footerItemCollection: Maybe<FooterItemCollectionType>;\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly _node: Maybe<_NodeType>;\n};\n\n\nexport type QueryAssetArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryAssetCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<AssetFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<AssetOrderType>>>;\n};\n\n\nexport type QueryGlobalNavConfigArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryGlobalNavConfigCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<GlobalNavConfigFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavConfigOrderType>>>;\n};\n\n\nexport type QueryCookieModalArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryCookieModalCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<CookieModalFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<CookieModalOrderType>>>;\n};\n\n\nexport type QueryTrackingCookieArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryTrackingCookieCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<TrackingCookieFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<TrackingCookieOrderType>>>;\n};\n\n\nexport type QueryImageArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryImageCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<ImageFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<ImageOrderType>>>;\n};\n\n\nexport type QueryGlobalNavHighlightArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryGlobalNavHighlightCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<GlobalNavHighlightFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavHighlightOrderType>>>;\n};\n\n\nexport type QueryGlobalNavArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryGlobalNavCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<GlobalNavFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavOrderType>>>;\n};\n\n\nexport type QueryCookieCategoryArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryCookieCategoryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<CookieCategoryFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<CookieCategoryOrderType>>>;\n};\n\n\nexport type QueryFooterV3ArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryFooterV3CollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterV3FilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterV3OrderType>>>;\n};\n\n\nexport type QueryFooterItemV3ArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryFooterItemV3CollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterItemV3FilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterItemV3OrderType>>>;\n};\n\n\nexport type QueryFooterLocaleDropdownArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryFooterLocaleDropdownCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterLocaleDropdownFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterLocaleDropdownOrderType>>>;\n};\n\n\nexport type QueryFooterCookiesSettingsLinkArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryFooterCookiesSettingsLinkCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterCookiesSettingsLinkFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterCookiesSettingsLinkOrderType>>>;\n};\n\n\nexport type QueryFooterGroupArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryFooterGroupCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterGroupFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterGroupOrderType>>>;\n};\n\n\nexport type QueryCookieBannerArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryCookieBannerCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<CookieBannerFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<CookieBannerOrderType>>>;\n};\n\n\nexport type QueryFooterArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryFooterCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterOrderType>>>;\n};\n\n\nexport type QueryAnalyticsArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryAnalyticsCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<AnalyticsFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<AnalyticsOrderType>>>;\n};\n\n\nexport type QueryGlobalNavItemArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryGlobalNavItemCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<GlobalNavItemFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavItemOrderType>>>;\n};\n\n\nexport type QueryButtonArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryButtonCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<ButtonFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<ButtonOrderType>>>;\n};\n\n\nexport type QueryCallToActionArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryCallToActionCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<CallToActionFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<CallToActionOrderType>>>;\n};\n\n\nexport type QueryMessageArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryMessageCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<MessageFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<MessageOrderType>>>;\n};\n\n\nexport type QueryLegalMessageArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryLegalMessageCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<LegalMessageFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<LegalMessageOrderType>>>;\n};\n\n\nexport type QueryVideoArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryVideoCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<VideoFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<VideoOrderType>>>;\n};\n\n\nexport type QueryFooterItemArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryFooterItemCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterItemFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterItemOrderType>>>;\n};\n\n\nexport type QueryEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<EntryFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<EntryOrderType>>>;\n};\n\n\nexport type Query_NodeArgsType = {\n  id: Scalars['ID']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n/** Represents a binary file in a space. An asset can be any file type. */\nexport type AssetType = {\n  readonly __typename?: 'Asset';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly description: Maybe<Scalars['String']['output']>;\n  readonly contentType: Maybe<Scalars['String']['output']>;\n  readonly fileName: Maybe<Scalars['String']['output']>;\n  readonly size: Maybe<Scalars['Int']['output']>;\n  readonly url: Maybe<Scalars['String']['output']>;\n  readonly width: Maybe<Scalars['Int']['output']>;\n  readonly height: Maybe<Scalars['Int']['output']>;\n  readonly linkedFrom: Maybe<AssetLinkingCollectionsType>;\n};\n\n\n/** Represents a binary file in a space. An asset can be any file type. */\nexport type AssetTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Represents a binary file in a space. An asset can be any file type. */\nexport type AssetDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Represents a binary file in a space. An asset can be any file type. */\nexport type AssetContentTypeArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Represents a binary file in a space. An asset can be any file type. */\nexport type AssetFileNameArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Represents a binary file in a space. An asset can be any file type. */\nexport type AssetSizeArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Represents a binary file in a space. An asset can be any file type. */\nexport type AssetUrlArgsType = {\n  transform: InputMaybe<ImageTransformOptionsType>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Represents a binary file in a space. An asset can be any file type. */\nexport type AssetWidthArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Represents a binary file in a space. An asset can be any file type. */\nexport type AssetHeightArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Represents a binary file in a space. An asset can be any file type. */\nexport type AssetLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\nexport type SysType = {\n  readonly __typename?: 'Sys';\n  readonly id: Scalars['String']['output'];\n  readonly spaceId: Scalars['String']['output'];\n  readonly environmentId: Scalars['String']['output'];\n  readonly publishedAt: Maybe<Scalars['DateTime']['output']>;\n  readonly firstPublishedAt: Maybe<Scalars['DateTime']['output']>;\n  readonly publishedVersion: Maybe<Scalars['Int']['output']>;\n  /** The locale that was requested. */\n  readonly locale: Maybe<Scalars['String']['output']>;\n};\n\nexport type ContentfulMetadataType = {\n  readonly __typename?: 'ContentfulMetadata';\n  readonly tags: ReadonlyArray<Maybe<ContentfulTagType>>;\n  readonly concepts: ReadonlyArray<Maybe<TaxonomyConceptType>>;\n};\n\n/**\n * Represents a tag entity for finding and organizing content easily.\n *         Find out more here: https://www.contentful.com/developers/docs/references/content-delivery-api/#/reference/content-concepts\n */\nexport type TaxonomyConceptType = {\n  readonly __typename?: 'TaxonomyConcept';\n  readonly id: Maybe<Scalars['String']['output']>;\n};\n\n/**\n * Represents a tag entity for finding and organizing content easily.\n *       Find out more here: https://www.contentful.com/developers/docs/references/content-delivery-api/#/reference/content-tags\n */\nexport type ContentfulTagType = {\n  readonly __typename?: 'ContentfulTag';\n  readonly id: Maybe<Scalars['String']['output']>;\n  readonly name: Maybe<Scalars['String']['output']>;\n};\n\nexport type ImageTransformOptionsType = {\n  /** Desired width in pixels. Defaults to the original image width. */\n  readonly width: InputMaybe<Scalars['Dimension']['input']>;\n  /** Desired height in pixels. Defaults to the original image height. */\n  readonly height: InputMaybe<Scalars['Dimension']['input']>;\n  /**\n   * Desired quality of the image in percents.\n   *         Used for `PNG8`, `JPG`, `JPG_PROGRESSIVE` and `WEBP` formats.\n   */\n  readonly quality: InputMaybe<Scalars['Quality']['input']>;\n  /**\n   * Desired corner radius in pixels.\n   *         Results in an image with rounded corners (pass `-1` for a full circle/ellipse).\n   *         Defaults to `0`. Uses desired background color as padding color,\n   *         unless the format is `JPG` or `JPG_PROGRESSIVE` and resize strategy is `PAD`, then defaults to white.\n   */\n  readonly cornerRadius: InputMaybe<Scalars['Int']['input']>;\n  /** Desired resize strategy. Defaults to `FIT`. */\n  readonly resizeStrategy: InputMaybe<ImageResizeStrategyType>;\n  /** Desired resize focus area. Defaults to `CENTER`. */\n  readonly resizeFocus: InputMaybe<ImageResizeFocusType>;\n  /**\n   * Desired background color, used with corner radius or `PAD` resize strategy.\n   *         Defaults to transparent (for `PNG`, `PNG8` and `WEBP`) or white (for `JPG` and `JPG_PROGRESSIVE`).\n   */\n  readonly backgroundColor: InputMaybe<Scalars['HexColor']['input']>;\n  /** Desired image format. Defaults to the original image format. */\n  readonly format: InputMaybe<ImageFormatType>;\n};\n\nexport enum ImageResizeStrategyType {\n  /** Resizes the image to fit into the specified dimensions. */\n  FitType = 'FIT',\n  /**\n   * Resizes the image to the specified dimensions, padding the image if needed.\n   *         Uses desired background color as padding color.\n   */\n  PadType = 'PAD',\n  /** Resizes the image to the specified dimensions, cropping the image if needed. */\n  FillType = 'FILL',\n  /** Resizes the image to the specified dimensions, changing the original aspect ratio if needed. */\n  ScaleType = 'SCALE',\n  /** Crops a part of the original image to fit into the specified dimensions. */\n  CropType = 'CROP',\n  /** Creates a thumbnail from the image. */\n  ThumbType = 'THUMB'\n}\n\nexport enum ImageResizeFocusType {\n  /** Focus the resizing on the center. */\n  CenterType = 'CENTER',\n  /** Focus the resizing on the top. */\n  TopType = 'TOP',\n  /** Focus the resizing on the top right. */\n  TopRightType = 'TOP_RIGHT',\n  /** Focus the resizing on the right. */\n  RightType = 'RIGHT',\n  /** Focus the resizing on the bottom right. */\n  BottomRightType = 'BOTTOM_RIGHT',\n  /** Focus the resizing on the bottom. */\n  BottomType = 'BOTTOM',\n  /** Focus the resizing on the bottom left. */\n  BottomLeftType = 'BOTTOM_LEFT',\n  /** Focus the resizing on the left. */\n  LeftType = 'LEFT',\n  /** Focus the resizing on the top left. */\n  TopLeftType = 'TOP_LEFT',\n  /** Focus the resizing on the largest face. */\n  FaceType = 'FACE',\n  /** Focus the resizing on the area containing all the faces. */\n  FacesType = 'FACES'\n}\n\nexport enum ImageFormatType {\n  /** JPG image format. */\n  JpgType = 'JPG',\n  /**\n   * Progressive JPG format stores multiple passes of an image in progressively higher detail.\n   *         When a progressive image is loading, the viewer will first see a lower quality pixelated version which\n   *         will gradually improve in detail, until the image is fully downloaded. This is to display an image as\n   *         early as possible to make the layout look as designed.\n   */\n  JpgProgressiveType = 'JPG_PROGRESSIVE',\n  /** PNG image format */\n  PngType = 'PNG',\n  /**\n   * 8-bit PNG images support up to 256 colors and weigh less than the standard 24-bit PNG equivalent.\n   *         The 8-bit PNG format is mostly used for simple images, such as icons or logos.\n   */\n  Png8Type = 'PNG8',\n  /** WebP image format. */\n  WebpType = 'WEBP',\n  AvifType = 'AVIF'\n}\n\nexport type AssetLinkingCollectionsType = {\n  readonly __typename?: 'AssetLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly imageCollection: Maybe<ImageCollectionType>;\n  readonly globalNavHighlightCollection: Maybe<GlobalNavHighlightCollectionType>;\n  readonly cookieBannerCollection: Maybe<CookieBannerCollectionType>;\n  readonly videoCollection: Maybe<VideoCollectionType>;\n};\n\n\nexport type AssetLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type AssetLinkingCollectionsImageCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type AssetLinkingCollectionsGlobalNavHighlightCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type AssetLinkingCollectionsCookieBannerCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type AssetLinkingCollectionsVideoCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type EntryCollectionType = {\n  readonly __typename?: 'EntryCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type EntryType = {\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n};\n\nexport type ImageCollectionType = {\n  readonly __typename?: 'ImageCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<ImageType>>;\n};\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/image) */\nexport type ImageType = EntryType & _NodeType & {\n  readonly __typename?: 'Image';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<ImageLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly contentfulDescription: Maybe<Scalars['String']['output']>;\n  readonly media: Maybe<AssetType>;\n  readonly wrap: Maybe<Scalars['String']['output']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/image) */\nexport type ImageLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/image) */\nexport type ImageContentfulDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/image) */\nexport type ImageMediaArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/image) */\nexport type ImageWrapArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type _NodeType = {\n  readonly _id: Scalars['ID']['output'];\n};\n\nexport type ImageLinkingCollectionsType = {\n  readonly __typename?: 'ImageLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly footerV3Collection: Maybe<FooterV3CollectionType>;\n  readonly buttonCollection: Maybe<ButtonCollectionType>;\n};\n\n\nexport type ImageLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type ImageLinkingCollectionsFooterV3CollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<ImageLinkingCollectionsFooterV3CollectionOrderType>>>;\n};\n\n\nexport type ImageLinkingCollectionsButtonCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<ImageLinkingCollectionsButtonCollectionOrderType>>>;\n};\n\nexport type FooterV3CollectionType = {\n  readonly __typename?: 'FooterV3Collection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterV3Type>>;\n};\n\n/** Type for the new Footer V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerV3) */\nexport type FooterV3Type = EntryType & _NodeType & {\n  readonly __typename?: 'FooterV3';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<FooterV3LinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly contentfulDescription: Maybe<Scalars['String']['output']>;\n  readonly columnsCollection: Maybe<FooterV3ColumnsCollectionType>;\n  readonly barCollection: Maybe<FooterV3BarCollectionType>;\n  readonly logo: Maybe<ImageType>;\n  readonly url: Maybe<Scalars['String']['output']>;\n  readonly hideLogoOnDomains: Maybe<ReadonlyArray<Maybe<Scalars['String']['output']>>>;\n};\n\n\n/** Type for the new Footer V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerV3) */\nexport type FooterV3LinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** Type for the new Footer V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerV3) */\nexport type FooterV3ContentfulDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Type for the new Footer V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerV3) */\nexport type FooterV3ColumnsCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterGroupFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterV3ColumnsCollectionOrderType>>>;\n};\n\n\n/** Type for the new Footer V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerV3) */\nexport type FooterV3BarCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterGroupFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterV3BarCollectionOrderType>>>;\n};\n\n\n/** Type for the new Footer V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerV3) */\nexport type FooterV3LogoArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<ImageFilterType>;\n};\n\n\n/** Type for the new Footer V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerV3) */\nexport type FooterV3UrlArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Type for the new Footer V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerV3) */\nexport type FooterV3HideLogoOnDomainsArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type FooterV3LinkingCollectionsType = {\n  readonly __typename?: 'FooterV3LinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n};\n\n\nexport type FooterV3LinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type FooterV3ColumnsCollectionType = {\n  readonly __typename?: 'FooterV3ColumnsCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterGroupType>>;\n};\n\n/** This model will hold and group footer items [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerGroup) */\nexport type FooterGroupType = EntryType & _NodeType & {\n  readonly __typename?: 'FooterGroup';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<FooterGroupLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly contentfulDescription: Maybe<Scalars['String']['output']>;\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly groupKey: Maybe<Scalars['String']['output']>;\n  readonly itemsCollection: Maybe<FooterGroupItemsCollectionType>;\n  readonly analytics: Maybe<AnalyticsType>;\n  readonly hideOnDomains: Maybe<ReadonlyArray<Maybe<Scalars['String']['output']>>>;\n};\n\n\n/** This model will hold and group footer items [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerGroup) */\nexport type FooterGroupLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** This model will hold and group footer items [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerGroup) */\nexport type FooterGroupContentfulDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** This model will hold and group footer items [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerGroup) */\nexport type FooterGroupTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** This model will hold and group footer items [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerGroup) */\nexport type FooterGroupGroupKeyArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** This model will hold and group footer items [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerGroup) */\nexport type FooterGroupItemsCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterGroupItemsFilterType>;\n};\n\n\n/** This model will hold and group footer items [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerGroup) */\nexport type FooterGroupAnalyticsArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<AnalyticsFilterType>;\n};\n\n\n/** This model will hold and group footer items [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerGroup) */\nexport type FooterGroupHideOnDomainsArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type FooterGroupLinkingCollectionsType = {\n  readonly __typename?: 'FooterGroupLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly footerV3Collection: Maybe<FooterV3CollectionType>;\n};\n\n\nexport type FooterGroupLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type FooterGroupLinkingCollectionsFooterV3CollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterGroupLinkingCollectionsFooterV3CollectionOrderType>>>;\n};\n\nexport enum FooterGroupLinkingCollectionsFooterV3CollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterGroupItemsCollectionType = {\n  readonly __typename?: 'FooterGroupItemsCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterGroupItemsItemType>>;\n};\n\nexport type FooterGroupItemsItemType = FooterCookiesSettingsLinkType | FooterItemV3Type | FooterLocaleDropdownType;\n\n/** Footer Cookie Settings Link model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerCookiesSettingsLink) */\nexport type FooterCookiesSettingsLinkType = EntryType & _NodeType & {\n  readonly __typename?: 'FooterCookiesSettingsLink';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<FooterCookiesSettingsLinkLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly contentfulDescription: Maybe<Scalars['String']['output']>;\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly hideOnDomains: Maybe<ReadonlyArray<Maybe<Scalars['String']['output']>>>;\n  readonly analytics: Maybe<AnalyticsType>;\n};\n\n\n/** Footer Cookie Settings Link model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerCookiesSettingsLink) */\nexport type FooterCookiesSettingsLinkLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** Footer Cookie Settings Link model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerCookiesSettingsLink) */\nexport type FooterCookiesSettingsLinkContentfulDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Footer Cookie Settings Link model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerCookiesSettingsLink) */\nexport type FooterCookiesSettingsLinkTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Footer Cookie Settings Link model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerCookiesSettingsLink) */\nexport type FooterCookiesSettingsLinkHideOnDomainsArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Footer Cookie Settings Link model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerCookiesSettingsLink) */\nexport type FooterCookiesSettingsLinkAnalyticsArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<AnalyticsFilterType>;\n};\n\nexport type FooterCookiesSettingsLinkLinkingCollectionsType = {\n  readonly __typename?: 'FooterCookiesSettingsLinkLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly footerGroupCollection: Maybe<FooterGroupCollectionType>;\n};\n\n\nexport type FooterCookiesSettingsLinkLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type FooterCookiesSettingsLinkLinkingCollectionsFooterGroupCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterCookiesSettingsLinkLinkingCollectionsFooterGroupCollectionOrderType>>>;\n};\n\nexport type FooterGroupCollectionType = {\n  readonly __typename?: 'FooterGroupCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterGroupType>>;\n};\n\nexport enum FooterCookiesSettingsLinkLinkingCollectionsFooterGroupCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/analytics) */\nexport type AnalyticsType = EntryType & _NodeType & {\n  readonly __typename?: 'Analytics';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<AnalyticsLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly label: Maybe<Scalars['String']['output']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/analytics) */\nexport type AnalyticsLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/analytics) */\nexport type AnalyticsLabelArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type AnalyticsLinkingCollectionsType = {\n  readonly __typename?: 'AnalyticsLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly footerItemV3Collection: Maybe<FooterItemV3CollectionType>;\n  readonly footerCookiesSettingsLinkCollection: Maybe<FooterCookiesSettingsLinkCollectionType>;\n  readonly footerGroupCollection: Maybe<FooterGroupCollectionType>;\n  readonly globalNavItemCollection: Maybe<GlobalNavItemCollectionType>;\n  readonly callToActionCollection: Maybe<CallToActionCollectionType>;\n  readonly footerItemCollection: Maybe<FooterItemCollectionType>;\n};\n\n\nexport type AnalyticsLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type AnalyticsLinkingCollectionsFooterItemV3CollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<AnalyticsLinkingCollectionsFooterItemV3CollectionOrderType>>>;\n};\n\n\nexport type AnalyticsLinkingCollectionsFooterCookiesSettingsLinkCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<AnalyticsLinkingCollectionsFooterCookiesSettingsLinkCollectionOrderType>>>;\n};\n\n\nexport type AnalyticsLinkingCollectionsFooterGroupCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<AnalyticsLinkingCollectionsFooterGroupCollectionOrderType>>>;\n};\n\n\nexport type AnalyticsLinkingCollectionsGlobalNavItemCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<AnalyticsLinkingCollectionsGlobalNavItemCollectionOrderType>>>;\n};\n\n\nexport type AnalyticsLinkingCollectionsCallToActionCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<AnalyticsLinkingCollectionsCallToActionCollectionOrderType>>>;\n};\n\n\nexport type AnalyticsLinkingCollectionsFooterItemCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<AnalyticsLinkingCollectionsFooterItemCollectionOrderType>>>;\n};\n\nexport type FooterItemV3CollectionType = {\n  readonly __typename?: 'FooterItemV3Collection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterItemV3Type>>;\n};\n\n/** Footer item for the Footer - V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItemV3) */\nexport type FooterItemV3Type = EntryType & _NodeType & {\n  readonly __typename?: 'FooterItemV3';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<FooterItemV3LinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly contentfulDescription: Maybe<Scalars['String']['output']>;\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly url: Maybe<Scalars['String']['output']>;\n  readonly analytics: Maybe<AnalyticsType>;\n  readonly hideOnDomains: Maybe<ReadonlyArray<Maybe<Scalars['String']['output']>>>;\n};\n\n\n/** Footer item for the Footer - V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItemV3) */\nexport type FooterItemV3LinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** Footer item for the Footer - V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItemV3) */\nexport type FooterItemV3ContentfulDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Footer item for the Footer - V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItemV3) */\nexport type FooterItemV3TitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Footer item for the Footer - V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItemV3) */\nexport type FooterItemV3UrlArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Footer item for the Footer - V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItemV3) */\nexport type FooterItemV3AnalyticsArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<AnalyticsFilterType>;\n};\n\n\n/** Footer item for the Footer - V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItemV3) */\nexport type FooterItemV3HideOnDomainsArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type FooterItemV3LinkingCollectionsType = {\n  readonly __typename?: 'FooterItemV3LinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly footerGroupCollection: Maybe<FooterGroupCollectionType>;\n};\n\n\nexport type FooterItemV3LinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type FooterItemV3LinkingCollectionsFooterGroupCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterItemV3LinkingCollectionsFooterGroupCollectionOrderType>>>;\n};\n\nexport enum FooterItemV3LinkingCollectionsFooterGroupCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type AnalyticsFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly label_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly label: InputMaybe<Scalars['String']['input']>;\n  readonly label_not: InputMaybe<Scalars['String']['input']>;\n  readonly label_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly label_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly label_contains: InputMaybe<Scalars['String']['input']>;\n  readonly label_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<AnalyticsFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<AnalyticsFilterType>>>;\n};\n\nexport type SysFilterType = {\n  readonly id_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly id: InputMaybe<Scalars['String']['input']>;\n  readonly id_not: InputMaybe<Scalars['String']['input']>;\n  readonly id_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly id_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly id_contains: InputMaybe<Scalars['String']['input']>;\n  readonly id_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly publishedAt_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly publishedAt: InputMaybe<Scalars['DateTime']['input']>;\n  readonly publishedAt_not: InputMaybe<Scalars['DateTime']['input']>;\n  readonly publishedAt_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['DateTime']['input']>>>;\n  readonly publishedAt_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['DateTime']['input']>>>;\n  readonly publishedAt_gt: InputMaybe<Scalars['DateTime']['input']>;\n  readonly publishedAt_gte: InputMaybe<Scalars['DateTime']['input']>;\n  readonly publishedAt_lt: InputMaybe<Scalars['DateTime']['input']>;\n  readonly publishedAt_lte: InputMaybe<Scalars['DateTime']['input']>;\n  readonly firstPublishedAt_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly firstPublishedAt: InputMaybe<Scalars['DateTime']['input']>;\n  readonly firstPublishedAt_not: InputMaybe<Scalars['DateTime']['input']>;\n  readonly firstPublishedAt_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['DateTime']['input']>>>;\n  readonly firstPublishedAt_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['DateTime']['input']>>>;\n  readonly firstPublishedAt_gt: InputMaybe<Scalars['DateTime']['input']>;\n  readonly firstPublishedAt_gte: InputMaybe<Scalars['DateTime']['input']>;\n  readonly firstPublishedAt_lt: InputMaybe<Scalars['DateTime']['input']>;\n  readonly firstPublishedAt_lte: InputMaybe<Scalars['DateTime']['input']>;\n  readonly publishedVersion_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly publishedVersion: InputMaybe<Scalars['Float']['input']>;\n  readonly publishedVersion_not: InputMaybe<Scalars['Float']['input']>;\n  readonly publishedVersion_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['Float']['input']>>>;\n  readonly publishedVersion_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['Float']['input']>>>;\n  readonly publishedVersion_gt: InputMaybe<Scalars['Float']['input']>;\n  readonly publishedVersion_gte: InputMaybe<Scalars['Float']['input']>;\n  readonly publishedVersion_lt: InputMaybe<Scalars['Float']['input']>;\n  readonly publishedVersion_lte: InputMaybe<Scalars['Float']['input']>;\n};\n\nexport type ContentfulMetadataFilterType = {\n  readonly tags_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly tags: InputMaybe<ContentfulMetadataTagsFilterType>;\n  readonly concepts_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly concepts: InputMaybe<ContentfulMetadataConceptsFilterType>;\n};\n\nexport type ContentfulMetadataConceptsFilterType = {\n  readonly id_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly id_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly id_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly descendants: InputMaybe<ContentfulMetadataConceptsDescendantsFilterType>;\n};\n\nexport type ContentfulMetadataConceptsDescendantsFilterType = {\n  readonly id_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly id_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly id_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\nexport type ContentfulMetadataTagsFilterType = {\n  readonly id_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly id_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly id_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\nexport enum AnalyticsLinkingCollectionsFooterItemV3CollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterCookiesSettingsLinkCollectionType = {\n  readonly __typename?: 'FooterCookiesSettingsLinkCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterCookiesSettingsLinkType>>;\n};\n\nexport enum AnalyticsLinkingCollectionsFooterCookiesSettingsLinkCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum AnalyticsLinkingCollectionsFooterGroupCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type GlobalNavItemCollectionType = {\n  readonly __typename?: 'GlobalNavItemCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<GlobalNavItemType>>;\n};\n\n/** Individual link in the global nav. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavItem) */\nexport type GlobalNavItemType = EntryType & _NodeType & {\n  readonly __typename?: 'GlobalNavItem';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<GlobalNavItemLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly url: Maybe<Scalars['String']['output']>;\n  readonly analytics: Maybe<AnalyticsType>;\n  readonly hideHostnameRegex: Maybe<Scalars['String']['output']>;\n};\n\n\n/** Individual link in the global nav. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavItem) */\nexport type GlobalNavItemLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** Individual link in the global nav. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavItem) */\nexport type GlobalNavItemTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Individual link in the global nav. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavItem) */\nexport type GlobalNavItemUrlArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Individual link in the global nav. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavItem) */\nexport type GlobalNavItemAnalyticsArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<AnalyticsFilterType>;\n};\n\n\n/** Individual link in the global nav. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavItem) */\nexport type GlobalNavItemHideHostnameRegexArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type GlobalNavItemLinkingCollectionsType = {\n  readonly __typename?: 'GlobalNavItemLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly globalNavCollection: Maybe<GlobalNavCollectionType>;\n};\n\n\nexport type GlobalNavItemLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type GlobalNavItemLinkingCollectionsGlobalNavCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavItemLinkingCollectionsGlobalNavCollectionOrderType>>>;\n};\n\nexport type GlobalNavCollectionType = {\n  readonly __typename?: 'GlobalNavCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<GlobalNavType>>;\n};\n\n/** Link group in the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNav) */\nexport type GlobalNavType = EntryType & _NodeType & {\n  readonly __typename?: 'GlobalNav';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<GlobalNavLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly groupKey: Maybe<Scalars['String']['output']>;\n  readonly highlight: Maybe<GlobalNavHighlightType>;\n  readonly itemsCollection: Maybe<GlobalNavItemsCollectionType>;\n  readonly primaryHostnameRegex: Maybe<Scalars['String']['output']>;\n  readonly hideHostnameRegex: Maybe<Scalars['String']['output']>;\n};\n\n\n/** Link group in the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNav) */\nexport type GlobalNavLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** Link group in the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNav) */\nexport type GlobalNavTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Link group in the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNav) */\nexport type GlobalNavGroupKeyArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Link group in the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNav) */\nexport type GlobalNavHighlightArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<GlobalNavHighlightFilterType>;\n};\n\n\n/** Link group in the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNav) */\nexport type GlobalNavItemsCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<GlobalNavItemFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavItemsCollectionOrderType>>>;\n};\n\n\n/** Link group in the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNav) */\nexport type GlobalNavPrimaryHostnameRegexArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Link group in the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNav) */\nexport type GlobalNavHideHostnameRegexArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type GlobalNavLinkingCollectionsType = {\n  readonly __typename?: 'GlobalNavLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly globalNavConfigCollection: Maybe<GlobalNavConfigCollectionType>;\n};\n\n\nexport type GlobalNavLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type GlobalNavLinkingCollectionsGlobalNavConfigCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavLinkingCollectionsGlobalNavConfigCollectionOrderType>>>;\n};\n\nexport type GlobalNavConfigCollectionType = {\n  readonly __typename?: 'GlobalNavConfigCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<GlobalNavConfigType>>;\n};\n\n/** Configuration for the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavConfig) */\nexport type GlobalNavConfigType = EntryType & _NodeType & {\n  readonly __typename?: 'GlobalNavConfig';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<GlobalNavConfigLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly globalNavGroupsCollection: Maybe<GlobalNavConfigGlobalNavGroupsCollectionType>;\n  readonly globalNavLabel: Maybe<Scalars['String']['output']>;\n  readonly globalNavButtonAriaLabel: Maybe<Scalars['String']['output']>;\n};\n\n\n/** Configuration for the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavConfig) */\nexport type GlobalNavConfigLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** Configuration for the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavConfig) */\nexport type GlobalNavConfigTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Configuration for the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavConfig) */\nexport type GlobalNavConfigGlobalNavGroupsCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<GlobalNavFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavConfigGlobalNavGroupsCollectionOrderType>>>;\n};\n\n\n/** Configuration for the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavConfig) */\nexport type GlobalNavConfigGlobalNavLabelArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Configuration for the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavConfig) */\nexport type GlobalNavConfigGlobalNavButtonAriaLabelArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type GlobalNavConfigLinkingCollectionsType = {\n  readonly __typename?: 'GlobalNavConfigLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n};\n\n\nexport type GlobalNavConfigLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type GlobalNavConfigGlobalNavGroupsCollectionType = {\n  readonly __typename?: 'GlobalNavConfigGlobalNavGroupsCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<GlobalNavType>>;\n};\n\nexport type GlobalNavFilterType = {\n  readonly highlight: InputMaybe<CfGlobalNavHighlightNestedFilterType>;\n  readonly items: InputMaybe<CfGlobalNavItemNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly groupKey: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_not: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly groupKey_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly groupKey_contains: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly highlight_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly itemsCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly primaryHostnameRegex_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly primaryHostnameRegex: InputMaybe<Scalars['String']['input']>;\n  readonly primaryHostnameRegex_not: InputMaybe<Scalars['String']['input']>;\n  readonly primaryHostnameRegex_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly primaryHostnameRegex_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly primaryHostnameRegex_contains: InputMaybe<Scalars['String']['input']>;\n  readonly primaryHostnameRegex_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideHostnameRegex: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_not: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideHostnameRegex_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideHostnameRegex_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavFilterType>>>;\n};\n\nexport type CfGlobalNavHighlightNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cta_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly background_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardTitleV2_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardTitleV2: InputMaybe<Scalars['String']['input']>;\n  readonly cardTitleV2_not: InputMaybe<Scalars['String']['input']>;\n  readonly cardTitleV2_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly cardTitleV2_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly cardTitleV2_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardTitleV2_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardBodyV2_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardBodyV2: InputMaybe<Scalars['String']['input']>;\n  readonly cardBodyV2_not: InputMaybe<Scalars['String']['input']>;\n  readonly cardBodyV2_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly cardBodyV2_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly cardBodyV2_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardBodyV2_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardContent_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardContent_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardContent_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardTitle_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardTitle_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardTitle_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardBody_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardBody_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardBody_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfGlobalNavHighlightNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfGlobalNavHighlightNestedFilterType>>>;\n};\n\nexport type CfGlobalNavItemNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url: InputMaybe<Scalars['String']['input']>;\n  readonly url_not: InputMaybe<Scalars['String']['input']>;\n  readonly url_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly analytics_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideHostnameRegex_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideHostnameRegex: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_not: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideHostnameRegex_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideHostnameRegex_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfGlobalNavItemNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfGlobalNavItemNestedFilterType>>>;\n};\n\nexport enum GlobalNavConfigGlobalNavGroupsCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  PrimaryHostnameRegexAscType = 'primaryHostnameRegex_ASC',\n  PrimaryHostnameRegexDescType = 'primaryHostnameRegex_DESC',\n  HideHostnameRegexAscType = 'hideHostnameRegex_ASC',\n  HideHostnameRegexDescType = 'hideHostnameRegex_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum GlobalNavLinkingCollectionsGlobalNavConfigCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GlobalNavLabelAscType = 'globalNavLabel_ASC',\n  GlobalNavLabelDescType = 'globalNavLabel_DESC',\n  GlobalNavButtonAriaLabelAscType = 'globalNavButtonAriaLabel_ASC',\n  GlobalNavButtonAriaLabelDescType = 'globalNavButtonAriaLabel_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\n/** The highlight for a group of links. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavHighlight) */\nexport type GlobalNavHighlightType = EntryType & _NodeType & {\n  readonly __typename?: 'GlobalNavHighlight';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<GlobalNavHighlightLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly cta: Maybe<CallToActionType>;\n  readonly background: Maybe<AssetType>;\n  readonly cardTitleV2: Maybe<Scalars['String']['output']>;\n  readonly cardBodyV2: Maybe<Scalars['String']['output']>;\n  readonly cardContent: Maybe<GlobalNavHighlightCardContentType>;\n  readonly cardTitle: Maybe<GlobalNavHighlightCardTitleType>;\n  readonly cardBody: Maybe<GlobalNavHighlightCardBodyType>;\n};\n\n\n/** The highlight for a group of links. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavHighlight) */\nexport type GlobalNavHighlightLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** The highlight for a group of links. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavHighlight) */\nexport type GlobalNavHighlightTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** The highlight for a group of links. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavHighlight) */\nexport type GlobalNavHighlightCtaArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<CallToActionFilterType>;\n};\n\n\n/** The highlight for a group of links. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavHighlight) */\nexport type GlobalNavHighlightBackgroundArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** The highlight for a group of links. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavHighlight) */\nexport type GlobalNavHighlightCardTitleV2ArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** The highlight for a group of links. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavHighlight) */\nexport type GlobalNavHighlightCardBodyV2ArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** The highlight for a group of links. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavHighlight) */\nexport type GlobalNavHighlightCardContentArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** The highlight for a group of links. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavHighlight) */\nexport type GlobalNavHighlightCardTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** The highlight for a group of links. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavHighlight) */\nexport type GlobalNavHighlightCardBodyArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type GlobalNavHighlightLinkingCollectionsType = {\n  readonly __typename?: 'GlobalNavHighlightLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly globalNavCollection: Maybe<GlobalNavCollectionType>;\n};\n\n\nexport type GlobalNavHighlightLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type GlobalNavHighlightLinkingCollectionsGlobalNavCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavHighlightLinkingCollectionsGlobalNavCollectionOrderType>>>;\n};\n\nexport enum GlobalNavHighlightLinkingCollectionsGlobalNavCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  PrimaryHostnameRegexAscType = 'primaryHostnameRegex_ASC',\n  PrimaryHostnameRegexDescType = 'primaryHostnameRegex_DESC',\n  HideHostnameRegexAscType = 'hideHostnameRegex_ASC',\n  HideHostnameRegexDescType = 'hideHostnameRegex_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/callToAction) */\nexport type CallToActionType = EntryType & _NodeType & {\n  readonly __typename?: 'CallToAction';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<CallToActionLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly contentfulDescription: Maybe<Scalars['String']['output']>;\n  readonly presentation: Maybe<CallToActionPresentationType>;\n  readonly analytics: Maybe<AnalyticsType>;\n  readonly url: Maybe<Scalars['String']['output']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/callToAction) */\nexport type CallToActionLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/callToAction) */\nexport type CallToActionContentfulDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/callToAction) */\nexport type CallToActionPresentationArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/callToAction) */\nexport type CallToActionAnalyticsArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<AnalyticsFilterType>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/callToAction) */\nexport type CallToActionUrlArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type CallToActionLinkingCollectionsType = {\n  readonly __typename?: 'CallToActionLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly globalNavHighlightCollection: Maybe<GlobalNavHighlightCollectionType>;\n};\n\n\nexport type CallToActionLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type CallToActionLinkingCollectionsGlobalNavHighlightCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<CallToActionLinkingCollectionsGlobalNavHighlightCollectionOrderType>>>;\n};\n\nexport type GlobalNavHighlightCollectionType = {\n  readonly __typename?: 'GlobalNavHighlightCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<GlobalNavHighlightType>>;\n};\n\nexport enum CallToActionLinkingCollectionsGlobalNavHighlightCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  CardTitleV2AscType = 'cardTitleV2_ASC',\n  CardTitleV2DescType = 'cardTitleV2_DESC',\n  CardBodyV2AscType = 'cardBodyV2_ASC',\n  CardBodyV2DescType = 'cardBodyV2_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type CallToActionPresentationType = ButtonType;\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/button) */\nexport type ButtonType = EntryType & _NodeType & {\n  readonly __typename?: 'Button';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<ButtonLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly contentfulDescription: Maybe<Scalars['String']['output']>;\n  readonly title: Maybe<ButtonTitleType>;\n  readonly url: Maybe<Scalars['String']['output']>;\n  readonly size: Maybe<Scalars['String']['output']>;\n  readonly theme: Maybe<Scalars['String']['output']>;\n  readonly buttonType: Maybe<Scalars['String']['output']>;\n  readonly image: Maybe<ImageType>;\n  readonly iconName: Maybe<Scalars['String']['output']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/button) */\nexport type ButtonLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/button) */\nexport type ButtonContentfulDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/button) */\nexport type ButtonTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/button) */\nexport type ButtonUrlArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/button) */\nexport type ButtonSizeArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/button) */\nexport type ButtonThemeArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/button) */\nexport type ButtonButtonTypeArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/button) */\nexport type ButtonImageArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<ImageFilterType>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/button) */\nexport type ButtonIconNameArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type ButtonLinkingCollectionsType = {\n  readonly __typename?: 'ButtonLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly callToActionCollection: Maybe<CallToActionCollectionType>;\n};\n\n\nexport type ButtonLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type ButtonLinkingCollectionsCallToActionCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<ButtonLinkingCollectionsCallToActionCollectionOrderType>>>;\n};\n\nexport type CallToActionCollectionType = {\n  readonly __typename?: 'CallToActionCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<CallToActionType>>;\n};\n\nexport enum ButtonLinkingCollectionsCallToActionCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type ButtonTitleType = {\n  readonly __typename?: 'ButtonTitle';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: ButtonTitleLinksType;\n};\n\nexport type ButtonTitleLinksType = {\n  readonly __typename?: 'ButtonTitleLinks';\n  readonly entries: ButtonTitleEntriesType;\n  readonly assets: ButtonTitleAssetsType;\n  readonly resources: ButtonTitleResourcesType;\n};\n\nexport type ButtonTitleEntriesType = {\n  readonly __typename?: 'ButtonTitleEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type ButtonTitleAssetsType = {\n  readonly __typename?: 'ButtonTitleAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type ButtonTitleResourcesType = {\n  readonly __typename?: 'ButtonTitleResources';\n  readonly block: ReadonlyArray<ButtonTitleResourcesBlockType>;\n  readonly inline: ReadonlyArray<ButtonTitleResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<ButtonTitleResourcesHyperlinkType>;\n};\n\nexport type ButtonTitleResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'ButtonTitleResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type ResourceLinkType = {\n  readonly sys: ResourceSysType;\n};\n\nexport type ResourceSysType = {\n  readonly __typename?: 'ResourceSys';\n  readonly urn: Scalars['String']['output'];\n  readonly linkType: Scalars['String']['output'];\n};\n\nexport type ButtonTitleResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'ButtonTitleResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type ButtonTitleResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'ButtonTitleResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type ImageFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly media_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly wrap_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly wrap: InputMaybe<Scalars['String']['input']>;\n  readonly wrap_not: InputMaybe<Scalars['String']['input']>;\n  readonly wrap_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly wrap_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly wrap_contains: InputMaybe<Scalars['String']['input']>;\n  readonly wrap_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<ImageFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<ImageFilterType>>>;\n};\n\nexport type CallToActionFilterType = {\n  readonly analytics: InputMaybe<CfAnalyticsNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly presentation_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly analytics_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url: InputMaybe<Scalars['String']['input']>;\n  readonly url_not: InputMaybe<Scalars['String']['input']>;\n  readonly url_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CallToActionFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CallToActionFilterType>>>;\n};\n\nexport type CfAnalyticsNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly label_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly label: InputMaybe<Scalars['String']['input']>;\n  readonly label_not: InputMaybe<Scalars['String']['input']>;\n  readonly label_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly label_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly label_contains: InputMaybe<Scalars['String']['input']>;\n  readonly label_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfAnalyticsNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfAnalyticsNestedFilterType>>>;\n};\n\nexport type GlobalNavHighlightCardContentType = {\n  readonly __typename?: 'GlobalNavHighlightCardContent';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: GlobalNavHighlightCardContentLinksType;\n};\n\nexport type GlobalNavHighlightCardContentLinksType = {\n  readonly __typename?: 'GlobalNavHighlightCardContentLinks';\n  readonly entries: GlobalNavHighlightCardContentEntriesType;\n  readonly assets: GlobalNavHighlightCardContentAssetsType;\n  readonly resources: GlobalNavHighlightCardContentResourcesType;\n};\n\nexport type GlobalNavHighlightCardContentEntriesType = {\n  readonly __typename?: 'GlobalNavHighlightCardContentEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type GlobalNavHighlightCardContentAssetsType = {\n  readonly __typename?: 'GlobalNavHighlightCardContentAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type GlobalNavHighlightCardContentResourcesType = {\n  readonly __typename?: 'GlobalNavHighlightCardContentResources';\n  readonly block: ReadonlyArray<GlobalNavHighlightCardContentResourcesBlockType>;\n  readonly inline: ReadonlyArray<GlobalNavHighlightCardContentResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<GlobalNavHighlightCardContentResourcesHyperlinkType>;\n};\n\nexport type GlobalNavHighlightCardContentResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'GlobalNavHighlightCardContentResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type GlobalNavHighlightCardContentResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'GlobalNavHighlightCardContentResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type GlobalNavHighlightCardContentResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'GlobalNavHighlightCardContentResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type GlobalNavHighlightCardTitleType = {\n  readonly __typename?: 'GlobalNavHighlightCardTitle';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: GlobalNavHighlightCardTitleLinksType;\n};\n\nexport type GlobalNavHighlightCardTitleLinksType = {\n  readonly __typename?: 'GlobalNavHighlightCardTitleLinks';\n  readonly entries: GlobalNavHighlightCardTitleEntriesType;\n  readonly assets: GlobalNavHighlightCardTitleAssetsType;\n  readonly resources: GlobalNavHighlightCardTitleResourcesType;\n};\n\nexport type GlobalNavHighlightCardTitleEntriesType = {\n  readonly __typename?: 'GlobalNavHighlightCardTitleEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type GlobalNavHighlightCardTitleAssetsType = {\n  readonly __typename?: 'GlobalNavHighlightCardTitleAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type GlobalNavHighlightCardTitleResourcesType = {\n  readonly __typename?: 'GlobalNavHighlightCardTitleResources';\n  readonly block: ReadonlyArray<GlobalNavHighlightCardTitleResourcesBlockType>;\n  readonly inline: ReadonlyArray<GlobalNavHighlightCardTitleResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<GlobalNavHighlightCardTitleResourcesHyperlinkType>;\n};\n\nexport type GlobalNavHighlightCardTitleResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'GlobalNavHighlightCardTitleResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type GlobalNavHighlightCardTitleResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'GlobalNavHighlightCardTitleResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type GlobalNavHighlightCardTitleResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'GlobalNavHighlightCardTitleResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type GlobalNavHighlightCardBodyType = {\n  readonly __typename?: 'GlobalNavHighlightCardBody';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: GlobalNavHighlightCardBodyLinksType;\n};\n\nexport type GlobalNavHighlightCardBodyLinksType = {\n  readonly __typename?: 'GlobalNavHighlightCardBodyLinks';\n  readonly entries: GlobalNavHighlightCardBodyEntriesType;\n  readonly assets: GlobalNavHighlightCardBodyAssetsType;\n  readonly resources: GlobalNavHighlightCardBodyResourcesType;\n};\n\nexport type GlobalNavHighlightCardBodyEntriesType = {\n  readonly __typename?: 'GlobalNavHighlightCardBodyEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type GlobalNavHighlightCardBodyAssetsType = {\n  readonly __typename?: 'GlobalNavHighlightCardBodyAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type GlobalNavHighlightCardBodyResourcesType = {\n  readonly __typename?: 'GlobalNavHighlightCardBodyResources';\n  readonly block: ReadonlyArray<GlobalNavHighlightCardBodyResourcesBlockType>;\n  readonly inline: ReadonlyArray<GlobalNavHighlightCardBodyResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<GlobalNavHighlightCardBodyResourcesHyperlinkType>;\n};\n\nexport type GlobalNavHighlightCardBodyResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'GlobalNavHighlightCardBodyResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type GlobalNavHighlightCardBodyResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'GlobalNavHighlightCardBodyResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type GlobalNavHighlightCardBodyResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'GlobalNavHighlightCardBodyResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type GlobalNavHighlightFilterType = {\n  readonly cta: InputMaybe<CfCallToActionNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cta_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly background_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardTitleV2_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardTitleV2: InputMaybe<Scalars['String']['input']>;\n  readonly cardTitleV2_not: InputMaybe<Scalars['String']['input']>;\n  readonly cardTitleV2_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly cardTitleV2_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly cardTitleV2_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardTitleV2_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardBodyV2_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardBodyV2: InputMaybe<Scalars['String']['input']>;\n  readonly cardBodyV2_not: InputMaybe<Scalars['String']['input']>;\n  readonly cardBodyV2_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly cardBodyV2_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly cardBodyV2_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardBodyV2_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardContent_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardContent_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardContent_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardTitle_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardTitle_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardTitle_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardBody_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardBody_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardBody_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavHighlightFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavHighlightFilterType>>>;\n};\n\nexport type CfCallToActionNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly presentation_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly analytics_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url: InputMaybe<Scalars['String']['input']>;\n  readonly url_not: InputMaybe<Scalars['String']['input']>;\n  readonly url_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfCallToActionNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfCallToActionNestedFilterType>>>;\n};\n\nexport type GlobalNavItemsCollectionType = {\n  readonly __typename?: 'GlobalNavItemsCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<GlobalNavItemType>>;\n};\n\nexport type GlobalNavItemFilterType = {\n  readonly analytics: InputMaybe<CfAnalyticsNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url: InputMaybe<Scalars['String']['input']>;\n  readonly url_not: InputMaybe<Scalars['String']['input']>;\n  readonly url_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly analytics_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideHostnameRegex_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideHostnameRegex: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_not: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideHostnameRegex_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideHostnameRegex_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavItemFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavItemFilterType>>>;\n};\n\nexport enum GlobalNavItemsCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  HideHostnameRegexAscType = 'hideHostnameRegex_ASC',\n  HideHostnameRegexDescType = 'hideHostnameRegex_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum GlobalNavItemLinkingCollectionsGlobalNavCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  PrimaryHostnameRegexAscType = 'primaryHostnameRegex_ASC',\n  PrimaryHostnameRegexDescType = 'primaryHostnameRegex_DESC',\n  HideHostnameRegexAscType = 'hideHostnameRegex_ASC',\n  HideHostnameRegexDescType = 'hideHostnameRegex_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum AnalyticsLinkingCollectionsGlobalNavItemCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  HideHostnameRegexAscType = 'hideHostnameRegex_ASC',\n  HideHostnameRegexDescType = 'hideHostnameRegex_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum AnalyticsLinkingCollectionsCallToActionCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterItemCollectionType = {\n  readonly __typename?: 'FooterItemCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterItemType>>;\n};\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItem) */\nexport type FooterItemType = EntryType & _NodeType & {\n  readonly __typename?: 'FooterItem';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<FooterItemLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly url: Maybe<Scalars['String']['output']>;\n  readonly analytics: Maybe<AnalyticsType>;\n  readonly footerItemsCollection: Maybe<FooterItemFooterItemsCollectionType>;\n  readonly globalOnly: Maybe<Scalars['Boolean']['output']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItem) */\nexport type FooterItemLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItem) */\nexport type FooterItemTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItem) */\nexport type FooterItemUrlArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItem) */\nexport type FooterItemAnalyticsArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<AnalyticsFilterType>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItem) */\nexport type FooterItemFooterItemsCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterItemFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterItemFooterItemsCollectionOrderType>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItem) */\nexport type FooterItemGlobalOnlyArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type FooterItemLinkingCollectionsType = {\n  readonly __typename?: 'FooterItemLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly footerCollection: Maybe<FooterCollectionType>;\n  readonly footerItemCollection: Maybe<FooterItemCollectionType>;\n};\n\n\nexport type FooterItemLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type FooterItemLinkingCollectionsFooterCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterItemLinkingCollectionsFooterCollectionOrderType>>>;\n};\n\n\nexport type FooterItemLinkingCollectionsFooterItemCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterItemLinkingCollectionsFooterItemCollectionOrderType>>>;\n};\n\nexport type FooterCollectionType = {\n  readonly __typename?: 'FooterCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterType>>;\n};\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footer) */\nexport type FooterType = EntryType & _NodeType & {\n  readonly __typename?: 'Footer';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<FooterLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly footerColumnCollection: Maybe<FooterFooterColumnCollectionType>;\n  readonly footerBarCollection: Maybe<FooterFooterBarCollectionType>;\n  readonly globalOnly: Maybe<Scalars['Boolean']['output']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footer) */\nexport type FooterLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footer) */\nexport type FooterTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footer) */\nexport type FooterFooterColumnCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterItemFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterFooterColumnCollectionOrderType>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footer) */\nexport type FooterFooterBarCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterItemFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterFooterBarCollectionOrderType>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footer) */\nexport type FooterGlobalOnlyArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type FooterLinkingCollectionsType = {\n  readonly __typename?: 'FooterLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n};\n\n\nexport type FooterLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type FooterFooterColumnCollectionType = {\n  readonly __typename?: 'FooterFooterColumnCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterItemType>>;\n};\n\nexport type FooterItemFilterType = {\n  readonly analytics: InputMaybe<CfAnalyticsNestedFilterType>;\n  readonly footerItems: InputMaybe<CfFooterItemNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url: InputMaybe<Scalars['String']['input']>;\n  readonly url_not: InputMaybe<Scalars['String']['input']>;\n  readonly url_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly analytics_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly footerItemsCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalOnly_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalOnly: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalOnly_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<FooterItemFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<FooterItemFilterType>>>;\n};\n\nexport type CfFooterItemNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url: InputMaybe<Scalars['String']['input']>;\n  readonly url_not: InputMaybe<Scalars['String']['input']>;\n  readonly url_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly analytics_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly footerItemsCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalOnly_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalOnly: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalOnly_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfFooterItemNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfFooterItemNestedFilterType>>>;\n};\n\nexport enum FooterFooterColumnCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  GlobalOnlyAscType = 'globalOnly_ASC',\n  GlobalOnlyDescType = 'globalOnly_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterFooterBarCollectionType = {\n  readonly __typename?: 'FooterFooterBarCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterItemType>>;\n};\n\nexport enum FooterFooterBarCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  GlobalOnlyAscType = 'globalOnly_ASC',\n  GlobalOnlyDescType = 'globalOnly_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum FooterItemLinkingCollectionsFooterCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GlobalOnlyAscType = 'globalOnly_ASC',\n  GlobalOnlyDescType = 'globalOnly_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum FooterItemLinkingCollectionsFooterItemCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  GlobalOnlyAscType = 'globalOnly_ASC',\n  GlobalOnlyDescType = 'globalOnly_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterItemFooterItemsCollectionType = {\n  readonly __typename?: 'FooterItemFooterItemsCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterItemType>>;\n};\n\nexport enum FooterItemFooterItemsCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  GlobalOnlyAscType = 'globalOnly_ASC',\n  GlobalOnlyDescType = 'globalOnly_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum AnalyticsLinkingCollectionsFooterItemCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  GlobalOnlyAscType = 'globalOnly_ASC',\n  GlobalOnlyDescType = 'globalOnly_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\n/** Footer Locale Dropdown model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerLocaleDropdown) */\nexport type FooterLocaleDropdownType = EntryType & _NodeType & {\n  readonly __typename?: 'FooterLocaleDropdown';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<FooterLocaleDropdownLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly contentfulDescription: Maybe<Scalars['String']['output']>;\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly hideOnDomains: Maybe<ReadonlyArray<Maybe<Scalars['String']['output']>>>;\n};\n\n\n/** Footer Locale Dropdown model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerLocaleDropdown) */\nexport type FooterLocaleDropdownLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** Footer Locale Dropdown model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerLocaleDropdown) */\nexport type FooterLocaleDropdownContentfulDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Footer Locale Dropdown model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerLocaleDropdown) */\nexport type FooterLocaleDropdownTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Footer Locale Dropdown model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerLocaleDropdown) */\nexport type FooterLocaleDropdownHideOnDomainsArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type FooterLocaleDropdownLinkingCollectionsType = {\n  readonly __typename?: 'FooterLocaleDropdownLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly footerGroupCollection: Maybe<FooterGroupCollectionType>;\n};\n\n\nexport type FooterLocaleDropdownLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type FooterLocaleDropdownLinkingCollectionsFooterGroupCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterLocaleDropdownLinkingCollectionsFooterGroupCollectionOrderType>>>;\n};\n\nexport enum FooterLocaleDropdownLinkingCollectionsFooterGroupCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterGroupItemsFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideOnDomains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideOnDomains_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<FooterGroupItemsFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<FooterGroupItemsFilterType>>>;\n};\n\nexport type FooterGroupFilterType = {\n  readonly items: InputMaybe<CfitemsMultiTypeNestedFilterType>;\n  readonly analytics: InputMaybe<CfAnalyticsNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly groupKey: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_not: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly groupKey_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly groupKey_contains: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly itemsCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly analytics_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideOnDomains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideOnDomains_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<FooterGroupFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<FooterGroupFilterType>>>;\n};\n\nexport type CfitemsMultiTypeNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideOnDomains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideOnDomains_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfitemsMultiTypeNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfitemsMultiTypeNestedFilterType>>>;\n};\n\nexport enum FooterV3ColumnsCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterV3BarCollectionType = {\n  readonly __typename?: 'FooterV3BarCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterGroupType>>;\n};\n\nexport enum FooterV3BarCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum ImageLinkingCollectionsFooterV3CollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type ButtonCollectionType = {\n  readonly __typename?: 'ButtonCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<ButtonType>>;\n};\n\nexport enum ImageLinkingCollectionsButtonCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SizeAscType = 'size_ASC',\n  SizeDescType = 'size_DESC',\n  ThemeAscType = 'theme_ASC',\n  ThemeDescType = 'theme_DESC',\n  ButtonTypeAscType = 'buttonType_ASC',\n  ButtonTypeDescType = 'buttonType_DESC',\n  IconNameAscType = 'iconName_ASC',\n  IconNameDescType = 'iconName_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type CookieBannerCollectionType = {\n  readonly __typename?: 'CookieBannerCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<CookieBannerType>>;\n};\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieBanner) */\nexport type CookieBannerType = EntryType & _NodeType & {\n  readonly __typename?: 'CookieBanner';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<CookieBannerLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly leftMedia: Maybe<AssetType>;\n  readonly rightMedia: Maybe<AssetType>;\n  readonly body: Maybe<CookieBannerBodyType>;\n  readonly acceptCookiesButton: Maybe<Scalars['String']['output']>;\n  readonly cookieSettingsButtonText: Maybe<Scalars['String']['output']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieBanner) */\nexport type CookieBannerLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieBanner) */\nexport type CookieBannerTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieBanner) */\nexport type CookieBannerLeftMediaArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieBanner) */\nexport type CookieBannerRightMediaArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieBanner) */\nexport type CookieBannerBodyArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieBanner) */\nexport type CookieBannerAcceptCookiesButtonArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieBanner) */\nexport type CookieBannerCookieSettingsButtonTextArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type CookieBannerLinkingCollectionsType = {\n  readonly __typename?: 'CookieBannerLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n};\n\n\nexport type CookieBannerLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type CookieBannerBodyType = {\n  readonly __typename?: 'CookieBannerBody';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: CookieBannerBodyLinksType;\n};\n\nexport type CookieBannerBodyLinksType = {\n  readonly __typename?: 'CookieBannerBodyLinks';\n  readonly entries: CookieBannerBodyEntriesType;\n  readonly assets: CookieBannerBodyAssetsType;\n  readonly resources: CookieBannerBodyResourcesType;\n};\n\nexport type CookieBannerBodyEntriesType = {\n  readonly __typename?: 'CookieBannerBodyEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type CookieBannerBodyAssetsType = {\n  readonly __typename?: 'CookieBannerBodyAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type CookieBannerBodyResourcesType = {\n  readonly __typename?: 'CookieBannerBodyResources';\n  readonly block: ReadonlyArray<CookieBannerBodyResourcesBlockType>;\n  readonly inline: ReadonlyArray<CookieBannerBodyResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<CookieBannerBodyResourcesHyperlinkType>;\n};\n\nexport type CookieBannerBodyResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'CookieBannerBodyResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type CookieBannerBodyResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'CookieBannerBodyResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type CookieBannerBodyResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'CookieBannerBodyResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type VideoCollectionType = {\n  readonly __typename?: 'VideoCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<VideoType>>;\n};\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/video) */\nexport type VideoType = EntryType & _NodeType & {\n  readonly __typename?: 'Video';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<VideoLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly contentfulDescription: Maybe<Scalars['String']['output']>;\n  readonly media: Maybe<AssetType>;\n  readonly thumbnailMedia: Maybe<AssetType>;\n  readonly autoPlay: Maybe<Scalars['Boolean']['output']>;\n  readonly wrap: Maybe<Scalars['String']['output']>;\n  readonly captions: Maybe<AssetType>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/video) */\nexport type VideoLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/video) */\nexport type VideoContentfulDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/video) */\nexport type VideoMediaArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/video) */\nexport type VideoThumbnailMediaArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/video) */\nexport type VideoAutoPlayArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/video) */\nexport type VideoWrapArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/video) */\nexport type VideoCaptionsArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type VideoLinkingCollectionsType = {\n  readonly __typename?: 'VideoLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n};\n\n\nexport type VideoLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type AssetCollectionType = {\n  readonly __typename?: 'AssetCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type AssetFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly description_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly description: InputMaybe<Scalars['String']['input']>;\n  readonly description_not: InputMaybe<Scalars['String']['input']>;\n  readonly description_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly description_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly description_contains: InputMaybe<Scalars['String']['input']>;\n  readonly description_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url: InputMaybe<Scalars['String']['input']>;\n  readonly url_not: InputMaybe<Scalars['String']['input']>;\n  readonly url_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly size_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly size: InputMaybe<Scalars['Int']['input']>;\n  readonly size_not: InputMaybe<Scalars['Int']['input']>;\n  readonly size_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['Int']['input']>>>;\n  readonly size_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['Int']['input']>>>;\n  readonly size_gt: InputMaybe<Scalars['Int']['input']>;\n  readonly size_gte: InputMaybe<Scalars['Int']['input']>;\n  readonly size_lt: InputMaybe<Scalars['Int']['input']>;\n  readonly size_lte: InputMaybe<Scalars['Int']['input']>;\n  readonly contentType_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentType: InputMaybe<Scalars['String']['input']>;\n  readonly contentType_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentType_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentType_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentType_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentType_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly fileName_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly fileName: InputMaybe<Scalars['String']['input']>;\n  readonly fileName_not: InputMaybe<Scalars['String']['input']>;\n  readonly fileName_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly fileName_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly fileName_contains: InputMaybe<Scalars['String']['input']>;\n  readonly fileName_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly width_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly width: InputMaybe<Scalars['Int']['input']>;\n  readonly width_not: InputMaybe<Scalars['Int']['input']>;\n  readonly width_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['Int']['input']>>>;\n  readonly width_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['Int']['input']>>>;\n  readonly width_gt: InputMaybe<Scalars['Int']['input']>;\n  readonly width_gte: InputMaybe<Scalars['Int']['input']>;\n  readonly width_lt: InputMaybe<Scalars['Int']['input']>;\n  readonly width_lte: InputMaybe<Scalars['Int']['input']>;\n  readonly height_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly height: InputMaybe<Scalars['Int']['input']>;\n  readonly height_not: InputMaybe<Scalars['Int']['input']>;\n  readonly height_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['Int']['input']>>>;\n  readonly height_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['Int']['input']>>>;\n  readonly height_gt: InputMaybe<Scalars['Int']['input']>;\n  readonly height_gte: InputMaybe<Scalars['Int']['input']>;\n  readonly height_lt: InputMaybe<Scalars['Int']['input']>;\n  readonly height_lte: InputMaybe<Scalars['Int']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<AssetFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<AssetFilterType>>>;\n};\n\nexport enum AssetOrderType {\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SizeAscType = 'size_ASC',\n  SizeDescType = 'size_DESC',\n  ContentTypeAscType = 'contentType_ASC',\n  ContentTypeDescType = 'contentType_DESC',\n  FileNameAscType = 'fileName_ASC',\n  FileNameDescType = 'fileName_DESC',\n  WidthAscType = 'width_ASC',\n  WidthDescType = 'width_DESC',\n  HeightAscType = 'height_ASC',\n  HeightDescType = 'height_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type GlobalNavConfigFilterType = {\n  readonly globalNavGroups: InputMaybe<CfGlobalNavNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly globalNavGroupsCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalNavLabel_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalNavLabel: InputMaybe<Scalars['String']['input']>;\n  readonly globalNavLabel_not: InputMaybe<Scalars['String']['input']>;\n  readonly globalNavLabel_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly globalNavLabel_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly globalNavLabel_contains: InputMaybe<Scalars['String']['input']>;\n  readonly globalNavLabel_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly globalNavButtonAriaLabel_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalNavButtonAriaLabel: InputMaybe<Scalars['String']['input']>;\n  readonly globalNavButtonAriaLabel_not: InputMaybe<Scalars['String']['input']>;\n  readonly globalNavButtonAriaLabel_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly globalNavButtonAriaLabel_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly globalNavButtonAriaLabel_contains: InputMaybe<Scalars['String']['input']>;\n  readonly globalNavButtonAriaLabel_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavConfigFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavConfigFilterType>>>;\n};\n\nexport type CfGlobalNavNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly groupKey: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_not: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly groupKey_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly groupKey_contains: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly highlight_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly itemsCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly primaryHostnameRegex_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly primaryHostnameRegex: InputMaybe<Scalars['String']['input']>;\n  readonly primaryHostnameRegex_not: InputMaybe<Scalars['String']['input']>;\n  readonly primaryHostnameRegex_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly primaryHostnameRegex_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly primaryHostnameRegex_contains: InputMaybe<Scalars['String']['input']>;\n  readonly primaryHostnameRegex_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideHostnameRegex: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_not: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideHostnameRegex_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideHostnameRegex_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfGlobalNavNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfGlobalNavNestedFilterType>>>;\n};\n\nexport enum GlobalNavConfigOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GlobalNavLabelAscType = 'globalNavLabel_ASC',\n  GlobalNavLabelDescType = 'globalNavLabel_DESC',\n  GlobalNavButtonAriaLabelAscType = 'globalNavButtonAriaLabel_ASC',\n  GlobalNavButtonAriaLabelDescType = 'globalNavButtonAriaLabel_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalType = EntryType & _NodeType & {\n  readonly __typename?: 'CookieModal';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<CookieModalLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly contentfulDescription: Maybe<Scalars['String']['output']>;\n  readonly landingScreenTitle: Maybe<Scalars['String']['output']>;\n  readonly content: Maybe<CookieModalContentType>;\n  readonly acceptAllButtonText: Maybe<Scalars['String']['output']>;\n  readonly essentialOnlyButtonText: Maybe<Scalars['String']['output']>;\n  readonly settingsButtonText: Maybe<Scalars['String']['output']>;\n  readonly settingsScreenTitle: Maybe<Scalars['String']['output']>;\n  readonly acceptSelectedButtonText: Maybe<Scalars['String']['output']>;\n  readonly saveChangesText: Maybe<Scalars['String']['output']>;\n  readonly changesSavedText: Maybe<Scalars['String']['output']>;\n  readonly toggleEnabledText: Maybe<Scalars['String']['output']>;\n  readonly toggleDisabledText: Maybe<Scalars['String']['output']>;\n  readonly cookieCategoriesCollection: Maybe<CookieModalCookieCategoriesCollectionType>;\n  readonly gpcLocations: Maybe<ReadonlyArray<Maybe<Scalars['String']['output']>>>;\n  readonly enableCookieDeletion: Maybe<Scalars['Boolean']['output']>;\n  readonly logCookieDeletion: Maybe<Scalars['Boolean']['output']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalContentfulDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalLandingScreenTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalContentArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalAcceptAllButtonTextArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalEssentialOnlyButtonTextArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalSettingsButtonTextArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalSettingsScreenTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalAcceptSelectedButtonTextArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalSaveChangesTextArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalChangesSavedTextArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalToggleEnabledTextArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalToggleDisabledTextArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalCookieCategoriesCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<CookieCategoryFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<CookieModalCookieCategoriesCollectionOrderType>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalGpcLocationsArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalEnableCookieDeletionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalLogCookieDeletionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type CookieModalLinkingCollectionsType = {\n  readonly __typename?: 'CookieModalLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n};\n\n\nexport type CookieModalLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type CookieModalContentType = {\n  readonly __typename?: 'CookieModalContent';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: CookieModalContentLinksType;\n};\n\nexport type CookieModalContentLinksType = {\n  readonly __typename?: 'CookieModalContentLinks';\n  readonly entries: CookieModalContentEntriesType;\n  readonly assets: CookieModalContentAssetsType;\n  readonly resources: CookieModalContentResourcesType;\n};\n\nexport type CookieModalContentEntriesType = {\n  readonly __typename?: 'CookieModalContentEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type CookieModalContentAssetsType = {\n  readonly __typename?: 'CookieModalContentAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type CookieModalContentResourcesType = {\n  readonly __typename?: 'CookieModalContentResources';\n  readonly block: ReadonlyArray<CookieModalContentResourcesBlockType>;\n  readonly inline: ReadonlyArray<CookieModalContentResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<CookieModalContentResourcesHyperlinkType>;\n};\n\nexport type CookieModalContentResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'CookieModalContentResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type CookieModalContentResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'CookieModalContentResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type CookieModalContentResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'CookieModalContentResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type CookieModalCookieCategoriesCollectionType = {\n  readonly __typename?: 'CookieModalCookieCategoriesCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<CookieCategoryType>>;\n};\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieCategory) */\nexport type CookieCategoryType = EntryType & _NodeType & {\n  readonly __typename?: 'CookieCategory';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<CookieCategoryLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly description: Maybe<CookieCategoryDescriptionType>;\n  readonly categoryCookieName: Maybe<Scalars['String']['output']>;\n  readonly displayMode: Maybe<Scalars['String']['output']>;\n  readonly isEssential: Maybe<Scalars['Boolean']['output']>;\n  readonly enableToggle: Maybe<Scalars['Boolean']['output']>;\n  readonly cookiesCollection: Maybe<CookieCategoryCookiesCollectionType>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieCategory) */\nexport type CookieCategoryLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieCategory) */\nexport type CookieCategoryTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieCategory) */\nexport type CookieCategoryDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieCategory) */\nexport type CookieCategoryCategoryCookieNameArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieCategory) */\nexport type CookieCategoryDisplayModeArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieCategory) */\nexport type CookieCategoryIsEssentialArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieCategory) */\nexport type CookieCategoryEnableToggleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieCategory) */\nexport type CookieCategoryCookiesCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<TrackingCookieFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<CookieCategoryCookiesCollectionOrderType>>>;\n};\n\nexport type CookieCategoryLinkingCollectionsType = {\n  readonly __typename?: 'CookieCategoryLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly cookieModalCollection: Maybe<CookieModalCollectionType>;\n};\n\n\nexport type CookieCategoryLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type CookieCategoryLinkingCollectionsCookieModalCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<CookieCategoryLinkingCollectionsCookieModalCollectionOrderType>>>;\n};\n\nexport type CookieModalCollectionType = {\n  readonly __typename?: 'CookieModalCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<CookieModalType>>;\n};\n\nexport enum CookieCategoryLinkingCollectionsCookieModalCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  LandingScreenTitleAscType = 'landingScreenTitle_ASC',\n  LandingScreenTitleDescType = 'landingScreenTitle_DESC',\n  AcceptAllButtonTextAscType = 'acceptAllButtonText_ASC',\n  AcceptAllButtonTextDescType = 'acceptAllButtonText_DESC',\n  EssentialOnlyButtonTextAscType = 'essentialOnlyButtonText_ASC',\n  EssentialOnlyButtonTextDescType = 'essentialOnlyButtonText_DESC',\n  SettingsButtonTextAscType = 'settingsButtonText_ASC',\n  SettingsButtonTextDescType = 'settingsButtonText_DESC',\n  SettingsScreenTitleAscType = 'settingsScreenTitle_ASC',\n  SettingsScreenTitleDescType = 'settingsScreenTitle_DESC',\n  AcceptSelectedButtonTextAscType = 'acceptSelectedButtonText_ASC',\n  AcceptSelectedButtonTextDescType = 'acceptSelectedButtonText_DESC',\n  SaveChangesTextAscType = 'saveChangesText_ASC',\n  SaveChangesTextDescType = 'saveChangesText_DESC',\n  ChangesSavedTextAscType = 'changesSavedText_ASC',\n  ChangesSavedTextDescType = 'changesSavedText_DESC',\n  ToggleEnabledTextAscType = 'toggleEnabledText_ASC',\n  ToggleEnabledTextDescType = 'toggleEnabledText_DESC',\n  ToggleDisabledTextAscType = 'toggleDisabledText_ASC',\n  ToggleDisabledTextDescType = 'toggleDisabledText_DESC',\n  EnableCookieDeletionAscType = 'enableCookieDeletion_ASC',\n  EnableCookieDeletionDescType = 'enableCookieDeletion_DESC',\n  LogCookieDeletionAscType = 'logCookieDeletion_ASC',\n  LogCookieDeletionDescType = 'logCookieDeletion_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type CookieCategoryDescriptionType = {\n  readonly __typename?: 'CookieCategoryDescription';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: CookieCategoryDescriptionLinksType;\n};\n\nexport type CookieCategoryDescriptionLinksType = {\n  readonly __typename?: 'CookieCategoryDescriptionLinks';\n  readonly entries: CookieCategoryDescriptionEntriesType;\n  readonly assets: CookieCategoryDescriptionAssetsType;\n  readonly resources: CookieCategoryDescriptionResourcesType;\n};\n\nexport type CookieCategoryDescriptionEntriesType = {\n  readonly __typename?: 'CookieCategoryDescriptionEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type CookieCategoryDescriptionAssetsType = {\n  readonly __typename?: 'CookieCategoryDescriptionAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type CookieCategoryDescriptionResourcesType = {\n  readonly __typename?: 'CookieCategoryDescriptionResources';\n  readonly block: ReadonlyArray<CookieCategoryDescriptionResourcesBlockType>;\n  readonly inline: ReadonlyArray<CookieCategoryDescriptionResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<CookieCategoryDescriptionResourcesHyperlinkType>;\n};\n\nexport type CookieCategoryDescriptionResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'CookieCategoryDescriptionResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type CookieCategoryDescriptionResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'CookieCategoryDescriptionResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type CookieCategoryDescriptionResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'CookieCategoryDescriptionResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type CookieCategoryCookiesCollectionType = {\n  readonly __typename?: 'CookieCategoryCookiesCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<TrackingCookieType>>;\n};\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookieType = EntryType & _NodeType & {\n  readonly __typename?: 'TrackingCookie';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<TrackingCookieLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly name: Maybe<Scalars['String']['output']>;\n  readonly provider: Maybe<TrackingCookieProviderType>;\n  readonly domains: Maybe<TrackingCookieDomainsType>;\n  readonly purpose: Maybe<TrackingCookiePurposeType>;\n  readonly expiration: Maybe<TrackingCookieExpirationType>;\n  readonly pattern: Maybe<Scalars['String']['output']>;\n  readonly subDomains: Maybe<ReadonlyArray<Maybe<Scalars['String']['output']>>>;\n  readonly path: Maybe<Scalars['String']['output']>;\n  readonly secure: Maybe<Scalars['Boolean']['output']>;\n  readonly sameSite: Maybe<Scalars['String']['output']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookieLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookieNameArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookieProviderArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookieDomainsArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookiePurposeArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookieExpirationArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookiePatternArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookieSubDomainsArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookiePathArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookieSecureArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookieSameSiteArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type TrackingCookieLinkingCollectionsType = {\n  readonly __typename?: 'TrackingCookieLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly cookieCategoryCollection: Maybe<CookieCategoryCollectionType>;\n};\n\n\nexport type TrackingCookieLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type TrackingCookieLinkingCollectionsCookieCategoryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<TrackingCookieLinkingCollectionsCookieCategoryCollectionOrderType>>>;\n};\n\nexport type CookieCategoryCollectionType = {\n  readonly __typename?: 'CookieCategoryCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<CookieCategoryType>>;\n};\n\nexport enum TrackingCookieLinkingCollectionsCookieCategoryCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  CategoryCookieNameAscType = 'categoryCookieName_ASC',\n  CategoryCookieNameDescType = 'categoryCookieName_DESC',\n  DisplayModeAscType = 'displayMode_ASC',\n  DisplayModeDescType = 'displayMode_DESC',\n  IsEssentialAscType = 'isEssential_ASC',\n  IsEssentialDescType = 'isEssential_DESC',\n  EnableToggleAscType = 'enableToggle_ASC',\n  EnableToggleDescType = 'enableToggle_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type TrackingCookieProviderType = {\n  readonly __typename?: 'TrackingCookieProvider';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: TrackingCookieProviderLinksType;\n};\n\nexport type TrackingCookieProviderLinksType = {\n  readonly __typename?: 'TrackingCookieProviderLinks';\n  readonly entries: TrackingCookieProviderEntriesType;\n  readonly assets: TrackingCookieProviderAssetsType;\n  readonly resources: TrackingCookieProviderResourcesType;\n};\n\nexport type TrackingCookieProviderEntriesType = {\n  readonly __typename?: 'TrackingCookieProviderEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type TrackingCookieProviderAssetsType = {\n  readonly __typename?: 'TrackingCookieProviderAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type TrackingCookieProviderResourcesType = {\n  readonly __typename?: 'TrackingCookieProviderResources';\n  readonly block: ReadonlyArray<TrackingCookieProviderResourcesBlockType>;\n  readonly inline: ReadonlyArray<TrackingCookieProviderResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<TrackingCookieProviderResourcesHyperlinkType>;\n};\n\nexport type TrackingCookieProviderResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookieProviderResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookieProviderResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookieProviderResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookieProviderResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookieProviderResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookieDomainsType = {\n  readonly __typename?: 'TrackingCookieDomains';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: TrackingCookieDomainsLinksType;\n};\n\nexport type TrackingCookieDomainsLinksType = {\n  readonly __typename?: 'TrackingCookieDomainsLinks';\n  readonly entries: TrackingCookieDomainsEntriesType;\n  readonly assets: TrackingCookieDomainsAssetsType;\n  readonly resources: TrackingCookieDomainsResourcesType;\n};\n\nexport type TrackingCookieDomainsEntriesType = {\n  readonly __typename?: 'TrackingCookieDomainsEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type TrackingCookieDomainsAssetsType = {\n  readonly __typename?: 'TrackingCookieDomainsAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type TrackingCookieDomainsResourcesType = {\n  readonly __typename?: 'TrackingCookieDomainsResources';\n  readonly block: ReadonlyArray<TrackingCookieDomainsResourcesBlockType>;\n  readonly inline: ReadonlyArray<TrackingCookieDomainsResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<TrackingCookieDomainsResourcesHyperlinkType>;\n};\n\nexport type TrackingCookieDomainsResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookieDomainsResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookieDomainsResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookieDomainsResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookieDomainsResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookieDomainsResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookiePurposeType = {\n  readonly __typename?: 'TrackingCookiePurpose';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: TrackingCookiePurposeLinksType;\n};\n\nexport type TrackingCookiePurposeLinksType = {\n  readonly __typename?: 'TrackingCookiePurposeLinks';\n  readonly entries: TrackingCookiePurposeEntriesType;\n  readonly assets: TrackingCookiePurposeAssetsType;\n  readonly resources: TrackingCookiePurposeResourcesType;\n};\n\nexport type TrackingCookiePurposeEntriesType = {\n  readonly __typename?: 'TrackingCookiePurposeEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type TrackingCookiePurposeAssetsType = {\n  readonly __typename?: 'TrackingCookiePurposeAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type TrackingCookiePurposeResourcesType = {\n  readonly __typename?: 'TrackingCookiePurposeResources';\n  readonly block: ReadonlyArray<TrackingCookiePurposeResourcesBlockType>;\n  readonly inline: ReadonlyArray<TrackingCookiePurposeResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<TrackingCookiePurposeResourcesHyperlinkType>;\n};\n\nexport type TrackingCookiePurposeResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookiePurposeResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookiePurposeResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookiePurposeResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookiePurposeResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookiePurposeResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookieExpirationType = {\n  readonly __typename?: 'TrackingCookieExpiration';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: TrackingCookieExpirationLinksType;\n};\n\nexport type TrackingCookieExpirationLinksType = {\n  readonly __typename?: 'TrackingCookieExpirationLinks';\n  readonly entries: TrackingCookieExpirationEntriesType;\n  readonly assets: TrackingCookieExpirationAssetsType;\n  readonly resources: TrackingCookieExpirationResourcesType;\n};\n\nexport type TrackingCookieExpirationEntriesType = {\n  readonly __typename?: 'TrackingCookieExpirationEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type TrackingCookieExpirationAssetsType = {\n  readonly __typename?: 'TrackingCookieExpirationAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type TrackingCookieExpirationResourcesType = {\n  readonly __typename?: 'TrackingCookieExpirationResources';\n  readonly block: ReadonlyArray<TrackingCookieExpirationResourcesBlockType>;\n  readonly inline: ReadonlyArray<TrackingCookieExpirationResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<TrackingCookieExpirationResourcesHyperlinkType>;\n};\n\nexport type TrackingCookieExpirationResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookieExpirationResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookieExpirationResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookieExpirationResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookieExpirationResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookieExpirationResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookieFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly name_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly name: InputMaybe<Scalars['String']['input']>;\n  readonly name_not: InputMaybe<Scalars['String']['input']>;\n  readonly name_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly name_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly name_contains: InputMaybe<Scalars['String']['input']>;\n  readonly name_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly provider_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly provider_contains: InputMaybe<Scalars['String']['input']>;\n  readonly provider_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly domains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly domains_contains: InputMaybe<Scalars['String']['input']>;\n  readonly domains_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly purpose_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly purpose_contains: InputMaybe<Scalars['String']['input']>;\n  readonly purpose_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly expiration_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly expiration_contains: InputMaybe<Scalars['String']['input']>;\n  readonly expiration_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly pattern_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly pattern: InputMaybe<Scalars['String']['input']>;\n  readonly pattern_not: InputMaybe<Scalars['String']['input']>;\n  readonly pattern_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly pattern_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly pattern_contains: InputMaybe<Scalars['String']['input']>;\n  readonly pattern_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly subDomains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly subDomains_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly subDomains_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly subDomains_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly path_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly path: InputMaybe<Scalars['String']['input']>;\n  readonly path_not: InputMaybe<Scalars['String']['input']>;\n  readonly path_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly path_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly path_contains: InputMaybe<Scalars['String']['input']>;\n  readonly path_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly secure_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly secure: InputMaybe<Scalars['Boolean']['input']>;\n  readonly secure_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly sameSite_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly sameSite: InputMaybe<Scalars['String']['input']>;\n  readonly sameSite_not: InputMaybe<Scalars['String']['input']>;\n  readonly sameSite_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly sameSite_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly sameSite_contains: InputMaybe<Scalars['String']['input']>;\n  readonly sameSite_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<TrackingCookieFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<TrackingCookieFilterType>>>;\n};\n\nexport enum CookieCategoryCookiesCollectionOrderType {\n  NameAscType = 'name_ASC',\n  NameDescType = 'name_DESC',\n  PatternAscType = 'pattern_ASC',\n  PatternDescType = 'pattern_DESC',\n  PathAscType = 'path_ASC',\n  PathDescType = 'path_DESC',\n  SecureAscType = 'secure_ASC',\n  SecureDescType = 'secure_DESC',\n  SameSiteAscType = 'sameSite_ASC',\n  SameSiteDescType = 'sameSite_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type CookieCategoryFilterType = {\n  readonly cookies: InputMaybe<CfTrackingCookieNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly description_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly description_contains: InputMaybe<Scalars['String']['input']>;\n  readonly description_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly categoryCookieName_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly categoryCookieName: InputMaybe<Scalars['String']['input']>;\n  readonly categoryCookieName_not: InputMaybe<Scalars['String']['input']>;\n  readonly categoryCookieName_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly categoryCookieName_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly categoryCookieName_contains: InputMaybe<Scalars['String']['input']>;\n  readonly categoryCookieName_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly displayMode_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly displayMode: InputMaybe<Scalars['String']['input']>;\n  readonly displayMode_not: InputMaybe<Scalars['String']['input']>;\n  readonly displayMode_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly displayMode_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly displayMode_contains: InputMaybe<Scalars['String']['input']>;\n  readonly displayMode_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly isEssential_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly isEssential: InputMaybe<Scalars['Boolean']['input']>;\n  readonly isEssential_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly enableToggle_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly enableToggle: InputMaybe<Scalars['Boolean']['input']>;\n  readonly enableToggle_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cookiesCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CookieCategoryFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CookieCategoryFilterType>>>;\n};\n\nexport type CfTrackingCookieNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly name_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly name: InputMaybe<Scalars['String']['input']>;\n  readonly name_not: InputMaybe<Scalars['String']['input']>;\n  readonly name_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly name_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly name_contains: InputMaybe<Scalars['String']['input']>;\n  readonly name_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly provider_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly provider_contains: InputMaybe<Scalars['String']['input']>;\n  readonly provider_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly domains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly domains_contains: InputMaybe<Scalars['String']['input']>;\n  readonly domains_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly purpose_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly purpose_contains: InputMaybe<Scalars['String']['input']>;\n  readonly purpose_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly expiration_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly expiration_contains: InputMaybe<Scalars['String']['input']>;\n  readonly expiration_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly pattern_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly pattern: InputMaybe<Scalars['String']['input']>;\n  readonly pattern_not: InputMaybe<Scalars['String']['input']>;\n  readonly pattern_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly pattern_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly pattern_contains: InputMaybe<Scalars['String']['input']>;\n  readonly pattern_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly subDomains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly subDomains_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly subDomains_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly subDomains_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly path_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly path: InputMaybe<Scalars['String']['input']>;\n  readonly path_not: InputMaybe<Scalars['String']['input']>;\n  readonly path_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly path_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly path_contains: InputMaybe<Scalars['String']['input']>;\n  readonly path_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly secure_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly secure: InputMaybe<Scalars['Boolean']['input']>;\n  readonly secure_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly sameSite_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly sameSite: InputMaybe<Scalars['String']['input']>;\n  readonly sameSite_not: InputMaybe<Scalars['String']['input']>;\n  readonly sameSite_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly sameSite_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly sameSite_contains: InputMaybe<Scalars['String']['input']>;\n  readonly sameSite_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfTrackingCookieNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfTrackingCookieNestedFilterType>>>;\n};\n\nexport enum CookieModalCookieCategoriesCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  CategoryCookieNameAscType = 'categoryCookieName_ASC',\n  CategoryCookieNameDescType = 'categoryCookieName_DESC',\n  DisplayModeAscType = 'displayMode_ASC',\n  DisplayModeDescType = 'displayMode_DESC',\n  IsEssentialAscType = 'isEssential_ASC',\n  IsEssentialDescType = 'isEssential_DESC',\n  EnableToggleAscType = 'enableToggle_ASC',\n  EnableToggleDescType = 'enableToggle_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type CookieModalFilterType = {\n  readonly cookieCategories: InputMaybe<CfCookieCategoryNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly landingScreenTitle_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly landingScreenTitle: InputMaybe<Scalars['String']['input']>;\n  readonly landingScreenTitle_not: InputMaybe<Scalars['String']['input']>;\n  readonly landingScreenTitle_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly landingScreenTitle_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly landingScreenTitle_contains: InputMaybe<Scalars['String']['input']>;\n  readonly landingScreenTitle_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly content_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly content_contains: InputMaybe<Scalars['String']['input']>;\n  readonly content_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly acceptAllButtonText_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly acceptAllButtonText: InputMaybe<Scalars['String']['input']>;\n  readonly acceptAllButtonText_not: InputMaybe<Scalars['String']['input']>;\n  readonly acceptAllButtonText_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly acceptAllButtonText_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly acceptAllButtonText_contains: InputMaybe<Scalars['String']['input']>;\n  readonly acceptAllButtonText_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly essentialOnlyButtonText_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly essentialOnlyButtonText: InputMaybe<Scalars['String']['input']>;\n  readonly essentialOnlyButtonText_not: InputMaybe<Scalars['String']['input']>;\n  readonly essentialOnlyButtonText_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly essentialOnlyButtonText_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly essentialOnlyButtonText_contains: InputMaybe<Scalars['String']['input']>;\n  readonly essentialOnlyButtonText_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly settingsButtonText_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly settingsButtonText: InputMaybe<Scalars['String']['input']>;\n  readonly settingsButtonText_not: InputMaybe<Scalars['String']['input']>;\n  readonly settingsButtonText_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly settingsButtonText_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly settingsButtonText_contains: InputMaybe<Scalars['String']['input']>;\n  readonly settingsButtonText_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly settingsScreenTitle_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly settingsScreenTitle: InputMaybe<Scalars['String']['input']>;\n  readonly settingsScreenTitle_not: InputMaybe<Scalars['String']['input']>;\n  readonly settingsScreenTitle_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly settingsScreenTitle_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly settingsScreenTitle_contains: InputMaybe<Scalars['String']['input']>;\n  readonly settingsScreenTitle_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly acceptSelectedButtonText_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly acceptSelectedButtonText: InputMaybe<Scalars['String']['input']>;\n  readonly acceptSelectedButtonText_not: InputMaybe<Scalars['String']['input']>;\n  readonly acceptSelectedButtonText_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly acceptSelectedButtonText_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly acceptSelectedButtonText_contains: InputMaybe<Scalars['String']['input']>;\n  readonly acceptSelectedButtonText_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly saveChangesText_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly saveChangesText: InputMaybe<Scalars['String']['input']>;\n  readonly saveChangesText_not: InputMaybe<Scalars['String']['input']>;\n  readonly saveChangesText_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly saveChangesText_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly saveChangesText_contains: InputMaybe<Scalars['String']['input']>;\n  readonly saveChangesText_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly changesSavedText_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly changesSavedText: InputMaybe<Scalars['String']['input']>;\n  readonly changesSavedText_not: InputMaybe<Scalars['String']['input']>;\n  readonly changesSavedText_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly changesSavedText_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly changesSavedText_contains: InputMaybe<Scalars['String']['input']>;\n  readonly changesSavedText_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly toggleEnabledText_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly toggleEnabledText: InputMaybe<Scalars['String']['input']>;\n  readonly toggleEnabledText_not: InputMaybe<Scalars['String']['input']>;\n  readonly toggleEnabledText_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly toggleEnabledText_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly toggleEnabledText_contains: InputMaybe<Scalars['String']['input']>;\n  readonly toggleEnabledText_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly toggleDisabledText_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly toggleDisabledText: InputMaybe<Scalars['String']['input']>;\n  readonly toggleDisabledText_not: InputMaybe<Scalars['String']['input']>;\n  readonly toggleDisabledText_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly toggleDisabledText_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly toggleDisabledText_contains: InputMaybe<Scalars['String']['input']>;\n  readonly toggleDisabledText_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cookieCategoriesCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly gpcLocations_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly gpcLocations_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly gpcLocations_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly gpcLocations_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly enableCookieDeletion_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly enableCookieDeletion: InputMaybe<Scalars['Boolean']['input']>;\n  readonly enableCookieDeletion_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly logCookieDeletion_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly logCookieDeletion: InputMaybe<Scalars['Boolean']['input']>;\n  readonly logCookieDeletion_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CookieModalFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CookieModalFilterType>>>;\n};\n\nexport type CfCookieCategoryNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly description_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly description_contains: InputMaybe<Scalars['String']['input']>;\n  readonly description_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly categoryCookieName_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly categoryCookieName: InputMaybe<Scalars['String']['input']>;\n  readonly categoryCookieName_not: InputMaybe<Scalars['String']['input']>;\n  readonly categoryCookieName_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly categoryCookieName_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly categoryCookieName_contains: InputMaybe<Scalars['String']['input']>;\n  readonly categoryCookieName_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly displayMode_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly displayMode: InputMaybe<Scalars['String']['input']>;\n  readonly displayMode_not: InputMaybe<Scalars['String']['input']>;\n  readonly displayMode_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly displayMode_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly displayMode_contains: InputMaybe<Scalars['String']['input']>;\n  readonly displayMode_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly isEssential_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly isEssential: InputMaybe<Scalars['Boolean']['input']>;\n  readonly isEssential_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly enableToggle_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly enableToggle: InputMaybe<Scalars['Boolean']['input']>;\n  readonly enableToggle_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cookiesCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfCookieCategoryNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfCookieCategoryNestedFilterType>>>;\n};\n\nexport enum CookieModalOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  LandingScreenTitleAscType = 'landingScreenTitle_ASC',\n  LandingScreenTitleDescType = 'landingScreenTitle_DESC',\n  AcceptAllButtonTextAscType = 'acceptAllButtonText_ASC',\n  AcceptAllButtonTextDescType = 'acceptAllButtonText_DESC',\n  EssentialOnlyButtonTextAscType = 'essentialOnlyButtonText_ASC',\n  EssentialOnlyButtonTextDescType = 'essentialOnlyButtonText_DESC',\n  SettingsButtonTextAscType = 'settingsButtonText_ASC',\n  SettingsButtonTextDescType = 'settingsButtonText_DESC',\n  SettingsScreenTitleAscType = 'settingsScreenTitle_ASC',\n  SettingsScreenTitleDescType = 'settingsScreenTitle_DESC',\n  AcceptSelectedButtonTextAscType = 'acceptSelectedButtonText_ASC',\n  AcceptSelectedButtonTextDescType = 'acceptSelectedButtonText_DESC',\n  SaveChangesTextAscType = 'saveChangesText_ASC',\n  SaveChangesTextDescType = 'saveChangesText_DESC',\n  ChangesSavedTextAscType = 'changesSavedText_ASC',\n  ChangesSavedTextDescType = 'changesSavedText_DESC',\n  ToggleEnabledTextAscType = 'toggleEnabledText_ASC',\n  ToggleEnabledTextDescType = 'toggleEnabledText_DESC',\n  ToggleDisabledTextAscType = 'toggleDisabledText_ASC',\n  ToggleDisabledTextDescType = 'toggleDisabledText_DESC',\n  EnableCookieDeletionAscType = 'enableCookieDeletion_ASC',\n  EnableCookieDeletionDescType = 'enableCookieDeletion_DESC',\n  LogCookieDeletionAscType = 'logCookieDeletion_ASC',\n  LogCookieDeletionDescType = 'logCookieDeletion_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type TrackingCookieCollectionType = {\n  readonly __typename?: 'TrackingCookieCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<TrackingCookieType>>;\n};\n\nexport enum TrackingCookieOrderType {\n  NameAscType = 'name_ASC',\n  NameDescType = 'name_DESC',\n  PatternAscType = 'pattern_ASC',\n  PatternDescType = 'pattern_DESC',\n  PathAscType = 'path_ASC',\n  PathDescType = 'path_DESC',\n  SecureAscType = 'secure_ASC',\n  SecureDescType = 'secure_DESC',\n  SameSiteAscType = 'sameSite_ASC',\n  SameSiteDescType = 'sameSite_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum ImageOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  WrapAscType = 'wrap_ASC',\n  WrapDescType = 'wrap_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum GlobalNavHighlightOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  CardTitleV2AscType = 'cardTitleV2_ASC',\n  CardTitleV2DescType = 'cardTitleV2_DESC',\n  CardBodyV2AscType = 'cardBodyV2_ASC',\n  CardBodyV2DescType = 'cardBodyV2_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum GlobalNavOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  PrimaryHostnameRegexAscType = 'primaryHostnameRegex_ASC',\n  PrimaryHostnameRegexDescType = 'primaryHostnameRegex_DESC',\n  HideHostnameRegexAscType = 'hideHostnameRegex_ASC',\n  HideHostnameRegexDescType = 'hideHostnameRegex_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum CookieCategoryOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  CategoryCookieNameAscType = 'categoryCookieName_ASC',\n  CategoryCookieNameDescType = 'categoryCookieName_DESC',\n  DisplayModeAscType = 'displayMode_ASC',\n  DisplayModeDescType = 'displayMode_DESC',\n  IsEssentialAscType = 'isEssential_ASC',\n  IsEssentialDescType = 'isEssential_DESC',\n  EnableToggleAscType = 'enableToggle_ASC',\n  EnableToggleDescType = 'enableToggle_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterV3FilterType = {\n  readonly columns: InputMaybe<CfFooterGroupNestedFilterType>;\n  readonly bar: InputMaybe<CfFooterGroupNestedFilterType>;\n  readonly logo: InputMaybe<CfImageNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly columnsCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly barCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly logo_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url: InputMaybe<Scalars['String']['input']>;\n  readonly url_not: InputMaybe<Scalars['String']['input']>;\n  readonly url_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideLogoOnDomains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideLogoOnDomains_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideLogoOnDomains_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideLogoOnDomains_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<FooterV3FilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<FooterV3FilterType>>>;\n};\n\nexport type CfFooterGroupNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly groupKey: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_not: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly groupKey_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly groupKey_contains: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly itemsCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly analytics_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideOnDomains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideOnDomains_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfFooterGroupNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfFooterGroupNestedFilterType>>>;\n};\n\nexport type CfImageNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly media_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly wrap_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly wrap: InputMaybe<Scalars['String']['input']>;\n  readonly wrap_not: InputMaybe<Scalars['String']['input']>;\n  readonly wrap_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly wrap_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly wrap_contains: InputMaybe<Scalars['String']['input']>;\n  readonly wrap_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfImageNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfImageNestedFilterType>>>;\n};\n\nexport enum FooterV3OrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterItemV3FilterType = {\n  readonly analytics: InputMaybe<CfAnalyticsNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url: InputMaybe<Scalars['String']['input']>;\n  readonly url_not: InputMaybe<Scalars['String']['input']>;\n  readonly url_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly analytics_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideOnDomains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideOnDomains_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<FooterItemV3FilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<FooterItemV3FilterType>>>;\n};\n\nexport enum FooterItemV3OrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterLocaleDropdownCollectionType = {\n  readonly __typename?: 'FooterLocaleDropdownCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterLocaleDropdownType>>;\n};\n\nexport type FooterLocaleDropdownFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideOnDomains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideOnDomains_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<FooterLocaleDropdownFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<FooterLocaleDropdownFilterType>>>;\n};\n\nexport enum FooterLocaleDropdownOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterCookiesSettingsLinkFilterType = {\n  readonly analytics: InputMaybe<CfAnalyticsNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideOnDomains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideOnDomains_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly analytics_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<FooterCookiesSettingsLinkFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<FooterCookiesSettingsLinkFilterType>>>;\n};\n\nexport enum FooterCookiesSettingsLinkOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum FooterGroupOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type CookieBannerFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly leftMedia_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly rightMedia_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly body_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly body_contains: InputMaybe<Scalars['String']['input']>;\n  readonly body_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly acceptCookiesButton_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly acceptCookiesButton: InputMaybe<Scalars['String']['input']>;\n  readonly acceptCookiesButton_not: InputMaybe<Scalars['String']['input']>;\n  readonly acceptCookiesButton_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly acceptCookiesButton_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly acceptCookiesButton_contains: InputMaybe<Scalars['String']['input']>;\n  readonly acceptCookiesButton_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cookieSettingsButtonText_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cookieSettingsButtonText: InputMaybe<Scalars['String']['input']>;\n  readonly cookieSettingsButtonText_not: InputMaybe<Scalars['String']['input']>;\n  readonly cookieSettingsButtonText_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly cookieSettingsButtonText_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly cookieSettingsButtonText_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cookieSettingsButtonText_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CookieBannerFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CookieBannerFilterType>>>;\n};\n\nexport enum CookieBannerOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  AcceptCookiesButtonAscType = 'acceptCookiesButton_ASC',\n  AcceptCookiesButtonDescType = 'acceptCookiesButton_DESC',\n  CookieSettingsButtonTextAscType = 'cookieSettingsButtonText_ASC',\n  CookieSettingsButtonTextDescType = 'cookieSettingsButtonText_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterFilterType = {\n  readonly footerColumn: InputMaybe<CfFooterItemNestedFilterType>;\n  readonly footerBar: InputMaybe<CfFooterItemNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly footerColumnCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly footerBarCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalOnly_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalOnly: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalOnly_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<FooterFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<FooterFilterType>>>;\n};\n\nexport enum FooterOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GlobalOnlyAscType = 'globalOnly_ASC',\n  GlobalOnlyDescType = 'globalOnly_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type AnalyticsCollectionType = {\n  readonly __typename?: 'AnalyticsCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<AnalyticsType>>;\n};\n\nexport enum AnalyticsOrderType {\n  LabelAscType = 'label_ASC',\n  LabelDescType = 'label_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum GlobalNavItemOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  HideHostnameRegexAscType = 'hideHostnameRegex_ASC',\n  HideHostnameRegexDescType = 'hideHostnameRegex_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type ButtonFilterType = {\n  readonly image: InputMaybe<CfImageNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url: InputMaybe<Scalars['String']['input']>;\n  readonly url_not: InputMaybe<Scalars['String']['input']>;\n  readonly url_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly size_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly size: InputMaybe<Scalars['String']['input']>;\n  readonly size_not: InputMaybe<Scalars['String']['input']>;\n  readonly size_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly size_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly size_contains: InputMaybe<Scalars['String']['input']>;\n  readonly size_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly theme_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly theme: InputMaybe<Scalars['String']['input']>;\n  readonly theme_not: InputMaybe<Scalars['String']['input']>;\n  readonly theme_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly theme_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly theme_contains: InputMaybe<Scalars['String']['input']>;\n  readonly theme_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly buttonType_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly buttonType: InputMaybe<Scalars['String']['input']>;\n  readonly buttonType_not: InputMaybe<Scalars['String']['input']>;\n  readonly buttonType_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly buttonType_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly buttonType_contains: InputMaybe<Scalars['String']['input']>;\n  readonly buttonType_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly image_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly iconName_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly iconName: InputMaybe<Scalars['String']['input']>;\n  readonly iconName_not: InputMaybe<Scalars['String']['input']>;\n  readonly iconName_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly iconName_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly iconName_contains: InputMaybe<Scalars['String']['input']>;\n  readonly iconName_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<ButtonFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<ButtonFilterType>>>;\n};\n\nexport enum ButtonOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SizeAscType = 'size_ASC',\n  SizeDescType = 'size_DESC',\n  ThemeAscType = 'theme_ASC',\n  ThemeDescType = 'theme_DESC',\n  ButtonTypeAscType = 'buttonType_ASC',\n  ButtonTypeDescType = 'buttonType_DESC',\n  IconNameAscType = 'iconName_ASC',\n  IconNameDescType = 'iconName_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum CallToActionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\n/** Common strings used across components with or without dynamic content. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/message) */\nexport type MessageType = EntryType & _NodeType & {\n  readonly __typename?: 'Message';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<MessageLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly key: Maybe<Scalars['String']['output']>;\n  readonly value: Maybe<Scalars['String']['output']>;\n};\n\n\n/** Common strings used across components with or without dynamic content. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/message) */\nexport type MessageLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** Common strings used across components with or without dynamic content. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/message) */\nexport type MessageTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Common strings used across components with or without dynamic content. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/message) */\nexport type MessageKeyArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Common strings used across components with or without dynamic content. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/message) */\nexport type MessageValueArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type MessageLinkingCollectionsType = {\n  readonly __typename?: 'MessageLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n};\n\n\nexport type MessageLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type MessageCollectionType = {\n  readonly __typename?: 'MessageCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<MessageType>>;\n};\n\nexport type MessageFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly key_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly key: InputMaybe<Scalars['String']['input']>;\n  readonly key_not: InputMaybe<Scalars['String']['input']>;\n  readonly key_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly key_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly key_contains: InputMaybe<Scalars['String']['input']>;\n  readonly key_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly value_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly value: InputMaybe<Scalars['String']['input']>;\n  readonly value_not: InputMaybe<Scalars['String']['input']>;\n  readonly value_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly value_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly value_contains: InputMaybe<Scalars['String']['input']>;\n  readonly value_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<MessageFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<MessageFilterType>>>;\n};\n\nexport enum MessageOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  KeyAscType = 'key_ASC',\n  KeyDescType = 'key_DESC',\n  ValueAscType = 'value_ASC',\n  ValueDescType = 'value_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\n/** Common strings used across components with or without dynamic content. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/legalMessage) */\nexport type LegalMessageType = EntryType & _NodeType & {\n  readonly __typename?: 'LegalMessage';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<LegalMessageLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly key: Maybe<Scalars['String']['output']>;\n  readonly value: Maybe<Scalars['String']['output']>;\n};\n\n\n/** Common strings used across components with or without dynamic content. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/legalMessage) */\nexport type LegalMessageLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** Common strings used across components with or without dynamic content. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/legalMessage) */\nexport type LegalMessageKeyArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Common strings used across components with or without dynamic content. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/legalMessage) */\nexport type LegalMessageValueArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type LegalMessageLinkingCollectionsType = {\n  readonly __typename?: 'LegalMessageLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n};\n\n\nexport type LegalMessageLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type LegalMessageCollectionType = {\n  readonly __typename?: 'LegalMessageCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<LegalMessageType>>;\n};\n\nexport type LegalMessageFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly key_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly key: InputMaybe<Scalars['String']['input']>;\n  readonly key_not: InputMaybe<Scalars['String']['input']>;\n  readonly key_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly key_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly key_contains: InputMaybe<Scalars['String']['input']>;\n  readonly key_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly value_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly value: InputMaybe<Scalars['String']['input']>;\n  readonly value_not: InputMaybe<Scalars['String']['input']>;\n  readonly value_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly value_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly value_contains: InputMaybe<Scalars['String']['input']>;\n  readonly value_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<LegalMessageFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<LegalMessageFilterType>>>;\n};\n\nexport enum LegalMessageOrderType {\n  KeyAscType = 'key_ASC',\n  KeyDescType = 'key_DESC',\n  ValueAscType = 'value_ASC',\n  ValueDescType = 'value_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type VideoFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly media_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly thumbnailMedia_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly autoPlay_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly autoPlay: InputMaybe<Scalars['Boolean']['input']>;\n  readonly autoPlay_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly wrap_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly wrap: InputMaybe<Scalars['String']['input']>;\n  readonly wrap_not: InputMaybe<Scalars['String']['input']>;\n  readonly wrap_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly wrap_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly wrap_contains: InputMaybe<Scalars['String']['input']>;\n  readonly wrap_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly captions_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<VideoFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<VideoFilterType>>>;\n};\n\nexport enum VideoOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  AutoPlayAscType = 'autoPlay_ASC',\n  AutoPlayDescType = 'autoPlay_DESC',\n  WrapAscType = 'wrap_ASC',\n  WrapDescType = 'wrap_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum FooterItemOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  GlobalOnlyAscType = 'globalOnly_ASC',\n  GlobalOnlyDescType = 'globalOnly_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type EntryFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<EntryFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<EntryFilterType>>>;\n};\n\nexport enum EntryOrderType {\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type CookieModalQueryVariablesType = Exact<{\n  preview: Scalars['Boolean']['input'];\n  locale: Scalars['String']['input'];\n}>;\n\n\nexport type CookieModalQueryType = { readonly __typename?: 'Query', readonly cookieModalCollection: { readonly __typename?: 'CookieModalCollection', readonly items: ReadonlyArray<{ readonly __typename?: 'CookieModal', readonly landingScreenTitle: string, readonly acceptAllButtonText: string, readonly essentialOnlyButtonText: string, readonly settingsButtonText: string, readonly settingsScreenTitle: string, readonly acceptSelectedButtonText: string, readonly saveChangesText: string, readonly changesSavedText: string, readonly toggleEnabledText: string, readonly toggleDisabledText: string, readonly gpcLocations: ReadonlyArray<string>, readonly enableCookieDeletion: boolean, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly content: { readonly __typename?: 'CookieModalContent', readonly json: Record<string, unknown> }, readonly cookieCategoriesCollection: { readonly __typename?: 'CookieModalCookieCategoriesCollection', readonly items: ReadonlyArray<{ readonly __typename?: 'CookieCategory', readonly title: string, readonly categoryCookieName: string, readonly displayMode: string, readonly isEssential: boolean, readonly enableToggle: boolean, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly description: { readonly __typename?: 'CookieCategoryDescription', readonly json: Record<string, unknown> }, readonly cookiesCollection: { readonly __typename?: 'CookieCategoryCookiesCollection', readonly items: ReadonlyArray<{ readonly __typename?: 'TrackingCookie', readonly name: string, readonly pattern: string, readonly subDomains: ReadonlyArray<string>, readonly path: string, readonly secure: boolean, readonly sameSite: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly provider: { readonly __typename?: 'TrackingCookieProvider', readonly json: Record<string, unknown> }, readonly domains: { readonly __typename?: 'TrackingCookieDomains', readonly json: Record<string, unknown> }, readonly purpose: { readonly __typename?: 'TrackingCookiePurpose', readonly json: Record<string, unknown> }, readonly expiration: { readonly __typename?: 'TrackingCookieExpiration', readonly json: Record<string, unknown> } }> } }> } }> } };\n\nexport type CookieModalAllType = { readonly __typename?: 'CookieModal', readonly landingScreenTitle: string, readonly acceptAllButtonText: string, readonly essentialOnlyButtonText: string, readonly settingsButtonText: string, readonly settingsScreenTitle: string, readonly acceptSelectedButtonText: string, readonly saveChangesText: string, readonly changesSavedText: string, readonly toggleEnabledText: string, readonly toggleDisabledText: string, readonly gpcLocations: ReadonlyArray<string>, readonly enableCookieDeletion: boolean, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly content: { readonly __typename?: 'CookieModalContent', readonly json: Record<string, unknown> }, readonly cookieCategoriesCollection: { readonly __typename?: 'CookieModalCookieCategoriesCollection', readonly items: ReadonlyArray<{ readonly __typename?: 'CookieCategory', readonly title: string, readonly categoryCookieName: string, readonly displayMode: string, readonly isEssential: boolean, readonly enableToggle: boolean, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly description: { readonly __typename?: 'CookieCategoryDescription', readonly json: Record<string, unknown> }, readonly cookiesCollection: { readonly __typename?: 'CookieCategoryCookiesCollection', readonly items: ReadonlyArray<{ readonly __typename?: 'TrackingCookie', readonly name: string, readonly pattern: string, readonly subDomains: ReadonlyArray<string>, readonly path: string, readonly secure: boolean, readonly sameSite: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly provider: { readonly __typename?: 'TrackingCookieProvider', readonly json: Record<string, unknown> }, readonly domains: { readonly __typename?: 'TrackingCookieDomains', readonly json: Record<string, unknown> }, readonly purpose: { readonly __typename?: 'TrackingCookiePurpose', readonly json: Record<string, unknown> }, readonly expiration: { readonly __typename?: 'TrackingCookieExpiration', readonly json: Record<string, unknown> } }> } }> } };\n\nexport type CookieCategoryAllType = { readonly __typename?: 'CookieCategory', readonly title: string, readonly categoryCookieName: string, readonly displayMode: string, readonly isEssential: boolean, readonly enableToggle: boolean, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly description: { readonly __typename?: 'CookieCategoryDescription', readonly json: Record<string, unknown> }, readonly cookiesCollection: { readonly __typename?: 'CookieCategoryCookiesCollection', readonly items: ReadonlyArray<{ readonly __typename?: 'TrackingCookie', readonly name: string, readonly pattern: string, readonly subDomains: ReadonlyArray<string>, readonly path: string, readonly secure: boolean, readonly sameSite: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly provider: { readonly __typename?: 'TrackingCookieProvider', readonly json: Record<string, unknown> }, readonly domains: { readonly __typename?: 'TrackingCookieDomains', readonly json: Record<string, unknown> }, readonly purpose: { readonly __typename?: 'TrackingCookiePurpose', readonly json: Record<string, unknown> }, readonly expiration: { readonly __typename?: 'TrackingCookieExpiration', readonly json: Record<string, unknown> } }> } };\n\nexport type TrackingCookieAllType = { readonly __typename?: 'TrackingCookie', readonly name: string, readonly pattern: string, readonly subDomains: ReadonlyArray<string>, readonly path: string, readonly secure: boolean, readonly sameSite: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly provider: { readonly __typename?: 'TrackingCookieProvider', readonly json: Record<string, unknown> }, readonly domains: { readonly __typename?: 'TrackingCookieDomains', readonly json: Record<string, unknown> }, readonly purpose: { readonly __typename?: 'TrackingCookiePurpose', readonly json: Record<string, unknown> }, readonly expiration: { readonly __typename?: 'TrackingCookieExpiration', readonly json: Record<string, unknown> } };\n\nexport const TrackingCookieAllType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"TrackingCookieAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"TrackingCookie\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"name\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"provider\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"domains\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"purpose\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"expiration\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"pattern\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"subDomains\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"path\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"secure\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sameSite\"}}]}}]} as unknown as DocumentNode<TrackingCookieAllType, unknown>;\nexport const CookieCategoryAllType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"CookieCategoryAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"CookieCategory\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"description\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"categoryCookieName\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"displayMode\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"isEssential\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"enableToggle\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"cookiesCollection\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"limit\"},\"value\":{\"kind\":\"IntValue\",\"value\":\"200\"}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"TrackingCookieAll\"}}]}}]}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"TrackingCookieAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"TrackingCookie\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"name\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"provider\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"domains\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"purpose\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"expiration\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"pattern\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"subDomains\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"path\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"secure\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sameSite\"}}]}}]} as unknown as DocumentNode<CookieCategoryAllType, unknown>;\nexport const CookieModalAllType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"CookieModalAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"CookieModal\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"landingScreenTitle\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"content\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"acceptAllButtonText\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"essentialOnlyButtonText\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"settingsButtonText\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"settingsScreenTitle\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"cookieCategoriesCollection\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"limit\"},\"value\":{\"kind\":\"IntValue\",\"value\":\"10\"}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"CookieCategoryAll\"}}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"acceptSelectedButtonText\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"saveChangesText\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"changesSavedText\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"toggleEnabledText\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"toggleDisabledText\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"gpcLocations\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"enableCookieDeletion\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"TrackingCookieAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"TrackingCookie\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"name\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"provider\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"domains\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"purpose\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"expiration\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"pattern\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"subDomains\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"path\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"secure\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sameSite\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"CookieCategoryAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"CookieCategory\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"description\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"categoryCookieName\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"displayMode\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"isEssential\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"enableToggle\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"cookiesCollection\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"limit\"},\"value\":{\"kind\":\"IntValue\",\"value\":\"200\"}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"TrackingCookieAll\"}}]}}]}}]}}]} as unknown as DocumentNode<CookieModalAllType, unknown>;\nexport const CookieModalQueryDocumentType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"CookieModalQuery\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"preview\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Boolean\"}}}},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"locale\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"cookieModalCollection\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"preview\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"preview\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"locale\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"locale\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"limit\"},\"value\":{\"kind\":\"IntValue\",\"value\":\"1\"}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"CookieModalAll\"}}]}}]}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"TrackingCookieAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"TrackingCookie\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"name\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"provider\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"domains\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"purpose\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"expiration\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"pattern\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"subDomains\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"path\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"secure\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sameSite\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"CookieCategoryAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"CookieCategory\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"description\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"categoryCookieName\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"displayMode\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"isEssential\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"enableToggle\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"cookiesCollection\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"limit\"},\"value\":{\"kind\":\"IntValue\",\"value\":\"200\"}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"TrackingCookieAll\"}}]}}]}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"CookieModalAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"CookieModal\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"landingScreenTitle\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"content\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"acceptAllButtonText\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"essentialOnlyButtonText\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"settingsButtonText\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"settingsScreenTitle\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"cookieCategoriesCollection\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"limit\"},\"value\":{\"kind\":\"IntValue\",\"value\":\"10\"}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"CookieCategoryAll\"}}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"acceptSelectedButtonText\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"saveChangesText\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"changesSavedText\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"toggleEnabledText\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"toggleDisabledText\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"gpcLocations\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"enableCookieDeletion\"}}]}}]} as unknown as DocumentNode<CookieModalQueryType, CookieModalQueryVariablesType>;", "import type { Dimensions, Partition } from '@snapchat/graphene';\nimport { FetchNetworkHandler, getWebConfig, Graphene } from '@snapchat/graphene';\nimport { getTopLevelDomain } from '@snapchat/parse-domain';\n\nexport const DevelopmentDomains = new Set<string>([\n  'localhost', // local dev\n  'sc-corp.net', // hosted dev / staging\n  'appspot.com', // preproduction\n]);\n\n/**\n * Wrapper around the @snapchat/graphene client used for Cookie Components. Formats logs and errors\n * for delivery to specified Graphene partition. This occurs outside the normal Event and Error\n * logging workflow so we have visibility into how these components function across all websites.\n *\n * Major change vs `global-components` implementation: Dropped support for server side logging. This\n * was causing build issues and since we don't expect to log anything server side it wasn't\n * necessary.\n */\nexport class BrowserGrapheneClient {\n  private readonly client: Graphene;\n\n  constructor(partition: Partition, host: string) {\n    this.client = this.initializeClient(partition, host);\n  }\n  /** Initializes Graphene Client */\n  private initializeClient = (partition: Partition, host: string) => {\n    const client = new Graphene();\n    const flavor = this.getGrapheneFlavor(host);\n    const variant = this.getGrapheneFriendlyString(host);\n    const config = getWebConfig({\n      partitionName: partition,\n      flavor,\n      variant,\n    });\n\n    client.initialize({\n      networkHandler: new FetchNetworkHandler(config),\n      debugMode: false,\n      logTimeInterval: 5e3,\n    });\n\n    return client;\n  };\n\n  private getGrapheneFlavor = (host: string): 'development' | 'production' => {\n    const topLevelDomain = getTopLevelDomain(host);\n    return DevelopmentDomains.has(topLevelDomain) ? 'development' : 'production';\n  };\n\n  /**\n   * Graphene doesn't support empty strings, so replace with 'Unknown'. Also replace any whitespace\n   * or periods in the input string with underscores, this avoids issues finding the logs later due\n   * to the partitions not matching expectations. Example: convert '523.snap.com' to '523_snap_com'\n   * since periods represent partitions in Graphene.\n   */\n  private getGrapheneFriendlyString = (input: string): string => {\n    if (!input) return 'Unknown';\n\n    const pattern = /[\\s.]+/g;\n    return input.replace(pattern, '_');\n  };\n\n  public logMetric = (metric: string, dimensions: Dimensions): void => {\n    this.client.increment({ metricsName: metric, dimensions });\n  };\n\n  public logError = (component: string, description: string, error: Error): void => {\n    const dimensions: Dimensions = {\n      description: this.getGrapheneFriendlyString(description),\n      error: this.getGrapheneFriendlyString(error.name),\n    };\n    this.client.increment({ metricsName: `error_${component}`, dimensions });\n  };\n}\n", "import type { CookieCategoryType } from '../generated/contentful-types';\n\n/** Helper function that returns a cookie state where user has accepted all cookie categories. */\nexport const acceptAllCookies = (\n  categories: readonly CookieCategoryType[]\n): Record<string, boolean> => {\n  const output: Record<string, boolean> = {};\n\n  for (const category of categories) {\n    const { categoryCookieName } = category;\n    output[categoryCookieName] = true;\n  }\n\n  return output;\n};\n\n/**\n * Helper function that returns a cookie state where user has accepted only the essential cookie\n * categories.\n */\nexport const essentialOnlyCookies = (\n  categories: readonly CookieCategoryType[]\n): Record<string, boolean> => {\n  const output: Record<string, boolean> = {};\n\n  for (const category of categories) {\n    const { categoryCookieName, isEssential } = category;\n    output[categoryCookieName] = isEssential;\n  }\n\n  return output;\n};\n\n/**\n * Helper function that returns a cookie state where user has a opted into some categories but not\n * others. Includes logic to default to opting out of cookie categories if not explicitly set in the\n * custom settings.\n */\nexport const acceptCustomCookies = (\n  categories: readonly CookieCategoryType[],\n  custom: Record<string, boolean>\n): Record<string, boolean> => {\n  const baseline = essentialOnlyCookies(categories);\n  const merged = { ...baseline, ...custom };\n  return merged;\n};\n", "import Cookies from 'js-cookie';\n\nimport type { CategorizedCookie } from './createCookieMapping';\n\n/**\n * Helper function that detects cookies that are not mapped to a known cookie category.\n *\n * @param cookieMappings A map where the key is the cookie category and the value is a set of all\n *   registered tracking cookies for that category.\n * @returns A string array containing the names of all uncategorized cookies.\n */\nexport const auditForUncategorizedCookies = (\n  cookieMappings: Map<string, Set<CategorizedCookie>>\n): string[] => {\n  const currentCookies: Record<string, string> = Cookies.get();\n\n  // convert categorized cookies to formats for easy checking\n  const allStaticCookieNames = new Set<string>();\n  const allCookieRegexPatterns: RegExp[] = [];\n\n  for (const [_, categoryCookies] of cookieMappings) {\n    for (const { name, regex } of categoryCookies) {\n      if (regex) {\n        allCookieRegexPatterns.push(regex);\n      } else {\n        allStaticCookieNames.add(name);\n      }\n    }\n  }\n\n  const uncategorizedCookies: string[] = [];\n\n  for (const cookieName in currentCookies) {\n    if (allStaticCookieNames.has(cookieName)) continue;\n\n    if (allCookieRegexPatterns.some(regex => regex.test(cookieName))) continue;\n\n    uncategorizedCookies.push(cookieName);\n  }\n\n  return uncategorizedCookies;\n};\n", "import type Cookies from 'js-cookie';\n\nimport type { CookieCategoryType, TrackingCookieType } from '../generated/contentful-types';\n\n/** Settings for a categorized cookie (set by Privacy team in Contentful) */\nexport interface CategorizedCookie extends Cookies.CookieAttributes {\n  name: string;\n  regex?: RegExp;\n}\n\n/**\n * Helper function to parse Contentful entries for relevant attributes for a given cookie. Note that\n * we only want to set attributes that have values so that JS Cookie can merge these settings with\n * the default configuration.\n */\nconst convertToCategorizedCookie = (\n  hostName: string,\n  input: TrackingCookieType\n): CategorizedCookie => {\n  const { sys, name, pattern, subDomains, path, secure, sameSite } = input;\n\n  const output: CategorizedCookie = {\n    id: sys.id,\n    name,\n  };\n\n  // regex pattern for the cookie (e.g. for the `_ga_{container}` cookie)\n  if (pattern) output.regex = new RegExp(pattern);\n\n  // Cookies may be set on the top level domain or the sub domain.\n  // If the latter, privacy will list the subdomain in the `subDomains` array.\n  // If a value matching the current domain exists, set the value to an empty string.\n  // This triggers configures the cookie deletion on the current domain rather than the cookie domain\n  if (subDomains?.includes(hostName)) output.domain = '';\n\n  if (path) output.path = path;\n\n  if (secure) output.secure = true;\n\n  // @ts-ignore: Contentful types do not reflect validations, users are restricted to valid values\n  if (sameSite) output.sameSite = sameSite;\n\n  return output;\n};\n\n/**\n * Helper function that converts an input array of Contentful `CookieCategory` elements to a Map\n * data structure\n *\n * @param categories Array of `CookieCategory` elements from Contentful\n * @returns A map where the key is the cookie category and the value is a set of all registered\n *   tracking cookies for that category.\n */\nexport const createCookieMapping = (\n  categories: readonly CookieCategoryType[]\n): Map<string, Set<CategorizedCookie>> => {\n  const cookieMapping = new Map<string, Set<CategorizedCookie>>();\n  const hostName = (window?.location?.hostname ?? '').toLowerCase();\n\n  for (const category of categories) {\n    const cookieSet = new Set<CategorizedCookie>();\n    const cookieName = category.categoryCookieName;\n\n    for (const trackingCookie of category.cookiesCollection.items) {\n      const categorizedCookie = convertToCategorizedCookie(hostName, trackingCookie);\n      cookieSet.add(categorizedCookie);\n    }\n    cookieMapping.set(cookieName, cookieSet);\n  }\n\n  return cookieMapping;\n};\n", "interface IsPopUpEligibleResponse {\n  popupEnabled: boolean;\n}\n\n// TODO: Switch to 'https://web-platform.snap.com/cookies/is_cookie_popup_eligible'\nconst cookiesApiPopupEligibleEndpoint =\n  'https://www.snapchat.com/cookies/api/is_cookie_popup_eligible';\n\n/**\n * Helper function that calls relevant API endpoint to determine whether the Modal should be\n * displayed\n *\n * @returns Boolean, True if client device is in a location where Modal should display\n */\nexport const fetchShouldDisplayModal = async (): Promise<boolean> => {\n  const response = await fetch(cookiesApiPopupEligibleEndpoint);\n\n  if (response.status !== 200) {\n    const { status, statusText } = response;\n    throw new Error(`${status} : ${statusText}`);\n  }\n  const data: IsPopUpEligibleResponse = await response.json();\n  return data.popupEnabled;\n};\n", "interface RetrievedCountryRegion {\n  country: string;\n  region: string;\n}\n\n// TODO: Switch to 'https://web-platform.snap.com/cookies/user_location'\nconst cookiesApiUserLocationEndpoint = 'https://www.snapchat.com/cookies/api/user_location';\n\n/**\n * Helper function that calls relevant API endpoint to retrieve the client device location. Used to\n * determine whether in GPC region and as a dimension for logging.\n *\n * @returns String, {Two Character Country Code (upper case)}-{region (lower case)} example: `US-ca`\n */\nexport const fetchUserLocation = async (): Promise<string> => {\n  const data = await fetch(cookiesApiUserLocationEndpoint);\n\n  if (data.status !== 200) {\n    const { status, statusText } = data;\n    throw new Error(`${status} : ${statusText}`);\n  }\n  const json: RetrievedCountryRegion = await data.json();\n  const country = json.country;\n  const region = json.region;\n  return `${country}-${region}`;\n};\n", "import Cookies from 'js-cookie';\n\nimport type { CookieCategoryType } from '../generated/contentful-types';\n\nexport const getCookie = (name: string): string | undefined => {\n  return Cookies.get(name);\n};\n\n/**\n * Function that retrieves Category Cookie values (e.g. Marketing, Performance, etc. cookies).\n * Converts values to boolean to represent whether user opted in for that category.\n *\n * @param categories Array of Cookie Categories\n * @returns Record where key is the cookie category name, value is the boolean of whether a user has\n *   opted in.\n */\nexport const getAllCookies = (\n  categories: readonly CookieCategoryType[]\n): Record<string, boolean> => {\n  const output: Record<string, boolean> = {};\n\n  for (const category of categories) {\n    const { categoryCookieName } = category;\n\n    // Only set value if cookie exists\n    const cookieValue = getCookie(categoryCookieName);\n\n    if (cookieValue) {\n      output[categoryCookieName] = cookieValue === 'true';\n    }\n  }\n\n  return output;\n};\n", "import { getTopLevelDomain } from '@snapchat/parse-domain';\n\n/**\n * Function retrieves the the top level domain for the input value (if specified) or based on the\n * current window location. Otherwise returns the input value.\n *\n * NOTE: the browser default is not inheritable by subdomains.\n *\n * @param inputCookieDomain [Optional] if specified, uses this rather than the window location to\n *   determine top level domain.\n * @returns String, the parsed top level domain for the window location or input parameter. Example:\n *   ar.snap.com => snap.com\n */\nexport const getCookieDomain = (inputCookieDomain?: string): string => {\n  // if input value is an empty string, use window location instead\n  const hostName = inputCookieDomain || (window?.location?.hostname ?? '').toLowerCase();\n  // Return top level domain (ar.snap.com => snap.com) or empty string\n  return getTopLevelDomain(hostName);\n};\n", "import Cookies from 'js-cookie';\n\nimport { CategoryOptInCookie } from '../components/types';\nimport type { CategorizedCookie } from './createCookieMapping';\n\n/** Output of the removeCookiesForNonacceptedCategories() function */\ninterface CookieRemovalResults {\n  [cookieName: string]: {\n    value: string;\n    wasRemoved?: boolean;\n  };\n}\n\n/** Helper function to encapsulate logic for cookie deletion. */\nconst removeCookie = (\n  cookie: CategorizedCookie,\n  cookieDomain: string,\n  currentCookies: Record<string, string>,\n  removedCookies: CookieRemovalResults\n) => {\n  const deleteOptions: Cookies.CookieAttributes = {\n    domain: cookie.domain ?? cookieDomain,\n    path: cookie.path,\n    secure: cookie.secure,\n    sameSite: cookie.sameSite,\n  };\n\n  if (cookie.regex) {\n    // find all matching cookies by REGEX pattern\n    // use case: multiple `_ga_{container}` cookies may exist under a single top level domain\n    for (const cookieName of Object.keys(currentCookies)) {\n      if (!cookie.regex!.test(cookieName)) continue;\n\n      Cookies.remove(cookieName, deleteOptions);\n      removedCookies[cookieName] = { value: currentCookies[cookieName] ?? '' };\n    }\n  } else if (cookie.name in currentCookies) {\n    // remove the cookie by name\n    Cookies.remove(cookie.name, deleteOptions);\n    removedCookies[cookie.name] = { value: currentCookies[cookie.name] ?? '' };\n  }\n\n  // otherwise do nothing\n};\n\nconst removeRelevantCookies = (\n  cookieDomain: string,\n  cookieType: string,\n  currentCookies: Record<string, string>,\n  cookieMappings: Map<string, Set<CategorizedCookie>>,\n  removedCookies: CookieRemovalResults\n): void => {\n  // We do not delete Essential cookies\n  if (cookieType === CategoryOptInCookie.Essential) return;\n\n  const relevantCookies = cookieMappings.get(cookieType);\n\n  if (relevantCookies) {\n    for (const cookie of relevantCookies) {\n      removeCookie(cookie, cookieDomain, currentCookies, removedCookies);\n    }\n  }\n};\n\n/**\n * Helper function that checks the user's current cookies and removes any known tracking cookies\n * that are mapped to a category that was opted out. Returns an object representing removal attempts\n * and successes for later logging.\n *\n * @param cookieDomain String, domain attribute used for deletion commands\n * @param newState Record, represents the users opt in state for each cookie category\n * @param cookieMappings A map where the key is the cookie category and the value is a set of all\n *   registered tracking cookies for that category.\n * @param enableCookieDeletion Boolean, feature flag that gates whether to delete tracking cookies\n * @returns Record, An object that tracks the cookies that were attempted to be removed, and which\n *   were successfully removed.\n */\nexport const removeCookiesForNonacceptedCategories = (\n  cookieDomain: string,\n  newState: Record<string, boolean>,\n  cookieMappings: Map<string, Set<CategorizedCookie>>,\n  enableCookieDeletion = false\n): CookieRemovalResults => {\n  const currentCookies = Cookies.get();\n\n  const removedCookies: CookieRemovalResults = {};\n\n  for (const cookieType in newState) {\n    // user is opted into the category, noop\n    if (newState[cookieType]) continue;\n\n    // cookie deletion is not enabled, noop\n    if (!enableCookieDeletion) continue;\n\n    removeRelevantCookies(cookieDomain, cookieType, currentCookies, cookieMappings, removedCookies);\n  }\n\n  // get a second snapshot of active cookies and compare to identify what was successfully removed.\n  const updatedCookies = Cookies.get();\n\n  for (const cookieName in removedCookies) {\n    removedCookies[cookieName]!.wasRemoved = !updatedCookies[cookieName];\n  }\n\n  return removedCookies;\n};\n", "import Cookies from 'js-cookie';\n\nconst setCookie = (name: string, value: string, domain = ''): void => {\n  Cookies.set(name, value, { expires: 365, secure: true, domain });\n};\n\n/**\n * Helper function that saves the user's Opt in state for each Cookie Category as cookies on the\n * specified `cookieDomain`.\n *\n * @param cookieDomain String, domain attribute used when setting each cookie\n * @param cookieStatus Record, represents the users opt in state for each cookie category\n */\nexport const setOptInCookies = (\n  cookieDomain: string,\n  cookieStatus: Record<string, boolean>\n): void => {\n  for (const key in cookieStatus) {\n    setCookie(key, (cookieStatus[key] as boolean).toString(), cookieDomain);\n  }\n};\n", "import type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { DesignSystemContext } from '../../context/DesignSystemContext';\n\nexport interface DesignAgnosticButtonProps {\n  testId?: string;\n  text: string;\n  isPrimary?: boolean;\n  isDisabled?: boolean;\n  onClick?: () => void;\n}\n\nexport const DesignAgnosticButton: FC<DesignAgnosticButtonProps> = props => {\n  const { buttonComponent } = useContext(DesignSystemContext);\n  return buttonComponent(props);\n};\n", "import type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { DesignSystemContext } from '../../context/DesignSystemContext';\nimport type { LocaleOption } from '../types';\n\nexport interface DesignAgnosticLocaleDropdownProps {\n  currentLocale: LocaleOption;\n  supportedLocales: Record<string, LocaleOption>;\n  onLocaleChange?: (locale: string) => void;\n  /**\n   * If specified, renders the dropdown's popup in the specified element rather than the default\n   * placement.\n   */\n  containerProvider?: (node: HTMLElement) => HTMLElement;\n}\n\nexport const DesignAgnosticLocaleDropdown: FC<DesignAgnosticLocaleDropdownProps> = props => {\n  const { localeDropdownComponent } = useContext(DesignSystemContext);\n  return localeDropdownComponent(props);\n};\n", "import type { FC, PropsWithChildren } from 'react';\nimport { useContext } from 'react';\n\nimport { DesignSystemContext } from '../../context/DesignSystemContext';\nimport type { BackgroundType } from '../types';\n\nexport interface DesignAgnosticModalProps extends PropsWithChildren {\n  backgroundType?: BackgroundType;\n  className?: string;\n  isDisplayed?: boolean;\n  portalRoot?: HTMLElement;\n}\n\nexport const DesignAgnosticModal: FC<DesignAgnosticModalProps> = props => {\n  const { modalComponent } = useContext(DesignSystemContext);\n  return modalComponent(props);\n};\n", "import type { FC, PropsWithChildren } from 'react';\nimport { useContext } from 'react';\n\nimport { DesignSystemContext } from '../../context/DesignSystemContext';\nimport type { BackgroundType } from '../types';\n\nexport interface DesignAgnosticSectionProps extends PropsWithChildren {\n  backgroundType?: BackgroundType;\n  className?: string;\n}\n\nexport const DesignAgnosticSection: FC<DesignAgnosticSectionProps> = props => {\n  const { sectionComponent } = useContext(DesignSystemContext);\n  return sectionComponent(props);\n};\n", "import type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { DesignSystemContext } from '../../context/DesignSystemContext';\n\nexport interface DesignAgnosticToggleProps {\n  id: string;\n  isChecked: boolean;\n  onToggle?: () => void;\n}\n\nexport const DesignAgnosticToggle: FC<DesignAgnosticToggleProps> = props => {\n  const { toggleComponent } = useContext(DesignSystemContext);\n  return toggleComponent(props);\n};\n", "import type { WithConditionalCSSProp } from '@emotion/react/types/jsx-namespace';\nimport type { Partition } from '@snapchat/graphene';\nimport type { ComponentType, FC, PropsWithChildren, ReactNode } from 'react';\nimport { Component } from 'react';\n\nimport { BrowserGrapheneClient } from '../../helpers/logging/BrowserGrapheneClient';\n\ninterface Props extends PropsWithChildren {\n  component: string;\n  hostname: string;\n  partition: Partition;\n  onError?: (error: Error | string) => void;\n  renderInstead?: ReactNode;\n}\n\ninterface State {\n  hasError: boolean;\n  grapheneClient?: BrowserGrapheneClient;\n}\n\n/**\n * ErrorBoundary used for the Cookie components. Ensures unhandled errors are logged to Graphene and\n * triggers onError callback if specified. NOTE: must be implemented as a class component. See this\n * page for details: https://reactjs.org/docs/error-boundaries.html\n *\n * Major change vs `global-components` implementation: Dropped support for server side logging. This\n * was causing build issues and since we don't expect to log anything server side it wasn't\n * necessary.\n */\nexport class BrowserErrorBoundary extends Component<Props, State> {\n  constructor(props: Props) {\n    super(props);\n\n    const { partition, hostname } = props;\n    const client = partition && new BrowserGrapheneClient(partition, hostname);\n\n    this.state = {\n      hasError: false,\n      grapheneClient: client,\n    };\n  }\n\n  componentDidCatch(error: Error): void {\n    this.setState({\n      hasError: true,\n    });\n\n    // Log error to Graphene\n    this.state.grapheneClient?.logError(this.props.component, 'unhandled', error);\n\n    // If error handler is specified, pass the error to the handler\n    if (this.props.onError) {\n      this.props.onError(error);\n    }\n  }\n\n  render(): React.ReactNode {\n    const { children, renderInstead } = this.props;\n    const { hasError } = this.state;\n\n    if (hasError) {\n      // If there is an error, render the replacement content (renders nothing if not specified)\n      return renderInstead ?? null;\n    }\n\n    return children;\n  }\n}\n\n/** Base Type that component props must inherit when using the `withErrorBoundary` function. */\nexport interface WithOnError {\n  onError?: (error: Error | string) => void;\n}\n\n/**\n * Type used to get decorator function to pass typechecks. TODO: determine why this is necessary and\n * find a better workaround. This is UGLY. relevant github threads:\n * https://github.com/emotion-js/emotion/issues/2169\n * https://github.com/microsoft/TypeScript/issues/42240\n *\n * NOTE: might just be a matter of updating emotion and typescript versions?\n */\ntype WithEmotionProps<Props> = Props & WithConditionalCSSProp<Props> & JSX.IntrinsicAttributes;\n\n/** Helper function for wrapping a single Component in the ErrorBoundary. */\nexport function withErrorBoundary<WrappedComponentProps extends WithOnError>(\n  /** Component to wrap in the error boundary. */\n  WrappedComponent: ComponentType<WrappedComponentProps>,\n  /** Specifies the Graphene partition that unhandled errors will be logged to. */\n  partition: Partition,\n  /** Optional: if specified, renders this instead of the WrappedComponent when an error occurs. */\n  renderInstead?: ReactNode\n): FC<WithEmotionProps<WrappedComponentProps>> {\n  const displayName = WrappedComponent.displayName ?? 'UnknownComponent';\n\n  const ComponentWithBrowserErrorBoundary = (props: WithEmotionProps<WrappedComponentProps>) => {\n    const hostname = (window?.location?.hostname ?? 'unknown').toLowerCase();\n    const { onError } = props;\n    return (\n      <BrowserErrorBoundary\n        hostname={hostname}\n        partition={partition}\n        component={displayName}\n        onError={onError}\n        renderInstead={renderInstead}\n      >\n        <WrappedComponent {...props} />\n      </BrowserErrorBoundary>\n    );\n  };\n\n  return ComponentWithBrowserErrorBoundary;\n}\n", "import { documentToHtmlString } from '@contentful/rich-text-html-renderer';\nimport type { Document } from '@contentful/rich-text-types';\nimport type { ClassNamesArg } from '@emotion/css';\nimport { cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { ContentfulContext } from '../../context';\n\ninterface Props {\n  document: string | Record<string, unknown> | Document;\n  className?: ClassNamesArg;\n}\n\n/**\n * Custom Component based on the existing `PlainRichText` component. This component is meant for use\n * ONLY with Cookie components and includes the following custom behaviors:\n *\n * - Renders with a wrapping `div` element\n * - Renders `hyperlinks` to open in a new tab\n * - Accepts a className prop for setting styles on the rendered HTML\n */\nexport const CookieRichText: FC<Props> = ({ document, className }) => {\n  // Used when rendering hyperlinks to append the `lang` query parameter\n  const { currentLocale } = useContext(ContentfulContext);\n\n  const renderUri = (targetUrl: string) => {\n    const uri = new URL(targetUrl);\n\n    // specify this first so it can be overridden if explicitly set in targetUrl\n    if (!uri.searchParams.has('lang')) {\n      uri.searchParams.set('lang', currentLocale);\n    }\n\n    return uri.href;\n  };\n\n  return (\n    <div\n      data-testid=\"mwp-cookie-rich-text\"\n      className={cx('contentful-rich-text', className)}\n      // biome-ignore lint/security/noDangerouslySetInnerHtml: Safe here because we use official renderer.\n      dangerouslySetInnerHTML={{\n        __html: documentToHtmlString(document as unknown as Document, {\n          renderNode: {\n            hyperlink: node => {\n              const text = node.content\n                .map(current => {\n                  // NOTE: For now, we won't support text styles in the Hyperlink\n                  if (!current || current.nodeType !== 'text') return;\n                  return current.value;\n                }, [])\n                .join('');\n\n              const uri = renderUri(node.data.uri);\n              return `<a href=\"${uri}\" target=\"_blank\" rel=\"noopener\">${text}</a>`;\n            },\n          },\n        }),\n      }}\n    />\n  );\n};\n", "import type { FC, PropsWithChildren } from 'react';\n\nexport const CookieModalFooter: FC<PropsWithChildren> = ({ children }) => {\n  /* render buttons in reverse order so that when we wrap on smaller screens the break happens on 1st, rather than last element.\n     NOTE: requires `flex-direction: row-reverse|column-reverse` style be applied.\n  */\n  const cookieFooter = <div className=\"modal-footer\">{children}</div>;\n  return cookieFooter;\n};\n", "import type React from 'react';\nimport { useContext, useRef } from 'react';\n\nimport { ContentfulContext } from '../../context';\nimport { DesignAgnosticLocaleDropdown } from '../designAgnostic';\nimport { GhostLogo } from '../Logo/Ghost';\nimport type { BackgroundType, LocaleOption } from '../types';\n\ninterface Props {\n  backgroundType: BackgroundType;\n  supportedLocales: Record<string, LocaleOption>;\n  onLocaleChange?: (locale: string) => void;\n}\n\nexport const CookieModalHeader: React.FC<Props> = ({\n  backgroundType,\n  supportedLocales,\n  onLocaleChange,\n}) => {\n  const { currentLocale } = useContext(ContentfulContext);\n\n  const headerRef = useRef<HTMLDivElement>(null);\n  // NOTE: headerRef.current is guaranteed to exist prior to when containerProvider is called.\n  const containerProvider = () => headerRef.current!;\n  return (\n    <div data-testid=\"mwp-cookie-modal-header\" className=\"modal-header\" ref={headerRef}>\n      <div className=\"logo-container\">\n        <GhostLogo width={24} height={24} backgroundType={backgroundType} />\n      </div>\n      <div className=\"locale-container\">\n        <DesignAgnosticLocaleDropdown\n          supportedLocales={supportedLocales}\n          currentLocale={supportedLocales[currentLocale] as LocaleOption}\n          onLocaleChange={onLocaleChange}\n          // Specify container to ensure dropdown popup sticks to modal\n          containerProvider={containerProvider}\n        />\n      </div>\n    </div>\n  );\n};\n", "import type { FC } from 'react';\n\nimport { BackgroundType } from '../types';\n\ninterface Props {\n  className?: string;\n  width: number;\n  height: number;\n  backgroundType: BackgroundType;\n}\n\n/**\n * Renders the Ghost Logo Copied from:\n * snap-design-system/packages/snap-design-system-marketing/src/components/Navigator/Ghost/Logo.tsx\n * Moving this here to avoid a dependency on SDS-M when rendering the Cookie Modal with SDS-E\n * components.\n */\nexport const GhostLogo: FC<Props> = ({\n  className,\n  width,\n  height,\n  backgroundType = BackgroundType.LightMode,\n}) => {\n  const fillColor = backgroundType !== BackgroundType.DarkMode ? '#FFFFFF' : undefined;\n  const outlineColor = backgroundType === BackgroundType.DarkMode ? '#FFFFFF' : undefined;\n  return (\n    <svg\n      version=\"1.1\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      x=\"0px\"\n      y=\"0px\"\n      viewBox=\"0 0 500 500\"\n      className={className}\n      width={width}\n      height={height}\n    >\n      <g id=\"Layer_1\">\n        <g>\n          <g>\n            <path\n              style={{\n                fill: fillColor,\n              }}\n              d=\"M484.6,369.3c-2-6.8-11.9-11.6-11.9-11.6l0,0c-0.9-0.5-1.7-0.9-2.4-1.3c-16.4-7.9-30.8-17.4-43.1-28.2\n                c-9.8-8.7-18.2-18.2-25-28.4c-8.2-12.4-12.1-22.8-13.8-28.4c-0.9-3.7-0.8-5.1,0-7c0.6-1.6,2.5-3.1,3.4-3.8\n                c5.5-3.9,14.4-9.7,19.9-13.2c4.7-3.1,8.8-5.7,11.2-7.4c7.7-5.4,12.9-10.8,16-16.7c4-7.6,4.5-16,1.4-24.3\n                c-4.2-11.1-14.6-17.8-27.8-17.8c-2.9,0-6,0.3-9,1c-7.6,1.6-14.8,4.3-20.8,6.7c-0.4,0.2-0.9-0.2-0.9-0.6\n                c0.6-14.9,1.3-34.9-0.3-53.9c-1.5-17.2-5-31.7-10.8-44.3c-5.8-12.7-13.4-22.1-19.3-28.9c-5.7-6.5-15.5-16-30.5-24.5\n                c-21-12-45-18.1-71.1-18.1c-26.1,0-50,6.1-71.1,18.1c-15.8,9-25.9,19.2-30.5,24.5c-5.9,6.8-13.5,16.2-19.3,28.9\n                c-5.8,12.6-9.3,27.1-10.8,44.3c-1.6,19.1-1,37.5-0.3,53.9c0,0.5-0.5,0.8-0.9,0.6c-6-2.3-13.2-5-20.7-6.7c-3-0.7-6-1-9-1\n                c-13.2,0-23.6,6.7-27.8,17.8c-3.1,8.3-2.7,16.7,1.4,24.3c3.1,5.9,8.4,11.4,16,16.7c2.4,1.7,6.4,4.3,11.2,7.4\n                c5.3,3.5,14,9.1,19.5,13c0.7,0.5,3,2.3,3.8,4.1c0.8,2,0.9,3.4-0.1,7.3c-1.7,5.7-5.6,15.9-13.7,28.1c-6.8,10.2-15.2,19.7-25,28.4\n                C60.5,339,46,348.5,29.7,356.5c-0.8,0.4-1.7,0.8-2.7,1.4l0,0c0,0-9.8,5-11.6,11.4c-2.7,9.5,4.5,18.4,11.9,23.2\n                c12.1,7.8,26.9,12,35.4,14.3c2.4,0.6,4.5,1.2,6.5,1.8c1.2,0.4,4.3,1.6,5.6,3.3c1.7,2.1,1.9,4.8,2.5,7.8v0c0.9,5,3,11.2,9.2,15.5\n                c6.8,4.7,15.5,5,26.4,5.5c11.5,0.4,25.8,1,42.1,6.4c7.6,2.5,14.4,6.7,22.4,11.6c16.6,10.2,37.2,22.9,72.5,22.9\n                c35.3,0,56.1-12.8,72.8-23c7.9-4.8,14.7-9,22.1-11.5c16.3-5.4,30.6-5.9,42.1-6.4c11-0.4,19.6-0.7,26.4-5.5\n                c6.6-4.6,8.6-11.4,9.4-16.6c0.5-2.5,0.8-4.8,2.3-6.7c1.2-1.6,4.1-2.7,5.4-3.2c2-0.6,4.2-1.2,6.7-1.9c8.6-2.3,19.3-5,32.3-12.4\n                C485.2,385.6,486.3,374.7,484.6,369.3z\"\n            />\n          </g>\n          <path\n            style={{\n              fill: outlineColor,\n            }}\n            d=\"M498.2,364c-3.5-9.5-10.1-14.5-17.6-18.7c-1.4-0.8-2.7-1.5-3.8-2c-2.2-1.2-4.5-2.3-6.8-3.5\n              c-23.5-12.5-41.8-28.2-54.6-46.8c-4.3-6.3-7.3-12-9.4-16.6c-1.1-3.1-1-4.9-0.3-6.5c0.6-1.2,2.2-2.5,3-3.1c4-2.7,8.2-5.4,11-7.2\n              c5-3.3,9-5.8,11.6-7.6c9.6-6.7,16.4-13.9,20.6-21.9c5.9-11.3,6.7-24.2,2.1-36.3c-6.4-16.8-22.3-27.3-41.5-27.3\n              c-4,0-8,0.4-12.1,1.3c-1.1,0.2-2.1,0.5-3.1,0.7c0.2-11.4-0.1-23.6-1.1-35.6c-3.6-42-18.3-64-33.7-81.6c-6.4-7.3-17.5-18-34.2-27.6\n              C305.1,10.6,278.8,3.9,250,3.9c-28.7,0-55,6.7-78.3,20c-16.8,9.6-27.9,20.3-34.3,27.6c-15.3,17.5-30,39.6-33.7,81.6\n              c-1,11.9-1.3,24.1-1.1,35.6c-1-0.3-2.1-0.5-3.1-0.7c-4-0.9-8.1-1.3-12.1-1.3c-19.3,0-35.2,10.4-41.5,27.3\n              c-4.6,12.1-3.8,25,2.1,36.3c4.2,8,11,15.2,20.6,21.9c2.6,1.8,6.6,4.4,11.6,7.6c2.7,1.8,6.7,4.3,10.6,6.9c0.6,0.4,2.7,1.9,3.4,3.4\n              c0.8,1.7,0.8,3.5-0.4,6.8c-2.1,4.6-5,10.1-9.2,16.3c-12.4,18.2-30.3,33.6-53,46c-12,6.4-24.6,10.6-29.9,25\n              c-4,10.9-1.4,23.2,8.8,33.6l0,0c3.3,3.6,7.5,6.8,12.8,9.7c12.4,6.9,23,10.2,31.3,12.5c1.5,0.4,4.8,1.5,6.3,2.8\n              c3.7,3.2,3.2,8.1,8.1,15.2c3,4.4,6.4,7.4,9.2,9.4c10.3,7.1,21.9,7.6,34.2,8c11.1,0.4,23.7,0.9,38.1,5.7c6,2,12.1,5.8,19.3,10.2\n              c17.2,10.6,40.8,25,80.2,25c39.4,0,63.1-14.5,80.5-25.2c7.1-4.4,13.3-8.1,19-10c14.4-4.7,27-5.2,38.1-5.7\n              c12.3-0.5,23.9-0.9,34.2-8c3.2-2.2,7.3-5.9,10.5-11.5c3.5-6,3.4-10.2,6.8-13.2c1.4-1.2,4.3-2.2,5.9-2.7\n              c8.4-2.3,19.1-5.7,31.7-12.6c5.6-3.1,10-6.5,13.4-10.3c0,0,0.1-0.1,0.1-0.1C499.7,386.6,502.1,374.6,498.2,364z M463.2,382.8\n              c-21.4,11.8-35.6,10.5-46.6,17.7c-9.4,6-3.8,19.1-10.7,23.8c-8.4,5.8-33.2-0.4-65.1,10.2c-26.4,8.7-43.2,33.8-90.7,33.8\n              c-47.6,0-64-25-90.7-33.8c-32-10.6-56.8-4.4-65.1-10.2c-6.8-4.7-1.3-17.7-10.7-23.8c-11-7.1-25.3-5.9-46.6-17.7\n              c-13.6-7.5-5.9-12.2-1.4-14.4c77.4-37.5,89.8-95.4,90.3-99.7c0.7-5.2,1.4-9.3-4.3-14.6c-5.5-5.1-30.1-20.3-36.9-25\n              c-11.3-7.9-16.2-15.7-12.6-25.4c2.5-6.7,8.8-9.2,15.4-9.2c2,0,4.1,0.2,6.1,0.7c12.4,2.7,24.4,8.9,31.3,10.6c1,0.2,1.8,0.3,2.6,0.3\n              c3.7,0,5-1.9,4.8-6.1c-0.8-13.5-2.7-39.9-0.6-64.5c2.9-33.9,13.9-50.7,26.9-65.6c6.2-7.1,35.5-38.1,91.6-38.1\n              c56.2,0,85.3,30.9,91.6,38.1c13,14.9,23.9,31.7,26.9,65.6c2.1,24.6,0.3,51-0.6,64.5c-0.3,4.5,1.1,6.1,4.8,6.1\n              c0.8,0,1.6-0.1,2.6-0.3c6.9-1.7,19-7.9,31.3-10.6c2-0.4,4.1-0.7,6.1-0.7c6.6,0,12.8,2.5,15.4,9.2c3.7,9.7-1.3,17.5-12.6,25.4\n              c-6.8,4.7-31.3,19.9-36.9,25c-5.7,5.3-5,9.4-4.3,14.6c0.6,4.4,12.9,62.2,90.3,99.7C469.1,370.6,476.8,375.3,463.2,382.8z\"\n          />\n        </g>\n      </g>\n    </svg>\n  );\n};\n", "import type React from 'react';\n\nimport { DesignAgnosticButton } from '../designAgnostic';\nimport { CookieRichText } from '../shared/CookieRichText';\nimport type { BackgroundType, LocaleOption } from '../types';\nimport { CookieModalFooter } from './CookieModalFooter';\nimport { CookieModalHeader } from './CookieModalHeader';\n\ninterface Props {\n  backgroundType: BackgroundType;\n  supportedLocales: Record<string, LocaleOption>;\n  title: string;\n  content: Record<string, unknown>;\n  acceptAllButtonText: string;\n  essentialOnlyButtonText: string;\n  settingsButtonText: string;\n  onAcceptAllButtonClick: () => void;\n  onAcceptEssentialButtonClick: () => void;\n  onSettingsbuttonClick: () => void;\n  onLocaleChange?: (locale: string) => void;\n}\n\nexport const CookieLandingScreen: React.FC<Props> = ({\n  backgroundType,\n  supportedLocales,\n  title,\n  content,\n  settingsButtonText,\n  acceptAllButtonText,\n  essentialOnlyButtonText,\n  onSettingsbuttonClick,\n  onAcceptAllButtonClick,\n  onAcceptEssentialButtonClick,\n  onLocaleChange,\n}) => (\n  <div data-testid=\"mwp-cookie-landing-screen\" className=\"cookie-landing-screen\">\n    <CookieModalHeader\n      backgroundType={backgroundType}\n      supportedLocales={supportedLocales}\n      onLocaleChange={onLocaleChange}\n    />\n    <div data-testid=\"mwp-cookie-modal-body\" className=\"modal-body\">\n      <h2 className=\"cookie-title\">{title}</h2>\n      <CookieRichText document={content} className=\"landing-content\" />\n    </div>\n    <CookieModalFooter>\n      <DesignAgnosticButton\n        isPrimary={true}\n        text={essentialOnlyButtonText}\n        onClick={onAcceptEssentialButtonClick}\n      />\n      <DesignAgnosticButton\n        isPrimary={true}\n        text={acceptAllButtonText}\n        onClick={onAcceptAllButtonClick}\n      />\n      <DesignAgnosticButton\n        isPrimary={false}\n        text={settingsButtonText}\n        onClick={onSettingsbuttonClick}\n      />\n    </CookieModalFooter>\n  </div>\n);\n", "import type { CookieCategoryType } from '../../generated/contentful-types';\nimport { DesignAgnosticToggle } from '../designAgnostic';\nimport type { CategoryOptInCookie, CookieAcceptance } from '../types';\nimport { CategoryDisplayMode } from '../types';\nimport { CookieRichText } from './CookieRichText';\n\ninterface Props {\n  title: string;\n  cookieCategories: readonly CookieCategoryType[];\n  categoriesState: CookieAcceptance;\n  updateCategoriesState: (key: CategoryOptInCookie, value: boolean) => void;\n  activeToggleLabel: string;\n  inactiveToggleLabel: string;\n  /** Flag to control rendering categories - some are only visible on the settings page. */\n  isModal?: boolean;\n}\n\nexport const CookieCategories: React.FC<Props> = ({\n  title,\n  cookieCategories,\n  categoriesState,\n  updateCategoriesState,\n  activeToggleLabel,\n  inactiveToggleLabel,\n  isModal,\n}) => {\n  return (\n    <>\n      <h2 className=\"cookie-title\">{title}</h2>\n      {cookieCategories.map(category => {\n        if (isModal && category.displayMode === CategoryDisplayMode.SettingsOnly) {\n          return null;\n        }\n\n        const cookieCategory = category.categoryCookieName as CategoryOptInCookie;\n        // Show inactive text by default\n        let categoryLabel = inactiveToggleLabel;\n        // For essential categories that users can't disable - show active text\n        if (category.isEssential && !category.enableToggle) categoryLabel = activeToggleLabel;\n        // User has enabled the toggle - show active text\n        if (categoriesState[cookieCategory]) categoryLabel = activeToggleLabel;\n        return (\n          <div data-testid=\"mwp-cookie-category-description\" key={category.sys.id}>\n            <div className=\"category-border\">\n              <div className=\"category-title-container\">\n                <h5 className=\"category-title\">{category.title}</h5>\n                <p className=\"category-status\">{categoryLabel}</p>\n                {category.enableToggle === true && (\n                  <div className=\"category-toggle\">\n                    <DesignAgnosticToggle\n                      id={`${category.sys.id}-slider`}\n                      isChecked={!!categoriesState[cookieCategory]}\n                      onToggle={() =>\n                        updateCategoriesState(cookieCategory, !categoriesState[cookieCategory])\n                      }\n                    />\n                  </div>\n                )}\n              </div>\n              <CookieRichText\n                className=\"category-description\"\n                document={category.description.json}\n              />\n            </div>\n          </div>\n        );\n      })}\n    </>\n  );\n};\n", "import type React from 'react';\n\nimport type { CookieCategoryType } from '../../generated/contentful-types';\nimport { DesignAgnosticButton } from '../designAgnostic';\nimport { CookieCategories } from '../shared/CookieCategories';\nimport type { BackgroundType, CategoryOptInCookie, CookieAcceptance, LocaleOption } from '../types';\nimport { CookieModalFooter } from './CookieModalFooter';\nimport { CookieModalHeader } from './CookieModalHeader';\n\ninterface Props {\n  backgroundType: BackgroundType;\n  supportedLocales: Record<string, LocaleOption>;\n  title: string;\n  cookieCategories: readonly CookieCategoryType[];\n  activeToggleLabel: string;\n  inactiveToggleLabel: string;\n  categoriesState: CookieAcceptance;\n  updateCategoriesState: (key: CategoryOptInCookie, value: boolean) => void;\n  acceptAllButtonText: string;\n  essentialOnlyButtonText: string;\n  acceptSelectedButtonText: string;\n  onAcceptAllButtonClick: () => void;\n  onAcceptEssentialButtonClick: () => void;\n  onAcceptSelectedButtonClick: () => void;\n  onLocaleChange?: (locale: string) => void;\n}\n\nexport const CookieSettingsScreen: React.FC<Props> = ({\n  backgroundType,\n  supportedLocales,\n  onLocaleChange,\n  title,\n  cookieCategories,\n  activeToggleLabel,\n  inactiveToggleLabel,\n  categoriesState,\n  updateCategoriesState,\n  acceptAllButtonText,\n  essentialOnlyButtonText,\n  acceptSelectedButtonText,\n  onAcceptAllButtonClick,\n  onAcceptEssentialButtonClick,\n  onAcceptSelectedButtonClick,\n}) => {\n  const settingScreen = (\n    <div data-testid=\"mwp-cookie-modal-settings-screen\" className=\"cookie-settings-screen\">\n      <CookieModalHeader\n        backgroundType={backgroundType}\n        supportedLocales={supportedLocales}\n        onLocaleChange={onLocaleChange}\n      />\n      <div className=\"modal-body\">\n        <CookieCategories\n          title={title}\n          cookieCategories={cookieCategories}\n          categoriesState={categoriesState}\n          updateCategoriesState={updateCategoriesState}\n          activeToggleLabel={activeToggleLabel}\n          inactiveToggleLabel={inactiveToggleLabel}\n          isModal={true}\n        />\n      </div>\n      <CookieModalFooter>\n        <DesignAgnosticButton\n          isPrimary={true}\n          text={essentialOnlyButtonText}\n          onClick={onAcceptEssentialButtonClick}\n        />\n        <DesignAgnosticButton\n          isPrimary={true}\n          text={acceptAllButtonText}\n          onClick={onAcceptAllButtonClick}\n        />\n        <DesignAgnosticButton\n          isPrimary={true}\n          text={acceptSelectedButtonText}\n          onClick={onAcceptSelectedButtonClick}\n        />\n      </CookieModalFooter>\n    </div>\n  );\n\n  return settingScreen;\n};\n", "import { ApolloClient, ApolloProvider, InMemoryCache } from '@apollo/client';\nimport { globalComponentsApolloLink } from '@snapchat/mw-global-components-schema';\nimport type { FC, PropsWithChildren } from 'react';\n\nimport type { ContentfulProps } from '../../context/ContentfulContext';\nimport { ContentfulContext } from '../../context/ContentfulContext';\nimport type { DesignSystemProps } from '../../context/DesignSystemContext';\nimport { DesignSystemContext } from '../../context/DesignSystemContext';\n\nexport type CookieProviderProps = Partial<ContentfulProps> & DesignSystemProps & PropsWithChildren;\n\nexport const CookieProvider: FC<CookieProviderProps> = ({ children, client, ...otherProps }) => {\n  const { isPreview = false, isSSR = false, currentLocale = 'en-US' } = otherProps;\n  const contentfulContext: ContentfulProps = {\n    isPreview,\n    isSSR,\n    currentLocale,\n    client,\n  };\n\n  const wrappedWithContext = (\n    <ContentfulContext.Provider value={contentfulContext}>\n      <DesignSystemContext.Provider value={otherProps}>{children}</DesignSystemContext.Provider>\n    </ContentfulContext.Provider>\n  );\n\n  if (client) {\n    return wrappedWithContext;\n  }\n\n  // If a client was not provided, wrap with ApolloProvider with default settings\n  const defaultClient = new ApolloClient({\n    link: globalComponentsApolloLink,\n    cache: new InMemoryCache(),\n  });\n\n  return <ApolloProvider client={defaultClient}>{wrappedWithContext}</ApolloProvider>;\n};\n", "import { parseError } from '@snapchat/core';\nimport type { Dimensions } from '@snapchat/graphene';\nimport { Partition } from '@snapchat/graphene';\nimport { useGlobalComponentsContentfulQuery } from '@snapchat/mw-global-components-schema';\nimport clone from 'lodash/clone.js';\nimport head from 'lodash/head.js';\nimport type { FC } from 'react';\nimport { useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport { ContentfulContext } from '../../context';\nimport type { CookieModalType } from '../../generated/contentful-types';\nimport { CookieModalQueryDocumentType } from '../../generated/contentful-types';\nimport { BrowserGrapheneClient } from '../../helpers/logging';\nimport {\n  acceptCustomCookies,\n  createCookieMapping,\n  fetchUserLocation,\n  getAllCookies,\n  getCookieDomain,\n  removeCookiesForNonacceptedCategories,\n  setOptInCookies,\n} from '../../utils';\nimport type { DesignAgnosticButtonProps } from '../designAgnostic';\nimport { DesignAgnosticButton, DesignAgnosticSection } from '../designAgnostic';\nimport type { WithOnError } from '../ErrorBoundary';\nimport { withErrorBoundary } from '../ErrorBoundary';\nimport { CookieCategories } from '../shared/CookieCategories';\nimport { BackgroundType, CategoryOptInCookie, EventAction } from '../types';\n\ninterface OnSubmitEvent {\n  /**\n   * User's location per API endpoint. Included as a convenience for consuming applications to avoid\n   * multiple calls to that endpoint if configuring GTM/GA, etc.\n   */\n  userLocation: string;\n  /** Category Cookies and acceptance state for the user. */\n  cookieAcceptance: Record<string, boolean>;\n}\n\nexport interface CookieSettingsProps extends WithOnError {\n  backgroundType?: BackgroundType;\n  cookieDomain?: string;\n  /**\n   * Fires when a user submits changes to their cookie settings. This event hook is used to\n   * enable/disable features per user cookie acceptance.\n   */\n  onSubmit?: (event: OnSubmitEvent) => void;\n  /** On event listener for user actions */\n  onEvent?: (event: { component: string; label: string; action: EventAction }) => void;\n}\n\nenum ButtonStates {\n  Disabled = 'Disabled',\n  Enabled = 'Enabled',\n  Saved = 'Saved',\n}\n\nconst displayName = 'CookieSettings';\n\nconst CookieSettings: FC<CookieSettingsProps> = ({\n  backgroundType = BackgroundType.LightMode,\n  cookieDomain: inputCookieDomain,\n  onSubmit,\n  onEvent,\n}) => {\n  // ==============================================================================================\n  // Fetch content from Contentful\n  // ==============================================================================================\n  const context = useContext(ContentfulContext);\n  const { data } = useGlobalComponentsContentfulQuery(CookieModalQueryDocumentType, context, {\n    client: context.client,\n  });\n  const config = head(data?.cookieModalCollection.items) as CookieModalType | undefined;\n  const { categorySettings, cookieCategoryMap, enableCookieDeletion } = useMemo(() => {\n    if (!config?.cookieCategoriesCollection?.items)\n      return {\n        categorySettings: undefined,\n        cookieCategoryMap: undefined,\n        enableCookieDeletion: false,\n      };\n\n    const categorySettings = config.cookieCategoriesCollection.items;\n\n    const cookieCategoryMap = createCookieMapping(config.cookieCategoriesCollection.items);\n\n    // Settings for cookie deletion\n    const { enableCookieDeletion } = config;\n\n    return { categorySettings, cookieCategoryMap, enableCookieDeletion };\n  }, [config]);\n\n  // ==============================================================================================\n  // Internal State\n  // ==============================================================================================\n  const cookieDomain = getCookieDomain(inputCookieDomain);\n\n  const [userLocation, setUserLocation] = useState<string>('Unknown');\n\n  const [categoryState, setCategoryState] = useState<Record<string, boolean>>({});\n\n  const updateCategoryState = (key: string, value: boolean) => {\n    const newState = clone(categoryState);\n    newState[key] = value;\n    setCategoryState(newState);\n    setSaveButtonState(ButtonStates.Enabled);\n  };\n\n  const [saveButtonState, setSaveButtonState] = useState<ButtonStates>(ButtonStates.Disabled);\n\n  const updateSaveButton = () => {\n    setSaveButtonState(ButtonStates.Saved);\n\n    setTimeout(() => {\n      setSaveButtonState(ButtonStates.Disabled);\n    }, 3000);\n  };\n\n  const [grapheneClient, setGrapheneClient] = useState<BrowserGrapheneClient>();\n\n  // ==============================================================================================\n  // Helper Functions\n  // ==============================================================================================\n  const updateUserCookies = useCallback(\n    (cookiesToSet: Record<string, boolean>) => {\n      // If mappings have not been loaded, treat as noop\n      if (!cookieCategoryMap || !categorySettings) return;\n\n      setOptInCookies(cookieDomain, cookiesToSet);\n\n      const results = removeCookiesForNonacceptedCategories(\n        cookieDomain,\n        cookiesToSet,\n        cookieCategoryMap,\n        enableCookieDeletion\n      );\n\n      // log any cookie removals that were incomplete (indicates misconfiguration of cookie attributes)\n      for (const cookieName in results) {\n        // removal was successful, noop\n        if (results[cookieName]?.wasRemoved) continue;\n\n        // otherwise log so we can review the configuration.  Graphene doesn't support enough dimensions\n        // for us to store the full configuration, so domain and cookieName will have to do.\n        const dimensions: Dimensions = {\n          cookieName,\n          userLocation,\n        };\n        grapheneClient?.logMetric('tracking_cookie_misconfiguration', dimensions);\n      }\n    },\n    [\n      cookieDomain,\n      userLocation,\n      cookieCategoryMap,\n      categorySettings,\n      grapheneClient,\n      enableCookieDeletion,\n    ]\n  );\n\n  // ==============================================================================================\n  // useEffect calls\n  // ==============================================================================================\n\n  useEffect(() => {\n    const host = window.location.hostname;\n    const client = new BrowserGrapheneClient(Partition.COOKIE_MODAL_COMPONENTS, host);\n    setGrapheneClient(client);\n  }, [setGrapheneClient]);\n\n  useEffect(() => {\n    // If mappings have not been loaded, treat as noop\n    if (!categorySettings) return;\n\n    const retrieveUserCookies = () => {\n      // Calling getAllCookies in order to check current Cookies and to help set default values\n      const retrievedCookies = getAllCookies(categorySettings);\n      const hasPreviouslyAcceptedCookies = retrievedCookies[CategoryOptInCookie.Essential];\n\n      if (hasPreviouslyAcceptedCookies) {\n        setCategoryState(retrievedCookies);\n        clearInterval(interval);\n      }\n    };\n    const interval = setInterval(retrieveUserCookies, 1000);\n\n    // call immediately rather than awaiting the interval period\n    retrieveUserCookies();\n\n    return () => clearInterval(interval);\n  }, [categorySettings, setCategoryState]);\n\n  // Retrieve user's location\n  useEffect(() => {\n    // Wait for grapheneClient to initialize before executing\n    if (!grapheneClient) return;\n\n    // Retrieving user's country and region\n    const fetchUserRegion = async () => {\n      try {\n        const userLocation = await fetchUserLocation();\n        setUserLocation(userLocation);\n      } catch (unknownError) {\n        const error = parseError(unknownError);\n        grapheneClient.logError(displayName, 'userLocation', error);\n      }\n    };\n    void fetchUserRegion();\n  }, [setUserLocation, grapheneClient]);\n\n  // ==============================================================================================\n  // User Interaction handlers\n  // ==============================================================================================\n\n  const acceptSelected = () => {\n    // If mappings have not been loaded, treat as noop\n    if (!categorySettings) return;\n\n    const cookiesToSet = acceptCustomCookies(categorySettings, categoryState);\n    updateUserCookies(cookiesToSet);\n    updateSaveButton();\n    logUserAction('save_changes', cookiesToSet);\n\n    // Fire onSubmit event hook\n    onSubmit?.({\n      userLocation,\n      cookieAcceptance: cookiesToSet,\n    });\n  };\n\n  const logUserAction = (label: string, cookieCategories: Record<string, boolean>) => {\n    // Log event to event listener from GlobalComponentsContext\n    onEvent?.({\n      component: displayName,\n      action: EventAction.Click,\n      label,\n    });\n\n    // Also log event to dedicated CookieComponents Graphene Partition\n    const dimensions: Dimensions = {\n      preferences: `${cookieCategories[CategoryOptInCookie.Preferences] ?? false}`,\n      performance: `${cookieCategories[CategoryOptInCookie.Performance] ?? false}`,\n      marketing: `${cookieCategories[CategoryOptInCookie.Marketing] ?? false}`,\n      userLocation,\n    };\n    grapheneClient?.logMetric(`${label}_clicks_settings`, dimensions);\n  };\n\n  if (!config) {\n    return null;\n  }\n\n  const buttonProps: DesignAgnosticButtonProps = {\n    isDisabled: saveButtonState === ButtonStates.Disabled,\n    isPrimary: saveButtonState !== ButtonStates.Saved,\n    testId: 'mwp-cookie-settings-save-btn',\n    text: saveButtonState === ButtonStates.Saved ? config.changesSavedText : config.saveChangesText,\n    onClick: acceptSelected,\n  };\n\n  return (\n    <DesignAgnosticSection backgroundType={backgroundType}>\n      <div data-testid=\"mwp-cookie-settings-page-body\" className=\"settings-page-body\">\n        <CookieCategories\n          title={config.settingsScreenTitle}\n          cookieCategories={config.cookieCategoriesCollection.items}\n          categoriesState={categoryState}\n          updateCategoriesState={updateCategoryState}\n          activeToggleLabel={config.toggleEnabledText}\n          inactiveToggleLabel={config.toggleDisabledText}\n        />\n      </div>\n      <div data-testid=\"mwp-cookie-settings-page-footer\" className=\"settings-page-footer\">\n        <DesignAgnosticButton {...buttonProps} />\n      </div>\n    </DesignAgnosticSection>\n  );\n};\n\n// NOTE: for some reason displayName is not automatically deetected by ErrorBoundary.  Need to explicitly set it.\nCookieSettings.displayName = displayName;\n\nconst wrapped = withErrorBoundary(CookieSettings, Partition.COOKIE_MODAL_COMPONENTS);\n\nexport { wrapped as CookieSettings };\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport { useState } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { dataSetToAttributes } from '../../utils';\nimport { AccordionContext } from './AccordionContext';\nimport { accordionCss, titleCss } from './styles';\nimport type { AccordionProps } from './types';\n\nexport const Accordion: FC<AccordionProps> = ({\n  children,\n  multipleOpen = false,\n  title,\n  titleDataset,\n}) => {\n  useMotifStyles(MotifComponent.ACCORDION);\n\n  const [openIds, setOpenIds] = useState<string[]>([]);\n\n  return (\n    <AccordionContext.Provider\n      value={{\n        multipleOpen,\n        openIds,\n        setOpenIds,\n      }}\n    >\n      <div data-testid=\"accordion\" className={cx(MotifComponent.ACCORDION, accordionCss)}>\n        {title ? (\n          <h4 className={titleCss} {...dataSetToAttributes(titleDataset)}>\n            {title}\n          </h4>\n        ) : null}\n        {children}\n      </div>\n    </AccordionContext.Provider>\n  );\n};\n", "import type { ValueOf } from '../types';\n\nexport const Alignment = {\n  Left: 'Left',\n  Start: 'Start',\n  Center: 'Center',\n  End: 'End',\n  Right: 'Right',\n} as const;\n\nexport type Alignment = ValueOf<typeof Alignment>;\n\nexport const VerticalAlignment = {\n  Top: 'Top',\n  Middle: 'Middle',\n  Bottom: 'Bottom',\n};\n\nexport type VerticalAlignment = ValueOf<typeof VerticalAlignment>;\n\nexport const VideoPanelAlignment = {\n  TopRight: 'TopRight',\n  TopLeft: 'TopLeft',\n  TopCenter: 'TopCenter',\n  BottomLeft: 'BottomLeft',\n  BottomRight: 'BottomRight',\n  BottomCenter: 'BottomCenter',\n};\n\nexport type VideoPanelAlignment = ValueOf<typeof VideoPanelAlignment>;\n", "import type { ValueOf } from '../types';\n\nexport const BackgroundSize = {\n  Cover: 'cover',\n  Contain: 'contain',\n} as const;\n\nexport type BackgroundSize = ValueOf<typeof BackgroundSize>;\n\nexport const BackgroundRepeat = {\n  Repeat: 'repeat',\n  RepeatX: 'repeat-x',\n  RepeatY: 'repeat-y',\n  Space: 'space',\n  Round: 'round',\n  NoRepeat: 'no-repeat',\n};\n\nexport type BackgroundRepeat = ValueOf<typeof BackgroundRepeat>;\n\nexport const BackgroundPosition = {\n  Top: 'top',\n  Bottom: 'bottom',\n  Left: 'left',\n  Right: 'right',\n  Center: 'center',\n};\n\nexport type BackgroundPosition = ValueOf<typeof BackgroundPosition>;\n\n// This is not meant to be CSS styling but an enum for predefined styles\n// for the background media\nexport const BackgroundStyle = {\n  Normal: 'Normal',\n  Fixed: 'Fixed',\n} as const;\n\nexport type BackgroundStyle = ValueOf<typeof BackgroundStyle>;\n", "import { FontFamily } from '../components/Font/fontConstants';\n\n/** Placeholder token replaced with locale-specific fallback fonts at runtime. */\nexport const localeFontFallbackPlaceholder = '[locale specific font fallback]';\n\n/** Map of locale codes to their corresponding font families */\nexport const localeFallbackFontMap: Record<string, FontFamily> = {\n  'bn-BD': FontFamily.NOTO_SANS_BENGALI,\n  'bn-IN': FontFamily.NOTO_SANS_BENGALI,\n  'zh-Hans': FontFamily.NOTO_SANS_SC,\n  'zh-Hant': FontFamily.NOTO_SANS_TC,\n  'hi-IN': FontFamily.NOTO_SANS_DEVANAGARI,\n  'mr-IN': FontFamily.NOTO_SANS_DEVANAGARI,\n  'gu-IN': FontFamily.NOTO_SANS_GUJARATI,\n  'ja-JP': FontFamily.NOTO_SANS_JAPANESE,\n  'kn-IN': FontFamily.NOTO_SANS_KANNADA,\n  'ko-KR': FontFamily.NOTO_SANS_KR,\n  'ml-IN': FontFamily.NOTO_SANS_MALAYALAM,\n  pa: FontFamily.NOTO_SANS_GURMUKHI,\n  'ta-IN': FontFamily.NOTO_SANS_TAMIL,\n  'te-IN': FontFamily.NOTO_SANS_TELUGU,\n} as const;\n\n/**\n * Font tokens containing placeholders that need locale-specific fallback injection for Snapchat\n * branding.\n */\nexport const fontTokensWithPlaceholders = {\n  '--h1-font-family': `${FontFamily.PROGRAM_OT}, Helvetica Heading, Tahoma Heading, ${localeFontFallbackPlaceholder}, Arial, sans-serif`,\n  '--h2-font-family': `${FontFamily.PROGRAM_OT}, Helvetica Heading, Tahoma Heading, ${localeFontFallbackPlaceholder}, Arial, sans-serif`,\n} as const;\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery } from './layout';\n\n/**\n * @deprecated Use `<h*>` tags or h*Css classname instead.\n *\n *   Tracking: https://jira.sc-corp.net/browse/ENTWEB-8939\n */\nexport const MobileHeading = {\n  M100: css`\n    font-size: 36px;\n    line-height: 42px;\n    font-weight: 600;\n  `,\n  M200: css`\n    font-size: 32px;\n    line-height: 40px;\n    font-weight: 600;\n  `,\n  M300: css`\n    font-size: 24px;\n    line-height: 28px;\n    font-weight: 500;\n  `,\n  M400: css`\n    font-size: 20px;\n    font-weight: 600;\n    line-height: 23px;\n  `,\n  M500: css`\n    font-size: 18px;\n    font-weight: 400;\n    line-height: 28px;\n  `,\n  M600: css`\n    font-size: 16px;\n    font-weight: 500;\n    line-height: 19px;\n  `,\n  M700: css`\n    font-size: 12px;\n    font-weight: 600;\n    line-height: 14px;\n  `,\n};\n\n/**\n * @deprecated Use `<h*>` tags or h*Css classname instead.\n *\n *   Tracking: https://jira.sc-corp.net/browse/ENTWEB-8939\n */\nexport const Heading = {\n  H100: css`\n    font-size: 64px;\n    font-weight: 600;\n    line-height: 70px;\n    ${mobileMediaQuery} {\n      ${MobileHeading.M100}\n    }\n  `,\n  H200: css`\n    font-size: 48px;\n    font-weight: 600;\n    line-height: 64px;\n    ${mobileMediaQuery} {\n      ${MobileHeading.M200}\n    }\n  `,\n  H300: css`\n    font-size: 28px;\n    font-weight: 500;\n    line-height: 34px;\n    ${mobileMediaQuery} {\n      ${MobileHeading.M300}\n    }\n  `,\n  H400: css`\n    font-size: 24px;\n    font-weight: 500;\n    line-height: 29px;\n    ${mobileMediaQuery} {\n      ${MobileHeading.M400}\n    }\n  `,\n  H500: css`\n    font-size: 20px;\n    font-weight: 500;\n    line-height: 28px;\n    ${mobileMediaQuery} {\n      ${MobileHeading.M500}\n    }\n  `,\n  H600: css`\n    font-size: 16px;\n    font-weight: 500;\n    line-height: 19px;\n    ${mobileMediaQuery} {\n      ${MobileHeading.M600}\n    }\n  `,\n  H700: css`\n    font-size: 12px;\n    font-weight: 600;\n    line-height: 14px;\n    ${mobileMediaQuery} {\n      ${MobileHeading.M700}\n    }\n  `,\n};\n\n/** @deprecated Use p2Css instead. */\nexport const FontParagraph = {\n  P100: css`\n    font-size: 16px;\n    font-weight: 400;\n    line-height: 26px;\n  `,\n};\n", "import { css } from '@emotion/css';\n\nexport const noHorizontalScrollbarsCss = css`\n  overflow: -moz-scrollbars-none; /* Hide scroll bar in Firefox */\n  -ms-overflow-style: none; /* Hide scroll bar in IE */\n  ::-webkit-scrollbar {\n    width: 0 !important; /* Hide scrollbar in Webkit browsers */\n  }\n`;\n", "import { css } from '@emotion/css';\n\nimport { Alignment, mobileMediaQuery } from '../constants';\n\nexport const getTextAlignValue = (alignment: Alignment): 'center' | 'start' | 'end' => {\n  switch (alignment) {\n    case Alignment.Center:\n      return 'center';\n    case Alignment.Start:\n    case Alignment.Left:\n      return 'start';\n    case Alignment.End:\n    case Alignment.Right:\n      return 'end';\n    default:\n      throw new Error(`specified alignment: ${alignment} is not accounted for!`);\n  }\n};\n\nexport const getFlexAlignValue = (alignment: Alignment): 'center' | 'flex-start' | 'flex-end' => {\n  switch (alignment) {\n    case Alignment.Center:\n      return 'center';\n    case Alignment.Start:\n    case Alignment.Left:\n      return 'flex-start';\n    case Alignment.End:\n    case Alignment.Right:\n      return 'flex-end';\n    default:\n      throw new Error(`specified alignment: ${alignment} is not accounted for!`);\n  }\n};\n\nconst allAlignments: Alignment[] = Object.values(Alignment);\n\n/** Precomputed lookup for the text alignment css. */\nexport const textAlignmentCss = Object.fromEntries(\n  allAlignments.map(alignment => [\n    alignment,\n    css`\n      text-align: ${getTextAlignValue(alignment)};\n    `,\n  ])\n) as Record<Alignment, string>;\n\n/** Precomputed lookup for the flex alignment css. */\nexport const alignItemsCss = Object.fromEntries(\n  allAlignments.map(alignment => [\n    alignment,\n    css`\n      align-items: ${getFlexAlignValue(alignment)};\n    `,\n  ])\n) as Record<Alignment, string>;\n\n/** Precomputed lookup for the grid alignment css. */\nexport const justifyItemsCss = Object.fromEntries(\n  allAlignments.map(alignment => [\n    alignment,\n    css`\n      justify-items: ${getFlexAlignValue(alignment)};\n    `,\n  ])\n) as Record<Alignment, string>;\n\n/** Precomputed lookup for the flex-column alignment. */\nexport const justifyContentCss = Object.fromEntries(\n  allAlignments.map(alignment => [\n    alignment,\n    css`\n      justify-content: ${getFlexAlignValue(alignment)};\n    `,\n  ])\n) as Record<Alignment, string>;\n\n/** Precomputed lookup for the flex-column alignment on mobile. */\nexport const justifyContentMobileCss = Object.fromEntries(\n  allAlignments.map(alignment => [\n    alignment,\n    css`\n      ${mobileMediaQuery} {\n        justify-content: ${getFlexAlignValue(alignment)};\n      }\n    `,\n  ])\n) as Record<Alignment, string>;\n\n/** Precomputed lookup for the text and flex alignment css. */\nexport const alignmentCss = Object.fromEntries(\n  allAlignments.map(alignment => [\n    alignment,\n    css`\n      text-align: ${getTextAlignValue(alignment)};\n      align-items: ${getFlexAlignValue(alignment)};\n      justify-items: ${getFlexAlignValue(alignment)};\n      justify-content: ${getFlexAlignValue(alignment)};\n    `,\n  ])\n) as Record<Alignment, string>;\n\n/** Precomputed lookup for the mobile text and flex alignment css. */\nexport const mobileAlignmentCss = Object.fromEntries(\n  allAlignments.map(alignment => [\n    alignment,\n    css`\n      ${mobileMediaQuery} {\n        text-align: ${getTextAlignValue(alignment)};\n        align-items: ${getFlexAlignValue(alignment)};\n        justify-items: ${getFlexAlignValue(alignment)};\n        justify-content: ${getFlexAlignValue(alignment)};\n      }\n    `,\n  ])\n) as Record<Alignment, string>;\n", "import { createContext } from 'react';\n\nimport type { BackgroundColor } from '../constants';\nimport type { MotifScheme } from '../motif';\n\nexport const BlockBackgroundColorContext = createContext<BackgroundColor | MotifScheme | undefined>(\n  undefined\n);\n", "export const formatDateToDatetime = (date?: Date): string | undefined => {\n  if (!date || Number.isNaN(date.getTime())) return undefined;\n  return date.toISOString().substring(0, 10);\n};\n", "import { localeFallbackFontMap, localeFontFallbackPlaceholder } from '../constants';\nimport type { Motif, MotifRootVar } from '../motif';\nimport { mergeMotifs, MotifComponent, motifFontRampVariables, MotifScheme } from '../motif';\n\n/**\n * Replaces the locale-specific font fallback placeholder in a font-family token value with the\n * provided replacement value. If no replacement value is provided, the placeholder is removed. Also\n * cleans up any resulting double commas in the font-family string.\n *\n * @param fontFamilyTokenValue - The original font-family CSS value containing a placeholder.\n * @param fallbackFont - The font name to substitute for the placeholder.\n * @returns\n */\nexport const replaceFontFallbackPlaceholder = (fontFamilyTokenValue: string, fallbackFont = '') => {\n  return fontFamilyTokenValue\n    .replace(localeFontFallbackPlaceholder, fallbackFont)\n    .replace(/,\\s*,/g, ','); // Remove double commas\n};\n\n/**\n * Type guard to check if a token name is a valid motif font ramp variable.\n *\n * @param tokenName - Token name to validate.\n */\nconst isFontRampToken = (tokenName: string): tokenName is MotifRootVar =>\n  (motifFontRampVariables as readonly string[]).includes(tokenName);\n\n/**\n * Builds font ramp tokens with locale-specific fallback fonts injected.\n *\n * @param baseTokens - The original font tokens to process.\n * @param fallbackFont - The locale-specific font family to inject.\n */\nconst buildLocalizedFontRampTokens = (\n  baseTokens: Record<MotifRootVar, string>,\n  fallbackFont: string\n): Partial<Record<MotifRootVar, string>> => {\n  const localizedTokens: Partial<Record<MotifRootVar, string>> = {};\n\n  for (const tokenName of Object.keys(baseTokens)) {\n    if (isFontRampToken(tokenName)) {\n      const originalValue = baseTokens[tokenName] ?? '';\n      localizedTokens[tokenName] = replaceFontFallbackPlaceholder(originalValue, fallbackFont);\n    }\n  }\n\n  return localizedTokens;\n};\n\n/**\n * Returns a motif with locale-specific font-family fallbacks appended for the requested tokens.\n *\n * @param locale - The locale code used to determine fallback fonts.\n * @param baseMotif - The base motif to augment.\n * @param fontTokensToLocalize - Font-family tokens that need fallback injection.\n */\nexport const getMotifWithFontFallbacks = (\n  locale: string,\n  baseMotif?: Motif,\n  fontTokensToLocalize?: Record<string, string>\n) => {\n  if (!baseMotif) {\n    return undefined;\n  }\n\n  const fallbackFont = localeFallbackFontMap[locale];\n\n  if (!fallbackFont || !fontTokensToLocalize) {\n    return baseMotif;\n  }\n\n  /** Font ramp tokens with locale-specific fallbacks injected. */\n  const localizedFontRampTokens = buildLocalizedFontRampTokens(fontTokensToLocalize, fallbackFont);\n\n  return mergeMotifs(baseMotif, {\n    name: `${baseMotif.name}Localized${locale}`,\n    fontFamily: [...baseMotif.fontFamily, fallbackFont],\n    [MotifScheme.DEFAULT]: {\n      name: baseMotif[MotifScheme.DEFAULT].name,\n      legacyName: baseMotif[MotifScheme.DEFAULT].legacyName,\n      [MotifComponent.ROOT]: {\n        ...baseMotif[MotifScheme.DEFAULT][MotifComponent.ROOT],\n        ...localizedFontRampTokens,\n      },\n    },\n  });\n};\n", "import type { BackgroundColor } from '../constants';\nimport type { MotifScheme } from '../motif';\nimport { getMotifSchemeForLegacyBackgroundColor } from '../motif';\n\n/**\n * Class name within which theme variables will be applied.\n *\n * Themes are toggled based on the background color.\n *\n * @deprecated Use `MotifScheme` directly instead.\n */\nexport const getBackgroundClassName = (\n  backgroundColor?: BackgroundColor | MotifScheme\n): string | undefined =>\n  backgroundColor ? getMotifSchemeForLegacyBackgroundColor(backgroundColor) : undefined;\n", "// See https://support.google.com/analytics/answer/1033981\nexport interface TrackingParameters {\n  utm_source: string;\n  utm_medium?: string;\n  utm_campaign?: string;\n  utm_content?: string;\n}\n\n// Based on https://stackoverflow.com/questions/10687099/how-to-test-if-a-url-string-is-absolute-or-relative\nexport const isAbsoluteUrl = /^(?:[a-z]+:)?\\/\\//i;\n\n/**\n * Appends tracking parameters to the URL.\n *\n * Does nothing if the URL is empty or is relative.\n */\nexport const appendTrackingParameters = (\n  href: string | undefined,\n  parameters: TrackingParameters\n): string | undefined => {\n  if (!href || !isAbsoluteUrl.test(href)) {\n    return href;\n  }\n\n  try {\n    const url = new URL(href);\n\n    Object.entries(parameters).forEach(([key, value]) => {\n      url.searchParams.set(key, value);\n    });\n\n    return url.toString();\n  } catch {\n    return undefined;\n  }\n};\n", "import { useEffect, useState } from 'react';\n\n/**\n * Represents the window focus state.\n *\n * @property {boolean} isFocused - Indicates whether the window is currently focused (true) or\n *   blurred (false).\n * @interface WindowFocused\n */\nexport interface WindowFocused {\n  isFocused: boolean;\n}\n\n/**\n * Hook to track the focus state of the window.\n *\n * @function useWindowFocused\n * @param {boolean} enabled - Indicates whether to enable focus tracking.\n * @returns {WindowFocused} An object containing the window focus state.\n */\nexport function useWindowFocused(enabled: boolean): WindowFocused {\n  const [isFocused, setIsFocused] = useState(true);\n\n  useEffect(() => {\n    const handleBlur = () => setIsFocused(false);\n    const handleFocus = () => setIsFocused(true);\n\n    if (enabled) {\n      window.addEventListener('blur', handleBlur);\n      window.addEventListener('focus', handleFocus);\n    } else {\n      window.removeEventListener('blur', handleBlur);\n      window.removeEventListener('focus', handleBlur);\n    }\n\n    return () => {\n      window.removeEventListener('blur', handleBlur);\n      window.removeEventListener('focus', handleBlur);\n    };\n  }, [enabled]);\n\n  return {\n    isFocused,\n  };\n}\n", "import { createContext } from 'react';\n\ninterface AccordionContextProps {\n  multipleOpen: boolean;\n  openIds: string[];\n  setOpenIds: (ids: string[]) => void;\n}\n\nexport const AccordionContext = createContext<AccordionContextProps>({\n  multipleOpen: false,\n  openIds: [],\n  setOpenIds: () => null,\n});\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, nonMobileMediaQuery } from '../../constants';\nimport { m } from '../../motif/m';\n\nexport const accordionCss = css`\n  padding-bottom: ${m('--spacing-l')};\n`;\n\nexport const titleCss = css`\n  border-bottom: 1px solid ${m('--accordion-divider-border-color')};\n  color: ${m('--accordion-header-color')};\n  margin-block: 0;\n  padding: ${m('--accordion-header-padding')} 0;\n\n  ${nonMobileMediaQuery} {\n    font-size: ${m('--accordion-header-desktop-font-size')};\n    font-weight: ${m('--accordion-header-desktop-font-weight')};\n    line-height: ${m('--accordion-header-desktop-font-line-height')};\n  }\n\n  ${mobileMediaQuery} {\n    font-size: ${m('--accordion-header-mobile-font-size')};\n    font-weight: ${m('--accordion-header-mobile-font-weight')};\n    line-height: ${m('--accordion-header-mobile-font-line-height')};\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport { useCallback, useContext, useEffect, useRef } from 'react';\n\nimport { ToggleTarget } from '../../../hooks/useToggleState';\nimport { m } from '../../../motif';\nimport { DetailsSummary } from '../../DetailsSummary';\nimport { AccordionContext } from '../AccordionContext';\nimport { accordionItemCss, itemChevronCss, summaryCss } from './styles';\nimport type { AccordionItemProps } from './types';\n\n// TODO: Move these into constants\nconst duration = 400;\nconst easing = 'ease-out';\n\nexport const AccordionItem: FC<AccordionItemProps> = ({\n  id,\n  title,\n  children,\n  titleDataset,\n  className,\n  summaryClassName,\n  onToggle: onToggleProp,\n}) => {\n  const { multipleOpen, openIds, setOpenIds } = useContext(AccordionContext);\n\n  const detailsRef = useRef<HTMLDetailsElement | null>(null);\n  const summaryRef = useRef<HTMLElement | null>(null);\n\n  const animation = useRef<Animation | null>(null);\n  const isClosing = useRef(false);\n  const isExpanding = useRef(false);\n\n  const isOpen = openIds.includes(id);\n\n  // syncs the intial state of the two components per DetailsSummary comment on line 81\n  useEffect(() => {\n    if (!detailsRef.current) {\n      return;\n    }\n\n    if (isOpen !== detailsRef.current.open) {\n      detailsRef.current.open = isOpen;\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  const shrink = useCallback(() => {\n    isClosing.current = true;\n\n    if (!detailsRef?.current || !summaryRef?.current) {\n      return;\n    }\n\n    detailsRef.current.style.overflow = 'hidden';\n\n    const startHeight = `${detailsRef.current.offsetHeight}px`;\n    const endHeight = `${summaryRef.current.offsetHeight}px`;\n\n    if (animation.current) {\n      animation.current.cancel();\n    }\n\n    animation.current = detailsRef.current.animate?.(\n      { height: [startHeight, endHeight] },\n      { duration, easing }\n    );\n\n    animation.current?.finished\n      .then(() => onAnimationFinish(false))\n      .catch(() => {\n        isClosing.current = false;\n      });\n  }, []);\n\n  // syncs visual state with actual state if item is closed by another source (e.g. multiple open not allowed, anotehr item opened)\n  useEffect(() => {\n    if (isOpen) {\n      return;\n    }\n\n    if (detailsRef.current?.open) {\n      shrink();\n    }\n  }, [isOpen, shrink]);\n\n  const expand = useCallback(() => {\n    isExpanding.current = true;\n\n    if (!detailsRef.current || !summaryRef.current) {\n      return;\n    }\n\n    detailsRef.current.style.overflow = 'hidden';\n\n    const startHeight = `${detailsRef.current.offsetHeight}px`;\n    const endHeight = `${\n      summaryRef.current.offsetHeight +\n      detailsRef.current.scrollHeight -\n      summaryRef.current.offsetHeight\n    }px`;\n\n    if (animation.current) {\n      animation.current.cancel();\n    }\n\n    animation.current = detailsRef.current.animate?.(\n      { height: [startHeight, endHeight] },\n      { duration, easing }\n    );\n\n    animation.current?.finished\n      .then(() => onAnimationFinish(true))\n      .catch(() => {\n        isExpanding.current = false;\n      });\n  }, []);\n\n  const open = useCallback(() => {\n    if (!detailsRef.current) {\n      return;\n    }\n\n    detailsRef.current.style.height = `${detailsRef.current.offsetHeight}px`;\n    detailsRef.current.open = true;\n    window.requestAnimationFrame(expand);\n  }, [expand]);\n\n  const onToggle = useCallback(\n    (toggle: ToggleTarget) => {\n      if (multipleOpen) {\n        setOpenIds(toggle === ToggleTarget.OFF ? openIds.filter(o => o !== id) : [...openIds, id]);\n      } else {\n        setOpenIds(toggle === ToggleTarget.OFF ? [] : [id]);\n      }\n\n      onToggleProp?.(toggle === ToggleTarget.ON);\n\n      if (!detailsRef.current) {\n        return;\n      }\n\n      if (toggle === ToggleTarget.ON) {\n        open();\n      } else {\n        shrink();\n      }\n    },\n    [multipleOpen, setOpenIds, openIds, id, open, shrink, onToggleProp]\n  );\n\n  const onAnimationFinish = (open: boolean) => {\n    if (!detailsRef.current) {\n      return;\n    }\n\n    detailsRef.current.open = open;\n    detailsRef.current.style.height = '';\n    detailsRef.current.style.overflow = '';\n    isExpanding.current = false;\n    isClosing.current = false;\n    animation.current = null;\n  };\n\n  return (\n    <DetailsSummary\n      detailsRef={detailsRef}\n      summaryRef={summaryRef}\n      summary={title}\n      chevronProps={{ className: itemChevronCss, fill: m('--icon-color') }}\n      className={cx(accordionItemCss, className)}\n      onToggle={onToggle}\n      summaryProps={{\n        dataset: titleDataset,\n        className: cx(summaryCss, summaryClassName),\n      }}\n      transitionDurationMs={duration}\n      open={isOpen}\n    >\n      {children}\n    </DetailsSummary>\n  );\n};\n", "/* eslint-disable no-console */\nimport { noop } from 'radashi';\nimport { useCallback, useEffect, useState } from 'react';\n\n/**\n * Enum for different states for a toggle attribute.\n *\n * Useful for state management like collapse/expand toggles where the transition state matters.\n */\nexport enum ToggleState {\n  OFF = 'off',\n  ON = 'on',\n  TURNING_OFF = 'turning-off',\n  TURNING_ON = 'turning-on',\n}\n\n/** Enum for target state that may be passed into the 'toggle' function. */\nexport enum ToggleTarget {\n  OFF = 'off',\n  ON = 'on',\n  TOGGLE = 'toggle',\n}\n\nexport interface UseToggleStateInit {\n  initialValue?: ToggleState;\n\n  /** Callback for when the state changes. */\n  onToggle?: (newState: ToggleState, previousState: ToggleState) => void;\n\n  /** Delay from TURNING_ON -> ON and TURNING_OFF -> OFF */\n  transitionDurationMs?: number;\n}\n\nconst defaultUseToggleStateInit: Required<UseToggleStateInit> = {\n  initialValue: ToggleState.OFF,\n  onToggle: noop,\n  transitionDurationMs: 250,\n};\n\nexport interface UseToggleStateExport {\n  state: ToggleState;\n  toggle: (target?: ToggleTarget) => void;\n}\n\n/**\n * Hook for being able to set a value to ON/OFF and get notified while transitions happen.\n *\n * Sample usage:\n *\n * ```typescript\n * const { state: myState, toggle: toggleMyState } = useToggleState({\n *   initialValue: myIntialBooleanValue ? ToggleState.ON : ToggleState.OFF,\n *   onToggle: (newState, _oldState) => {\n *     switch (newState) {\n *       case ToggleState.ON:\n *         break;\n *       case ToggleState.TURNING_ON:\n *         break;\n *       case ToggleState.OFF:\n *         break;\n *       case ToggleState.TURNING_OFF:\n *         break;\n *       default:\n *         break;\n *     }\n *   },\n * });\n * ```\n */\nexport const useToggleState = (init: UseToggleStateInit): UseToggleStateExport => {\n  const { initialValue, onToggle, transitionDurationMs } = {\n    ...defaultUseToggleStateInit,\n    ...init,\n  };\n\n  const [state, setState] = useState<ToggleState>(initialValue);\n\n  /** Helper function for updating internal state and notifying listeners that state updated. */\n  const setStateAndNotify = useCallback(\n    (newState: ToggleState, oldState: ToggleState) => {\n      if (newState === oldState) {\n        return;\n      }\n\n      setState(newState);\n      onToggle(newState, oldState);\n    },\n    [onToggle, setState]\n  );\n\n  /** Effect that schedules changes from TURNING_OFF -> OFF and TURNING_ON -> ON. */\n  useEffect(() => {\n    let transitionTimeout: ReturnType<typeof setTimeout>;\n\n    if (state === ToggleState.TURNING_OFF) {\n      transitionTimeout = setTimeout(\n        setStateAndNotify.bind(this, ToggleState.OFF, ToggleState.TURNING_OFF),\n        transitionDurationMs\n      );\n    }\n\n    if (state === ToggleState.TURNING_ON) {\n      transitionTimeout = setTimeout(\n        setStateAndNotify.bind(this, ToggleState.ON, ToggleState.TURNING_ON),\n        transitionDurationMs\n      );\n    }\n\n    return () => {\n      transitionTimeout && clearTimeout(transitionTimeout);\n    };\n  }, [state, transitionDurationMs, setStateAndNotify]);\n\n  const turnOn = () => {\n    if (state !== ToggleState.OFF) {\n      return;\n    }\n\n    setStateAndNotify(ToggleState.TURNING_ON, state);\n  };\n\n  const turnOff = () => {\n    if (state !== ToggleState.ON) {\n      return;\n    }\n\n    setStateAndNotify(ToggleState.TURNING_OFF, state);\n  };\n\n  const toggle = (target = ToggleTarget.TOGGLE) => {\n    if (target === ToggleTarget.ON) {\n      turnOn();\n    } else if (target === ToggleTarget.OFF) {\n      turnOff();\n    } else {\n      const isOff = state === ToggleState.TURNING_OFF || state === ToggleState.OFF;\n      isOff ? turnOn() : turnOff();\n    }\n  };\n\n  return { state, toggle };\n};\n", "/* eslint-disable no-console */\nimport { cx } from '@emotion/css';\nimport { isNullish } from 'radashi';\nimport type { CSSProperties, FC, MouseEventHandler, PropsWithChildren, ReactNode } from 'react';\nimport { useCallback, useEffect, useRef } from 'react';\n\nimport { ToggleState, ToggleTarget, useToggleState } from '../../hooks/useToggleState';\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { dataSetToAttributes } from '../../utils';\nimport { Icon } from '../Icon';\nimport {\n  chevronCss,\n  detailsAnimationCss,\n  detailsCss,\n  detailsSummaryAnimationDurationCssVar,\n  summaryCss,\n} from './DetailsSummary.styles';\nimport type { DetailsSummaryProps } from './types';\n\nexport const DetailsSummary: FC<PropsWithChildren<DetailsSummaryProps>> = ({\n  showChevron = true,\n  chevronProps,\n  onToggle,\n  summary,\n  summaryProps,\n  children,\n  className: detailsClassName,\n  fadeInAnimation = true,\n  transitionDurationMs,\n  open: forceOpen,\n  detailsRef: parentDetailsRef,\n  summaryRef,\n  disableScrollToOnOpen,\n  forceOpenAttribute,\n  ...detailsProps\n}) => {\n  // If the 'forceOpen' is set it effectively takes state control away from this component.\n  const parentHasStateControl = !isNullish(forceOpen);\n  useMotifStyles(MotifComponent.DETAIL_SUMMARY);\n\n  const scrollTimeoutRef = useRef<ReturnType<typeof setTimeout>>();\n  // we need this for scrolling into view on click\n  const internalDetailsRef = useRef<HTMLDetailsElement | null>(null);\n\n  // assignign details to two refs because the prop ref\n  // isn't always available when we need it in the scrollTo handler\n  const setDetailRefs = useCallback(\n    (el: HTMLDetailsElement) => {\n      if (parentDetailsRef) {\n        parentDetailsRef.current = el;\n      }\n      internalDetailsRef.current = el;\n    },\n    [parentDetailsRef]\n  );\n\n  const { state: isOpenState, toggle: toggleIsOpenInternal } = useToggleState({\n    initialValue: parentHasStateControl && forceOpen ? ToggleState.ON : ToggleState.OFF,\n    transitionDurationMs,\n  });\n\n  // If parent controls the open state, then we need to update internal state to match.\n  useEffect(() => {\n    if (!parentHasStateControl) {\n      return;\n    }\n\n    toggleIsOpenInternal(forceOpen ? ToggleTarget.ON : ToggleTarget.OFF);\n  }, [parentHasStateControl, forceOpen, toggleIsOpenInternal]);\n\n  // If parent has no control, then only notify 'onToggle'.\n  useEffect(() => {\n    if (parentHasStateControl || !onToggle) {\n      return;\n    }\n\n    onToggle(isOpenState === ToggleState.ON ? ToggleTarget.ON : ToggleTarget.OFF);\n  }, [onToggle, isOpenState, parentHasStateControl]);\n\n  const toggleWithAnimation: MouseEventHandler<HTMLDetailsElement> = event => {\n    // Stop the toggle event from happening. We fire it off manually later.\n    event.preventDefault();\n\n    // This notifies the parent of a click event and doesn't change internal state.\n    if (parentHasStateControl) {\n      onToggle?.(forceOpen ? ToggleTarget.OFF : ToggleTarget.ON);\n    } else {\n      toggleIsOpenInternal();\n      // NOTE: 'onToggle' is notified separately (see above).\n    }\n\n    if (!disableScrollToOnOpen) {\n      // clears any existing timeouts so we dont scroll when user clicks quickly\n      clearTimeout(scrollTimeoutRef.current);\n\n      // this is fired during the onClick, and we only need to scroll if the target\n      const needsScroll = parentHasStateControl ? !forceOpen : !internalDetailsRef?.current?.open;\n\n      if (needsScroll) {\n        scrollTimeoutRef.current = setTimeout(() => {\n          internalDetailsRef?.current?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n        }, transitionDurationMs);\n      }\n    }\n  };\n\n  /**\n   * Keeps details open of forceOpenAttribute is set. The parent should be responsible for\n   * controlling the open attribute in this case since they may have animations that rely on the\n   * open attribute.\n   *\n   * Otherwise, it is not a controlled component and the native open should just match the internal\n   * toggle state.\n   */\n  const isNativeOpen = forceOpenAttribute || isOpenState !== ToggleState.OFF;\n\n  const { className: summaryClassName, dataset, ...otherSummaryProps } = summaryProps ?? {};\n\n  const getTitle = (summary: ReactNode) => {\n    if (typeof summary !== 'string') return undefined;\n\n    return summary;\n  };\n\n  return (\n    <details\n      ref={setDetailRefs}\n      className={cx(MotifComponent.DETAIL_SUMMARY, detailsCss, detailsClassName, {\n        [detailsAnimationCss]: fadeInAnimation,\n      })}\n      open={isNativeOpen}\n      data-state={isOpenState}\n      {...detailsProps}\n      style={\n        {\n          ...detailsProps.style,\n          [detailsSummaryAnimationDurationCssVar]: `${transitionDurationMs ?? 250}ms`,\n        } as CSSProperties\n      }\n    >\n      <summary\n        ref={summaryRef}\n        role=\"button\"\n        tabIndex={0}\n        title={getTitle(summary)}\n        className={cx(summaryCss, summaryClassName)}\n        onClick={toggleWithAnimation}\n        {...dataSetToAttributes(dataset)}\n        {...otherSummaryProps}\n      >\n        {summary}\n        {showChevron && (\n          <Icon\n            className={cx(chevronCss, chevronProps?.className)}\n            name=\"chevron-down\"\n            fill={chevronProps?.fill}\n          />\n        )}\n      </summary>\n      {children}\n    </details>\n  );\n};\nDetailsSummary.displayName = 'DetailsSummary';\n", "import { css, keyframes } from '@emotion/css';\n\n// TODO: Optimization: Inject the keyframe into global once.\n\nexport interface AnimationProps {\n  duration?: string;\n  curve?: string;\n  delay?: string;\n  iterationCount?: number;\n  direction?: 'normal' | 'reverse' | 'alternate' | 'alternate-reverse';\n  fillMode?: 'forwards' | 'backwards' | 'both';\n  playState?: 'paused' | 'running';\n}\n\n/** Keyframes for fading in an element. */\nexport const fadeInKeyframes = keyframes`\n    0% {\n      opacity: 0;\n    }\n    100% {\n      opacity: 1;\n    }\n`;\n\n/** Keyframes for fading out an element. */\nexport const fadeOutKeyframes = keyframes`\n    0% {\n      opacity: 1;\n    }\n    100% {\n      opacity: 0;\n    }\n`;\n\nconst animationPropsToCssProp = (props: AnimationProps): string => {\n  const keysInOrder: Array<keyof AnimationProps> = [\n    'duration',\n    'curve',\n    'delay',\n    'iterationCount',\n    'direction',\n    'fillMode',\n    'playState',\n  ];\n  const valuesInOrder = keysInOrder.map(key => props[key]).filter(value => !!value);\n  return valuesInOrder.join(' ');\n};\n\nexport const opacityFadeInCss = (\n  animationProps: AnimationProps = { duration: '250ms', curve: 'ease-out' }\n): string => css`\n  animation: ${fadeInKeyframes} ${animationPropsToCssProp(animationProps)};\n`;\n\nexport const opacityFadeOutCss = (\n  animationProps: AnimationProps = { duration: '250ms', curve: 'ease-out' }\n): string => css`\n  animation: ${fadeOutKeyframes} ${animationPropsToCssProp(animationProps)};\n`;\n\nexport const rotateCss = (\n  startDegrees = 0,\n  endDegrees = 360,\n  animationProps: AnimationProps = { duration: '250ms', curve: 'linear' }\n): string => css`\n  @keyframes rotate {\n    0% {\n      transform: rotate(${startDegrees}deg);\n    }\n    100% {\n      transform: rotate(${endDegrees}deg);\n    }\n  }\n\n  animation: rotate ${animationPropsToCssProp(animationProps)};\n`;\n\n/** Rip of android's FastOutSlowInInterpolator curve. See https://cubic-bezier.com/#.4,0,.2,1 */\nexport const androidFastOutSlowInCurve = 'cubic-bezier(0.4, 0.0, 0.2, 1)';\n/** Rip of android's LinearOutSlowInInterpolator curve. See https://cubic-bezier.com/#0,0,.2,1 */\nexport const androidLinearOutSlowIn = 'cubic-bezier(0.0, 0.0, 0.2, 1)';\n\nexport const slideUpCss = (\n  animationProps: AnimationProps = { duration: '250ms', curve: androidFastOutSlowInCurve }\n): string => css`\n  @keyframes slideUp {\n    0% {\n      transform: translateY(0);\n    }\n    100% {\n      transform: translateY(-100vh);\n    }\n  }\n\n  animation: slideUp ${animationPropsToCssProp(animationProps)};\n`;\n\nexport const slideDownCss = (\n  animationProps: AnimationProps = {\n    duration: '250ms',\n    curve: androidLinearOutSlowIn,\n  }\n): string => css`\n  @keyframes slideDown {\n    0% {\n      transform: translateY(-100vh);\n    }\n    100% {\n      transform: translateY(0);\n    }\n  }\n\n  animation: slideDown ${animationPropsToCssProp(animationProps)};\n`;\n", "import { css } from '@emotion/css';\n\nimport { fadeInKeyframes, fadeOutKeyframes } from '../../constants/animation';\n\nexport const detailsSummaryAnimationDurationCssVar = '--animation-duration';\n\nexport const detailsCss = css`\n  & > summary {\n    /* Prevents selection when rapidly expanding and collapsing the content */\n    user-select: none;\n\n    cursor: pointer;\n  }\n\n  scroll-margin: 40px;\n\n  /* Prevents keyboard selection of focusable elements that the panel is collapsed. */\n  &[data-state='off'] > summary + * {\n    visibility: hidden;\n  }\n`;\n\nexport const detailsAnimationCss = css`\n  &[data-state='turning-on'] > summary + * {\n    animation: ${fadeInKeyframes} var(${detailsSummaryAnimationDurationCssVar}) ease-out;\n  }\n\n  &[data-state='turning-off'] > summary + * {\n    animation: ${fadeOutKeyframes} var(${detailsSummaryAnimationDurationCssVar}) ease-out;\n  }\n`;\n\nexport const chevronCss = css`\n  justify-self: center;\n  width: 12px;\n  height: 12px;\n\n  transform: rotate(0deg); /* 'up' */\n  transition: transform 250ms;\n\n  details[data-state='on'] > summary > &,\n  details[data-state='turning-on'] > summary > & {\n    transform: rotate(180deg); /* 'down', ccw */\n  }\n\n  *[dir='rtl'] details[data-state='on'] > summary > &,\n  *[dir='rtl'] details[data-state='turning-on'] > summary > & {\n    transform: rotate(-180deg); /* 'down', clockwise */\n  }\n  position: absolute;\n  right: 0;\n\n  /* stylelint-disable-next-line no-descending-specificity */\n  *[dir='rtl'] & {\n    right: unset;\n    left: 0;\n  }\n`;\n\nexport const summaryCss = css`\n  margin: 0;\n  position: relative; /* To position the chveron absolutely. */\n\n  /* In webkit the arrow is rendered as a list icon; so we hide that, too. */\n  /* We add our own arrow so we need to hid the default one. */\n  ::-webkit-details-marker {\n    display: none;\n  }\n  list-style-type: none;\n\n  display: flex;\n  align-items: center;\n`;\n", "import { css } from '@emotion/css';\n\nimport { MobileHeading } from '../../../constants';\nimport { m } from '../../../motif';\n\nexport const accordionItemCss = css`\n  border-bottom: 1px solid ${m('--accordion-divider-border-color')};\n  scroll-margin: 40px;\n  overflow-y: hidden;\n  overflow-x: auto;\n\n  section {\n    margin-bottom: 0;\n    padding: ${m('--spacing-xs')} ${m('--spacing-xxxl')} ${m('--spacing-l')} ${m('--spacing-m')};\n  }\n`;\n\nexport const summaryCss = css`\n  ${MobileHeading.M500}\n  align-items: center;\n  cursor: pointer;\n  display: flex;\n  font-weight: 500;\n  justify-content: space-between;\n  margin: 0;\n  padding-block: ${m('--spacing-m')};\n  padding-inline: ${m('--spacing-m')} 52px;\n  user-select: none;\n\n  /* Prevents keyboard selection of focusable elements that the panel is collapsed. */\n  &[data-state='off'] + * {\n    visibility: hidden;\n  }\n\n  /* In webkit the arrow is rendered as a list icon; so we hide that, too. */\n  /* We add our own arrow so we need to hid the default one. */\n  ::-webkit-details-marker {\n    display: none;\n  }\n  list-style-type: none;\n\n  > svg {\n    right: ${m('--spacing-m')};\n  }\n\n  *[dir='rtl'] & svg {\n    left: ${m('--spacing-m')};\n    right: unset;\n  }\n`;\n\nexport const itemChevronCss = css`\n  width: 20px;\n  height: 20px;\n  /* we override top here since its already centered by flex */\n  top: unset;\n`;\n", "/* stylelint-disable no-duplicate-selectors */\nimport { css } from '@emotion/css';\n\nimport { maxWidth, mobileMediaQuery } from '../../constants';\nimport { m, p2Css, p3Css } from '../../motif';\n\nexport const aiLocalizationBannerCss = css`\n  align-items: center;\n  background-color: ${m('--banner-ai-bg-color')};\n  box-sizing: border-box;\n  display: flex;\n  justify-content: center;\n  width: 100%;\n\n  ${mobileMediaQuery} {\n    padding: ${m('--spacing-xl')};\n  }\n`;\n\nexport const aiLocalizationBannerContentCss = css`\n  display: flex;\n  flex-direction: column;\n  flex: 1 0 0;\n  gap: ${m('--spacing-xxs')};\n  justify-content: center;\n  margin: 0px auto;\n  max-width: ${maxWidth}px;\n  padding: ${m('--spacing-xl')} ${m('--spacing-xxxxl')};\n\n  ${mobileMediaQuery} {\n    padding: 0;\n  }\n`;\n\nexport const aiLocalizationBannerTitleCss = css`\n  color: ${m('--banner-ai-fg-color')};\n  ${p2Css}\n`;\n\nexport const aiLocalizationBannerDescriptionCss = css`\n  color: ${m('--banner-ai-fg-color')};\n  ${p3Css}\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport {\n  aiLocalizationBannerContentCss,\n  aiLocalizationBannerCss,\n  aiLocalizationBannerDescriptionCss,\n  aiLocalizationBannerTitleCss,\n} from './styles';\n\ntype AiLocalizationBannerProps = {\n  title?: string;\n  description?: string;\n};\n\n// TODO: Investigate whether this single-purpose component belongs in sdsm or should be moved to web.\nexport const AiLocalizationBanner: FC<AiLocalizationBannerProps> = ({ title, description }) => {\n  useMotifStyles(MotifComponent.AI_LOCALIZATION_BANNER);\n\n  if (!title && !description) {\n    return null;\n  }\n\n  return (\n    <div className={cx(MotifComponent.AI_LOCALIZATION_BANNER, aiLocalizationBannerCss)}>\n      <div className={aiLocalizationBannerContentCss}>\n        {title && <div className={aiLocalizationBannerTitleCss}>{title}</div>}\n        {description && <div className={aiLocalizationBannerDescriptionCss}>{description}</div>}\n      </div>\n    </div>\n  );\n};\n", "import { useEffect } from 'react';\n\nconst canUseTouchEvent = typeof TouchEvent !== 'undefined';\n\n/**\n * Stops the scroll events outside of the target element.\n *\n * Useful for when you want to prevent scrolling behind full-screen popups.\n *\n * Note that we tried doing this using CSS (to remove the scrollbar etc), but ultimately it was full\n * of unintended consequerences like: scrollbar appearing and disappearing, page scroll flashing\n * during css transitions etc. Disabling scroll events seems to be the better way.\n *\n * Implementation here disables the 'wheel' event if no element has anywhere to scroll between event\n * target and 'allowScrollParent'\n *\n * 'shouldAllowScrollEvent' callback allows consumer to prevent a scroll event from being cancelled\n * on a case by case basis.\n */\nexport function useDisableScrollOutside(\n  allowScrollParent: HTMLElement | null,\n  inTransition?: boolean,\n  shouldAllowScrollEvent?: (event: Event) => boolean\n): void {\n  useEffect(() => {\n    // Save the scroll position;\n    const previousScrollX = window.scrollX;\n    const previousScrollY = window.scrollY;\n\n    let lastTouchStartY: number;\n\n    const captureTouchStart: EventListener = event => {\n      // Short circuit if touch events are not supported.This is separate\n      // from the next if statement for typescript inference.\n      if (!canUseTouchEvent) {\n        return;\n      }\n\n      if (!(event instanceof TouchEvent)) {\n        return;\n      }\n\n      // Skip multi-touch (zoom etc).\n      if (event.changedTouches.length > 1) {\n        return;\n      }\n\n      lastTouchStartY = event.changedTouches[0]!.clientY;\n    };\n\n    // Create event listener that prevents the default event behavior unless scroll is allowed.\n    const preventScrollEvent: EventListener = event => {\n      if (shouldAllowScrollEvent?.(event)) {\n        return;\n      }\n\n      // We can't prevent non-cancelable events. Do nothing. I.e. faster scroll while scrolling.\n      if (!event.cancelable) {\n        return;\n      }\n\n      // This is for type-script inference.\n      if (!(event.target instanceof HTMLElement)) {\n        return;\n      }\n\n      // Parent isn't attached to dom yet. Wait.\n      if (!allowScrollParent) {\n        return;\n      }\n\n      // Skip multi-touch (zoom etc). Just let this happen.\n      if (canUseTouchEvent && event instanceof TouchEvent && event.changedTouches.length > 1) {\n        return;\n      }\n\n      // Deduce scroll direction.\n      let scrollYDirection: 'down' | 'up' = 'down';\n\n      if (event instanceof WheelEvent) {\n        scrollYDirection = event.deltaY > 0 ? 'down' : 'up';\n      }\n\n      if (canUseTouchEvent && event instanceof TouchEvent) {\n        scrollYDirection = lastTouchStartY > event.changedTouches[0]!.clientY ? 'down' : 'up';\n      }\n\n      let current: HTMLElement | null = event.target;\n      let isInAllowedArea = false;\n      let hasRoomToScroll = false;\n\n      while (current) {\n        // Not descendant of allowed area. Continue to prevent scroll event.\n        if (current === document.body) {\n          break;\n        }\n\n        // Look for any room to scroll.\n        const scrollRoom = current.scrollHeight - current.offsetHeight;\n        const canScrollUp = scrollYDirection === 'up' && current.scrollTop > 0;\n        const canScrollDown = scrollYDirection === 'down' && current.scrollTop < scrollRoom;\n\n        if (scrollRoom > 0 && (canScrollDown || canScrollUp)) {\n          hasRoomToScroll = true;\n        }\n\n        // Check scope (after checking scroll).\n        if (current === allowScrollParent) {\n          isInAllowedArea = true;\n          break;\n        }\n\n        current = current?.parentElement;\n      }\n\n      if (isInAllowedArea && hasRoomToScroll) {\n        return;\n      }\n\n      // Cancelling this event stops the \"scroll\" event from ever happening.\n      event.preventDefault();\n    };\n\n    // Options that ignore passive events to prevent exceptions trying to prevent passive events.\n    // They aren't preventable.\n    const activeListenerOptions: AddEventListenerOptions = { passive: false, capture: false };\n\n    document.body.addEventListener('wheel', preventScrollEvent, activeListenerOptions);\n    document.body.addEventListener('touchstart', captureTouchStart /* passiveOK */);\n    document.body.addEventListener('touchmove', preventScrollEvent, activeListenerOptions);\n\n    return () => {\n      // Secondary scroll prevention measure. If scroll changes on the body via some other means\n      // no supported here (like zooming out and zooming in to another place), we restore the\n      // scroll to prevent unexepected UI change. This might cause flicker but avoid the \"broken\"\n      // feeling.\n      // In transition cases (such as navigation open and closing) we dont want to update scroll position.\n      if (!inTransition) {\n        window.scrollTo(previousScrollX, previousScrollY);\n      }\n\n      document.body.removeEventListener('wheel', preventScrollEvent, activeListenerOptions);\n      document.body.removeEventListener('touchstart', captureTouchStart /* passiveOK */);\n      document.body.removeEventListener('touchmove', preventScrollEvent, activeListenerOptions);\n    };\n  }, [allowScrollParent, inTransition, shouldAllowScrollEvent]);\n}\n", "import type { RefObject } from 'react';\nimport { useEffect, useState } from 'react';\n\nexport function useOnScreen(ref?: RefObject<HTMLElement>): boolean {\n  const [isIntersecting, setIntersecting] = useState(false);\n\n  useEffect(() => {\n    if (!ref?.current) return;\n\n    const observer = new IntersectionObserver(([entry]) => {\n      setIntersecting((entry as IntersectionObserverEntry).isIntersecting);\n    });\n\n    observer.observe(ref.current);\n\n    return () => {\n      observer.disconnect();\n    };\n  }, [ref]);\n\n  return isIntersecting;\n}\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\nimport { useOnScreen } from '../../../hooks';\nimport { Media } from '../../Media';\nimport { AnimatedAccordionMediaDirection } from '../AnimatedAccordion';\nimport { AccordionItem } from './AccordionItem';\nimport {\n  accordionContainerCss,\n  imageActiveCss,\n  imageAspectRatioWrapperCss,\n  imageCss,\n  imagesContainerCss,\n  layoutCss,\n  layoutReverseCss,\n} from './styles';\nimport type { AccordionProps } from './types';\n\nexport const Accordion: FC<AccordionProps> = ({\n  items = [],\n  mediaDirection,\n  autoPlaySpeedMs,\n  onItemSelect,\n}) => {\n  const allowAnimation = items.length > 1; // No need to animate if only 1 item\n  const accordionRef = useRef<HTMLDivElement>(null);\n  const isOnScreen = useOnScreen(accordionRef);\n\n  // Start 'activeItem' at -1 so that all items appear closed initially.\n  // This is to prevent an initial flash of the first item appearing open without\n  // visibility due to functionality of the underlying 'DetailSummary' component\n  // from SDS-M which is used inside the 'AccordionItem' component.\n  const [activeItem, setActiveItem] = useState(-1);\n  const [isPaused, setIsPaused] = useState(true);\n\n  const handleOnAnimationComplete = () => {\n    setActiveItem(prevActiveItem => {\n      if (prevActiveItem >= items.length - 1) {\n        return 0;\n      }\n\n      return prevActiveItem + 1;\n    });\n  };\n\n  // When component first enters the screen, activate/open the first item\n  useEffect(() => {\n    if (allowAnimation) {\n      setIsPaused(false);\n    }\n\n    setActiveItem(0);\n  }, [allowAnimation, setIsPaused, setActiveItem]);\n\n  // Pause/resume auto-rotation when component leaves/enters screen\n  useEffect(() => {\n    if (!allowAnimation) {\n      return;\n    }\n\n    if (isOnScreen) {\n      setIsPaused(false);\n    } else {\n      setIsPaused(true);\n    }\n  }, [isOnScreen, allowAnimation, setIsPaused]);\n\n  return (\n    <div\n      className={cx(layoutCss, {\n        [layoutReverseCss]: mediaDirection === AnimatedAccordionMediaDirection.Start,\n      })}\n    >\n      <div ref={accordionRef} className={accordionContainerCss}>\n        {items.map((item, i) => (\n          <AccordionItem\n            key={`${item.title}${i}`}\n            isOpen={i === activeItem}\n            isPaused={isPaused || i !== activeItem}\n            progressIndicatorDurationMs={autoPlaySpeedMs}\n            title={item.title}\n            body={item.body}\n            onToggle={() => {\n              if (i === activeItem || !allowAnimation) return;\n              setIsPaused(false);\n              setActiveItem(i);\n              onItemSelect?.(i);\n            }}\n            onMouseOver={() => {\n              if (i !== activeItem || !allowAnimation) return;\n              setIsPaused(true);\n            }}\n            onMouseLeave={() => {\n              if (i !== activeItem || !allowAnimation) return;\n              setIsPaused(false);\n            }}\n            onAnimationComplete={handleOnAnimationComplete}\n          />\n        ))}\n      </div>\n      <div className={imagesContainerCss}>\n        <div className={imageAspectRatioWrapperCss}>\n          {items.map((item, i) => {\n            return (\n              <Media\n                key={`${item.title}${i}`}\n                className={cx(imageCss, {\n                  [imageActiveCss]: i === activeItem,\n                })}\n                imgSrcs={item.imgSrcs}\n                altText={item.imageAltText}\n              />\n            );\n          })}\n        </div>\n      </div>\n    </div>\n  );\n};\n", "import { cx } from '@emotion/css';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { forwardRef, useContext, useRef } from 'react';\n\nimport { BrowserFeaturesContext } from '../../BrowserFeatures/BrowserFeaturesContextProvider';\nimport { Device } from '../../constants';\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { combineRefs } from '../../utils/useCombinesRefs';\nimport { Picture } from '../Picture';\nimport { Video } from '../Video';\nimport { LaptopWrapper } from './LaptopWrapper';\nimport {\n  divStyleCss,\n  macSafariCss,\n  mediaContainerCss,\n  noWrapBackgroundVideoCss,\n  noWrapImageCss,\n  noWrapVideoCss,\n  phoneContainerCss,\n  phoneVideoCss,\n  shadowContainerCss,\n  wrappedBackgroundVideoCss,\n  wrappedImageCss,\n  wrappedVideoCss,\n} from './Media.styled';\nimport { PhoneWrapper } from './PhoneWrapper';\nimport type { MediaProps } from './types';\n\nconst mediaWrapperClassName = 'sdsm-media-wrapper';\n\nexport const Media = forwardRef<HTMLElement, MediaProps>((props, ref) => {\n  const {\n    className,\n    altText,\n    imageSource,\n    maxHeight,\n    maxWidth,\n    videoSource,\n    mobileVideoSource,\n    sourceType,\n    wrap = Device.None,\n    // Don't expect this to work unless you're passing a video\n    showVideoControls = false,\n    autoplay = !showVideoControls,\n    posterSource,\n    onPlay,\n    onPause,\n    captionsSource,\n    isBackgroundVideo,\n    onTimeUpdate,\n    imgSrcs,\n    dataset,\n    height,\n    width,\n    isDraggable,\n  } = props;\n\n  useMotifStyles(MotifComponent.MEDIA);\n\n  let unwrapped: ReactNode = null;\n  const { getLowEntropyHints } = useContext(BrowserFeaturesContext);\n  const mediaRef = useRef<HTMLElement>(null);\n  const clientHints = getLowEntropyHints();\n  const isMacSafari = !!(\n    clientHints.platform === 'macOS' &&\n    clientHints.browsers.find(browser => browser.brand === 'Safari')\n  );\n  const applyMacSafariStyles = isMacSafari && wrap === Device.Phone;\n\n  const isDevice = wrap === Device.Laptop || wrap === Device.Phone;\n\n  const sizeStyles: CSSProperties = {\n    maxHeight: maxHeight && !isDevice ? `${maxHeight}px` : undefined,\n    maxWidth: maxWidth && !isDevice ? `${maxWidth}px` : undefined,\n  };\n\n  if (imageSource || imgSrcs) {\n    const imgClassName = cx(\n      {\n        [wrappedImageCss]: isDevice,\n        [noWrapImageCss]: !isDevice,\n\n        [phoneContainerCss]: wrap === Device.Phone,\n        [shadowContainerCss]: wrap === Device.Shadow,\n      },\n      // Comes last to do overrides.\n      className\n    );\n\n    if (imgSrcs) {\n      unwrapped = (\n        <Picture\n          className={MotifComponent.MEDIA}\n          imgSrcs={imgSrcs}\n          altText={altText}\n          imgClassName={imgClassName}\n          style={sizeStyles}\n          dataset={dataset}\n          height={height}\n          width={width}\n          isDraggable={isDraggable}\n        />\n      );\n    } else if (imageSource) {\n      // if the image will not be wrapped inside a media wrapper, use the height\n      // here. Otherwise, the wrapper will implement the height\n      unwrapped = (\n        <Picture\n          className={MotifComponent.MEDIA}\n          altText={altText}\n          imgClassName={imgClassName}\n          style={sizeStyles}\n          defaultSrc={imageSource}\n          dataset={dataset}\n          height={height}\n          width={width}\n          isDraggable={isDraggable}\n        />\n      );\n    }\n  } else if (videoSource) {\n    const wrappedVideo2Css = isBackgroundVideo ? wrappedBackgroundVideoCss : wrappedVideoCss;\n    const noWrapVideo2Css = isBackgroundVideo ? noWrapBackgroundVideoCss : noWrapVideoCss;\n    const videoClassName = cx(\n      {\n        [phoneVideoCss]: wrap === Device.Phone,\n        [wrappedVideo2Css]: isDevice,\n        [macSafariCss]: wrap === Device.Phone && applyMacSafariStyles,\n        [noWrapVideo2Css]: !isDevice,\n        [shadowContainerCss]: wrap === Device.Shadow,\n      },\n      className\n    );\n\n    unwrapped = (\n      <Video\n        key={videoSource}\n        source={videoSource}\n        mobileSource={mobileVideoSource}\n        sourceType={sourceType}\n        altText={altText}\n        className={cx(MotifComponent.MEDIA, videoClassName)}\n        style={sizeStyles}\n        autoPlay={autoplay}\n        playsInline={!showVideoControls}\n        loop={!showVideoControls}\n        muted={!showVideoControls}\n        controls={showVideoControls}\n        posterSource={posterSource}\n        onPlay={onPlay}\n        onPause={onPause}\n        captionsSource={captionsSource}\n        onTimeUpdate={onTimeUpdate}\n        isBackgroundVideo={isBackgroundVideo}\n        dataset={dataset}\n        ref={combineRefs(mediaRef, ref)}\n      />\n    );\n\n    if (applyMacSafariStyles) {\n      unwrapped = (\n        <div data-testid=\"sdsm-media-safari-wrapper\" className={divStyleCss}>\n          {unwrapped}\n        </div>\n      );\n    }\n  } else {\n    // early escape in case there is no media\n    return null;\n  }\n\n  if (wrap === Device.Laptop) {\n    return (\n      <LaptopWrapper className={mediaWrapperClassName} maxHeight={maxHeight}>\n        {unwrapped}\n      </LaptopWrapper>\n    );\n  }\n\n  if (wrap === Device.Phone) {\n    return (\n      <PhoneWrapper className={mediaWrapperClassName} maxHeight={maxHeight}>\n        {unwrapped}\n      </PhoneWrapper>\n    );\n  }\n\n  return (\n    // TODO: Delete this nonsense div. It serves no purpose.\n    <div className={cx(mediaWrapperClassName, mediaContainerCss)} data-testid=\"no-device-wrapper\">\n      {unwrapped}\n    </div>\n  );\n});\n\nMedia.displayName = 'Media';\n", "export const combineRefs = <T extends HTMLElement>(\n  innerRef: React.MutableRefObject<T | null>,\n  fwdRef: React.ForwardedRef<T>\n) => {\n  // TODO no idea what the return type is for this.\n  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n  return (element: T | null) => {\n    [innerRef, fwdRef].forEach(ref => {\n      if (ref) {\n        if (typeof ref === 'function') {\n          ref(element);\n        } else {\n          ref.current = element;\n        }\n      }\n    });\n  };\n};\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { dataSetToAttributes } from '../../utils';\nimport { Sticker } from '../Sticker/Sticker';\nimport { addSrcFactory } from './Picture';\nimport { PictureContext } from './PictureContext';\nimport { pictureContainerCss } from './styles';\nimport type { PictureWithStickersProps } from './types';\n\nexport const PictureWithStickers: FC<PictureWithStickersProps> = ({\n  altText,\n  className,\n  style,\n  defaultSrc,\n  imgClassName,\n  imgSrcs,\n  height,\n  width,\n  fetchPriority,\n  dataset,\n  isDraggable,\n  handleSafariSourceSets,\n  stickers = [],\n}) => {\n  const hasNoSources = !imgSrcs?.sources?.length;\n  const pictureContext = useContext(PictureContext);\n\n  return (\n    <span className={cx(pictureContainerCss, className)} style={style}>\n      <picture>\n        {imgSrcs?.sources?.map((imgSrc, index) => (\n          <source\n            srcSet={imgSrc.url}\n            type={imgSrc.type}\n            key={`${imgSrc.type}${index}desktop`}\n            sizes={imgSrc.sizes}\n            media={imgSrc.media}\n          />\n        ))}\n        {/* biome-ignore lint/a11y/useAltText: alt is provided... */}\n        <img\n          ref={\n            handleSafariSourceSets\n              ? addSrcFactory(imgSrcs?.default ?? defaultSrc, imgSrcs?.defaultSrcSet)\n              : undefined\n          }\n          alt={altText ?? ''} // default to an empty string to ensure always render an alt attribute\n          className={imgClassName}\n          sizes={imgSrcs?.defaultSizes}\n          height={height}\n          width={width}\n          // Render with src + srcSets attribute set if there is no risk of Safari loading multiple images (which only happens\n          // when both src and srcSet are set on an <img> tag) or if consumer has opted out of the workaround.\n          src={hasNoSources || !handleSafariSourceSets ? imgSrcs?.default ?? defaultSrc : undefined}\n          srcSet={hasNoSources || !handleSafariSourceSets ? imgSrcs?.defaultSrcSet : undefined}\n          loading={pictureContext?.lazy ? 'lazy' : undefined}\n          // @ts-ignore this attribute is chrome only and doesn't exist (as of November 2023) on typings yet because its so new\n          // eslint-disable-next-line react/no-unknown-property\n          fetchpriorty={fetchPriority}\n          {...dataSetToAttributes(dataset)}\n          draggable={isDraggable}\n        />\n      </picture>\n      {stickers?.map((props, i) => (\n        <Sticker key={i} {...props} />\n      ))}\n    </span>\n  );\n};\n", "import { css } from '@emotion/css';\n\nimport { largeDesktopMediaQuery, mobileMediaQuery } from '../../constants';\n\nexport const defaultStickerInsetPx = -16;\n\nexport const stickerCss = css`\n  height: auto;\n  pointer-events: none;\n  position: absolute;\n  width: 60px;\n\n  ${largeDesktopMediaQuery} {\n    width: 80px;\n  }\n`;\n\nexport const stickerImgCss = css`\n  object-fit: contain;\n  width: 100%;\n`;\n\nexport const stickerMediumCss = css`\n  width: 80px;\n\n  ${largeDesktopMediaQuery} {\n    width: 110px;\n  }\n`;\n\nexport const stickerLargeCss = css`\n  width: 80px;\n\n  ${largeDesktopMediaQuery} {\n    width: 140px;\n  }\n`;\n\nexport const stickerTopStartCss = css`\n  inset-inline-start: var(--sticker-position-offset, ${defaultStickerInsetPx}px);\n  top: var(--sticker-position-offset, ${defaultStickerInsetPx}px);\n`;\n\nexport const stickerTopEndCss = css`\n  inset-inline-end: var(--sticker-position-offset, ${defaultStickerInsetPx}px);\n  top: var(--sticker-position-offset, ${defaultStickerInsetPx}px);\n`;\n\nexport const stickerBottomStartCss = css`\n  bottom: var(--sticker-position-offset, ${defaultStickerInsetPx}px);\n  inset-inline-start: var(--sticker-position-offset, ${defaultStickerInsetPx}px);\n`;\n\nexport const stickerBottomEndCss = css`\n  bottom: var(--sticker-position-offset, ${defaultStickerInsetPx}px);\n  inset-inline-end: var(--sticker-position-offset, ${defaultStickerInsetPx}px);\n`;\n\nexport const stickerRotationNegative15DegreesCss = css`\n  transform: rotate(-15deg);\n`;\n\nexport const stickerRotationPositive15DegreesCss = css`\n  transform: rotate(15deg);\n`;\n\n/**\n * Hides stickers on mobile (e.g. for background media in Block). Used by PictureWithStickers and\n * VideoWithStickers.\n */\nexport const stickersDesktopOnlyCss = css`\n  ${mobileMediaQuery} {\n    display: none;\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport type { CSSProperties, FC } from 'react';\n\nimport type { BaseComponentProps, ImageSources, ValueOf } from '../../types';\nimport { Picture } from '../Picture';\nimport {\n  defaultStickerInsetPx,\n  stickerBottomEndCss,\n  stickerBottomStartCss,\n  stickerCss,\n  stickerImgCss,\n  stickerLargeCss,\n  stickerMediumCss,\n  stickerRotationNegative15DegreesCss,\n  stickerRotationPositive15DegreesCss,\n  stickerTopEndCss,\n  stickerTopStartCss,\n} from './styles';\n\nexport const StickerPosition = {\n  TopStart: 'Top-Start',\n  TopEnd: 'Top-End',\n  BottomStart: 'Bottom-Start',\n  BottomEnd: 'Bottom-End',\n} as const;\n\nexport const StickerRotation = {\n  Negative15Degrees: '-15 degrees',\n  ZeroDegrees: '0 degrees',\n  Positive15Degrees: '15 degrees',\n} as const;\n\nexport const StickerSize = {\n  Regular: 'regular',\n  Medium: 'medium',\n  Large: 'large',\n} as const;\n\nexport type StickerPosition = ValueOf<typeof StickerPosition>;\nexport type StickerRotation = ValueOf<typeof StickerRotation>;\nexport type StickerSize = ValueOf<typeof StickerSize>;\n\nexport interface StickerProps extends BaseComponentProps {\n  imgSrcs: ImageSources;\n  position?: StickerPosition;\n  rotation?: StickerRotation;\n  size?: StickerSize;\n  insetPx?: number;\n}\n\nexport const Sticker: FC<StickerProps> = ({\n  className,\n  imgSrcs,\n  position = StickerPosition.TopStart,\n  rotation = StickerRotation.ZeroDegrees,\n  size = StickerSize.Regular,\n  insetPx = defaultStickerInsetPx,\n}) => {\n  return (\n    <Picture\n      className={cx(\n        stickerCss,\n        {\n          [stickerMediumCss]: size === StickerSize.Medium,\n          [stickerLargeCss]: size === StickerSize.Large,\n          [stickerTopStartCss]: position === StickerPosition.TopStart,\n          [stickerTopEndCss]: position === StickerPosition.TopEnd,\n          [stickerBottomStartCss]: position === StickerPosition.BottomStart,\n          [stickerBottomEndCss]: position === StickerPosition.BottomEnd,\n          [stickerRotationNegative15DegreesCss]: rotation === StickerRotation.Negative15Degrees,\n          [stickerRotationPositive15DegreesCss]: rotation === StickerRotation.Positive15Degrees,\n        },\n        className\n      )}\n      style={{ '--sticker-position-offset': `${insetPx}px` } as CSSProperties}\n      imgClassName={stickerImgCss}\n      imgSrcs={imgSrcs}\n      altText=\"\" // Presentational only\n    />\n  );\n};\n", "import { css } from '@emotion/css';\n\nexport const pictureContainerCss = css`\n  display: inline-block; /* Ensure container always covers image so that stickers align correctly */\n  position: relative;\n  vertical-align: top; /* Ensure no additional space is added below image due to 'display: inline-block' */\n`;\n", "/**\n * Utility function that checks if a video element is playing. Logic grabbed from this thread:\n * https://stackoverflow.com/questions/6877403/how-to-tell-if-a-video-element-is-currently-playing/6877530#6877530\n */\nexport const isVideoPlaying = (video?: HTMLVideoElement): boolean => {\n  if (!video) {\n    return false;\n  }\n\n  return !!(video.currentTime > 0 && !video.paused && !video.ended && video.readyState > 2);\n};\n", "import { cx } from '@emotion/css';\nimport { forwardRef, useContext, useEffect, useRef } from 'react';\n\nimport { BrowserFeaturesContext } from '../../BrowserFeatures';\nimport { dataSetToAttributes } from '../../utils';\nimport { combineRefs } from '../../utils/useCombinesRefs';\nimport { TabsContext } from '../Tabs/TabsContext';\nimport { getObjectFit, videoCss } from './styles';\nimport type { VideoProps } from './types';\nimport { isVideoPlaying } from './utils';\n\nexport const Video = forwardRef<HTMLElement, VideoProps>((props, ref) => {\n  const {\n    source,\n    mobileSource,\n    sourceType = 'video/mp4',\n    mobileSourceType = 'video/mp4',\n    posterSource,\n    altText,\n    className,\n    style,\n    muted = true,\n    autoPlay = true,\n    loop = true,\n    controls = false,\n    playsInline = true,\n    onPlay,\n    onPause,\n    captionsSource,\n    isBackgroundVideo,\n    onTimeUpdate,\n    dataset,\n  } = props;\n\n  const videoRef = useRef<HTMLVideoElement>(null);\n  const { getLowEntropyHints } = useContext(BrowserFeaturesContext);\n  const clientHints = getLowEntropyHints();\n\n  useEffect(() => {\n    const currentTrack = videoRef.current?.querySelector('track');\n\n    if (videoRef.current && captionsSource && !currentTrack) {\n      const track = document.createElement('track');\n      track.setAttribute('src', captionsSource);\n      track.setAttribute('kind', 'captions');\n      track.setAttribute('srclang', 'en');\n      track.setAttribute('label', 'English');\n      videoRef.current.appendChild(track);\n    }\n  }, [captionsSource]);\n\n  const { addOnTabChangeListener, removeOnTabChangeListener } = useContext(TabsContext);\n\n  // Handle when tabs have changed to pause videos\n  useEffect(() => {\n    // only pause videos that have sound / autoplay\n    if (!videoRef.current || muted || autoPlay) {\n      return;\n    }\n\n    const onTabChange = () => {\n      if (isVideoPlaying(videoRef.current || undefined)) {\n        videoRef.current?.pause();\n      }\n    };\n    addOnTabChangeListener?.(onTabChange);\n    return () => removeOnTabChangeListener?.(onTabChange);\n  }, [addOnTabChangeListener, removeOnTabChangeListener, videoRef, muted, autoPlay]);\n\n  const objectFitStyle = getObjectFit(isBackgroundVideo);\n\n  // Preload determines how much of the video to load.\n  // 'none' - don't load anything\n  // 'auto' - load the whole video\n  // 'metadata' - load only the necessary metadata to display the video (thumbnail, video duration)\n  const preload = autoPlay ? 'auto' : posterSource ? 'none' : 'metadata';\n  const isSafari = clientHints.browsers.find(browser => browser.brand === 'Safari');\n\n  // This is a workaround for Safari not loading the first frame to use as the thumbnail image.\n  // This sets the video starting position to 0.01 seconds into the video, which forces a frame to load\n  // See: https://stackoverflow.com/questions/56428378/no-way-to-preload-first-video-frame-on-ios-safari\n  const videoSource = isSafari && preload === 'metadata' ? `${source}#t=0.01` : source;\n  const mobileVideoSource =\n    mobileSource && isSafari && preload === 'metadata' ? `${mobileSource}#t=0.01` : mobileSource;\n\n  return (\n    <video\n      className={cx('video', videoCss, objectFitStyle, className)}\n      style={style}\n      poster={posterSource}\n      autoPlay={autoPlay}\n      loop={loop}\n      muted={muted}\n      controls={controls}\n      playsInline={playsInline}\n      onPlay={onPlay}\n      onPause={onPause}\n      preload={preload}\n      // See: https://www.w3.org/WAI/PF/HTML/wiki/Media_Alt_Technologies\n      aria-describedby={altText}\n      ref={combineRefs(videoRef, ref)}\n      // See: https://stackoverflow.com/questions/55645393/issue-with-loading-vtt-from-cross-domain\n      crossOrigin=\"anonymous\"\n      key={source}\n      onTimeUpdate={onTimeUpdate}\n      {...dataSetToAttributes(dataset)}\n    >\n      {mobileVideoSource && (\n        <source src={mobileSource} type={mobileSourceType} media=\"(max-width: 768px)\" />\n      )}\n      <source src={videoSource} type={sourceType} />\n    </video>\n  );\n});\n\nVideo.displayName = 'Video';\n", "import { createContext } from 'react';\n\ninterface TabsContextProps {\n  addOnTabChangeListener?: (listener: () => void) => void;\n  removeOnTabChangeListener?: (listener: () => void) => void;\n}\n\nexport const TabsContext = createContext<TabsContextProps>({});\n", "import { css } from '@emotion/css';\n\nexport const videoContainerCss = css`\n  display: block;\n  height: 100%;\n  position: relative;\n  width: 100%;\n`;\n\nexport const videoCss = css`\n  width: 100%;\n  height: 100%;\n  display: block;\n`;\n\nconst objectFitCoverCss = css`\n  object-fit: cover;\n`;\n\nconst objectFitContainCss = css`\n  object-fit: contain;\n`;\n\nexport const getObjectFit = (isBackgroundVideo?: boolean): string => {\n  return isBackgroundVideo ? objectFitCoverCss : objectFitContainCss;\n};\n", "import { cx } from '@emotion/css';\nimport { forwardRef, useContext, useEffect, useRef } from 'react';\n\nimport { BrowserFeaturesContext } from '../../BrowserFeatures';\nimport { dataSetToAttributes } from '../../utils';\nimport { combineRefs } from '../../utils/useCombinesRefs';\nimport { Sticker } from '../Sticker/Sticker';\nimport { TabsContext } from '../Tabs/TabsContext';\nimport { getObjectFit, videoContainerCss, videoCss } from './styles';\nimport type { VideoWithStickersProps } from './types';\nimport { isVideoPlaying } from './utils';\n\nexport const VideoWithStickers = forwardRef<HTMLElement, VideoWithStickersProps>((props, ref) => {\n  const {\n    source,\n    mobileSource,\n    sourceType = 'video/mp4',\n    mobileSourceType = 'video/mp4',\n    posterSource,\n    altText,\n    className,\n    style,\n    muted = true,\n    autoPlay = true,\n    loop = true,\n    controls = false,\n    playsInline = true,\n    onPlay,\n    onPause,\n    captionsSource,\n    isBackgroundVideo,\n    onTimeUpdate,\n    dataset,\n    videoClassName,\n    stickers = [],\n  } = props;\n\n  const videoRef = useRef<HTMLVideoElement>(null);\n  const { getLowEntropyHints } = useContext(BrowserFeaturesContext);\n  const clientHints = getLowEntropyHints();\n\n  useEffect(() => {\n    const currentTrack = videoRef.current?.querySelector('track');\n\n    if (videoRef.current && captionsSource && !currentTrack) {\n      const track = document.createElement('track');\n      track.setAttribute('src', captionsSource);\n      track.setAttribute('kind', 'captions');\n      track.setAttribute('srclang', 'en');\n      track.setAttribute('label', 'English');\n      videoRef.current.appendChild(track);\n    }\n  }, [captionsSource]);\n\n  const { addOnTabChangeListener, removeOnTabChangeListener } = useContext(TabsContext);\n\n  // Handle when tabs have changed to pause videos\n  useEffect(() => {\n    // only pause videos that have sound / autoplay\n    if (!videoRef.current || muted || autoPlay) {\n      return;\n    }\n\n    const onTabChange = () => {\n      if (isVideoPlaying(videoRef.current || undefined)) {\n        videoRef.current?.pause();\n      }\n    };\n    addOnTabChangeListener?.(onTabChange);\n    return () => removeOnTabChangeListener?.(onTabChange);\n  }, [addOnTabChangeListener, removeOnTabChangeListener, videoRef, muted, autoPlay]);\n\n  const objectFitStyle = getObjectFit(isBackgroundVideo);\n\n  // Preload determines how much of the video to load.\n  // 'none' - don't load anything\n  // 'auto' - load the whole video\n  // 'metadata' - load only the necessary metadata to display the video (thumbnail, video duration)\n  const preload = autoPlay ? 'auto' : posterSource ? 'none' : 'metadata';\n  const isSafari = clientHints.browsers.find(browser => browser.brand === 'Safari');\n\n  // This is a workaround for Safari not loading the first frame to use as the thumbnail image.\n  // This sets the video starting position to 0.01 seconds into the video, which forces a frame to load\n  // See: https://stackoverflow.com/questions/56428378/no-way-to-preload-first-video-frame-on-ios-safari\n  const videoSource = isSafari && preload === 'metadata' ? `${source}#t=0.01` : source;\n  const mobileVideoSource =\n    mobileSource && isSafari && preload === 'metadata' ? `${mobileSource}#t=0.01` : mobileSource;\n\n  return (\n    <span className={cx('video', videoContainerCss, className)} style={style}>\n      <video\n        className={cx(videoCss, objectFitStyle, videoClassName)}\n        poster={posterSource}\n        autoPlay={autoPlay}\n        loop={loop}\n        muted={muted}\n        controls={controls}\n        playsInline={playsInline}\n        onPlay={onPlay}\n        onPause={onPause}\n        preload={preload}\n        // See: https://www.w3.org/WAI/PF/HTML/wiki/Media_Alt_Technologies\n        aria-describedby={altText}\n        ref={combineRefs(videoRef, ref)}\n        // See: https://stackoverflow.com/questions/55645393/issue-with-loading-vtt-from-cross-domain\n        crossOrigin=\"anonymous\"\n        key={source}\n        onTimeUpdate={onTimeUpdate}\n        {...dataSetToAttributes(dataset)}\n      >\n        {mobileVideoSource && (\n          <source src={mobileSource} type={mobileSourceType} media=\"(max-width: 768px)\" />\n        )}\n        <source src={videoSource} type={sourceType} />\n      </video>\n      {stickers?.map((props, i) => (\n        <Sticker key={i} {...props} />\n      ))}\n    </span>\n  );\n});\n\nVideoWithStickers.displayName = 'VideoWithStickers';\n", "import { css, cx } from '@emotion/css';\nimport type { FC, PropsWithChildren } from 'react';\n\nimport type { WrapperProps } from './types';\n\nexport const LaptopWrapper: FC<PropsWithChildren<WrapperProps>> = ({\n  children,\n  className,\n  maxHeight,\n}) => {\n  const styleCss = css`\n    ${maxHeight ? `max-height: ${maxHeight}px;` : ''}\n    width: 100%;\n    & > svg {\n      /* Scaling the SVG */\n      width: 100%;\n    }\n  `;\n\n  return (\n    <div className={cx(styleCss, className)}>\n      <svg\n        viewBox=\"0 0 654 366\"\n        width=\"654\"\n        height=\"366\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        data-testid=\"laptop-wrapper\"\n      >\n        <g filter=\"url(#J)\" fillRule=\"evenodd\">\n          <path\n            d=\"M95.626 1.127L104.459 1h444.227l8.834.127c9.637.157 17.141 7.735 \n          17.096 17.253.045-.115.285 5.943.285 8.833v292.992c0 1.781-.092 4.779-.172 \n          6.782-.05 1.237-.152 3.513-.238 4.224-1.023 8.479-8.201 14.964-16.971 \n          14.923.086.045-5.974.285-8.834.285H104.459c-2.861 0-8.92-.24-8.833-.285\n          -8.359.039-15.272-5.851-16.788-13.745-.208-1.083-.314-2.203-.309-3.351\n          -.045.114-.285-5.944-.285-8.833V27.214c0-2.876.24-8.948.285-8.833-.045-9.518 \n          7.591-17.299 17.097-17.253z\"\n            fill=\"#303030\"\n          />\n        </g>\n        <g filter=\"url(#L)\" fillRule=\"evenodd\">\n          <path\n            d=\"M572.337 27.499l-.285-8.833c.045-7.935-6.31-14.449-14.247-14.404\n          -1.411-.051-6.09-.127-8.834-.127H104.459c-2.752 0-6.258.083-8.833.127\n          -7.937-.045-14.292 6.469-14.247 14.404-.057.246-.285 6.117-.285 8.833V322.12c0 \n          .889.037 2.314.088 3.582.059 1.457.223 3.895.304 4.478.768 5.534 5.499 9.421 \n          11.29 9.321-.039.112 4.331.285 6.269.285h454.77c2.043 0 6.421-.173 6.554-.285 \n          6.229.11 11.335-4.713 11.398-11.112-.06.036.112-4.348 0-6.269l.57-294.621z\"\n            fill=\"#272727\"\n          />\n        </g>\n        <g fillRule=\"evenodd\">\n          <path\n            d=\"M574.988 216.885v103.069l-.144 6.217-.393 5.834c-1.491 7.885-8.427 \n          13.848-16.758 13.848l-8.884.24H104.133c-2.82 0-8.879-.24-8.879-.24-8.499 0\n          -15.286-6.207-16.53-14.328-.135-.879-.445-9.574-.445-11.552v-103.05l496.709\n          -.038z\"\n            fill=\"url(#O)\"\n            fillOpacity=\".03\"\n          />\n          <path\n            d=\"M93.346 24.365h466.453c.355 0 .57.215.57.569v291.203a.52.52 0 0 1\n          -.57.569H93.346a.52.52 0 0 1-.57-.569V24.934c0-.355.215-.569.57-.569z\"\n            fill=\"#111112\"\n          />\n          <path\n            d=\"M272.029 350.802H100.508l-37.081-.284c-33.91.284-43.031-3.773-43.026\n          -4.748v-1.425h252.054l107.667.096h252.054v1.424c.004.976-9.117 5.033-43.027 \n          4.749-.622.019-37.081.284-37.081.284H380.546l-108.517-.096z\"\n            fill=\"#1c1b1b\"\n          />\n        </g>\n        <path\n          d=\"M21.255 336.082H631.32c.532 0 .855.313.855.57v9.118c0 .256-.323.57\n        -.855.57H21.255c-.532 0-.855-.314-.855-.57v-9.118c0-.257.322-.57.855-.57z\"\n          fill=\"#1d1c1c\"\n          fillRule=\"evenodd\"\n        />\n        <foreignObject\n          x=\"92\"\n          y=\"24\"\n          width=\"468\"\n          height=\"293\"\n          requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"\n        >\n          {children}\n        </foreignObject>\n        <defs>\n          <filter\n            id=\"J\"\n            x=\"77.244\"\n            y=\"0\"\n            width=\"498.657\"\n            height=\"347.42\"\n            filterUnits=\"userSpaceOnUse\"\n            colorInterpolationFilters=\"sRGB\"\n          >\n            <feGaussianBlur stdDeviation=\".5\" />\n            <feBlend in=\"SourceGraphic\" result=\"C\" />\n            <feColorMatrix\n              in=\"SourceAlpha\"\n              values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n              result=\"D\"\n            />\n            <feGaussianBlur stdDeviation=\"1.5\" />\n            <feComposite in2=\"D\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n            <feBlend in2=\"C\" />\n          </filter>\n          <filter\n            id=\"L\"\n            x=\"79.093\"\n            y=\"2.134\"\n            width=\"495.243\"\n            height=\"339.652\"\n            filterUnits=\"userSpaceOnUse\"\n            colorInterpolationFilters=\"sRGB\"\n          >\n            <feBlend in=\"SourceGraphic\" result=\"C\" />\n            <feColorMatrix\n              in=\"SourceAlpha\"\n              values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n              result=\"D\"\n            />\n            <feGaussianBlur stdDeviation=\"2\" />\n            <feComposite in2=\"D\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n            <feBlend in2=\"C\" result=\"E\" />\n            <feColorMatrix values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0\" />\n            <feBlend in2=\"E\" />\n          </filter>\n          <linearGradient\n            id=\"O\"\n            x1=\"111.017\"\n            y1=\"227.897\"\n            x2=\"111.017\"\n            y2=\"340.072\"\n            gradientUnits=\"userSpaceOnUse\"\n          >\n            <stop stopOpacity=\".01\" />\n            <stop offset=\"1\" />\n          </linearGradient>\n        </defs>\n      </svg>\n    </div>\n  );\n};\n\nLaptopWrapper.displayName = 'LaptopWrapper';\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, smallMobileMediaQuery } from '../../constants';\nimport { m } from '../../motif';\n\n// TODO(jm) -- these are styles, not classnames...\nconst baseImageCss = css`\n  display: block;\n  object-fit: cover;\n`;\n\nexport const noWrapImageCss = css`\n  ${baseImageCss}\n  border-width: ${m('--media-border-width')};\n  border-radius: ${m('--media-border-radius')};\n  border-color: ${m('--media-border-color')};\n  border-style: solid;\n  height: auto;\n  margin: auto;\n  max-width: 100%;\n  overflow: hidden;\n  width: auto;\n`;\n\nexport const wrappedImageCss = css`\n  ${baseImageCss}\n  height: 100%;\n  width: 100%;\n`;\n\nexport const wrappedVideoCss = css`\n  ${wrappedImageCss}\n  object-fit: contain;\n`;\n\nexport const noWrapVideoCss = css`\n  ${noWrapImageCss}\n  object-fit: contain;\n`;\n\nexport const wrappedBackgroundVideoCss = wrappedImageCss;\n\nexport const noWrapBackgroundVideoCss = noWrapImageCss;\n\nexport const phoneVideoCss = css`\n  ${mobileMediaQuery} {\n    margin-top: 0;\n  }\n  ${smallMobileMediaQuery} {\n    margin-top: 0;\n  }\n`;\n\nexport const divStyleCss = css`\n  position: fixed;\n`;\n\nexport const macSafariCss = css`\n  width: 297px;\n  height: 550px;\n`;\n\nexport const phoneContainerCss = css`\n  border-radius: ${m('--media-border-radius')};\n`;\n\nexport const shadowContainerCss = css`\n  box-shadow: ${m('--box-shadow-xl')};\n  border-radius: ${m('--media-border-radius')};\n`;\n\nexport const mediaContainerCss = css`\n  display: flex;\n  justify-content: center;\n`;\n\n/**\n * Needed to make sure that the picture element is 100% width and height inside the wrappers not\n * neded for video because they arent set to cover\n */\nexport const wrappedPictureContainerCss = css`\n  width: 100%;\n  height: 100%;\n`;\n", "import { css, cx } from '@emotion/css';\nimport type { FC, PropsWithChildren } from 'react';\ninterface Props {\n  maxHeight?: number;\n  className?: string;\n}\n\nexport const phoneWrapperCss = css`\n  display: flex;\n  justify-content: center;\n`;\n\nexport const phoneWrapperBgCss = css`\n  background-image: url('https://images.ctfassets.net/kp51zybwznx4/5MBQ096OLy837zpHXtGsIa/0b35a1eadad459a767f935297483854c/iPhone.png');\n  width: 250px;\n  height: 530px;\n  background-size: 100%;\n  background-repeat: no-repeat;\n  position: relative;\n  margin-bottom: 20px;\n  padding: 14px;\n`;\n\nexport const PhoneWrapper: FC<PropsWithChildren<Props>> = ({ children }) => (\n  <div className={cx('phone-wrapper', phoneWrapperCss)} data-testid=\"phone-wrapper\">\n    <div className={phoneWrapperBgCss}>{children}</div>\n  </div>\n);\n\nPhoneWrapper.displayName = 'PhoneWrapper';\n", "import { cx } from '@emotion/css';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { forwardRef, useContext, useRef } from 'react';\n\nimport { BrowserFeaturesContext } from '../../BrowserFeatures/BrowserFeaturesContextProvider';\nimport { Device } from '../../constants';\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { combineRefs } from '../../utils/useCombinesRefs';\nimport { PictureWithStickers } from '../Picture';\nimport { VideoWithStickers } from '../Video';\nimport { LaptopWrapper } from './LaptopWrapper';\nimport {\n  divStyleCss,\n  macSafariCss,\n  mediaContainerCss,\n  noWrapBackgroundVideoCss,\n  noWrapImageCss,\n  noWrapVideoCss,\n  phoneContainerCss,\n  phoneVideoCss,\n  shadowContainerCss,\n  wrappedBackgroundVideoCss,\n  wrappedImageCss,\n  wrappedPictureContainerCss,\n  wrappedVideoCss,\n} from './Media.styled';\nimport { PhoneWrapper } from './PhoneWrapper';\nimport type { MediaWithStickersProps } from './types';\n\nexport const mediaWrapperClassName = 'sdsm-media-wrapper';\n\nexport const MediaWithStickers = forwardRef<HTMLElement, MediaWithStickersProps>((props, ref) => {\n  const {\n    className,\n    mediaClassName,\n    altText,\n    imageSource,\n    maxHeight,\n    maxWidth,\n    videoSource,\n    mobileVideoSource,\n    sourceType,\n    wrap = Device.None,\n    // Don't expect this to work unless you're passing a video\n    showVideoControls = false,\n    autoplay = !showVideoControls,\n    posterSource,\n    onPlay,\n    onPause,\n    captionsSource,\n    isBackgroundVideo,\n    onTimeUpdate,\n    imgSrcs,\n    dataset,\n    height,\n    width,\n    isDraggable,\n    stickers,\n  } = props;\n\n  useMotifStyles(MotifComponent.MEDIA);\n\n  let unwrapped: ReactNode = null;\n  const { getLowEntropyHints } = useContext(BrowserFeaturesContext);\n  const mediaRef = useRef<HTMLElement>(null);\n  const clientHints = getLowEntropyHints();\n  const isMacSafari = !!(\n    clientHints.platform === 'macOS' &&\n    clientHints.browsers.find(browser => browser.brand === 'Safari')\n  );\n  const applyMacSafariStyles = isMacSafari && wrap === Device.Phone;\n\n  const isDevice = wrap === Device.Laptop || wrap === Device.Phone;\n\n  const sizeStyles: CSSProperties = {\n    maxHeight: maxHeight && !isDevice ? `${maxHeight}px` : undefined,\n    maxWidth: maxWidth && !isDevice ? `${maxWidth}px` : undefined,\n  };\n\n  if (imageSource || imgSrcs) {\n    const imgClassName = cx(\n      {\n        [wrappedImageCss]: isDevice,\n        [noWrapImageCss]: !isDevice,\n\n        [phoneContainerCss]: wrap === Device.Phone,\n        [shadowContainerCss]: wrap === Device.Shadow,\n      },\n      // Comes last to do overrides.\n      mediaClassName\n    );\n\n    if (imgSrcs) {\n      unwrapped = (\n        <PictureWithStickers\n          className={cx(MotifComponent.MEDIA, className, {\n            [wrappedPictureContainerCss]: isDevice,\n          })}\n          imgSrcs={imgSrcs}\n          altText={altText}\n          imgClassName={imgClassName}\n          style={sizeStyles}\n          dataset={dataset}\n          height={height}\n          width={width}\n          isDraggable={isDraggable}\n          stickers={isDevice ? undefined : stickers}\n        />\n      );\n    } else if (imageSource) {\n      // if the image will not be wrapped inside a media wrapper, use the height\n      // here. Otherwise, the wrapper will implement the height\n      unwrapped = (\n        <PictureWithStickers\n          className={cx(MotifComponent.MEDIA, className)}\n          altText={altText}\n          imgClassName={imgClassName}\n          style={sizeStyles}\n          defaultSrc={imageSource}\n          dataset={dataset}\n          height={height}\n          width={width}\n          isDraggable={isDraggable}\n          stickers={isDevice ? undefined : stickers}\n        />\n      );\n    }\n  } else if (videoSource) {\n    const wrappedVideo2Css = isBackgroundVideo ? wrappedBackgroundVideoCss : wrappedVideoCss;\n    const noWrapVideo2Css = isBackgroundVideo ? noWrapBackgroundVideoCss : noWrapVideoCss;\n    const videoClassName = cx(\n      {\n        [phoneVideoCss]: wrap === Device.Phone,\n        [wrappedVideo2Css]: isDevice,\n        [macSafariCss]: wrap === Device.Phone && applyMacSafariStyles,\n        [noWrapVideo2Css]: !isDevice,\n        [shadowContainerCss]: wrap === Device.Shadow,\n      },\n      mediaClassName\n    );\n\n    unwrapped = (\n      <VideoWithStickers\n        key={videoSource}\n        source={videoSource}\n        mobileSource={mobileVideoSource}\n        sourceType={sourceType}\n        altText={altText}\n        className={cx(MotifComponent.MEDIA, className)}\n        videoClassName={videoClassName}\n        style={sizeStyles}\n        autoPlay={autoplay}\n        playsInline={!showVideoControls}\n        loop={!showVideoControls}\n        muted={!showVideoControls}\n        controls={showVideoControls}\n        posterSource={posterSource}\n        onPlay={onPlay}\n        onPause={onPause}\n        captionsSource={captionsSource}\n        onTimeUpdate={onTimeUpdate}\n        isBackgroundVideo={isBackgroundVideo}\n        dataset={dataset}\n        ref={combineRefs(mediaRef, ref)}\n        stickers={isDevice ? undefined : stickers}\n      />\n    );\n\n    if (applyMacSafariStyles) {\n      unwrapped = (\n        <div data-testid=\"sdsm-media-safari-wrapper\" className={divStyleCss}>\n          {unwrapped}\n        </div>\n      );\n    }\n  } else {\n    // early escape in case there is no media\n    return null;\n  }\n\n  if (wrap === Device.Laptop) {\n    return (\n      <LaptopWrapper className={mediaWrapperClassName} maxHeight={maxHeight}>\n        {unwrapped}\n      </LaptopWrapper>\n    );\n  }\n\n  if (wrap === Device.Phone) {\n    return (\n      <PhoneWrapper className={mediaWrapperClassName} maxHeight={maxHeight}>\n        {unwrapped}\n      </PhoneWrapper>\n    );\n  }\n\n  return (\n    // TODO: Delete this nonsense div. It serves no purpose.\n    <div className={cx(mediaWrapperClassName, mediaContainerCss)} data-testid=\"no-device-wrapper\">\n      {unwrapped}\n    </div>\n  );\n});\n\nMediaWithStickers.displayName = 'MediaWithStickers';\n", "import { cx } from '@emotion/css';\nimport { useBrowserLayoutEffect } from '@snapchat/mw-common/client';\nimport type { FC } from 'react';\nimport { useCallback, useRef, useState } from 'react';\n\nimport { DetailsSummary as DetailsSummarySDS } from '../../DetailsSummary';\nimport { ProgressIndicator } from './ProgressIndicator';\nimport {\n  accordionItemCss,\n  accordionItemDetailContentActiveCss,\n  accordionItemDetailContentCss,\n  accordionItemDetailCss,\n  accordionItemSummaryCss,\n} from './styles';\nimport type { AccordionItemProps } from './types';\n\nconst animationOptions = {\n  duration: 400, // ms\n  easing: 'ease-out',\n};\n\nexport const AccordionItem: FC<AccordionItemProps> = ({\n  isOpen,\n  isPaused,\n  progressIndicatorDurationMs,\n  title,\n  body,\n  onToggle,\n  onMouseOver,\n  onMouseLeave,\n  onAnimationComplete,\n}) => {\n  const detailsRef = useRef<HTMLDetailsElement>(null);\n  const summaryRef = useRef<HTMLElement>(null);\n\n  const animation = useRef<Animation | null>(null);\n  const [isClosing, setIsClosing] = useState(false);\n  const [isExpanding, setIsExpanding] = useState(false);\n\n  const shrink = useCallback(() => {\n    if (!detailsRef?.current || !summaryRef?.current) {\n      return;\n    }\n\n    setIsClosing(true);\n\n    detailsRef.current.style.overflow = 'hidden';\n\n    const startHeight = `${detailsRef.current.offsetHeight}px`;\n    const endHeight = `${summaryRef.current.offsetHeight}px`;\n\n    if (animation.current) {\n      animation.current.cancel();\n    }\n\n    animation.current = detailsRef.current.animate?.(\n      { height: [startHeight, endHeight] },\n      animationOptions\n    );\n\n    animation.current?.finished\n      ?.then(() => onAnimationFinish(false))\n      .catch(() => setIsClosing(false));\n  }, []);\n\n  const expand = useCallback(() => {\n    if (!detailsRef.current || !summaryRef.current) {\n      return;\n    }\n\n    setIsExpanding(true);\n\n    detailsRef.current.style.height = `${detailsRef.current.offsetHeight}px`;\n    detailsRef.current.style.overflow = 'hidden';\n    detailsRef.current.open = true;\n\n    const startHeight = `${detailsRef.current.offsetHeight}px`;\n    const endHeight = `${detailsRef.current.scrollHeight}px`;\n\n    if (animation.current) {\n      animation.current.cancel();\n    }\n\n    animation.current = detailsRef.current.animate?.(\n      { height: [startHeight, endHeight] },\n      animationOptions\n    );\n\n    animation.current?.finished\n      .then(() => onAnimationFinish(true))\n      .catch(() => setIsExpanding(false));\n  }, []);\n\n  const onAnimationFinish = (open: boolean) => {\n    if (!detailsRef.current) return;\n\n    detailsRef.current.open = open;\n    detailsRef.current.style.height = '';\n    detailsRef.current.style.overflow = '';\n    animation.current = null;\n    setIsExpanding(false);\n    setIsClosing(false);\n  };\n\n  // Sync intial state of DetailsSummarySDS component with 'isOpen' prop\n  useBrowserLayoutEffect(() => {\n    if (!detailsRef.current) {\n      return;\n    }\n\n    if (isOpen !== detailsRef.current.open) {\n      detailsRef.current.open = isOpen;\n    }\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n  // Expand/shrink DetailsSummarySDS component when 'isOpen' prop changes\n  useBrowserLayoutEffect(() => {\n    window.requestAnimationFrame(isOpen ? expand : shrink);\n  }, [isOpen, expand, shrink]);\n\n  return (\n    <div\n      className={accordionItemCss}\n      onMouseOver={onMouseOver}\n      onFocus={onMouseOver}\n      onMouseLeave={onMouseLeave}\n      onBlur={onMouseLeave}\n    >\n      <ProgressIndicator\n        durationMs={progressIndicatorDurationMs}\n        isActive={isOpen}\n        isPaused={isPaused}\n        onAnimationComplete={onAnimationComplete}\n      />\n      <DetailsSummarySDS\n        disableScrollToOnOpen\n        detailsRef={detailsRef}\n        summaryRef={summaryRef}\n        summary={title}\n        showChevron={false}\n        className={accordionItemDetailCss}\n        onToggle={onToggle}\n        summaryProps={{ className: accordionItemSummaryCss }}\n        transitionDurationMs={animationOptions.duration}\n        open={isOpen}\n      >\n        <div\n          className={cx(accordionItemDetailContentCss, {\n            [accordionItemDetailContentActiveCss]: isOpen || isExpanding || isClosing,\n          })}\n        >\n          {body}\n        </div>\n      </DetailsSummarySDS>\n    </div>\n  );\n};\n", "import type { FC } from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport { progressIndicatorBarCss, progressIndicatorCss } from './styles';\nimport type { ProgressIndicatorProps } from './types';\n\nexport const ProgressIndicator: FC<ProgressIndicatorProps> = ({\n  durationMs,\n  isActive,\n  isPaused,\n  onAnimationComplete,\n}) => {\n  const barRef = useRef<HTMLDivElement>(null);\n  const animation = useRef<Animation>();\n\n  // biome-ignore lint/correctness/useExhaustiveDependencies: This effect does not need to run when the component updates\n  useEffect(() => {\n    if (!barRef.current) {\n      return;\n    }\n\n    animation.current = barRef.current.animate(\n      [{ transform: 'scaleY(0)' }, { transform: 'scaleY(1)' }],\n      {\n        duration: durationMs,\n        iterations: 1,\n        fill: 'forwards',\n      }\n    );\n\n    animation.current.pause();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  useEffect(() => {\n    if (!animation.current) return;\n\n    if (isActive) {\n      if (isPaused) {\n        animation.current.pause();\n      } else {\n        animation.current.play();\n\n        // Re-apply \"onfinish\" handler for each play request to ensure it\n        // fires, and with the correct \"onAnimationComplete\" reference\n        animation.current.onfinish = () => onAnimationComplete?.();\n      }\n    } else {\n      animation.current.pause();\n      animation.current.currentTime = 0;\n    }\n  }, [isPaused, isActive, onAnimationComplete]);\n\n  return (\n    <div className={progressIndicatorCss}>\n      <div ref={barRef} className={progressIndicatorBarCss} />\n    </div>\n  );\n};\n", "import { css } from '@emotion/css';\n\nimport { Gray, maxWidth, Spacing } from '../../../constants';\nimport { m } from '../../../motif';\nimport { mediaQueryForRange } from '../../../utils';\n\nconst extraLargeDesktopMediaQuery = mediaQueryForRange({ min: maxWidth });\n\nexport const layoutCss = css`\n  align-items: center;\n  display: flex;\n  gap: ${Spacing['3XL']}px;\n  margin: 0 auto;\n  max-width: ${maxWidth}px;\n  padding: 0 ${Spacing['3XL']}px ${Spacing['4XL']}px;\n  width: 100%;\n`;\n\nexport const layoutReverseCss = css`\n  flex-direction: row-reverse;\n`;\n\nexport const accordionContainerCss = css`\n  max-width: 50%;\n  width: 50%;\n\n  ${extraLargeDesktopMediaQuery} {\n    flex: 1;\n    max-width: none;\n    width: auto;\n  }\n`;\n\nexport const imagesContainerCss = css`\n  max-width: 50%;\n  width: 50%;\n\n  ${extraLargeDesktopMediaQuery} {\n    /* This width value is specified in the designs. The accordion will fill the remaining horizontal space. */\n    max-width: 416px;\n    min-width: 416px;\n    width: 416px;\n  }\n`;\n\nexport const accordionItemCss = css`\n  margin-bottom: ${Spacing.XL}px;\n  padding-inline-start: ${Spacing.MD}px;\n  position: relative;\n\n  &:last-child {\n    margin-bottom: 0;\n  }\n`;\n\nexport const accordionItemDetailCss = css`\n  scroll-margin: 40px;\n  overflow-y: hidden;\n  overflow-x: auto;\n`;\n\nexport const accordionItemDetailContentCss = css`\n  font-size: 16px;\n  letter-spacing: 0.01em;\n  line-height: 26px;\n\n  /* Restrict height of content when not active to prevent initial flash\n     of items appearing open without visibility due to functionality of\n     the underlying 'DetailSummary' component from SDS-M.\n  */\n  max-height: 0;\n`;\n\nexport const accordionItemDetailContentActiveCss = css`\n  max-height: none;\n  padding-top: ${Spacing.MD}px;\n`;\n\nexport const accordionItemSummaryCss = css`\n  align-items: center;\n  cursor: pointer;\n  display: flex;\n  font-size: 18px;\n  font-weight: 500;\n  justify-content: space-between;\n  line-height: 28px;\n  margin: 0;\n  user-select: none;\n`;\n\nexport const progressIndicatorCss = css`\n  background: ${Gray.V300}80; /* 80 = 50% opacity using #RRGGBBAA */\n  border-radius: 4px;\n  height: 100%;\n  inset-block-start: 0;\n  inset-inline-start: 0;\n  overflow: hidden;\n  position: absolute;\n  width: 4px;\n`;\n\nexport const progressIndicatorBarCss = css`\n  background: ${m('--animated-accordion-progress-indicator-color')};\n  width: 100%;\n  height: 100%;\n  transform-origin: center top;\n  transform: scaleY(0);\n`;\n\nexport const imageAspectRatioWrapperCss = css`\n  padding-top: 100%;\n  position: relative;\n  width: 100%;\n`;\n\nexport const imageCss = css`\n  height: 100%;\n  left: 50%;\n  object-fit: contain;\n  opacity: 0;\n  position: absolute;\n  top: 50%;\n  transform: translate(-50%, -50%);\n  transition: opacity 0.2s linear;\n  width: 100%;\n`;\n\nexport const imageActiveCss = css`\n  opacity: 1;\n`;\n", "import { cx } from '@emotion/css';\nimport { type FC, useEffect, useRef, useState } from 'react';\n\nimport { Alignment } from '../../../constants';\nimport { Media } from '../../Media';\nimport { AnimatedAccordionControls } from './AnimatedAccordionControls';\nimport {\n  accordionItemAlignCenterCss,\n  accordionItemAlignEndCss,\n  accordionItemAlignStartCss,\n  accordionItemContainerCss,\n  contentBodyCss,\n  contentContainerCss,\n  contentTitleCss,\n  fadeInAnimationCss,\n  hiddenAccordionItemCss,\n  imageCss,\n  mediaContainerCss,\n  minHeightVariable,\n} from './styles';\nimport type { AnimatedAccordionMobileProps } from './types';\n\nexport const AnimatedAccordionMobile: FC<AnimatedAccordionMobileProps> = props => {\n  const { items, textAlignment = 'Start', onItemSelect } = props;\n  const allowAnimation = items.length > 1;\n  const itemsRefs = useRef<HTMLDivElement[]>([]);\n\n  const [activeItem, setActiveItem] = useState<number>(-1);\n  const [isPaused, setIsPaused] = useState<boolean>(true);\n  const [touchStartX, setTouchStartX] = useState<number | null>(0);\n  const [isSwipping, setIsSwipping] = useState<boolean>(false);\n  const [swipeOffset, setSwipeOffset] = useState<number>(0);\n  const [maxHeight, setMaxHeight] = useState<number>(0);\n  const isMaxHeightSet = maxHeight > 0;\n\n  // Animation handling\n  const handleOnAnimationComplete = () => {\n    setActiveItem(prevActiveItem => {\n      if (prevActiveItem >= items.length - 1) {\n        return 0;\n      }\n\n      return prevActiveItem + 1;\n    });\n  };\n\n  useEffect(() => {\n    if (allowAnimation) {\n      setIsPaused(false);\n    }\n\n    setActiveItem(0);\n  }, [allowAnimation]);\n\n  // Item swipe handling; users can move back and forward through accordion items\n  const handleTouchStart = (event: React.TouchEvent<HTMLDivElement>) => {\n    setTouchStartX(event.touches[0]?.clientX as number);\n    setIsSwipping(true);\n  };\n\n  const handleTouchMove = (event: React.TouchEvent<HTMLDivElement>) => {\n    if (touchStartX === null || !isSwipping) return;\n\n    const touchEndx = event.touches[0]?.clientX as number;\n    const deltaX = touchEndx - touchStartX;\n\n    setSwipeOffset(deltaX);\n  };\n\n  const handleTouchEnd = () => {\n    if (touchStartX === null) return;\n\n    const threshold = 50;\n\n    if (Math.abs(swipeOffset) > threshold) {\n      if (swipeOffset > 0) {\n        previousAccordionItem();\n      } else {\n        nextAccordionItem();\n      }\n    }\n\n    setIsSwipping(false);\n    setSwipeOffset(0);\n    setTouchStartX(null);\n  };\n\n  const nextAccordionItem = () => {\n    setActiveItem(prevActiveItem => {\n      const next = (prevActiveItem + 1) % items.length;\n      onItemSelect?.(next);\n      return next;\n    });\n  };\n\n  const previousAccordionItem = () => {\n    setActiveItem(prevActiveItem => {\n      const prev = prevActiveItem === 0 ? items.length - 1 : prevActiveItem - 1;\n      onItemSelect?.(prev);\n      return prev;\n    });\n  };\n\n  // Item's height handling; all accordion items must have the same height to prevent layout shifts due to content length differences\n  useEffect(() => {\n    if (!isMaxHeightSet && allowAnimation) {\n      const heights = itemsRefs.current.map(item => item.clientHeight);\n      setMaxHeight(Math.max(...heights));\n    }\n  }, [allowAnimation, isMaxHeightSet, maxHeight]);\n\n  // Set the tallest item height as a CSS variable to allow for a dynamic height property\n  const maxHeightVariableStyles = {\n    [minHeightVariable]: `${maxHeight}px`,\n  } as React.CSSProperties;\n\n  return (\n    <div\n      onTouchStart={handleTouchStart}\n      onTouchMove={handleTouchMove}\n      onTouchEnd={handleTouchEnd}\n      style={maxHeightVariableStyles}\n    >\n      {items?.map((item, itemIndex) => (\n        <div\n          key={itemIndex}\n          className={cx(accordionItemContainerCss, {\n            [accordionItemAlignStartCss]: textAlignment === Alignment.Start,\n            [accordionItemAlignCenterCss]: textAlignment === Alignment.Center,\n            [accordionItemAlignEndCss]: textAlignment === Alignment.End,\n            [hiddenAccordionItemCss]: allowAnimation && itemIndex !== activeItem && isMaxHeightSet,\n          })}\n          ref={element => {\n            itemsRefs.current[itemIndex] = element as HTMLDivElement;\n          }}\n          // Allow play/pause animation by clicking anywhere besides the play button\n          onClick={() => setIsPaused(!isPaused)}\n        >\n          <div className={cx(mediaContainerCss, fadeInAnimationCss)}>\n            <Media className={imageCss} imgSrcs={item.imgSrcs} altText={item.imageAltText} />\n          </div>\n          {allowAnimation && (\n            <AnimatedAccordionControls\n              currentItemIndex={itemIndex}\n              isActive={itemIndex === activeItem && swipeOffset === 0}\n              isPaused={isPaused}\n              itemsCount={items.length}\n              onPause={() => setIsPaused(!isPaused)}\n              onAnimationComplete={handleOnAnimationComplete}\n            />\n          )}\n          <div className={cx(contentContainerCss, fadeInAnimationCss)}>\n            <h6 className={contentTitleCss}>{item.title}</h6>\n            <section className={contentBodyCss}>{item.body}</section>\n          </div>\n        </div>\n      ))}\n    </div>\n  );\n};\n", "import type { FC } from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport { progressIndicatorBarCss, progressIndicatorCss, progressIndicatorWidth } from './styles';\nimport type { ProgressIndicatorMobileProps } from './types';\n\nexport const ProgressIndicatorMobile: FC<ProgressIndicatorMobileProps> = ({\n  durationMs,\n  isActive,\n  isPaused,\n  onAnimationComplete,\n}) => {\n  const barRef = useRef<HTMLDivElement>(null);\n  const animation = useRef<Animation>();\n\n  // biome-ignore lint/correctness/useExhaustiveDependencies: This effect does not need to run when the component updates\n  useEffect(() => {\n    if (!barRef.current) {\n      return;\n    }\n\n    animation.current = barRef.current.animate(\n      [{ translate: `-${progressIndicatorWidth}` }, { translate: '0' }],\n      {\n        duration: durationMs,\n        iterations: 1,\n        fill: 'forwards',\n      }\n    );\n\n    animation.current.pause();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  useEffect(() => {\n    if (!animation.current) return;\n\n    if (isActive) {\n      if (isPaused) {\n        animation.current.pause();\n      } else {\n        animation.current.play();\n\n        // Re-apply \"onfinish\" handler for each play request to ensure it\n        // fires, and with the correct \"onAnimationComplete\" reference\n        animation.current.onfinish = () => onAnimationComplete?.();\n      }\n    } else {\n      animation.current.pause();\n      animation.current.currentTime = 0;\n    }\n  }, [isPaused, isActive, onAnimationComplete]);\n\n  return (\n    <div className={progressIndicatorCss}>\n      <div ref={barRef} className={progressIndicatorBarCss} />\n    </div>\n  );\n};\n", "import { css } from '@emotion/css';\n\nimport { m } from '../../../motif';\n\nexport const minHeightVariable = '--item-min-height';\nexport const progressIndicatorWidth = '32px'; // Value set by design\n\nexport const accordionItemAlignStartCss = css`\n  text-align: start;\n`;\n\nexport const accordionItemAlignCenterCss = css`\n  text-align: center;\n`;\n\nexport const accordionItemAlignEndCss = css`\n  text-align: end;\n`;\n\nexport const hiddenAccordionItemCss = css`\n  display: none;\n`;\n\nexport const fadeInAnimationCss = css`\n  animation: fade-in 1s;\n\n  @keyframes fade-in {\n    from {\n      opacity: 0.4;\n    }\n    to {\n      opacity: 1;\n    }\n  }\n`;\n\nexport const accordionItemContainerCss = css`\n  align-items: flex-start;\n  display: flex;\n  flex-direction: column;\n  gap: ${m('--spacing-l')};\n  margin-block: ${m('--spacing-m')};\n  min-height: var(${minHeightVariable});\n\n  &.dragging {\n    a {\n      pointer-events: none;\n    }\n  }\n`;\n\nexport const mediaContainerCss = css`\n  aspect-ratio: 3/2;\n  position: relative;\n  width: 100%;\n`;\n\nexport const imageCss = css`\n  height: 100%;\n  left: 50%;\n  object-fit: contain;\n  position: absolute;\n  top: 50%;\n  transform: translate(-50%, -50%);\n  transition: opacity 0.2s linear;\n  width: 100%;\n`;\n\nexport const accordionControlsContainerCss = css`\n  align-self: stretch;\n  display: flex;\n  flex-direction: row;\n  gap: ${m('--spacing-xs')};\n  justify-content: center;\n  overflow: hidden;\n`;\n\nexport const navDotsContainerCss = css`\n  align-items: center;\n  display: flex;\n  justify-content: center;\n`;\n\nexport const progressIndicatorContainerCss = css`\n  align-items: center;\n  align-self: stretch;\n  display: flex;\n  flex-direction: column;\n  gap: ${m('--spacing-xs')};\n  justify-content: center;\n  padding: 0 ${m('--spacing-s')};\n`;\n\nexport const progressIndicatorCss = css`\n  background: ${m('--palette-gray-v250')};\n  border-radius: ${m('--spacing-xxs')};\n  height: ${m('--spacing-xs')};\n  inset-block-start: 0;\n  inset-inline-start: 0;\n  overflow: hidden;\n  width: ${progressIndicatorWidth};\n`;\n\nexport const progressIndicatorBarCss = css`\n  background: ${m('--fg-color')};\n  border-radius: ${m('--spacing-xxs')};\n  height: 100%;\n  transform-origin: center left;\n  width: 100%;\n`;\n\nexport const dotContainerCss = css`\n  align-items: center;\n  display: flex;\n  gap: ${m('--spacing-xs')};\n  justify-content: center;\n  padding: ${m('--spacing-m')} ${m('--spacing-s')};\n`;\n\nexport const dotCss = css`\n  align-items: center;\n  background: ${m('--palette-gray-v250')};\n  border-radius: ${m('--spacing-xxs')};\n  display: flex;\n  height: ${m('--spacing-xs')};\n  justify-content: flex-end;\n  width: ${m('--spacing-xs')};\n`;\n\nexport const navButtonCss = css`\n  align-items: center;\n  background: ${m('--palette-gray-v200')};\n  border-radius: 80px;\n  cursor: pointer;\n  display: flex;\n  gap: ${m('--spacing-xs')};\n  height: ${m('--spacing-xxl')};\n  justify-content: center;\n  padding: ${m('--spacing-s')};\n  width: ${m('--spacing-xxl')};\n\n  &:hover {\n    background: ${m('--palette-gray-v250')};\n  }\n`;\n\nexport const contentContainerCss = css`\n  align-items: flex-start;\n  align-self: stretch;\n  display: flex;\n  flex-direction: column;\n  gap: ${m('--spacing-m')};\n`;\n\nexport const contentTitleCss = css`\n  align-self: stretch;\n\n  && {\n    font-size: ${m('--h6-mobile-font-size')};\n    font-weight: ${m('--h6-mobile-font-weight')};\n    line-height: 120%;\n    margin: 0;\n    padding: 0;\n  }\n`;\n\nexport const contentBodyCss = css`\n  align-self: stretch;\n  font-size: ${m('--p2-mobile-font-size')};\n  font-weight: ${m('--p2-mobile-font-weight')};\n  padding-bottom: auto;\n`;\n", "import { PauseIcon, PlayFilledIcon } from '@snapchat/snap-design-system-icons';\nimport type { FC } from 'react';\n\nimport { ProgressIndicatorMobile } from './ProgressIndicatorMobile';\nimport {\n  accordionControlsContainerCss,\n  dotContainerCss,\n  dotCss,\n  navButtonCss,\n  navDotsContainerCss,\n  progressIndicatorContainerCss,\n} from './styles';\nimport type { AnimatedAccordionControlsProps } from './types';\n\nexport const AnimatedAccordionControls: FC<AnimatedAccordionControlsProps> = props => {\n  const {\n    currentItemIndex,\n    durationMs = 7000, // Default duration is set by design (7 secs)\n    isActive,\n    isPaused,\n    itemsCount,\n    onAnimationComplete,\n    onPause,\n  } = props;\n\n  return (\n    <div className={accordionControlsContainerCss}>\n      <div className={navDotsContainerCss}>\n        {Array.from({ length: itemsCount }).map((_, index) => {\n          if (currentItemIndex === index) {\n            return (\n              <div key={index} className={progressIndicatorContainerCss}>\n                <ProgressIndicatorMobile\n                  durationMs={durationMs}\n                  isActive={isActive}\n                  isPaused={isPaused}\n                  onAnimationComplete={onAnimationComplete}\n                />\n              </div>\n            );\n          }\n\n          return (\n            <div key={index} className={dotContainerCss}>\n              <div className={dotCss} />\n            </div>\n          );\n        })}\n      </div>\n      <button className={navButtonCss} onClick={() => onPause()}>\n        {isPaused ? <PlayFilledIcon /> : <PauseIcon />}\n      </button>\n    </div>\n  );\n};\n", "import type { FC } from 'react';\n\nimport { Alignment, MediaMode } from '../../constants';\nimport { useMediaMode } from '../../hooks';\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { Accordion } from './/Accordion/Accordion';\nimport type { AnimatedAccordionItem } from './Accordion/types';\nimport { AnimatedAccordionMobile } from './AnimatedAccordionMobile/AnimatedAccordionMobile';\n\n/** Props for the AnimatedAccordion component. */\ninterface AnimatedAccordionProps {\n  /** The items to be displayed in the accordion. */\n  items?: AnimatedAccordionItem[];\n\n  /** The direction of the media in the accordion. */\n  mediaDirection?: AnimatedAccordionMediaDirection;\n\n  /** The speed in seconds at which the accordion automatically plays. */\n  autoPlaySpeed?: number;\n\n  /** The alignment of the text on mobile. */\n  textAlignmentMobile?: Alignment;\n\n  /** Called when a user manually selects a panel (click, prev/next). */\n  onItemSelect?: (index: number) => void;\n}\n\nexport enum AnimatedAccordionMediaDirection {\n  End = 'End',\n  Start = 'Start',\n}\n\nexport const AnimatedAccordion: FC<AnimatedAccordionProps> = props => {\n  useMotifStyles(MotifComponent.ANIMATED_ACCORDION);\n  const mode = useMediaMode();\n  const isMobile = mode === MediaMode.Mobile;\n\n  const {\n    mediaDirection = AnimatedAccordionMediaDirection.Start,\n    autoPlaySpeed = 10,\n    textAlignmentMobile = Alignment.Start,\n    items = [],\n    onItemSelect,\n  } = props;\n\n  if (isMobile) {\n    return (\n      <AnimatedAccordionMobile\n        items={items}\n        textAlignment={textAlignmentMobile}\n        onItemSelect={onItemSelect}\n      />\n    );\n  }\n\n  return (\n    <Accordion\n      items={items}\n      mediaDirection={mediaDirection}\n      autoPlaySpeedMs={autoPlaySpeed * 1000}\n      onItemSelect={onItemSelect}\n    />\n  );\n};\n", "import { type CSSProperties, type RefObject, useEffect } from 'react';\n\nimport type { Animation } from './types';\n\nlet staticObserver: IntersectionObserver;\n\nconst getObserver = () => {\n  if (staticObserver) return staticObserver;\n\n  staticObserver = new IntersectionObserver(entries => {\n    for (const entry of entries) {\n      const target = entry.target;\n\n      if (entry.isIntersecting && target instanceof HTMLElement) {\n        target.style.animationPlayState = 'running';\n\n        staticObserver.unobserve(target);\n      }\n    }\n\n    return staticObserver;\n  });\n\n  return staticObserver;\n};\n\nconst getAnimationCssProperties = (animation: Animation): CSSProperties => {\n  const animationName = animation.animationName;\n  const delay = animation.delay ? `${animation.delay}ms` : '';\n  const direction = animation.direction ? `${animation.direction}` : 'normal';\n  const duration = animation.duration ? `${animation.duration}ms` : '1000ms';\n  const fillMode = 'forwards';\n  const iterationCount = animation.iterationCount ?? 1;\n  const playState = 'paused';\n  const timingFunction = animation.timingFunction ?? '';\n  const transformOrigin = animation.transformOrigin ?? '';\n\n  return {\n    animation: `${duration} ${timingFunction} ${delay} ${iterationCount} ${direction} ${fillMode} ${playState} ${animationName}`,\n    transformOrigin: `${transformOrigin}`,\n  };\n};\n\n/**\n * A React hook that applies an animation to a referenced HTML element.\n *\n * @example\n *\n * ```jsx\n * const animationRef = useRef(null);\n * const animationCss = useAnimations(animationRef, animation);\n *\n * return (\n *   <div ref={animationRef} style={animationCss}>\n *     Content\n *   </div>\n * );\n * ```\n *\n * @param {RefObject<HTMLElement | undefined>} ref - A React ref object pointing to the HTML element\n *   to be animated.\n * @param {Animation | undefined} animation - An object representing the animation to apply to the\n *   element.\n * @returns {string | undefined} - The CSS for the animation, or undefined if no animation is\n *   provided.\n */\nexport function useAnimations(\n  ref: RefObject<HTMLElement | undefined>,\n  animation: Animation | undefined\n): CSSProperties | undefined {\n  useEffect(() => {\n    if (!animation) {\n      return undefined;\n    }\n\n    const observer = getObserver();\n    const toObserve: Array<HTMLElement> = [];\n    const targetElement = ref.current;\n\n    if (!targetElement) {\n      return;\n    }\n\n    const userPrefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n    if (userPrefersReducedMotion) {\n      targetElement.style.animationName = '';\n      targetElement.style.opacity = '1';\n\n      return;\n    }\n\n    observer.observe(targetElement);\n    toObserve.push(targetElement);\n\n    return () => {\n      observer.unobserve(targetElement);\n    };\n  }, [animation, ref]);\n\n  if (!animation) {\n    return;\n  }\n\n  return getAnimationCssProperties(animation);\n}\n", "import { css } from '@emotion/css';\n\nimport { Spacing } from '../../constants';\n\nexport const authorBylineContainerCss = css`\n  line-height: ${Spacing.XL}px;\n  margin: ${Spacing.XS}px 0;\n`;\n\nexport const authorBylineAuthorCss = css`\n  display: block;\n`;\n", "import type { FC, ReactNode } from 'react';\n\nimport { authorBylineContainerCss } from './styles';\n\nexport interface AuthorBylineProps {\n  author?: string | ReactNode;\n  date?: string | ReactNode;\n}\n\nexport const AuthorByline: FC<AuthorBylineProps> = ({ author, date }) => {\n  if (!author && !date) return null;\n\n  return (\n    <div className={authorBylineContainerCss}>\n      {author}\n      {author && date && <br />}\n      {date}\n    </div>\n  );\n};\n", "import { cx } from '@emotion/css';\nimport type React from 'react';\nimport type { ChangeEventHandler, ReactElement } from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { m } from '../../motif/m';\nimport { Icon } from '../Icon';\nimport { IconButton } from '../IconButton';\nimport { IconButtonSize } from '../IconButton/IconButton.types';\nimport {\n  autoCompleteContainerCss,\n  autocompleteListItemCss,\n  cancelButtonCss,\n  hiddenSuggestionsCss,\n  inputCss,\n  resultsContainerNoResultsCss,\n  resultsContainerWithResultsCss,\n  rowCss,\n  searchButtonCss,\n  searchIconCss,\n  seeResultsCss,\n  shortAutoCompleteCss,\n} from './styles';\n\nconst selectedStyle = {\n  background: `${m('--palette-gray-v100')}`,\n  color: `${m('--palette-black-v150')}`,\n};\n\ntype AutocompleteSuggestionProps<ResultType = string> = {\n  term: ResultType;\n  onClick: (term: ResultType) => void;\n  setSelectedIndex: (index: number) => void;\n  resultAccessor?: (item: ResultType) => string;\n  isActive: boolean;\n  index: number;\n  listItemStyles?: string;\n  loadingAutocompleteTerms?: boolean;\n  loadingMessage?: string;\n};\n\nexport function AutocompleteSuggestion<ResultType = string>({\n  term,\n  onClick,\n  setSelectedIndex,\n  isActive,\n  listItemStyles,\n  resultAccessor,\n  loadingAutocompleteTerms,\n  loadingMessage,\n}: AutocompleteSuggestionProps<ResultType>): ReactElement {\n  const ref = useRef<HTMLLIElement>(null);\n\n  useEffect(() => {\n    if (isActive) {\n      ref.current?.scrollIntoView({\n        behavior: 'smooth',\n        block: 'nearest',\n        inline: 'start',\n      });\n    }\n  }, [isActive]);\n\n  if (loadingAutocompleteTerms) {\n    return <li className={autocompleteListItemCss}>{loadingMessage ?? 'Loading...'}</li>;\n  }\n\n  return (\n    <li\n      className={cx(autocompleteListItemCss, listItemStyles)}\n      ref={ref}\n      style={isActive ? selectedStyle : {}}\n      key={typeof term === 'string' ? term : resultAccessor?.(term)}\n      onMouseLeave={() => setSelectedIndex(-1)}\n      onClick={e => {\n        e.stopPropagation();\n        onClick(term);\n      }}\n    >\n      {resultAccessor ? resultAccessor(term) : String(term)}\n    </li>\n  );\n}\n\ntype AutoCompleteProps<ResultType = string> = {\n  onSelect: (terms: ResultType) => void;\n  onChange: (term: string) => void;\n  onKeyDown?: (event: React.KeyboardEvent) => void;\n  onSeeResults?: (term: string) => void;\n  onCollapseChange?: (open: boolean) => void;\n  resultAccessor?: (item: ResultType) => string;\n  autocompleteResults: ResultType[];\n  loadingAutocompleteTerms: boolean;\n  placeholder: string;\n  cancelMessage?: string;\n  loadingMessage?: string;\n  seeResultsMessage?: string;\n  noResultsMessage?: string;\n  initialText?: string;\n  containerStyles?: string;\n  inputStyles?: string;\n  listItemStyles?: string;\n  collapsible?: boolean;\n  disabled?: boolean;\n  shortBar?: boolean;\n  hideSuggestions?: boolean;\n  hideCancelButton?: boolean;\n};\n\nexport function AutoComplete<ResultType = string>({\n  onSelect,\n  onChange,\n  onKeyDown,\n  onSeeResults,\n  onCollapseChange,\n  resultAccessor,\n  autocompleteResults,\n  loadingAutocompleteTerms,\n  placeholder,\n  cancelMessage,\n  loadingMessage,\n  seeResultsMessage,\n  noResultsMessage,\n  initialText,\n  containerStyles,\n  inputStyles,\n  listItemStyles,\n  collapsible,\n  shortBar,\n  disabled,\n  hideSuggestions,\n  hideCancelButton,\n}: AutoCompleteProps<ResultType>): ReactElement {\n  useMotifStyles(MotifComponent.AUTOCOMPLETE);\n  const [currentSearchTerm, setCurrentSearchTerm] = useState(initialText ?? '');\n  const [collapsedState, setCollapsedState] = useState(true);\n  const [showSuggestions, setShowSuggestions] = useState(\n    hideSuggestions ? !hideSuggestions : false\n  );\n  const [selectedIndex, setSelectedIndex] = useState(-1);\n  const inputEl = useRef<HTMLInputElement>(null);\n\n  useEffect(() => {\n    if (collapsedState === false) {\n      inputEl.current?.focus();\n    }\n  }, [collapsedState]);\n\n  const setShowSearchSuggestions = (show: boolean) => {\n    if (!hideSuggestions) {\n      setShowSuggestions(show);\n    }\n  };\n\n  const collapseChange = (state: boolean) => {\n    if (!state) {\n      setShowSearchSuggestions(false);\n    }\n    setCollapsedState(state);\n\n    if (collapsible && onCollapseChange) {\n      onCollapseChange(collapsedState);\n    }\n  };\n\n  const onInputChange: ChangeEventHandler<HTMLInputElement> = e => {\n    onChange(e.target.value);\n\n    setCurrentSearchTerm(e.target.value);\n    const term = e.target.value.trimStart();\n    setShowSearchSuggestions(term.length > 0);\n\n    // don't search on just spaces\n    if (term.length > 0) {\n      setSelectedIndex(-1);\n    }\n  };\n\n  const onClick = (term: ResultType) => {\n    if (collapsible) {\n      collapseChange(true);\n    }\n\n    if (showSuggestions) {\n      setCurrentSearchTerm('');\n      setSelectedIndex(-1);\n    }\n\n    onSelect(term);\n  };\n\n  const onCancel = () => {\n    collapseChange(true);\n    setCurrentSearchTerm('');\n    setSelectedIndex(-1);\n  };\n\n  const onSeeResultsHandler = () => {\n    if (collapsible) {\n      collapseChange(true);\n    }\n\n    if (showSuggestions) {\n      setCurrentSearchTerm('');\n      setSelectedIndex(-1);\n    }\n\n    onSeeResults?.(currentSearchTerm);\n  };\n\n  const handleKeyDown: React.KeyboardEventHandler<HTMLInputElement> = event => {\n    const autocompleteLength = autocompleteResults.length;\n\n    if (event.key === 'Escape') {\n      setShowSearchSuggestions(false);\n    } else if (event.key === 'ArrowUp') {\n      const newSelectedIndex = Math.max(selectedIndex - 1, 0) % autocompleteLength;\n      setSelectedIndex(newSelectedIndex);\n      event.preventDefault();\n    } else if (event.key === 'ArrowDown') {\n      const newSelectedIndex =\n        Math.min(selectedIndex + 1, autocompleteLength - 1) % autocompleteLength;\n      setSelectedIndex(newSelectedIndex);\n      event.preventDefault();\n    } else if (event.key === 'Enter') {\n      if (autocompleteResults.length > 0 || hideSuggestions) {\n        if (selectedIndex < 0 && onSeeResults) {\n          return onSeeResultsHandler();\n        }\n\n        selectedIndex < 0\n          ? onClick(autocompleteResults[0]!)\n          : onClick(autocompleteResults[selectedIndex]!);\n      }\n      setSelectedIndex(0);\n    }\n\n    onKeyDown?.(event);\n  };\n\n  const renderSuggestions = () => (\n    <div\n      className={\n        autocompleteResults.length === 0 || loadingAutocompleteTerms\n          ? resultsContainerWithResultsCss\n          : resultsContainerNoResultsCss\n      }\n    >\n      {autocompleteResults.length > 0 ? (\n        autocompleteResults.map((result: ResultType, index: number) => (\n          <AutocompleteSuggestion<ResultType>\n            term={result}\n            onClick={onClick}\n            index={index}\n            // would have preferred this way but compiler forced me. Is there a better way? key={resultAccessor?.(result) ?? result}\n            key={typeof result === 'string' ? result : resultAccessor?.(result)}\n            isActive={selectedIndex === index}\n            setSelectedIndex={setSelectedIndex}\n            listItemStyles={listItemStyles}\n            resultAccessor={resultAccessor}\n            loadingAutocompleteTerms={loadingAutocompleteTerms}\n            loadingMessage={loadingMessage}\n          />\n        ))\n      ) : (\n        <li className={autocompleteListItemCss}>{noResultsMessage ?? 'No results returned.'}</li>\n      )}\n    </div>\n  );\n\n  if (collapsible && collapsedState) {\n    return (\n      <IconButton\n        size={IconButtonSize.LARGE}\n        iconName=\"search\"\n        disabled={disabled}\n        className={searchButtonCss}\n        onClick={() => collapseChange(false)}\n      />\n    );\n  }\n\n  const showSeeResults =\n    showSuggestions &&\n    !loadingAutocompleteTerms &&\n    seeResultsMessage &&\n    autocompleteResults.length > 0;\n\n  return (\n    <div\n      className={cx(MotifComponent.AUTOCOMPLETE, autoCompleteContainerCss, containerStyles, {\n        [hiddenSuggestionsCss]: !showSuggestions,\n        [shortAutoCompleteCss]: shortBar,\n      })}\n      onClick={() => {\n        setShowSearchSuggestions(currentSearchTerm.length > 0);\n        inputEl.current?.focus();\n      }}\n    >\n      <div className={rowCss}>\n        <Icon size={20} className={searchIconCss} name=\"search\" />\n        <input\n          className={cx(inputCss, inputStyles)}\n          ref={inputEl}\n          onChange={onInputChange}\n          onKeyDown={handleKeyDown}\n          value={currentSearchTerm}\n          placeholder={placeholder}\n        />\n        {collapsible && !hideCancelButton && (\n          <button onClick={onCancel} className={cancelButtonCss}>\n            {cancelMessage}\n          </button>\n        )}\n      </div>\n      {showSuggestions ? renderSuggestions() : undefined}\n      {showSeeResults ? (\n        <button\n          onClick={onSeeResultsHandler}\n          className={seeResultsCss}\n        >{`${seeResultsMessage} \"${currentSearchTerm}\"`}</button>\n      ) : undefined}\n    </div>\n  );\n}\n", "import { cx } from '@emotion/css';\nimport type { ForwardedRef } from 'react';\nimport { forwardRef, useCallback, useContext } from 'react';\n\nimport { m, MotifComponent, useMotifStyles } from '../../motif';\nimport type { BaseInteractiveComponentProps } from '../../types';\nimport type { OnActivateHandler } from '../../types/activationEvents';\nimport type { IconName } from '../Icon/Icon';\nimport { Icon } from '../Icon/Icon';\nimport { PrimitivesContext } from '../Primitives';\nimport { containerCss } from './IconButton.style';\nimport { IconButtonSize } from './IconButton.types';\n\ninterface IconButtonProps\n  extends BaseInteractiveComponentProps<HTMLButtonElement | HTMLAnchorElement> {\n  iconName: IconName;\n  url?: string;\n  onClick?: OnActivateHandler;\n  iconClassName?: string;\n  disabled?: boolean;\n  size?: IconButtonSize;\n}\n\n/** Componen that shows a round button with an icon inside. */\nexport const IconButton = forwardRef<HTMLButtonElement | HTMLAnchorElement, IconButtonProps>(\n  (props, ref) => {\n    const {\n      url,\n      iconName,\n      className,\n      iconClassName,\n      onClick,\n      disabled,\n      size = IconButtonSize.MEDIUM,\n      ...passThrough\n    } = props;\n\n    useMotifStyles(MotifComponent.ICON_BUTTON);\n    const { Anchor } = useContext(PrimitivesContext);\n\n    const containerClassName = cx(\n      MotifComponent.ICON_BUTTON,\n      containerCss,\n      size,\n      { disabled },\n      className\n    );\n    const icon = (\n      <Icon\n        name={iconName}\n        size={24}\n        fill={m('--icon-color')}\n        className={cx('icon', iconClassName)}\n      />\n    );\n\n    const onActivate = useCallback(() => {\n      if (disabled) return;\n      onClick?.();\n    }, [disabled, onClick]);\n\n    return url ? (\n      <Anchor\n        href={url}\n        ref={ref as ForwardedRef<HTMLAnchorElement>}\n        className={containerClassName}\n        onClick={onActivate}\n        {...passThrough}\n      >\n        {icon}\n      </Anchor>\n    ) : (\n      <button\n        ref={ref as ForwardedRef<HTMLButtonElement>}\n        disabled={disabled}\n        className={containerClassName}\n        onClick={onActivate}\n        {...passThrough}\n      >\n        {icon}\n      </button>\n    );\n  }\n);\n", "import { cx } from '@emotion/css';\nimport {\n  type FC,\n  type PropsWithChildren,\n  type ReactElement,\n  type ReactNode,\n  Children,\n  isValidElement,\n} from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../../motif';\nimport {\n  collapsedMobileTableCss,\n  columnCountVariable,\n  overflowOnMobileCss,\n  tableCss,\n  tableWithHeadersClassName,\n  tableWrapperCss,\n} from './PrimitiveTable.styles';\nimport {\n  PrimitiveTableCell,\n  PrimitiveTableHeader,\n  PrimitiveTableRow,\n} from './PrimitiveTableComponents';\n\nexport type PrimitiveTableProps = {\n  children?: ReactNode | undefined;\n  collapseMobileTable?: boolean;\n};\n\n/** PrimitiveTable is a wrapper around an HTML div table element adding Snap's design system styles. */\nexport const PrimitiveTable: FC<PrimitiveTableProps> = ({\n  children,\n  collapseMobileTable = false,\n}) => {\n  useMotifStyles(MotifComponent.PRIMITIVE_TABLE);\n\n  const childrenArray = Children.toArray(children) as ReactElement[];\n  const firstTableRow = childrenArray.find(\n    child => isValidElement(child) && child.type === PrimitiveTableRow\n  );\n  const columnCount = firstTableRow\n    ? Children.toArray(firstTableRow.props.children).filter(\n        child =>\n          isValidElement(child) &&\n          (child.type === PrimitiveTableHeader || child.type === PrimitiveTableCell)\n      ).length\n    : 0;\n  const hasTableHeaders = firstTableRow\n    ? Children.toArray(firstTableRow.props.children).some(\n        child => isValidElement(child) && child.type === PrimitiveTableHeader\n      )\n    : false;\n\n  // Set the column count as a CSS variable to allow for a dynamic grid-template-columns property\n  const columnCountVariableStyles = {\n    [columnCountVariable]: columnCount,\n  } as React.CSSProperties;\n\n  return (\n    // A wrapper is needed to make the table horizontally scrollable\n    <article\n      style={columnCountVariableStyles}\n      className={cx(tableWrapperCss, 'sdsm-primitive-table')}\n    >\n      <div\n        aria-label=\"Table\"\n        role=\"table\"\n        className={cx(MotifComponent.PRIMITIVE_TABLE, tableCss, {\n          [collapsedMobileTableCss]: collapseMobileTable && !hasTableHeaders,\n          [tableWithHeadersClassName]: hasTableHeaders,\n          [overflowOnMobileCss]:\n            (hasTableHeaders && columnCount >= 2) || (columnCount >= 2 && !collapseMobileTable),\n        })}\n      >\n        {children}\n      </div>\n    </article>\n  );\n};\n\nexport const CollapseTableMobile: FC<PropsWithChildren> = ({ children }) => (\n  <PrimitiveTable collapseMobileTable>{children}</PrimitiveTable>\n);\n\nexport const NoCollapseTableMobile = PrimitiveTable;\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery } from '../../../constants';\nimport { m } from '../../../motif/m';\nimport { primitiveElementClassNames } from '../Primitives.styles';\n\nexport const tableWithHeadersClassName = 'table-with-headers';\nexport const columnCountVariable = '--column-count';\n\nexport const tableWrapperCss = css`\n  background-color: ${m('--table-bg-color')};\n  border-radius: ${m('--border-radius-s')};\n  margin-bottom: ${m('--spacing-m')};\n  overflow-x: auto;\n\n  /* Paragraph margins in table cells look like extra padding, so we remove them for tables */\n  .${primitiveElementClassNames.p} {\n    margin-bottom: 0;\n    overflow-wrap: break-word;\n  }\n`;\n\n/**\n * Base CSS for table. Note that grid-template-columns is calculated and set inline to avoid\n * performance hit from using emotion/css in the render path since it is dependent on the number of\n * columns in the table which we can only determine at runtime.\n */\nexport const tableCss = css`\n  /* Allow table to scroll horizontally on smaller viewpoints */\n  border-collapse: collapse;\n  display: grid;\n  grid-template-columns: repeat(\n    var(${columnCountVariable}),\n    minmax(${m('--table-cell-min-width')}, 1fr)\n  );\n  grid-row-gap: ${m('--table-desktop-row-gap')};\n  min-width: ${m('--table-cell-min-width')};\n  overflow-x: auto;\n  width: 100%;\n  padding: ${m('--spacing-m')} 0;\n\n  div[role='cell'] {\n    padding: ${m('--table-cell-desktop-padding')};\n  }\n\n  &.${tableWithHeadersClassName} {\n    padding: unset;\n    grid-template-columns: repeat(\n      var(${columnCountVariable}),\n      minmax(${m('--table-cell-min-width')}, 1fr)\n    );\n\n    div[role='cell'] {\n      border-bottom: 1px solid ${m('--table-border-color')};\n      padding: ${m('--spacing-m')};\n    }\n  }\n`;\n\nexport const overflowOnMobileCss = css`\n  ${mobileMediaQuery} {\n    overflow-x: scroll;\n  }\n`;\n\nexport const collapsedMobileTableCss = css`\n  grid-template-columns:\n    minmax(${m('--table-cell-min-width')}, ${m('--table-first-column-max-width')})\n    repeat(calc(var(${columnCountVariable}) - 1), minmax(${m('--table-cell-min-width')}, 1fr));\n\n  /** mobile media query single column layout */\n  div[role='cell'] {\n    padding: ${m('--table-cell-desktop-padding')};\n  }\n\n  ${mobileMediaQuery} {\n    grid-row-gap: ${m('--table-mobile-row-gap')};\n    grid-auto-flow: row;\n    grid-template-columns: minmax(0, 1fr);\n    div[role='row'] {\n      display: block;\n    }\n    div[role='cell'] {\n      padding: ${m('--table-cell-mobile-padding')};\n    }\n  }\n`;\n\nexport const tableCellCss = css`\n  background-color: ${m('--table-cell-body-bg-color')};\n  color: ${m('--table-cell-fg-color')};\n`;\n\nexport const tableHeaderCss = css`\n  background-color: ${m('--table-cell-header-bg-color')};\n  border-bottom: 1px solid ${m('--table-border-color')};\n  color: ${m('--table-header-fg-color')};\n  padding: ${m('--spacing-m')};\n`;\n\nexport const tableRowCss = css`\n  display: contents;\n`;\n", "import type { FC, PropsWithChildren } from 'react';\n\nimport { tableCellCss, tableHeaderCss, tableRowCss } from './PrimitiveTable.styles';\n\n// =============================================================================\n// PrimitiveTableCell\n// =============================================================================\n\nexport const PrimitiveTableCell: FC<PropsWithChildren> = ({ children }) => {\n  return (\n    <div role=\"cell\" className={tableCellCss}>\n      {children}\n    </div>\n  );\n};\n\n// =============================================================================\n// PrimitiveTableHeader\n// =============================================================================\n\nexport const PrimitiveTableHeader: FC<PropsWithChildren> = ({ children }) => {\n  return (\n    <div role=\"columnheader\" className={tableHeaderCss}>\n      {children}\n    </div>\n  );\n};\n\n// =============================================================================\n// PrimitiveTableRow\n// =============================================================================\n\nexport const PrimitiveTableRow: FC<PropsWithChildren> = ({ children }) => {\n  return (\n    <div role=\"row\" className={tableRowCss}>\n      {children}\n    </div>\n  );\n};\n", "import { css } from '@emotion/css';\n\nimport { m } from '../../motif/m';\n\nexport const containerCss = css`\n  &.small {\n    --size: 28px;\n    --icon-size: 24px;\n  }\n  &.medium {\n    --size: 32px;\n    --icon-size: 24px;\n  }\n  &.large {\n    --size: 40px;\n    --icon-size: 24px;\n  }\n  &.extra_large {\n    --size: 64px;\n    --icon-size: 40px;\n  }\n\n  /* These are meant to be easily overridable via className prop. */\n  width: var(--size);\n  height: var(--size);\n\n  cursor: pointer;\n  transition: transform 0.2s linear;\n\n  border-radius: 50%;\n  box-shadow: ${m('--box-shadow-xs')};\n\n  /* Center */\n  display: flex;\n  align-items: center;\n  justify-content: center;\n\n  --icon-color: ${m('--icon-button-fg-color')};\n  background: ${m('--icon-button-bg-color')};\n  border: ${m('--icon-button-border-width')} solid ${m('--icon-button-border-color')};\n\n  :hover {\n    background: ${m('--icon-button-hover-bg-color')};\n    border: ${m('--icon-button-border-width')} solid ${m('--icon-button-hover-border-color')};\n    transform: translate(0, -1px);\n  }\n\n  :active,\n  .active {\n    transform: translate(0, 1px);\n  }\n\n  :disabled,\n  .disabled {\n    cursor: not-allowed;\n    transform: none;\n    --icon-color: ${m('--icon-button-disabled-fg-color')};\n    background: ${m('--icon-button-disabled-bg-color')};\n    border: ${m('--icon-button-border-width')} solid ${m('--icon-button-disabled-border-color')};\n  }\n\n  > .icon {\n    width: var(--icon-size);\n    height: var(--icon-size);\n  }\n`;\n", "import { css } from '@emotion/css';\n\nimport { BackgroundColor, nonMobileMediaQuery } from '../../constants';\nimport { m } from '../../motif/m';\n\n/** Value for autocomplete max width given by design */\nconst autoCompleteMaxWidthPx = 400;\n\nexport const autoCompleteContainerCss = css`\n  align-self: center;\n  background-color: ${m('--autocomplete-bg-color')};\n  border: ${m('--autocomplete-border-width')} solid ${m('--autocomplete-border-color')};\n  border-radius: ${m('--border-radius-l')};\n  box-sizing: border-box;\n  display: flex;\n  flex-direction: column;\n  height: 52px;\n  justify-content: center;\n  margin: 0;\n  position: relative;\n  width: 100%;\n  z-index: 20;\n\n  :has(input:hover) {\n    border-color: ${m('--autocomplete-hover-border-color')};\n    box-shadow: ${m('--autocomplete-hover-box-shadow')};\n  }\n\n  :has(input:focus) {\n    border-color: ${m('--autocomplete-active-border-color')};\n    box-shadow: ${m('--autocomplete-active-box-shadow')};\n  }\n`;\n\nexport const hiddenSuggestionsCss = css`\n  border-bottom-left-radius: ${m('--border-radius-l')};\n  border-bottom-right-radius: ${m('--border-radius-l')};\n`;\n\nexport const shortAutoCompleteCss = css`\n  margin-inline-start: auto;\n  max-width: ${autoCompleteMaxWidthPx}px;\n`;\n\nexport const inputCss = css`\n  background-color: ${m('--autocomplete-bg-color')};\n  border-style: none;\n  box-sizing: border-box;\n  color: ${m('--autocomplete-fg-color')};\n  font-family: ${m('--font-family')};\n  font-size: ${m('--autocomplete-mobile-font-size')};\n  font-weight: ${m('--autocomplete-mobile-font-weight')};\n  margin: ${m('--spacing-m')} 0;\n  outline: none;\n  padding: 0;\n  vertical-align: middle;\n  width: 100%;\n\n  *[dir='rtl'] & {\n    text-align: right;\n  }\n\n  ${nonMobileMediaQuery} {\n    font-size: ${m('--autocomplete-desktop-font-size')};\n    font-weight: ${m('--autocomplete-desktop-font-weight')};\n  }\n`;\n\nconst resultsContainerCss = (noResults: boolean) =>\n  css`\n    top: 41px;\n    /** Because container is absolute positioned when adding a border 1px it was 1px inside of the parent container below fixed */\n    left: -1px;\n    width: calc(100% + 2px);\n    position: absolute;\n    list-style: none;\n    margin-top: ${m('--spacing-xs')};\n    max-height: 175px;\n    overflow-y: auto;\n    padding-left: 0;\n    background: ${BackgroundColor.White};\n    z-index: 20;\n    border: ${m('--border-width-xs')} solid ${m('--palette-black-v150')};\n    box-sizing: border-box;\n    border-top: 0px;\n    border-bottom: ${noResults ? undefined : '0px'};\n    border-bottom-right-radius: ${!noResults ? undefined : `${m('--spacing-s')};`};\n    border-bottom-left-radius: ${!noResults ? undefined : `${m('--spacing-s')};`};\n    webkit-scrollbar {\n      width: 7px;\n    }\n    webkit-scrollbar-thumb {\n      background-clip: padding-box;\n      border-right: 2px ${BackgroundColor.White} solid;\n      background-color: ${m('--palette-gray-v100')};\n      border-radius: ${m('--border-radius-s')};\n    }\n    :before {\n      content: '';\n      background: ${m('--palette-gray-v100')};\n      position: absolute;\n      top: 0;\n      left: ${m('--spacing-m')};\n      height: 1px;\n      width: calc(100% - ${m('--spacing-xl')};);\n    }\n  `;\n\nexport const resultsContainerWithResultsCss = resultsContainerCss(true);\nexport const resultsContainerNoResultsCss = resultsContainerCss(false);\n\nexport const autocompleteListItemCss = css`\n  cursor: pointer;\n  padding: ${m('--spacing-s')} ${m('--spacing-xl')};\n  margin: 0 ${m('--spacing-m')} 0 ${m('--spacing-m')};\n  font-size: 18px;\n  color: ${m('--palette-gray-v300')};\n  line-height: 20px;\n  border-radius: 6px;\n  :hover {\n    background: ${m('--palette-gray-v100')};\n    color: ${m('--palette-black-v150')};\n  }\n`;\n\nexport const searchIconCss = css`\n  margin-block: ${m('--spacing-m')};\n  margin-inline: ${m('--spacing-m')} ${m('--spacing-s')};\n  min-width: 20px;\n`;\n\nexport const cancelButtonCss = css`\n  background: transparent;\n  border: none;\n  color: ${m('--autocomplete-button-fg-color')};\n  cursor: pointer;\n  font-family: ${m('--font-family')};\n  font-size: ${m('--action-mobile-font-size')};\n  font-weight: ${m('--action-mobile-font-weight')};\n  line-height: ${m('--action-mobile-font-line-height')};\n  margin-block: auto;\n  margin-inline: ${m('--spacing-s')} ${m('--spacing-m')};\n  padding-inline: 0;\n  white-space: nowrap;\n\n  :hover,\n  :focus {\n    color: ${m('--autocomplete-button-fg-hover-color')};\n  }\n\n  ${nonMobileMediaQuery} {\n    font-size: ${m('--action-desktop-font-size')};\n    font-weight: ${m('--action-desktop-font-weight')};\n    line-height: ${m('--action-desktop-font-line-height')};\n    margin: ${m('--spacing-m')};\n  }\n`;\n\nexport const searchButtonCss = css`\n  background: transparent;\n  border: ${m('--border-width-xs')} solid ${m('--fg-color')};\n  :hover {\n    background: transparent;\n  }\n\n  /* Overrides for the icon button style */\n  box-shadow: none;\n\n  && {\n    --icon-size: 16px;\n    --icon-color: ${m('--fg-color')};\n  }\n\n  /* Overrides for the icon button hover styles */\n  @media (hover: hover) {\n    &:hover {\n      --icon-color: ${m('--global-header-bg-color')};\n      background: ${m('--fg-color')};\n      border: ${m('--border-width-xs')} solid ${m('--fg-color')};\n      transform: none;\n    }\n  }\n`;\n\nexport const rowCss = css`\n  align-items: center;\n  display: flex;\n  height: 52px;\n\n  svg {\n    path {\n      fill: ${m('--autocomplete-placeholder-color')};\n    }\n  }\n`;\n\nexport const seeResultsCss = css`\n  padding: ${m('--spacing-s')} ${m('--spacing-xxl')} ${m('--spacing-l')};\n  font-size: ${m('--text-mobile-font-size')};\n  line-height: 20px;\n  color: ${m('--palette-blue-v200')};\n  background: white;\n  cursor: pointer;\n  /** Because container is absolute positioned when adding a border 1px it was 1px inside of the parent container below fixed */\n  left: -1px;\n  width: calc(100% + 2px);\n  position: absolute;\n  top: 224px;\n  border: ${m('--border-width-xs')} solid ${m('--palette-black-v150')};\n  border-top: 0px;\n  border-bottom-right-radius: ${m('--spacing-s')};\n  border-bottom-left-radius: ${m('--spacing-s')};\n  text-align: start;\n  z-index: 20;\n\n  ${nonMobileMediaQuery} {\n    font-size: ${m('--text-desktop-font-size')};\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport { CrossIcon } from '@snapchat/snap-design-system-icons';\nimport type { FC, PropsWithChildren } from 'react';\nimport { useState } from 'react';\n\nimport type { BackgroundColor } from '../../constants';\nimport { MotifComponent, MotifScheme, useMotifStyles } from '../../motif';\nimport { dataSetToAttributes, getBackgroundClassName } from '../../utils';\nimport {\n  globalHeaderBannerButtonDivCss,\n  globalHeaderBannerButtonStylesCss,\n  globalHeaderBannerContentContainerCss,\n  globalHeaderBannerCss,\n} from './Banner.styles';\n\ninterface BannerProps extends PropsWithChildren {\n  className?: string;\n  contentClassName?: string;\n  motifScheme?: MotifScheme;\n  /** @deprecated Use motifScheme instead. */\n  backgroundColor?: BackgroundColor;\n  dataset?: DOMStringMap;\n}\n\nexport const Banner: FC<BannerProps> = ({\n  motifScheme,\n  backgroundColor,\n  className,\n  children,\n  contentClassName,\n  dataset,\n}) => {\n  useMotifStyles(MotifComponent.BANNER);\n  const [show, setShow] = useState(true);\n\n  if (!show) {\n    return null;\n  }\n\n  // Create fallback chain here instead of default parameters otherwise if 'motifScheme' is not provided,\n  // the default background color will be used instead of falling back to the 'backgroundColor' parameter\n  const motifSchemeWithFallback =\n    motifScheme ?? (getBackgroundClassName(backgroundColor) as MotifScheme) ?? MotifScheme.DEFAULT;\n\n  return (\n    <div\n      className={cx(\n        MotifComponent.BANNER,\n        globalHeaderBannerCss,\n        className,\n        motifSchemeWithFallback\n      )}\n      {...dataSetToAttributes(dataset)}\n    >\n      <div className={cx(globalHeaderBannerContentContainerCss, contentClassName)}>{children}</div>\n      <div className={globalHeaderBannerButtonDivCss}>\n        <button className={globalHeaderBannerButtonStylesCss} onClick={() => setShow(false)}>\n          <CrossIcon size={24} />\n        </button>\n      </div>\n    </div>\n  );\n};\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery } from '../../constants';\nimport { m } from '../../motif';\nimport { bannerMinHeight } from './Banner.constants';\n\nexport const globalHeaderBannerCss = css`\n  padding: 16px 60px;\n  font-size: ${m('--banner-font-size')};\n  background-color: ${m('--banner-bg-color')};\n  color: ${m('--banner-fg-color')};\n  min-height: ${bannerMinHeight}px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  position: relative;\n  line-height: ${m('--banner-font-line-height')};\n  box-sizing: border-box;\n\n  ${mobileMediaQuery} {\n    padding: 16px 32px 16px 20px;\n  }\n`;\n\nexport const globalHeaderBannerContentContainerCss = css`\n  flex: 1;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n`;\n\nexport const globalHeaderBannerButtonDivCss = css`\n  width: 60px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  position: absolute;\n  right: 0;\n\n  ${mobileMediaQuery} {\n    width: 44px;\n  }\n`;\n\nexport const globalHeaderBannerButtonStylesCss = css`\n  background: none;\n  border: none;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  cursor: pointer;\n  /* 44 x 44 for a11y */\n  width: 44px;\n  height: 44px;\n\n  /* search icon */\n  .sds-icon-cross {\n    fill: ${m('--banner-fg-color')};\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC, PropsWithChildren, ReactNode } from 'react';\nimport { Children } from 'react';\n\nimport type { BackgroundColor } from '../../constants';\nimport { Alignment } from '../../constants';\nimport type {\n  BackgroundPosition,\n  BackgroundRepeat,\n  BackgroundSize,\n} from '../../constants/background';\nimport type { MotifScheme } from '../../motif';\nimport { p1Css } from '../../motif';\nimport { MotifComponent } from '../../motif/motifConstants';\nimport { useMotifStyles } from '../../motif/motifReactUtils';\nimport type { BaseComponentProps, Buttons, ImageSources } from '../../types';\nimport {\n  alignmentCss,\n  BlockBackgroundColorContext,\n  dataSetToAttributes,\n  getBackgroundClassName,\n  mobileAlignmentCss,\n} from '../../utils';\nimport type { WidthType } from '../BlockBoundary';\nimport { BlockBoundary } from '../BlockBoundary';\nimport type { ContentProps } from '../Content';\nimport { PictureWithStickers } from '../Picture';\nimport { type StickerProps, StickerSize } from '../Sticker';\nimport { stickersDesktopOnlyCss } from '../Sticker/styles';\nimport { VideoWithStickers } from '../Video';\nimport {\n  backgroundContainerCss,\n  backgroundCss,\n  blockBackgroundColorCss,\n  blockCss,\n  blockScrollMarginCss,\n  boundaryCss,\n  callsToActionWrapperCss,\n  contentContainerCss,\n  contentContainerStyle1ColumnCss,\n  contentContainerStyle2ColumnCss,\n  contentContainerStyle3ColumnCss,\n  contentContainerStyle4ColumnCss,\n  curtainCss,\n  denseLayoutBoundaryCss,\n  denseLayoutContentContainerCss,\n  eyebrowCss,\n  fullHeightBlockCss,\n  headerCss,\n  subtitleCss,\n  titleCss,\n} from './Block.styled';\n\nexport interface BlockProps extends BaseComponentProps {\n  mobileBackgroundVideoSource?: string;\n  backgroundImageSources?: ImageSources;\n  backgroundImageAltText?: string;\n  /** @deprecated Pass styles through className */\n  backgroundImageSource?: ImageSources;\n  /** @deprecated Pass styles through className */\n  bgImgClassName?: string;\n  /** @deprecated Pass styles through className */\n  backgroundRepeat?: BackgroundRepeat;\n  /** @deprecated Pass styles through className */\n  backgroundSize?: BackgroundSize;\n  /** @deprecated Pass styles through className */\n  backgroundPosition?: BackgroundPosition;\n  /** @deprecated. Break templates aren't controlled on the block level anymore. */\n  skipBreakTemplate?: boolean;\n  /** @deprecated Use widthStyle instead. */\n  isNarrow?: boolean;\n  /** @deprecated Breaks are managed separately */\n  isPreviousSameBackgroundColor?: boolean;\n  /** @deprecated Breaks are managed separately */\n  isNextSameBackgroundColor?: boolean;\n  /** @deprecated Provide style overrides w/ className */\n  isCustom?: boolean;\n  /** @deprecated. Use children */\n  contentsCollection?: {\n    items: Array<ContentProps>;\n  };\n  showCurtain?: boolean;\n  backgroundVideoSource?: string;\n  backgroundPosterSource?: string;\n  callsToAction?: Buttons;\n  anchorId?: string;\n  maxColumns?: 1 | 2 | 3 | 4;\n  motifScheme?: MotifScheme;\n  /** @deprecated Use motifScheme instead. */\n  backgroundColor?: BackgroundColor;\n  eyebrow?: ReactNode;\n  title?: ReactNode;\n  subtitle?: ReactNode;\n  titleAlignment?: Alignment;\n  titleAlignmentMobile?: Alignment;\n  widthStyle?: WidthType;\n  fullHeight?: boolean;\n  className?: string;\n  eyebrowDataset?: DOMStringMap;\n  titleDataset?: DOMStringMap;\n  subtitleDataset?: DOMStringMap;\n  preChildren?: ReactNode;\n  postChildren?: ReactNode;\n  backgroundMediaStickers?: StickerProps[];\n  denseLayout?: boolean;\n}\n\nexport const Block: FC<PropsWithChildren<BlockProps>> = ({\n  showCurtain,\n  backgroundVideoSource,\n  backgroundPosterSource,\n  mobileBackgroundVideoSource,\n  backgroundImageSources,\n  backgroundImageAltText,\n  callsToAction,\n  children,\n  anchorId,\n  maxColumns = 4,\n  motifScheme,\n  backgroundColor,\n  eyebrow,\n  title,\n  subtitle,\n  titleAlignment = Alignment.Center,\n  titleAlignmentMobile = Alignment.Start,\n  widthStyle = 'full',\n  fullHeight = false,\n  className,\n  style,\n  eyebrowDataset,\n  titleDataset,\n  subtitleDataset,\n  preChildren,\n  postChildren,\n  backgroundMediaStickers,\n  denseLayout = false,\n}) => {\n  useMotifStyles(MotifComponent.BLOCK);\n\n  const hasHeader = !!eyebrow || !!title || !!subtitle;\n  /**\n   * NOTE: Not using Children.count() because it returns 1 more since it counts `null` as a child,\n   * `false` as a child and empty fragments as children. See\n   * https://www.agney.dev/blog/react-children-count\n   */\n  const numChildren = Children.toArray(children).length;\n  const callsToActionCount = Children.count(callsToAction);\n\n  // Ensure that maxColumns is between 1 and 4, but not more than children count.\n  // @ts-ignore \u2014 cast number\n  maxColumns = Math.max(1, Math.min(numChildren, maxColumns));\n\n  let effectiveMaxColumns = maxColumns;\n\n  // Reduced width (1140px) is too narrow for 4 columns, so we force 3 columns.\n  if (widthStyle === 'reduced' && effectiveMaxColumns === 4) {\n    effectiveMaxColumns = 3;\n  }\n\n  // Narrow width (850px) is too narrow for 3 or 4 columns, so we force 2 columns.\n  if (widthStyle === 'narrow' && effectiveMaxColumns >= 3) {\n    effectiveMaxColumns = 2;\n  }\n\n  const backgroundMediaStickersLarge = backgroundMediaStickers?.map(sticker => ({\n    ...sticker,\n    size: StickerSize.Large,\n    insetPx: 16, // Inset stickers from the screen edges as these are applied to background media\n    className: stickersDesktopOnlyCss,\n  }));\n\n  return (\n    <article\n      id={anchorId}\n      className={cx(\n        MotifComponent.BLOCK,\n        motifScheme ?? getBackgroundClassName(backgroundColor),\n        blockCss,\n        blockScrollMarginCss,\n        {\n          [fullHeightBlockCss]: fullHeight,\n          [blockBackgroundColorCss]: !!motifScheme || !!backgroundColor,\n        },\n        className\n      )}\n      style={style}\n    >\n      {preChildren}\n      {showCurtain && <div data-testid=\"sdsm-block-curtain\" className={curtainCss} />}\n      {backgroundImageSources && (\n        <PictureWithStickers\n          imgSrcs={backgroundImageSources}\n          altText={backgroundImageAltText}\n          className={backgroundContainerCss}\n          imgClassName={backgroundCss}\n          fetchPriority=\"auto\"\n          stickers={backgroundMediaStickersLarge}\n        />\n      )}\n      {backgroundVideoSource && (\n        <VideoWithStickers\n          mobileSource={mobileBackgroundVideoSource}\n          source={backgroundVideoSource}\n          className={backgroundContainerCss}\n          videoClassName={backgroundCss}\n          posterSource={backgroundPosterSource}\n          isBackgroundVideo\n          stickers={backgroundMediaStickersLarge}\n        />\n      )}\n      <BlockBackgroundColorContext.Provider value={motifScheme ?? backgroundColor}>\n        <BlockBoundary\n          data-testid=\"sdsm-block-boundary\"\n          widthStyle={widthStyle}\n          className={cx(boundaryCss, { [denseLayoutBoundaryCss]: denseLayout })}\n        >\n          {hasHeader && (\n            <section\n              data-testid=\"sdsm-block-title\"\n              className={cx(\n                headerCss,\n                alignmentCss[titleAlignment],\n                mobileAlignmentCss[titleAlignmentMobile]\n              )}\n            >\n              {eyebrow && (\n                <div className={eyebrowCss} {...dataSetToAttributes(eyebrowDataset)}>\n                  {eyebrow}\n                </div>\n              )}\n              {title && (\n                <h2\n                  data-testid=\"sdsm-block-title\"\n                  className={cx(titleCss)}\n                  {...dataSetToAttributes(titleDataset)}\n                >\n                  {title}\n                </h2>\n              )}\n              {subtitle && (\n                <div\n                  data-testid=\"sdsm-block-subtitle\"\n                  className={cx(p1Css, subtitleCss)}\n                  {...dataSetToAttributes(subtitleDataset)}\n                >\n                  {subtitle}\n                </div>\n              )}\n            </section>\n          )}\n          {children && (\n            <section\n              data-testid=\"sdsm-block-children\"\n              data-max-columns={maxColumns}\n              className={cx(contentContainerCss, {\n                [contentContainerStyle1ColumnCss]: effectiveMaxColumns === 1,\n                [contentContainerStyle2ColumnCss]: effectiveMaxColumns === 2,\n                [contentContainerStyle3ColumnCss]: effectiveMaxColumns === 3,\n                [contentContainerStyle4ColumnCss]: effectiveMaxColumns === 4,\n                [denseLayoutContentContainerCss]: denseLayout && effectiveMaxColumns === 1,\n              })}\n            >\n              {children}\n            </section>\n          )}\n          {callsToActionCount > 0 && (\n            <section\n              data-testid=\"sdsm-block-ctas\"\n              className={cx(\n                alignmentCss[titleAlignment],\n                mobileAlignmentCss[titleAlignmentMobile],\n                callsToActionWrapperCss\n              )}\n            >\n              {callsToAction}\n            </section>\n          )}\n        </BlockBoundary>\n      </BlockBackgroundColorContext.Provider>\n      {postChildren}\n    </article>\n  );\n};\n\nBlock.displayName = 'Block';\n", "import { css, cx } from '@emotion/css';\nimport type { FC, PropsWithChildren } from 'react';\n\nimport { maxWidth, narrowWidth, nonMobileMediaQuery, reducedWidth } from '../../constants';\nimport { MotifComponent } from '../../motif/motifConstants';\nimport { useMotifStyles } from '../../motif/motifReactUtils';\nimport type { BaseComponentProps } from '../../types';\n\nexport type WidthType = 'reduced' | 'narrow' | 'full';\n\nconst styleCss = css`\n  margin: auto;\n  max-width: ${maxWidth}px;\n`;\n\n// TODO: update styles to match button styling css.\nconst styleReducedCss = css`\n  ${nonMobileMediaQuery} {\n    max-width: ${reducedWidth}px;\n    width: 80%;\n  }\n`;\n\nconst styleNarrowCss = css`\n  max-width: ${narrowWidth}px;\n`;\n\ninterface Props extends BaseComponentProps {\n  /** @deprecated Use widthStyle instead. */\n  isNarrow?: boolean;\n  widthStyle?: WidthType;\n}\n\n/** Container for block elements that ensures that they don't get too wide. */\nexport const BlockBoundary: FC<PropsWithChildren<Props>> = ({\n  children,\n  className,\n  isNarrow,\n  widthStyle,\n  ...passThroughProps\n}) => {\n  useMotifStyles(MotifComponent.BLOCK_BOUNDARY);\n\n  // TODO: Keep is isNarrow field for now to keep forBiz in tact until we fully\n  // migrate it to marketing-web\n  className = cx(\n    MotifComponent.BLOCK_BOUNDARY,\n    styleCss, // Has to come first so that later classnames can override\n    {\n      [styleReducedCss]: widthStyle === 'reduced',\n      [styleNarrowCss]: isNarrow || widthStyle === 'narrow',\n    },\n    className\n  );\n\n  return (\n    <div {...passThroughProps} className={className}>\n      {children}\n    </div>\n  );\n};\n\nBlockBoundary.displayName = 'BlockBoundary';\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport { useEffect, useState } from 'react';\n\nimport { MediaMode } from '../../constants';\nimport { useMediaMode } from '../../hooks/useMediaMode';\nimport { ToggleState, ToggleTarget, useToggleState } from '../../hooks/useToggleState';\nimport { MotifComponent } from '../../motif/motifConstants';\nimport { useMotifStyles } from '../../motif/motifReactUtils';\nimport { getBackgroundClassName } from '../../utils';\nimport { globalHeaderTransitionDuration, testIds } from './GlobalHeader.constants';\nimport { GlobalHeaderContext } from './GlobalHeaderContext';\nimport { GlobalHeaderDesktop } from './GlobalHeaderDesktop';\nimport { GlobalHeaderMobile } from './GlobalHeaderMobile';\nimport type { GlobalHeaderProps } from './types';\n\n/** Synthetic group key for the local nav as displayed on the mobile nav screen. */\nexport const defaultGlobalNavMobileGroupKey = 'home';\n\n// npm run test -- --testPathPattern=GlobalHeader\nexport const GlobalHeader: FC<GlobalHeaderProps> = ({\n  motifScheme,\n  backgroundColor,\n  className,\n  defaultGroupKey,\n  children,\n  displayed,\n  onToggleExpanded,\n  stayOpenInvariant,\n  trackingSiteName,\n  showNavScreen = true,\n  dataset,\n  isUrlCurrent,\n  buttonAriaLabel,\n  ...otherHeaderProps\n}) => {\n  useMotifStyles(MotifComponent.HEADER);\n\n  const mode = useMediaMode();\n\n  const { state: isExpandedState, toggle: toggleExpanded } = useToggleState({\n    transitionDurationMs: globalHeaderTransitionDuration,\n    onToggle: (newState, _oldState) => {\n      if (onToggleExpanded) {\n        // Immediately show screen turning on begins.\n        if (newState === ToggleState.TURNING_ON) {\n          onToggleExpanded(true);\n        }\n\n        // Hide the screen when turning off animation finishes.\n        if (newState === ToggleState.OFF) {\n          onToggleExpanded(false);\n        }\n      }\n\n      // Lose focus on the toggle button in case it was triggered via keyboard.\n      const activeElement = document?.activeElement as HTMLElement;\n      activeElement?.blur();\n    },\n  });\n\n  // Close the open nav if the open-invariant deviates or if the mobile/desktop mode changes.\n  // Note that we not want to trigger this when `toggleExpanded` changes.\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  useEffect(() => toggleExpanded(ToggleTarget.OFF), [mode, stayOpenInvariant]);\n\n  const [groupKey, setGroupKey] = useState<string>(\n    mode === MediaMode.Mobile ? defaultGlobalNavMobileGroupKey : defaultGroupKey ?? ''\n  );\n\n  const isVisible = displayed ?? true;\n  const classNameWithTheme = cx(\n    MotifComponent.HEADER,\n    motifScheme ?? getBackgroundClassName(backgroundColor),\n    isVisible ? null : 'hidden',\n    className\n  );\n\n  if (!dataset?.testid) {\n    dataset = { ...dataset, testid: testIds.headerTopLevel } as DOMStringMap;\n  }\n\n  const isExpanded = isExpandedState !== ToggleState.OFF;\n  const GlobalHeaderImpl = mode === MediaMode.Mobile ? GlobalHeaderMobile : GlobalHeaderDesktop;\n  return (\n    <GlobalHeaderContext.Provider\n      value={{\n        mode,\n        groupKey,\n        setGroupKey,\n        toggleExpanded,\n        screenState: isExpandedState,\n        trackingSiteName,\n        isUrlCurrent,\n      }}\n    >\n      <GlobalHeaderImpl\n        {...otherHeaderProps}\n        isExpanded={isExpanded}\n        toggleExpanded={toggleExpanded}\n        className={classNameWithTheme}\n        showNavScreen={showNavScreen}\n        buttonAriaLabel={buttonAriaLabel}\n        dataset={dataset}\n      />\n      {isExpanded && showNavScreen && children}\n    </GlobalHeaderContext.Provider>\n  );\n};\n\nGlobalHeader.displayName = 'GlobalHeader';\n", "import { createContext } from 'react';\n\nimport type { MediaMode } from '../../constants';\nimport type { ToggleState } from '../../hooks/useToggleState';\n\ninterface GlobalHeaderContextProps {\n  /** Narrow (Mobile) or Wide (Desktop) display mode. */\n  mode?: MediaMode;\n\n  /** Selected group key. Controls the highlight, highlight CTA and active indicator. */\n  groupKey?: string;\n  setGroupKey?: (groupKey: string) => void;\n\n  /** Handler for the open/close buttons to display the nav. */\n  toggleExpanded?: () => void;\n\n  /** State of the expansion; useful for animation tracking. */\n  screenState?: ToggleState;\n\n  /** Name of the site as visible as UTM source parameter for outgoing link tracking. */\n  trackingSiteName?: string;\n\n  /**\n   * Function for determining whether a url is the current location. Used for setting selected state\n   * of navigation items.\n   */\n  isUrlCurrent?: (url: string) => boolean;\n}\n\nexport const GlobalHeaderContext = createContext<GlobalHeaderContextProps>({});\n", "import { css } from '@emotion/css';\n\nimport {\n  extraLargeDesktopWidth,\n  mobileMediaQuery,\n  smallDesktopMediaQuery,\n  Spacing,\n} from '../../constants';\nimport { ZIndex } from '../../constants/zIndex';\nimport { m, MotifComponent } from '../../motif';\nimport { globalHeaderHeight } from './GlobalHeader.constants';\n\n/**\n * Inserts margin onto children.\n *\n * Outer children start and end with {@link outerMargin} and inbetween an {@link innerMargin} is\n * inserted.\n *\n * TODO: Rewrite using `grid-gap` when we start using grid.\n */\nconst childrenMarginCss = (outerMargin: number, innerMargin: number) => css`\n  & > * {\n    margin-left: ${innerMargin / 2}px;\n    margin-right: ${innerMargin / 2}px;\n  }\n\n  & > *:first-child {\n    margin-left: ${outerMargin}px;\n    margin-right: ${innerMargin / 2}px;\n\n    *[dir='rtl'] & {\n      margin-right: ${outerMargin}px;\n      margin-left: ${innerMargin / 2}px;\n    }\n  }\n\n  /* stylelint-disable-next-line no-descending-specificity */\n  & > *:last-child {\n    margin-left: ${innerMargin / 2}px;\n    margin-right: ${outerMargin}px;\n\n    *[dir='rtl'] & {\n      margin-right: ${innerMargin / 2}px;\n      margin-left: ${outerMargin}px;\n    }\n  }\n`;\n\nconst globalHeaderCss = css`\n  height: ${globalHeaderHeight}px;\n  max-height: ${globalHeaderHeight}px;\n\n  /* TODO: this doesnt really show well, and needs to work with subnav/banners. */\n  /* box-shadow: ${m('--box-shadow-m')}; */\n\n  color: ${m('--global-header-fg-color')};\n  background-color: ${m('--global-header-bg-color')};\n\n  /* Prevent the header from expanding the body to fit its contents. */\n  max-width: 100vw;\n  overflow-x: clip;\n  overflow-y: revert;\n\n  /* Stretch the header to the sides and ensure it's visible. */\n  position: sticky;\n  top: 0;\n  left: 0;\n  right: 0;\n  z-index: ${ZIndex.NAVIGATOR};\n\n  opacity: 1;\n  &.hidden {\n    opacity: 0;\n    transform: translateY(-100%);\n  }\n  transition: opacity 250ms ease-in, transform 250ms ease-out;\n`;\n\nconst smallDesktopLessMarginsPadding = m('--spacing-xl');\nconst desktopLessMarginsPadding = m('--spacing-xxxl');\n\nexport const globalHeaderLessMarginsCss = css`\n  ${childrenMarginCss(0, Spacing.MD)}\n  /* we have less margins with items, but padding is larger */\n  padding: 0 ${smallDesktopLessMarginsPadding};\n\n  ${smallDesktopMediaQuery} {\n    padding: 0 ${desktopLessMarginsPadding};\n  }\n`;\n\n/**\n * Style for the desktop header. Assumes there are 4 elements: [logo, menu, nav, cta].\n *\n * The nav is the only one that expands.\n */\nexport const globalHeaderDesktopCss = css`\n  ${globalHeaderCss}\n  /* Prevent the header from expanding the body to fit its contents. */\n  max-width: 100vw;\n  overflow-x: clip;\n\n  /* Stretch the header to the sides and ensure it's visible. */\n  position: sticky;\n  top: 0;\n  left: 0;\n  right: 0;\n  z-index: ${ZIndex.NAVIGATOR};\n\n  opacity: 1;\n  &.hidden {\n    opacity: 0;\n    transform: translateY(-100%);\n  }\n  transition: opacity 250ms ease-in, transform 250ms ease-out;\n`;\n\n/** Style for the mobile header. Assumes there are 3 elements: [menu, logo, cta] */\nexport const globalHeaderMobileCss = css`\n  ${globalHeaderCss}\n  display: flex;\n  align-items: center;\n  ${childrenMarginCss(20, Spacing.MD)}\n  & > *:first-child,\n  & > *:last-child {\n    display: flex;\n    flex-grow: 1;\n    flex-basis: 100px;\n  }\n\n  & > *:first-child {\n    justify-content: flex-start;\n  }\n\n  & > *:last-child {\n    justify-content: flex-end;\n  }\n`;\n\n// NOTE: This uses triple specific selection to override the double specific\n// button styles like `.css-ymmsc2.button-secondary:hover`.\nexport const globalHeaderDesktopNavButtonCss = css`\n  > svg {\n    fill: ${m('--global-header-item-color')};\n    transition: all 0.15s ease-out;\n  }\n\n  &&& {\n    background: transparent;\n    border: 0;\n    box-shadow: none;\n    padding: 0 7px; /* Must override the padding on button. */\n  }\n\n  &&&:hover {\n    border-color: ${m('--global-header-item-hover-color')};\n\n    /* Clearing out styles from the regular button. */\n    box-shadow: none;\n    transform: none;\n\n    > svg {\n      fill: ${m('--global-header-item-hover-color')};\n    }\n  }\n`;\n\nexport const globalHeaderMobileNavButtonCss = css`\n  background-color: transparent;\n  border: none;\n  color: ${m('--fg-color')};\n  padding: 4px 8px;\n  cursor: pointer;\n`;\n\nexport const globalHeaderMobileBottomBorderCss = css`\n  border-bottom: 1px solid ${m('--global-header-border-color')};\n`;\n\nexport const globalHeaderCtaDesktopCss = css`\n  display: flex;\n  align-items: center;\n\n  ${childrenMarginCss(0, Spacing.MD)}\n`;\n\n/** Styles for all buttons in Global Header */\nexport const globalHeaderButtonCss = css`\n  box-shadow: none;\n  /* Hack to hide icons in CTAs. */\n  i[class^='icon-'],\n  img,\n  svg {\n    display: none;\n  }\n`;\n\n/** In mobile layout we want to display flat button style with smaller font. This enables that. */\nexport const globalHeaderCtaMobileCss = css`\n  & > *:not(:first-child) {\n    margin-left: 16px;\n    *[dir='rtl'] & {\n      margin-left: unset;\n      margin-right: 16px;\n    }\n  }\n\n  /* NOTE: Triple specific selector to override button's double-specific styles. */\n  & .${MotifComponent.BUTTON}.${MotifComponent.BUTTON}.${MotifComponent.BUTTON} {\n    ${globalHeaderButtonCss}\n    font-size: smaller;\n    margin-right: 0;\n    padding: 4px;\n    width: inherit; /* buttons on mobile render full width by default which we don't want here */\n    *[dir='rtl'] & {\n      margin-right: unset;\n      margin-left: 0;\n    }\n  }\n`;\n\nexport const globalHeaderNavButtonCss = css`\n  width: 40px;\n  height: 40px;\n  border: ${m('--border-width-xs')} solid ${m('--neutral-v300')};\n  border-radius: 50%;\n  background-color: transparent;\n`;\n\n// We moved the styles into the div inside the header to fix the\n// Safari 16.2 dropdown bug where the dropdowns where hidden\nexport const globalHeaderDesktopContainerCss = css`\n  align-items: center;\n  display: flex;\n  height: ${globalHeaderHeight}px;\n  margin: 0 auto;\n  max-height: ${globalHeaderHeight}px;\n  max-width: ${extraLargeDesktopWidth}px;\n  padding: 0 40px;\n  ${childrenMarginCss(20, Spacing.MD)}\n\n  /* used to make the header take up the full width of the container */\n  /* this is needed when users click on the search icon */\n  flex-grow: 1;\n\n  /**\n   * We are overriding the overflow from globalHeaderCss because of a bug\n   * on Safari 16.2. Not sure why this works so this is a bandaid. Ideally we don't do this\n   */\n  overflow: visible;\n\n  & > nav {\n    flex-grow: 1;\n    display: flex;\n    justify-content: flex-end;\n  }\n\n  span {\n    font-weight: ${m('--action-desktop-font-weight')};\n    font-size: ${m('--action-desktop-font-size')};\n    margin: 0 ${m('--spacing-xs')};\n\n    ${mobileMediaQuery} {\n      font-weight: ${m('--action-mobile-font-weight')};\n      font-size: ${m('--action-mobile-font-size')};\n    }\n  }\n`;\n\nexport const globalHeaderMobileBarCss = css`\n  margin: -7.5px -5px;\n`;\n\n/* NOTE: using element and class selector to increase specificity (otherwise this gets overridden by `--action-desktop-*` style if styled as a link */\nexport const globalHeaderSiteNameCss = css`\n  span.site-name {\n    font-family: ${m('--global-header-site-name-font-family')};\n    font-size: ${m('--global-header-site-name-font-size')};\n  }\n`;\n\nexport const globalHeaderUnderlineCss = css`\n  background-color: ${m('--global-header-border-color')};\n  bottom: 0;\n  height: ${m('--border-width-xs')};\n  left: 0;\n  margin: auto;\n  max-width: calc(${extraLargeDesktopWidth}px - calc(${smallDesktopLessMarginsPadding} * 2));\n  position: absolute;\n  right: 0;\n  width: calc(100% - calc(${smallDesktopLessMarginsPadding} * 2));\n\n  ${smallDesktopMediaQuery} {\n    max-width: calc(${extraLargeDesktopWidth}px - calc(${desktopLessMarginsPadding} * 2));\n    width: calc(100% - calc(${desktopLessMarginsPadding} * 2));\n  }\n`;\n\nexport const globalHeaderDesktopRelativeParentCss = css`\n  position: relative;\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport { dataSetToAttributes } from '../../utils';\nimport { IconButton } from '../IconButton';\nimport { IconButtonSize } from '../IconButton/IconButton.types';\nimport { globalNavMenuButtonClassName, testIds } from './GlobalHeader.constants';\nimport {\n  globalHeaderCtaDesktopCss,\n  globalHeaderDesktopContainerCss,\n  globalHeaderDesktopCss,\n  globalHeaderDesktopNavButtonCss,\n  globalHeaderDesktopRelativeParentCss,\n  globalHeaderLessMarginsCss,\n  globalHeaderSiteNameCss,\n  globalHeaderUnderlineCss,\n} from './GlobalHeader.styles';\nimport type { GlobalHeaderDesktopProps } from './types';\n\nconst alignmentToCss = (alignment: 'left' | 'right' | 'center') => {\n  switch (alignment) {\n    case 'left':\n      return 'flex-start';\n    case 'right':\n      return 'flex-end';\n    case 'center':\n      return 'center';\n  }\n};\n\nexport const GlobalHeaderDesktop: FC<GlobalHeaderDesktopProps> = ({\n  logo,\n  siteName,\n  className,\n  cta,\n  endChildrenClassName,\n  localNavDesktop,\n  toggleExpanded,\n  showNavScreen,\n  showGlobalLinks = true,\n  navItemAlignment = 'right',\n  buttonAriaLabel,\n  dataset,\n  lessMargins,\n  addBottomBorder,\n  customIcon,\n  headerClassName,\n}) => (\n  <header\n    className={cx(globalHeaderDesktopCss, globalHeaderSiteNameCss, className, headerClassName)}\n    {...dataSetToAttributes(dataset)}\n  >\n    {/* we need this wrapper div for the bottom border... */}\n    <div className={globalHeaderDesktopRelativeParentCss}>\n      {/* // HACK: we move everything inside a div with overflow visible, and do the clip on the header parent */}\n      <div\n        className={cx(globalHeaderDesktopContainerCss, lessMargins && globalHeaderLessMarginsCss)}\n      >\n        {showGlobalLinks && showNavScreen && (\n          <IconButton\n            size={IconButtonSize.LARGE}\n            className={cx(globalNavMenuButtonClassName, globalHeaderDesktopNavButtonCss)}\n            iconName={customIcon || 'dots'}\n            onClick={toggleExpanded}\n            data-testid={testIds.openButton}\n            aria-label={buttonAriaLabel}\n          />\n        )}\n        {logo}\n        <span className=\"site-name\">{siteName}</span>\n        <nav\n          style={{ justifyContent: alignmentToCss(navItemAlignment) }}\n          data-testid={testIds.navItems}\n        >\n          {localNavDesktop}\n        </nav>\n        {!!cta && (\n          <aside\n            className={endChildrenClassName ?? globalHeaderCtaDesktopCss}\n            data-testid={testIds.endContents}\n          >\n            {cta}\n          </aside>\n        )}\n      </div>\n      {addBottomBorder && <div className={globalHeaderUnderlineCss} />}\n    </div>\n  </header>\n);\n\nGlobalHeaderDesktop.displayName = 'GlobalHeaderDesktop';\n", "import { cx } from '@emotion/css';\nimport { useContext } from 'react';\n\nimport { ToggleState } from '../../../hooks';\nimport { GlobalHeaderContext } from '../GlobalHeaderContext';\nimport {\n  dotBottomLeftCss,\n  dotBottomRightCss,\n  dotContainerCss,\n  dotCss,\n  dotsGroupContainerCss,\n  dotTopLeftCss,\n  dotTopRightCss,\n} from './GlobalHeaderAnimatedIcon.styles';\n\nexport const GlobalHeaderAnimatedIcon = () => {\n  const { screenState } = useContext(GlobalHeaderContext);\n\n  return (\n    <div\n      className={cx(dotsGroupContainerCss, {\n        expanded: screenState === ToggleState.TURNING_ON || screenState === ToggleState.ON,\n        collapsed: screenState === ToggleState.TURNING_OFF,\n      })}\n    >\n      <div className={dotContainerCss}>\n        <div className={cx('dot', dotCss, dotTopLeftCss)} />\n      </div>\n      <div className={dotContainerCss}>\n        <div className={cx('dot', dotCss, dotTopRightCss)} />\n      </div>\n      <div className={dotContainerCss}>\n        <div className={cx('dot', dotCss, dotBottomLeftCss)} />\n      </div>\n      <div className={dotContainerCss}>\n        <div className={cx('dot', dotCss, dotBottomRightCss)} />\n      </div>\n    </div>\n  );\n};\n", "import { css } from '@emotion/css';\n\nimport { m } from '../../../motif';\nimport { globalHeaderTransitionDuration } from '../GlobalHeader.constants';\n\n/** Styles for the animated icon used in the mobile header navigation button. */\nexport const dotsGroupContainerCss = css`\n  background-color: transparent;\n  cursor: pointer;\n  display: grid;\n  grid-template-columns: repeat(2, 12px);\n  grid-template-rows: repeat(2, 12px);\n  height: 24px;\n  margin: 0;\n  max-height: 24px;\n  max-width: 24px;\n  user-select: none;\n  width: 24px;\n  transition: transform ${globalHeaderTransitionDuration}ms ease-in-out;\n\n  &.expanded {\n    transform: rotate(-180deg);\n\n    .dot {\n      animation: dot-animation ${globalHeaderTransitionDuration}ms ease-out forwards;\n    }\n  }\n\n  &.collapsed {\n    transform: rotate(0deg);\n\n    .dot {\n      animation: dot-animation-reverse ${globalHeaderTransitionDuration}ms ease-in forwards;\n    }\n  }\n\n  /* RTL overrides - placed after base rules to satisfy specificity ordering */\n  [dir='rtl'] &.expanded {\n    transform: rotate(180deg); /* Mirror: rotate clockwise instead of counter-clockwise */\n  }\n\n  [dir='rtl'] &.expanded .dot {\n    animation: dot-animation-rtl ${globalHeaderTransitionDuration}ms ease-out forwards;\n  }\n\n  [dir='rtl'] &.collapsed .dot {\n    animation: dot-animation-reverse-rtl ${globalHeaderTransitionDuration}ms ease-in forwards;\n  }\n\n  /** Animation for the dots when expanding */\n  @keyframes dot-animation {\n    0% {\n      border-radius: 50%;\n      transform: translateX(0) scale(1, 1);\n    }\n    15% {\n      border-radius: 50%;\n      transform: translateX(0) scale(1, 1);\n    }\n    100% {\n      border-radius: 0%;\n      transform: translateX(4px) scale(2, 0.35);\n    }\n  }\n\n  @keyframes dot-animation-rtl {\n    0% {\n      border-radius: 50%;\n      transform: translateX(0) scale(1, 1);\n    }\n    15% {\n      border-radius: 50%;\n      transform: translateX(0) scale(1, 1);\n    }\n    100% {\n      border-radius: 0%;\n      transform: translateX(-4px) scale(2, 0.35);\n    }\n  }\n\n  /** Animation for the dots when collapsing */\n  @keyframes dot-animation-reverse {\n    0% {\n      border-radius: 0%;\n      transform: translateX(4px) scale(2, 0.35);\n    }\n    85% {\n      border-radius: 50%;\n      transform: translateX(0) scale(1, 1);\n    }\n    100% {\n      border-radius: 50%;\n      transform: translateX(0) scale(1, 1);\n    }\n  }\n\n  @keyframes dot-animation-reverse-rtl {\n    0% {\n      border-radius: 0%;\n      transform: translateX(-4px) scale(2, 0.35);\n    }\n    85% {\n      border-radius: 50%;\n      transform: translateX(0) scale(1, 1);\n    }\n    100% {\n      border-radius: 50%;\n      transform: translateX(0) scale(1, 1);\n    }\n  }\n`;\n\nexport const dotContainerCss = css`\n  align-items: center;\n  display: flex;\n  flex-grow: 0;\n  flex-shrink: 0;\n  justify-content: center;\n`;\n\nexport const dotCss = css`\n  background-color: ${m('--fg-color')};\n  border-radius: 50%;\n  height: 7px;\n  width: 7px;\n`;\n\nexport const dotTopLeftCss = css`\n  rotate: 45deg;\n\n  [dir='rtl'] & {\n    rotate: -45deg;\n  }\n`;\n\nexport const dotBottomLeftCss = css`\n  rotate: -45deg;\n\n  [dir='rtl'] & {\n    rotate: 45deg;\n  }\n`;\n\nexport const dotTopRightCss = css`\n  rotate: 135deg;\n\n  [dir='rtl'] & {\n    rotate: -135deg;\n  }\n`;\n\nexport const dotBottomRightCss = css`\n  rotate: -135deg;\n\n  [dir='rtl'] & {\n    rotate: 135deg;\n  }\n`;\n", "export const testIds = {\n  navTopLevel: 'sdsm-global-nav-screen',\n  closeButton: 'sdsm-global-nav-screen-close',\n  navItems: 'sdsm-global-nav-screen-items',\n  navHighlights: 'sdsm-global-nav-screen-highlights',\n};\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport { dataSetToAttributes } from '../../utils';\nimport { testIds } from './GlobalHeader.constants';\nimport {\n  globalHeaderCtaMobileCss,\n  globalHeaderMobileBottomBorderCss,\n  globalHeaderMobileCss,\n  globalHeaderMobileNavButtonCss,\n} from './GlobalHeader.styles';\nimport { GlobalHeaderAnimatedIcon } from './GlobalHeaderAnimatedIcon/GlobalHeaderAnimatedIcon';\nimport { testIds as navScreenTestIds } from './GlobalNavScreen/GlobalNavScreen.constants';\nimport type { GlobalHeaderMobileProps } from './types';\n\nexport const GlobalHeaderMobile: FC<GlobalHeaderMobileProps> = ({\n  logo,\n  cta,\n  className,\n  isExpanded,\n  toggleExpanded,\n  showNavScreen,\n  endChildrenClassName,\n  buttonAriaLabel,\n  dataset,\n  addBottomBorder,\n}) => (\n  <header\n    className={cx(\n      globalHeaderMobileCss,\n      addBottomBorder && globalHeaderMobileBottomBorderCss,\n      className\n    )}\n    {...dataSetToAttributes(dataset)}\n  >\n    {showNavScreen && (\n      <button\n        onClick={toggleExpanded}\n        className={globalHeaderMobileNavButtonCss}\n        data-testid={isExpanded ? navScreenTestIds.closeButton : testIds.openButton}\n        aria-label={buttonAriaLabel}\n      >\n        <GlobalHeaderAnimatedIcon />\n      </button>\n    )}\n    {logo}\n    <aside\n      className={endChildrenClassName ?? globalHeaderCtaMobileCss}\n      data-testid={testIds.endContents}\n    >\n      {cta}\n    </aside>\n  </header>\n);\n\nGlobalHeaderMobile.displayName = 'GlobalHeaderMobile';\n", "import { cx } from '@emotion/css';\nimport type { CSSProperties, FC } from 'react';\nimport { Children, useContext, useEffect, useState } from 'react';\n\nimport { MediaMode } from '../../../constants/media';\nimport { ToggleState, ToggleTarget } from '../../../hooks/useToggleState';\nimport { DetailsSummary } from '../../DetailsSummary';\nimport {\n  globalNavGroupAnimationDurationMs,\n  globalNavLevelClassName,\n} from '../GlobalHeader.constants';\nimport { GlobalHeaderContext } from '../GlobalHeaderContext';\nimport { globalNavItemChevronCss } from '../GlobalNavItem/GlobalNavItem.styles';\nimport {\n  childrenCountCssVarName,\n  detailsHeightAnimationDesktopCss,\n  globalNavGroupActiveCss,\n  globalNavGroupCss,\n  globalNavGroupOpenCss,\n  itemListCss,\n} from './GlobalNavGroup.styles';\nimport type { GlobalNavGroupProps } from './types';\n\nexport const GlobalNavGroup: FC<GlobalNavGroupProps> = ({\n  navGroupKey,\n  title,\n  mobileHighlight,\n  isActive,\n  children,\n}) => {\n  const { groupKey, setGroupKey, mode, screenState } = useContext(GlobalHeaderContext);\n\n  const [isOpen, setIsOpen] = useState<boolean>(groupKey === navGroupKey);\n\n  useEffect(\n    () => {\n      const newIsOpen = groupKey === navGroupKey;\n\n      // Do nothing if there's no state update.\n      if (isOpen === newIsOpen) {\n        return;\n      }\n\n      let timeoutRef: ReturnType<typeof setTimeout>;\n\n      if (newIsOpen && screenState === ToggleState.ON) {\n        timeoutRef = setTimeout(setIsOpen.bind(null, newIsOpen), globalNavGroupAnimationDurationMs);\n      } else {\n        setIsOpen(newIsOpen);\n      }\n\n      return () => {\n        timeoutRef && clearTimeout(timeoutRef);\n      };\n    },\n    // Skip 'screenState' because changes shouldn't re-trigger animations.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [groupKey, navGroupKey]\n  );\n\n  const wrappedChildren = (\n    <ol className={itemListCss} role=\"menu\">\n      {Children.map(children, (child, index) => {\n        // biome-ignore lint/suspicious/noArrayIndexKey: Only index available\n        return <li key={`list-item-${index}`}>{child}</li>;\n      })}\n    </ol>\n  );\n\n  const setGroupKeyOnToggleOn = (target: ToggleTarget) => {\n    if (target === ToggleTarget.ON) {\n      setGroupKey?.(navGroupKey);\n    }\n  };\n\n  const isMobile = mode === MediaMode.Mobile;\n\n  return (\n    <DetailsSummary\n      forceOpenAttribute={isMobile ? undefined : true}\n      showChevron={mode === MediaMode.Mobile}\n      onToggle={setGroupKeyOnToggleOn}\n      open={isMobile ? undefined : isOpen} // Do not force state on mobile.\n      summary={title}\n      chevronProps={{ className: globalNavItemChevronCss }}\n      className={cx(\n        globalNavLevelClassName,\n        isMobile ? undefined : detailsHeightAnimationDesktopCss,\n        globalNavGroupCss,\n        {\n          [globalNavGroupOpenCss]: isOpen,\n          [globalNavGroupActiveCss]: isActive,\n        }\n      )}\n      fadeInAnimation={isMobile} // Use default fade-in animations on mobile. They're faster.\n      transitionDurationMs={globalNavGroupAnimationDurationMs}\n      data-testid={`group-${navGroupKey}`}\n      style={\n        {\n          [childrenCountCssVarName]: Children.count(children),\n        } as CSSProperties\n      }\n    >\n      {wrappedChildren}\n      {isMobile && mobileHighlight}\n    </DetailsSummary>\n  );\n};\n\nGlobalNavGroup.displayName = 'GlobalNavGroup';\n", "import { css } from '@emotion/css';\n\nimport { m } from '../../../motif/m';\n\nexport const globalNavItemCss = css`\n  display: flex;\n  justify-content: space-between;\n\n  & > .icon-external-link {\n    color: ${m('--global-header-item-color')};\n    font-size: 16px;\n    vertical-align: middle;\n    align-self: center;\n  }\n\n  & > a {\n    position: relative;\n  }\n\n  & a.selected {\n    color: ${m('--global-header-item-active-color')};\n  }\n\n  padding: 0;\n`;\n\nexport const globalNavItemWithChildrenCss = css`\n  summary.selected {\n    color: ${m('--global-header-item-active-color')};\n  }\n`;\n\nexport const externalIconCss = css`\n  &.icon-external-link {\n    color: ${m('--global-header-item-color')};\n    font-size: 14px;\n    margin: 0 9px;\n  }\n`;\n\nexport const globalNavItemChevronCss = css`\n  width: 20px;\n  height: 20px;\n  fill: ${m('--global-header-item-color')};\n\n  summary.selected > & {\n    fill: ${m('--global-header-item-active-color')};\n  }\n`;\n\n/**\n * Double specificity is necessary to ensure Global Nav Item uses active color when matching the\n * current URL\n */\nexport const globalNavItemActiveCss = css`\n  && {\n    && {\n      color: ${m('--global-header-item-active-color')};\n    }\n  }\n`;\n", "import { css } from '@emotion/css';\n\nimport { nonMobileMediaQuery } from '../../../constants';\nimport { androidLinearOutSlowIn } from '../../../constants/animation';\nimport { m } from '../../../motif/m';\nimport {\n  globalNavGroupAnimationDurationMs,\n  globalNavNegativeOuterMargin,\n  globalNavOuterMargin,\n  nextLevelLineHeightCssVar,\n} from '../GlobalHeader.constants';\n\nexport const childrenCountCssVarName = '--children-count';\nconst animateInDetailsCss = css`\n  overflow: hidden;\n\n  height: 0;\n  opacity: 0;\n\n  transition-property: opacity, height;\n  transition-duration: ${globalNavGroupAnimationDurationMs}ms;\n  transition-timing-function: ease-in;\n\n  details[data-state='on'] &,\n  details[data-state='turning-on'] & {\n    height: calc(var(${nextLevelLineHeightCssVar}) * var(${childrenCountCssVarName}));\n    opacity: 1;\n\n    transition-timing-function: ${androidLinearOutSlowIn};\n  }\n`;\n\nexport const itemListCss = css`\n  list-style-type: none;\n  padding: 0 0 0 16px;\n  margin: 0;\n\n  *[dir='rtl'] & {\n    padding-left: initial;\n    padding-right: 12px;\n  }\n\n  ${nonMobileMediaQuery} {\n    ${animateInDetailsCss}\n  }\n`;\n\n// Force styles on Global Nav Group when Global Nav is open\nexport const globalNavGroupOpenCss = css`\n  & > summary {\n    color: ${m('--global-header-item-hover-color')};\n  }\n  &::before {\n    visibility: visible;\n  }\n`;\n\nexport const globalNavGroupActiveCss = css`\n  & > summary {\n    color: ${m('--global-header-item-active-color')};\n  }\n\n  &::before {\n    visibility: visible;\n    background-color: ${m('--global-header-indicator-active-color')};\n  }\n`;\n\nexport const globalNavGroupCss = css`\n  transition: color 0.125s;\n  white-space: nowrap;\n  scroll-margin: ${globalNavOuterMargin};\n\n  /* Hide the text that doesn't fit. */\n  > summary {\n    text-overflow: ellipsis;\n    overflow: hidden;\n  }\n\n  &:hover,\n  &:active,\n  &:focus-within,\n  [data-state='on'] > summary {\n    color: ${m('--global-header-item-hover-color')};\n  }\n\n  /** Displays the knob on active and hover in desktop mode only */\n  ${nonMobileMediaQuery} {\n    /* Move the summary over so we can position the knob inside */\n    left: ${globalNavNegativeOuterMargin};\n    padding-left: ${globalNavOuterMargin};\n    width: calc(${globalNavOuterMargin} + 100%);\n\n    *[dir='rtl'] & {\n      left: unset;\n      padding-left: unset;\n      right: ${globalNavNegativeOuterMargin};\n      padding-right: ${globalNavOuterMargin};\n    }\n\n    &::before {\n      content: ' ';\n      background-color: ${m('--global-header-indicator-hover-color')};\n      position: absolute;\n      left: 0;\n      top: 10px;\n      width: 4px;\n      height: 32px;\n      border-start-end-radius: ${m('--action-indicator-border-radius')};\n      border-end-end-radius: ${m('--action-indicator-border-radius')};\n      visibility: hidden;\n    }\n\n    *[dir='rtl'] &::before {\n      left: unset;\n      right: 0;\n    }\n\n    &:focus-within::before,\n    &:hover::before,\n    &:active::before,\n    details[data-state='on'] > &::before {\n      visibility: visible;\n    }\n  }\n`;\n\nexport const detailsHeightAnimationDesktopCss = css`\n  position: relative;\n`;\n", "import type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { MediaMode } from '../../../constants';\nimport { GlobalHeaderContext } from '../GlobalHeaderContext';\nimport { GlobalNavHighlightDesktop } from './GlobalNavHighlightDesktop';\nimport type { GlobalNavHighlightProps } from './types';\n\nexport const GlobalNavHighlight: FC<GlobalNavHighlightProps> = props => {\n  const headerContext = useContext(GlobalHeaderContext);\n  const isMobile = headerContext.mode === MediaMode.Mobile;\n  // only showing highlights on desktop\n  return isMobile ? null : <GlobalNavHighlightDesktop {...props} />;\n};\n\nGlobalNavHighlight.displayName = 'GlobalNavHighlight';\n", "import { css } from '@emotion/css';\n\nimport { androidFastOutSlowInCurve } from '../../../constants/animation';\nimport { m } from '../../../motif/m';\nimport { MotifComponent } from '../../../motif/motifConstants';\nimport { globalHeaderAnimationDuration } from '../GlobalHeader.constants';\n\nexport const highlightTextClassName = 'highlight-text';\nexport const highlightTextTitleClassName = 'highlight-text-title';\nexport const highlightTextBodyClassName = 'highlight-text-body';\nexport const highlightMediaMobileClassName = 'highlight-media-mobile';\nexport const highlightMediaDesktopClassName = 'highlight-media-desktop';\nexport const highlightCtaClassName = 'cta';\n\nconst highlightMediaCss = (className: string) => css`\n  box-sizing: border-box;\n\n  /* Make the image/video cover the media space. These selectors are deep to account for any wrapper elements. */\n  & > .${className} * {\n    width: 100%;\n    height: 100%;\n  }\n  & > .${className} img,\n  & > .${className} video {\n    object-fit: cover;\n    border-radius: ${m('--border-radius-l')};\n  }\n\n  & > .${highlightMediaMobileClassName} img {\n    width: 90%;\n    margin: 0;\n  }\n`;\n\nexport const highlightDesktopCss = css`\n  position: relative; /* For positioning the card */\n  filter: drop-shadow(0px 0px 32px rgba(0, 0, 0, 0.12)); /* Faint highlight shadow */\n\n  & > .${highlightMediaDesktopClassName} {\n    margin: 0;\n    width: 100%;\n    height: 100%;\n  }\n\n  ${highlightMediaCss(highlightMediaDesktopClassName)}\n`;\n\nconst highlightCardCss = css`\n  box-sizing: border-box;\n  color: ${m('--fg-color')};\n  background-color: ${m('--bg-color')};\n\n  padding: 0;\n  border-radius: ${m('--border-radius-m')};\n  box-shadow: ${m('--box-shadow-m')};\n  border: ${m('--border-width-xs')} solid rgb(233, 234, 235);\n\n  & > .${highlightTextClassName} {\n    & > .${highlightTextTitleClassName} {\n      color: ${m('--palette-black-v150')};\n\n      font-weight: 500;\n      font-size: 18px;\n      line-height: 20px;\n      white-space: nowrap;\n\n      display: inline-block;\n\n      max-width: 100%;\n\n      overflow: hidden;\n      text-overflow: ellipsis;\n\n      /* The line height here is greater than in body, so we move it slightly so the top margin\n         looks proportional to the card border. */\n      position: relative;\n      bottom: 1px;\n    }\n\n    & > .${highlightTextBodyClassName} {\n      /* Default <p> sets margin to 1em which is larger than what we want. */\n      margin-block-start: 2px;\n      margin-block-end: 2px;\n\n      font-size: 12px;\n      line-height: 16px;\n      font-weight: 400;\n\n      color: ${m('--palette-black-v50')};\n\n      /*\n        Properties below work on Webkit AND Gecko. 96% browser support as of 2020-04. Note that vendor\n        auto-prefixing does not work here, so '-webkit-' is required.\n      */\n      display: -webkit-box;\n      -webkit-box-orient: vertical;\n      -webkit-line-clamp: 3;\n      overflow: hidden;\n      text-overflow: ellipsis;\n    }\n  }\n`;\n\nconst highlightCardOuterMargin = 65;\nconst highlightCtaMargin = 16;\n\nconst highlightCardWideDesktopCss = css`\n  max-width: 500px;\n  padding: 16px;\n\n  *[dir='rtl'] & {\n    right: unset;\n    left: ${highlightCardOuterMargin}px;\n  }\n\n  .${highlightCtaClassName} {\n    margin-left: 0;\n  }\n\n  *[dir='rtl'] & .${highlightCtaClassName} {\n    margin-left: ${highlightCtaMargin}px;\n    margin-right: 0;\n  }\n`;\n\nconst highlightCardNarrowDesktopCss = css`\n  width: calc(100% - ${highlightCardOuterMargin * 2}px);\n\n  padding: 16px;\n\n  &,\n  & > .${highlightCtaClassName}, & > .${highlightCtaClassName} .${MotifComponent.BUTTON} {\n    display: flex;\n    flex-direction: column;\n  }\n\n  & > .${highlightCtaClassName} {\n    margin-top: 0;\n  }\n`;\n\nconst highlightCardBreakDesktopWidth = 1040;\nexport const highlightCardDesktopCss = css`\n  ${highlightCardCss}\n\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 16px;\n\n  & > .${highlightTextClassName} {\n    min-width: 0;\n    max-width: 100%;\n  }\n\n  & > .${highlightTextClassName}, & > .${highlightCtaClassName} {\n    margin: 0;\n  }\n\n  position: absolute;\n  right: ${highlightCardOuterMargin}px;\n  bottom: 30px;\n\n  @media screen and (min-width: ${highlightCardBreakDesktopWidth}px) {\n    ${highlightCardWideDesktopCss}\n  }\n\n  @media screen and (max-width: ${highlightCardBreakDesktopWidth}px) {\n    ${highlightCardNarrowDesktopCss}\n  }\n`;\n\nexport const highlightCardMobileCss = css`\n  width: 100%;\n  cursor: pointer;\n  margin-top: 15px;\n  margin-bottom: 50px;\n\n  /**\n   * NOTE: These values are important!\n   * This first value is the height of the highlight.\n   * The second is the height of the highlight description. The content is too tall\n   * So we clip it after this size (1-line roughly)\n   */\n  display: grid;\n  grid-template-rows: 40vw 20px;\n\n  & > * {\n    user-select: none;\n  }\n\n  & > .${highlightTextClassName} {\n    font-weight: 400;\n    font-size: 14px;\n    line-height: 40px;\n    margin: 0 12px;\n  }\n\n  & > .${highlightMediaMobileClassName} {\n    border-radius: ${m('--border-radius-m')};\n    margin: 0 20px 0 12px;\n  }\n\n  [dir='rtl'] & > .${highlightMediaMobileClassName} {\n    margin: 0 12px 0 20px;\n  }\n\n  ${highlightMediaCss(highlightMediaMobileClassName)}\n`;\n/** This is the amount by which other slides pertrude, and half the margin between slides. */\nconst highlightSpace = 10;\nexport const reelDesktopCss = css`\n  transition: transform ${globalHeaderAnimationDuration}ms ${androidFastOutSlowInCurve};\n  transform: translateY(\n    calc(((-100% + ${highlightSpace * 5}px) * var(--selected-index) + ${highlightSpace * 3}px))\n  );\n  height: 100%;\n\n  margin: 0 32px 0 20px;\n\n  *[dir='rtl'] & {\n    margin: 0 20px 0 32px;\n  }\n\n  & > * {\n    margin-top: 0;\n    margin-bottom: ${highlightSpace * 2}px;\n    height: calc(100% - ${highlightSpace * 7}px);\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport { BackgroundColor } from '../../../constants/backgroundColor';\nimport { getBackgroundClassName } from '../../../utils';\nimport {\n  highlightCardDesktopCss,\n  highlightCtaClassName,\n  highlightDesktopCss,\n  highlightMediaDesktopClassName,\n  highlightTextBodyClassName,\n  highlightTextClassName,\n  highlightTextTitleClassName,\n} from './GlobalNavHighlight.styles';\nimport type { GlobalNavHighlightProps } from './types';\n\nexport const GlobalNavHighlightDesktop: FC<GlobalNavHighlightProps> = ({\n  background,\n  callToAction,\n  cardTitleV2,\n  cardBodyV2,\n  cardTitle,\n  cardBody,\n}) => {\n  return (\n    <section className={highlightDesktopCss}>\n      <figure className={highlightMediaDesktopClassName}>{background}</figure>\n      <article\n        className={cx(getBackgroundClassName(BackgroundColor.White), highlightCardDesktopCss)}\n      >\n        <figcaption className={highlightTextClassName}>\n          <label className={highlightTextTitleClassName}>{cardTitleV2 ?? cardTitle}</label>\n          <p className={highlightTextBodyClassName}>{cardBodyV2 ?? cardBody}</p>\n        </figcaption>\n        <div className={highlightCtaClassName}>{callToAction}</div>\n      </article>\n    </section>\n  );\n};\nGlobalNavHighlightDesktop.displayName = 'GlobalNavHighlightDesktop';\n", "import { css, cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport { Children, useContext, useEffect, useState } from 'react';\n\nimport { MediaMode } from '../../../constants';\nimport { GlobalHeaderContext } from '../GlobalHeaderContext';\nimport { reelDesktopCss } from './GlobalNavHighlight.styles';\nimport type { GlobalNavHighlightReelProps } from './types';\n\nexport const GlobalNavHighlightReel: FC<GlobalNavHighlightReelProps> = ({\n  className,\n  highlights,\n}) => {\n  const headerContext = useContext(GlobalHeaderContext);\n  const isMobile = headerContext.mode === MediaMode.Mobile;\n\n  const [selectedIndex, setSelectedIndex] = useState(0);\n\n  const nonNullHighlights = Object.fromEntries(\n    [...highlights.entries()].filter(([_groupKey, highlight]) => !!highlight)\n  );\n\n  useEffect(() => {\n    const allKeys = Object.keys(nonNullHighlights);\n    const index = allKeys.indexOf(headerContext.groupKey ?? '');\n\n    if (index !== -1 && index !== selectedIndex) {\n      setSelectedIndex(index);\n    }\n  }, [headerContext.groupKey, nonNullHighlights, selectedIndex]);\n\n  // Currently we don't show any highlight in the mobile view.\n  // This is to be re-implemented once we have a design that works for mobile and does not look\n  // like advertising.\n  if (isMobile) {\n    return null;\n  }\n\n  const selectedCss = css`\n    --selected-index: ${selectedIndex};\n  `;\n\n  return (\n    <section className={cx(selectedCss, reelDesktopCss, className)}>\n      {Children.toArray(Object.values(nonNullHighlights))}\n    </section>\n  );\n};\n", "// Note that we allow referrers here so we can track usage.\n// See https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-target-blank.md#when-to-override-it\n/* eslint-disable react/jsx-no-target-blank */ // Placed here because it doesn't work inside JSX.\nimport { cx } from '@emotion/css';\nimport { snake } from 'radashi';\nimport type { FC, MouseEventHandler, PropsWithChildren } from 'react';\nimport { Children, useCallback, useContext } from 'react';\n\nimport { dataSetToAttributes } from '../../../utils';\nimport { isExternal } from '../../../utils/domains';\nimport type { TrackingParameters } from '../../../utils/tracking';\nimport { appendTrackingParameters } from '../../../utils/tracking';\nimport { DetailsSummary } from '../../DetailsSummary';\nimport { Icon } from '../../Icon';\nimport { PrimitivesContext } from '../../Primitives';\nimport { globalHeaderAnimationDuration, globalNavLevelClassName } from '../GlobalHeader.constants';\nimport { GlobalHeaderContext } from '../GlobalHeaderContext';\nimport { itemListCss } from '../GlobalNavGroup/GlobalNavGroup.styles';\nimport {\n  externalIconCss,\n  globalNavItemActiveCss,\n  globalNavItemChevronCss,\n  globalNavItemCss,\n  globalNavItemWithChildrenCss,\n} from './GlobalNavItem.styles';\nimport type { GlobalNavItemProps } from './types';\n\nconst defaultTrackingParameters: TrackingParameters = {\n  utm_source: 'global_nav',\n  utm_medium: 'referral',\n  utm_content: 'global_nav_item',\n  utm_campaign: 'universal_navigation',\n};\n\nconst GlobalNavItemWithChildren: FC<PropsWithChildren<GlobalNavItemProps>> = ({\n  title,\n  children,\n  isSelected,\n  dataset,\n  onToggle,\n}) => {\n  const handleToggle = useCallback(() => {\n    onToggle?.(title);\n  }, [onToggle, title]);\n\n  return (\n    <DetailsSummary\n      summary={title}\n      summaryProps={{ className: cx({ selected: isSelected }), dataset }}\n      chevronProps={{ className: globalNavItemChevronCss }}\n      className={cx(globalNavLevelClassName, globalNavItemWithChildrenCss, {\n        [globalNavItemActiveCss]: isSelected,\n      })}\n      onToggle={handleToggle}\n    >\n      <ol className={itemListCss}>\n        {Children.map(children, child => (\n          <li>{child}</li>\n        ))}\n      </ol>\n    </DetailsSummary>\n  );\n};\nGlobalNavItemWithChildren.displayName = 'GlobalNavItemWithChildren';\n\nexport const GlobalNavItem: FC<GlobalNavItemProps> = ({\n  title,\n  href,\n  showExternalIcon,\n  children,\n  onClick,\n  isSelected,\n  dataset,\n  addTrackingParams = true,\n  onToggle,\n}) => {\n  const { Anchor } = useContext(PrimitivesContext);\n\n  const { toggleExpanded, trackingSiteName } = useContext(GlobalHeaderContext);\n\n  if (children && (!Array.isArray(children) || children.length)) {\n    return (\n      // TODO: Remove 'isList' prop after implementing the new header menu navigation.\n      <GlobalNavItemWithChildren\n        title={title}\n        isSelected={isSelected}\n        dataset={dataset}\n        onToggle={onToggle}\n      >\n        {children}\n      </GlobalNavItemWithChildren>\n    );\n  }\n\n  const trackingParameters = trackingSiteName\n    ? { ...defaultTrackingParameters, utm_source: snake(trackingSiteName) }\n    : defaultTrackingParameters;\n\n  const trackedHref = appendTrackingParameters(href, trackingParameters);\n  const isLinkExternal = isExternal(href);\n\n  const onLinkActivate: MouseEventHandler<HTMLElement> = event => {\n    onClick?.(event);\n\n    // We close the nav if the link is internal AND CTRL isn't pressed.\n    // The later is to allow multiple local links to be opened in a new tab.\n    // And scroll to the top. New pages should start from the top.\n    if (!isLinkExternal && !event.ctrlKey) {\n      toggleExpanded?.();\n      // Wait for globalHeader to close before scrolling back top of page\n      setTimeout(() => window.scrollTo(0, 0), globalHeaderAnimationDuration);\n    }\n  };\n\n  return (\n    <div className={globalNavItemCss} {...dataSetToAttributes(dataset)}>\n      <Anchor\n        className={cx(globalNavLevelClassName, {\n          selected: isSelected,\n          [globalNavItemActiveCss]: isSelected,\n        })}\n        href={isLinkExternal && addTrackingParams ? trackedHref : href}\n        onClick={onLinkActivate}\n        target={isLinkExternal ? '_blank' : '_self'}\n        rel=\"noopener\"\n      >\n        {title}\n      </Anchor>\n      {showExternalIcon && isLinkExternal && (\n        <Icon className={externalIconCss} name=\"external-link\" />\n      )}\n    </div>\n  );\n};\n\nGlobalNavItem.displayName = 'GlobalNavItem';\n", "import { isAbsoluteUrl } from './tracking';\n\nexport const isExternal = (link?: string): boolean => {\n  if (!link) {\n    return false;\n  }\n\n  if (!isAbsoluteUrl.test(link)) {\n    return false;\n  }\n\n  try {\n    const parsedUrl = new URL(link);\n    return parsedUrl.hostname !== window?.location.hostname;\n  } catch {\n    // eslint-disable-next-line no-console\n    console.warn(`Unable to parse URL '${link}'. It is invalid.`);\n    return false;\n  }\n};\n", "import type React from 'react';\nimport { useContext } from 'react';\n\nimport { MediaMode } from '../../../constants';\nimport { ToggleState } from '../../../hooks/useToggleState';\nimport { GlobalHeaderContext } from '../GlobalHeaderContext';\nimport { screenStateClassName } from './GlobalNavScreen.styles';\nimport { GlobalNavScreenDesktop } from './GlobalNavScreenDesktop';\nimport { GlobalNavScreenMobile } from './GlobalNavScreenMobile';\nimport type { GlobalNavScreenProps } from './types';\n\nexport const GlobalNavScreen: React.FC<GlobalNavScreenProps> = props => {\n  const { screenState, mode } = useContext(GlobalHeaderContext);\n\n  if (screenState === ToggleState.OFF) {\n    return null;\n  }\n\n  const isMobile = mode === MediaMode.Mobile;\n  return isMobile ? (\n    <GlobalNavScreenMobile\n      {...props}\n      className={screenStateClassName(screenState!)}\n      screenState={screenState}\n    />\n  ) : (\n    <GlobalNavScreenDesktop\n      {...props}\n      className={screenStateClassName(screenState!)}\n      screenState={screenState}\n    />\n  );\n};\n\nGlobalNavScreen.displayName = 'GlobalNavScreen';\n", "import { css } from '@emotion/css';\n\nimport { Transparent } from '../constants';\nimport { m } from '../motif';\n\nexport interface ScrollbarProps {\n  backgroundColor: string;\n  thumbColor: string;\n  trackWidth: string;\n}\n\nexport const scrollbarCss = ({\n  backgroundColor,\n  thumbColor,\n  trackWidth,\n}: ScrollbarProps): string => css`\n  /* Firefox. See developer.mozilla.org/en-US/docs/Web/CSS/CSS_Scrollbars */\n  scrollbar-width: ${trackWidth};\n  scrollbar-color: ${thumbColor} ${backgroundColor};\n\n  /* Edge / Chrome / Safari. See css-tricks.com/custom-scrollbars-in-webkit/ */\n  ::-webkit-scrollbar {\n    width: ${trackWidth};\n    background-color: ${backgroundColor};\n  }\n\n  ::-webkit-scrollbar-thumb {\n    background-color: ${thumbColor};\n    border-radius: calc(${trackWidth} / 2);\n    /* Can't control the width, so we add a border to introduce margin. */\n    border: ${m('--border-width-s')} solid ${backgroundColor};\n  }\n\n  ::-webkit-scrollbar-track {\n    background-color: ${Transparent};\n  }\n`;\n", "import { css } from '@emotion/css';\n\nimport { extraLargeDesktopWidth } from '../../../constants';\nimport {\n  opacityFadeInCss,\n  opacityFadeOutCss,\n  slideDownCss,\n  slideUpCss,\n} from '../../../constants/animation';\nimport { ZIndex } from '../../../constants/zIndex';\nimport { ToggleState } from '../../../hooks/useToggleState';\nimport { m } from '../../../motif/m';\nimport { scrollbarCss } from '../../../utils/scrollbarCss';\nimport {\n  globalHeaderAnimationDuration,\n  globalHeaderHeight,\n  globalLinksClassName,\n  globalNavLevelClassName,\n  globalNavMobileLocalNavClassName,\n  globalNavOuterMargin,\n  mobileHeaderHeight,\n  navHeaderShadowSize,\n  nextLevelLineHeightCssVar,\n} from '../GlobalHeader.constants';\n\n// NOTE: This component is NOT themable. We use constants here directly without going through the\n// theme.\n\nexport const screenStateClassName = (state: ToggleState): string => `screen-state-${state}`;\n\nconst globalNavCss = css`\n  background-color: ${m('--global-header-nav-screen-bg-color')};\n  box-sizing: border-box;\n  color: ${m('--global-header-nav-screen-fg-color')};\n  /* Set font-family here or the var from the default motif is used */\n  font-family: ${m('--font-family')};\n  left: 0;\n  position: fixed;\n  top: 0;\n  z-index: ${ZIndex.NAVIGATOR};\n\n  & header {\n    height: ${globalHeaderHeight}px;\n    padding: 0 60px;\n    display: flex;\n    align-items: center;\n    background-image: linear-gradient(\n      0deg,\n      transparent 0,\n      ${m('--global-header-nav-screen-bg-color')} ${navHeaderShadowSize}px\n    );\n    margin-bottom: -${navHeaderShadowSize}px;\n    z-index: ${ZIndex.NAVIGATOR_HEADER};\n\n    &.sticky {\n      position: sticky;\n      top: 0;\n    }\n  }\n`;\n\n/**\n * Styles for the items and headings in global nav.\n *\n * I (Alex) had a hard time keeping CSS straight between 3 different levels where some are links and\n * others aren't, and local nav on mobile being a headless list of nav items without a container\n * group. And with mocks changing frequently it made it hard to prevent styles bleeding without\n * figuring out what level they are at. So this styles is structured to work with the level tracking\n * class attribution.\n */\n\nconst levelSelector = (level: 1 | 2 | 3): string => `.${globalNavLevelClassName} `.repeat(level);\nexport const globalNavDesktopFontCss = css`\n  & a {\n    color: ${m('--global-header-item-color')};\n    text-decoration: none;\n    position: relative;\n\n    &::after {\n      left: 0;\n      content: ' ';\n      position: absolute;\n      bottom: 5px;\n      height: 0;\n      width: 100%;\n      border-bottom: 2px ${m('--global-header-item-hover-color')} solid;\n\n      transition: ease-in-out;\n      transition-duration: 100ms;\n      opacity: 0;\n    }\n  }\n\n  & a:hover,\n  & a:focus {\n    color: ${m('--global-header-item-hover-color')};\n  }\n\n  & ${levelSelector(1)} {\n    font-size: 26px;\n    line-height: 54px;\n    font-weight: 600;\n    ${nextLevelLineHeightCssVar}: 36px;\n  }\n\n  & ${levelSelector(2)} {\n    font-size: 18px;\n    line-height: 36px;\n    font-weight: 400;\n    ${nextLevelLineHeightCssVar}: 16px;\n  }\n\n  & ${levelSelector(3)} {\n    font-size: 16px;\n    font-weight: 400;\n    line-height: 40px;\n  }\n`;\n\nexport const globalNavMobileFontCss = css`\n  & a {\n    color: ${m('--global-header-item-color')};\n    text-decoration: none;\n  }\n  & a:hover {\n    color: ${m('--global-header-item-hover-color')};\n  }\n\n  .${globalNavLevelClassName} {\n    font-size: ${m('--p2-mobile-font-size')};\n    font-weight: 500;\n    line-height: 40px;\n  }\n\n  & ${levelSelector(2)}, & ${levelSelector(3)} {\n    font-weight: 400;\n  }\n`;\n\n/** Style for the desktop full screen navigation. */\nconst leftNavWidth = 400;\nexport const globalNavHighlightClassName = 'highlight';\nexport const globalNavNoScrollClassName = 'no-scroll';\nexport const globalNavLeftNavClassName = 'left-nav';\n\nexport const globalNavDesktopCss = css`\n  ${globalNavCss}\n\n  ${slideUpCss({ duration: `${globalHeaderAnimationDuration}ms` })}\n  &.${screenStateClassName(ToggleState.ON)},\n  &.${screenStateClassName(ToggleState.TURNING_ON)} {\n    ${slideDownCss({ duration: `${globalHeaderAnimationDuration}ms` })}\n  }\n\n  box-sizing: border-box;\n  height: 100vh;\n  max-height: 100vh;\n  max-width: 100vw;\n  overflow: hidden;\n  width: 100vw;\n`;\n\nexport const globalNavInnerDesktopCss = css`\n  height: 100%;\n  margin: 0 auto;\n  max-width: ${extraLargeDesktopWidth}px;\n  position: relative;\n  width: 100%;\n\n  & > .${globalNavLeftNavClassName} {\n    height: 100%;\n    width: ${leftNavWidth}px;\n    max-height: 100%;\n    overflow-y: scroll;\n    overflow-x: hidden;\n\n    ${globalNavDesktopFontCss}\n\n    /* Styling scrollbar */\n    ${scrollbarCss({\n      thumbColor: m('--global-header-item-color'),\n      backgroundColor: m('--global-header-nav-screen-bg-color'),\n      trackWidth: '10px',\n    })}\n  }\n\n  & > .${globalNavLeftNavClassName}.${globalNavNoScrollClassName} {\n    ${scrollbarCss({\n      thumbColor: m('--global-header-nav-screen-bg-color'),\n      backgroundColor: m('--global-header-nav-screen-bg-color'),\n      trackWidth: '10px',\n    })}\n  }\n\n  & .menu {\n    padding: 0px 20px 0px ${globalNavOuterMargin};\n    box-sizing: border-box;\n  }\n\n  *[dir='rtl'] & .menu {\n    padding: 0px ${globalNavOuterMargin} 0px 20px;\n  }\n\n  & > .${globalNavHighlightClassName} {\n    position: absolute;\n    right: 0;\n    top: 0;\n    height: 100%;\n    width: calc(100% - ${leftNavWidth}px);\n    z-index: ${ZIndex.NAVIGATOR_HIGHLIGHT};\n\n    *[dir='rtl'] & {\n      right: unset;\n      left: 0;\n    }\n  }\n\n  & .close {\n    position: relative;\n  }\n`;\n\n/** Style for the mobile full screen header. */\nexport const globalNavMobileCss = css`\n  ${globalNavCss}\n  ${globalNavMobileFontCss}\n\n  ${opacityFadeInCss({ duration: `${globalHeaderAnimationDuration}ms`, curve: 'ease-out' })}\n\n  &.${screenStateClassName(ToggleState.TURNING_OFF)} {\n    ${opacityFadeOutCss({ duration: `${globalHeaderAnimationDuration}ms`, curve: 'ease-out' })}\n  }\n\n  overflow: hidden scroll;\n  display: flex;\n  flex-direction: column;\n\n  & > .${globalNavMobileLocalNavClassName} {\n    padding: 20px;\n    scroll-margin-top: 5px;\n  }\n\n  & > .${globalLinksClassName} {\n    background-color: ${m('--global-header-nav-screen-global-links-bg-color')};\n    color: ${m('--global-header-nav-screen-fg-color')};\n    padding: 20px 20px 40px 20px;\n    margin-bottom: -20px; /* Pushing background under the gradient in .highlight. */\n    flex-grow: 1; /* Pushes the gray background to the bottom for long pages. */\n  }\n\n  & hr {\n    border-color: ${m('--global-header-menu-col-divider-color')};\n    border-style: inset;\n    border-width: ${m('--border-width-xs')};\n    margin-block-start: ${m('--spacing-m')};\n    margin-block-end: ${m('--spacing-m')};\n  }\n\n  /* On mobile we show the header regardless, so we display the nav below it. */\n  /* NOTE: Reducing so that at 75% zoom a sliver of background doesn't show. */\n  top: ${mobileHeaderHeight - 0.75}px;\n  /* On mobile we need to subtract the header size. */\n  max-height: calc(100vh - ${mobileHeaderHeight}px);\n  height: calc(100vh - ${mobileHeaderHeight}px);\n  /* stylelint-disable-next-line declaration-block-no-duplicate-properties */\n  max-height: calc(100dvh - ${mobileHeaderHeight}px);\n  height: calc(100dvh - ${mobileHeaderHeight}px);\n\n  width: 100vw;\n  max-width: 100vw;\n`;\n\nexport const globalNavMobileHeadingCss = css`\n  font-size: 14px;\n  line-height: 40px;\n  font-weight: 500;\n  display: block;\n`;\n", "import { cx } from '@emotion/css';\nimport type React from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport { useDisableScrollOutside } from '../../../hooks/useDisableBodyScroll';\nimport { ToggleState } from '../../../hooks/useToggleState';\nimport { MotifComponent } from '../../../motif/motifConstants';\nimport { dataSetToAttributes, getBackgroundClassName } from '../../../utils';\nimport { IconButton } from '../../IconButton';\nimport { IconButtonSize } from '../../IconButton/IconButton.types';\nimport { globalHeaderDesktopNavButtonCss } from '../GlobalHeader.styles';\nimport { testIds } from './GlobalNavScreen.constants';\nimport {\n  globalNavDesktopCss,\n  globalNavHighlightClassName,\n  globalNavInnerDesktopCss,\n  globalNavLeftNavClassName,\n} from './GlobalNavScreen.styles';\nimport type { GlobalNavScreenDesktopProps } from './types';\n\nexport const GlobalNavScreenDesktop: React.FC<GlobalNavScreenDesktopProps> = ({\n  className,\n  onNavClose,\n  highlight,\n  globalNav,\n  motifScheme,\n  backgroundColor,\n  screenState,\n  dataset,\n}) => {\n  const leftNavRef = useRef<HTMLDivElement>(null);\n  const ref = useRef<HTMLButtonElement>(null);\n\n  useEffect(() => {\n    if (screenState === ToggleState.ON) {\n      ref.current?.focus();\n    }\n  }, [screenState]);\n\n  if (!dataset?.testid) {\n    dataset = { ...dataset, testid: testIds.navTopLevel } as DOMStringMap;\n  }\n\n  // Only enable scroll inside the left nav.\n  useDisableScrollOutside(leftNavRef.current);\n\n  return (\n    <section\n      className={cx(\n        MotifComponent.HEADER,\n        globalNavDesktopCss,\n        motifScheme ?? getBackgroundClassName(backgroundColor),\n        className\n      )}\n      {...dataSetToAttributes(dataset)}\n    >\n      <div className={globalNavInnerDesktopCss}>\n        <div ref={leftNavRef} className={globalNavLeftNavClassName}>\n          <header className=\"sticky\">\n            <IconButton\n              size={IconButtonSize.LARGE}\n              onClick={onNavClose}\n              className={globalHeaderDesktopNavButtonCss}\n              iconName=\"close\"\n              ref={ref}\n              data-testid={testIds.closeButton}\n            />\n            {/* TODO: Put search field here */}\n          </header>\n          <nav className=\"menu\" data-testid={testIds.navItems}>\n            {globalNav}\n          </nav>\n        </div>\n        <aside className={globalNavHighlightClassName} data-testid={testIds.navHighlights}>\n          {highlight}\n        </aside>\n      </div>\n    </section>\n  );\n};\n\nGlobalNavScreenDesktop.displayName = 'GlobalNavScreenDesktop';\n", "import { cx } from '@emotion/css';\nimport type React from 'react';\nimport { useContext, useRef } from 'react';\n\nimport { useDisableScrollOutside } from '../../../hooks/useDisableBodyScroll';\nimport { ToggleState } from '../../../hooks/useToggleState';\nimport { MotifComponent } from '../../../motif/motifConstants';\nimport { dataSetToAttributes, getBackgroundClassName } from '../../../utils';\nimport { globalLinksClassName, globalNavMobileLocalNavClassName } from '../GlobalHeader.constants';\nimport { GlobalHeaderContext } from '../GlobalHeaderContext';\nimport { testIds } from './GlobalNavScreen.constants';\nimport { globalNavMobileCss, globalNavMobileHeadingCss } from './GlobalNavScreen.styles';\nimport type { GlobalNavScreenMobileProps } from './types';\n\nexport const GlobalNavScreenMobile: React.FC<GlobalNavScreenMobileProps> = ({\n  className,\n  localNavMobile,\n  localNavMobileFooter,\n  globalNav,\n  globalNavHeading,\n  motifScheme,\n  backgroundColor,\n  showMobileGlobalLinks: showGlobalLinks,\n  dataset,\n}) => {\n  const navScreenRef = useRef<HTMLElement>(null);\n  const { screenState } = useContext(GlobalHeaderContext);\n  const inTransition = screenState === (ToggleState.TURNING_OFF || ToggleState.TURNING_ON);\n  useDisableScrollOutside(navScreenRef.current, inTransition);\n\n  const LocalNavSection = () => {\n    return (\n      <section className={globalNavMobileLocalNavClassName}>\n        {localNavMobile}\n        {localNavMobileFooter && (\n          <>\n            <hr />\n            {localNavMobileFooter}\n          </>\n        )}\n      </section>\n    );\n  };\n\n  if (!dataset?.testid) {\n    dataset = { ...dataset, testid: testIds.navTopLevel } as DOMStringMap;\n  }\n\n  return (\n    <nav\n      ref={navScreenRef}\n      className={cx(\n        MotifComponent.HEADER,\n        globalNavMobileCss,\n        motifScheme ?? getBackgroundClassName(backgroundColor),\n        className\n      )}\n      {...dataSetToAttributes(dataset)}\n    >\n      {(localNavMobile || localNavMobileFooter) && <LocalNavSection />}\n      {showGlobalLinks && (\n        <section\n          className={cx(\n            globalLinksClassName,\n            motifScheme ?? getBackgroundClassName(backgroundColor)\n          )}\n        >\n          <label className={globalNavMobileHeadingCss}>{globalNavHeading}</label>\n          {globalNav}\n        </section>\n      )}\n    </nav>\n  );\n};\n\nGlobalNavScreenMobile.displayName = 'GlobalNavScreenMobile';\n", "import { css } from '@emotion/css';\n\nimport {\n  largeDesktopPageContainerQuery,\n  mobileMediaQuery,\n  mobilePageContainerQuery,\n  nonMobileMediaQuery,\n  nonMobilePageContainerQuery,\n  nonTwoColumnCollapseMediaQuery,\n  nonTwoColumnCollapsePageContainerQuery,\n  threeColumnCollapseMediaQuery,\n  twoColumnCollapseMediaQuery,\n  twoColumnCollapsePageContainerQuery,\n  ZIndex,\n} from '../../constants';\nimport { m, MotifComponent } from '../../motif';\nimport { globalHeaderHeight } from '../GlobalHeader';\n\n/** Ensures scrolling to the element does not result in the element being hidden by header */\nexport const blockScrollMarginCss = css`\n  scroll-margin-top: var(--total-header-height);\n`;\n\n/**\n * TODO: Remove as part of the package cleanup effort\n *\n * @deprecated\n */\nexport const blockPadding = 64;\n\nexport const backgroundContainerCss = css`\n  inset: 0;\n  /* Prevent overflowing elements from adding extra page width, e.g. background media stickers */\n  overflow: hidden;\n  position: absolute;\n`;\n\nexport const backgroundCss = css`\n  height: 100%;\n  object-fit: cover;\n  width: 100%;\n`;\n\nexport const curtainCss = css`\n  /** Relative color syntax decomposes the hex --curtain-color into r g b channels so opacity can be applied dynamically */\n  background-color: rgb(from ${m('--curtain-color')} r g b / ${m('--curtain-opacity')});\n  backdrop-filter: ${m('--curtain-backdrop-filter')};\n  inset: 0;\n  position: absolute;\n  z-index: ${ZIndex.BLOCK_CURTAIN};\n`;\n\nexport const blockBackgroundColorCss = css`\n  background-color: ${m('--bg-color')};\n`;\n\nexport const blockCss = css`\n  position: relative;\n  width: 100%;\n  background-image: ${m('--bg-image')};\n  color: ${m('--fg-color')};\n\n  /** Styles for the background image if it gets set. Legacy */\n  background-repeat: no-repeat;\n  background-size: cover;\n  background-position: center;\n`;\n\nexport const boundaryCss = css`\n  margin-left: auto;\n  margin-right: auto;\n  width: 100%;\n  padding: ${m('--block-boundary-desktop-padding')};\n  position: relative;\n  z-index: ${ZIndex.BLOCK_BOUNDARY};\n\n  ${mobileMediaQuery} {\n    padding: ${m('--block-boundary-mobile-padding')};\n  }\n`;\n\n/* Applied when denseLayout is enabled. Reduces vertical spacing. */\nexport const denseLayoutBoundaryCss = css`\n  ${nonMobileMediaQuery} {\n    padding-block: ${m('--block-boundary-dense-layout-desktop-padding')};\n  }\n`;\n\nexport const headerCss = css`\n  position: relative;\n  margin-left: auto;\n  margin-right: auto;\n  width: 100%;\n  max-width: 75%;\n  padding: ${m('--block-header-desktop-padding')};\n\n  ${mobileMediaQuery} {\n    max-width: unset;\n    padding: ${m('--block-header-mobile-padding')};\n  }\n`;\n\nexport const eyebrowCss = css`\n  color: ${m('--block-eyebrow-color')};\n  font-size: 14px;\n  font-weight: 500;\n  letter-spacing: -0.01em;\n  line-height: 20px;\n  margin: 0;\n  margin-bottom: ${m('--spacing-xs')};\n`;\n\nexport const titleCss = css`\n  /* Overriding h* tags requires double specificity */\n  && {\n    color: ${m('--block-title-color')};\n    font-size: ${m('--block-title-desktop-font-size')};\n    font-stretch: ${m('--block-title-desktop-font-stretch')};\n    line-height: ${m('--block-title-desktop-font-line-height')};\n\n    &:has(.${MotifComponent.EMPHASIZED_TEXT}) {\n      color: ${m('--block-title-de-emphasized-color')};\n    }\n\n    ${mobileMediaQuery} {\n      font-size: ${m('--block-title-mobile-font-size')};\n      padding: 0;\n    }\n  }\n  margin: 0; /* Resets h* user stylesheet margin. */\n`;\n\nexport const subtitleCss = css`\n  color: ${m('--block-subtitle-color')};\n  /* Resets h* user stylesheet margin. */\n  margin: 0;\n  /* The margin between title/subtitle has to be on subtitle so that it collapses when there's only title. */\n  margin-top: ${m('--spacing-m')};\n\n  a {\n    color: currentColor;\n  }\n`;\n\nexport const callsToActionWrapperCss = css`\n  display: flex;\n  padding: ${m('--spacing-m')} 0;\n\n  > *:not(:last-child) {\n    margin-right: ${m('--spacing-m')};\n    margin-left: 0;\n  }\n\n  *[dir='rtl'] & > *:not(:last-child) {\n    margin-right: 0;\n    margin-left: ${m('--spacing-m')};\n  }\n\n  ${mobileMediaQuery} {\n    padding: ${m('--spacing-m')};\n    flex-direction: column;\n    > *:not(:last-child) {\n      margin-bottom: ${m('--spacing-m')};\n      margin-right: 0;\n    }\n  }\n`;\n\nexport const contentContainerCss = css`\n  --column-span: 2;\n  display: grid;\n  position: relative;\n  grid-row-gap: ${m('--spacing-xl')};\n  grid-column-gap: ${m('--spacing-xl')};\n  padding-left: ${m('--spacing-m')};\n  padding-right: ${m('--spacing-m')};\n  justify-content: center;\n\n  /* We make every column span 2 in desktop mode so we can half-column align. */\n  & > * {\n    grid-column: span var(--column-span);\n  }\n\n  ${mobileMediaQuery} {\n    grid-template-columns: minmax(0, 1fr);\n    grid-row-gap: ${m('--spacing-m')};\n    /* NOTE: grid-column-gap same as desktop */\n    padding-left: 0;\n    padding-right: 0;\n    padding-inline: ${m('--spacing-m')};\n  }\n`;\n\n/** Augments the styles for {@link contentContainerCss} */\nexport const contentContainerStyle1ColumnCss = css`\n  grid-template-columns: repeat(var(--column-span), minmax(0, 1fr));\n`;\n\n/* Applied when denseLayout is enabled. Reduces vertical spacing. */\nexport const denseLayoutContentContainerCss = css`\n  ${nonMobileMediaQuery} {\n    grid-row-gap: ${m('--block-content-dense-layout-desktop-grid-row-gap')};\n  }\n`;\n\n/** Augments the styles for {@link contentContainerCss} */\nexport const contentContainerStyle2ColumnCss = css`\n  /* NOTE: We double the columns so we can do half-column adjustments */\n  grid-template-columns: repeat(calc(2 * var(--column-span)), minmax(0, 1fr));\n\n  /* In order to center a case where the last row only has 1 content,\n   * We shift the start of the column.\n   * Note that we don't do this if there's only 1 row.\n   */\n  ${nonMobileMediaQuery} {\n    & > *:not(:first-child):nth-child(2n + 1):last-child {\n      grid-column: var(--column-span) / span var(--column-span);\n    }\n  }\n\n  /*\n  We are keeping the media queries above in addition to the container queries below in case:\n  - this component is ever rendered without a wrapping SDS-M Page component\n  - the browser does not support container queries (smart TVs, etc.)\n  */\n  ${mobilePageContainerQuery} {\n    grid-template-columns: repeat(var(--column-span), minmax(0, 1fr));\n\n    /* Reset for cases where the screen-based media query is active but the container query is not */\n    & > *:not(:first-child):nth-child(2n + 1):last-child {\n      grid-column: span var(--column-span);\n    }\n  }\n`;\n\n/** Augments the styles for {@link contentContainerCss} */\nexport const contentContainerStyle3ColumnCss = css`\n  /* Reduce grid column gap width by 8px on 3 column layout  */\n  grid-row-gap: ${m('--spacing-l')};\n  grid-column-gap: ${m('--spacing-l')};\n\n  /* NOTE: We double the columns so we can do half-column adjustments */\n  grid-template-columns: repeat(calc(3 * var(--column-span)), minmax(0, 1fr));\n\n  /* The case where there are actually 3 columns. */\n  ${nonTwoColumnCollapseMediaQuery} {\n    /* Handle the case where the last child can be in 1st position */\n    & > *:not(:first-child):last-child:nth-child(3n + 1) {\n      grid-column: calc(1 + var(--column-span)) / span var(--column-span);\n    }\n\n    /* When there are 2 children on the last row, we shift over the first one to center both */\n    & > *:not(:first-child):nth-child(3n + 1):nth-last-child(2) {\n      grid-column: var(--column-span) / span var(--column-span);\n    }\n  }\n\n  ${twoColumnCollapseMediaQuery} {\n    grid-template-columns: repeat(calc(2 * var(--column-span)), minmax(0, 1fr));\n\n    ${nonMobileMediaQuery} {\n      & > *:not(:first-child):nth-child(2n + 1):last-child {\n        grid-column: var(--column-span) / span var(--column-span);\n      }\n    }\n  }\n\n  /** TODO: Figure out if we can remove this. */\n  ${mobileMediaQuery} {\n    grid-template-columns: repeat(var(--column-span), minmax(0, 1fr));\n  }\n\n  /*\n  We are keeping the media queries above in addition to the container queries below in case:\n  - this component is ever rendered without a wrapping SDS-M Page component\n  - the browser does not support container queries (smart TVs, etc.)\n  */\n  ${nonTwoColumnCollapsePageContainerQuery} {\n    /* Handle the case where the last child can be in 1st position */\n    & > *:not(:first-child):last-child:nth-child(3n + 1) {\n      grid-column: calc(1 + var(--column-span)) / span var(--column-span);\n    }\n\n    /* When there are 2 children on the last row, we shift over the first one to center both */\n    & > *:not(:first-child):nth-child(3n + 1):nth-last-child(2) {\n      grid-column: var(--column-span) / span var(--column-span);\n    }\n  }\n\n  ${twoColumnCollapsePageContainerQuery} {\n    grid-template-columns: repeat(calc(2 * var(--column-span)), minmax(0, 1fr));\n\n    /* Reset for cases where the screen-based media query is active but the container query is not */\n    & > *:not(:first-child):last-child:nth-child(3n + 1) {\n      grid-column: span var(--column-span);\n    }\n\n    /* Reset for cases where the screen-based media query is active but the container query is not */\n    & > *:not(:first-child):nth-child(3n + 1):nth-last-child(2) {\n      grid-column: span var(--column-span);\n    }\n\n    ${nonMobilePageContainerQuery} {\n      /* Center the last child if the last row only has 1 child */\n      & > *:not(:first-child):nth-child(2n + 1):last-child {\n        grid-column: var(--column-span) / span var(--column-span);\n      }\n    }\n  }\n\n  ${mobilePageContainerQuery} {\n    grid-template-columns: repeat(var(--column-span), minmax(0, 1fr));\n\n    /* Reset for cases where the screen-based media query is active but the container query is not */\n    & > *:not(:first-child):nth-child(2n + 1):last-child {\n      grid-column: span var(--column-span);\n    }\n  }\n`;\n\n/** Augments the styles for {@link contentContainerCss} */\nexport const contentContainerStyle4ColumnCss = css`\n  /* Reduce grid column gap width by 8px on 4 column layout  */\n  grid-row-gap: ${m('--spacing-l')};\n  grid-column-gap: ${m('--spacing-l')};\n\n  /* NOTE: We double the columns so we can do half-column adjustments */\n  grid-template-columns: repeat(calc(4 * var(--column-span)), minmax(0, 1fr));\n\n  ${threeColumnCollapseMediaQuery} {\n    grid-template-columns: repeat(calc(3 * var(--column-span)), minmax(0, 1fr));\n  }\n\n  ${twoColumnCollapseMediaQuery} {\n    grid-template-columns: repeat(calc(2 * var(--column-span)), minmax(0, 1fr));\n\n    ${nonMobileMediaQuery} {\n      & > *:not(:first-child):nth-child(2n + 1):last-child {\n        grid-column: var(--column-span) / span var(--column-span);\n      }\n    }\n  }\n\n  ${mobileMediaQuery} {\n    grid-template-columns: repeat(var(--column-span), minmax(0, 1fr));\n  }\n\n  /*\n  We are keeping the media queries above in addition to the container queries below in case:\n  - this component is ever rendered without a wrapping SDS-M Page component\n  - the browser does not support container queries (smart TVs, etc.)\n  */\n  ${largeDesktopPageContainerQuery} {\n    grid-template-columns: repeat(calc(3 * var(--column-span)), minmax(0, 1fr));\n  }\n\n  ${twoColumnCollapsePageContainerQuery} {\n    grid-template-columns: repeat(calc(2 * var(--column-span)), minmax(0, 1fr));\n\n    ${nonMobilePageContainerQuery} {\n      /* Center the last child if the last row only has 1 child */\n      & > *:not(:first-child):nth-child(2n + 1):last-child {\n        grid-column: var(--column-span) / span var(--column-span);\n      }\n    }\n  }\n\n  ${mobilePageContainerQuery} {\n    grid-template-columns: repeat(var(--column-span), minmax(0, 1fr));\n\n    /* Reset for cases where the screen-based media query is active but the container query is not */\n    & > *:not(:first-child):nth-child(2n + 1):last-child {\n      grid-column: span var(--column-span);\n    }\n  }\n`;\n\nexport const fullHeightBlockCss = css`\n  min-height: calc(100vh - ${globalHeaderHeight}px);\n  display: flex;\n  background-size: cover;\n  flex-direction: column;\n`;\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, nonMobileMediaQuery } from '../../constants';\nimport { ZIndex } from '../../constants/zIndex';\nimport { m } from '../../motif/m';\nimport { globalHeaderHeight } from '../GlobalHeader';\n\nconst linkBeforeCss = `\n  content: '';\n  position: absolute;\n  left: calc(-1 * ${m('--side-navigation-left-padding')});\n  top: 0;\n  height: 100%;\n  width: ${m('--spacing-xxs')};\n  background: ${m('--side-navigation-indicator-hover-color')};\n  border-radius: 0 ${m('--action-indicator-border-radius')} ${m(\n    '--action-indicator-border-radius'\n  )} 0;\n`;\n\n/** Value taken from designs. Jira ticket: https://jira.sc-corp.net/browse/WEBP-9654 */\nexport const desktopSideNavWidthPx = 300;\n\nexport const wrapperCss = css`\n  background-color: ${m('--side-navigation-desktop-bar-bg-color')};\n  z-index: ${ZIndex.SIDENAV};\n\n  ${nonMobileMediaQuery} {\n    border-inline-end-color: ${m('--side-navigation-desktop-border-color')};\n    border-inline-end-style: solid;\n    border-inline-end-width: ${m('--side-navigation-desktop-border-width')};\n    flex: 0 0 ${desktopSideNavWidthPx}px;\n\n    & > * {\n      position: sticky;\n      top: ${globalHeaderHeight}px;\n    }\n  }\n\n  ${mobileMediaQuery} {\n    position: sticky;\n    top: ${globalHeaderHeight}px;\n    width: 100%;\n    box-shadow: ${m('--box-shadow-m')};\n  }\n`;\n\nexport const wrapperShadowCss = css`\n  ${mobileMediaQuery} {\n    box-shadow: ${m('--box-shadow-xs')};\n  }\n`;\n\nexport const containerCss = css`\n  font-size: ${m('--action-desktop-font-size')};\n  line-height: ${m('--action-desktop-font-line-height')};\n  padding-block-start: ${m('--spacing-m')};\n  padding-inline-start: ${m('--side-navigation-left-padding')};\n  padding-inline-end: ${m('--side-navigation-right-padding')};\n\n  ${mobileMediaQuery} {\n    width: auto;\n    font-size: ${m('--action-mobile-font-size')};\n    line-height: ${m('--action-mobile-font-line-height')};\n    background-color: ${m('--side-navigation-mobile-bg-color')};\n    padding: ${m('--spacing-s')} ${m('--spacing-xl')};\n  }\n\n  & ul {\n    list-style: none;\n    padding: 0;\n    margin: 0;\n  }\n\n  & > ul > li {\n    padding-block: ${m('--spacing-m')};\n  }\n\n  & > ul > li > ul > li {\n    font-size: ${m('--action-desktop-font-size')};\n    line-height: ${m('--action-desktop-font-line-height')};\n    margin-top: ${m('--spacing-m')};\n    margin-inline-start: ${m('--spacing-m')};\n    position: relative;\n\n    ${mobileMediaQuery} {\n      font-size: ${m('--action-mobile-font-size')};\n      line-height: ${m('--action-mobile-font-line-height')};\n    }\n  }\n`;\n\nexport const navigatorItemButtonCss = css`\n  padding: 0;\n  font-family: ${m('--font-family')};\n  display: flex;\n  color: ${m('--side-navigation-desktop-item-color')};\n  text-decoration: none;\n  font-weight: ${m('--action-desktop-font-weight')};\n  background-color: transparent;\n  border: 0;\n  font-size: ${m('--action-desktop-font-size')};\n  line-height: ${m('--action-desktop-font-line-height')};\n  text-align: left;\n  cursor: pointer;\n  width: 100%;\n  justify-content: space-between;\n  align-items: center;\n  min-height: 22px;\n  position: relative;\n\n  *[dir='rtl'] & {\n    text-align: right;\n  }\n\n  :hover {\n    color: ${m('--side-navigation-desktop-item-hover-color')};\n    &::before {\n      ${linkBeforeCss}\n    }\n  }\n\n  ${mobileMediaQuery} {\n    font-size: ${m('--action-mobile-font-size')};\n    line-height: ${m('--action-mobile-font-line-height')};\n    justify-content: space-between;\n    color: ${m('--side-navigation-mobile-item-color')};\n  }\n`;\n\nexport const navigatorItemButtonOpenCss = css`\n  color: ${m('--side-navigation-desktop-item-hover-color')};\n  &::before {\n    ${linkBeforeCss}\n  }\n`;\n\nexport const navigatorItemButtonActiveCss = css`\n  color: ${m('--side-navigation-desktop-item-active-color')};\n\n  &::before {\n    ${linkBeforeCss}\n    background: ${m('--side-navigation-indicator-active-color')};\n\n    ${mobileMediaQuery} {\n      background: ${m('--side-navigation-indicator-active-color')};\n    }\n  }\n\n  &:hover {\n    color: ${m('--side-navigation-desktop-item-active-color')};\n    &::before {\n      background: ${m('--side-navigation-indicator-active-color')};\n    }\n  }\n\n  ${mobileMediaQuery} {\n    color: ${m('--side-navigation-mobile-item-active-color')};\n  }\n`;\n\nexport const linkCss = css`\n  a {\n    color: ${m('--side-navigation-desktop-item-color')};\n    display: block;\n    text-decoration: none;\n    font-size: ${m('--action-desktop-font-size')};\n    line-height: 140%;\n\n    *[dir='rtl'] & {\n      &:before {\n        right: calc(-1 * ${m('--spacing-m')});\n        border-radius: ${m('--action-indicator-border-radius')} 0 0\n          ${m('--action-indicator-border-radius')};\n      }\n    }\n\n    &:hover {\n      color: ${m('--side-navigation-desktop-item-hover-color')};\n    }\n\n    ${mobileMediaQuery} {\n      color: ${m('--side-navigation-mobile-item-color')};\n    }\n  }\n`;\n\nexport const caratCss = css`\n  font-size: ${m('--action-desktop-font-size')};\n\n  & svg:first-child {\n    width: 22px;\n    height: 22px;\n    margin: -6px;\n  }\n\n  & svg:nth-child(2) {\n    display: none;\n  }\n\n  & svg:nth-child(3) {\n    display: none;\n  }\n\n  *[dir='rtl'] & {\n    & svg:nth-child(2) {\n      display: none;\n    }\n\n    & svg:nth-child(3) {\n      display: none;\n    }\n  }\n`;\n\nexport const activeLinkCss = css`\n  position: relative;\n  font-weight: ${m('--action-desktop-font-weight')};\n\n  a,\n  a:hover {\n    color: ${m('--side-navigation-desktop-item-active-color')};\n\n    ${mobileMediaQuery} {\n      color: ${m('--side-navigation-mobile-item-active-color')};\n    }\n  }\n\n  *[dir='rtl'] & {\n    &:before {\n      right: calc(-1 * ${m('--spacing-m')});\n      border-radius: ${m('--action-indicator-border-radius')} 0 0\n        ${m('--action-indicator-border-radius')};\n    }\n  }\n`;\n\nexport const sectionButtonCss = css`\n  ${nonMobileMediaQuery} {\n    display: none;\n  }\n\n  ${mobileMediaQuery} {\n    background-color: ${m('--side-navigation-mobile-bar-bg-color')};\n    color: ${m('--side-navigation-mobile-bar-fg-color')};\n    border: 0;\n    padding: 0;\n    font: inherit;\n    outline: inherit;\n    width: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    padding-inline: ${m('--spacing-xl')};\n    height: 48px;\n    margin: auto;\n\n    & > span:first-child {\n      font-family: ${m('--font-family')};\n      font-size: ${m('--action-mobile-font-size')};\n      line-height: ${m('--action-mobile-font-line-height')};\n      font-weight: ${m('--action-desktop-font-weight')};\n      text-overflow: ellipsis;\n      overflow: hidden;\n      white-space: nowrap;\n    }\n  }\n`;\n\nexport const sideNavIconCss = css`\n  fill: ${m('--side-navigation-desktop-item-color')};\n  margin: -4px -12px;\n\n  ${mobileMediaQuery} {\n    fill: ${m('--side-navigation-mobile-item-color')};\n  }\n`;\n\nexport const sideNavMobileIconCss = css`\n  width: 22px;\n  height: 22px;\n  margin: -6px;\n  fill: ${m('--side-navigation-mobile-toggler-icon-color')};\n`;\n", "import { css } from '@emotion/css';\n\nimport { maxWidth, mobileMediaQuery, White } from '../../constants';\nimport { m, MotifComponent } from '../../motif';\nimport { desktopSideNavWidthPx } from '../SideNavigation/styles';\n\n/**\n * Split `container-*` styles out to a separate wrapper to resolve issues with margins when\n * 'container-type' is applied, e.g. Snap.com home page\n */\nexport const outerContainerCss = css`\n  container-name: ${MotifComponent.PAGE};\n  container-type: inline-size;\n`;\n\nexport const innerContainerCss = css`\n  position: relative;\n  width: 100%;\n`;\n\n/**\n * We need to have the page background color, set in the Contentful 'Page' entry, cover the whole\n * screen. However, the page has a max-width container.\n *\n * Therefore, we are using a fixed position pseudo element here so that the background color sits\n * behind the page element and covers the whole screen.\n *\n * If issues arise in future, an alternative solution could be to pull the page 'backgroundColor' in\n * the slug-level query and apply the background color to an element higher in the DOM instead.\n */\nexport const pageGutterCss = css`\n  ::before {\n    background-color: ${m('--gutter-color')};\n    content: '';\n    height: 100vh;\n    inset: 0;\n    position: fixed;\n    width: 100vw;\n    z-index: -1;\n  }\n`;\n\nexport const pageBgColorCss = css`\n  background-color: ${m('--bg-color')};\n`;\n\n/** This is used when there is background media. This is needed because we z-index: -1 the media */\nexport const pageTransparentBgCss = css`\n  background-color: transparent;\n`;\n\nexport const backgroundImageCss = (\n  backgroundImage?: string,\n  mobileBackgroundImage?: string\n): string | undefined =>\n  backgroundImage\n    ? css`\n        background: center / cover url(${backgroundImage});\n\n        ${mobileMediaQuery} {\n          background: center / cover\n            url(${mobileBackgroundImage ? mobileBackgroundImage : backgroundImage});\n        }\n      `\n    : undefined;\n\nexport const fixedBackgroundImageCss = css`\n  background-attachment: fixed;\n`;\n\nexport const backgroundMediaCss = css`\n  position: absolute;\n  object-fit: cover;\n  height: 100%;\n  width: 100%;\n  z-index: -1;\n`;\n\nexport const fixedBackgroundMediaCss = css`\n  object-fit: cover;\n  width: 100vw;\n  height: 100vh;\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: -1;\n`;\n\n// TODO: we're forcing the background to white as we don't have validated designs\n// for other themes and background-color only applies Block and Navigator (not Page).\n// possible solution: apply the background of the first block\nexport const sideNavigationWrapperCss = css`\n  display: flex;\n  justify-content: center;\n\n  background-color: ${White};\n\n  ${mobileMediaQuery} {\n    flex-direction: column;\n  }\n`;\n\nexport const sideNavigationWrapperBlocksCss = css`\n  flex: 0 1 ${maxWidth - desktopSideNavWidthPx}px;\n  min-width: 0px;\n\n  ${mobileMediaQuery} {\n    flex: none;\n  }\n`;\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, ZIndex } from '../../constants';\nimport { m } from '../../motif/m';\n\nconst breakHeightCss = css`\n  height: ${m('--break-total-desktop-height')};\n  ${mobileMediaQuery} {\n    height: ${m('--break-total-mobile-height')};\n  }\n`;\n\nconst breakHalfHeightCss = css`\n  height: ${m('--break-half-desktop-height')};\n  ${mobileMediaQuery} {\n    height: ${m('--break-half-mobile-height')};\n  }\n`;\n\nexport const breakCss = css`\n  pointer-events: none;\n  position: relative;\n  z-index: ${ZIndex.BREAK};\n  ${breakHeightCss}\n`;\n\n/**\n * Spreads the pattern to fill the break.\n *\n * Accounts for the issue where rendering SVGs has floating point rounding that sometimes doesn't\n * fully cover the container, so we expand the image.\n *\n * Feels like there are always weird edgecases with weird zoom levels, so the more overlap the\n * better the outcome looks.\n */\nexport const patternCss = css`\n  width: 100%;\n  height: calc(100% + 6px); /* Adds 3x of play below and above. */\n  position: relative;\n  top: -3px; /* Spreads the extra pixels up and down. */\n`;\n\nexport const mediaCss = css`\n  left: 50%;\n  max-height: 100%;\n  position: absolute;\n  top: 50%;\n  transform: translate(-50%, -50%);\n`;\n\nexport const topOverlaidCss = css`\n  margin-top: calc(0px - ${m('--break-total-desktop-height')});\n\n  ${mobileMediaQuery} {\n    margin-top: calc(0px - ${m('--break-total-mobile-height')});\n  }\n`;\n\nexport const bottomOverlaidCss = css`\n  margin-bottom: calc(0px - ${m('--break-total-desktop-height')});\n\n  ${mobileMediaQuery} {\n    margin-bottom: calc(0px - ${m('--break-total-mobile-height')});\n  }\n`;\n\nexport const topHalfOverlaidCss = css`\n  margin-top: calc(0px - ${m('--break-half-desktop-height')});\n\n  ${mobileMediaQuery} {\n    margin-top: calc(0px - ${m('--break-half-mobile-height')});\n  }\n`;\n\nexport const bottomHalfOverlaidCss = css`\n  margin-bottom: calc(0px - ${m('--break-half-desktop-height')});\n\n  ${mobileMediaQuery} {\n    margin-bottom: calc(0px - ${m('--break-half-mobile-height')});\n  }\n`;\n\nexport const spacerWrapperCss = css`\n  pointer-events: none;\n  width: 100%;\n`;\n\nexport const spacerHeightFullCss = breakHeightCss;\n\nexport const spacerHeightHalfCss = breakHalfHeightCss;\n\n/* This background color is set to prevent the page background from bleeding through between the\n * top and bottom SVG paths of the break. This is especially apparent when the top and bottom are\n * the same color.\n */\nexport const backgroundColorCss = css`\n  background-color: ${m('--bg-color')};\n`;\n", "/* eslint-disable max-len */\nimport type { FC } from 'react';\n\nimport type { BreakPatternProps } from './breakPatternTypes';\n\nexport const HeadBreak: FC<BreakPatternProps> = props => {\n  const { topColor, bottomColor, shadowColor, shadowOpacity = 0.2, ...rest } = props;\n  return (\n    <svg\n      width=\"1440\"\n      height=\"96\"\n      viewBox=\"0 0 1440 96\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      preserveAspectRatio=\"none\"\n      role=\"presentation\"\n      {...rest}\n    >\n      <defs>\n        <filter id=\"break-head-shadow\" x=\"0\" y=\"0\" width=\"100%\" height=\"96\">\n          <feGaussianBlur stdDeviation=\"15\" />\n          <feComposite operator=\"out\" in2=\"SourceGraphic\" />\n        </filter>\n      </defs>\n\n      {/* Top section */}\n      <path\n        d=\"M1440 0H0L-0.00390625 65C228.186 32.4746 470.064 21 720.555 21C971.045 21 1212.14 32.5811 1439.99 65L1440 0Z\"\n        fill={topColor}\n      />\n\n      {/* Bottom section */}\n      <path\n        d=\"M1439.99 43.9999L1440 75C896.804 75.3096 544.733 75 -0.00292327 75L-0.00463491 44C228.185 11.4751 470.065 8.66536e-05 720.555 6.42749e-05C971.044 4.18962e-05 1212.14 11.5812 1439.99 43.9999Z\"\n        fill={bottomColor}\n        transform=\"translate(0 21)\" // Move to bottom of the SVG container\n      />\n\n      {/* Drop shadow (same path as the top section with the filter applied) */}\n      <path\n        d=\"M1440 0H0L-0.00390625 65C228.186 32.4746 470.064 21 720.555 21C971.045 21 1212.14 32.5811 1439.99 65L1440 0Z\"\n        fill={shadowColor}\n        opacity={shadowOpacity}\n        filter=\"url(#break-head-shadow)\"\n      />\n    </svg>\n  );\n};\n", "/* eslint-disable max-len */\nimport type { FC } from 'react';\n\nimport type { BreakPatternProps } from './breakPatternTypes';\n\nexport const HeadFlippedBreak: FC<BreakPatternProps> = props => {\n  const { topColor, bottomColor, shadowColor, shadowOpacity = 0.2, ...rest } = props;\n  return (\n    <svg\n      width=\"1440\"\n      height=\"96\"\n      viewBox=\"0 0 1440 96\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      preserveAspectRatio=\"none\"\n      role=\"presentation\"\n      {...rest}\n    >\n      <defs>\n        <filter id=\"break-headflipped-shadow\" x=\"0\" y=\"0\" width=\"100%\" height=\"96\">\n          <feGaussianBlur stdDeviation=\"15\" />\n          <feComposite operator=\"out\" in2=\"SourceGraphic\" />\n        </filter>\n      </defs>\n\n      {/* Top section */}\n      <path\n        d=\"M1440 0.000128746L4.27734e-06 9.68134e-08C228.19 32.5249 470.07 49.9999 720.56 49.9999C971.05 50 1212.15 32.4188 1440 0.000128746Z\"\n        fill={topColor}\n      />\n\n      {/* Bottom section */}\n      <path\n        d=\"M1440 96V0C1212.15 32.4189 971.051 50 720.561 50C470.07 50 228.189 32.5254 0 0V96H1440Z\"\n        fill={bottomColor}\n      />\n\n      {/* Drop shadow (same path as the top section with the filter applied) */}\n      <path\n        d=\"M1440 0.000128746L4.27734e-06 9.68134e-08C228.19 32.5249 470.07 49.9999 720.56 49.9999C971.05 50 1212.15 32.4188 1440 0.000128746Z\"\n        fill={shadowColor}\n        opacity={shadowOpacity}\n        filter=\"url(#break-headflipped-shadow)\"\n      />\n    </svg>\n  );\n};\n", "import { css } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport { nonMobileMediaQuery, smallDesktopMediaQuery } from '../../../constants';\nimport { m } from '../../../motif';\n\nexport const lineBreakContainerCss = css`\n  align-items: center;\n  background-color: ${m('--bg-color')};\n  display: flex;\n  height: 100%;\n  padding: ${m('--spacing-l')} ${m('--spacing-xl')};\n  width: 100%;\n\n  ${nonMobileMediaQuery} {\n    padding: ${m('--spacing-l')} ${m('--spacing-xl')};\n  }\n  ${smallDesktopMediaQuery} {\n    padding: ${m('--spacing-l')} ${m('--spacing-xxxl')};\n  }\n`;\n\nexport const lineBreakCss = css`\n  background-color: ${m('--fg-color')};\n  height: 1px;\n  width: 100%;\n`;\n\nexport const LineBreak: FC = () => {\n  return (\n    <div className={lineBreakContainerCss}>\n      <div className={lineBreakCss} />\n    </div>\n  );\n};\n", "/* eslint-disable max-len */\nimport type { FC } from 'react';\n\nimport type { BreakPatternProps } from './breakPatternTypes';\n\nexport const SkirtBreak: FC<BreakPatternProps> = props => {\n  const { topColor, bottomColor, shadowColor, shadowOpacity = 0.2, ...rest } = props;\n  return (\n    <svg\n      width=\"1440\"\n      height=\"96\"\n      viewBox=\"0 0 1440 96\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      preserveAspectRatio=\"none\"\n      role=\"presentation\"\n      {...rest}\n    >\n      <defs>\n        <filter id=\"break-skirt-shadow\" x=\"0\" y=\"0\" width=\"100%\" height=\"96\">\n          <feGaussianBlur stdDeviation=\"15\" />\n          <feComposite operator=\"out\" in2=\"SourceGraphic\" />\n        </filter>\n      </defs>\n\n      {/* Top section */}\n      <path\n        d=\"M314.31 27.8046C510.98 21.076 546.9 47.315 818.11 47.9843C935 48.4325 1223.03 39.463 1440 0H0V41.5C27.99 42.3963 117.64 34.5331 314.31 27.8106V27.8046Z\"\n        fill={topColor}\n      />\n\n      {/* Bottom section */}\n      <path\n        d=\"M0 96H1440V0C1223.03 39.463 935 48.4325 818.11 47.9843C683.948 47.6532 607.363 41.065 540.415 35.3058C472.026 29.4227 413.692 24.4045 314.31 27.8046V27.8106C204.403 31.5674 127.919 35.6805 76.9403 38.4219C36.6967 40.5861 12.3481 41.8954 0 41.5V96Z\"\n        fill={bottomColor}\n      />\n\n      {/* Drop shadow (same path as the top section with the filter applied) */}\n      <path\n        d=\"M314.31 27.8046C510.98 21.076 546.9 47.315 818.11 47.9843C935 48.4325 1223.03 39.463 1440 0H0V41.5C27.99 42.3963 117.64 34.5331 314.31 27.8106V27.8046Z\"\n        fill={shadowColor}\n        opacity={shadowOpacity}\n        filter=\"url(#break-skirt-shadow)\"\n      />\n    </svg>\n  );\n};\n", "/* eslint-disable max-len */\nimport type { FC } from 'react';\n\nimport type { BreakPatternProps } from './breakPatternTypes';\n\nexport const Skirt2Break: FC<BreakPatternProps> = props => {\n  const { topColor, bottomColor, shadowColor, shadowOpacity = 0.2, ...rest } = props;\n  return (\n    <svg\n      width=\"1440\"\n      height=\"96\"\n      viewBox=\"0 0 1440 96\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      preserveAspectRatio=\"none\"\n      role=\"presentation\"\n      {...rest}\n    >\n      <defs>\n        <filter id=\"break-skirt2-shadow\" x=\"0\" y=\"0\" width=\"100%\" height=\"96\">\n          <feGaussianBlur stdDeviation=\"15\" />\n          <feComposite operator=\"out\" in2=\"SourceGraphic\" />\n        </filter>\n      </defs>\n\n      {/* Top section */}\n      <path\n        d=\"M1440 0.0991211H0V50.1971C36.6091 43.6777 77.6641 37.7261 124.249 32.6745C310.648 12.4616 361 13.9746 528.797 31.5909C542.059 32.9831 555.219 35.2322 569.339 37.6453C599.237 42.755 633.435 48.5996 682 48.5996C731.565 48.3254 771.328 42.4257 813.924 36.1058C836.643 32.7351 860.166 29.2449 886.413 26.4248C944.864 20.7107 990.885 16.5365 1031.36 20.9347C1046.21 22.7434 1059.43 25.6192 1070.25 29.3933C1070.84 29.5968 1071.39 29.7913 1071.93 29.9783C1081.36 33.2595 1084.09 34.2084 1094.38 40.0996C1099.5 43.0274 1105.69 45.2946 1115.5 48.5996C1125.27 50.4244 1136.28 50.7567 1148.07 50.5944C1157.61 50.5266 1168.07 50.3572 1179.24 50.1765C1180.84 50.1505 1182.46 50.1243 1184.09 50.0982C1231.43 49.2382 1342.55 51.9494 1381.68 55.0925C1420.82 58.2357 1440 63.0996 1440 63.0996V0.0991211Z\"\n        fill={topColor}\n      />\n\n      {/* Bottom section */}\n      <path\n        d=\"M1440 79.2424V46.0986C1440 46.0986 1420.82 41.2347 1381.68 38.0915C1342.55 34.9484 1231.43 32.2372 1184.09 33.0972C1182.46 33.1233 1180.84 33.1495 1179.24 33.1755C1168.07 33.3562 1157.61 33.5256 1148.07 33.5935C1136.28 33.7557 1125.27 33.4234 1115.5 31.5986C1105.69 28.2936 1099.5 26.0264 1094.38 23.0986C1084.09 17.2074 1081.36 16.2586 1071.93 12.9773C1071.39 12.7904 1070.84 12.5958 1070.25 12.3924C1059.43 8.61827 1046.21 5.74244 1031.36 3.93377C990.885 -0.464426 944.864 3.70971 886.413 9.42386C860.166 12.244 836.643 15.7342 813.924 19.1048C771.328 25.4247 731.565 31.3244 682 31.5986C633.435 31.5986 599.237 25.754 569.339 20.6443C555.219 18.2313 542.059 15.9821 528.797 14.5899C361 -3.0264 310.648 -4.53937 124.249 15.6736C77.6641 20.7252 36.6091 26.6767 0 33.1961L4.37898e-05 79.2424H1440Z\"\n        fill={bottomColor}\n        transform=\"translate(0 17)\" // Move to bottom of the SVG container\n      />\n\n      {/* Drop shadow (same path as the top section with the filter applied) */}\n      <path\n        d=\"M1440 0.0991211H0V50.1971C36.6091 43.6777 77.6641 37.7261 124.249 32.6745C310.648 12.4616 361 13.9746 528.797 31.5909C542.059 32.9831 555.219 35.2322 569.339 37.6453C599.237 42.755 633.435 48.5996 682 48.5996C731.565 48.3254 771.328 42.4257 813.924 36.1058C836.643 32.7351 860.166 29.2449 886.413 26.4248C944.864 20.7107 990.885 16.5365 1031.36 20.9347C1046.21 22.7434 1059.43 25.6192 1070.25 29.3933C1070.84 29.5968 1071.39 29.7913 1071.93 29.9783C1081.36 33.2595 1084.09 34.2084 1094.38 40.0996C1099.5 43.0274 1105.69 45.2946 1115.5 48.5996C1125.27 50.4244 1136.28 50.7567 1148.07 50.5944C1157.61 50.5266 1168.07 50.3572 1179.24 50.1765C1180.84 50.1505 1182.46 50.1243 1184.09 50.0982C1231.43 49.2382 1342.55 51.9494 1381.68 55.0925C1420.82 58.2357 1440 63.0996 1440 63.0996V0.0991211Z\"\n        fill={shadowColor}\n        opacity={shadowOpacity}\n        filter=\"url(#break-skirt2-shadow)\"\n      />\n    </svg>\n  );\n};\n", "/* eslint-disable max-len */\nimport type { FC } from 'react';\n\nimport type { BreakPatternProps } from './breakPatternTypes';\n\nexport const Skirt3Break: FC<BreakPatternProps> = props => {\n  const { topColor, bottomColor, shadowColor, shadowOpacity = 0.2, ...rest } = props;\n  return (\n    <svg\n      width=\"1440\"\n      height=\"96\"\n      viewBox=\"0 0 1440 96\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      preserveAspectRatio=\"none\"\n      role=\"presentation\"\n      {...rest}\n    >\n      <defs>\n        <filter id=\"break-skirt3-shadow\" x=\"0\" y=\"0\" width=\"100%\" height=\"96\">\n          <feGaussianBlur stdDeviation=\"15\" />\n          <feComposite operator=\"out\" in2=\"SourceGraphic\" />\n        </filter>\n      </defs>\n\n      {/* Top section */}\n      <path\n        d=\"M0 0C34.849 14.3283 113.946 7.9634 169.366 14.5723C193.656 18.3155 229.541 28.3275 253.444 30.9529C320.056 36.6478 380.164 24.0008 446.021 28.8655C538.848 36.8216 612.91 60.1738 720.005 58.9539C827.081 60.1738 901.18 36.8253 993.979 28.8619C1059.84 23.9972 1119.94 36.6442 1186.56 30.9529C1210.32 28.3166 1246.29 18.3191 1270.63 14.5686C1326.17 7.96341 1405.17 14.3283 1440 0.00364149V0H0Z\"\n        fill={topColor}\n      />\n\n      {/* Bottom section */}\n      <path\n        d=\"M1440 96V0C1418.53 8.83496 1380.26 9.80273 1341.06 10.7939C1316.67 11.4102 1291.93 12.0361 1270.63 14.5684C1259.9 16.2227 1246.9 19.0908 1233.69 22.0078C1216.94 25.7051 1199.84 29.4795 1186.56 30.9531C1152.46 33.8662 1120.06 31.9736 1087.73 30.0859C1056.9 28.2852 1026.12 26.4873 993.979 28.8623C958.615 31.8965 925.967 37.165 893.176 42.457C839.916 51.0527 786.275 59.709 720.004 58.9541C653.738 59.709 600.121 51.0557 546.877 42.4639C514.072 37.1699 481.41 31.8984 446.021 28.8652C413.881 26.4912 383.107 28.2881 352.281 30.0879C319.943 31.9766 287.547 33.8682 253.443 30.9531C240.031 29.4795 222.848 25.6807 206.057 21.9688C192.922 19.0654 180.027 16.2148 169.367 14.5723C148.109 12.0371 123.369 11.4111 98.9785 10.7939C59.7793 9.80176 21.4824 8.83203 0 0V96H1440Z\"\n        fill={bottomColor}\n      />\n\n      {/* Drop shadow (same path as the top section with the filter applied) */}\n      <path\n        d=\"M0 0C34.849 14.3283 113.946 7.9634 169.366 14.5723C193.656 18.3155 229.541 28.3275 253.444 30.9529C320.056 36.6478 380.164 24.0008 446.021 28.8655C538.848 36.8216 612.91 60.1738 720.005 58.9539C827.081 60.1738 901.18 36.8253 993.979 28.8619C1059.84 23.9972 1119.94 36.6442 1186.56 30.9529C1210.32 28.3166 1246.29 18.3191 1270.63 14.5686C1326.17 7.96341 1405.17 14.3283 1440 0.00364149V0H0Z\"\n        fill={shadowColor}\n        opacity={shadowOpacity}\n        filter=\"url(#break-skirt3-shadow)\"\n      />\n    </svg>\n  );\n};\n", "import type { FC } from 'react';\n\nimport type { BreakPatternProps } from './breakPatternTypes';\n\nexport const StraightBreak: FC<BreakPatternProps> = props => {\n  const { topColor, bottomColor, shadowColor, shadowOpacity = 0.2, ...rest } = props;\n  return (\n    <svg\n      width=\"1440\"\n      height=\"96\"\n      viewBox=\"0 0 1440 96\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      preserveAspectRatio=\"none\"\n      role=\"presentation\"\n      {...rest}\n    >\n      <defs>\n        <filter id=\"break-straight-shadow\" x=\"0\" y=\"0\" width=\"100%\" height=\"96\">\n          <feGaussianBlur stdDeviation=\"15\" />\n          <feComposite operator=\"out\" in2=\"SourceGraphic\" />\n        </filter>\n      </defs>\n\n      {/* Top section */}\n      <rect x=\"0\" y=\"0\" width=\"100%\" height=\"48\" fill={topColor} />\n\n      {/* Bottom section */}\n      <rect\n        x=\"0\"\n        y=\"0\"\n        width=\"100%\"\n        height=\"48\"\n        fill={bottomColor}\n        transform=\"translate(0 48)\" // Move to bottom of the SVG container\n      />\n\n      {/* Drop shadow (same path as the top section with the filter applied) */}\n      <rect\n        x=\"0\"\n        y=\"0\"\n        width=\"100%\"\n        height=\"48\"\n        fill={shadowColor}\n        opacity={shadowOpacity}\n        filter=\"url(#break-straight-shadow)\"\n      />\n    </svg>\n  );\n};\n", "import { BreakOverlayType, Template } from './types';\n\n/**\n * This util function is used to determine the amount that a 'Break' component should overlay the\n * previous or next block\n */\nexport const getBreakOverlayType = ({\n  template,\n  isTopTransparent,\n  isBottomTransparent,\n  isOverlaid,\n}: {\n  template: Template;\n  isTopTransparent: boolean;\n  isBottomTransparent: boolean;\n  isOverlaid?: boolean;\n}): BreakOverlayType => {\n  if (!template) return BreakOverlayType.NONE;\n\n  // Line breaks should always be top and bottom half overlaid to\n  // not add too much spacing.\n  if (template === Template.Line) {\n    return BreakOverlayType.TOP_HALF_AND_BOTTOM_HALF;\n  }\n\n  if (isTopTransparent && isBottomTransparent) {\n    return BreakOverlayType.NONE;\n  }\n\n  const isTransparentTopOnly = isTopTransparent && !isBottomTransparent;\n  const isTransparentBottomOnly = !isTopTransparent && isBottomTransparent;\n\n  if (isOverlaid) {\n    if (template === Template.Straight) {\n      return BreakOverlayType.TOP_HALF_AND_BOTTOM_HALF;\n    }\n\n    if (isTransparentTopOnly) {\n      return BreakOverlayType.TOP;\n    }\n\n    if (isTransparentBottomOnly) {\n      return BreakOverlayType.BOTTOM;\n    }\n\n    return BreakOverlayType.TOP_HALF_AND_BOTTOM_HALF;\n  }\n\n  if (isTransparentTopOnly) {\n    return template === Template.Straight ? BreakOverlayType.TOP_HALF : BreakOverlayType.TOP;\n  }\n\n  if (isTransparentBottomOnly) {\n    return template === Template.Straight ? BreakOverlayType.BOTTOM_HALF : BreakOverlayType.BOTTOM;\n  }\n\n  return BreakOverlayType.NONE;\n};\n", "import { cx } from '@emotion/css';\nimport type { FC, ReactNode } from 'react';\n\nimport type { BackgroundColor } from '../../constants';\nimport { getMotifSchemeForLegacyBackgroundColor, getMotifVariableValue, m } from '../../motif';\nimport { MotifComponent, MotifScheme } from '../../motif/motifConstants';\nimport { useMotifStyles } from '../../motif/motifReactUtils';\nimport type { ImageSources } from '../../types';\nimport { Media } from '../Media';\nimport {\n  backgroundColorCss,\n  bottomHalfOverlaidCss,\n  bottomOverlaidCss,\n  breakCss,\n  mediaCss,\n  patternCss,\n  topHalfOverlaidCss,\n  topOverlaidCss,\n} from './Break.styled';\nimport {\n  HeadBreak,\n  HeadFlippedBreak,\n  LineBreak,\n  Skirt2Break,\n  Skirt3Break,\n  SkirtBreak,\n  StraightBreak,\n} from './templates';\nimport { BreakOverlayType, Template } from './types';\nimport { getBreakOverlayType } from './utils';\n\nexport interface BreakProps {\n  template: Template;\n  imgSrcs?: ImageSources;\n  topColor?: BackgroundColor | MotifScheme;\n  bottomColor?: BackgroundColor | MotifScheme;\n  isOverlaid?: boolean;\n}\n\n/** Spacer between blocks. */\nexport const Break: FC<BreakProps> = ({ template, imgSrcs, topColor, bottomColor, isOverlaid }) => {\n  useMotifStyles(MotifComponent.BREAK);\n\n  if (template === 'None') return null;\n\n  const hasCustomMedia = !!imgSrcs;\n\n  const isTopTransparent = !topColor;\n  const isBottomTransparent = !bottomColor;\n\n  if (isTopTransparent && isBottomTransparent) return null;\n\n  const topScheme = getMotifSchemeForLegacyBackgroundColor(topColor);\n  const bottomScheme = getMotifSchemeForLegacyBackgroundColor(bottomColor);\n  const topValue = isTopTransparent\n    ? 'transparent'\n    : getMotifVariableValue(topScheme, '--bg-color') ?? 'transparent';\n  const bottomValue = isBottomTransparent\n    ? 'transparent'\n    : getMotifVariableValue(bottomScheme, '--bg-color') ?? 'transparent';\n\n  const shadowColor =\n    bottomScheme === MotifScheme.SECONDARY\n      ? m('--break-shadow-light-color')\n      : m('--break-shadow-dark-color');\n\n  let shadowOpacity = 0.2;\n\n  // Increase opacity if both top and bottom colors are dark\n  if (topScheme === MotifScheme.SECONDARY && bottomScheme === MotifScheme.SECONDARY) {\n    shadowOpacity = 0.4;\n  }\n\n  // Increase opacity if top color is light and bottom color is dark\n  if (topScheme !== MotifScheme.SECONDARY && bottomScheme === MotifScheme.SECONDARY) {\n    shadowOpacity = 0.56;\n  }\n\n  let pattern: ReactNode;\n\n  if (hasCustomMedia) {\n    pattern = (\n      <StraightBreak\n        className={patternCss}\n        topColor={topValue}\n        bottomColor={bottomValue}\n        shadowColor={shadowColor}\n        shadowOpacity={shadowOpacity}\n      />\n    );\n  } else {\n    switch (template) {\n      case Template.Head:\n        pattern = (\n          <HeadBreak\n            className={patternCss}\n            topColor={topValue}\n            bottomColor={bottomValue}\n            shadowColor={shadowColor}\n            shadowOpacity={shadowOpacity}\n          />\n        );\n        break;\n      case Template.HeadFlipped:\n        pattern = (\n          <HeadFlippedBreak\n            className={patternCss}\n            topColor={topValue}\n            bottomColor={bottomValue}\n            shadowColor={shadowColor}\n            shadowOpacity={shadowOpacity}\n          />\n        );\n        break;\n      case Template.Line:\n        pattern = <LineBreak />;\n        break;\n      case Template.Skirt:\n        pattern = (\n          <SkirtBreak\n            className={patternCss}\n            topColor={topValue}\n            bottomColor={bottomValue}\n            shadowColor={shadowColor}\n            shadowOpacity={shadowOpacity}\n          />\n        );\n        break;\n      case Template.Skirt2:\n        pattern = (\n          <Skirt2Break\n            className={patternCss}\n            topColor={topValue}\n            bottomColor={bottomValue}\n            shadowColor={shadowColor}\n            shadowOpacity={shadowOpacity}\n          />\n        );\n        break;\n      case Template.Skirt3:\n        pattern = (\n          <Skirt3Break\n            className={patternCss}\n            topColor={topValue}\n            bottomColor={bottomValue}\n            shadowColor={shadowColor}\n            shadowOpacity={shadowOpacity}\n          />\n        );\n        break;\n      case Template.Straight:\n        pattern = (\n          <StraightBreak\n            className={patternCss}\n            topColor={topValue}\n            bottomColor={bottomValue}\n            shadowColor={shadowColor}\n            shadowOpacity={shadowOpacity}\n          />\n        );\n        break;\n      default:\n        break;\n    }\n  }\n\n  if (!pattern) return null;\n\n  // Check to see if this 'Break' will overlay another block/component\n  // and, therefore, require a negative margin\n  const breakOverlayType = getBreakOverlayType({\n    template: hasCustomMedia ? Template.Straight : template, // Custom media uses straight break\n    isTopTransparent,\n    isBottomTransparent,\n    isOverlaid,\n  });\n\n  return (\n    <div\n      className={cx(\n        MotifComponent.BREAK,\n        /* It doesn't matter which background class name is used here as all set global variables to the same global colours\n         * This is just set as a backup in case there is no background class name set higher up in the DOM, in which case\n         * the global variables would not be set.\n         *\n         * We will use the theme to match the top color, which will be used to set the matching background color\n         * to prevent the page background from bleeding through between the top and bottom SVG paths of the break.\n         * This is especially apparent when the top and bottom are the same color.\n         */\n        topScheme ?? MotifScheme.DEFAULT,\n        breakCss,\n        {\n          [topOverlaidCss]: breakOverlayType === BreakOverlayType.TOP,\n          [bottomOverlaidCss]: breakOverlayType === BreakOverlayType.BOTTOM,\n          [topHalfOverlaidCss]:\n            breakOverlayType === BreakOverlayType.TOP_HALF_AND_BOTTOM_HALF ||\n            breakOverlayType === BreakOverlayType.TOP_HALF,\n          [bottomHalfOverlaidCss]:\n            breakOverlayType === BreakOverlayType.TOP_HALF_AND_BOTTOM_HALF ||\n            breakOverlayType === BreakOverlayType.BOTTOM_HALF,\n          [backgroundColorCss]: !isTopTransparent && !isBottomTransparent,\n        }\n      )}\n      data-testid={`break-${template?.toLowerCase()}`}\n    >\n      {pattern}\n      {!!imgSrcs && <Media className={mediaCss} imgSrcs={imgSrcs} altText=\"\" />}\n    </div>\n  );\n};\n\nBreak.displayName = 'Break';\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { spacerHeightFullCss, spacerHeightHalfCss, spacerWrapperCss } from './Break.styled';\nimport { BreakOverlayType } from './types';\n\nexport interface BreakSpacerProps {\n  type: BreakOverlayType;\n  location: 'top' | 'bottom';\n}\n\nexport const BreakSpacer: FC<BreakSpacerProps> = ({ type, location }) => {\n  // Uses Break styles.\n  useMotifStyles(MotifComponent.BREAK);\n\n  if (!type || type === BreakOverlayType.NONE) return null;\n\n  // If this component is placed at the top of a block, check if the bottom of the previous break overlays the block\n  // If this component is placed at the bottom of a block, check if the top of the next break overlays the block\n  const isFullHeight =\n    (location === 'top' && type === BreakOverlayType.BOTTOM) ||\n    (location === 'bottom' && type === BreakOverlayType.TOP);\n\n  const isHalfHeight =\n    type === BreakOverlayType.TOP_HALF_AND_BOTTOM_HALF ||\n    (location === 'top' && type === BreakOverlayType.BOTTOM_HALF) ||\n    (location === 'bottom' && type === BreakOverlayType.TOP_HALF);\n\n  if (!isFullHeight && !isHalfHeight) return null;\n\n  return (\n    <div\n      className={cx(spacerWrapperCss, {\n        [spacerHeightFullCss]: isFullHeight,\n        [spacerHeightHalfCss]: isHalfHeight,\n      })}\n      data-testid=\"break-spacer\"\n    />\n  );\n};\n\nBreakSpacer.displayName = 'BreakSpacer';\n", "import { cx } from '@emotion/css';\nimport type { FC, MouseEventHandler, ReactEventHandler } from 'react';\nimport { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useIsMobile } from '../../../hooks';\nimport type { BaseComponentProps, ImageSources } from '../../../types';\nimport type { OnNavigateHandler } from '../../../types/activationEvents';\nimport { editorialGalleryBrandNames, type EditorialGalleryBrand } from '../../EditorialGalleryCard';\nimport { Icon } from '../../Icon';\nimport { Media } from '../../Media';\nimport { Picture } from '../../Picture';\nimport { PrimitivesContext } from '../../Primitives';\nimport { isVideoPlaying } from '../../Video';\nimport {\n  arrowCss,\n  bodyCss,\n  bodyOnlyClampCss,\n  cardCss,\n  cardLandscapeWidthCss,\n  cardPortraitWidthCss,\n  cardResponsiveWidthCss,\n  image11Css,\n  image169Css,\n  image32Css,\n  imageCss,\n  imageLoadingCss,\n  infoElementCss,\n  linkCss,\n  mediaContainerCss,\n  mediaLogoContainerCss,\n  mediaLogoImageCss,\n  mediaLogoImageMobileCss,\n  mediaLogoPictureCss,\n  mediaLogoPictureMobileCss,\n  metadataContainerCss,\n  metadataTextCss,\n  relatedContentLineClampCss,\n  singleViewLandscapeWidthCss,\n  subtitleCss,\n  subtitleOnlyClampCss,\n  textCss,\n  textOverlapCss,\n  textPlayerControlsCss,\n  textWrapperCss,\n  textWrapperOverlapCss,\n  titleCss,\n  titleOnlyClampCss,\n  videoCss,\n  videoPlayerControlsCss,\n} from './CarouselCardItem.styles';\nimport type { CarouselV3AspectRatios } from './types';\n\nexport interface CarouselCardItemProps extends BaseComponentProps {\n  aspectRatio?: CarouselV3AspectRatios;\n  brand?: EditorialGalleryBrand;\n  date?: string;\n  title?: string;\n  subtitle?: string;\n  body?: string;\n  // click settings\n  url?: string;\n  openNewTab?: boolean;\n  onClick?: OnNavigateHandler;\n  // image settings\n  imgSrcs?: ImageSources;\n  imgAltText?: string;\n  // video setings\n  videoSource?: string;\n  mobileVideoSource?: string;\n  posterSource?: string;\n  captionsSource?: string;\n  onTimeUpdate?: ReactEventHandler<HTMLVideoElement>;\n  onPlay?: ReactEventHandler<HTMLVideoElement>;\n  onPause?: ReactEventHandler<HTMLVideoElement>;\n  // carousel controls\n  shouldLoad?: boolean;\n  isVisible?: boolean;\n  isSingleView?: boolean;\n  autoplay?: boolean;\n  showVideoControls?: boolean;\n  isResponsiveWidth?: boolean;\n  hideLinkArrow?: boolean;\n  logoSrcs?: ImageSources;\n  logoAltText?: string;\n  relatedContent?: boolean;\n}\n\nexport const CarouselCardItem: FC<CarouselCardItemProps> = ({\n  aspectRatio,\n  autoplay,\n  body,\n  captionsSource,\n  imgAltText,\n  imgSrcs,\n  shouldLoad,\n  onPlay,\n  onPause,\n  onTimeUpdate,\n  openNewTab,\n  posterSource,\n  isVisible,\n  showVideoControls,\n  subtitle,\n  title,\n  url,\n  videoSource,\n  mobileVideoSource,\n  onClick,\n  isSingleView = false,\n  isResponsiveWidth = false,\n  hideLinkArrow,\n  logoSrcs,\n  logoAltText,\n  className,\n  date,\n  brand,\n  relatedContent = false,\n}) => {\n  const [media, setMedia] = useState<HTMLElement>();\n  const [isLogoOverlayHovered, setIsLogoOverlayHovered] = useState(false);\n  const mediaCallback = useCallback((elt: HTMLElement) => setMedia(elt), []);\n  const didLoad = useRef(shouldLoad);\n  const { Anchor } = useContext(PrimitivesContext);\n  const isMobile = useIsMobile();\n\n  // Only use responsive width style if the carousel is in multi view mode\n  const isResponsiveWidthMultiView = isResponsiveWidth && !isSingleView && !isMobile;\n  const isTextOverlap = !isResponsiveWidthMultiView && (!videoSource || !showVideoControls);\n  const hasLogoOverlay = !isMobile && logoSrcs;\n\n  const onClickWrapped = useCallback<MouseEventHandler>(\n    event => {\n      url && onClick && onClick(url, event);\n    },\n    [url, onClick]\n  );\n\n  // isVisible indicates if any part of the item is on screen\n  // It allows us to lazy load images and pause videos when they leave the screen\n  useEffect(() => {\n    if (shouldLoad) {\n      didLoad.current = true;\n    }\n  }, [shouldLoad]);\n\n  useEffect(() => {\n    if (media && media.tagName === 'VIDEO') {\n      const video = media as HTMLVideoElement;\n\n      // Ensure video is paused if there is a logo overlay, and only start playing when hovered\n      if (hasLogoOverlay) {\n        if (isLogoOverlayHovered) {\n          try {\n            void video.play();\n          } catch (_error) {\n            // the video may be outside the document at this point\n          }\n          video.tabIndex = 0;\n        } else {\n          if (isVideoPlaying(video)) {\n            video.pause();\n          }\n          video.tabIndex = -1;\n\n          if (!showVideoControls) {\n            video.currentTime = 0;\n          }\n        }\n\n        return;\n      }\n\n      // If there is no logo overlay, play/pause the video based on visibility\n      if (!isVisible) {\n        if (isVideoPlaying(video)) {\n          video.pause();\n        }\n        video.tabIndex = -1;\n\n        if (!showVideoControls) {\n          video.currentTime = 0;\n        }\n      } else {\n        if (!showVideoControls) {\n          try {\n            void video.play();\n          } catch (_error) {\n            // the video may be outside the document at this point\n          }\n        }\n        video.tabIndex = 0;\n      }\n    }\n  }, [isVisible, showVideoControls, media, hasLogoOverlay, isLogoOverlayHovered]);\n\n  const hasBodyContent = !!(title || subtitle || body);\n\n  const mediaElement = useMemo(() => {\n    const mediaCss = cx(\n      videoSource ? videoCss : imageCss,\n      showVideoControls && hasBodyContent ? videoPlayerControlsCss : null\n    );\n\n    return (\n      <Media\n        showVideoControls={showVideoControls}\n        videoSource={videoSource}\n        mobileVideoSource={mobileVideoSource}\n        posterSource={posterSource}\n        onPlay={onPlay}\n        onPause={onPause}\n        captionsSource={captionsSource}\n        isBackgroundVideo={autoplay}\n        onTimeUpdate={onTimeUpdate}\n        altText={imgAltText}\n        imgSrcs={imgSrcs}\n        className={mediaCss}\n        ref={mediaCallback}\n        isDraggable={false}\n        autoplay={hasLogoOverlay ? false : undefined}\n      />\n    );\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n    videoSource,\n    showVideoControls,\n    posterSource,\n    onPlay,\n    onPause,\n    captionsSource,\n    autoplay,\n    onTimeUpdate,\n    mediaCallback,\n  ]);\n\n  const mediaContent = (\n    <div\n      className={cx(\n        mediaContainerCss,\n        { [image32Css]: aspectRatio === '3:2' },\n        { [image11Css]: aspectRatio === '1:1' },\n        { [image169Css]: aspectRatio === '16:9' },\n        { [imageLoadingCss]: !isVisible && !didLoad.current }\n      )}\n    >\n      {(isVisible || didLoad.current) && mediaElement}\n      {hasLogoOverlay && (\n        <div\n          className={mediaLogoContainerCss}\n          onMouseEnter={() => setIsLogoOverlayHovered(true)}\n          onMouseLeave={() => setIsLogoOverlayHovered(false)}\n        >\n          <Picture\n            imgSrcs={logoSrcs}\n            altText={logoAltText}\n            className={mediaLogoPictureCss}\n            imgClassName={mediaLogoImageCss}\n          />\n        </div>\n      )}\n    </div>\n  );\n\n  const bodyContent = (\n    <div className={cx(textWrapperCss, { [textWrapperOverlapCss]: isTextOverlap })}>\n      <div\n        className={cx(textCss, 'sdsm-carousel-card-text', {\n          [textOverlapCss]: isTextOverlap,\n          [textPlayerControlsCss]: showVideoControls && hasBodyContent,\n        })}\n      >\n        {!!url && !hideLinkArrow && <Icon className={arrowCss} name=\"arrow-right\" />}\n        {isMobile && logoSrcs && (\n          <Picture\n            imgSrcs={logoSrcs}\n            altText={logoAltText}\n            className={mediaLogoPictureMobileCss}\n            imgClassName={mediaLogoImageMobileCss}\n          />\n        )}\n        {(brand || date) && (\n          <div className={cx(infoElementCss, metadataContainerCss)}>\n            {brand ? (\n              <span className={metadataTextCss}>{editorialGalleryBrandNames[brand]}</span>\n            ) : null}\n            {date ? <span className={metadataTextCss}>{date}</span> : null}\n          </div>\n        )}\n        {title && (\n          <h5\n            className={cx(infoElementCss, titleCss, { [titleOnlyClampCss]: !subtitle && !body })}\n            title={title}\n          >\n            {title}\n          </h5>\n        )}\n        {subtitle && (\n          <h6\n            className={cx(infoElementCss, subtitleCss, { [subtitleOnlyClampCss]: !title && !body })}\n            title={subtitle}\n          >\n            {subtitle}\n          </h6>\n        )}\n        {body && (\n          <p\n            className={cx(infoElementCss, bodyCss, {\n              /*\n               * Related Content carousel items should have only 2 lines of body text.\n               * This is defined by design.\n               */\n              [relatedContentLineClampCss]: relatedContent,\n              [bodyOnlyClampCss]: !title && !subtitle,\n            })}\n            title={body}\n          >\n            {body}\n          </p>\n        )}\n      </div>\n    </div>\n  );\n\n  const commonCss = {\n    [cardLandscapeWidthCss]: aspectRatio !== '9:16' && !isSingleView,\n    [singleViewLandscapeWidthCss]: aspectRatio !== '9:16' && isSingleView,\n    [cardPortraitWidthCss]: aspectRatio === '9:16',\n    [cardResponsiveWidthCss]: isResponsiveWidthMultiView,\n  };\n\n  if (url) {\n    return (\n      <Anchor\n        href={url}\n        {...(openNewTab ? { target: '_blank', rel: 'noopener' } : {})}\n        className={cx(cardCss, linkCss, commonCss, className)}\n        tabIndex={isVisible ? undefined : -1}\n        onClick={onClickWrapped}\n        draggable=\"false\"\n        data-testid=\"sdsm-carousel-card\"\n      >\n        {mediaContent}\n        {hasBodyContent && bodyContent}\n      </Anchor>\n    );\n  }\n\n  return (\n    <div className={cx(cardCss, commonCss, className)} data-testid=\"sdsm-carousel-card\">\n      {mediaContent}\n      {hasBodyContent && bodyContent}\n    </div>\n  );\n};\n\nCarouselCardItem.displayName = 'CarouselCardItem';\n", "import { css, keyframes } from '@emotion/css';\n\nimport { largeDesktopMediaQuery, nonMobileMediaQuery } from '../../constants';\nimport { h5Css, m, p2Css } from '../../motif';\n\nexport const editorialGalleryCardMediaClassName = 'editorial-gallery-card-media';\n\nexport const editorialGalleryCardClassName = 'editorial-gallery-card';\n\nexport const editorialGalleryCardContainerCss = css`\n  align-items: center;\n  background-color: ${m('--bg-color')};\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  position: relative;\n  width: 100%;\n\n  &:hover {\n    & .${editorialGalleryCardMediaClassName} {\n      opacity: 1;\n      width: 100%;\n      z-index: 2;\n\n      ${largeDesktopMediaQuery} {\n        box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.12);\n      }\n    }\n  }\n\n  &::before {\n    background-color: transparent;\n    content: '';\n    inset: 0 calc(${m('--spacing-xxxl')} * -1);\n    position: absolute;\n\n    ${largeDesktopMediaQuery} {\n      width: calc(100% + 2 * ${m('--spacing-xxxl')});\n    }\n  }\n`;\n\nexport const editorialGalleryCardLayoutCss = css`\n  align-items: flex-start;\n  align-self: stretch;\n  color: ${m('--fg-color')};\n  display: flex;\n  justify-content: space-between;\n  overflow: hidden;\n  padding-block: ${m('--spacing-l')};\n  /* Containing block for the stretched link ::after pseudo-element\n     in stretchedLinkCss, allowing it to cover the full card area. */\n  position: relative;\n\n  ${nonMobileMediaQuery} {\n    overflow: visible;\n    padding-block: ${m('--spacing-xxl')};\n  }\n`;\n\n/** Styles for the content section of the card, including the media and text. */\nexport const editorialGalleryCardContentCss = css`\n  align-items: flex-start;\n  display: flex;\n  flex-direction: column;\n  gap: ${m('--spacing-l')};\n  width: 100%;\n\n  ${nonMobileMediaQuery} {\n    flex-direction: row;\n    gap: 72px;\n  }\n`;\n\n/** Styles for the metadata section of the card, including the brand and date. */\nexport const editorialGalleryCardMetadataCss = css`\n  align-items: flex-start;\n  display: flex;\n  flex-direction: row;\n  flex-shrink: 0;\n  justify-content: space-between;\n  max-width: 100%;\n  text-transform: uppercase;\n  width: 100%;\n\n  ${nonMobileMediaQuery} {\n    flex-direction: column;\n    max-width: 100px;\n  }\n\n  & > p {\n    margin: 0;\n  }\n`;\n\nexport const editorialGalleryCardPreviewCss = css`\n  display: flex;\n  flex-direction: row-reverse;\n  gap: ${m('--spacing-m')};\n  width: 100%;\n\n  ${nonMobileMediaQuery} {\n    flex-direction: row;\n    gap: 72px;\n  }\n`;\n\nexport const editorialGalleryCardAnnotationCss = css`\n  font-size: ${m('--annotation-mobile-font-size')};\n  font-weight: ${m('--annotation-mobile-font-weight')};\n  letter-spacing: ${m('--annotation-mobile-font-letter-spacing')};\n  line-height: ${m('--annotation-mobile-font-line-height')};\n  margin: 0;\n  margin-inline-start: auto;\n  overflow-wrap: break-word;\n\n  ${nonMobileMediaQuery} {\n    font-size: ${m('--annotation-desktop-font-size')};\n    font-weight: ${m('--annotation-desktop-font-weight')};\n    letter-spacing: ${m('--annotation-desktop-font-letter-spacing')};\n    line-height: ${m('--annotation-desktop-font-line-height')};\n    margin-inline-start: 0;\n  }\n`;\n\nexport const editorialGalleryCardMediaContainerCss = css`\n  align-items: flex-start;\n  display: flex;\n  flex-direction: column;\n  flex-shrink: 0;\n  justify-content: center;\n  position: relative;\n  width: 96px;\n\n  ${nonMobileMediaQuery} {\n    width: 126px;\n  }\n\n  ${largeDesktopMediaQuery} {\n    width: 169px;\n  }\n`;\n\nexport const editorialGalleryCardMediaCss = css`\n  aspect-ratio: 9/16;\n  background-color: ${m('--bg-color')};\n  border-radius: ${m('--border-radius-l')};\n  opacity: 1;\n  overflow: hidden;\n  pointer-events: none;\n  position: relative;\n  top: 0;\n  user-select: none;\n\n  ${nonMobileMediaQuery} {\n    inset: 0;\n    position: absolute;\n    z-index: 1;\n  }\n\n  ${largeDesktopMediaQuery} {\n    transition: opacity 0.1s linear, width 0.1s ease-out;\n    width: 70%;\n  }\n`;\n\nexport const editorialGalleryCardBodyCss = css`\n  display: flex;\n  flex-direction: column;\n  gap: ${m('--spacing-l')};\n  width: 100%;\n\n  ${nonMobileMediaQuery} {\n    gap: ${m('--spacing-m')};\n  }\n\n  ${largeDesktopMediaQuery} {\n    flex-direction: row;\n    justify-content: space-between;\n  }\n`;\n\nexport const editorialGalleryCardTextGroupCss = css`\n  align-items: flex-start;\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n\n  ${nonMobileMediaQuery} {\n    height: 115px;\n    width: 100%;\n  }\n\n  ${largeDesktopMediaQuery} {\n    height: 151px;\n    max-height: 151px;\n    max-width: 480px;\n  }\n`;\n\nexport const editorialGalleryCardTitleCss = css`\n  ${h5Css}\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: 4;\n  display: -webkit-box;\n  margin: 0px;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  width: 100%;\n\n  ${nonMobileMediaQuery} {\n    -webkit-line-clamp: 2;\n  }\n`;\n\nexport const editorialGalleryCardDescriptionCss = css`\n  ${p2Css}\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: 2;\n  display: none;\n  margin: 0px;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  width: 100%;\n\n  ${nonMobileMediaQuery} {\n    display: -webkit-box;\n  }\n`;\n\nexport const editorialGalleryCardButtonCss = css`\n  display: flex;\n  flex-grow: 0;\n  height: fit-content;\n  max-width: fit-content;\n\n  & svg {\n    flex-shrink: 0;\n    height: 24px;\n    width: 24px;\n  }\n`;\n\nexport const snapBrandBackgroundCss = css`\n  ${largeDesktopMediaQuery} {\n    &:hover {\n      &::before {\n        background-color: ${m('--neutral-v200')};\n      }\n      & .${editorialGalleryCardClassName} {\n        color: ${m('--neutral-v700')};\n      }\n    }\n  }\n`;\n\nexport const snapchatBrandBackgroundCss = css`\n  ${largeDesktopMediaQuery} {\n    &:hover {\n      &::before {\n        background: ${m('--palette-yellow-v100')};\n      }\n      & .${editorialGalleryCardClassName} {\n        color: ${m('--neutral-v700')};\n      }\n    }\n  }\n`;\n\nexport const lensBrandBackgroundCss = css`\n  ${largeDesktopMediaQuery} {\n    &:hover {\n      &::before {\n        background: linear-gradient(\n          90deg,\n          rgba(255, 252, 0, 1) 25%,\n          rgba(217, 173, 224, 1) 75%,\n          rgba(142, 102, 209, 1) 100%\n        );\n      }\n      & .${editorialGalleryCardClassName} {\n        color: ${m('--neutral-v700')};\n      }\n    }\n  }\n`;\n\nexport const spectaclesBrandBackgroundCss = css`\n  ${largeDesktopMediaQuery} {\n    &:hover {\n      &::before {\n        background: ${m('--neutral-v700')};\n      }\n      & .${editorialGalleryCardClassName} {\n        color: ${m('--neutral-v0')};\n      }\n    }\n  }\n`;\n\nexport const noBrandBackgroundCss = css`\n  ${largeDesktopMediaQuery} {\n    &:hover {\n      &::before {\n        background: ${m('--editorial-gallery-card-hover-background-color')};\n      }\n    }\n  }\n`;\n\n/**\n * Stretched link pattern: makes the entire card clickable by expanding the button's ::after\n * pseudo-element to cover the nearest positioned ancestor. The button's default hover/active\n * transform is disabled because CSS transforms create a new containing block, which collapses\n * ::after to the button's bounds and causes a hover feedback loop (flicker).\n */\nexport const stretchedLinkCss = css`\n  &::after {\n    content: '';\n    position: absolute;\n    inset: 0;\n    z-index: 1;\n  }\n\n  &:hover:not([disabled]) {\n    transform: none;\n  }\n\n  &:active:not([disabled]) {\n    transform: none;\n  }\n`;\n\n/** Skeleton styles for the editorial gallery card skeleton. */\nexport const editorialGalleryCardSkeletonCss = css`\n  background-color: ${m('--neutral-v200')};\n`;\n\nexport const skeletonAnimationCss = keyframes`\n  0% {\n    transform: translateX(-100%);\n  }\n  30% {\n    transform: translateX(-100%);\n  }\n  100% {\n    transform: translateX(100%);\n  }\n`;\n\nexport const editorialGalleryCardSkeletonAnimationCss = css`\n  border-radius: ${m('--border-radius-m')};\n  overflow: hidden;\n  position: relative;\n\n  &::before {\n    animation: ${skeletonAnimationCss} 2s infinite;\n    background: linear-gradient(0.25turn, transparent, ${m('--bg-color')}, transparent);\n    content: '';\n    height: 100%;\n    left: 0;\n    opacity: 0.8;\n    pointer-events: none;\n    position: absolute;\n    top: 0;\n    transform: translateX(-100%);\n    width: 100%;\n  }\n\n  @media (prefers-reduced-motion: reduce) {\n    &::before {\n      animation: none;\n    }\n  }\n`;\n\nexport const editorialGalleryCardSkeletonDescriptionCss = css`\n  display: none;\n  flex-direction: column;\n  justify-content: center;\n  gap: 10px;\n  width: 100%;\n  padding-block-end: 4px;\n\n  ${nonMobileMediaQuery} {\n    display: flex;\n    height: 52px;\n  }\n`;\n\nexport const editorialGalleryCardSkeletonTitleLinesCss = css`\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  gap: 6px;\n  height: 96px;\n  width: 100%;\n  padding-block: 2px;\n\n  ${nonMobileMediaQuery} {\n    height: 52px;\n  }\n`;\n\nexport const editorialGalleryCardTextGroupSkeletonCss = css`\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n  width: 100%;\n\n  ${largeDesktopMediaQuery} {\n    height: 151px;\n    max-height: 151px;\n    max-width: 480px;\n  }\n`;\n\nexport const editorialGalleryCardSkeletonMediaCss = css`\n  aspect-ratio: 9 / 16;\n  border-radius: ${m('--border-radius-l')};\n  flex-shrink: 0;\n  position: absolute;\n  width: 96px;\n\n  ${nonMobileMediaQuery} {\n    width: 126px;\n  }\n\n  ${largeDesktopMediaQuery} {\n    opacity: 0;\n    width: 169px;\n  }\n`;\n\nexport const editorialGalleryCardMetadataSkeletonCss = css`\n  align-items: flex-start;\n  display: flex;\n  flex-direction: row;\n  flex-shrink: 0;\n  gap: 8px;\n  justify-content: space-between;\n  max-width: 100%;\n  padding-block: 4px;\n  text-transform: uppercase;\n  width: 100%;\n\n  ${nonMobileMediaQuery} {\n    flex-direction: column;\n    max-width: 100px;\n  }\n`;\n\nexport const editorialGalleryCardBrandSkeletonCss = css`\n  height: 12px;\n  width: 60px;\n`;\n\nexport const editorialGalleryCardBrandDateSkeletonCss = css`\n  height: 12px;\n  width: 75px;\n`;\n\nexport const editorialGalleryCardSkeletonBarCss = css`\n  height: var(--skeleton-bar-height);\n  width: var(--skeleton-bar-width);\n`;\n\nexport const editorialGalleryCardButtonSkeletonCss = css`\n  border-radius: 64px;\n  height: 45px;\n  width: 170px;\n\n  ${nonMobileMediaQuery} {\n    height: 50px;\n  }\n`;\n\nexport const editorialGalleryCardsContainerCss = css`\n  background-color: ${m('--fg-color')};\n  border-block: ${m('--border-width-xs')} solid ${m('--fg-color')};\n  display: flex;\n  flex-direction: column;\n  gap: 1px;\n  margin-top: ${m('--spacing-xxxl')};\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC, ReactNode } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport type { BaseComponentProps, ImageSources } from '../../types';\nimport { dataSetToAttributes, formatDateToDatetime } from '../../utils';\nimport { Button, ButtonType } from '../Button';\nimport { Media } from '../Media';\nimport {\n  editorialGalleryCardAnnotationCss,\n  editorialGalleryCardBodyCss,\n  editorialGalleryCardButtonCss,\n  editorialGalleryCardClassName,\n  editorialGalleryCardContainerCss,\n  editorialGalleryCardContentCss,\n  editorialGalleryCardDescriptionCss,\n  editorialGalleryCardLayoutCss,\n  editorialGalleryCardMediaClassName,\n  editorialGalleryCardMediaContainerCss,\n  editorialGalleryCardMediaCss,\n  editorialGalleryCardMetadataCss,\n  editorialGalleryCardPreviewCss,\n  editorialGalleryCardTextGroupCss,\n  editorialGalleryCardTitleCss,\n  lensBrandBackgroundCss,\n  noBrandBackgroundCss,\n  snapBrandBackgroundCss,\n  snapchatBrandBackgroundCss,\n  spectaclesBrandBackgroundCss,\n  stretchedLinkCss,\n} from './EditorialGalleryCard.styles';\n\n/**\n * Not linking to the @snapchat/mw-common Brand mappings since Lens isn't a brand supported via motif.\n */\nexport enum EditorialGalleryBrand {\n  LENS = 'lens',\n  SNAP = 'snap',\n  SNAPCHAT = 'snapchat',\n  SPECTACLES = 'spectacles',\n}\n\nexport const editorialGalleryBrandNames: Record<EditorialGalleryBrand, string> = {\n  [EditorialGalleryBrand.LENS]: 'Lens Studio',\n  [EditorialGalleryBrand.SNAP]: 'Snap Inc.',\n  [EditorialGalleryBrand.SNAPCHAT]: 'Snapchat',\n  [EditorialGalleryBrand.SPECTACLES]: 'Spectacles',\n};\n\nconst brandBackgroundCss: Record<EditorialGalleryBrand, string> = {\n  [EditorialGalleryBrand.LENS]: lensBrandBackgroundCss,\n  [EditorialGalleryBrand.SNAP]: snapBrandBackgroundCss,\n  [EditorialGalleryBrand.SNAPCHAT]: snapchatBrandBackgroundCss,\n  [EditorialGalleryBrand.SPECTACLES]: spectaclesBrandBackgroundCss,\n};\nexport interface EditorialGalleryCardProps extends BaseComponentProps {\n  date?: string;\n  dateTime?: Date;\n  brand?: EditorialGalleryBrand;\n  title?: ReactNode;\n  description?: ReactNode;\n  link?: string;\n  ctaLabel?: string;\n  imgSrcs?: ImageSources;\n  videoSource?: string;\n  imgAltText?: string;\n  isRtl?: boolean;\n  onClick?: () => void;\n  brandDataset?: DOMStringMap;\n  titleDataset?: DOMStringMap;\n  descriptionDataset?: DOMStringMap;\n  dateDataset?: DOMStringMap;\n  mediaDataset?: DOMStringMap;\n}\n\n/**\n * A SDS-M horizontal card component designed for editorial gallery layouts.\n *\n * @param {string} date - Formatted date string displayed in the card's metadata section.\n * @param {Date} dateTime - Date object used to generate the machine-readable `datetime` attribute\n *   on the `<time>` element. When omitted, the `datetime` attribute is not set.\n * @param {EditorialGalleryCardBrand} brand - Snap brand identity that determines the card's hover background color and\n *   the displayed brand label. When omitted, no brand label is rendered.\n * @param {ReactNode} title - Primary heading content rendered as an `<h5>`. Supports rich text\n *   (ReactNode). Hidden when omitted.\n * @param {ReactNode} description - Supporting body text rendered as a `<p>`. Only visible on\n *   non-mobile viewports. Hidden when omitted.\n * @param {string} link - URL for the card's CTA button. When provided, the entire card becomes\n *   clickable via the stretched-link pattern. When omitted, no CTA is rendered.\n * @param {string} ctaLabel - Label text for the CTA button. Also used as the button's `aria-label`\n *   for accessibility. Defaults to `'Read More'`.\n * @param {ImageSources} imgSrcs - Responsive image sources for the card's media thumbnail. Mutually\n *   exclusive with `videoSource` in practice, though both may be provided (image takes precedence\n *   in the Media component).\n * @param {string} videoSource - URL for a background video displayed in the card's media thumbnail.\n *   Used when `imgSrcs` is not provided.\n * @param {string} imgAltText - Alt text for the media image. Ignored when `videoSource` is used\n *   instead.\n * @param {boolean} isRtl - Whether the layout direction is right-to-left. Flips the CTA button's\n *   arrow icon from `arrow-right` to `arrow-left`. Defaults to `false`.\n * @param {() => void} onClick - Callback invoked when the CTA button is clicked. Typically used for\n *   analytics event logging.\n * @param {DOMStringMap} brandDataset - Contentful inspector `data-*` attributes applied to the\n *   brand label element.\n * @param {DOMStringMap} titleDataset - Contentful inspector `data-*` attributes applied to the\n *   title heading element.\n * @param {DOMStringMap} descriptionDataset - Contentful inspector `data-*` attributes applied to\n *   the description paragraph element.\n * @param {DOMStringMap} dateDataset - Contentful inspector `data-*` attributes applied to the\n *   `<time>` element.\n * @param {DOMStringMap} mediaDataset - Contentful inspector `data-*` attributes applied to the\n *   Media component.\n */\nexport const EditorialGalleryCard: FC<EditorialGalleryCardProps> = ({\n  date,\n  dateTime,\n  title,\n  description,\n  imgSrcs,\n  videoSource,\n  imgAltText,\n  brand,\n  isRtl = false,\n  link,\n  ctaLabel = 'Read More',\n  onClick,\n  dataset,\n  brandDataset,\n  titleDataset,\n  descriptionDataset,\n  dateDataset,\n  mediaDataset,\n  className,\n  ...props\n}) => {\n  useMotifStyles(MotifComponent.EDITORIAL_GALLERY_CARD);\n  const hasMedia = imgSrcs || videoSource;\n\n  return (\n    <div\n      className={cx(\n        editorialGalleryCardContainerCss,\n        brand ? brandBackgroundCss[brand] : noBrandBackgroundCss,\n        className\n      )}\n      data-testid=\"editorial-gallery-card-container\"\n      {...dataSetToAttributes(dataset)}\n      {...props}\n    >\n      <div className={cx(editorialGalleryCardClassName, editorialGalleryCardLayoutCss)}>\n        <div className={editorialGalleryCardContentCss}>\n          <div className={editorialGalleryCardMetadataCss}>\n            {brand ? (\n              <p\n                className={editorialGalleryCardAnnotationCss}\n                {...dataSetToAttributes(brandDataset)}\n              >\n                {editorialGalleryBrandNames[brand]}\n              </p>\n            ) : null}\n            {date ? (\n              <time\n                dateTime={formatDateToDatetime(dateTime)}\n                className={editorialGalleryCardAnnotationCss}\n                {...dataSetToAttributes(dateDataset)}\n              >\n                {date}\n              </time>\n            ) : null}\n          </div>\n          <div className={editorialGalleryCardPreviewCss}>\n            {hasMedia ? (\n              <div className={editorialGalleryCardMediaContainerCss}>\n                <Media\n                  imgSrcs={imgSrcs}\n                  altText={imgAltText}\n                  videoSource={videoSource}\n                  isBackgroundVideo={true}\n                  className={cx(editorialGalleryCardMediaClassName, editorialGalleryCardMediaCss)}\n                  dataset={mediaDataset}\n                />\n              </div>\n            ) : null}\n            <div className={editorialGalleryCardBodyCss}>\n              {title || description ? (\n                <div className={editorialGalleryCardTextGroupCss}>\n                  {title ? (\n                    <h5\n                      className={editorialGalleryCardTitleCss}\n                      {...dataSetToAttributes(titleDataset)}\n                    >\n                      {title}\n                    </h5>\n                  ) : null}\n                  {description ? (\n                    <p\n                      className={editorialGalleryCardDescriptionCss}\n                      {...dataSetToAttributes(descriptionDataset)}\n                    >\n                      {description}\n                    </p>\n                  ) : null}\n                </div>\n              ) : null}\n              {link ? (\n                <Button\n                  type={ButtonType.Secondary}\n                  iconName={isRtl ? 'arrow-left' : 'arrow-right'}\n                  className={cx(editorialGalleryCardButtonCss, stretchedLinkCss)}\n                  link={link}\n                  onClick={onClick}\n                >\n                  {ctaLabel}\n                </Button>\n              ) : null}\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nEditorialGalleryCard.displayName = 'EditorialGalleryCard';\n", "import { cx } from '@emotion/css';\nimport type { CSSProperties, FC } from 'react';\n\nimport type { BaseComponentProps } from '../../types';\nimport {\n  editorialGalleryCardBodyCss,\n  editorialGalleryCardBrandDateSkeletonCss,\n  editorialGalleryCardBrandSkeletonCss,\n  editorialGalleryCardButtonSkeletonCss,\n  editorialGalleryCardClassName,\n  editorialGalleryCardContainerCss,\n  editorialGalleryCardContentCss,\n  editorialGalleryCardLayoutCss,\n  editorialGalleryCardMediaContainerCss,\n  editorialGalleryCardMetadataSkeletonCss,\n  editorialGalleryCardPreviewCss,\n  editorialGalleryCardSkeletonAnimationCss,\n  editorialGalleryCardSkeletonBarCss,\n  editorialGalleryCardSkeletonCss,\n  editorialGalleryCardSkeletonDescriptionCss,\n  editorialGalleryCardSkeletonMediaCss,\n  editorialGalleryCardSkeletonTitleLinesCss,\n  editorialGalleryCardTextGroupSkeletonCss,\n} from './EditorialGalleryCard.styles';\n\nconst titleLines = [\n  { height: 20, width: 85 },\n  { height: 20, width: 60 },\n];\n\nconst descriptionLines = [\n  { height: 12, width: 90 },\n  { height: 12, width: 70 },\n];\n\nexport const SkeletonEditorialGalleryCard: FC<BaseComponentProps> = ({ className }) => {\n  const dashClassName = cx(\n    editorialGalleryCardSkeletonCss,\n    editorialGalleryCardSkeletonAnimationCss\n  );\n\n  return (\n    <div\n      className={cx(editorialGalleryCardContainerCss, className)}\n      data-testid=\"skeleton-editorial-gallery-card-container\"\n      aria-hidden=\"true\"\n    >\n      <div className={cx(editorialGalleryCardClassName, editorialGalleryCardLayoutCss)}>\n        <div className={editorialGalleryCardContentCss}>\n          <div className={editorialGalleryCardMetadataSkeletonCss}>\n            <div className={cx(dashClassName, editorialGalleryCardBrandSkeletonCss)} />\n            <div className={cx(dashClassName, editorialGalleryCardBrandDateSkeletonCss)} />\n          </div>\n          <div className={editorialGalleryCardPreviewCss}>\n            <div className={editorialGalleryCardMediaContainerCss}>\n              <div className={cx(dashClassName, editorialGalleryCardSkeletonMediaCss)} />\n            </div>\n            <div className={editorialGalleryCardBodyCss}>\n              <div className={editorialGalleryCardTextGroupSkeletonCss}>\n                <div className={editorialGalleryCardSkeletonTitleLinesCss}>\n                  {titleLines.map(({ height, width }, index) => (\n                    <div\n                      key={`skeleton-title-${index}`}\n                      className={cx(dashClassName, editorialGalleryCardSkeletonBarCss)}\n                      style={\n                        {\n                          '--skeleton-bar-height': `${height}px`,\n                          '--skeleton-bar-width': `${width}%`,\n                        } as CSSProperties\n                      }\n                    />\n                  ))}\n                </div>\n                <div className={editorialGalleryCardSkeletonDescriptionCss}>\n                  {descriptionLines.map(({ height, width }, index) => (\n                    <div\n                      key={`skeleton-desc-${index}`}\n                      className={cx(dashClassName, editorialGalleryCardSkeletonBarCss)}\n                      style={\n                        {\n                          '--skeleton-bar-height': `${height}px`,\n                          '--skeleton-bar-width': `${width}%`,\n                        } as CSSProperties\n                      }\n                    />\n                  ))}\n                </div>\n              </div>\n              <div className={cx(dashClassName, editorialGalleryCardButtonSkeletonCss)} />\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nSkeletonEditorialGalleryCard.displayName = 'SkeletonEditorialGalleryCard';\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, nonMobileMediaQuery } from '../../../constants';\nimport { h5Css, h6Css, m, p3Css } from '../../../motif';\nimport { mediaQueryForRange } from '../../../utils';\n\nconst arrowIconSize = '24px';\n\nconst lineClamp = (lines: number) => css`\n  -webkit-line-clamp: ${lines};\n  -webkit-box-orient: vertical;\n  display: -webkit-box;\n  overflow: hidden;\n  text-overflow: ellipsis;\n`;\n\nexport const cardCss = css`\n  border: ${m('--carousel-card-border-width')} solid ${m('--carousel-card-border-color')};\n  border-radius: ${m('--carousel-card-border-radius')};\n  box-shadow: ${m('--carousel-card-box-shadow')};\n  cursor: grab;\n  overflow: hidden;\n  position: relative;\n  transition: background-color 0.2s linear, border-color 0.2s linear, box-shadow 0.2s linear;\n  user-select: none;\n\n  &:hover svg {\n    fill: ${m('--action-text-hover-color')};\n  }\n\n  :hover {\n    border-color: ${m('--carousel-card-hover-border-color')};\n    box-shadow: ${m('--carousel-card-hover-box-shadow')};\n  }\n\n  :hover .sdsm-carousel-card-text {\n    background-color: ${m('--carousel-card-hover-bg-color')};\n    border-color: ${m('--carousel-card-hover-border-color')};\n  }\n`;\n\nexport const linkCss = css`\n  color: ${m('--carousel-card-fg-color')};\n  cursor: pointer;\n  display: block;\n  text-decoration: none;\n`;\n\nexport const mediaContainerCss = css`\n  aspect-ratio: 9 / 16;\n  margin: calc(${m('--carousel-card-border-width')} * -1);\n  /**\n   * To help video controls extend full width\n   * https://github.sc-corp.net/Snapchat/marketing-web/pull/2555#discussion_r5071157\n  */\n  position: relative;\n\n  > picture {\n    pointer-events: none;\n  }\n\n  /** To allow object-fit cover for the video element  */\n  > div {\n    height: 100%;\n  }\n\n  & img {\n    aspect-ratio: 16 / 9;\n  }\n`;\n\nexport const image169Css = css`\n  aspect-ratio: 16 / 9;\n\n  & img {\n    aspect-ratio: 16 / 9;\n  }\n`;\n\nexport const image32Css = css`\n  aspect-ratio: 3 / 2;\n\n  & img {\n    aspect-ratio: 16 / 9;\n  }\n`;\n\nexport const image11Css = css`\n  aspect-ratio: 1 / 1;\n\n  & img {\n    aspect-ratio: 16 / 9;\n  }\n`;\n\nexport const imageLoadingCss = css`\n  background-color: rgb(232, 232, 235);\n  overflow: hidden;\n  position: relative;\n\n  &::before {\n    animation: card-skeleton 2s infinite;\n    background: linear-gradient(0.5turn, rgb(232, 232, 235), #fff, rgb(232, 232, 235));\n    content: '';\n    height: 100%;\n    inset: 0;\n    opacity: 0.8;\n    pointer-events: none;\n    position: absolute;\n    transform: translateX(-100%);\n  }\n\n  @keyframes card-skeleton {\n    0% {\n      transform: translateY(-100%);\n    }\n    100% {\n      transform: translateY(100%);\n    }\n  }\n`;\n\nexport const mediaLogoContainerCss = css`\n  align-items: center;\n  display: flex;\n  inset: 0;\n  justify-content: center;\n  position: absolute;\n  transition: opacity 0.2s linear;\n\n  :hover {\n    opacity: 0;\n  }\n\n  ::before {\n    background-color: ${m('--neutral-v700')};\n    content: '';\n    inset: 0;\n    opacity: 0.4;\n    position: absolute;\n  }\n`;\n\nexport const mediaLogoPictureCss = css`\n  max-height: 80%;\n  max-width: 80%;\n  z-index: 1;\n`;\n\nexport const mediaLogoImageCss = css`\n  max-width: 100%;\n  pointer-events: none;\n`;\n\nexport const mediaLogoPictureMobileCss = css`\n  height: 32px;\n  margin-bottom: ${m('--spacing-xs')};\n  padding-block: ${m('--spacing-xxs')};\n`;\n\nexport const mediaLogoImageMobileCss = css`\n  max-height: 100%;\n  pointer-events: none;\n`;\n\nexport const cardPortraitWidthCss = css`\n  width: ${m('--carousel-card-portrait-desktop-width')};\n\n  ${mobileMediaQuery} {\n    width: ${m('--carousel-card-portrait-mobile-width')};\n  }\n`;\n\nexport const cardLandscapeWidthCss = css`\n  width: ${m('--carousel-card-landscape-square-desktop-width')};\n\n  ${mobileMediaQuery} {\n    width: ${m('--carousel-card-landscape-square-mobile-width')};\n  }\n\n  ${mediaQueryForRange({ max: 345 })} {\n    width: ${m('--carousel-card-landscape-square-small-mobile-width')};\n  }\n`;\n\nexport const cardResponsiveWidthCss = css`\n  ${nonMobileMediaQuery} {\n    width: 100%;\n  }\n`;\n\nexport const singleViewLandscapeWidthCss = css`\n  width: 100%;\n  /* TODO: explore making this bigger */\n  max-width: 700px;\n`;\n\nexport const textWrapperCss = css`\n  position: relative;\n  word-break: break-word;\n`;\n\nexport const textWrapperOverlapCss = css`\n  height: ${m('--carousel-card-desktop-text-height')};\n\n  ${mobileMediaQuery} {\n    height: ${m('--carousel-card-mobile-text-height')};\n  }\n`;\n\nexport const textCss = css`\n  align-content: flex-start;\n  background-color: ${m('--carousel-card-bg-color')};\n  border: ${m('--carousel-card-border-width')} solid ${m('--carousel-card-border-color')};\n  border-radius: ${m('--carousel-card-border-radius')};\n  color: ${m('--carousel-card-fg-color')};\n  display: grid;\n  gap: 0 ${m('--spacing-m')};\n  grid-template-columns: 1fr ${arrowIconSize};\n  margin: calc(${m('--carousel-card-border-width')} * -1);\n  min-height: ${`calc(${m('--carousel-card-desktop-text-min-height')} + ${m('--spacing-l')})`};\n  padding: ${m('--carousel-card-desktop-text-padding')};\n\n  ${mobileMediaQuery} {\n    padding: ${m('--carousel-card-mobile-text-padding')};\n  }\n`;\n\nexport const textOverlapCss = css`\n  inset: auto 0 0 0;\n  position: ${m('--carousel-card-text-position')};\n`;\n\nexport const arrowCss = css`\n  fill: ${m('--action-text-default-color')};\n  grid-column: 2;\n  height: ${arrowIconSize};\n  width: ${arrowIconSize};\n\n  [dir='rtl'] & {\n    transform: rotate(180deg);\n  }\n`;\n\nexport const infoElementCss = css`\n  grid-column: span 2;\n  margin: 0;\n  text-align: ${m('--carousel-card-desktop-text-align')};\n\n  ${mobileMediaQuery} {\n    text-align: ${m('--carousel-card-mobile-text-align')};\n  }\n\n  svg + & {\n    grid-column: span 1;\n    grid-row: 1;\n  }\n`;\n\nexport const titleCss = css`\n  ${h5Css}\n  ${lineClamp(2)}\n  letter-spacing: 0.5px;\n  margin-block-end: ${m('--spacing-xxs')};\n`;\n\nexport const titleOnlyClampCss = css`\n  ${lineClamp(4)}\n`;\n\nexport const subtitleCss = css`\n  ${h6Css}\n  ${lineClamp(3)}\n  letter-spacing: 0.25px;\n  margin-block-end: ${m('--spacing-xs')};\n`;\n\nexport const subtitleOnlyClampCss = css`\n  ${lineClamp(5)}\n`;\n\nexport const bodyCss = css`\n  ${p3Css}\n  ${lineClamp(4)}\n\n  a {\n    color: ${m('--carousel-card-fg-color')};\n  }\n`;\n\nexport const bodyOnlyClampCss = css`\n  ${lineClamp(5)}\n`;\n\nexport const imageCss = css`\n  display: block;\n  height: 100%;\n  object-fit: cover;\n  object-position: center;\n  width: 100%;\n`;\n\nexport const videoCss = css`\n  height: 100%;\n  object-fit: cover;\n  object-position: center;\n  width: 100%;\n`;\n\n/** Style to disable border radius when connecting video w/ player controls to text card */\nexport const videoPlayerControlsCss = css`\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0;\n`;\n\n/** Style to disable border radius when connecting text card to video w/ player controls */\nexport const textPlayerControlsCss = css`\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n`;\n\nexport const metadataContainerCss = css`\n  color: ${m('--carousel-card-fg-color')};\n  display: flex;\n  font-size: ${m('--annotation-mobile-font-size')};\n  font-weight: ${m('--annotation-mobile-font-weight')};\n  gap: ${m('--spacing-l')};\n  justify-content: space-between;\n  letter-spacing: ${m('--annotation-mobile-font-letter-spacing')};\n  line-height: ${m('--annotation-mobile-font-line-height')};\n  margin-block-end: ${m('--spacing-xs')};\n  text-transform: uppercase;\n\n  ${nonMobileMediaQuery} {\n    font-size: ${m('--annotation-desktop-font-size')};\n    font-weight: ${m('--annotation-desktop-font-weight')};\n    justify-content: flex-start;\n    letter-spacing: ${m('--annotation-desktop-font-letter-spacing')};\n    margin-block-end: ${m('--spacing-xs')};\n    line-height: ${m('--annotation-desktop-font-line-height')};\n  }\n`;\n\nexport const metadataTextCss = css`\n  ${lineClamp(1)}\n  max-width: 100px;\n`;\n\nexport const relatedContentLineClampCss = css`\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: ${m('--carousel-card-related-content-body-line-clamp')};\n  display: -webkit-box;\n  overflow: hidden;\n  text-overflow: ellipsis;\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC, MouseEventHandler, ReactNode } from 'react';\nimport { useCallback, useContext } from 'react';\n\nimport type { OnNavigateHandler } from '../../../types/activationEvents';\nimport { Icon } from '../../Icon';\nimport { PrimitivesContext } from '../../Primitives';\nimport {\n  arrowCss,\n  contentCss,\n  descriptionCss,\n  linkCss,\n  subTextCss,\n} from './CarouselTextItem.styles';\n\nexport interface CarouselTextItemProps {\n  description?: ReactNode;\n  subText?: ReactNode;\n  url?: string;\n  openNewWTab?: boolean;\n  onClick?: OnNavigateHandler;\n}\n\nexport const CarouselTextItem: FC<CarouselTextItemProps> = ({\n  description,\n  subText,\n  url,\n  openNewWTab,\n  onClick,\n  ...rest\n}) => {\n  const { Anchor } = useContext(PrimitivesContext);\n  const onClickWrapped = useCallback<MouseEventHandler>(\n    event => {\n      url && onClick && onClick(url, event);\n    },\n    [url, onClick]\n  );\n\n  if (url) {\n    return (\n      <Anchor\n        href={url}\n        className={cx(contentCss, linkCss)}\n        {...(openNewWTab ? { target: '_blank', rel: 'noreferrer' } : {})}\n        onClick={onClickWrapped}\n        draggable=\"false\"\n        {...rest}\n      >\n        <Icon className={arrowCss} name=\"arrow-right\" />\n        <div>\n          {description && <div className={descriptionCss}>{description}</div>}\n          {subText && <div className={subTextCss}>{subText}</div>}\n        </div>\n      </Anchor>\n    );\n  }\n\n  return (\n    <div className={contentCss} {...rest}>\n      {description && <div className={descriptionCss}>{description}</div>}\n      {subText && <div className={subTextCss}>{subText}</div>}\n    </div>\n  );\n};\n\nCarouselTextItem.displayName = 'CarouselTextItem';\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, nonMobileMediaQuery } from '../../../constants';\nimport { m, p3Css } from '../../../motif';\n\nconst arrowIconSize = '24px';\nexport const maxTextWidth = 700;\n\nexport const linkCss = css`\n  color: ${m('--carousel-card-fg-color')};\n  cursor: pointer;\n  text-decoration: none;\n\n  display: flex;\n  flex-direction: row-reverse;\n  justify-content: space-between;\n  ${mobileMediaQuery} {\n    padding: ${m('--spacing-l')};\n  }\n`;\n\nexport const contentCss = css`\n  background: ${m('--carousel-card-bg-color')};\n  border-radius: ${m('--carousel-card-border-radius')};\n  box-shadow: 0 0 32px 0 rgba(0, 0, 0, 0.12);\n  color: ${m('--carousel-card-fg-color')};\n  cursor: grab;\n  display: flex;\n  flex-direction: column;\n  max-width: ${maxTextWidth}px;\n  padding: ${m('--spacing-xl')};\n  position: relative;\n  user-select: none;\n  width: 100%;\n\n  ${mobileMediaQuery} {\n    margin-inline: ${m('--spacing-xl')};\n  }\n\n  ${nonMobileMediaQuery} {\n    padding: ${m('--spacing-xl')} ${m('--spacing-xxxl')};\n  }\n`;\n\nexport const descriptionCss = css`\n  margin: 0;\n`;\n\nexport const subTextCss = css`\n  ${p3Css}\n  margin-block: ${m('--spacing-m')} 0;\n`;\n\nexport const arrowCss = css`\n  fill: ${m('--action-text-default-color')};\n  height: ${arrowIconSize};\n  width: ${arrowIconSize};\n  flex-shrink: 0;\n\n  [dir='rtl'] & {\n    transform: rotate(180deg);\n    right: auto;\n  }\n`;\n", "/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n  if (number === number) {\n    if (upper !== undefined) {\n      number = number <= upper ? number : upper;\n    }\n    if (lower !== undefined) {\n      number = number >= lower ? number : lower;\n    }\n  }\n  return number;\n}\n\nexport default baseClamp;\n", "import baseClamp from './_baseClamp.js';\nimport toNumber from './toNumber.js';\n\n/**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\nfunction clamp(number, lower, upper) {\n  if (upper === undefined) {\n    upper = lower;\n    lower = undefined;\n  }\n  if (upper !== undefined) {\n    upper = toNumber(upper);\n    upper = upper === upper ? upper : 0;\n  }\n  if (lower !== undefined) {\n    lower = toNumber(lower);\n    lower = lower === lower ? lower : 0;\n  }\n  return baseClamp(toNumber(number), lower, upper);\n}\n\nexport default clamp;\n", "/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\nfunction baseInRange(number, start, end) {\n  return number >= nativeMin(start, end) && number < nativeMax(start, end);\n}\n\nexport default baseInRange;\n", "import baseInRange from './_baseInRange.js';\nimport toFinite from './toFinite.js';\nimport toNumber from './toNumber.js';\n\n/**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\nfunction inRange(number, start, end) {\n  start = toFinite(start);\n  if (end === undefined) {\n    end = start;\n    start = 0;\n  } else {\n    end = toFinite(end);\n  }\n  number = toNumber(number);\n  return baseInRange(number, start, end);\n}\n\nexport default inRange;\n", "import { cx } from '@emotion/css';\nimport clamp from 'lodash-es/clamp';\nimport inRange from 'lodash-es/inRange';\nimport type React from 'react';\nimport type { ReactElement, TransitionEvent } from 'react';\nimport { Children, cloneElement, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { mobileMaxWidth } from '../../constants/layout';\nimport { useIsMobile } from '../../hooks';\nimport { useOnScreen } from '../../hooks/useOnScreen';\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { isSSR } from '../../utils/environment';\nimport { useWindowFocused } from '../../utils/useWindowFocused';\nimport { useWindowSize } from '../../utils/useWindowSize';\nimport {\n  carouselAnimationDuration,\n  carouselCenteredCss,\n  carouselContainerCss,\n  carouselContentCss,\n  carouselContentWrapperCss,\n  carouselContentWrapperOverflowCss,\n  carouselContentWrapperOverflowResponsiveWidthCss,\n  carouselFillSlidesCss,\n  carouselGapCss,\n  carouselSingleViewDefaultTransformCss,\n  carouselSlideCss,\n  carouselSlideResponsiveWidthCss,\n  withDotsCss,\n} from './CarouselV3.styles';\nimport { Dots } from './Dots';\nimport { getValueFromDirection, shortestPath, useDrag } from './utils';\n\n/**\n * Classnames added to outermost HTML element based on component behavior.\n *\n * Used to allow consumers to customize styles for various use cases.\n */\nexport enum CarouselFeatureClass {\n  /** Classname added to outermost HTML element when Carousel contents overflow the container. */\n  HasOverflow = 'sdsm-carousel-overflow',\n  /**\n   * Classname added to outermost HTML element when Carousel is rendering as a multiple view\n   * carousel.\n   */\n  MultiView = 'sdsm-carousel-multi-view',\n  /** Classname added to outermost HTML element when Carousel is rendering as a single view carousel. */\n  SingleView = 'sdsm-carousel-single-view',\n}\n\n/**\n * Props for a Carousel component.\n *\n * @property {React.ReactNode} children - The content to be displayed within the carousel.\n * @property {boolean} [autoPlay] - (Optional) Set to `true` to enable automatic playback of the\n *   carousel.\n * @property {number} [autoPlaySpeed] - (Optional) The speed at which the carousel should auto-play\n *   (in milliseconds).\n * @property {boolean} [isRtl] - (Optional) Specifies whether the carousel should display\n *   right-to-left (RTL) direction.\n * @property {boolean} [isSingleView] - (Optional) Indicates if the carousel should behave as a\n *   single view carousel.\n * @property {boolean} [enableOverflowDecoration] - (Optional) If true, applies additional CSS\n *   styling to the carousel item that is only partially displayed.\n * @property {boolean} [isResponsiveWidth] - (Optional) If true, sets carousel item widths to be a\n *   percentage of the container width rather than a fixed width.\n * @interface CarouselV3Props\n */\nexport interface CarouselV3Props {\n  children: React.ReactNode;\n  autoPlay?: boolean;\n  autoPlaySpeed?: number;\n  isRtl?: boolean;\n  isSingleView?: boolean;\n  enableOverflowDecoration?: boolean;\n  isResponsiveWidth?: boolean;\n  /** Called when the slide changes due to user interaction (dot click, drag/swipe, keyboard). */\n  onSlideChange?: (index: number, trigger: 'dot' | 'drag' | 'keyboard') => void;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ChildNodeType = ReactElement<any, any>;\n\n/**\n * Carousel V3 component.\n *\n * A carousel that renders either CarouselCardItem or CarouselTextItem.\n */\nexport const CarouselV3 = ({\n  children,\n  isSingleView = false,\n  isRtl = false,\n  autoPlay = true,\n  autoPlaySpeed = 3000,\n  enableOverflowDecoration = false,\n  isResponsiveWidth = false,\n  onSlideChange,\n}: CarouselV3Props): JSX.Element => {\n  useMotifStyles(MotifComponent.CAROUSEL);\n  const carouselContentWrapperRef = useRef<HTMLDivElement>(null);\n  const [carouselContent, setCarouselContent] = useState<HTMLDivElement | null>(null);\n  const carouselContentRefCallback = useCallback((node: HTMLDivElement) => {\n    setCarouselContent(node);\n  }, []);\n\n  const fadeOutTimeouts = useRef<ReturnType<typeof setTimeout>[]>([]);\n  const autoplayInterval = useRef<ReturnType<typeof setInterval>>();\n  const enableTransition = useRef(false);\n  const [isPaused, setIsPaused] = useState(false);\n  const isOnScreen = useOnScreen(carouselContentWrapperRef);\n  const [currentIndex, setCurrentIndex] = useState<number>(0);\n\n  const { isFocused } = useWindowFocused(isOnScreen);\n\n  const [tileSize, setTileSize] = useState<{ width: number; gap: number }>({ width: 0, gap: 0 });\n\n  const childElements = Children.toArray(children) as ChildNodeType[];\n  const cardsLength = childElements.length;\n\n  const { width: windowWidth } = useWindowSize();\n\n  const isMobile = useIsMobile();\n\n  // Only use responsive width style if the carousel is in multi view mode and not on mobile\n  const isResponsiveWidthMultiView = isResponsiveWidth && !isSingleView && !isMobile;\n\n  // This useMemo is used to calculate how many cards are visible on screen\n  const visibleCount = useMemo(() => {\n    const carouselContentWidth = carouselContent?.clientWidth;\n\n    if (!carouselContentWidth) {\n      return 0;\n    }\n    const cardWidth = tileSize.width + tileSize.gap;\n\n    if (!cardWidth) {\n      return 0;\n    }\n\n    if (isSingleView) {\n      return 1;\n    }\n\n    const numberOfCards = Math.ceil(carouselContentWidth / cardWidth);\n\n    return numberOfCards;\n    // Directly using \"carouselContent.clientWidth\" as a dependency will cause a performance hit\n    // since referencing the \"clientWidth\" property can cause layout/reflow on the browser (see\n    // https://gist.github.com/paulirish/5d52fb081b3570c81e3a). Instead, we can use the throttled\n    // \"windowWidth\" as a trigger to recalculate this memo on window resize.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [windowWidth, carouselContent, isSingleView, tileSize.gap, tileSize.width]);\n\n  // This useMemo is used determine wether we need to render a carousel for the amount of cards\n  const isCarousel = useMemo(() => {\n    // If in responsive width view, the cards fill the width of the container exactly,\n    // so only render the carousel if there are MORE cards than are visible\n    if (isResponsiveWidthMultiView) {\n      return cardsLength > visibleCount;\n    }\n\n    // Otherwise, the last card can be partly off screen, so render the carousel\n    // if there are at least as many cards as are visible\n    return cardsLength >= visibleCount;\n  }, [cardsLength, visibleCount, isResponsiveWidthMultiView]);\n\n  // TODO: this seems unnecessary and can probably be removed and just use the visibleCount value instead\n  // you can never see more than the visibleCount anyways so why would we need to duplicate more than that?\n  // This useMemo is used to predict how many cards are visible on screen\n  const duplicateCount = useMemo(() => {\n    if (!isCarousel) {\n      return 0;\n    }\n\n    // The user should never need to see more than the number of cards in the carousel\n    // as duplicates, because if that was the case, the carousel wouldn't need to exist as a carousel\n    // as seen by the `isCarousel` check above. This simiplifies the duplicate cloning logic for preceding and following\n    const maxDuplicates = Math.min(visibleCount * 2 - 1, cardsLength);\n\n    return isSingleView ? 1 : Math.max(0, maxDuplicates);\n  }, [isCarousel, isSingleView, visibleCount, cardsLength]);\n\n  // This useEffect is used to measure the tiles and gap.\n  useEffect(() => {\n    if (!carouselContent) {\n      return;\n    }\n    const tile = carouselContent?.firstChild as HTMLDivElement;\n\n    const width = tile?.clientWidth;\n    const wrapperStyles = window.getComputedStyle(carouselContent);\n    const gapCss = wrapperStyles.getPropertyValue('gap');\n    const gapInt = Number.parseInt(gapCss);\n    const gap = Number.isNaN(gapInt) ? 0 : gapInt;\n    setTileSize({ width, gap });\n  }, [windowWidth, carouselContent, children, isSingleView, cardsLength]);\n\n  // This useEffect is used to handle animations when in single View mode\n  useEffect(() => {\n    if (!isSingleView || !carouselContent?.children?.length) {\n      return;\n    }\n\n    fadeOutTimeouts.current?.forEach(timeoutID => clearTimeout(timeoutID));\n\n    fadeOutTimeouts.current = Array.from(carouselContent.children).map((slide, index) => {\n      // setTimeout here to delay the fadeIn animation, otherwise the animation happens before the card is visible\n      const isCurrent = index === duplicateCount + currentIndex;\n\n      return setTimeout(\n        () => {\n          slide.classList.toggle('fadeOut', !isCurrent);\n        },\n        isCurrent ? carouselAnimationDuration / 2 : 0\n      );\n    });\n  }, [carouselContent?.children, currentIndex, isSingleView, duplicateCount]);\n\n  // Offset is the translateX for the carousel.\n  const currentOffset = useMemo(() => {\n    // If in responsive width view, we don't need to offset the cards by half a gap\n    // so that the first card aligns to the left of the container\n    const gapOffset = isResponsiveWidthMultiView ? 0 : 0.5;\n\n    return (\n      (currentIndex + duplicateCount) * tileSize.width +\n      (currentIndex + duplicateCount - gapOffset) * tileSize.gap\n    );\n  }, [currentIndex, tileSize, duplicateCount, isResponsiveWidthMultiView]);\n\n  // Calculate if any card is being cut off by the container and apply a gradient mask to soften the edge\n  const showOverflowDecoration = useMemo(() => {\n    if (!isCarousel) {\n      return false;\n    }\n\n    const carouselContentWidth = carouselContent?.clientWidth ?? 0;\n    const cardWidth = tileSize.width + tileSize.gap;\n\n    /* We want to add one gap width to the container width because we will divide by the card width which\n       includes one gap width. However, the content container already has half a gap width of space at the\n       start, so we will add just another half a gap width here to make up the difference.\n    */\n    const carouselContentWidthWithExtraGap = carouselContentWidth + tileSize.gap / 2;\n\n    // Calculate the space remaining after each full card (plus gap) is fully visible\n    const remainingSpace = carouselContentWidthWithExtraGap % cardWidth;\n\n    /* Only show the mask if the remaining space after the fully visible cards is greater than the gap size.\n       If the remaining space is:\n       - <= gap size --> only gap is being cut off by the container so no mask necessary\n       - > gap size --> some of the next card is being cut off by the container so activate the mask\n    */\n    return remainingSpace > tileSize.gap;\n  }, [carouselContent?.clientWidth, tileSize.width, tileSize.gap, isCarousel]);\n\n  const shiftItems = useCallback(\n    (numberOfItemsToShift: number) => {\n      enableTransition.current = true;\n\n      setCurrentIndex(\n        currentIndex => currentIndex + (isRtl ? -numberOfItemsToShift : numberOfItemsToShift)\n      );\n    },\n    [isRtl, setCurrentIndex]\n  );\n\n  // This useEffect is used to setup up the autoplay behavior.\n  useEffect(() => {\n    if (\n      isCarousel &&\n      !autoplayInterval.current &&\n      autoPlay &&\n      !isPaused &&\n      isOnScreen &&\n      isFocused\n    ) {\n      // TODO: Consider shifting immediately to make the acknowledgement of interaction.\n      // I.e. add: setTimeout(() => shiftItems(1), 1e2);\n      // This does make it shift whenever the user scrolls to the carousel which is a\n      // strong movement and attention grabber.\n\n      autoplayInterval.current = setInterval(() => {\n        shiftItems(1);\n      }, autoPlaySpeed);\n    }\n\n    return () => {\n      clearInterval(autoplayInterval.current);\n      autoplayInterval.current = undefined;\n    };\n  }, [\n    autoplayInterval,\n    isPaused,\n    isOnScreen,\n    isFocused,\n    shiftItems,\n    autoPlay,\n    autoPlaySpeed,\n    isCarousel,\n  ]);\n\n  const handleKeyUp = useCallback(\n    (event: { keyCode: number }) => {\n      if (!isOnScreen) {\n        return;\n      }\n\n      // 37 - Keyboard Left Key Code\n      if (event.keyCode === 37) {\n        shiftItems(-1);\n        onSlideChange?.((currentIndex - 1 + cardsLength) % cardsLength, 'keyboard');\n        return;\n      }\n\n      // 39 - Keyboard Right Key Code\n      if (event.keyCode === 39) {\n        shiftItems(1);\n        onSlideChange?.((currentIndex + 1) % cardsLength, 'keyboard');\n      }\n    },\n    [isOnScreen, shiftItems, onSlideChange, currentIndex, cardsLength]\n  );\n\n  // This function handles user clicks on navigation dots and calculates the shortest path to navigate from\n  // the current index to the target index, considering whether to move left or right,\n  // and then performs the navigation action.\n  const onDotClick = useCallback(\n    (targetIndex: number) => {\n      if (targetIndex === currentIndex || (windowWidth && windowWidth <= mobileMaxWidth)) {\n        return;\n      }\n\n      enableTransition.current = true;\n\n      const finalDelta = shortestPath(currentIndex, targetIndex, cardsLength);\n\n      // Ensure that the navigation wraps around the list if needed.\n      const newIndex = currentIndex + finalDelta;\n\n      setCurrentIndex(newIndex);\n      onSlideChange?.(targetIndex, 'dot');\n    },\n    [cardsLength, currentIndex, windowWidth, onSlideChange]\n  );\n\n  const dragHandlers = useDrag({\n    dragStart: () => {},\n    dragMove: (delta, event) => {\n      event?.preventDefault();\n      carouselContentWrapperRef.current?.classList.add('dragging');\n      // The following logic differs from LTR from RTL\n      const xPosition = currentOffset + getValueFromDirection(delta, !isRtl);\n\n      carouselContent!.style.transform = `translateX(${getValueFromDirection(xPosition, isRtl)}px)`;\n    },\n    dragEnd: delta => {\n      carouselContentWrapperRef.current?.classList.remove('dragging');\n\n      const threshold = isSingleView ? tileSize.width / 2 : tileSize.width;\n\n      // We will snap to the next/previous item if we swipe/drag at least 50% of the item width\n      const numberOfItemsToShift = Math.round(delta / threshold);\n\n      enableTransition.current = true;\n\n      // I'm not sure why, but delta and threshold can be 0, resulting in 'numberOfItemsToShift' being NaN.\n      if (numberOfItemsToShift === 0 || Number.isNaN(numberOfItemsToShift)) {\n        carouselContent!.style.transform = `translateX(${getValueFromDirection(\n          currentOffset,\n          isRtl\n        )}px)`;\n\n        return;\n      }\n\n      // If 'numberOfItemsToShift' arrives here as NaN, we will set the currentIndex (in shiftItems) to NaN.\n      // This will lead to nasty bugs.\n      const clampedSteps = clamp(numberOfItemsToShift, -duplicateCount, duplicateCount);\n      shiftItems(clampedSteps);\n      onSlideChange?.((currentIndex + clampedSteps + cardsLength) % cardsLength, 'drag');\n    },\n  });\n\n  // TODO: Consider only pausing for a period of time, i.e. 5 seconds, and then resuming again\n  // unless the user moves the mouse. This would make it so that the carousel doesn't stop\n  // working when a user parks their mouse or gesture pointer on the carousel.\n  const handleMouseEnter = useCallback(() => setIsPaused(true), [setIsPaused]);\n\n  const handleMouseLeave = useCallback(() => {\n    dragHandlers.handleDragEnd();\n    setIsPaused(false);\n  }, [dragHandlers, setIsPaused]);\n\n  const handleMouseUp = useCallback(() => {\n    dragHandlers.handleDragEnd();\n  }, [dragHandlers]);\n\n  // Checks if we need to change the slides position to simulate infinite loops\n  const resetPosition = useCallback(() => {\n    // calculate the index within the visible range to simulate infinite scroll\n    const newIndex = (currentIndex + cardsLength) % cardsLength;\n\n    const needsReset = newIndex !== currentIndex;\n\n    if (needsReset) {\n      enableTransition.current = false;\n      setCurrentIndex(newIndex);\n    }\n  }, [currentIndex, cardsLength]);\n\n  const handleTransitionEnd = (e: TransitionEvent<HTMLDivElement>) => {\n    if (carouselContent !== e.target) {\n      return;\n    }\n    dragHandlers.resetDrag();\n    resetPosition();\n  };\n\n  const carouselContentStyle =\n    isCarousel && !isSSR()\n      ? {\n          transform: `translateX(${getValueFromDirection(currentOffset, isRtl)}px)`,\n          transition: !enableTransition.current ? 'none' : undefined,\n        }\n      : undefined;\n\n  const renderDots = isCarousel && !!cardsLength;\n\n  // extra items to show on the left to simulate infinite scroll, should show the last cards in the carousel\n  const preceding = duplicateCount > 0 ? childElements.slice(-duplicateCount) : [];\n  // extra items to show on the right to simulate infinite scroll, should show the first cards in the carousel\n  const following = childElements.slice(0, duplicateCount);\n\n  const cardIsVisible = (index: number) => {\n    return inRange(index, currentIndex, currentIndex + visibleCount);\n  };\n\n  const cardShouldLoad = (index: number) => {\n    return inRange(index, currentIndex - 2, currentIndex + visibleCount + 2);\n  };\n\n  return (\n    <div\n      data-testid=\"sdsm-carousel\"\n      className={cx(carouselContainerCss, MotifComponent.CAROUSEL, {\n        /* Behavior classnames - used to allow consumers to customize styles for various use cases. */\n        [CarouselFeatureClass.SingleView]: isSingleView,\n        [CarouselFeatureClass.MultiView]: !isSingleView,\n        [CarouselFeatureClass.HasOverflow]: showOverflowDecoration && !isSingleView,\n        /* TODO: add with emotion class for motif integrated overflow style(s) once they have been added. */\n        [withDotsCss]: renderDots,\n      })}\n      onMouseEnter={isCarousel ? handleMouseEnter : undefined}\n      onMouseLeave={isCarousel ? handleMouseLeave : undefined}\n      onMouseUp={isCarousel ? handleMouseUp : undefined}\n      onKeyUp={isCarousel ? handleKeyUp : undefined}\n      tabIndex={-1}\n    >\n      <div\n        className={cx(carouselContentWrapperCss, {\n          [carouselContentWrapperOverflowCss]:\n            enableOverflowDecoration && showOverflowDecoration && !isSingleView,\n          [carouselContentWrapperOverflowResponsiveWidthCss]: isResponsiveWidthMultiView,\n        })}\n        onTouchStart={isCarousel ? dragHandlers.handleDragStart : undefined}\n        onMouseDown={isCarousel ? dragHandlers.handleDragStart : undefined}\n        onTouchMove={isCarousel ? dragHandlers.handleDragMove : undefined}\n        onMouseMove={isCarousel ? dragHandlers.handleDragMove : undefined}\n        onTouchEnd={isCarousel ? dragHandlers.handleDragEnd : undefined}\n        onMouseUp={isCarousel ? dragHandlers.handleDragEnd : undefined}\n        ref={carouselContentWrapperRef}\n        tabIndex={-1}\n      >\n        <div\n          className={cx(carouselContentCss, {\n            [carouselCenteredCss]: !isCarousel,\n            [carouselSingleViewDefaultTransformCss]: isSingleView,\n            [carouselGapCss]: !isSingleView,\n          })}\n          style={carouselContentStyle}\n          onTransitionEnd={handleTransitionEnd}\n          ref={carouselContentRefCallback}\n          tabIndex={-1}\n        >\n          {preceding.map((child, idx) => (\n            <div\n              key={`initial-duplicated-${child.key || idx}`}\n              className={cx(carouselSlideCss, {\n                [carouselFillSlidesCss]: isSingleView,\n                [carouselSlideResponsiveWidthCss]: isResponsiveWidthMultiView,\n                fadeOut: isSingleView,\n                animate: enableTransition.current,\n              })}\n              aria-hidden={true}\n            >\n              {cloneElement(child, {\n                shouldLoad: cardShouldLoad(idx - preceding.length),\n                isVisible: cardIsVisible(idx - preceding.length),\n                isSingleView,\n              })}\n            </div>\n          ))}\n\n          {childElements.map((child, idx) => (\n            <div\n              key={`carousel-item-${child.key || idx}`}\n              className={cx(carouselSlideCss, {\n                [carouselFillSlidesCss]: isSingleView,\n                [carouselSlideResponsiveWidthCss]: isResponsiveWidthMultiView,\n                fadeOut: isSingleView && idx !== currentIndex,\n                animate: enableTransition.current,\n              })}\n            >\n              {cloneElement(child, {\n                shouldLoad: cardShouldLoad(idx),\n                isVisible: cardIsVisible(idx),\n                isSingleView,\n              })}\n            </div>\n          ))}\n\n          {following.map((child, idx) => (\n            <div\n              key={`final-duplicated-${child.key || idx}`}\n              className={cx(carouselSlideCss, {\n                [carouselFillSlidesCss]: isSingleView,\n                [carouselSlideResponsiveWidthCss]: isResponsiveWidthMultiView,\n                fadeOut: isSingleView,\n                animate: enableTransition.current,\n              })}\n              aria-hidden={true}\n            >\n              {cloneElement(child, {\n                shouldLoad: cardShouldLoad(idx + childElements.length),\n                isVisible: cardIsVisible(idx + childElements.length),\n                isSingleView,\n              })}\n            </div>\n          ))}\n        </div>\n      </div>\n\n      {renderDots && (\n        <Dots currentIndex={currentIndex} length={cardsLength} onDotClick={onDotClick} />\n      )}\n    </div>\n  );\n};\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, nonMobileMediaQuery } from '../../constants';\nimport { m } from '../../motif';\n\nexport const carouselAnimationDuration = 300;\n\nexport const carouselContainerCss = css`\n  align-items: center;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  padding-block-end: 20px;\n  width: 100%;\n\n  ${mobileMediaQuery} {\n    overflow-x: hidden;\n  }\n`;\n\nexport const carouselContentWrapperCss = css`\n  max-height: 100%;\n  overflow: hidden;\n  width: 100%;\n\n  &.dragging {\n    a {\n      pointer-events: none;\n    }\n  }\n`;\n\nexport const carouselContentWrapperOverflowCss = css`\n  mask-image: linear-gradient(to left, transparent, black 10%);\n  html[dir='rtl'] & {\n    mask-image: linear-gradient(to right, transparent, black 10%);\n  }\n`;\n\n// If in responsive width mode, don't show the decoration on desktop as the cards will always fit the screen\nexport const carouselContentWrapperOverflowResponsiveWidthCss = css`\n  ${nonMobileMediaQuery} {\n    mask-image: none;\n    html[dir='rtl'] & {\n      mask-image: none;\n    }\n  }\n`;\n\nexport const carouselCenteredCss = css`\n  justify-content: center;\n`;\n\nexport const carouselGapCss = css`\n  gap: ${m('--carousel-card-mobile-grid-gap')};\n\n  ${nonMobileMediaQuery} {\n    gap: ${m('--carousel-card-desktop-grid-gap')};\n  }\n`;\n\nexport const carouselSingleViewDefaultTransformCss = css`\n  transform: translateX(-100%);\n\n  html[dir='rtl'] & {\n    transform: translateX(100%);\n  }\n`;\n\nexport const carouselContentCss = css`\n  display: flex;\n  margin-block: ${m('--spacing-xl')};\n  transition: all ${carouselAnimationDuration}ms linear;\n\n  html[dir='rtl'] &,\n  body[dir='rtl'] & {\n    direction: rtl;\n  }\n`;\n\nexport const carouselSlideCss = css`\n  opacity: 1;\n\n  &.fadeOut {\n    opacity: 0;\n    pointer-events: none;\n  }\n\n  &.animate {\n    transition: opacity ${carouselAnimationDuration / 2}ms ease;\n  }\n`;\n\nexport const carouselSlideResponsiveWidthCss = css`\n  ${nonMobileMediaQuery} {\n    max-width: calc(33.33% - ((2 * ${m('--carousel-card-desktop-grid-gap')}) / 3));\n    min-width: calc(33.33% - ((2 * ${m('--carousel-card-desktop-grid-gap')}) / 3));\n    width: calc(33.33% - ((2 * ${m('--carousel-card-desktop-grid-gap')}) / 3));\n  }\n`;\n\nexport const carouselFillSlidesCss = css`\n  align-items: center;\n  display: flex;\n  flex-grow: 0;\n  flex-shrink: 0;\n  justify-content: center;\n  width: 100%;\n`;\n\nexport const dotWrapperCss = css`\n  align-items: center;\n  background-color: transparent;\n  border: 0;\n  box-sizing: border-box;\n  display: flex;\n  justify-content: center;\n  height: 20px;\n  width: 20px;\n`;\n\nexport const dotCss = css`\n  background-color: ${m('--carousel-inactive-dot-color')};\n  transition: background-color 200ms;\n  border-radius: 100px;\n  height: 8px;\n  width: 8px;\n\n  ${nonMobileMediaQuery} {\n    cursor: pointer;\n  }\n`;\n\nexport const dotActiveCss = css`\n  background-color: ${m('--carousel-active-dot-color')};\n`;\n\nexport const dotsInnerContainerCss = css`\n  -ms-overflow-style: none;\n  align-items: center;\n  display: flex;\n  flex-direction: row;\n  height: 20px;\n  margin-block-end: ${m('--spacing-xl')};\n  padding-inline-start: 0;\n  list-style: none;\n  margin: 0 auto;\n  scrollbar-width: none;\n\n  html[dir='rtl'] & {\n    direction: rtl;\n  }\n\n  > div:first-child {\n    margin-inline-start: 0;\n  }\n`;\n\nexport const withDotsCss = css`\n  padding-block-end: 0;\n`;\n\nexport const dotsContainerCss = css`\n  display: flex;\n  justify-content: center;\n`;\n", "import { cx } from '@emotion/css';\n\nimport {\n  dotActiveCss,\n  dotCss,\n  dotsContainerCss,\n  dotsInnerContainerCss,\n  dotWrapperCss,\n} from './CarouselV3.styles';\n\n/**\n * Props for a component that represents a set of dots used for carousel navigation.\n *\n * @property {number} currentIndex - The index of the currently active slide.\n * @property {number} length - The total number of slides.\n * @property {(index: number) => void} onDotClick - A callback function to handle dot click events.\n *   It receives the index of the clicked dot.\n * @property {boolean} [isInfinite] - (Optional) Specifies whether the carousel is infinite.\n * @property {() => void} [onAnimationComplete] - (Optional) A callback function invoked when the\n *   slide transition animation is complete.\n * @interface DotsProps\n */\nexport interface DotsProps {\n  currentIndex: number;\n  length: number;\n  onDotClick: (index: number) => void;\n  isInfinite?: boolean;\n  onAnimationComplete?: () => void;\n}\n\nexport const Dots = ({ currentIndex, length, onDotClick }: DotsProps): JSX.Element => {\n  return (\n    <nav className={dotsContainerCss}>\n      <ul className={dotsInnerContainerCss}>\n        {Array(length)\n          .fill(undefined)\n          .map((_, index) => (\n            <li key={index} data-index={index}>\n              <button onClick={() => onDotClick(index)} className={dotWrapperCss}>\n                <span\n                  className={cx(dotCss, {\n                    [dotActiveCss]: currentIndex === index,\n                  })}\n                />\n              </button>\n            </li>\n          ))}\n      </ul>\n    </nav>\n  );\n};\n\nDots.displayName = 'Dots';\n", "import type { FC, ReactElement } from 'react';\nimport { useRef } from 'react';\n\nimport { MediaMode } from '../../constants';\nimport { useMediaMode } from '../../hooks';\nimport type { CarouselV3Props } from './CarouselV3';\nimport { CarouselV3 } from './CarouselV3';\n\n/**\n * Type guard function to check if the given element is a CarouselV3.\n *\n * @param elem - The element to be checked.\n * @returns True if the element is a React element with CarouselV3Props, false otherwise.\n */\nexport const isCarouselV3Element = (elem: unknown): elem is ReactElement<CarouselV3Props> => {\n  const asCarouselV3 = elem as ReactElement<CarouselV3Props>;\n\n  if (asCarouselV3.type === CarouselV3) {\n    return true;\n  }\n  // evil displayName check\n  const typeAsFC = (elem as ReactElement).type as FC;\n  return typeAsFC.displayName === 'CarouselV3';\n};\n\n/**\n * Retrieves the value from a given direction based on the RTL (Right-to-Left) setting.\n *\n * @param originalValue - The original numerical value.\n * @param isRTL - A boolean determining if the text direction is Right-to-Left (RTL).\n * @returns The value adjusted according to the direction; the original value if RTL, otherwise the\n *   negation of the original value.\n */\nexport const getValueFromDirection = (originalValue: number, isRTL: boolean): number => {\n  if (isRTL) {\n    return originalValue;\n  }\n\n  return originalValue * -1;\n};\n\n/**\n * Computes the modulo operation for a given number x with respect to another number m. Correctly\n * handles negative values\n *\n * @param x - The dividend number.\n * @param m - The divisor number.\n * @returns The result of the modulo operation.\n */\nexport const modulo = (x: number, m: number): number => {\n  return ((x % m) + m) % m;\n};\n\n/**\n * Calculates the shortest path between two indices in a circular list.\n *\n * @param currentIndex - The current index in the circular list.\n * @param targetIndex - The target index in the circular list.\n * @param count - The total count of items in the circular list.\n * @returns The shortest path as the number of steps to reach the target index from the current\n *   index.\n */\nexport const shortestPath = (currentIndex: number, targetIndex: number, count: number): number => {\n  // Calculating the direct distance\n  const direct = Math.abs(targetIndex - currentIndex);\n  // Calculating the wrapping distance\n  const wrapping = count - direct;\n  // Determining the direction of movement based on which index is first\n  const direction = currentIndex < targetIndex ? 1 : -1;\n  // Determining the smaller scalar distance\n  const diff = Math.abs(direct) > Math.abs(wrapping) ? -wrapping : direct;\n  // Determining the final distance by multiplying the scalar distance by the direction\n  return diff * direction;\n};\n\n/**\n * Custom hook for handling drag interactions.\n *\n * @param dragStart - Function to be called when the drag starts.\n * @param dragMove - Function to be called when the drag is in progress.\n * @param dragEnd - Function to be called when the drag ends.\n */\nexport const useDrag = ({\n  dragStart,\n  dragMove,\n  dragEnd,\n}: {\n  dragStart?: (event?: React.TouchEvent | React.MouseEvent) => void;\n  dragMove?: (delta: number, event?: React.TouchEvent | React.MouseEvent) => void;\n  dragEnd?: (delta: number, event?: React.TouchEvent | React.MouseEvent) => void;\n}): {\n  resetDrag: () => void;\n  handleDragStart: (event: React.TouchEvent | React.MouseEvent) => void;\n  handleDragMove: (event: React.TouchEvent | React.MouseEvent) => void;\n  handleDragEnd: (event?: React.TouchEvent | React.MouseEvent) => void;\n} => {\n  const mode = useMediaMode();\n  const isMobile = mode === MediaMode.Mobile;\n\n  const initialTouchPosition = useRef<number | null>(null);\n  const touchPosition = useRef<number | null>(null);\n\n  const handleDragStart = (event: React.TouchEvent | React.MouseEvent) => {\n    const clientX =\n      (event as React.TouchEvent)?.touches?.[0]?.clientX ||\n      (event as React.MouseEvent)?.clientX ||\n      0;\n    initialTouchPosition.current = clientX;\n    touchPosition.current = clientX;\n    dragStart?.(event);\n  };\n\n  const handleDragMove = (event: React.TouchEvent | React.MouseEvent) => {\n    event.preventDefault();\n\n    if (!initialTouchPosition.current) {\n      return;\n    }\n\n    const clientX =\n      (event as React.TouchEvent)?.touches?.[0]?.clientX ||\n      (event as React.MouseEvent)?.clientX ||\n      0;\n\n    touchPosition.current = clientX;\n    const diff = initialTouchPosition.current - clientX;\n\n    dragMove?.(diff, event);\n  };\n\n  const handleDragEnd = (event?: React.TouchEvent | React.MouseEvent) => {\n    // This prevents links from working in mobile\n    if (!isMobile) {\n      event?.preventDefault();\n      event?.stopPropagation();\n    }\n\n    const initial = initialTouchPosition.current || 0;\n    const current = touchPosition.current || 0;\n    const diff = initial - current;\n\n    initialTouchPosition.current = null;\n    touchPosition.current = null;\n    dragEnd?.(diff, event);\n  };\n\n  const resetDrag = () => {\n    initialTouchPosition.current = null;\n    touchPosition.current = null;\n  };\n\n  return { handleDragStart, handleDragMove, handleDragEnd, resetDrag };\n};\n", "import { css } from '@emotion/css';\n\nimport { Spacing } from '../../constants';\n\nexport const categoryCss = css`\n  display: block;\n  font-size: 15px;\n  font-weight: 700;\n  line-height: ${Spacing.XL}px;\n`;\n", "import type { FC } from 'react';\n\nimport { categoryCss } from './styles';\n\nexport const Category: FC<{ title: string }> = ({ title }) => (\n  <span className={categoryCss}>{title}</span>\n);\n", "/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { cx } from '@emotion/css';\nimport type { CSSProperties, FC, ReactNode } from 'react';\nimport { useContext, useMemo, useRef } from 'react';\n\nimport type { BackgroundColor } from '../../constants';\nimport { Alignment } from '../../constants';\nimport type { MotifScheme } from '../../motif';\nimport {\n  getMotifSchemeForLegacyBackgroundColor,\n  getMotifVariableValue,\n  MotifComponent,\n  p1Css,\n  useMotifStyles,\n} from '../../motif';\nimport type { BaseComponentProps, Buttons } from '../../types';\nimport {\n  BlockBackgroundColorContext,\n  dataSetToAttributes,\n  getBackgroundClassName,\n} from '../../utils';\nimport { hideWhenDesktopCss, hideWhenMobileCss } from '../../utils/styles';\nimport { useAnimations } from '../Animations';\nimport type { Animation } from '../Animations/types';\nimport {\n  bodyContainerCss,\n  bodyContainerMediaSideCss,\n  bodyContainerStretchCss,\n  bodyCss,\n  bodyStyleCss,\n  borderColorCssVar,\n  borderCss,\n  contentBaseCss,\n  contentLayoutCss,\n  contentLayoutDirectionCss,\n  contentLayoutDirectionMobileCss,\n  contentMediaContainerCss,\n  contentScrollMarginCss,\n  contentWrapperNoMobilePaddingStyle,\n  contentWrapperStyle,\n  ctaContainerCss,\n  ctaInnerCss,\n  displayNoneCss,\n  headerCss,\n  listIconStyleCss,\n  listIconUrlVariable,\n  mediaOrderCss,\n  mediaOrderMobileCss,\n  subtitleBaseCss,\n  textAlignmentBaseCss,\n  textAlignmentDesktopStyle,\n  textAlignmentMobileStyle,\n  titleCss,\n  transparentBackgroundCss,\n} from './Content.styled';\nimport { DisplayMode, Layout, MediaDirection, MediaDirectionMobile } from './types';\n\nexport interface ContentProps extends BaseComponentProps {\n  body?: ReactNode;\n  bodyAlignment?: Alignment;\n  bodyAlignmentMobile?: Alignment;\n  callsToAction?: Buttons;\n  displayOn?: DisplayMode;\n  layout?: Layout;\n  mediaDirection?: MediaDirection;\n  mediaDirectionMobile?: MediaDirectionMobile;\n  subtitle?: ReactNode;\n  title?: ReactNode;\n  titleAlignment?: Alignment;\n  titleAlignmentMobile?: Alignment;\n  motifScheme?: MotifScheme;\n  /** @deprecated Use motifScheme instead. */\n  backgroundColor?: BackgroundColor;\n  borderColor?: BackgroundColor | MotifScheme;\n  anchorId?: string;\n  animation?: Animation;\n  isRTL?: boolean;\n  bodyDataset?: DOMStringMap;\n  titleDataset?: DOMStringMap;\n  subtitleDataset?: DOMStringMap;\n  /** @deprecated. Use `asset` instead. */\n  media?: ReactNode;\n  asset?: ReactNode;\n  listIconUrl?: string;\n}\n\n/**\n * Classnames added to primary HTML elements.\n *\n * Allows consumers to customize styles for various use cases.\n */\nexport enum ContentElementClass {\n  /** Classname added to container HTML element that renders the `body` prop. */\n  BODY = 'sdsm-content-body',\n\n  /** Classname added to container HTML element that renders the `callsToAction` prop. */\n  CALLS_TO_ACTION = 'sdsm-content-cta',\n\n  /** Classname added to container HTML element that renders the `subtitle` prop. */\n  SUBTITLE = 'sdsm-content-subtitle',\n\n  /** Classname added to container HTML element that renders the `title` prop. */\n  TITLE = 'sdsm-content-title',\n}\n\n// TODO: when we fully deprecate old Content, update the props\n/** Newer content component that is cleaner and has removed lots of rarely used functionality */\nexport const Content: FC<ContentProps> = ({\n  className,\n  body,\n  bodyAlignment,\n  bodyAlignmentMobile,\n  callsToAction,\n  displayOn = DisplayMode.ALL,\n  layout = Layout.NORMAL,\n  mediaDirection = MediaDirection.TOP,\n  mediaDirectionMobile = MediaDirectionMobile.TOP,\n  subtitle,\n  title,\n  titleAlignment,\n  titleAlignmentMobile,\n  motifScheme,\n  backgroundColor: backgroundColorProp,\n  borderColor,\n  anchorId,\n  animation,\n  isRTL,\n  bodyDataset,\n  titleDataset,\n  subtitleDataset,\n  asset,\n  style,\n  listIconUrl,\n}) => {\n  useMotifStyles(MotifComponent.CONTENT);\n  const contentRef = useRef(null);\n  const animationCssProps = useAnimations(contentRef, animation);\n\n  const dir = isRTL ? 'rtl' : undefined;\n\n  const blockBackgroundColor = useContext(BlockBackgroundColorContext);\n\n  // Disable background color if border color is set\n  const contentTheme = motifScheme ?? backgroundColorProp;\n  const contentBackgroundColor = borderColor ? undefined : contentTheme;\n  const backgroundColor = borderColor ? undefined : contentTheme || blockBackgroundColor;\n\n  // since undefined is a valid value, we need to check if both are undefined or both are defined\n  // the helper function we use returns default if undefined, so if one one value is undefined and the other is not,\n  // we need to just return false. if both are undefined, we return true because both map to the same default.\n  const isSameBackgroundColorAsBlock =\n    (blockBackgroundColor === undefined) !== (backgroundColor === undefined)\n      ? false\n      : getMotifSchemeForLegacyBackgroundColor(\n          blockBackgroundColor as BackgroundColor | MotifScheme\n        ) ===\n        getMotifSchemeForLegacyBackgroundColor(backgroundColor as BackgroundColor | MotifScheme);\n\n  // helper variables\n  const hasHeader = !!(title || subtitle);\n  const hasCallsToAction = !!(\n    (callsToAction && !Array.isArray(callsToAction)) ||\n    (Array.isArray(callsToAction) && callsToAction.length)\n  );\n  const hasBody = body || hasCallsToAction;\n  const hasContent = !!(title || subtitle || hasBody);\n  const hasMediaAndContent = !!asset && hasContent;\n\n  // Styles for the main <section> container\n  const bgClass = contentBackgroundColor ? getBackgroundClassName(backgroundColor) : undefined;\n\n  // Add css\n  const finalInlineStyle = useMemo(() => {\n    if (!borderColor) return style;\n\n    // Get background color CSS variable based on the selected border color\n    const borderColorScheme = getMotifSchemeForLegacyBackgroundColor(borderColor);\n    const borderColorVar = getMotifVariableValue(borderColorScheme, '--bg-color');\n\n    const borderInlineStyle = borderColorVar ? { [borderColorCssVar]: borderColorVar } : undefined;\n\n    return { ...style, ...borderInlineStyle };\n  }, [style, borderColor]);\n\n  // Remove padding if the block BackgroundColor is the same as the content BackgroundColor\n  // Only apply if there is no border color set\n  const contentBoxStyle =\n    !borderColor && isSameBackgroundColorAsBlock\n      ? contentWrapperNoMobilePaddingStyle[layout]\n      : contentWrapperStyle[layout];\n\n  const sectionClassName = cx(\n    MotifComponent.CONTENT,\n    // style for background color class name\n    bgClass,\n    // base css that is always applied\n    contentBaseCss,\n    // special padding css based on background color of content and its containing block\n    contentBoxStyle,\n    {\n      // style to hide/show on certain devices based on DisplayMode\n      [hideWhenMobileCss]: displayOn === DisplayMode.DESKTOP_ONLY,\n      [hideWhenDesktopCss]: displayOn === DisplayMode.MOBILE_ONLY,\n      [displayNoneCss]: displayOn === DisplayMode.NEITHER,\n      // if the content has media and text, use proper grid layout\n      [contentLayoutCss[layout] || '']: hasMediaAndContent,\n      // if the content has media and text, set proper ordering on grid items for proper direction\n      [contentLayoutDirectionCss[layout]?.[mediaDirection]]: hasMediaAndContent,\n      [contentLayoutDirectionMobileCss[layout]?.[mediaDirectionMobile]]: hasMediaAndContent,\n      // We use this to override the background color and set it to transparent when bg colors are the same\n      // or when content bg color isn't set.\n      [transparentBackgroundCss]: !contentBackgroundColor || isSameBackgroundColorAsBlock,\n      [borderCss]: !!borderColor,\n    },\n    className\n  );\n\n  return (\n    <section\n      id={anchorId}\n      style={animationCssProps ? { ...finalInlineStyle, ...animationCssProps } : finalInlineStyle}\n      data-testid={MotifComponent.CONTENT}\n      className={cx(sectionClassName, contentScrollMarginCss)}\n      ref={contentRef}\n      dir={dir}\n    >\n      {!!asset && (\n        <div\n          data-testid=\"sdsm-content-media-container\"\n          className={cx(\n            contentMediaContainerCss,\n            mediaOrderCss[mediaDirection],\n            mediaOrderMobileCss[mediaDirectionMobile]\n          )}\n        >\n          <div data-testid=\"sdsm-content-media\" data-animation-id=\"content-media\">\n            {asset}\n          </div>\n        </div>\n      )}\n      {hasContent && (\n        <div\n          data-testid=\"sdsm-content-header-and-body\"\n          className={cx(bodyContainerCss, {\n            [bodyContainerStretchCss]:\n              mediaDirection === MediaDirection.TOP || mediaDirection === MediaDirection.BOTTOM,\n            [bodyContainerMediaSideCss]:\n              mediaDirection === MediaDirection.LEFT || mediaDirection === MediaDirection.RIGHT,\n          })}\n        >\n          {hasHeader && (\n            <ContentHeader\n              title={title}\n              titleAlignment={titleAlignment}\n              titleAlignmentMobile={titleAlignmentMobile}\n              titleDataset={titleDataset}\n              subtitle={subtitle}\n              subtitleDataset={subtitleDataset}\n            />\n          )}\n          {hasBody && (\n            <ContentBody\n              body={body}\n              bodyAlignment={bodyAlignment}\n              bodyAlignmentMobile={bodyAlignmentMobile}\n              bodyDataset={bodyDataset}\n              callsToAction={callsToAction}\n              listIconUrl={listIconUrl}\n              hasCallsToAction={hasCallsToAction}\n            />\n          )}\n        </div>\n      )}\n    </section>\n  );\n};\n\ntype ContentHeaderProps = Pick<\n  ContentProps,\n  | 'title'\n  | 'titleAlignment'\n  | 'titleAlignmentMobile'\n  | 'titleDataset'\n  | 'subtitle'\n  | 'subtitleDataset'\n>;\n\n/** Helper component - renders the title and subtitle for the content. */\nconst ContentHeader: FC<ContentHeaderProps> = ({\n  title,\n  titleDataset,\n  subtitle,\n  subtitleDataset,\n  titleAlignment = Alignment.Start,\n  titleAlignmentMobile = Alignment.Start,\n}) => {\n  const titleAlignmentClassName = cx(\n    textAlignmentBaseCss,\n    textAlignmentDesktopStyle[titleAlignment],\n    textAlignmentMobileStyle[titleAlignmentMobile]\n  );\n\n  return (\n    <div data-testid=\"sdsm-content-header\" className={cx(headerCss, titleAlignmentClassName)}>\n      {title && (\n        <h3\n          className={cx(titleCss, titleAlignmentClassName, ContentElementClass.TITLE)}\n          data-testid={ContentElementClass.TITLE}\n          data-animation-id=\"content-title\"\n          {...dataSetToAttributes(titleDataset)}\n        >\n          {title}\n        </h3>\n      )}\n      {subtitle && (\n        <div\n          className={cx(p1Css, subtitleBaseCss, ContentElementClass.SUBTITLE)}\n          data-testid={ContentElementClass.SUBTITLE}\n          data-animation-id=\"content-subtitle\"\n          {...dataSetToAttributes(subtitleDataset)}\n        >\n          {subtitle}\n        </div>\n      )}\n    </div>\n  );\n};\n\ninterface ContentBodyProps\n  extends Pick<\n    ContentProps,\n    | 'body'\n    | 'bodyAlignment'\n    | 'bodyAlignmentMobile'\n    | 'bodyDataset'\n    | 'callsToAction'\n    | 'listIconUrl'\n  > {\n  hasHeader?: boolean;\n  hasCallsToAction?: boolean;\n}\n\n/** Helper component - renders the Body and CTAs foor the content. */\nconst ContentBody: FC<ContentBodyProps> = ({\n  body,\n  bodyDataset,\n  callsToAction,\n  listIconUrl,\n  hasCallsToAction,\n  bodyAlignment = Alignment.Start,\n  bodyAlignmentMobile = Alignment.Start,\n}) => {\n  const bodyAlignmentClassName = cx(\n    textAlignmentBaseCss,\n    textAlignmentDesktopStyle[bodyAlignment],\n    textAlignmentMobileStyle[bodyAlignmentMobile]\n  );\n\n  // Set the list icon url as a CSS variable to allow for a dynamic list-style-image property\n  const columnCountVariableStyles = listIconUrl\n    ? ({\n        [listIconUrlVariable]: `url(\"${listIconUrl}\")`,\n      } as CSSProperties)\n    : undefined;\n\n  return (\n    <div\n      data-testid={ContentElementClass.BODY}\n      style={columnCountVariableStyles}\n      className={cx(ContentElementClass.BODY, bodyCss)}\n    >\n      {body && (\n        <div\n          className={cx(bodyStyleCss, bodyAlignmentClassName, {\n            [listIconStyleCss]: !!listIconUrl,\n          })}\n          data-testid=\"sdsm-content-body-content\"\n          data-animation-id=\"content-body\"\n          {...dataSetToAttributes(bodyDataset)}\n        >\n          {body}\n        </div>\n      )}\n\n      {hasCallsToAction && (\n        <div\n          data-testid={ContentElementClass.CALLS_TO_ACTION}\n          className={cx(ctaContainerCss, ContentElementClass.CALLS_TO_ACTION)}\n        >\n          <div className={cx(ctaInnerCss, bodyAlignmentClassName)} data-animation-id=\"content-cta\">\n            {callsToAction}\n          </div>\n        </div>\n      )}\n    </div>\n  );\n};\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, nonMobileMediaQuery } from '../constants';\n\nexport const hideWhenMobileCss = css`\n  ${mobileMediaQuery} {\n    display: none;\n  }\n`;\n\nexport const hideWhenDesktopCss = css`\n  ${nonMobileMediaQuery} {\n    display: none;\n  }\n`;\n", "import { css } from '@emotion/css';\n\nimport {\n  Alignment,\n  mobileMediaQuery,\n  mobilePageContainerQuery,\n  nonMobileMediaQuery,\n} from '../../constants';\nimport { h4Css, m, MotifComponent, p2Css } from '../../motif';\nimport { Layout, MediaDirection, MediaDirectionMobile } from './types';\n\nexport const listIconUrlVariable = '--list-icon-url';\n\n/** Ensures scrolling to the element does not result in the element being hidden by header */\nexport const contentScrollMarginCss = css`\n  scroll-margin-top: var(--total-header-height);\n`;\n\n// For universal content css styles\nexport const contentBaseCss = css`\n  background-color: ${m('--bg-color')};\n  background-image: ${m('--bg-image')};\n  color: ${m('--fg-color')};\n  display: grid;\n  /* we do only 1 column here because these are the default styles when there is only either Media or Text */\n  grid-template-columns: 1fr;\n  grid-template-rows: auto;\n  width: 100%;\n  gap: ${m('--spacing-xl')};\n  border-color: ${m('--content-border-color')};\n  border-width: ${m('--content-border-width')};\n  border-style: solid;\n  backdrop-filter: ${m('--content-backdrop-filter')};\n  box-shadow: ${m('--content-box-shadow')};\n\n  ${mobileMediaQuery} {\n    grid-template-columns: 1fr;\n    grid-template-rows: auto;\n  }\n\n  /*\n  We are keeping the media queries above in addition to the container queries below in case:\n  - this component is ever rendered without a wrapping SDS-M Page component\n  - the browser does not support container queries (smart TVs, etc.)\n  */\n  ${mobilePageContainerQuery} {\n    grid-template-columns: 1fr;\n    grid-template-rows: auto;\n  }\n`;\n/**\n * Use this to override background-color when the content background color is the same as the blocks\n * background color or not set.\n */\nexport const transparentBackgroundCss = css`\n  background-color: transparent;\n  backdrop-filter: ${m('--content-backdrop-filter')};\n`;\n\n// TODO: when we remove old content and update the enums, remove the partial\n/** Special CSS needed for Normal and Dense */\nexport const contentLayoutCss: Partial<Record<Layout, string>> = {\n  [Layout.NORMAL]: css`\n    align-items: center;\n    justify-items: stretch;\n    justify-content: center;\n  `,\n  [Layout.DENSE]: css`\n    align-items: start;\n    justify-items: stretch;\n  `,\n};\n\n/** Special CSS needed for each different grid variation at the section level */\nexport const contentLayoutDirectionCss: Record<Layout, Record<MediaDirection, string>> = {\n  [Layout.NORMAL]: {\n    [MediaDirection.LEFT]: css`\n      grid-template-columns: auto minmax(auto, 600px);\n    `,\n    [MediaDirection.RIGHT]: css`\n      grid-template-columns: minmax(auto, 600px) auto;\n    `,\n    [MediaDirection.TOP]: css`\n      gap: ${m('--content-desktop-grid-gap')};\n      grid-template-rows: auto 1fr;\n      align-items: start;\n    `,\n    [MediaDirection.BOTTOM]: css`\n      gap: ${m('--content-desktop-grid-gap')};\n      grid-template-rows: 1fr auto;\n      align-items: start;\n    `,\n  },\n  [Layout.DENSE]: {\n    [MediaDirection.LEFT]: css`\n      grid-template-columns: auto minmax(auto, 1fr);\n    `,\n    [MediaDirection.RIGHT]: css`\n      grid-template-columns: minmax(auto, 1fr) auto;\n    `,\n    [MediaDirection.TOP]: '',\n    [MediaDirection.BOTTOM]: '',\n  },\n};\n\n/**\n * Mobile counterpart of the special CSS needed for each different grid variation at the section\n * level\n */\nexport const contentLayoutDirectionMobileCss: Record<\n  Layout,\n  Record<MediaDirectionMobile, string>\n> = {\n  [Layout.NORMAL]: {\n    [MediaDirectionMobile.TOP]: css`\n      ${mobileMediaQuery} {\n        gap: ${m('--content-mobile-grid-gap')};\n        grid-template-rows: auto 1fr;\n        align-items: start;\n      }\n    `,\n    [MediaDirectionMobile.BOTTOM]: css`\n      ${mobileMediaQuery} {\n        gap: ${m('--content-mobile-grid-gap')};\n        grid-template-rows: 1fr auto;\n        align-items: start;\n      }\n    `,\n  },\n  [Layout.DENSE]: {\n    [MediaDirectionMobile.TOP]: '',\n    [MediaDirectionMobile.BOTTOM]: '',\n  },\n};\n\n/* This is to ensure that media is sized correctly.\n * For example, for media with stickers, the container will stretch to full width but the image will not,\n * leading to stickers being placed incorrectly\n */\nexport const contentMediaContainerCss = css`\n  align-items: center;\n  display: flex;\n  justify-content: center;\n`;\n\n// this helps reverse the order when necessary\nexport const mediaOrderCss: Partial<Record<MediaDirection, string>> = {\n  [MediaDirection.RIGHT]: css`\n    order: 1;\n  `,\n  [MediaDirection.BOTTOM]: css`\n    order: 1;\n  `,\n};\n\nexport const mediaOrderMobileCss: Partial<Record<MediaDirectionMobile, string>> = {\n  [MediaDirectionMobile.TOP]: css`\n    ${mobileMediaQuery} {\n      order: 0;\n    }\n  `,\n  [MediaDirectionMobile.BOTTOM]: css`\n    ${mobileMediaQuery} {\n      order: 1;\n    }\n  `,\n};\n\n// For padding of content when background color is different than the block\nexport const contentWrapperStyle: Partial<Record<Layout, string>> = {\n  [Layout.NORMAL]: css`\n    border-radius: ${m('--border-radius-l')};\n    padding: ${m('--spacing-xl')};\n    ${mobileMediaQuery} {\n      padding-left: ${m('--spacing-m')};\n      padding-right: ${m('--spacing-m')};\n    }\n  `,\n  [Layout.DENSE]: css`\n    border-radius: ${m('--border-radius-l')};\n    padding: ${m('--spacing-l')};\n    ${mobileMediaQuery} {\n      padding-left: ${m('--spacing-m')};\n      padding-right: ${m('--spacing-m')};\n    }\n  `,\n};\n\n// For padding of content when background color is same as the block\nexport const contentWrapperNoMobilePaddingStyle: Partial<Record<Layout, string>> = {\n  [Layout.NORMAL]: css`\n    border-radius: ${m('--border-radius-l')};\n    padding: ${m('--content-desktop-no-bg-padding')};\n    ${mobileMediaQuery} {\n      padding: ${m('--content-mobile-no-bg-padding')};\n    }\n  `,\n  [Layout.DENSE]: css`\n    border-radius: ${m('--border-radius-l')};\n  `,\n};\n\n// Styles for the body\nexport const bodyContainerCss = css`\n  /* This is needed to make the PrimitiveTable component not overflow. */\n  max-width: 100%;\n  /* https://weblog.west-wind.com/posts/2016/feb/15/flexbox-containers-pre-tags-and-managing-overflow */\n  /* This is needed to make the Code component not overflow. The above blog post kind of explains it-ish... */\n  min-width: 0;\n\n  display: flex;\n  flex-direction: column;\n  gap: var(--spacing-m);\n  height: 100%;\n`;\n\n// needed for the body to stretch to the full width of the content\n// when media direction is top or bottom. only do this for desktop\n// to avoid making mobile buttons stretch full width. Will discuss on what behavior we should keep\nexport const bodyContainerStretchCss = css`\n  ${nonMobileMediaQuery} {\n    justify-self: stretch;\n  }\n`;\n\n/*\n * Body content stretches to the bottom of the container to allow for CTAs to allign with other\n * Content components. However, when the media is on the left/right, the body content should not\n * stretch to fill the container.\n */\nexport const bodyContainerMediaSideCss = css`\n  height: unset;\n`;\n\nexport const listIconStyleCss = css`\n  & ul:not(:has(ul)) {\n    list-style: none;\n    /* Remove padding-left from primitive styles */\n    padding-inline-start: 0;\n\n    & li {\n      position: relative;\n      /*\n        This is the size of the icon\n        https://www.figma.com/design/MuetHWEuhUF7rJap6giyq5/%5BEXT%5D-SDS-M-Refresh-2024?node-id=465-20259&t=NPQoIP8Xk8WG9Sus-11\n      */\n      padding-inline-start: 24px;\n\n      &::before {\n        background-image: var(${listIconUrlVariable});\n        background-repeat: no-repeat;\n        background-size: cover;\n        content: '';\n        height: 18px;\n        inset-block-start: 4px;\n        inset-inline-start: 3px;\n        position: absolute;\n        width: 18px;\n      }\n    }\n  }\n\n  /** Only top level of list items will have the bullet replaced by icon */\n  & ul ul {\n    list-style: initial;\n\n    & li {\n      padding-inline-start: initial;\n\n      &::before {\n        content: none;\n      }\n    }\n  }\n`;\n\nexport const bodyCss = css`\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  gap: ${m('--spacing-m')};\n  justify-content: space-between;\n`;\n\nexport const bodyStyleCss = css`\n  ${p2Css}\n\n  display: flex;\n  flex-direction: column;\n\n  .${MotifComponent.BUTTON} {\n    margin-top: ${m('--spacing-s')};\n  }\n\n  & ul {\n    margin-block-end: ${m('--spacing-s')};\n\n    /** Add margin bottom only to the top level list */\n    & ul {\n      margin-block-end: 0;\n    }\n  }\n`;\n\n// Header styles\nexport const headerCss = css`\n  display: flex;\n  flex-direction: column;\n  gap: ${m('--spacing-xs')};\n`;\n\nexport const titleCss = css`\n  /**\n   * The title is rendered as an <h3> so that there's a hierarchy of Hero Title (H1),\n   * Block Title (H2) and Content Title (H3). However, visually we want it to look like\n   * like an H4 because users put in very long content titles.\n   * So we force an H4 look over an H3 element.\n   * Note the double specificity to override default h3 styles.\n   * See https://jira.sc-corp.net/browse/WEBP-9117\n   */\n  && {\n    ${h4Css}\n  }\n  color: ${m('--content-title-color')};\n`;\n\nexport const subtitleBaseCss = css`\n  color: ${m('--content-subtitle-color')};\n`;\n\n// Text alignment section\n// TODO: Consolidate w/ alignmentCss and mobileAlignmentCss\n// The only \"weird\" thing here is the \"align-items: stretch\"\nexport const alignmentClassNames: { [key in Alignment]: string } = {\n  [Alignment.Left]: css`\n    align-items: stretch;\n    justify-content: flex-start;\n    text-align: start;\n  `,\n  [Alignment.Start]: css`\n    align-items: stretch;\n    justify-content: flex-start;\n    text-align: start;\n  `,\n  [Alignment.Center]: css`\n    align-items: center;\n    justify-content: center;\n    text-align: center;\n  `,\n  [Alignment.End]: css`\n    align-items: stretch;\n    justify-content: flex-end;\n    text-align: end;\n  `,\n  [Alignment.Right]: css`\n    align-items: stretch;\n    justify-content: flex-end;\n    text-align: end;\n  `,\n};\n\n// Text alignment section\nexport const textAlignmentBaseCss = css`\n  width: 100%;\n`;\n\nexport const textAlignmentDesktopStyle: { [key in Alignment]: string } = {\n  [Alignment.Left]: css`\n    ${nonMobileMediaQuery} {\n      ${alignmentClassNames[Alignment.Left]}\n    }\n  `,\n  [Alignment.Start]: css`\n    ${nonMobileMediaQuery} {\n      ${alignmentClassNames[Alignment.Start]}\n    }\n  `,\n  [Alignment.Center]: css`\n    ${nonMobileMediaQuery} {\n      ${alignmentClassNames[Alignment.Center]}\n    }\n  `,\n  [Alignment.End]: css`\n    ${nonMobileMediaQuery} {\n      ${alignmentClassNames[Alignment.End]}\n    }\n  `,\n  [Alignment.Right]: css`\n    ${nonMobileMediaQuery} {\n      ${alignmentClassNames[Alignment.Right]}\n    }\n  `,\n};\n\nexport const textAlignmentMobileStyle: { [key in Alignment]: string } = {\n  [Alignment.Left]: css`\n    ${mobileMediaQuery} {\n      ${alignmentClassNames[Alignment.Left]}\n    }\n  `,\n  [Alignment.Start]: css`\n    ${mobileMediaQuery} {\n      ${alignmentClassNames[Alignment.Start]}\n    }\n  `,\n  [Alignment.Center]: css`\n    ${mobileMediaQuery} {\n      ${alignmentClassNames[Alignment.Center]}\n    }\n  `,\n  [Alignment.End]: css`\n    ${mobileMediaQuery} {\n      ${alignmentClassNames[Alignment.End]}\n    }\n  `,\n  [Alignment.Right]: css`\n    ${mobileMediaQuery} {\n      ${alignmentClassNames[Alignment.Right]}\n    }\n  `,\n};\n\nexport const ctaContainerCss = css`\n  margin-bottom: ${m('--spacing-m')};\n  margin-top: auto;\n`;\n\nexport const ctaInnerCss = css`\n  display: flex;\n  align-items: center;\n  flex-wrap: wrap;\n  gap: ${m('--spacing-m')};\n`;\n\nexport const displayNoneCss = css`\n  display: none;\n`;\n\nexport const borderColorCssVar = '--border-color';\n\nexport const borderCss = css`\n  border-color: var(${borderColorCssVar});\n  border-width: ${m('--content-decoration-border-width')};\n`;\n", "import { cx } from '@emotion/css';\nimport type { KeyboardEvent, PropsWithChildren } from 'react';\nimport { forwardRef } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport type { BaseComponentProps } from '../../types';\nimport { definitionActiveCss, definitionCss } from './Definition.styles';\n\ninterface DefinitionProps extends PropsWithChildren<BaseComponentProps> {\n  isActive: boolean;\n  anchorId?: string;\n  onClick?: () => void;\n}\n\nexport const Definition = forwardRef<HTMLButtonElement, DefinitionProps>(\n  ({ anchorId, isActive, onClick, className, children }, ref) => {\n    useMotifStyles(MotifComponent.DEFINITION);\n\n    const handleKeyDown = (e: KeyboardEvent) => {\n      if (['Enter', ' '].includes(e.key)) {\n        e.preventDefault(); // Prevent browser page-down action on spacebar press\n        onClick?.();\n      }\n    };\n\n    // NOTE: We need to use <span> instead of <button> so that longer text wraps correctly as inline text\n    return (\n      <span\n        role=\"button\"\n        tabIndex={0}\n        id={anchorId}\n        ref={ref}\n        onClick={onClick}\n        onKeyDown={handleKeyDown}\n        className={cx(\n          MotifComponent.DEFINITION,\n          definitionCss,\n          {\n            [definitionActiveCss]: isActive,\n          },\n          className\n        )}\n      >\n        {children}\n      </span>\n    );\n  }\n);\n", "import { css } from '@emotion/css';\n\nimport { m } from '../../motif/m';\n\nexport const definitionCss = css`\n  background-color: ${m('--definition-bg-color')};\n  border-radius: ${m('--border-radius-s')};\n  border-bottom: 2px solid ${m('--definition-border-color')};\n  cursor: pointer;\n  margin: 0;\n  padding: 0px 4px 2px 4px;\n  /* Ensure element is scrolled to the center of the screen when scrolled into view here:\n   * packages/web/src/Routes.tsx\n   */\n  scroll-margin-top: 50vh;\n  transition: background-color 150ms ease-in-out, border-color 150ms ease-in-out;\n\n  &:hover {\n    background-color: ${m('--definition-hover-bg-color')};\n    border-bottom: 2px solid ${m('--definition-hover-border-color')};\n  }\n`;\n\nexport const definitionActiveCss = css`\n  background-color: ${m('--definition-active-bg-color')};\n  border-bottom: 2px solid ${m('--definition-hover-border-color')};\n\n  &:hover {\n    background-color: ${m('--definition-active-bg-color')};\n    border-bottom: 2px solid ${m('--definition-hover-border-color')};\n  }\n`;\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, nonMobileMediaQuery } from '../../constants';\nimport { ZIndex } from '../../constants/zIndex';\nimport { m } from '../../motif/m';\n\n// ---------------------------------------------------------------------------\n// Base\n// ---------------------------------------------------------------------------\n\nexport const directionalOverlayPanelActiveCss = css`\n  opacity: 1;\n  pointer-events: auto;\n  visibility: visible;\n`;\n\n/**\n * Base panel styles shared across all directions. Direction-specific sizing, positioning, and\n * closed-state transforms are applied via the `directionalOverlayDesktop*Css` /\n * `directionalOverlayMobile*Css` classes. Open-state transforms come from\n * `directionalOverlayDesktop*OpenCss` / `directionalOverlayMobile*OpenCss`.\n *\n */\nexport const directionalOverlayPanelCss = css`\n  box-sizing: border-box;\n  opacity: 0;\n  pointer-events: none;\n  position: fixed;\n  transition: transform 200ms ease-in-out, opacity 200ms ease-in-out, visibility 200ms ease-in-out;\n  visibility: hidden;\n  z-index: ${ZIndex.DIRECTIONAL_OVERLAY};\n`;\n\n// ---------------------------------------------------------------------------\n// Desktop direction \u2014 closed state (position, size, off-screen transform)\n// ---------------------------------------------------------------------------\n\nexport const directionalOverlayDesktopLeftCss = css`\n  ${nonMobileMediaQuery} {\n    height: 100vh;\n    left: 0;\n    right: auto;\n    top: 0;\n    transform: translateX(calc(-100% - var(--directional-overlay-lateral-outset, 0px)));\n    transform-origin: 0 50%;\n    width: min(100vw, calc(var(--directional-overlay-desktop-size-pct) * 1vw));\n  }\n`;\n\nexport const directionalOverlayDesktopRightCss = css`\n  ${nonMobileMediaQuery} {\n    height: 100vh;\n    left: auto;\n    right: 0;\n    top: 0;\n    transform: translateX(calc(100% + var(--directional-overlay-lateral-outset, 0px)));\n    transform-origin: 100% 50%;\n    width: min(100vw, calc(var(--directional-overlay-desktop-size-pct) * 1vw));\n  }\n`;\n\nexport const directionalOverlayDesktopTopCss = css`\n  ${nonMobileMediaQuery} {\n    bottom: auto;\n    height: min(100vh, calc(var(--directional-overlay-desktop-size-pct) * 1vh));\n    left: 0;\n    overflow: auto;\n    right: 0;\n    top: 0;\n    transform: translateY(calc(-100% - var(--directional-overlay-vertical-outset, 0px)));\n    transform-origin: 50% 0;\n    width: 100%;\n  }\n`;\n\nexport const directionalOverlayDesktopBottomCss = css`\n  ${nonMobileMediaQuery} {\n    bottom: 0;\n    height: min(100vh, calc(var(--directional-overlay-desktop-size-pct) * 1vh));\n    left: 0;\n    overflow: auto;\n    right: 0;\n    top: auto;\n    transform: translateY(calc(100% + var(--directional-overlay-vertical-outset, 0px)));\n    transform-origin: 50% 100%;\n    width: 100%;\n  }\n`;\n\n// ---------------------------------------------------------------------------\n// Desktop direction \u2014 open-state transform overrides\n// ---------------------------------------------------------------------------\n\nexport const directionalOverlayDesktopHorizontalOpenCss = css`\n  ${nonMobileMediaQuery} {\n    transform: translateX(0);\n  }\n`;\n\nexport const directionalOverlayDesktopVerticalOpenCss = css`\n  ${nonMobileMediaQuery} {\n    transform: translateY(0);\n  }\n`;\n\n// ---------------------------------------------------------------------------\n// Mobile direction \u2014 closed state (position, size, off-screen transform)\n// ---------------------------------------------------------------------------\n\nexport const directionalOverlayMobileLeftCss = css`\n  ${mobileMediaQuery} {\n    height: 100vh;\n    left: 0;\n    right: auto;\n    top: 0;\n    transform: translateX(calc(-100% - var(--directional-overlay-lateral-outset, 0px)));\n    transform-origin: 0 50%;\n    width: min(100vw, calc(var(--directional-overlay-mobile-size-pct) * 1vw));\n  }\n`;\n\nexport const directionalOverlayMobileRightCss = css`\n  ${mobileMediaQuery} {\n    height: 100vh;\n    left: auto;\n    right: 0;\n    top: 0;\n    transform: translateX(calc(100% + var(--directional-overlay-lateral-outset, 0px)));\n    transform-origin: 100% 50%;\n    width: min(100vw, calc(var(--directional-overlay-mobile-size-pct) * 1vw));\n  }\n`;\n\nexport const directionalOverlayMobileTopCss = css`\n  ${mobileMediaQuery} {\n    bottom: auto;\n    height: min(100vh, calc(var(--directional-overlay-mobile-size-pct) * 1vh));\n    left: 0;\n    overflow: auto;\n    right: 0;\n    top: 0;\n    transform: translateY(calc(-100% - var(--directional-overlay-vertical-outset, 0px)));\n    transform-origin: 50% 0;\n    width: 100%;\n  }\n`;\n\nexport const directionalOverlayMobileBottomCss = css`\n  ${mobileMediaQuery} {\n    bottom: 0;\n    height: min(100vh, calc(var(--directional-overlay-mobile-size-pct) * 1vh));\n    left: 0;\n    overflow: auto;\n    right: 0;\n    top: auto;\n    transform: translateY(calc(100% + var(--directional-overlay-vertical-outset, 0px)));\n    transform-origin: 50% 100%;\n    width: 100%;\n  }\n`;\n\n// ---------------------------------------------------------------------------\n// Mobile direction \u2014 open-state transform overrides\n// ---------------------------------------------------------------------------\n\nexport const directionalOverlayMobileHorizontalOpenCss = css`\n  ${mobileMediaQuery} {\n    transform: translateX(0);\n  }\n`;\n\nexport const directionalOverlayMobileVerticalOpenCss = css`\n  ${mobileMediaQuery} {\n    transform: translateY(0);\n  }\n`;\n\n// ---------------------------------------------------------------------------\n// Backdrop\n// ---------------------------------------------------------------------------\n\nexport const directionalOverlayBackdropBaseCss = css`\n  background-color: ${m('--palette-plain-black')};\n  height: 100vh;\n  left: 0;\n  opacity: 0;\n  pointer-events: none;\n  position: fixed;\n  top: 0;\n  transition: opacity 200ms linear, visibility 200ms linear;\n  visibility: hidden;\n  width: 100vw;\n  z-index: ${ZIndex.DIRECTIONAL_OVERLAY};\n`;\n\nexport const directionalOverlayBackdropActiveCss = css`\n  opacity: 0.3;\n  pointer-events: auto;\n  visibility: visible;\n`;\n\n// ---------------------------------------------------------------------------\n// Direction CSS map \u2014 groups all four per-direction classes into one lookup\n// ---------------------------------------------------------------------------\n\n/** All CSS classes needed for a given slide direction, keyed by direction name. */\nexport const directionCssMap: Record<\n  'top' | 'right' | 'bottom' | 'left',\n  { desktop: string; desktopOpen: string; mobile: string; mobileOpen: string }\n> = {\n  left: {\n    desktop: directionalOverlayDesktopLeftCss,\n    desktopOpen: directionalOverlayDesktopHorizontalOpenCss,\n    mobile: directionalOverlayMobileLeftCss,\n    mobileOpen: directionalOverlayMobileHorizontalOpenCss,\n  },\n  right: {\n    desktop: directionalOverlayDesktopRightCss,\n    desktopOpen: directionalOverlayDesktopHorizontalOpenCss,\n    mobile: directionalOverlayMobileRightCss,\n    mobileOpen: directionalOverlayMobileHorizontalOpenCss,\n  },\n  top: {\n    desktop: directionalOverlayDesktopTopCss,\n    desktopOpen: directionalOverlayDesktopVerticalOpenCss,\n    mobile: directionalOverlayMobileTopCss,\n    mobileOpen: directionalOverlayMobileVerticalOpenCss,\n  },\n  bottom: {\n    desktop: directionalOverlayDesktopBottomCss,\n    desktopOpen: directionalOverlayDesktopVerticalOpenCss,\n    mobile: directionalOverlayMobileBottomCss,\n    mobileOpen: directionalOverlayMobileVerticalOpenCss,\n  },\n};\n", "import { cx } from '@emotion/css';\nimport type { CSSProperties, FC, KeyboardEvent, MouseEvent, ReactNode } from 'react';\n\nimport type { BaseComponentProps } from '../../types';\nimport { dataSetToAttributes } from '../../utils';\nimport {\n  directionCssMap,\n  directionalOverlayBackdropActiveCss,\n  directionalOverlayBackdropBaseCss,\n  directionalOverlayPanelActiveCss,\n  directionalOverlayPanelCss,\n} from './DirectionalOverlay.styles';\n\n/**\n * A low-level fixed panel that slides in from any edge of the screen.\n *\n * Use `DirectionalOverlay` when you need full control over the slide direction, sizing, content\n * structure, or backdrop visibility \u2014 or when building a higher-level overlay component on top of\n * this primitive.\n *\n * Prefer {@link SideOverlay} instead when you need:\n * - A ready-made drawer with a close button, title/body layout, and Motif theming.\n * - Automatic RTL direction flipping.\n * - Mobile-specific behaviour (full-width bottom sheet on mobile, side panel on desktop).\n *\n * @example\n * // Custom bottom sheet on desktop, full-height on mobile\n * <DirectionalOverlay\n *   isOpen={isOpen}\n *   desktopDirection=\"bottom\"\n *   mobileDirection=\"bottom\"\n *   desktopSizePercent={40}\n *   mobileSizePercent={60}\n *   onBackdropClick={close}\n * >\n *   <MyContent />\n * </DirectionalOverlay>\n *\n * @example\n * // Left-side panel without a backdrop\n * <DirectionalOverlay\n *   isOpen={isOpen}\n *   desktopDirection=\"left\"\n *   desktopSizePercent={30}\n *   showBackdrop={false}\n * >\n *   <nav>\u2026</nav>\n * </DirectionalOverlay>\n */\nexport type OverlaySlideDirection = 'top' | 'right' | 'bottom' | 'left';\n\nexport interface DirectionalOverlayProps extends BaseComponentProps {\n  isOpen: boolean;\n  children: ReactNode;\n  /** Slide origin for non-mobile breakpoints. */\n  desktopDirection: OverlaySlideDirection;\n  /** Slide origin for mobile; defaults to {@link desktopDirection}. */\n  mobileDirection?: OverlaySlideDirection;\n  /** Viewport share (0\u2013100) on non-mobile: width (vw) for left/right, height (vh) for top/bottom. */\n  desktopSizePercent: number;\n  /** Viewport share (0\u2013100) on mobile; defaults to {@link desktopSizePercent}. */\n  mobileSizePercent?: number;\n  onBackdropClick?: (event: MouseEvent<HTMLDivElement> | KeyboardEvent<HTMLDivElement>) => void;\n  /** Whether to render the backdrop on both desktop and mobile. Defaults to `true`. */\n  showBackdrop?: boolean;\n  backdropClassName?: string;\n}\n\nexport const DirectionalOverlay: FC<DirectionalOverlayProps> = ({\n  isOpen,\n  children,\n  desktopDirection,\n  mobileDirection,\n  desktopSizePercent,\n  mobileSizePercent = desktopSizePercent,\n  onBackdropClick,\n  showBackdrop = true,\n  backdropClassName,\n  className,\n  style,\n  dataset,\n  'data-testid': dataTestId,\n}) => {\n  const resolvedMobileDirection = mobileDirection ?? desktopDirection;\n  const resolvedMobileSizePercent = mobileSizePercent ?? desktopSizePercent;\n\n  const panelStyle: CSSProperties = {\n    ...style,\n    '--directional-overlay-desktop-size-pct': desktopSizePercent,\n    '--directional-overlay-mobile-size-pct': resolvedMobileSizePercent,\n  } as CSSProperties;\n\n  const handleBackdropKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n    if (event.key === 'Enter' || event.key === ' ') {\n      event.preventDefault();\n      onBackdropClick?.(event);\n    }\n  };\n\n  const desktopCss = directionCssMap[desktopDirection];\n  const mobileCss = directionCssMap[resolvedMobileDirection];\n\n  const backdropClass = cx(directionalOverlayBackdropBaseCss, backdropClassName, {\n    [directionalOverlayBackdropActiveCss]: isOpen,\n  });\n\n  const panelClass = cx(\n    directionalOverlayPanelCss,\n    desktopCss.desktop,\n    mobileCss.mobile,\n    isOpen && directionalOverlayPanelActiveCss,\n    isOpen && desktopCss.desktopOpen,\n    isOpen && mobileCss.mobileOpen,\n    className\n  );\n\n  return (\n    <>\n      {showBackdrop && (\n        <div\n          className={backdropClass}\n          onClick={onBackdropClick}\n          onKeyDown={handleBackdropKeyDown}\n          role=\"presentation\"\n        />\n      )}\n      <aside\n        {...dataSetToAttributes(dataset)}\n        className={panelClass}\n        data-testid={dataTestId}\n        style={panelStyle}\n      >\n        {children}\n      </aside>\n    </>\n  );\n};\n\nDirectionalOverlay.displayName = 'DirectionalOverlay';\n", "import { css } from '@emotion/css';\n\nimport {\n  mobileMediaQuery,\n  noHorizontalScrollbarsCss,\n  nonMobileMediaQuery,\n} from '../../../constants';\nimport { ZIndex } from '../../../constants/zIndex';\nimport { m } from '../../../motif/m';\n\n// Buttons\nexport const buttonsWrapperClassName = 'toggleButtonsWrapper';\nexport const dropdownWrapperClassName = 'dropdownWrapper';\nexport const skeletonWrapperClassName = 'skeletonWrapper';\n\nexport const buttonsWrapperCss = css`\n  width: 100%;\n`;\n\nconst buttonsBaseCss = css`\n  display: flex;\n  justify-content: center;\n  padding-top: ${m('--spacing-xxxs')};\n  flex-wrap: wrap;\n\n  ${mobileMediaQuery} {\n    justify-content: start;\n    overflow-x: auto;\n    flex-wrap: nowrap;\n    ${noHorizontalScrollbarsCss}\n  }\n\n  *[dir='rtl'] & {\n    flex-direction: row-reverse;\n  }\n`;\n\nconst buttonsSizeCss = css`\n  margin-inline: 0;\n\n  ${mobileMediaQuery} {\n    &::before,\n    &::after {\n      content: '';\n      flex: 0 0 ${m('--spacing-xl')};\n    }\n    margin-inline: calc(${m('--spacing-xl')} * -1);\n  }\n`;\n\nexport const buttonsCss = css`\n  ${buttonsBaseCss}\n  ${buttonsSizeCss}\n`;\n\n// Panels\nexport const panelsCss = css`\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  width: 100%;\n\n  & > div {\n    margin: auto;\n\n    & > div:not(:last-of-type):not(.${buttonsWrapperClassName}) {\n      margin-bottom: calc(${m('--spacing-xxl')} * 2);\n    }\n  }\n`;\n\n// Single Button\nexport const buttonActiveClassName = 'toggleButton-active';\n\nconst buttonBaseCss = css`\n  border-radius: 64px;\n  cursor: pointer;\n  font-weight: ${m('--action-desktop-font-weight')};\n  line-height: ${m('--action-desktop-font-line-height')};\n  text-decoration: none;\n  transition: transform 150ms ease-in-out;\n  white-space: nowrap;\n  z-index: ${ZIndex.BUTTON};\n\n  @media (hover: hover) {\n    &:hover:not(:disabled) {\n      box-shadow: ${m('--box-shadow-xl')};\n      transform: translateY(-2px);\n    }\n  }\n\n  &:active:not(:disabled) {\n    box-shadow: ${m('--box-shadow-m')};\n    transform: translateY(-1px);\n  }\n\n  ${mobileMediaQuery} {\n    font-weight: ${m('--action-mobile-font-weight')};\n    line-height: ${m('--action-mobile-font-line-height')};\n  }\n`;\n\nconst buttonSizeCss = css`\n  margin-inline: ${m('--spacing-xs')};\n  margin-bottom: ${m('--spacing-xl')};\n  font-size: ${m('--action-desktop-font-size')};\n  padding: ${m('--spacing-s')} ${m('--spacing-xl')};\n  border: ${m('--border-width-xs')} solid ${m('--chart-toggle-buttons-border-color')};\n  background-color: ${m('--chart-toggle-buttons-bg-color')};\n  color: ${m('--chart-toggle-buttons-color')};\n\n  ${mobileMediaQuery} {\n    font-size: ${m('--action-mobile-font-size')};\n  }\n\n  &.${buttonActiveClassName} {\n    border: ${m('--border-width-xs')} solid ${m('--chart-toggle-buttons-active-border-color')};\n    background-color: ${m('--chart-toggle-buttons-active-bg-color')};\n    color: ${m('--chart-toggle-buttons-active-color')};\n  }\n`;\n\nexport const buttonCss = css`\n  ${buttonBaseCss}\n  ${buttonSizeCss}\n`;\n\n// TODO: Simplify this... I think it's just adding some margin on the child.\nexport const contentContainerStyle1ColumnCss = css`\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  position: relative;\n  width: 100%;\n\n  & > * {\n    box-sizing: border-box;\n    margin-left: ${m('--spacing-m')};\n    margin-right: ${m('--spacing-m')};\n\n    ${mobileMediaQuery} {\n      margin-left: 0;\n      margin-right: 0;\n      width: 100%;\n    }\n\n    width: 100%;\n  }\n`;\n\nexport const chartToggleWrapperCss = css`\n  align-items: flex-start;\n  column-gap: ${m('--spacing-m')};\n  display: flex;\n  min-height: 70vh;\n  row-gap: ${m('--spacing-xl')};\n\n  ${mobileMediaQuery} {\n    flex-direction: column;\n\n    & > * {\n      width: 100%;\n    }\n\n    /** Style buttons in dropdown component */\n    button {\n      width: 100%;\n    }\n  }\n\n  ${nonMobileMediaQuery} {\n    flex-wrap: wrap;\n\n    & > *:not(.${dropdownWrapperClassName}, .${skeletonWrapperClassName}) {\n      width: 100%;\n    }\n  }\n`;\n\nexport const dropdownCss = css`\n  display: flex;\n  flex-direction: column;\n  gap: ${m('--spacing-xs')};\n  justify-content: end;\n\n  label {\n    font-size: ${m('--action-desktop-font-size')};\n    font-weight: ${m('--action-desktop-font-weight')};\n\n    ${mobileMediaQuery} {\n      font-size: ${m('--action-mobile-font-size')};\n      font-weight: ${m('--action-mobile-font-weight')};\n    }\n  }\n\n  ${mobileMediaQuery} {\n    width: 100%;\n  }\n`;\n\nexport const noLabelCss = css`\n  ${nonMobileMediaQuery} {\n    margin-block-start: calc(24px + ${m('--spacing-xs')});\n  }\n`;\n", "import { css } from '@emotion/css';\n\nimport { nonMobileMediaQuery } from '../../constants';\nimport { m } from '../../motif';\n\nconst defaultColor = 'rgb(232, 232, 235)';\n\nexport const skeletonWrapperCss = css`\n  /** align with dropdown */\n  margin-block-start: 17px;\n`;\n\nexport const skeletonLabelCss = css`\n  background-color: ${m('--dropdown-skeleton-animation-default-color')};\n  border-radius: ${m('--border-radius-m')};\n  height: 6px;\n  margin-block-end: ${m('--spacing-xs')};\n  width: 51px;\n`;\n\nexport const skeletonLinesWrapperCss = css`\n  align-items: center;\n  background-color: ${m('--dropdown-menu-bg-color')};\n  border-radius: ${m('--border-radius-m')};\n  box-shadow: ${m('--box-shadow-s')};\n  color: ${m('--fg-color')};\n  display: flex;\n  gap: 6px;\n  justify-content: space-between;\n  min-width: 160px;\n  padding: ${m('--spacing-s')} ${m('--spacing-m')};\n`;\n\nexport const skeletonLineCss = css`\n  background-color: ${m('--dropdown-skeleton-animation-default-color')};\n  border-radius: ${m('--border-radius-m')};\n  height: 12px;\n\n  &:nth-child(1) {\n    flex: 0 0 48px;\n  }\n\n  &:nth-child(2) {\n    flex: 1 1 100%;\n  }\n\n  ${nonMobileMediaQuery} {\n    &:nth-child(1) {\n      flex: 0 0 28px;\n    }\n  }\n`;\n\nexport const skeletonLineAnimationCss = css`\n  overflow: hidden;\n  position: relative;\n\n  &::before {\n    animation: dropdown-skeleton 2s infinite;\n    background: linear-gradient(\n      0.25turn,\n      transparent,\n      ${m('--dropdown-skeleton-animation-color')},\n      transparent\n    );\n    content: '';\n    height: 100%;\n    left: 0;\n    opacity: 0.8;\n    pointer-events: none;\n    position: absolute;\n    top: 0;\n    transform: translateX(-100%);\n    width: 100%;\n  }\n\n  @keyframes dropdown-skeleton {\n    0% {\n      transform: translateX(-100%);\n    }\n    30% {\n      transform: translateX(-100%);\n    }\n    100% {\n      transform: translateX(100%);\n    }\n  }\n`;\n\nexport const skeletonIconWrapperCss = css`\n  flex: 0 0 20px;\n`;\n\nexport const skeletonDropdownIconCss = css`\n  fill: ${defaultColor};\n  position: relative;\n  top: 1px;\n  transform: rotate(0deg);\n  transition: transform 250ms;\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport { Icon } from '../Icon';\nimport { skeletonWrapperClassName } from '../visualizations/ChartToggle/styles';\nimport {\n  skeletonDropdownIconCss,\n  skeletonIconWrapperCss,\n  skeletonLabelCss,\n  skeletonLineAnimationCss,\n  skeletonLineCss,\n  skeletonLinesWrapperCss,\n  skeletonWrapperCss,\n} from './DropdownSkeleton.styles';\n\n/**\n * `SkeletonChartToggleDropdown` is a functional component that renders a skeleton screen\n * placeholder for a chart toggle dropdown. This component is typically used to display a loading\n * state while the actual chart toggle dropdown is being loaded. Usage:\n *\n * ```jsx\n * <SkeletonChartToggleDropdown />;\n * ```\n *\n * @returns A React element representing the skeleton state of a chart toggle dropdown.\n */\nexport const DropdownSkeleton: FC = () => (\n  <aside className={cx('sdsm-dropdown-skeleton', skeletonWrapperClassName, skeletonWrapperCss)}>\n    <div className={cx(skeletonLabelCss, skeletonLineAnimationCss)} />\n    <div className={cx(skeletonLinesWrapperCss)}>\n      <div className={cx(skeletonLineCss, skeletonLineAnimationCss)} />\n      <div className={cx(skeletonLineCss, skeletonLineAnimationCss)} />\n      <div className={skeletonIconWrapperCss}>\n        <Icon size={20} className={skeletonDropdownIconCss} name=\"chevron-down\" />\n      </div>\n    </div>\n  </aside>\n);\n", "import { css } from '@emotion/css';\n\nimport { m } from '../../motif/m';\n\nexport const emphasizedTextCss = css`\n  color: ${m('--emphasized-text-color')};\n  font-style: normal;\n`;\n", "import { cx } from '@emotion/css';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { emphasizedTextCss } from './EmphasizedText.styles';\n\ntype EmphasizedTextProps = {\n  text: string;\n};\n\nexport const EmphasizedText: React.FC<EmphasizedTextProps> = ({ text }) => {\n  useMotifStyles(MotifComponent.EMPHASIZED_TEXT);\n  return text ? (\n    <em className={cx(MotifComponent.EMPHASIZED_TEXT, emphasizedTextCss)}>{text}</em>\n  ) : null;\n};\n", "import { cx } from '@emotion/css';\nimport type { ChangeEvent, FC } from 'react';\nimport { useMemo } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport type { BaseComponentProps } from '../../types';\nimport { dataSetToAttributes } from '../../utils';\nimport type { DropdownItem, DropdownMenuButtonProps } from '../DropdownMenu';\nimport { DropdownMenu } from '../DropdownMenu';\nimport { Icon } from '../Icon';\nimport {\n  caratCss,\n  desktopWrapperCss,\n  dropdownCss,\n  dropdownMainTextCss,\n  dropdownMobileCss,\n  dropdownMobileWrapperCss,\n  dropdownSecondaryTextCss,\n  dropdownTextCss,\n} from './filterDropdownMenuStyles';\n\nexport const allValue = 'all';\n// We'll generate the onClick ourselves.\ntype AbridgedDropdownItem = Pick<DropdownItem, 'title' | 'id'>;\n\nexport interface FilterDropdownMenuProps extends BaseComponentProps {\n  title: string;\n  id: string;\n  allItemTitle: DropdownItem['title'];\n  items: AbridgedDropdownItem[];\n  value?: string;\n  onChange?: (itemId?: string) => void;\n  isStandalone?: boolean;\n}\n\n/**\n * Returns the dropdown used for filtering.\n *\n * @param title - Title of filter dropdown\n * @param onChange - Callback function for filter change\n * @param isStandalone - Is filter standalone (defaults to true )\n * @param value - Current value of filter dropdown\n * @param allItemsTitle - Title for all values selection\n * @param items - Dropdown option items\n * @param dataset - Dataset attributes\n * @param id - Dropdown id\n */\nexport const FilterDropdownMenu: FC<FilterDropdownMenuProps> = ({\n  title,\n  onChange,\n  isStandalone = true,\n  value,\n  allItemTitle,\n  items,\n  dataset,\n}) => {\n  useMotifStyles(MotifComponent.FILTER_DROPDOWN_MENU);\n  const itemsWithEvents = useMemo(() => {\n    const result = [\n      {\n        title: allItemTitle,\n        id: allValue,\n        onClick: () => onChange?.(undefined),\n      },\n      ...items.map(({ title, id }) => ({ title, id, onClick: () => onChange?.(id) })),\n    ];\n\n    return result;\n  }, [allItemTitle, items, onChange]);\n\n  const onChangeMobile = (e: ChangeEvent<HTMLSelectElement>) => {\n    if (e.target.value === allValue) {\n      onChange?.(undefined);\n    } else {\n      onChange?.(e.target.value);\n    }\n  };\n\n  const FilterButton: FC<DropdownMenuButtonProps> = props => {\n    return (\n      <button\n        onClick={props.onClick}\n        data-testid=\"sds-dropdown-menu\"\n        className={dropdownCss}\n        aria-haspopup=\"listbox\"\n        aria-label={props.ariaLabel}\n        role=\"combobox\"\n        {...dataSetToAttributes(dataset)}\n      >\n        <div\n          data-testid=\"sds-dropdown-menu-title\"\n          className={cx(dropdownTextCss, dropdownMainTextCss)}\n        >\n          {props.children}\n        </div>\n        <div className={caratCss}>\n          <Icon size={24} name={props.isExpanded ? 'chevron-up' : 'chevron-down'} />\n        </div>\n      </button>\n    );\n  };\n\n  return (\n    <>\n      <div\n        data-testid=\"sds-dropdown-menu-container\"\n        className={cx(MotifComponent.FILTER_DROPDOWN_MENU, desktopWrapperCss)}\n      >\n        <DropdownMenu\n          placeholderText={title}\n          selectedItemId={value}\n          items={itemsWithEvents}\n          ariaLabel={title}\n          buttonComponent={FilterButton}\n        />\n      </div>\n      <div\n        data-testid=\"sds-dropdown-menu-container-mobile\"\n        className={dropdownMobileWrapperCss}\n        {...dataSetToAttributes(dataset)}\n      >\n        <select\n          data-testid=\"sds-dropdown-menu-mobile\"\n          className={cx(dropdownMobileCss, dropdownTextCss, {\n            [dropdownMainTextCss]: isStandalone,\n            [dropdownSecondaryTextCss]: !isStandalone,\n          })}\n          value={value}\n          onChange={onChangeMobile}\n        >\n          {itemsWithEvents.map(({ title, id }) => (\n            <option key={id} value={id}>\n              {title}\n            </option>\n          ))}\n        </select>\n        <div className={caratCss}>\n          <Icon name=\"chevron-down\" />\n        </div>\n      </div>\n    </>\n  );\n};\n\nFilterDropdownMenu.displayName = 'FilterDropdownMenu';\n", "import { css } from '@emotion/css';\n\nimport { MobileHeading, mobileMediaQuery, nonMobileMediaQuery, Spacing } from '../../constants';\nimport { m } from '../../motif/m';\n\nexport const desktopWrapperCss = css`\n  ${mobileMediaQuery} {\n    display: none;\n  }\n\n  ${nonMobileMediaQuery} {\n    display: block;\n  }\n`;\n\nexport const dropdownCss = css`\n  border: none;\n  background-color: inherit;\n  color: ${m('--fg-color')};\n  align-items: center;\n  display: flex;\n  padding-block: ${Spacing.MD}px;\n  margin-inline-end: ${Spacing.XL}px;\n`;\n\nexport const dropdownMobileWrapperCss = css`\n  ${mobileMediaQuery} {\n    position: relative;\n  }\n\n  ${nonMobileMediaQuery} {\n    display: none;\n  }\n`;\n\nexport const dropdownMobileCss = css`\n  ${mobileMediaQuery} {\n    width: 100%;\n  }\n`;\n\nexport const dropdownTextCss = css`\n  cursor: pointer;\n  font-family: inherit;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n\n  *[dir='rtl'] & {\n    text-align: right;\n  }\n\n  ${mobileMediaQuery} {\n    background: none;\n    border: none;\n    padding-block: ${Spacing.XS}px;\n    padding-inline-end: ${Spacing.XL}px;\n    /* stylelint-disable-next-line property-no-vendor-prefix */\n    -webkit-appearance: none;\n    appearance: none;\n    width: 100%;\n  }\n`;\n\nexport const dropdownMainTextCss = css`\n  font-size: 24px;\n  font-weight: 600;\n  line-height: 32px;\n\n  ${mobileMediaQuery} {\n    ${MobileHeading.M400};\n    line-height: 28px;\n  }\n`;\n\nexport const dropdownSecondaryTextCss = css`\n  color: ${m('--fg-color')};\n  font-size: 14px;\n  font-weight: 500;\n  line-height: 20px;\n  margin-inline-end: ${Spacing.XS}px;\n  width: 100%;\n`;\n\nexport const caratCss = css`\n  font-size: 16px;\n  pointer-events: none;\n\n  svg {\n    fill: ${m('--fg-color')};\n  }\n\n  ${nonMobileMediaQuery} {\n    margin-block-start: 3px;\n    margin-inline-start: 9px;\n\n    *[dir='rtl'] & {\n      margin-right: ${Spacing.XS}px;\n    }\n  }\n\n  ${mobileMediaQuery} {\n    position: absolute;\n    right: 4px;\n    top: 50%;\n    transform: translateY(-50%);\n\n    *[dir='rtl'] & {\n      left: 4px;\n      right: auto;\n    }\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport type React from 'react';\nimport type { FC, MouseEventHandler } from 'react';\nimport { memo, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { BrowserFeaturesContext, isMobileOs } from '../../BrowserFeatures';\nimport { mobileMaxWidth } from '../../constants';\nimport { MessageContext } from '../../contexts/MessageContext';\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { dataSetToAttributes, getBackgroundClassName } from '../../utils';\nimport { useWindowSize } from '../../utils/useWindowSize';\nimport { Icon } from '../Icon';\nimport { SideNavigationLinks } from './SideNavigationLinks';\nimport {\n  caratCss,\n  containerCss,\n  navigatorItemButtonActiveCss,\n  navigatorItemButtonCss,\n  navigatorItemButtonOpenCss,\n  sectionButtonCss,\n  sideNavIconCss,\n  sideNavMobileIconCss,\n  wrapperCss,\n  wrapperShadowCss,\n} from './styles';\nimport type { SideNavigationProps } from './types';\n\n// TODO: refactor this component, does not follow our code style\nexport const SideNavigation: FC<SideNavigationProps> = memo(\n  ({\n    className,\n    items,\n    isUrlCurrent,\n    dataset,\n    motifScheme,\n    backgroundColor,\n    motifSchemeMobile,\n    mobileBackgroundColor,\n    onSectionClick,\n  }) => {\n    useMotifStyles(MotifComponent.SIDE_NAVIGATION);\n\n    const browserFeatures = useContext(BrowserFeaturesContext);\n    const { formatMessage } = useContext(MessageContext);\n    const { width: windowWidth } = useWindowSize();\n    const isMobile = isMobileOs(browserFeatures);\n    const containerRef = useRef<HTMLElement | null>(null);\n    const sectionsRefs = useRef<Array<HTMLButtonElement | null>>([]);\n    const defaultSection = items.findIndex(section =>\n      section.links.find(link => isUrlCurrent?.(link.url))\n    );\n    const [activeSection, setActiveSection] = useState<number | null>(defaultSection);\n    const [isVisible, setIsVisible] = useState<boolean>(!isMobile);\n\n    // This changes the active section when the URL changes.\n    // TODO: Think if there's a more elegant solution.\n    useEffect(() => {\n      setActiveSection(defaultSection);\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [isUrlCurrent]);\n\n    const isRtl = (): boolean => {\n      return !!containerRef?.current?.closest('[dir=\"rtl\"]');\n    };\n\n    const handleSectionClick =\n      (idx: number): MouseEventHandler =>\n      event => {\n        event.preventDefault();\n        const isExpanding = idx !== activeSection;\n        setActiveSection(isExpanding ? idx : null);\n\n        onSectionClick?.(items[idx]?.title ?? 'unknown', isExpanding, items[idx]?.id);\n      };\n\n    const handleSectionKeyPress = (idx: number) => (event: React.KeyboardEvent) => {\n      // focus next section\n      if (event.key === 'ArrowDown') {\n        const next: HTMLButtonElement | null | undefined = sectionsRefs.current[idx + 1];\n\n        if (next) {\n          next.focus();\n        }\n      }\n\n      // focus previous section\n      if (event.key === 'ArrowUp') {\n        const prev: HTMLButtonElement | null | undefined = sectionsRefs.current[idx - 1];\n\n        if (prev) {\n          prev.focus();\n        }\n      }\n\n      // open/close section\n      if (event.key === 'ArrowRight') {\n        setActiveSection(isRtl() ? null : idx);\n      }\n\n      if (event.key === 'ArrowLeft') {\n        setActiveSection(isRtl() ? idx : null);\n      }\n    };\n\n    const focusSection = (idx: number) => {\n      const section: HTMLButtonElement | null | undefined = sectionsRefs.current[idx];\n\n      if (section) {\n        section.focus();\n      }\n    };\n\n    const toggleIsVisible = () => {\n      setIsVisible(!isVisible);\n    };\n\n    const showTopBar = useMemo(() => windowWidth && windowWidth <= mobileMaxWidth, [windowWidth]);\n\n    useEffect(() => {\n      setIsVisible(!showTopBar);\n    }, [showTopBar]);\n\n    const secondaryNavigationLabel = formatMessage({\n      id: 'secondaryNavigationLabel',\n      defaultMessage: 'Secondary Navigation',\n    });\n\n    return (\n      <section\n        data-testid=\"sdsm-side-navigation\"\n        className={cx(\n          MotifComponent.SIDE_NAVIGATION,\n          showTopBar\n            ? motifSchemeMobile ?? getBackgroundClassName(mobileBackgroundColor)\n            : motifScheme ?? getBackgroundClassName(backgroundColor),\n          wrapperCss,\n          {\n            [wrapperShadowCss]: !isVisible,\n          },\n          className\n        )}\n      >\n        <button\n          type=\"button\"\n          data-testid=\"sdsm-side-navigation-mobile-toggle\"\n          aria-label={items[defaultSection]?.title ?? secondaryNavigationLabel}\n          className={sectionButtonCss}\n          onClick={toggleIsVisible}\n        >\n          <span>{items[defaultSection]?.title ?? secondaryNavigationLabel}</span>\n          <Icon className={sideNavMobileIconCss} name={isVisible ? 'chevron-up' : 'chevron-down'} />\n        </button>\n        <nav\n          data-testid=\"sdsm-side-navigation-links\"\n          aria-label={secondaryNavigationLabel}\n          ref={containerRef}\n          className={containerCss}\n          style={{ display: isVisible ? 'block' : 'none' }}\n          {...dataSetToAttributes(dataset)}\n        >\n          <ul role=\"menubar\" aria-label={secondaryNavigationLabel}>\n            {items.map((section, idx) => {\n              const sectionHasActiveLink = section.links.some(link => isUrlCurrent?.(link.url));\n\n              return (\n                <li key={idx}>\n                  <button\n                    ref={el => {\n                      sectionsRefs.current[idx] = el;\n                    }}\n                    type=\"button\"\n                    onKeyDown={handleSectionKeyPress(idx)}\n                    onClick={handleSectionClick(idx)}\n                    role=\"menuitem\"\n                    aria-haspopup={items[idx]!.links.length > 0}\n                    aria-expanded={activeSection === idx}\n                    className={cx(navigatorItemButtonCss, {\n                      [navigatorItemButtonOpenCss]: activeSection === idx,\n                      [navigatorItemButtonActiveCss]: sectionHasActiveLink,\n                    })}\n                    tabIndex={0}\n                    aria-label={section.title}\n                  >\n                    <span {...dataSetToAttributes(section.dataset)}>{section.title}</span>\n                    <span className={caratCss}>\n                      <Icon\n                        className={sideNavIconCss}\n                        name={activeSection === idx ? 'chevron-up' : 'chevron-down'}\n                        size={18}\n                      />\n                      <Icon\n                        className={sideNavIconCss}\n                        name={activeSection === idx ? 'chevron-up' : 'chevron-down'}\n                        size={18}\n                      />\n                      <Icon\n                        className={sideNavIconCss}\n                        name={activeSection === idx ? 'chevron-up' : 'chevron-down'}\n                        size={18}\n                      />\n                    </span>\n                  </button>\n\n                  <ul\n                    role=\"menu\"\n                    aria-label={section.title}\n                    style={{\n                      display: activeSection === idx ? 'block' : 'none',\n                    }}\n                  >\n                    <SideNavigationLinks\n                      links={section.links}\n                      isUrlCurrent={isUrlCurrent}\n                      focusSection={() => focusSection(idx)}\n                      isRTL={isRtl}\n                    />\n                  </ul>\n                </li>\n              );\n            })}\n          </ul>\n        </nav>\n      </section>\n    );\n  }\n);\n\nSideNavigation.displayName = 'SideNavigation';\n", "import { cx } from '@emotion/css';\nimport type React from 'react';\nimport type { FC } from 'react';\nimport { useContext, useRef } from 'react';\n\nimport { dataSetToAttributes } from '../../utils';\nimport { isExternal } from '../../utils/domains';\nimport { PrimitivesContext } from '../Primitives';\nimport { activeLinkCss, linkCss } from './styles';\nimport type { SideNavigationItemProps, SideNavigationLinksProps } from './types';\n\nexport const SideNavigationLinks: FC<SideNavigationLinksProps> = ({\n  links,\n  isUrlCurrent,\n  focusSection,\n  isRTL,\n}) => {\n  const linksRefs = useRef<Array<HTMLAnchorElement | null>>([]);\n  const { Anchor } = useContext(PrimitivesContext);\n\n  const handleLinkKeyPress = (idx: number) => (event: React.KeyboardEvent) => {\n    // focus next link\n    if (event.key === 'ArrowDown') {\n      const next: HTMLAnchorElement | null | undefined = linksRefs.current[idx + 1];\n\n      if (next) {\n        next.focus();\n      }\n    }\n\n    // focus previous link\n    if (event.key === 'ArrowUp') {\n      const prev: HTMLAnchorElement | null | undefined = linksRefs.current[idx - 1];\n\n      if (prev) {\n        prev.focus();\n      }\n    }\n\n    // focus parent section\n    if (event.key === (isRTL() ? 'ArrowRight' : 'ArrowLeft')) {\n      focusSection();\n    }\n  };\n\n  const handleOnClick = (url: string) => () => {\n    if (isExternal(url)) {\n      requestAnimationFrame(() => window.scrollTo(0, 0));\n    }\n  };\n\n  const createLink = (link: SideNavigationItemProps, id: number) => {\n    const linkProps = {\n      ref: (element: HTMLAnchorElement) => {\n        linksRefs.current[id] = element;\n      },\n      onKeyDown: handleLinkKeyPress(id),\n      onClick: handleOnClick(link.url),\n      role: 'menuitem',\n    };\n\n    const ariaCurrent = isUrlCurrent?.(link.url) ? 'page' : undefined;\n\n    return (\n      // eslint-disable-next-line react/jsx-no-target-blank\n      <Anchor\n        href={link.url}\n        target={link.inNewTab ? '_blank' : undefined}\n        rel={link.inNewTab ? 'noopener' : undefined}\n        {...linkProps}\n        aria-current={ariaCurrent}\n      >\n        {link.title}\n      </Anchor>\n    );\n  };\n\n  return (\n    <>\n      {links.map((link, idx) => {\n        const isCurrent = isUrlCurrent?.(link.url);\n        return (\n          <li\n            key={idx}\n            className={cx(linkCss, {\n              [activeLinkCss]: isCurrent,\n            })}\n            {...dataSetToAttributes(link.dataset)}\n          >\n            {createLink(link, idx)}\n          </li>\n        );\n      })}\n    </>\n  );\n};\n", "import { css } from '@emotion/css';\n\nimport {\n  extraLargeDesktopWidth,\n  maxWidth,\n  mobileMediaQuery,\n  nonMobileMediaQuery,\n  nonTwoColumnCollapseMediaQuery,\n  twoColumnCollapseMediaQuery,\n} from '../../../constants';\nimport { m } from '../../../motif/m';\nimport { desktopSideNavWidthPx } from '../../SideNavigation';\n\nexport const wrapperCss = css`\n  color: ${m('--footer-bar-fg-color')};\n  background-color: ${m('--footer-bar-bg-color')};\n  border-top: 1px solid ${m('--footer-bar-divider-border-color')};\n  display: flex;\n  justify-content: center;\n`;\n\nexport const footerBarContainerCss = css`\n  display: flex;\n  justify-content: center;\n  max-width: ${extraLargeDesktopWidth}px;\n  width: 100%;\n`;\n\nexport const footerBarContainerOffsetCss = css`\n  @media screen and (min-width: ${maxWidth + 1}px) {\n    padding-inline-start: ${desktopSideNavWidthPx}px;\n  }\n`;\n\n/**\n * Unsets max-width to allow for 1920 width footer bar content. We unset since the max width is set\n * on the parent footerBarContainerCss\n */\nexport const footerBarFullWidthCss = css`\n  max-width: unset;\n`;\n\nexport const footerBarCss = css`\n  box-sizing: border-box;\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n  max-width: ${maxWidth}px;\n  padding-block: ${m('--spacing-xl')};\n  position: relative;\n  white-space: nowrap;\n  width: 100%;\n\n  ${nonMobileMediaQuery} {\n    padding-block: ${m('--spacing-s')};\n    padding-inline: ${m('--spacing-xl')};\n  }\n\n  ${twoColumnCollapseMediaQuery} {\n    gap: 27px;\n    padding-block: ${m('--spacing-l')};\n    padding-inline: ${m('--spacing-xxxxl')};\n  }\n\n  ${nonTwoColumnCollapseMediaQuery} {\n    flex-direction: row;\n    gap: 0;\n    padding-inline: ${m('--spacing-xxxxl')};\n\n    div {\n      width: auto;\n    }\n  }\n\n  ${mobileMediaQuery} {\n    gap: 0;\n    padding-inline: ${m('--spacing-xl')};\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport { getBackgroundClassName } from '../../../utils';\nimport {\n  footerBarClassName,\n  footerBarContainerClassName,\n  footerBarWrapperClassName,\n} from '../Footer.constants';\nimport {\n  footerBarContainerCss,\n  footerBarContainerOffsetCss,\n  footerBarCss,\n  wrapperCss,\n} from './styles';\nimport type { FooterBarProps } from './types';\n\nexport const FooterBar: FC<FooterBarProps> = ({ children, backgroundColor, hasSideNav }) => {\n  return (\n    <div\n      data-testid=\"footer-bar\"\n      className={cx(footerBarWrapperClassName, getBackgroundClassName(backgroundColor), wrapperCss)}\n    >\n      <div\n        className={cx(footerBarContainerClassName, footerBarContainerCss, {\n          [footerBarContainerOffsetCss]: hasSideNav,\n        })}\n      >\n        <div className={cx(footerBarClassName, footerBarCss)}>{children}</div>\n      </div>\n    </div>\n  );\n};\n", "import type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { MediaMode } from '../../../constants';\nimport { FooterContext } from '../FooterContext';\nimport { FooterColumnsDesktop } from './FooterColumnsDesktop';\nimport { FooterColumnsMobile } from './FooterColumnsMobile';\nimport type { FooterColumnsProps } from './types';\n\nexport const FooterColumns: FC<FooterColumnsProps> = ({ children, ...props }) => {\n  const { mode } = useContext(FooterContext);\n\n  if (mode === MediaMode.Mobile) {\n    return <FooterColumnsMobile {...props}>{children}</FooterColumnsMobile>;\n  }\n\n  return <FooterColumnsDesktop {...props}>{children}</FooterColumnsDesktop>;\n};\n", "import { createContext } from 'react';\n\nimport type { MediaMode } from '../../constants';\n\ninterface FooterContextProps {\n  mode?: MediaMode;\n  expandedItem?: string;\n  setExpandedItem?: (id?: string) => void;\n}\n\nexport const FooterContext = createContext<FooterContextProps>({});\n", "import { css } from '@emotion/css';\n\nimport {\n  extraLargeDesktopWidth,\n  maxWidth,\n  nonTwoColumnCollapseMediaQuery,\n  twoColumnCollapseMediaQuery,\n} from '../../../constants';\nimport { m } from '../../../motif/m';\nimport { desktopSideNavWidthPx } from '../../SideNavigation';\n\nexport const wrapperCss = css`\n  border-top-color: ${m('--footer-border-color')};\n  border-top-style: solid;\n  border-top-width: 1px;\n  color: ${m('--footer-fg-color')};\n  background-color: ${m('--footer-bg-color')};\n  display: flex;\n  justify-content: center;\n`;\n\nexport const footerColumnsDesktopContainerCss = css`\n  display: flex;\n  justify-content: center;\n  max-width: ${extraLargeDesktopWidth}px;\n  width: 100%;\n`;\n\nexport const footerColumnsDesktopContainerOffsetCss = css`\n  @media screen and (min-width: ${maxWidth + 1}px) {\n    padding-inline-start: ${desktopSideNavWidthPx}px;\n  }\n`;\n\nexport const footerColumnsDesktopCss = css`\n  box-sizing: border-box;\n  display: flex;\n  flex-wrap: wrap;\n  gap: ${m('--spacing-m')};\n  max-width: ${maxWidth}px;\n  padding-block: ${m('--spacing-xl')};\n  padding-inline: ${m('--spacing-l')};\n  width: 100%;\n\n  ${twoColumnCollapseMediaQuery} {\n    padding-inline: ${m('--spacing-xxxxl')};\n  }\n\n  ${nonTwoColumnCollapseMediaQuery} {\n    padding-inline: ${m('--spacing-xxxxl')};\n  }\n`;\n\nexport const footerColumnsCenteredCss = css`\n  justify-content: space-between;\n`;\n\nexport const footerColumnMobileItemsCss = css`\n  box-sizing: border-box;\n`;\n\nexport const footerColumnMobileCss = css`\n  align-items: center;\n  border-top: 1px solid ${m('--footer-divider-border-color')};\n  color: ${m('--footer-fg-color')};\n  background-color: ${m('--footer-bg-color')};\n  display: block;\n  padding-block: ${m('--spacing-xl')} ${m('--spacing-xl')};\n  padding-inline: ${m('--spacing-xl')};\n`;\n\nexport const oneColumnWidthCss = css`\n  > div {\n    width: 100%;\n  }\n`;\n\n// formula: (100% - {min gap width} * {number of columns per row - 1}) / {number of columns per row}\nexport const twoColumnWidthCss = css`\n  > div {\n    width: calc((100% - ${m('--spacing-m')}) / 2);\n  }\n`;\nexport const threeColumnWidthCss = css`\n  > div {\n    width: calc((100% - (${m('--spacing-m')} * 2)) / 3);\n  }\n`;\nexport const fourColumnWidthCss = css`\n  > div {\n    width: calc((100% - (${m('--spacing-m')} * 3)) / 4);\n  }\n`;\nexport const fiveOrMoreColumnWidthCss = css`\n  > div {\n    width: calc((100% - (${m('--spacing-m')} * 4)) / 5);\n  }\n\n  ${nonTwoColumnCollapseMediaQuery} {\n    > div {\n      width: calc((100% - (${m('--spacing-m')} * 5)) / 6);\n    }\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport {\n  footerColumnsDesktopContainerClassName,\n  footerColumnsDesktopWrapperClassName,\n} from '../Footer.constants';\nimport {\n  fiveOrMoreColumnWidthCss,\n  footerColumnsCenteredCss,\n  footerColumnsDesktopContainerCss,\n  footerColumnsDesktopContainerOffsetCss,\n  footerColumnsDesktopCss,\n  fourColumnWidthCss,\n  oneColumnWidthCss,\n  threeColumnWidthCss,\n  twoColumnWidthCss,\n  wrapperCss,\n} from './styles';\nimport type { FooterColumnsProps } from './types';\n\nexport const FooterColumnsDesktop: FC<FooterColumnsProps> = ({ hasSideNav, children }) => {\n  let footerStyle = cx(footerColumnsDesktopCss);\n\n  const childrenLength = Array.isArray(children) ? children.filter(child => !!child).length : 1;\n\n  switch (childrenLength) {\n    case 1:\n      footerStyle = cx(footerColumnsDesktopCss, oneColumnWidthCss);\n      break;\n    case 2:\n      footerStyle = cx(footerColumnsDesktopCss, twoColumnWidthCss);\n      break;\n    case 3:\n      footerStyle = cx(footerColumnsDesktopCss, threeColumnWidthCss);\n      break;\n    case 4:\n      footerStyle = cx(footerColumnsDesktopCss, fourColumnWidthCss);\n      break;\n    default:\n      footerStyle = cx(footerColumnsDesktopCss, fiveOrMoreColumnWidthCss);\n      break;\n  }\n\n  if (childrenLength <= 6) {\n    footerStyle = cx(footerStyle, footerColumnsCenteredCss);\n  }\n\n  return (\n    <article\n      data-testid=\"footer-columns-desktop\"\n      className={cx(footerColumnsDesktopWrapperClassName, wrapperCss)}\n    >\n      <div\n        className={cx(footerColumnsDesktopContainerClassName, footerColumnsDesktopContainerCss, {\n          [footerColumnsDesktopContainerOffsetCss]: hasSideNav,\n        })}\n      >\n        <div className={footerStyle}>{children}</div>\n      </div>\n    </article>\n  );\n};\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport { useState } from 'react';\n\nimport { MediaMode } from '../../../constants';\nimport { getBackgroundClassName } from '../../../utils';\nimport { FooterContext } from '../FooterContext';\nimport type { FooterV2Props } from '../types';\nimport { footerColumnMobileCss, footerColumnMobileItemsCss } from './styles';\n\nexport const FooterColumnsMobile: FC<FooterV2Props> = ({ children, backgroundColor }) => {\n  const [expandedItem, setExpandedItem] = useState<string | undefined>();\n\n  return (\n    <FooterContext.Provider\n      value={{\n        mode: MediaMode.Mobile,\n        expandedItem,\n        setExpandedItem,\n      }}\n    >\n      <div\n        data-testid=\"footer-columns-mobile\"\n        className={cx(\n          getBackgroundClassName(backgroundColor),\n          footerColumnMobileCss,\n          footerColumnMobileItemsCss\n        )}\n      >\n        {children}\n      </div>\n    </FooterContext.Provider>\n  );\n};\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport { useContext, useMemo } from 'react';\n\nimport { MediaMode } from '../../../constants';\nimport { DetailsSummary } from '../../DetailsSummary';\nimport { globalNavGroupAnimationDurationMs } from '../../GlobalHeader/GlobalHeader.constants';\nimport { FooterContext } from '../FooterContext';\nimport {\n  footerColumnListCss,\n  footerGroupCss,\n  footerHeaderCss,\n  footerHeaderSpacingCss,\n  footerHorizontalLayoutCss,\n} from './styles';\nimport type { FooterGroupProps } from './types';\nimport { Orientation } from './types';\n\nexport const FooterGroup: FC<FooterGroupProps> = ({\n  id,\n  children,\n  title,\n  orientation = Orientation.Vertical,\n  isFooterBar,\n  onToggle,\n}) => {\n  const { mode } = useContext(FooterContext);\n\n  const containerClassName = cx(footerGroupCss, {\n    [footerHorizontalLayoutCss]: orientation === Orientation.Horizontal,\n  });\n\n  const footerHeaderClassName = cx(footerHeaderCss, {\n    [footerHeaderSpacingCss]: orientation === Orientation.Vertical,\n  });\n\n  const header = useMemo(() => {\n    if (!title) {\n      return null;\n    }\n\n    if (typeof title !== 'string') {\n      return title;\n    }\n\n    return (\n      <div className={footerHeaderClassName}>\n        <span>{title}</span>\n      </div>\n    );\n  }, [title, footerHeaderClassName]);\n\n  const childrenWrapper = useMemo(() => {\n    if (!children) {\n      return null;\n    }\n\n    return (\n      <ul\n        className={cx(footerColumnListCss, {\n          [footerHorizontalLayoutCss]: orientation === Orientation.Horizontal,\n        })}\n      >\n        {children}\n      </ul>\n    );\n  }, [children, orientation]);\n\n  // Adding this here because using an open detail summary\n  // for the footer bar items causes automatic scroll to the footer (bug)\n  // follow up: https://jira.sc-corp.net/browse/ENTWEB-7631\n  if (isFooterBar && mode === MediaMode.Mobile) {\n    return (\n      <ul\n        className={cx(footerColumnListCss, {\n          [footerHorizontalLayoutCss]: orientation === Orientation.Horizontal,\n        })}\n      >\n        {children}\n      </ul>\n    );\n  }\n\n  return mode === MediaMode.Mobile ? (\n    <DetailsSummary\n      showChevron={!!title}\n      summary={title}\n      summaryProps={{ className: footerHeaderClassName }}\n      className={containerClassName}\n      fadeInAnimation\n      transitionDurationMs={globalNavGroupAnimationDurationMs}\n      disableScrollToOnOpen={isFooterBar}\n      onToggle={() => {\n        const titleStr = typeof title === 'string' ? title : 'unknown';\n        onToggle?.(id, titleStr);\n      }}\n    >\n      {childrenWrapper}\n    </DetailsSummary>\n  ) : (\n    <div data-testid=\"footer-group\" className={containerClassName}>\n      {header}\n      {childrenWrapper}\n    </div>\n  );\n};\n", "import { css } from '@emotion/css';\n\nimport {\n  mobileMediaQuery,\n  nonMobileMediaQuery,\n  nonTwoColumnCollapseMediaQuery,\n} from '../../../constants';\nimport { m } from '../../../motif/m';\n\nexport const footerHeaderCss = css`\n  font-weight: ${m('--footer-bar-header-font-weight')};\n  text-transform: ${m('--footer-bar-header-mobile-font-text-transform')};\n  padding-inline-end: ${m('--spacing-xl')};\n  word-break: break-word;\n\n  ${nonMobileMediaQuery} {\n    padding-inline-end: 0;\n    text-transform: ${m('--footer-bar-header-desktop-font-text-transform')};\n  }\n`;\n\nexport const footerHeaderSpacingCss = css`\n  ${nonMobileMediaQuery} {\n    margin-block-end: ${m('--spacing-xs')};\n  }\n`;\n\nexport const footerGroupCss = css`\n  border-bottom: 1px solid ${m('--footer-border-color')};\n  font-size: ${m('--footer-desktop-font-size')};\n  line-height: 16px;\n  padding-block: ${m('--spacing-m')};\n  padding-inline: 0 ${m('--spacing-m')};\n  color: ${m('--fg-color')};\n\n  &:first-child {\n    padding-block-start: ${m('--spacing-s')};\n  }\n\n  &:last-child {\n    border-bottom: 0;\n  }\n\n  ${nonMobileMediaQuery} {\n    border-bottom: 0;\n    padding-bottom: ${m('--spacing-xxs')};\n    padding-inline: 0;\n    padding-top: 0;\n\n    &:first-child {\n      padding-block-start: 0;\n    }\n  }\n\n  ${mobileMediaQuery} {\n    font-size: ${m('--footer-mobile-font-size')};\n    font-weight: ${m('--action-mobile-font-weight')};\n  }\n`;\n\nexport const footerColumnListCss = css`\n  display: flex;\n  flex-direction: column;\n  list-style-type: none;\n  margin: 0;\n  padding-block: ${m('--spacing-s')} 0;\n  padding-inline: 0;\n  width: 100%;\n\n  ${nonMobileMediaQuery} {\n    padding: 0;\n  }\n`;\n\nexport const footerHorizontalLayoutCss = css`\n  a {\n    margin-inline: 0;\n    white-space: unset;\n  }\n\n  li {\n    margin: 0;\n  }\n\n  align-items: flex-start;\n  border: 0;\n  display: flex;\n  flex-direction: column;\n  gap: ${m('--spacing-m')};\n  padding-block: ${m('--spacing-s')};\n\n  ${nonMobileMediaQuery} {\n    align-items: center;\n    flex-direction: row;\n    gap: ${m('--spacing-l')};\n    padding-block: 0;\n\n    &:first-child {\n      padding-block-start: 0;\n    }\n  }\n\n  ${nonTwoColumnCollapseMediaQuery} {\n    &:first-child {\n      margin-inline-start: 0;\n    }\n\n    &:last-child {\n      margin-inline-end: 0;\n    }\n  }\n`;\n", "import type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { PrimitivesContext } from '../../Primitives';\nimport { footerItemContainerCss, footerItemCss } from './styles';\nimport type { FooterItemProps } from './types';\n\nexport const FooterItemV2: FC<FooterItemProps> = ({ id, url, title, onClick }) => {\n  const { Anchor } = useContext(PrimitivesContext);\n  return (\n    <li data-testid=\"footer-item\" id={id} className={footerItemContainerCss}>\n      <Anchor href={url} onClick={onClick} className={footerItemCss}>\n        {title}\n      </Anchor>\n    </li>\n  );\n};\n", "import { css } from '@emotion/css';\n\nimport { nonMobileMediaQuery } from '../../../constants';\nimport { m } from '../../../motif/m';\n\nexport const footerItemContainerCss = css`\n  margin: ${m('--spacing-s')} 0;\n\n  ${nonMobileMediaQuery} {\n    margin: ${m('--spacing-xxs')} 0;\n  }\n`;\n\nexport const footerItemCss = css`\n  color: ${m('--action-text-default-color')};\n  /* Set font-family here or the var from the default motif is used */\n  font-family: ${m('--font-family')};\n  font-size: ${m('--footer-desktop-font-size')};\n  font-weight: ${m('--action-desktop-font-weight')};\n  text-decoration: none;\n  white-space: pre-wrap;\n\n  @media (hover: hover) {\n    &:hover {\n      color: ${m('--action-text-hover-color')};\n      text-decoration: underline;\n      text-decoration-thickness: ${m('--spacing-xxxs')};\n      text-underline-offset: ${m('--spacing-xxxs')};\n    }\n  }\n\n  ${nonMobileMediaQuery} {\n    margin: 0;\n    margin-inline-end: ${m('--spacing-s')};\n  }\n`;\n", "import { css } from '@emotion/css';\n\nimport { extraLargeDesktopWidth, maxWidth, nonMobileMediaQuery } from '../../../constants';\nimport { m } from '../../../motif/m';\nimport { desktopSideNavWidthPx } from '../../SideNavigation';\n\nexport const wrapperCss = css`\n  color: ${m('--footer-fg-color')};\n  background-color: ${m('--footer-bg-color')};\n  border-top-color: ${m('--footer-divider-border-color')};\n  border-top-style: solid;\n  border-top-width: 2px;\n  display: flex;\n  justify-content: center;\n  width: 100%;\n`;\n\nexport const footerSocialContainerCss = css`\n  display: flex;\n  justify-content: center;\n  max-width: ${extraLargeDesktopWidth}px;\n  width: 100%;\n`;\n\nexport const footerSocialContainerOffsetCss = css`\n  @media screen and (min-width: ${maxWidth + 1}px) {\n    padding-inline-start: ${desktopSideNavWidthPx}px;\n  }\n`;\n\nexport const footerSocialCss = css`\n  align-items: center;\n  color: ${m('--fg-color')};\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  gap: ${m('--spacing-l')};\n  max-width: ${maxWidth}px;\n  padding-block: ${m('--spacing-m')};\n  padding-inline: ${m('--spacing-xl')};\n  position: relative;\n  width: 100%;\n\n  ${nonMobileMediaQuery} {\n    flex-direction: row;\n    justify-content: center;\n    padding-block: ${m('--spacing-m')};\n    padding-inline: ${m('--spacing-xxxxl')};\n  }\n`;\n\nexport const footerSocialIconsWrapperCss = css`\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: ${m('--spacing-s')};\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport { footerSocialClassName, footerSocialWrapperClassName } from '../Footer.constants';\nimport {\n  footerSocialContainerCss,\n  footerSocialContainerOffsetCss,\n  footerSocialCss,\n  footerSocialIconsWrapperCss,\n  wrapperCss,\n} from './styles';\nimport type { FooterSocialProps } from './types';\n\nexport const FooterSocial: FC<FooterSocialProps> = ({ title, hasSideNav, children }) => {\n  return (\n    <section data-testid=\"footer-social\" className={cx(footerSocialWrapperClassName, wrapperCss)}>\n      <div\n        className={cx(footerSocialClassName, footerSocialContainerCss, {\n          [footerSocialContainerOffsetCss]: hasSideNav,\n        })}\n      >\n        <div className={footerSocialCss}>\n          {title && <h5>{title}</h5>}\n          <div className={footerSocialIconsWrapperCss}>{children}</div>\n        </div>\n      </div>\n    </section>\n  );\n};\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport { useMediaMode } from '../../hooks/useMediaMode';\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { getBackgroundClassName } from '../../utils/themeUtils';\nimport { FooterContext } from './FooterContext';\nimport type { FooterV2Props } from './types';\n\nexport const FooterV2: FC<FooterV2Props> = ({\n  children,\n  motifScheme,\n  backgroundColor,\n  className,\n}) => {\n  const mode = useMediaMode();\n  useMotifStyles(MotifComponent.FOOTER);\n\n  return (\n    <FooterContext.Provider\n      value={{\n        mode,\n      }}\n    >\n      <footer\n        data-testid=\"footer-v2\"\n        className={cx(\n          MotifComponent.FOOTER,\n          motifScheme ?? getBackgroundClassName(backgroundColor),\n          className\n        )}\n      >\n        {children}\n      </footer>\n    </FooterContext.Provider>\n  );\n};\n", "/* stylelint-disable no-duplicate-selectors */\nimport { css } from '@emotion/css';\n\nimport { maxWidth, mobileMediaQuery, nonMobileMediaQuery } from '../../constants';\nimport { m, p3Css } from '../../motif';\n\nexport const footnoteCss = css`\n  box-sizing: border-box;\n  display: flex;\n  gap: 0.25em;\n  margin: 0 auto ${m('--spacing-m')};\n  max-width: ${maxWidth}px;\n  padding: 0 ${m('--spacing-xl')};\n  ${p3Css}\n\n  ${mobileMediaQuery} {\n    padding: 0 ${m('--spacing-m')};\n  }\n\n  p {\n    margin-bottom: 0;\n  }\n\n  a {\n    ${p3Css}\n\n    ${nonMobileMediaQuery} {\n      font-weight: ${m('--hyperlink-desktop-font-weight')};\n    }\n\n    ${mobileMediaQuery} {\n      font-weight: ${m('--hyperlink-mobile-font-weight')};\n    }\n  }\n`;\n\nexport const footnoteSuperscriptCss = css`\n  font-size: 10px;\n  line-height: 18px;\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC, ReactNode } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { Superscript } from '../Primitives';\nimport { footnoteCss, footnoteSuperscriptCss } from './Footnote.styled';\n\nexport interface FootnoteProps {\n  index: string;\n  children?: ReactNode;\n}\n\nexport const Footnote: FC<FootnoteProps> = ({ index, children }) => {\n  useMotifStyles(MotifComponent.FOOTNOTE);\n  return (\n    <div data-testid=\"sdsm-footnote\" className={cx(MotifComponent.FOOTNOTE, footnoteCss)}>\n      {/* Note: The whitespace after \"index\" is important. It ensures that the browser never considers\n      the footnote index as a part of the footnote content (i.e. \"children\"). This can happen if\n      the footnote content begins with a roman numeral (i.e. 1, 2, 3 etc...) and causes problems\n      in RTL locales */}\n      <span className={footnoteSuperscriptCss}>\n        <Superscript>{index} </Superscript>\n      </span>\n      {/* Wrap the children with a single parent element to prevent unintended flexbox layouts when\n      children is an array */}\n      <span>{children}</span>\n    </div>\n  );\n};\n\nFootnote.displayName = 'Footnote';\n", "import { cx } from '@emotion/css';\nimport type { FC, PropsWithChildren } from 'react';\nimport { Children, useCallback, useRef, useState } from 'react';\n\nimport { m } from '../../motif/m';\nimport type { BaseComponentProps } from '../../types';\nimport { itemChevronCss } from '../Accordion/AccordionItem/styles';\nimport { DetailsSummary } from '../DetailsSummary';\nimport {\n  footnoteAccordionItemContentCss,\n  footnoteAccordionItemSummaryCss,\n  footnoteDetailsCss,\n  footnotesContentCss,\n  footnotesCss,\n  footnotesPrintCss,\n} from './FootnoteBlock.styles';\n\nexport const footnoteBlockBackgroundColor = 'White';\n\ninterface FootnoteBlockProps extends PropsWithChildren<BaseComponentProps> {\n  title: string;\n  isOpenInitially: boolean;\n}\n\nconst animationDuration = 300;\n\nconst chevronProps = { className: itemChevronCss, fill: m('--icon-color') };\nconst summaryProps = {\n  className: footnoteAccordionItemSummaryCss,\n};\n\nexport const FootnoteBlock: FC<FootnoteBlockProps> = ({\n  title,\n  isOpenInitially,\n  children,\n  className,\n}) => {\n  const [open, setOpen] = useState(isOpenInitially);\n  const detailsRef = useRef<HTMLDetailsElement | null>(null);\n\n  const onToggle = useCallback(() => {\n    setOpen(open => !open);\n  }, []);\n\n  if (Children.count(children) === 0) {\n    return null;\n  }\n\n  return (\n    <footer data-testid=\"sdsm-footnotes\" className={cx(footnotesCss, className)}>\n      <div className={footnotesContentCss}>\n        {/* Show for print, hide for screen */}\n        <div className={footnotesPrintCss}>\n          <h2 className={footnoteAccordionItemSummaryCss}>{title}</h2>\n          {children}\n        </div>\n        <DetailsSummary\n          summary={title}\n          detailsRef={detailsRef}\n          chevronProps={chevronProps}\n          className={footnoteDetailsCss}\n          summaryProps={summaryProps}\n          onToggle={onToggle}\n          fadeInAnimation\n          transitionDurationMs={animationDuration}\n          open={open}\n        >\n          <div className={footnoteAccordionItemContentCss}>{children}</div>\n        </DetailsSummary>\n      </div>\n    </footer>\n  );\n};\n\nFootnoteBlock.displayName = 'FootnoteBlock';\n", "import { css } from '@emotion/css';\n\nimport { maxWidth, mobileMediaQuery } from '../../constants';\nimport { m } from '../../motif/m';\n\nexport const footnotesCss = css`\n  background-color: ${m('--footnote-bg-color')};\n  border-top: 1px solid ${m('--footnote-border-color')};\n`;\n\nexport const footnotesContentCss = css`\n  color: ${m('--footnote-fg-color')};\n  margin: 0px auto;\n  max-width: ${maxWidth}px;\n  padding: 0 ${m('--spacing-xl')};\n\n  ${mobileMediaQuery} {\n    padding: 0 ${m('--spacing-m')};\n  }\n`;\n\nexport const footnotesPrintCss = css`\n  display: none;\n\n  @media print {\n    display: block;\n    padding-block: ${m('--spacing-l')};\n  }\n`;\n\nexport const footnoteDetailsCss = css`\n  padding-bottom: 0;\n\n  @media print {\n    display: none;\n  }\n`;\n\nexport const footnoteAccordionItemSummaryCss = css`\n  color: ${m('--footnote-title-color')};\n  font-size: ${m('--h6-desktop-font-size')};\n  font-weight: 500;\n  height: 92px;\n  line-height: 28px;\n  margin: 0 auto;\n  max-width: ${maxWidth}px;\n  padding-inline-start: ${m('--spacing-xl')};\n\n  ${mobileMediaQuery} {\n    padding: 0 ${m('--spacing-m')};\n  }\n\n  & > svg {\n    background-color: transparent;\n    border-radius: 100%;\n    height: 32px;\n    padding: 6px;\n    transition: background-color 0.2s linear;\n    width: 32px;\n  }\n\n  &:hover {\n    & > svg {\n      background-color: ${m('--footnote-hover-icon-bg-color')};\n    }\n  }\n`;\n\nexport const footnoteAccordionItemContentCss = css`\n  padding-bottom: ${m('--spacing-m')};\n`;\n", "import { cx } from '@emotion/css';\nimport { parseError } from '@snapchat/core';\nimport cloneDeep from 'lodash-es/cloneDeep';\nimport merge from 'lodash-es/merge';\nimport { isEmpty } from 'radashi';\nimport type { FC, ReactNode } from 'react';\nimport { createElement, useCallback, useEffect, useMemo, useReducer } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport type { BaseComponentProps } from '../../types';\nimport type { TriggerEvent } from '../../types/activationEvents';\nimport { Button, ButtonType } from '../Button';\nimport type { FormBody } from './Form.types';\nimport { FormEventType, FormStateType } from './Form.types';\nimport { FormContext } from './FormContext';\nimport { FormErrorMessage } from './FormErrorMessage';\nimport { FormMessage } from './FormMessage';\nimport { formReducer, initialFormState } from './formReducer';\nimport { formCss, placeholderCss, submitButtonCss } from './styles';\n\n/** Proprties for the submit button. */\nexport interface SubmitProps {\n  handleSubmit: () => void;\n  /** Whether the submit button isn't clickable. */\n  disabled: boolean;\n  /** Whether the submission is processing. */\n  loading: boolean;\n  /** Whether the submit button is in success state. */\n  submitSuccess: boolean;\n}\n\n/** Properties for the `Form` component. */\nexport interface FormProps extends BaseComponentProps {\n  /** URL at which to submit the form. */\n  endpoint: string;\n  /** Text of the submit button. */\n  submitText?: string;\n  /** Text to display if the submission succeeds */\n  submitSuccessText?: string;\n  /**\n   * Data-* properties for the submit button.\n   *\n   * TODO: This should be part of the `SubmitProps`\n   */\n  submitTextDataset?: DOMStringMap;\n  /**\n   * Callback if the submission succeeds.\n   *\n   * Users may assume that the form clears.\n   */\n  onSubmitSuccess?: (response: Response, formBody: FormBody) => void;\n\n  /** Callback if the form submission fails. */\n  onSubmitFailure?: (error: Error, formBody: FormBody, response?: Response) => void;\n  className?: string;\n\n  /** Form children. Not that these are not rendered if `formChildrenRenderer` is passed in. */\n  children?: ReactNode;\n  formChildrenRenderer?: FC<SubmitProps>; // allow consumers to render form\n\n  /** Extra key=value pairs to send with the form submission. */\n  extraParams?: FormBody;\n  /** Extra async key-value paris to send with the form submission. */\n  extraParamsAsync?: () => Promise<FormBody>;\n\n  /** Called when form body changes. */\n  onFormBodyChange?: (formBody: FormBody, lastChangedFieldName?: string, isInit?: boolean) => void;\n\n  /**\n   * Error message to render on 400 server response\n   *\n   * @deprecated Use `renderErrorMessage` instead\n   */\n  on400ResponseMessage?: string;\n\n  /**\n   * Error message to render on non-400 server response\n   *\n   * @deprecated Use `renderErrorMessage` instead\n   */\n  on500ResponseMessage?: string;\n\n  /**\n   * Render method that provides content for the error message to be displayed when the form\n   * submission fails\n   */\n  renderErrorMessage?: (statusCode: number) => ReactNode;\n  /** Error message to render on client side invalidation submission */\n  onInvalidClientSideSubmissionMessage?: ReactNode;\n  /** If true, renders error details in an element alongside the error message */\n  renderErrorDetails?: boolean;\n\n  /** Message to indicate how to identify required fields */\n  formRequiredFieldsMessage?: string;\n}\n\n/**\n * The Form component.\n *\n * TODO: Write description.\n */\nexport const Form: FC<FormProps> = ({\n  className,\n  children,\n  endpoint,\n  submitText,\n  submitSuccessText,\n  submitTextDataset,\n  onSubmitSuccess,\n  onSubmitFailure,\n  onFormBodyChange,\n  formChildrenRenderer,\n  extraParams,\n  extraParamsAsync,\n  on400ResponseMessage,\n  on500ResponseMessage,\n  renderErrorMessage,\n  onInvalidClientSideSubmissionMessage,\n  formRequiredFieldsMessage,\n  renderErrorDetails = false,\n}) => {\n  useMotifStyles(MotifComponent.FORM);\n  const [state, dispatch] = useReducer(formReducer, cloneDeep(initialFormState));\n\n  // Memoized form context value that only changes when state object changes.\n  const contextValue = useMemo(() => {\n    return { state, dispatch };\n  }, [state, dispatch]);\n\n  useEffect(() => {\n    onFormBodyChange?.(\n      cloneDeep(state.formBody),\n      state.lastChangedFieldName,\n      state.type === FormStateType.INITIAL\n    );\n  }, [onFormBodyChange, state.formBody, state.lastChangedFieldName, state.type]);\n\n  // On Submit Handling\n  const handleSubmit = useCallback((event?: TriggerEvent) => {\n    event?.preventDefault(); // Stop forms from submitting.\n\n    dispatch({ type: FormEventType.SUBMIT_TRIGGER });\n  }, []);\n\n  // We pipe the submit into 2 phases we can do a validation check in the reducer/\n  // before we submit.\n  useEffect(() => {\n    if (state.type !== FormStateType.SUBMITTING) return;\n\n    async function submitForm() {\n      const extraParamsRealized = (await extraParamsAsync?.().catch(() => ({}))) ?? {};\n      const formBody = merge({}, state.formBody, extraParams, extraParamsRealized);\n\n      try {\n        const response = await fetch(endpoint, {\n          method: 'POST',\n          body: JSON.stringify(formBody),\n          headers: { 'Content-Type': 'application/json' },\n        });\n\n        dispatch({ type: FormEventType.SUBMIT_TRIGGER });\n\n        if (!response.ok) {\n          const payload = await response.text();\n          const error = new Error(\n            `Form submit failed. Server Response: ${response.status} ${response.statusText}.\\r\\n ${payload}`\n          );\n          // This captures non-2XX responses (400 Bad Request, 401 Unauthorized, 500 Internal Server Error, etc.)\n          dispatch({ type: FormEventType.SUBMIT_FAILURE, errorStatusCode: response.status, error });\n          onSubmitFailure?.(error, formBody, response);\n        } else {\n          // This captures 2XX responses only.\n          dispatch({ type: FormEventType.SUBMIT_SUCCESS });\n          onSubmitSuccess?.(response, formBody);\n        }\n      } catch (rawError) {\n        const error = parseError(rawError);\n        // This captures network and unhandled errors.\n        dispatch({ type: FormEventType.SUBMIT_FAILURE, error });\n        onSubmitFailure?.(error, formBody);\n      }\n    }\n\n    void submitForm();\n  }, [\n    endpoint,\n    extraParams,\n    extraParamsAsync,\n    onSubmitFailure,\n    onSubmitSuccess,\n    state.formBody,\n    state.type,\n  ]);\n\n  // TODO: Consider separate useEffects for onSubmitSuccess and onSubmitFailure.\n\n  const disabled =\n    state.type === FormStateType.SUBMITTING ||\n    state.type === FormStateType.SUBMIT_SUCCESS ||\n    isEmpty(state.fields);\n\n  const loading = state.type === FormStateType.SUBMITTING;\n  const submitSuccess = state.type === FormStateType.SUBMIT_SUCCESS;\n  const submitTextValue =\n    state.type === FormStateType.SUBMIT_SUCCESS ? submitSuccessText : submitText;\n\n  let formChildren: ReactNode;\n\n  // TODO: Remove this horrible form child renderer. This has no business\n  // being piped through the SDS-M component.\n  if (formChildrenRenderer) {\n    formChildren = createElement(formChildrenRenderer, {\n      handleSubmit,\n      disabled,\n      loading,\n      submitSuccess,\n    });\n  } else {\n    formChildren = (\n      <>\n        {children}\n        <Button\n          nativeButtonType=\"submit\"\n          onClick={handleSubmit}\n          type={ButtonType.Primary}\n          size=\"Large\"\n          disabled={disabled}\n          // There is a split second where state is both submitted and success state at the same time\n          loading={loading}\n          className={submitButtonCss}\n          buttonTextDataset={submitTextDataset}\n        >\n          {submitTextValue}\n        </Button>\n      </>\n    );\n  }\n\n  return (\n    <FormContext.Provider value={contextValue}>\n      <form className={cx(MotifComponent.FORM, formCss, placeholderCss, className)} noValidate>\n        <FormMessage formRequiredFieldsMessage={formRequiredFieldsMessage} />\n        {formChildren}\n        <FormErrorMessage\n          renderErrorMessage={renderErrorMessage}\n          on400ResponseMessage={on400ResponseMessage}\n          on500ResponseMessage={on500ResponseMessage}\n          onInvalidClientSideSubmissionMessage={onInvalidClientSideSubmissionMessage}\n          renderErrorDetails={renderErrorDetails}\n        />\n      </form>\n    </FormContext.Provider>\n  );\n};\n", "import { noop } from 'radashi';\nimport type React from 'react';\nimport { createContext } from 'react';\n\nimport type { FormAction, FormState } from './Form.types';\nimport { initialFormState } from './formReducer';\n\nexport interface FormContextProps {\n  state: FormState;\n  dispatch: React.Dispatch<FormAction>;\n}\n\nexport const FormContext = createContext<FormContextProps>({\n  state: initialFormState,\n  dispatch: noop,\n});\n", "import clone from 'lodash-es/clone';\nimport merge from 'lodash-es/merge';\n\nimport type { FieldMetadata, FieldValue, FormAction, FormState, Validation } from './Form.types';\nimport { FormEventType, FormStateType } from './Form.types';\n\nexport const validations: Validation = {\n  /** Standard pattern for Email validation (includes non-English characters) */\n  Email: new RegExp(\n    `^$|^(([^<>()[\\\\]\\\\.,;:\\\\s@\"]+(\\\\.[^<>()[\\\\]\\\\.,;:\\\\s@\"]+)*)|(\".+\"))@` +\n      '((\\\\[[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}])|(([a-zA-Z\\\\-0-9]{1,24}\\\\.)+[a-zA-Z]{2,}))$'\n  ),\n  Name: /^(?!\\s*$).+/,\n  /**\n   * Pattern for English only Email Validation (needed for specific 3rd party integrations where the\n   * vendor doesn't support unicode characters e.g. Salesforce)\n   * https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/using_regular_expressions_to_validate_email_addresses.html#validate-email-addresses\n   *\n   * Applies case invariant flag instead of specifying upper case letters in pattern.\n   */\n  'Email (English only)':\n    // NOTE: eslint tries to remove escape characters that are necessary for the pattern to work in jest...\n    // eslint-disable-next-line no-useless-escape\n    /^[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\n};\n\n/** Returns if neither the form nor the any field has errors. */\nfunction checkNoError(state: FormState): boolean {\n  if (state.error) return false;\n\n  for (const name of Object.keys(state.fields)) {\n    if (!state.fields[name]) continue;\n    if (state.fields[name]!.hasError) return false;\n  }\n\n  return true;\n}\n\n/**\n * Checks if a field is invalid based on its value and validation rules.\n *\n * @param field - The field to check for validity.\n * @returns A boolean indicating whether the field is invalid.\n */\nexport const isInvalid = (field: FieldMetadata, value: FieldValue): boolean => {\n  // Invalid if required but empty.\n  if (field.required) {\n    if (Array.isArray(value) && value.length === 0) {\n      return true;\n    }\n\n    if (!Array.isArray(value) && (String(value).trim() === '' || Boolean(value) === false)) {\n      return true;\n    }\n  }\n\n  // Invalid if has validation and validation fails.\n  if (!field.validation || !validations[field.validation] || typeof value !== 'string') {\n    return false;\n  }\n\n  return !validations[field.validation].test(value);\n};\n\nexport const initialFormState: FormState = {\n  type: FormStateType.INITIAL,\n  fields: {},\n  formBody: {},\n};\n\n/** Reducer for the `Form` component. */\nexport function formReducer(state: FormState, action: FormAction): FormState {\n  // Force state re-render even if nothing changes.\n  // This is sadly a requirement for strict mode.\n  // See: https://react.dev/reference/react/useReducer#my-reducer-or-initializer-function-runs-twice\n  // Without this, some events do not work in dev mode.\n  // Note that we don't use `cloneDeep` here because we don't necessarily want to\n  // trigger all the `useEffects` that trigger on `formData`.\n  state = clone(state);\n\n  switch (action.type) {\n    case FormEventType.REGISTER_FIELD: {\n      // NOTE: Doing a mutation for fields that initialize over multiple calls.\n      const metadata = merge(state.fields[action.name] ?? {}, action.field);\n      state.fields[action.name] = metadata;\n      state.formBody[action.name] = action.field.initialValue;\n\n      // In case user already interacted with the form, validate it when registering.\n      if (state.type !== FormStateType.INITIAL) {\n        metadata.hasError = isInvalid(metadata, action.field.initialValue);\n      }\n      break;\n    }\n\n    case FormEventType.CHANGE_FIELD_VALUE: {\n      // Save last changed field name.\n      state.lastChangedFieldName = action.name;\n\n      // Set the new value\n      state.formBody = clone(state.formBody); // Trigger state change for useEffects\n      state.formBody[action.name] = action.value;\n\n      // Update error state.\n      if (!state.fields[action.name]) state.fields[action.name] = {};\n      const metadata = state.fields[action.name]!;\n      metadata.hasError = isInvalid(metadata, action.value);\n\n      // Update state type.\n      state.type = checkNoError(state) ? FormStateType.READY : FormStateType.INVALID;\n      state.error = undefined;\n      break;\n    }\n\n    case FormEventType.INVALIDATE_FIELD: {\n      state.fields[action.name]!.hasError = true;\n      state.type = FormStateType.INVALID;\n      break;\n    }\n\n    case FormEventType.SUBMIT_TRIGGER: {\n      // Validate all fields first.\n      for (const name of Object.keys(state.fields)) {\n        const metadata = state.fields[name];\n        if (!metadata) continue;\n        metadata.hasError = isInvalid(metadata, state.formBody[name]);\n      }\n      // Update state based on validation.\n      state.type = checkNoError(state) ? FormStateType.SUBMITTING : FormStateType.INVALID;\n      break;\n    }\n\n    case FormEventType.SUBMIT_FAILURE: {\n      state.type = FormStateType.SUBMIT_FAILURE;\n      state.errorStatusCode = action.errorStatusCode;\n      state.error = action.error;\n      // NOTE: `formBody` isn't affected.\n      break;\n    }\n\n    case FormEventType.SUBMIT_SUCCESS: {\n      state.type = FormStateType.SUBMIT_SUCCESS;\n\n      state.formBody = {}; // Explicit reset to trigger state changes.\n\n      for (const name of Object.keys(state.fields)) {\n        const meta = state.fields[name]!; // Safe\n        meta.hasError = false;\n        state.formBody[name] = meta.shouldResetToInitial ? meta.initialValue : undefined;\n      }\n      state.error = undefined;\n      break;\n    }\n\n    default: {\n      throw new Error(`Unhandled action type for ${JSON.stringify(action)}`);\n    }\n  }\n\n  return state;\n}\n", "import type { FC, ReactNode } from 'react';\nimport { useContext } from 'react';\n\nimport type { FormProps } from './Form';\nimport { FormStateType } from './Form.types';\nimport { FormContext } from './FormContext';\nimport { errorCodeCss, errorDebugSectionCss, errorMessageCss } from './styles';\n\ntype FormErrorMessageProps = Pick<\n  FormProps,\n  | 'on400ResponseMessage'\n  | 'on500ResponseMessage'\n  | 'renderErrorMessage'\n  | 'onInvalidClientSideSubmissionMessage'\n  | 'renderErrorDetails'\n>;\n\nexport const FormErrorMessage: FC<FormErrorMessageProps> = ({\n  renderErrorMessage,\n  on400ResponseMessage,\n  on500ResponseMessage,\n  onInvalidClientSideSubmissionMessage,\n  renderErrorDetails,\n}) => {\n  const { state } = useContext(FormContext);\n  const { errorStatusCode, error, type } = state;\n\n  if (type === FormStateType.INVALID) {\n    return <div className={errorMessageCss}>{onInvalidClientSideSubmissionMessage}</div>;\n  }\n\n  if (!error) return null;\n\n  let errorDisplayText: ReactNode;\n\n  if (errorStatusCode === undefined) {\n    errorDisplayText = null;\n  } else if (renderErrorMessage) {\n    errorDisplayText = renderErrorMessage?.(errorStatusCode);\n  } else {\n    errorDisplayText = errorStatusCode === 400 ? on400ResponseMessage : on500ResponseMessage;\n  }\n\n  const errorObject = JSON.stringify(\n    {\n      name: error.name,\n      message: error.message,\n      callStack: error.stack,\n    },\n    null,\n    2\n  );\n\n  return (\n    <>\n      <div className={errorMessageCss}>{errorDisplayText}</div>\n      {renderErrorDetails && (\n        <div className={errorDebugSectionCss}>\n          <h6>Error Object</h6>\n          <code className={errorCodeCss}>{errorObject}</code>\n        </div>\n      )}\n    </>\n  );\n};\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, nonMobileMediaQuery } from '../../constants';\nimport { p2Css, p3Css } from '../../motif';\nimport { m } from '../../motif/m';\nimport { paragraphCss } from '../Primitives';\n\nexport const formCss: string = css`\n  display: flex;\n  align-items: center;\n  flex-direction: column;\n  width: 100% !important;\n  max-width: 650px;\n  margin: auto;\n  /* extra margin for button shadow */\n  margin-bottom: ${m('--spacing-m')};\n`;\n\nexport const formRowCss: string = css`\n  display: flex;\n  align-items: flex-start;\n  column-gap: ${m('--form-grid-gap')};\n  width: 100%;\n\n  /* Add extra top spacing if there is a label */\n  &:not(:first-child) label {\n    margin-top: ${m('--spacing-m')};\n  }\n\n  ${mobileMediaQuery} {\n    flex-direction: column;\n  }\n`;\n\nexport const inputLabelCss = css`\n  margin-bottom: ${m('--spacing-xs')};\n`;\n\nexport const inputHelpTextCss = css`\n  ${p2Css}\n  color: ${m('--form-input-placeholder-color')};\n  margin-top: ${m('--spacing-xs')};\n`;\n\nexport const errorMessageCss = css`\n  ${inputHelpTextCss}\n\n  color: ${m('--form-input-error-color')};\n`;\n\nexport const errorDebugSectionCss = css`\n  width: 100%;\n  text-align: center;\n  margin-top: ${m('--spacing-m')};\n`;\n\nexport const errorCodeCss = css`\n  display: block;\n  text-align: start;\n  border: ${m('--form-input-border-width')} solid ${m('--form-input-border-color')};\n  border-radius: ${m('--spacing-m')};\n  background-color: ${m('--form-input-bg-color')};\n  box-shadow: ${m('--form-input-box-shadow')};\n  color: ${m('--form-input-error-color')};\n  margin-top: ${m('--spacing-s')};\n  padding: ${m('--spacing-m')};\n  word-wrap: break-word;\n`;\n\nexport const submitButtonCss = css`\n  justify-content: center;\n\n  margin-top: ${m('--spacing-xl')};\n  margin-bottom: ${m('--spacing-xl')};\n\n  ${mobileMediaQuery} {\n    width: 100%;\n    max-width: 350px;\n    margin-top: ${m('--spacing-m')};\n    margin-bottom: ${m('--spacing-m')};\n  }\n`;\n\nexport const inputContainerCss = css`\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  margin-bottom: ${m('--spacing-m')};\n\n  *[dir='rtl'] & > select {\n    background-position: left ${m('--spacing-l')} top 50%;\n  }\n`;\n\nexport const inputErrorCss = css`\n  border: ${m('--form-input-border-width')} solid ${m('--form-input-error-color')};\n\n  &:hover {\n    border: ${m('--form-input-border-width')} solid ${m('--form-input-error-color')};\n  }\n`;\n\nconst readonlyCss = css`\n  cursor: not-allowed;\n  opacity: 0.8;\n`;\n\nexport const inputCss: string = css`\n  background-color: ${m('--form-input-bg-color')};\n  border: ${m('--form-input-border-width')} solid ${m('--form-input-border-color')};\n  border-radius: ${m('--form-input-border-radius')};\n  box-shadow: ${m('--form-input-box-shadow')};\n  box-sizing: border-box;\n  color: ${m('--form-input-fg-color')};\n  font-family: ${m('--font-family')};\n  height: 52px;\n  padding: ${m('--form-input-padding')};\n  width: 100%;\n\n  &[readonly] {\n    ${readonlyCss}\n  }\n\n  &:active,\n  &:focus {\n    border-color: ${m('--form-input-active-border-color')};\n    box-shadow: ${m('--form-input-active-box-shadow')};\n  }\n\n  &:focus-visible {\n    outline: ${m('--form-input-border-width')} solid ${m('--form-input-active-border-color')};\n    outline-offset: -2px;\n  }\n\n  &:hover {\n    border-color: ${m('--form-input-hover-border-color')};\n    box-shadow: ${m('--form-input-hover-box-shadow')};\n  }\n\n  &[type='number']::-webkit-inner-spin-button {\n    opacity: 1;\n  }\n\n  &[type='date']::-webkit-calendar-picker-indicator {\n    filter: invert(50%);\n  }\n\n  ${nonMobileMediaQuery} {\n    font-size: ${m('--form-input-desktop-font-size')};\n    line-height: ${m('--form-input-desktop-font-line-height')};\n    font-weight: ${m('--form-input-desktop-font-weight')};\n    font-stretch: ${m('--form-input-desktop-font-stretch')};\n  }\n\n  ${mobileMediaQuery} {\n    font-size: ${m('--form-input-mobile-font-size')};\n    line-height: ${m('--form-input-mobile-font-line-height')};\n    font-weight: ${m('--form-input-mobile-font-weight')};\n    font-stretch: ${m('--form-input-mobile-font-stretch')};\n  }\n`;\n\nconst checkboxCheckPath =\n  // eslint-disable-next-line max-len\n  'M4.95801 10.8631C4.43001 10.8631 3.91701 10.6511 3.54301 10.2771L0.293006 7.02713C-0.0979941 6.63613 -0.0979941 6.00413 0.293006 5.61313C0.684006 5.22213 1.31601 5.22213 1.70701 5.61313L4.95701 8.86313L12.253 0.655126C12.619 0.242126 13.251 0.205126 13.664 0.572126C14.077 0.940126 14.114 1.57113 13.747 1.98513L6.45201 10.1921C6.08701 10.6021 5.56301 10.8461 5.01601 10.8621C4.99601 10.8631 4.97701 10.8631 4.95801 10.8631Z';\n\nexport const checkboxCss: string = css`\n  appearance: none;\n  background-color: ${m('--form-input-bg-color')};\n  border: ${m('--form-input-border-width')} solid ${m('--form-input-border-color')};\n  border-radius: ${m('--form-input-checkbox-border-radius')};\n  display: grid;\n  font: inherit;\n  height: 20px;\n  margin: 0;\n  place-content: center;\n  width: 20px;\n\n  &::before {\n    box-shadow: inset 1em 1em ${m('--palette-plain-white')};\n    clip-path: path('${checkboxCheckPath}');\n    content: '';\n    height: 20px;\n    margin: 8px 0px 0px 6px;\n    transform: scale(0);\n    width: 20px;\n  }\n\n  &:checked::before {\n    transform: scale(1);\n  }\n\n  &:checked {\n    background-color: ${m('--form-input-active-border-color')};\n    border-width: ${m('--border-width-none')};\n    box-shadow: ${m('--form-input-active-box-shadow')};\n  }\n\n  &:focus-visible {\n    outline: ${m('--form-input-border-width')} solid ${m('--form-input-active-border-color')};\n    outline-offset: -2px;\n  }\n\n  &:not(:checked):hover {\n    border-color: ${m('--form-input-hover-border-color')};\n    box-shadow: ${m('--form-input-hover-box-shadow')};\n  }\n\n  &[required]:not(:checked)::before {\n    border-color: ${m('--form-input-error-color')};\n  }\n\n  &[readonly] {\n    ${readonlyCss}\n  }\n`;\n\nexport const checkboxWrapperCss: string = css`\n  && {\n    align-items: center;\n    display: flex;\n    gap: ${m('--spacing-s')};\n\n    label {\n      align-items: center;\n      display: flex;\n      justify-content: center;\n      margin-top: 0;\n\n      a {\n        &,\n        &:hover,\n        &:visited {\n          /* TODO: See if this should be hyperlink color or its own */\n          color: ${m('--fg-color')};\n        }\n      }\n    }\n  }\n`;\n\nexport const textAreaCss = css`\n  appearance: none;\n  ${inputCss}\n  font-family: ${m('--font-family')};\n  height: 133px;\n  padding: ${m('--form-input-padding')};\n  resize: vertical;\n  /* Add custom resizer icon as background */\n  background-image: url(\"data:image/svg+xml,%3Csvg height='9' viewBox='0 0 9 9' width='9' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5 8L8 5M1 8L8 1' stroke='rgba(133, 141, 148, 1)'/%3E%3C/svg%3E\");\n  background-repeat: no-repeat;\n  background-position: bottom 4px right 4px;\n\n  &::-webkit-resizer {\n    display: none;\n  }\n\n  &[readonly] {\n    ${readonlyCss}\n  }\n\n  /* Change custom resizer icon position according to RTL */\n  *[dir='rtl'] & {\n    background-image: url(\"data:image/svg+xml,%3Csvg height='9' viewBox='0 0 9 9' transform='scale(-1 1)' width='9' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5 8L8 5M1 8L8 1' stroke='rgba(133, 141, 148, 1)'/%3E%3C/svg%3E\");\n    background-position: bottom 4px left 4px;\n  }\n`;\n\nexport const selectCss: string = css`\n  ${inputCss}\n  appearance: none;\n  height: auto;\n\n  &:-ms-expand {\n    display: none;\n  }\n\n  &:has(option:disabled:checked) {\n    color: ${m('--form-input-placeholder-color')};\n  }\n`;\n\nexport const selectWrapperCss = css`\n  position: relative;\n\n  i {\n    margin-left: 10px;\n    width: 10px;\n    cursor: pointer;\n\n    svg {\n      fill: ${m('--palette-gray-v300')};\n    }\n  }\n`;\n\n// needed to enforce same placeholder color for dropdown input\nexport const placeholderCss = css`\n  input::-webkit-input-placeholder,\n  textarea::-webkit-input-placeholder,\n  input:-moz-placeholder,\n  textarea:-moz-placeholder,\n  input::-moz-placeholder,\n  textarea::-moz-placeholder,\n  input:-ms-input-placeholder,\n  textarea:-ms-input-placeholder,\n  input::-ms-input-placeholder,\n  textarea::-ms-input-placeholder,\n  input::placeholder,\n  textarea::placeholder,\n  ::placeholder {\n    color: ${m('--form-input-placeholder-color')};\n  }\n`;\n\nexport const arrowCss = css`\n  pointer-events: none;\n  position: absolute;\n  right: ${m('--spacing-l')};\n  top: calc(50% - 5px);\n  width: 20px;\n  height: 20px;\n  margin: -4px;\n  fill: ${m('--form-input-fg-color')};\n\n  html[dir='rtl'] & {\n    right: unset;\n    left: ${m('--spacing-l')};\n  }\n`;\n\n/** Chevron for form MultiSelect \u2014 matches MotifComponent.MULTI_SELECT fg (Select keeps arrowCss). */\nexport const formMultiSelectArrowCss = css`\n  pointer-events: none;\n  position: absolute;\n  right: ${m('--spacing-l')};\n  top: calc(50% - 5px);\n  width: 20px;\n  height: 20px;\n  margin: -4px;\n  fill: ${m('--multi-select-fg-color')};\n\n  html[dir='rtl'] & {\n    right: unset;\n    left: ${m('--spacing-l')};\n  }\n`;\n\nexport const multiSelectDropdownCss = css`\n  ${inputCss}\n  height: auto;\n  padding: 0;\n\n  /** applies styles to multi select wrapper when displaying options */\n  &:has(.displayBlock) {\n    border-color: ${m('--form-input-active-border-color')};\n    box-shadow: ${m('--form-input-active-box-shadow')};\n  }\n\n  .searchWrapper {\n    color: ${m('--multi-select-fg-color')};\n\n    .chip {\n      background: ${m('--multi-select-chip-bg-color')};\n      color: ${m('--form-input-fg-color')};\n\n      svg {\n        fill: ${m('--form-input-fg-color')};\n      }\n    }\n  }\n\n  .optionListContainer .option {\n    color: ${m('--multi-select-option-fg-color')};\n\n    &.selected,\n    &.highlight,\n    &:hover {\n      background: ${m('--multi-select-chip-bg-color')};\n      color: ${m('--multi-select-option-fg-color')};\n    }\n\n    input[type='checkbox'] {\n      &:checked {\n        accent-color: ${m('--multi-select-option-fg-color')};\n      }\n    }\n  }\n`;\n\n/** Add asterik at the end of labels to highlight required fields */\nexport const requiredCss = css`\n  & p:last-of-type {\n    display: inline-block;\n  }\n\n  &::after {\n    color: ${m('--form-input-error-color')};\n    content: '*';\n  }\n`;\n\nexport const requiredDescriptionCss = css`\n  ${paragraphCss}\n  ${p3Css}\n  color: ${m('--form-description-fg-color')};\n  font-style: italic;\n  font-weight: ${m('--action-desktop-font-weight')};\n  text-align: start;\n  width: 100%;\n`;\n", "import { type FC, useContext } from 'react';\n\nimport type { FormProps } from './Form';\nimport { FormContext } from './FormContext';\nimport { requiredDescriptionCss } from './styles';\n\ntype FormMessageProps = Pick<FormProps, 'formRequiredFieldsMessage'>;\n\nexport const FormMessage: FC<FormMessageProps> = ({ formRequiredFieldsMessage }) => {\n  const { state } = useContext(FormContext);\n\n  const hasRequiredFields = Object.values(state?.fields ?? {}).some(field => field.required);\n\n  if (!hasRequiredFields || !formRequiredFieldsMessage) return null;\n\n  return <p className={requiredDescriptionCss}>{formRequiredFieldsMessage}</p>;\n};\n", "import type { FC, PropsWithChildren } from 'react';\n\nimport type { BaseComponentProps } from '../../types';\nimport { formRowCss } from './styles';\n\nexport const FormRow: FC<BaseComponentProps & PropsWithChildren> = ({ children, ...props }) => (\n  <div data-testid=\"sdsm-form-row\" className={formRowCss} {...props}>\n    {children}\n  </div>\n);\n", "import { cx } from '@emotion/css';\nimport omit from 'lodash/omit.js';\nimport type { ChangeEvent, FC } from 'react';\nimport { memo, useCallback, useContext, useEffect } from 'react';\n\nimport { dataSetToAttributes } from '../../utils';\nimport { Field } from './Field';\nimport type { FormFieldComponentProps, ValidationKey } from './Form.types';\nimport { FormEventType } from './Form.types';\nimport { FormContext } from './FormContext';\nimport { getBooleanValue, getInputPlaceholder, getStringValue } from './formUtils';\nimport {\n  checkboxCss,\n  checkboxWrapperCss,\n  inputCss,\n  inputErrorCss,\n  placeholderCss,\n  textAreaCss,\n} from './styles';\n\nexport type InputType = 'Text' | 'Number' | 'Date' | 'Textarea' | 'Checkbox' | 'Hidden';\n\nexport interface InputProps extends FormFieldComponentProps {\n  type?: InputType;\n  validation?: ValidationKey;\n  maxLength?: number;\n  /**\n   * Only used for Input types `Number` and `Date`. If specified, the input value must be greater\n   * than or equal to the Min Value.\n   */\n  minValue?: string;\n  /**\n   * Only used for Input types `Number` and `Date`. If specified, the input value must be less than\n   * or equal to the Max Value.\n   */\n  maxValue?: string;\n}\n\nexport const Input: FC<InputProps> = memo(props => {\n  const {\n    name,\n    validation,\n    required = false,\n    placeholder = '',\n    initialValue,\n    type = 'Text',\n    label,\n    richLabel,\n    labelDataset,\n    richLabelDataset,\n    readOnly,\n    shouldResetToInitial,\n    maxLength,\n    minValue,\n    maxValue,\n    ...restProps\n  } = props;\n  const { state, dispatch } = useContext(FormContext);\n\n  const fieldMeta = state.fields[name];\n  const value = state.formBody[name];\n\n  const inputProps = omit(\n    restProps,\n    'dataset',\n    'helpText',\n    'helpTextDataset',\n    'errorDataset',\n    'contentfulDescriptionDataset'\n  );\n\n  useEffect(() => {\n    dispatch({\n      type: FormEventType.REGISTER_FIELD,\n      name,\n      field: {\n        initialValue,\n        validation,\n        required,\n        shouldResetToInitial: type === 'Hidden' || shouldResetToInitial,\n      },\n    });\n  }, [dispatch, initialValue, name, required, validation, type, shouldResetToInitial]);\n\n  const handleChange = useCallback(\n    (e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n      const target = e.target as HTMLInputElement;\n      const isCheckbox = target.type === 'checkbox';\n      const value = isCheckbox ? target.checked : target.value;\n\n      dispatch({\n        type: FormEventType.CHANGE_FIELD_VALUE,\n        name,\n        value,\n      });\n    },\n    [dispatch, name]\n  );\n\n  const handleInvalid = useCallback(() => {\n    dispatch({ type: FormEventType.INVALIDATE_FIELD, name });\n  }, [dispatch, name]);\n\n  const inputPlaceholder = getInputPlaceholder(\n    placeholder,\n    required && !richLabel && !label && !fieldMeta?.hasError\n  );\n\n  const getInputElement = () => {\n    if (type === 'Textarea') {\n      return (\n        <textarea\n          name={name}\n          placeholder={inputPlaceholder}\n          value={getStringValue(value)}\n          className={cx(textAreaCss, placeholderCss, { [inputErrorCss]: fieldMeta?.hasError })}\n          required={required}\n          onInvalid={handleInvalid}\n          readOnly={readOnly}\n          onChange={handleChange}\n          onBlur={handleChange}\n          maxLength={maxLength ?? 600}\n          aria-describedby={fieldMeta?.hasError ? `${name}-error` : undefined}\n          aria-invalid={fieldMeta?.hasError ?? false}\n          {...inputProps}\n        />\n      );\n    }\n\n    if (type === 'Checkbox') {\n      return (\n        <div className={checkboxWrapperCss}>\n          <input\n            type=\"checkbox\"\n            name={name}\n            id={name}\n            onInvalid={handleInvalid}\n            placeholder={placeholder}\n            checked={getBooleanValue(value)}\n            className={cx(checkboxCss, placeholderCss, { [inputErrorCss]: fieldMeta?.hasError })}\n            required={required}\n            onChange={handleChange}\n            onBlur={handleChange}\n            readOnly={readOnly}\n            aria-describedby={fieldMeta?.hasError ? `${name}-error` : undefined}\n            aria-invalid={fieldMeta?.hasError ?? false}\n            {...inputProps}\n          />\n          <label\n            htmlFor={name}\n            {...dataSetToAttributes(richLabel ? richLabelDataset : labelDataset)}\n          >\n            {richLabel ?? label}\n          </label>\n        </div>\n      );\n    }\n\n    if (type === 'Number' || type === 'Date') {\n      return (\n        <input\n          type={type}\n          name={name}\n          placeholder={inputPlaceholder}\n          value={getStringValue(value)}\n          className={cx(inputCss, placeholderCss, { [inputErrorCss]: fieldMeta?.hasError })}\n          required={required}\n          readOnly={readOnly}\n          onChange={handleChange}\n          onInvalid={handleInvalid}\n          onBlur={handleChange}\n          min={minValue}\n          max={maxValue}\n          aria-describedby={fieldMeta?.hasError ? `${name}-error` : undefined}\n          aria-invalid={fieldMeta?.hasError ?? false}\n          {...inputProps}\n        />\n      );\n    }\n\n    return (\n      <input\n        type={type === 'Hidden' ? 'hidden' : 'text'}\n        name={name}\n        placeholder={inputPlaceholder}\n        value={getStringValue(value)}\n        className={cx(inputCss, placeholderCss, { [inputErrorCss]: fieldMeta?.hasError })}\n        required={required}\n        readOnly={readOnly}\n        onChange={handleChange}\n        onInvalid={handleInvalid}\n        onBlur={handleChange}\n        maxLength={maxLength}\n        aria-describedby={fieldMeta?.hasError ? `${name}-error` : undefined}\n        aria-invalid={fieldMeta?.hasError ?? false}\n        {...inputProps}\n      />\n    );\n  };\n\n  return (\n    <Field\n      {...props}\n      label={richLabel ?? label}\n      hasError={fieldMeta?.hasError ?? false}\n      type={type ?? 'Hidden'}\n    >\n      {getInputElement()}\n    </Field>\n  );\n});\n\nInput.displayName = 'Input';\n", "import { cx } from '@emotion/css';\nimport type { FC, PropsWithChildren } from 'react';\n\nimport { h6Css } from '../../motif';\nimport { dataSetToAttributes } from '../../utils';\nimport type { FormFieldComponentProps } from './Form.types';\nimport {\n  errorMessageCss,\n  inputContainerCss,\n  inputHelpTextCss,\n  inputLabelCss,\n  requiredCss,\n} from './styles';\n\nexport type FieldProps = Pick<\n  FormFieldComponentProps,\n  | 'dir' // Unused.\n  | 'error'\n  | 'helpText'\n  | 'label'\n  | 'name'\n  | 'dataset'\n  | 'helpTextDataset'\n  | 'errorDataset'\n  | 'labelDataset'\n  | 'required'\n> & {\n  type:\n    | 'Text'\n    | 'Number'\n    | 'Date'\n    | 'Textarea'\n    | 'Checkbox'\n    | 'Hidden'\n    | 'Select'\n    | 'MultiSelect'\n    | 'Radio';\n  hasError?: boolean;\n};\n\nexport const Field: FC<PropsWithChildren<FieldProps>> = ({\n  type,\n  name,\n  label,\n  helpText,\n  error,\n  hasError,\n  children,\n  dataset,\n  labelDataset,\n  helpTextDataset,\n  errorDataset,\n  required = false,\n}) => {\n  if (type === 'Hidden') {\n    return <>{children}</>;\n  }\n\n  return (\n    <div className={cx('sdsm-form-field', cx(inputContainerCss))} {...dataSetToAttributes(dataset)}>\n      {label && type !== 'Checkbox' && (\n        <label\n          htmlFor={name}\n          className={cx(h6Css, inputLabelCss, {\n            [requiredCss]: required,\n          })}\n          {...dataSetToAttributes(labelDataset)}\n        >\n          {label}\n        </label>\n      )}\n      {children}\n      {((helpText && !hasError) || (helpText && hasError && !error)) && (\n        <p className={inputHelpTextCss} {...dataSetToAttributes(helpTextDataset)}>\n          {helpText}\n        </p>\n      )}\n      {hasError && error && (\n        <div\n          id={`${name}-error`}\n          className={errorMessageCss}\n          {...dataSetToAttributes(errorDataset)}\n        >\n          {error}\n        </div>\n      )}\n    </div>\n  );\n};\n", "import type { FieldValue } from './Form.types';\n\nexport function getStringValue(value: FieldValue): string {\n  if (!value) {\n    return ''; // Undefined values make React thing the form isn't controlled.\n  }\n  if (Array.isArray(value)) return value.join(',');\n  return String(value);\n}\n\nexport function getBooleanValue(value: FieldValue): boolean {\n  if (typeof value === 'boolean') return value;\n  if (typeof value === 'string') return value === 'true';\n  if (Array.isArray(value)) return value.length > 0;\n  return false;\n}\n\nexport function getInputPlaceholder(\n  placeholder: string | undefined,\n  showRequired: boolean\n): string | undefined {\n  if (placeholder && showRequired) {\n    return `${placeholder}*`;\n  }\n\n  return placeholder;\n}\n", "import { cx } from '@emotion/css';\nimport type { FC, KeyboardEvent } from 'react';\nimport { memo, useContext, useEffect } from 'react';\n\nimport { MultiSelect } from '../MultiSelect';\nimport { Field } from './Field';\nimport type { FormFieldComponentProps, MultiSelectOption } from './Form.types';\nimport { FormEventType } from './Form.types';\nimport { FormContext } from './FormContext';\nimport { getInputPlaceholder } from './formUtils';\nimport {\n  formMultiSelectArrowCss,\n  inputErrorCss,\n  multiSelectDropdownCss,\n  placeholderCss,\n  selectWrapperCss,\n} from './styles';\n\ntype FormFieldWithOptions<T> = Partial<T> & {\n  options: MultiSelectOption[];\n  initialValues?: MultiSelectOption[];\n  showCheckbox: boolean;\n  name: string;\n};\ntype MultiSelectDropdownField = Omit<FormFieldWithOptions<FormFieldComponentProps>, 'initialValue'>;\n\n/** Singleton array for change detection. */\nconst initialFieldState: MultiSelectOption[] = [];\n\n/**\n * Select form field that allows for multiple selections.\n *\n * NOTE: we use multiselect-react-dropdown for the dropdown component. Source code:\n * https://github.com/srigar/multiselect-react-dropdown/blob/master/src/multiselect/multiselect.component.tsx\n */\nexport const MultiSelectDropdown: FC<MultiSelectDropdownField> = memo(props => {\n  const {\n    name,\n    placeholder,\n    showCheckbox,\n    options,\n    required = false,\n    initialValues = initialFieldState,\n  } = props;\n  const { state, dispatch } = useContext(FormContext);\n  const value = state.formBody[name];\n  const formField = state.fields[name];\n\n  useEffect(() => {\n    dispatch({\n      type: FormEventType.REGISTER_FIELD,\n      name,\n      field: {\n        initialValue: initialValues,\n        required,\n      },\n    });\n  }, [initialValues, dispatch, name, required]);\n\n  const handleSelect = (selectedList: MultiSelectOption[]) => {\n    dispatch({\n      type: FormEventType.CHANGE_FIELD_VALUE,\n      name,\n      value: selectedList,\n    });\n  };\n\n  const onKeyPress = (event: KeyboardEvent) => {\n    event.preventDefault();\n    event.stopPropagation();\n  };\n\n  const handleRemove = (selectedList: MultiSelectOption[]) => {\n    dispatch({\n      type: FormEventType.CHANGE_FIELD_VALUE,\n      name,\n      value: selectedList,\n    });\n  };\n\n  return (\n    <Field {...props} hasError={formField?.hasError} type=\"MultiSelect\">\n      <MultiSelect\n        options={options}\n        selectedValues={value as MultiSelectOption[] | undefined}\n        showCheckbox={showCheckbox}\n        onSelect={handleSelect}\n        onRemove={handleRemove}\n        hidePlaceholder={true}\n        avoidHighlightFirstOption={true}\n        placeholder={getInputPlaceholder(\n          placeholder,\n          !!props.required && !props.label && !props.richLabel && !formField?.hasError\n        )}\n        displayValue=\"name\"\n        dropdownClassName={cx(multiSelectDropdownCss, placeholderCss, {\n          [inputErrorCss]: formField?.hasError,\n        })}\n        wrapperClassName={selectWrapperCss}\n        arrowClassName={formMultiSelectArrowCss}\n        onKeyPressFn={onKeyPress}\n      />\n    </Field>\n  );\n});\n\nMultiSelectDropdown.displayName = 'MultiSelectDropdown';\n", "import { css, cx } from '@emotion/css';\nimport Multiselect from 'multiselect-react-dropdown';\nimport type { FC, MouseEvent } from 'react';\nimport { useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { MotifComponent } from '../../motif/motifConstants';\nimport { useMotifStyles } from '../../motif/motifReactUtils';\nimport { Icon } from '../Icon';\nimport type { MultiSelectProps } from './MultiSelect.types';\nimport {\n  multiSelectArrowCss,\n  multiSelectCloseIconCss,\n  multiSelectDropdownBaseCss,\n  multiSelectOverflowChipCss,\n  multiSelectWrapperCss,\n} from './styles';\n\n/**\n * Generic multi-select dropdown wrapping multiselect-react-dropdown.\n *\n * Provides structural layout (wrapper, arrow icon, black cross chip remove icon).\n */\nexport const MultiSelect: FC<MultiSelectProps> = ({\n  options,\n  selectedValues,\n  displayValue = 'name',\n  placeholder,\n  showCheckbox,\n  hidePlaceholder = true,\n  avoidHighlightFirstOption = true,\n  onSelect,\n  onRemove,\n  onKeyPressFn,\n  dropdownClassName,\n  wrapperClassName,\n  arrowClassName,\n  maxVisibleChips,\n}) => {\n  useMotifStyles(MotifComponent.MULTI_SELECT);\n  const wrapperRef = useRef<HTMLDivElement>(null);\n  const [portalTarget, setPortalTarget] = useState<Element | null>(null);\n\n  const closeIcon = useMemo(() => <Icon name=\"cross\" className={multiSelectCloseIconCss} />, []);\n\n  useLayoutEffect(() => {\n    setPortalTarget(wrapperRef.current?.querySelector('.searchWrapper') ?? null);\n  }, []);\n\n  const selectedCount = selectedValues?.length ?? 0;\n  const shouldTruncate = maxVisibleChips != null && selectedCount > maxVisibleChips;\n  const overflowCount = shouldTruncate ? selectedCount - maxVisibleChips : 0;\n\n  const overflowCss = useMemo(() => {\n    if (!shouldTruncate) return undefined;\n    return css`\n      .searchWrapper .chip:nth-child(n + ${maxVisibleChips! + 1}):not([data-overflow]) {\n        display: none;\n      }\n      .searchWrapper input {\n        order: 1;\n      }\n    `;\n  }, [shouldTruncate, maxVisibleChips]);\n\n  const handleArrowMouseDown = useCallback((event: MouseEvent) => {\n    event.preventDefault();\n  }, []);\n\n  const handleArrowClick = useCallback(() => {\n    const input = wrapperRef.current?.querySelector<HTMLInputElement>('.searchWrapper input');\n    if (!input) return;\n\n    if (document.activeElement === input) {\n      input.blur();\n    } else {\n      input.focus();\n    }\n  }, []);\n\n  const handleOverflowMouseDown = useCallback((event: MouseEvent) => {\n    event.preventDefault();\n  }, []);\n\n  return (\n    <div\n      ref={wrapperRef}\n      className={cx(MotifComponent.MULTI_SELECT, multiSelectWrapperCss, wrapperClassName)}\n    >\n      <Multiselect\n        options={options}\n        selectedValues={selectedValues}\n        displayValue={displayValue}\n        placeholder={placeholder}\n        showCheckbox={showCheckbox}\n        hidePlaceholder={hidePlaceholder}\n        avoidHighlightFirstOption={avoidHighlightFirstOption}\n        onSelect={onSelect}\n        onRemove={onRemove}\n        onKeyPressFn={onKeyPressFn}\n        className={cx(multiSelectDropdownBaseCss, dropdownClassName, overflowCss)}\n        customCloseIcon={closeIcon}\n      />\n      {shouldTruncate &&\n        portalTarget &&\n        createPortal(\n          <span\n            className={cx('chip', multiSelectOverflowChipCss)}\n            data-overflow\n            onMouseDown={handleOverflowMouseDown}\n          >\n            +{overflowCount} more\n          </span>,\n          portalTarget\n        )}\n      <button\n        type=\"button\"\n        aria-label=\"Toggle dropdown\"\n        className={cx(multiSelectArrowCss, arrowClassName)}\n        onMouseDown={handleArrowMouseDown}\n        onClick={handleArrowClick}\n      >\n        <Icon name=\"chevron-down\" />\n      </button>\n    </div>\n  );\n};\n\nMultiSelect.displayName = 'MultiSelect';\n", "import { css } from '@emotion/css';\n\nimport { m } from '../../motif/m';\n\nexport const multiSelectWrapperCss = css`\n  position: relative;\n\n  i {\n    margin-left: 10px;\n    width: 10px;\n    cursor: pointer;\n  }\n`;\n\nexport const multiSelectDropdownBaseCss = css`\n  height: auto;\n  padding: 0;\n\n  .displayNone {\n    display: none;\n  }\n\n  .searchWrapper {\n    padding: 0 ${m('--spacing-xxl')} 0 ${m('--spacing-xs')};\n    border: 0;\n    min-height: 50px;\n    align-items: center;\n    display: flex;\n    flex-wrap: wrap;\n    color: ${m('--multi-select-fg-color')};\n\n    input {\n      color: inherit;\n      font-size: inherit;\n      cursor: default;\n      min-width: 0px;\n      padding-left: ${m('--spacing-xs')};\n      flex: 1 1 0%;\n    }\n\n    .chip {\n      background: ${m('--multi-select-chip-bg-color')};\n      color: ${m('--multi-select-fg-color')};\n      font-size: inherit;\n      padding: ${m('--spacing-xs')};\n      margin: 5px;\n      cursor: default;\n\n      svg {\n        fill: ${m('--multi-select-fg-color')};\n      }\n    }\n\n    .icon_down_dir {\n      right: -60px;\n    }\n  }\n\n  .optionListContainer {\n    background: ${m('--multi-select-bg-color')};\n    border-radius: 0 0 ${m('--border-radius-s')} ${m('--border-radius-s')};\n    box-shadow: ${m('--box-shadow-l')};\n    list-style-type: none;\n    padding-left: ${m('--spacing-xs')};\n    padding-right: ${m('--spacing-xs')};\n    z-index: 51;\n\n    .optionContainer {\n      border: none;\n\n      &::-webkit-scrollbar {\n        width: 7px;\n      }\n\n      &::-webkit-scrollbar-thumb {\n        border-radius: 4px;\n        background-color: rgba(0, 0, 0, 0.5);\n        box-shadow: 0 0 1px rgba(255, 255, 255, 0.5);\n      }\n    }\n\n    .option {\n      display: flex;\n      align-items: center;\n      margin-top: ${m('--spacing-xs')};\n      margin-bottom: ${m('--spacing-xs')};\n      padding-left: ${m('--spacing-m')};\n      padding-right: ${m('--spacing-m')};\n      border-radius: 5px;\n      color: ${m('--multi-select-option-fg-color')};\n\n      &.selected,\n      &.highlight,\n      &:hover {\n        background: ${m('--multi-select-chip-bg-color')};\n        color: ${m('--multi-select-option-fg-color')};\n      }\n\n      input[type='checkbox'] {\n        height: 17px;\n        width: 17px;\n\n        &:checked {\n          accent-color: ${m('--multi-select-option-fg-color')};\n        }\n      }\n    }\n  }\n`;\n\nexport const multiSelectArrowCss = css`\n  appearance: none;\n  background: none;\n  border: none;\n  padding: 0;\n  cursor: pointer;\n  position: absolute;\n  right: 16px;\n  top: 19px;\n  width: 20px;\n  height: 20px;\n  margin: -4px;\n\n  svg {\n    width: 100%;\n    height: 100%;\n    fill: ${m('--multi-select-fg-color')};\n  }\n\n  html[dir='rtl'] & {\n    right: unset;\n    left: 16px;\n  }\n`;\n\nexport const multiSelectCloseIconCss = css`\n  margin: -7px;\n\n  svg {\n    fill: ${m('--multi-select-fg-color')};\n  }\n`;\n\nexport const multiSelectOverflowChipCss = css`\n  cursor: pointer;\n  white-space: nowrap;\n`;\n", "import { cx } from '@emotion/css';\nimport omit from 'lodash/omit.js';\nimport type { ChangeEvent, FC, ReactNode } from 'react';\nimport { memo, useCallback, useContext, useEffect } from 'react';\n\nimport { Icon } from '../Icon';\nimport { Field } from './Field';\nimport type { FormFieldComponentProps } from './Form.types';\nimport { FormEventType } from './Form.types';\nimport { FormContext } from './FormContext';\nimport { getInputPlaceholder, getStringValue } from './formUtils';\nimport { arrowCss, inputErrorCss, selectCss, selectWrapperCss } from './styles';\n\ntype SelectField = FormFieldComponentProps & {\n  allValues?: string[];\n  children?: ReactNode;\n  // This applies to the whole field, including label, help text, etc.\n  // Compare to `dataset` which would be passed to the <select> element\n  fieldDataset?: DOMStringMap;\n};\n\nexport const Select: FC<SelectField> = memo(props => {\n  const {\n    name,\n    placeholder,\n    children,\n    required = false,\n    initialValue = '',\n    allValues = [],\n    shouldResetToInitial,\n    fieldDataset,\n    ...restProps\n  } = props;\n  const selectProps = {\n    required,\n    ...omit(\n      restProps,\n      'helpText',\n      'helpTextDataset',\n      'errorDataset',\n      'labelDataset',\n      'fieldDataset'\n    ),\n  };\n\n  const { state, dispatch } = useContext(FormContext);\n  const validInitialValue = allValues.includes(getStringValue(initialValue)) ? initialValue : '';\n  const formField = state.fields[name];\n  const value = state.formBody[name];\n\n  useEffect(() => {\n    dispatch({\n      type: FormEventType.REGISTER_FIELD,\n      name,\n      field: {\n        required,\n        initialValue: validInitialValue,\n        shouldResetToInitial,\n      },\n    });\n  }, [dispatch, name, required, validInitialValue, shouldResetToInitial]);\n\n  const handleChange = (e: ChangeEvent<HTMLSelectElement>) => {\n    dispatch({\n      type: FormEventType.CHANGE_FIELD_VALUE,\n      name,\n      value: e.target.value,\n    });\n  };\n\n  const handleInvalid = useCallback(() => {\n    dispatch({ type: FormEventType.INVALIDATE_FIELD, name });\n  }, [dispatch, name]);\n\n  return (\n    <Field\n      hasError={formField?.hasError}\n      {...omit(props, 'dataset')}\n      dataset={fieldDataset}\n      type=\"Select\"\n    >\n      <div className={cx(selectWrapperCss)}>\n        <select\n          value={getStringValue(value)}\n          name={name}\n          className={cx(selectCss, { [inputErrorCss]: formField?.hasError })}\n          onChange={handleChange}\n          onBlur={handleChange}\n          onInvalid={handleInvalid}\n          aria-describedby={formField?.hasError ? `${name}-error` : undefined}\n          aria-invalid={formField?.hasError ?? false}\n          {...selectProps}\n        >\n          {placeholder && (\n            <option value=\"\" disabled>\n              {getInputPlaceholder(\n                placeholder,\n                required && !props.label && !props.richLabel && !formField?.hasError\n              )}\n            </option>\n          )}\n          {children}\n        </select>\n        <Icon name=\"chevron-down\" className={arrowCss} />\n      </div>\n    </Field>\n  );\n});\n\nSelect.displayName = 'Select';\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport { useMemo, useState } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { dataSetToAttributes } from '../../utils';\nimport type { FilterDropdownMenuProps } from '../FilterDropdown/FilterDropdownMenu';\nimport { allValue, FilterDropdownMenu } from '../FilterDropdown/FilterDropdownMenu';\nimport { Icon } from '../Icon';\nimport {\n  buttonDefaultStylesResetCss,\n  clearFiltersButtonCss,\n  clearFiltersWrapperCss,\n  desktopWrapperCss,\n  filterBarCss,\n  filtersIconActiveCss,\n  filtersIconButtonCss,\n  filtersIconCss,\n  mobileWrapperCss,\n  searchWrapperCss,\n  toggleDropdownsBaseTextCss,\n  toggleDropdownsMainTextCss,\n  toggleDropdownsSecondaryTextCss,\n} from './galleryFiltersV2Styles';\n\ntype AbridgedGalleryDropdownMenuProps = Omit<FilterDropdownMenuProps, 'value' | 'onChange'>;\n\nexport interface GalleryFiltersV2Props {\n  searchMenus: AbridgedGalleryDropdownMenuProps[];\n  selectedFilters: {\n    [key: string]: string;\n  };\n  onChangeFilter: (filterKey: string, filterValue?: string) => void;\n  onClearFilters: () => void;\n  clearButtonLabel?: string;\n  mobileFiltersToggleLabel?: string;\n  mobileFiltersWrapperTextDataset?: DOMStringMap;\n  clearFiltersCtaCopyDataset?: DOMStringMap;\n}\n\nexport const GalleryFiltersV2: FC<GalleryFiltersV2Props> = ({\n  searchMenus = [],\n  selectedFilters,\n  onChangeFilter,\n  mobileFiltersToggleLabel,\n  onClearFilters,\n  clearButtonLabel,\n  mobileFiltersWrapperTextDataset,\n  clearFiltersCtaCopyDataset,\n}) => {\n  useMotifStyles(MotifComponent.GALLERY);\n\n  const [isMobileOpen, setIsMobileOpen] = useState(false);\n  const toggleIsMobileOpen = () => setIsMobileOpen(!isMobileOpen);\n\n  const selectedFiltersCount = useMemo(\n    () => Object.keys(selectedFilters).length,\n    [selectedFilters]\n  );\n\n  if (searchMenus.length === 0) {\n    return null;\n  }\n\n  const searchMenusWithState: FilterDropdownMenuProps[] = searchMenus.map(\n    ({ title, id, allItemTitle, items, dataset }) => ({\n      title,\n      id,\n      allItemTitle,\n      items,\n      dataset,\n      value: selectedFilters[id] ? selectedFilters[id] : allValue,\n      onChange: (setValue?: string) => onChangeFilter(id, setValue),\n    })\n  );\n\n  const children = searchMenusWithState.map(props => (\n    <FilterDropdownMenu key={props.id} {...props} isStandalone={searchMenus.length === 1} />\n  ));\n\n  const filterText = mobileFiltersToggleLabel ?? (searchMenus.length > 1 ? 'Filters' : 'Filter');\n\n  return (\n    <section className={MotifComponent.GALLERY}>\n      <aside className={desktopWrapperCss}>\n        <div className={searchWrapperCss}>\n          {children}\n          {!!selectedFiltersCount && (\n            <button\n              data-testid=\"clear-btn-desktop\"\n              type=\"button\"\n              className={cx(buttonDefaultStylesResetCss, clearFiltersButtonCss)}\n              onClick={onClearFilters}\n              {...dataSetToAttributes(clearFiltersCtaCopyDataset)}\n            >\n              {clearButtonLabel ?? 'Clear'}\n            </button>\n          )}\n        </div>\n      </aside>\n      <aside className={mobileWrapperCss}>\n        {searchMenus.length > 1 && (\n          <div className={filterBarCss} data-testid=\"dropdowns-mobile-wrapper\">\n            <div>\n              <button\n                type=\"button\"\n                className={cx(\n                  buttonDefaultStylesResetCss,\n                  toggleDropdownsBaseTextCss,\n                  toggleDropdownsMainTextCss\n                )}\n                onClick={toggleIsMobileOpen}\n                {...dataSetToAttributes(mobileFiltersWrapperTextDataset)}\n              >\n                {filterText}\n              </button>\n              {!!selectedFiltersCount && (\n                <span\n                  data-testid=\"selected-filters-counter-mobile\"\n                  className={cx(toggleDropdownsBaseTextCss, toggleDropdownsSecondaryTextCss)}\n                >{` (${selectedFiltersCount})`}</span>\n              )}\n            </div>\n            <div className={clearFiltersWrapperCss}>\n              {!!selectedFiltersCount && (\n                <button\n                  data-testid=\"clear-btn-mobile\"\n                  type=\"button\"\n                  className={cx(buttonDefaultStylesResetCss, clearFiltersButtonCss)}\n                  onClick={onClearFilters}\n                  {...dataSetToAttributes(clearFiltersCtaCopyDataset)}\n                >\n                  {clearButtonLabel ?? 'Clear'}\n                </button>\n              )}\n              <button\n                type=\"button\"\n                className={cx(buttonDefaultStylesResetCss, filtersIconButtonCss)}\n                onClick={toggleIsMobileOpen}\n              >\n                <Icon\n                  name=\"bars-triangle\"\n                  className={cx(filtersIconCss, { [filtersIconActiveCss]: isMobileOpen })}\n                />\n              </button>\n            </div>\n          </div>\n        )}\n        {(isMobileOpen || searchMenus.length === 1) && (\n          <div className={searchWrapperCss}>{children}</div>\n        )}\n      </aside>\n    </section>\n  );\n};\n\nGalleryFiltersV2.displayName = 'GalleryFiltersV2';\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, nonMobileMediaQuery } from '../../constants';\nimport { m } from '../../motif/m';\n\nexport const desktopWrapperCss = css`\n  ${mobileMediaQuery} {\n    display: none;\n  }\n\n  ${nonMobileMediaQuery} {\n    display: block;\n  }\n`;\n\nexport const mobileWrapperCss = css`\n  ${mobileMediaQuery} {\n    display: block;\n  }\n\n  ${nonMobileMediaQuery} {\n    display: none;\n  }\n`;\n\nexport const buttonDefaultStylesResetCss = css`\n  background: none;\n  border: none;\n  color: ${m('--fg-color')};\n  cursor: pointer;\n  padding: 0;\n  /* stylelint-disable-next-line property-no-vendor-prefix */\n  -webkit-appearance: none;\n  appearance: none;\n`;\n\nexport const searchWrapperCss = css`\n  display: flex;\n  width: 100%;\n\n  ${nonMobileMediaQuery} {\n    align-items: center;\n    flex-wrap: wrap;\n    padding-bottom: 50px;\n  }\n\n  ${mobileMediaQuery} {\n    flex-direction: column;\n    justify-content: flex-end;\n    margin-block: ${m('--spacing-m')};\n  }\n`;\n\nexport const filterBarCss = css`\n  align-items: center;\n  display: flex;\n  justify-content: space-between;\n  padding-block: ${m('--spacing-m')};\n`;\n\nexport const toggleDropdownsBaseTextCss = css`\n  font-size: ${m('--action-desktop-font-size')};\n  line-height: ${m('--action-desktop-font-line-height')};\n\n  ${mobileMediaQuery} {\n    font-size: ${m('--action-mobile-font-size')};\n    line-height: ${m('--action-mobile-font-line-height')};\n  }\n`;\n\nexport const toggleDropdownsMainTextCss = css`\n  font-family: inherit;\n  font-weight: ${m('--action-desktop-font-weight')};\n\n  ${mobileMediaQuery} {\n    font-weight: ${m('--action-mobile-font-weight')};\n  }\n`;\n\nexport const toggleDropdownsSecondaryTextCss = css`\n  font-weight: ${m('--p1-desktop-font-weight')};\n\n  ${mobileMediaQuery} {\n    font-weight: ${m('--p1-mobile-font-weight')};\n  }\n`;\n\nexport const clearFiltersWrapperCss = css`\n  align-items: center;\n  display: flex;\n`;\n\nexport const clearFiltersButtonCss = css`\n  font-family: inherit;\n  font-size: ${m('--action-mobile-font-size')};\n  font-weight: ${m('--action-mobile-font-weight')};\n  line-height: ${m('--action-mobile-font-line-height')};\n  margin-inline-end: ${m('--spacing-m')};\n\n  ${nonMobileMediaQuery} {\n    padding-block: ${m('--spacing-m')};\n    font-size: ${m('--action-desktop-font-size')};\n    font-weight: ${m('--action-desktop-font-weight')};\n    line-height: ${m('--action-desktop-font-line-height')};\n  }\n`;\n\nexport const filtersIconButtonCss = css`\n  align-items: center;\n  display: flex;\n  width: ${m('--spacing-l')};\n`;\n\nexport const filtersIconCss = css`\n  fill: ${m('--fg-color')};\n  height: auto;\n  transform: rotate(0deg);\n  transform-origin: center;\n  transition: transform 100ms cubic-bezier(0.4, 0, 0.2, 1);\n  width: 100%;\n`;\n\nexport const filtersIconActiveCss = css`\n  transform: rotate(-180deg);\n`;\n", "import { css } from '@emotion/css';\n\nimport {\n  largeDesktopMediaQuery,\n  largeDesktopPageContainerQuery,\n  mobilePageContainerQuery,\n  nonLargeDesktopPageContainerQuery,\n  nonMobileMediaQuery,\n  nonMobilePageContainerQuery,\n} from '../../constants';\nimport { m } from '../../motif';\n\nexport const galleryV2Css = css`\n  display: flex;\n  justify-content: flex-start;\n  flex-wrap: wrap;\n  gap: ${m('--spacing-m')};\n  margin-bottom: ${m('--spacing-m')};\n  margin-inline: auto;\n\n  /*\n  We are keeping the media queries in addition to the container queries in case:\n  - this component is ever rendered without a wrapping SDS-M Page component\n  - the browser does not support container queries (smart TVs, etc.)\n  */\n  ${largeDesktopMediaQuery} {\n    gap: ${m('--spacing-l')};\n    margin-bottom: ${m('--spacing-l')};\n  }\n\n  ${largeDesktopPageContainerQuery} {\n    gap: ${m('--spacing-m')};\n  }\n\n  ${nonLargeDesktopPageContainerQuery} {\n    gap: ${m('--spacing-l')};\n    margin-bottom: ${m('--spacing-l')};\n  }\n\n  > * {\n    width: 100%;\n\n    /*\n    We are keeping the media queries in addition to the container queries in case:\n    - this component is ever rendered without a wrapping SDS-M Page component\n    - the browser does not support container queries (smart TVs, etc.)\n    */\n    ${nonMobileMediaQuery} {\n      /* \n      Width calculation assumes 2 cards per line\n      {50% of parent width} - { gap size / 2 }\n      */\n      width: calc(50% - ${m('--spacing-m')} / 2);\n    }\n\n    ${largeDesktopMediaQuery} {\n      /* \n      Width calculation assumes 2 cards per line\n      {50% of parent width} - { gap size / 2 }\n      */\n      width: calc(50% - ${m('--spacing-l')} / 2);\n    }\n\n    ${mobilePageContainerQuery} {\n      width: 100%;\n    }\n\n    ${nonMobilePageContainerQuery} {\n      /* \n      Width calculation assumes 2 cards per line\n      {50% of parent width} - { gap size / 2 }\n      */\n      width: calc(50% - ${m('--spacing-m')} / 2);\n    }\n\n    ${nonLargeDesktopPageContainerQuery} {\n      /* \n      Width calculation assumes 2 cards per line\n      {50% of parent width} - { gap size / 2 }\n      */\n      width: calc(50% - ${m('--spacing-l')} / 2);\n    }\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC, ReactElement } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport type { TileProps } from '../Tile';\nimport { galleryV2Css } from './styles';\n\nexport interface GalleryGridV2Props {\n  children?: ReactElement<TileProps> | Array<ReactElement<TileProps>>;\n}\n\nexport const GalleryGridV2: FC<GalleryGridV2Props> = ({ children }) => {\n  useMotifStyles(MotifComponent.GALLERY);\n\n  return (\n    <div data-testid=\"sdsm-gallery-grid\" className={cx(MotifComponent.GALLERY, galleryV2Css)}>\n      {children}\n    </div>\n  );\n};\n\nGalleryGridV2.displayName = 'GalleryGridV2';\n", "import isArrayLike from './isArrayLike.js';\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    if (collection == null) {\n      return collection;\n    }\n    if (!isArrayLike(collection)) {\n      return eachFunc(collection, iteratee);\n    }\n    var length = collection.length,\n        index = fromRight ? length : -1,\n        iterable = Object(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\nexport default createBaseEach;\n", "import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nexport default baseEach;\n", "import baseEach from './_baseEach.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n  var index = -1,\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value, key, collection) {\n    result[++index] = iteratee(value, key, collection);\n  });\n  return result;\n}\n\nexport default baseMap;\n", "import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n *   return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n *   { 'user': 'barney' },\n *   { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n  var func = isArray(collection) ? arrayMap : baseMap;\n  return func(collection, baseIteratee(iteratee, 3));\n}\n\nexport default map;\n", "import basePropertyOf from './_basePropertyOf.js';\n\n/** Used to map HTML entities to characters. */\nvar htmlUnescapes = {\n  '&amp;': '&',\n  '&lt;': '<',\n  '&gt;': '>',\n  '&quot;': '\"',\n  '&#39;': \"'\"\n};\n\n/**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\nvar unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\nexport default unescapeHtmlChar;\n", "import toString from './toString.js';\nimport unescapeHtmlChar from './_unescapeHtmlChar.js';\n\n/** Used to match HTML entities and HTML characters. */\nvar reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n    reHasEscapedHtml = RegExp(reEscapedHtml.source);\n\n/**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, &amp; pebbles');\n * // => 'fred, barney, & pebbles'\n */\nfunction unescape(string) {\n  string = toString(string);\n  return (string && reHasEscapedHtml.test(string))\n    ? string.replace(reEscapedHtml, unescapeHtmlChar)\n    : string;\n}\n\nexport default unescape;\n", "export const TAG_PROPERTIES = {\n  CHARSET: 'charset',\n  CSS_TEXT: 'cssText',\n  HREF: 'href',\n  HTTPEQUIV: 'http-equiv',\n  INNER_HTML: 'innerHTML',\n  ITEM_PROP: 'itemprop',\n  NAME: 'name',\n  PROPERTY: 'property',\n  REL: 'rel',\n  SRC: 'src',\n};\n\nexport const ATTRIBUTE_NAMES = {\n  BODY: 'bodyAttributes',\n  HTML: 'htmlAttributes',\n  TITLE: 'titleAttributes',\n};\n\nexport const TAG_NAMES = {\n  BASE: 'base',\n  BODY: 'body',\n  HEAD: 'head',\n  HTML: 'html',\n  LINK: 'link',\n  META: 'meta',\n  NOSCRIPT: 'noscript',\n  SCRIPT: 'script',\n  STYLE: 'style',\n  TITLE: 'title',\n  FRAGMENT: 'Symbol(react.fragment)',\n};\n\nexport const SEO_PRIORITY_TAGS = {\n  link: { rel: ['amphtml', 'canonical', 'alternate'] },\n  script: { type: ['application/ld+json'] },\n  meta: {\n    charset: '',\n    name: ['robots', 'description'],\n    property: [\n      'og:type',\n      'og:title',\n      'og:url',\n      'og:image',\n      'og:image:alt',\n      'og:description',\n      'twitter:url',\n      'twitter:title',\n      'twitter:description',\n      'twitter:image',\n      'twitter:image:alt',\n      'twitter:card',\n      'twitter:site',\n    ],\n  },\n};\n\nexport const VALID_TAG_NAMES = Object.keys(TAG_NAMES).map(name => TAG_NAMES[name]);\n\nexport const REACT_TAG_MAP = {\n  accesskey: 'accessKey',\n  charset: 'charSet',\n  class: 'className',\n  contenteditable: 'contentEditable',\n  contextmenu: 'contextMenu',\n  'http-equiv': 'httpEquiv',\n  itemprop: 'itemProp',\n  tabindex: 'tabIndex',\n};\n\nexport const HTML_TAG_MAP = Object.keys(REACT_TAG_MAP).reduce((obj, key) => {\n  obj[REACT_TAG_MAP[key]] = key;\n  return obj;\n}, {});\n\nexport const HELMET_ATTRIBUTE = 'data-rh';\n", "import { TAG_NAMES, TAG_PROPERTIES, ATTRIBUTE_NAMES } from './constants';\n\nconst HELMET_PROPS = {\n  DEFAULT_TITLE: 'defaultTitle',\n  DEFER: 'defer',\n  ENCODE_SPECIAL_CHARACTERS: 'encodeSpecialCharacters',\n  ON_CHANGE_CLIENT_STATE: 'onChangeClientState',\n  TITLE_TEMPLATE: 'titleTemplate',\n  PRIORITIZE_SEO_TAGS: 'prioritizeSeoTags',\n};\n\nconst getInnermostProperty = (propsList, property) => {\n  for (let i = propsList.length - 1; i >= 0; i -= 1) {\n    const props = propsList[i];\n\n    if (Object.prototype.hasOwnProperty.call(props, property)) {\n      return props[property];\n    }\n  }\n\n  return null;\n};\n\nconst getTitleFromPropsList = propsList => {\n  let innermostTitle = getInnermostProperty(propsList, TAG_NAMES.TITLE);\n  const innermostTemplate = getInnermostProperty(propsList, HELMET_PROPS.TITLE_TEMPLATE);\n  if (Array.isArray(innermostTitle)) {\n    innermostTitle = innermostTitle.join('');\n  }\n  if (innermostTemplate && innermostTitle) {\n    // use function arg to avoid need to escape $ characters\n    return innermostTemplate.replace(/%s/g, () => innermostTitle);\n  }\n\n  const innermostDefaultTitle = getInnermostProperty(propsList, HELMET_PROPS.DEFAULT_TITLE);\n\n  return innermostTitle || innermostDefaultTitle || undefined;\n};\n\nconst getOnChangeClientState = propsList =>\n  getInnermostProperty(propsList, HELMET_PROPS.ON_CHANGE_CLIENT_STATE) || (() => {});\n\nconst getAttributesFromPropsList = (tagType, propsList) =>\n  propsList\n    .filter(props => typeof props[tagType] !== 'undefined')\n    .map(props => props[tagType])\n    .reduce((tagAttrs, current) => ({ ...tagAttrs, ...current }), {});\n\nconst getBaseTagFromPropsList = (primaryAttributes, propsList) =>\n  propsList\n    .filter(props => typeof props[TAG_NAMES.BASE] !== 'undefined')\n    .map(props => props[TAG_NAMES.BASE])\n    .reverse()\n    .reduce((innermostBaseTag, tag) => {\n      if (!innermostBaseTag.length) {\n        const keys = Object.keys(tag);\n\n        for (let i = 0; i < keys.length; i += 1) {\n          const attributeKey = keys[i];\n          const lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n          if (\n            primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 &&\n            tag[lowerCaseAttributeKey]\n          ) {\n            return innermostBaseTag.concat(tag);\n          }\n        }\n      }\n\n      return innermostBaseTag;\n    }, []);\n\n// eslint-disable-next-line no-console\nconst warn = msg => console && typeof console.warn === 'function' && console.warn(msg);\n\nconst getTagsFromPropsList = (tagName, primaryAttributes, propsList) => {\n  // Calculate list of tags, giving priority innermost component (end of the propslist)\n  const approvedSeenTags = {};\n\n  return propsList\n    .filter(props => {\n      if (Array.isArray(props[tagName])) {\n        return true;\n      }\n      if (typeof props[tagName] !== 'undefined') {\n        warn(\n          `Helmet: ${tagName} should be of type \"Array\". Instead found type \"${typeof props[\n            tagName\n          ]}\"`\n        );\n      }\n      return false;\n    })\n    .map(props => props[tagName])\n    .reverse()\n    .reduce((approvedTags, instanceTags) => {\n      const instanceSeenTags = {};\n\n      instanceTags\n        .filter(tag => {\n          let primaryAttributeKey;\n          const keys = Object.keys(tag);\n          for (let i = 0; i < keys.length; i += 1) {\n            const attributeKey = keys[i];\n            const lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n            // Special rule with link tags, since rel and href are both primary tags, rel takes priority\n            if (\n              primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 &&\n              !(\n                primaryAttributeKey === TAG_PROPERTIES.REL &&\n                tag[primaryAttributeKey].toLowerCase() === 'canonical'\n              ) &&\n              !(\n                lowerCaseAttributeKey === TAG_PROPERTIES.REL &&\n                tag[lowerCaseAttributeKey].toLowerCase() === 'stylesheet'\n              )\n            ) {\n              primaryAttributeKey = lowerCaseAttributeKey;\n            }\n            // Special case for innerHTML which doesn't work lowercased\n            if (\n              primaryAttributes.indexOf(attributeKey) !== -1 &&\n              (attributeKey === TAG_PROPERTIES.INNER_HTML ||\n                attributeKey === TAG_PROPERTIES.CSS_TEXT ||\n                attributeKey === TAG_PROPERTIES.ITEM_PROP)\n            ) {\n              primaryAttributeKey = attributeKey;\n            }\n          }\n\n          if (!primaryAttributeKey || !tag[primaryAttributeKey]) {\n            return false;\n          }\n\n          const value = tag[primaryAttributeKey].toLowerCase();\n\n          if (!approvedSeenTags[primaryAttributeKey]) {\n            approvedSeenTags[primaryAttributeKey] = {};\n          }\n\n          if (!instanceSeenTags[primaryAttributeKey]) {\n            instanceSeenTags[primaryAttributeKey] = {};\n          }\n\n          if (!approvedSeenTags[primaryAttributeKey][value]) {\n            instanceSeenTags[primaryAttributeKey][value] = true;\n            return true;\n          }\n\n          return false;\n        })\n        .reverse()\n        .forEach(tag => approvedTags.push(tag));\n\n      // Update seen tags with tags from this instance\n      const keys = Object.keys(instanceSeenTags);\n      for (let i = 0; i < keys.length; i += 1) {\n        const attributeKey = keys[i];\n        const tagUnion = {\n          ...approvedSeenTags[attributeKey],\n          ...instanceSeenTags[attributeKey],\n        };\n\n        approvedSeenTags[attributeKey] = tagUnion;\n      }\n\n      return approvedTags;\n    }, [])\n    .reverse();\n};\n\nconst getAnyTrueFromPropsList = (propsList, checkedTag) => {\n  if (Array.isArray(propsList) && propsList.length) {\n    for (let index = 0; index < propsList.length; index += 1) {\n      const prop = propsList[index];\n      if (prop[checkedTag]) {\n        return true;\n      }\n    }\n  }\n  return false;\n};\n\nconst reducePropsToState = propsList => ({\n  baseTag: getBaseTagFromPropsList([TAG_PROPERTIES.HREF], propsList),\n  bodyAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.BODY, propsList),\n  defer: getInnermostProperty(propsList, HELMET_PROPS.DEFER),\n  encode: getInnermostProperty(propsList, HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS),\n  htmlAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.HTML, propsList),\n  linkTags: getTagsFromPropsList(\n    TAG_NAMES.LINK,\n    [TAG_PROPERTIES.REL, TAG_PROPERTIES.HREF],\n    propsList\n  ),\n  metaTags: getTagsFromPropsList(\n    TAG_NAMES.META,\n    [\n      TAG_PROPERTIES.NAME,\n      TAG_PROPERTIES.CHARSET,\n      TAG_PROPERTIES.HTTPEQUIV,\n      TAG_PROPERTIES.PROPERTY,\n      TAG_PROPERTIES.ITEM_PROP,\n    ],\n    propsList\n  ),\n  noscriptTags: getTagsFromPropsList(TAG_NAMES.NOSCRIPT, [TAG_PROPERTIES.INNER_HTML], propsList),\n  onChangeClientState: getOnChangeClientState(propsList),\n  scriptTags: getTagsFromPropsList(\n    TAG_NAMES.SCRIPT,\n    [TAG_PROPERTIES.SRC, TAG_PROPERTIES.INNER_HTML],\n    propsList\n  ),\n  styleTags: getTagsFromPropsList(TAG_NAMES.STYLE, [TAG_PROPERTIES.CSS_TEXT], propsList),\n  title: getTitleFromPropsList(propsList),\n  titleAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.TITLE, propsList),\n  prioritizeSeoTags: getAnyTrueFromPropsList(propsList, HELMET_PROPS.PRIORITIZE_SEO_TAGS),\n});\n\nexport const flattenArray = possibleArray =>\n  Array.isArray(possibleArray) ? possibleArray.join('') : possibleArray;\n\nexport { reducePropsToState };\n\nconst checkIfPropsMatch = (props, toMatch) => {\n  const keys = Object.keys(props);\n  for (let i = 0; i < keys.length; i += 1) {\n    // e.g. if rel exists in the list of allowed props [amphtml, alternate, etc]\n    if (toMatch[keys[i]] && toMatch[keys[i]].includes(props[keys[i]])) {\n      return true;\n    }\n  }\n  return false;\n};\n\nexport const prioritizer = (elementsList, propsToMatch) => {\n  if (Array.isArray(elementsList)) {\n    return elementsList.reduce(\n      (acc, elementAttrs) => {\n        if (checkIfPropsMatch(elementAttrs, propsToMatch)) {\n          acc.priority.push(elementAttrs);\n        } else {\n          acc.default.push(elementAttrs);\n        }\n        return acc;\n      },\n      { priority: [], default: [] }\n    );\n  }\n  return { default: elementsList };\n};\n\nexport const without = (obj, key) => {\n  return {\n    ...obj,\n    [key]: undefined,\n  };\n};\n", "import React from 'react';\nimport {\n  HELMET_ATTRIBUTE,\n  TAG_NAMES,\n  REACT_TAG_MAP,\n  TAG_PROPERTIES,\n  ATTRIBUTE_NAMES,\n  SEO_PRIORITY_TAGS,\n} from './constants';\nimport { flattenArray, prioritizer } from './utils';\n\nconst SELF_CLOSING_TAGS = [TAG_NAMES.NOSCRIPT, TAG_NAMES.SCRIPT, TAG_NAMES.STYLE];\n\nconst encodeSpecialCharacters = (str, encode = true) => {\n  if (encode === false) {\n    return String(str);\n  }\n\n  return String(str)\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\"/g, '&quot;')\n    .replace(/'/g, '&#x27;');\n};\n\nconst generateElementAttributesAsString = attributes =>\n  Object.keys(attributes).reduce((str, key) => {\n    const attr = typeof attributes[key] !== 'undefined' ? `${key}=\"${attributes[key]}\"` : `${key}`;\n    return str ? `${str} ${attr}` : attr;\n  }, '');\n\nconst generateTitleAsString = (type, title, attributes, encode) => {\n  const attributeString = generateElementAttributesAsString(attributes);\n  const flattenedTitle = flattenArray(title);\n  return attributeString\n    ? `<${type} ${HELMET_ATTRIBUTE}=\"true\" ${attributeString}>${encodeSpecialCharacters(\n        flattenedTitle,\n        encode\n      )}</${type}>`\n    : `<${type} ${HELMET_ATTRIBUTE}=\"true\">${encodeSpecialCharacters(\n        flattenedTitle,\n        encode\n      )}</${type}>`;\n};\n\nconst generateTagsAsString = (type, tags, encode) =>\n  tags.reduce((str, tag) => {\n    const attributeHtml = Object.keys(tag)\n      .filter(\n        attribute =>\n          !(attribute === TAG_PROPERTIES.INNER_HTML || attribute === TAG_PROPERTIES.CSS_TEXT)\n      )\n      .reduce((string, attribute) => {\n        const attr =\n          typeof tag[attribute] === 'undefined'\n            ? attribute\n            : `${attribute}=\"${encodeSpecialCharacters(tag[attribute], encode)}\"`;\n        return string ? `${string} ${attr}` : attr;\n      }, '');\n\n    const tagContent = tag.innerHTML || tag.cssText || '';\n\n    const isSelfClosing = SELF_CLOSING_TAGS.indexOf(type) === -1;\n\n    return `${str}<${type} ${HELMET_ATTRIBUTE}=\"true\" ${attributeHtml}${\n      isSelfClosing ? `/>` : `>${tagContent}</${type}>`\n    }`;\n  }, '');\n\nconst convertElementAttributesToReactProps = (attributes, initProps = {}) =>\n  Object.keys(attributes).reduce((obj, key) => {\n    obj[REACT_TAG_MAP[key] || key] = attributes[key];\n    return obj;\n  }, initProps);\n\nconst generateTitleAsReactComponent = (type, title, attributes) => {\n  // assigning into an array to define toString function on it\n  const initProps = {\n    key: title,\n    [HELMET_ATTRIBUTE]: true,\n  };\n  const props = convertElementAttributesToReactProps(attributes, initProps);\n\n  return [React.createElement(TAG_NAMES.TITLE, props, title)];\n};\n\nconst generateTagsAsReactComponent = (type, tags) =>\n  tags.map((tag, i) => {\n    const mappedTag = {\n      key: i,\n      [HELMET_ATTRIBUTE]: true,\n    };\n\n    Object.keys(tag).forEach(attribute => {\n      const mappedAttribute = REACT_TAG_MAP[attribute] || attribute;\n\n      if (\n        mappedAttribute === TAG_PROPERTIES.INNER_HTML ||\n        mappedAttribute === TAG_PROPERTIES.CSS_TEXT\n      ) {\n        const content = tag.innerHTML || tag.cssText;\n        mappedTag.dangerouslySetInnerHTML = { __html: content };\n      } else {\n        mappedTag[mappedAttribute] = tag[attribute];\n      }\n    });\n\n    return React.createElement(type, mappedTag);\n  });\n\nconst getMethodsForTag = (type, tags, encode) => {\n  switch (type) {\n    case TAG_NAMES.TITLE:\n      return {\n        toComponent: () =>\n          generateTitleAsReactComponent(type, tags.title, tags.titleAttributes, encode),\n        toString: () => generateTitleAsString(type, tags.title, tags.titleAttributes, encode),\n      };\n    case ATTRIBUTE_NAMES.BODY:\n    case ATTRIBUTE_NAMES.HTML:\n      return {\n        toComponent: () => convertElementAttributesToReactProps(tags),\n        toString: () => generateElementAttributesAsString(tags),\n      };\n    default:\n      return {\n        toComponent: () => generateTagsAsReactComponent(type, tags),\n        toString: () => generateTagsAsString(type, tags, encode),\n      };\n  }\n};\n\nconst getPriorityMethods = ({ metaTags, linkTags, scriptTags, encode }) => {\n  const meta = prioritizer(metaTags, SEO_PRIORITY_TAGS.meta);\n  const link = prioritizer(linkTags, SEO_PRIORITY_TAGS.link);\n  const script = prioritizer(scriptTags, SEO_PRIORITY_TAGS.script);\n\n  // need to have toComponent() and toString()\n  const priorityMethods = {\n    toComponent: () => [\n      ...generateTagsAsReactComponent(TAG_NAMES.META, meta.priority),\n      ...generateTagsAsReactComponent(TAG_NAMES.LINK, link.priority),\n      ...generateTagsAsReactComponent(TAG_NAMES.SCRIPT, script.priority),\n    ],\n    toString: () =>\n      // generate all the tags as strings and concatenate them\n      `${getMethodsForTag(TAG_NAMES.META, meta.priority, encode)} ${getMethodsForTag(\n        TAG_NAMES.LINK,\n        link.priority,\n        encode\n      )} ${getMethodsForTag(TAG_NAMES.SCRIPT, script.priority, encode)}`,\n  };\n\n  return {\n    priorityMethods,\n    metaTags: meta.default,\n    linkTags: link.default,\n    scriptTags: script.default,\n  };\n};\n\nconst mapStateOnServer = props => {\n  const {\n    baseTag,\n    bodyAttributes,\n    encode,\n    htmlAttributes,\n    noscriptTags,\n    styleTags,\n    title = '',\n    titleAttributes,\n    prioritizeSeoTags,\n  } = props;\n  let { linkTags, metaTags, scriptTags } = props;\n  let priorityMethods = {\n    toComponent: () => {},\n    toString: () => '',\n  };\n  if (prioritizeSeoTags) {\n    ({ priorityMethods, linkTags, metaTags, scriptTags } = getPriorityMethods(props));\n  }\n  return {\n    priority: priorityMethods,\n    base: getMethodsForTag(TAG_NAMES.BASE, baseTag, encode),\n    bodyAttributes: getMethodsForTag(ATTRIBUTE_NAMES.BODY, bodyAttributes, encode),\n    htmlAttributes: getMethodsForTag(ATTRIBUTE_NAMES.HTML, htmlAttributes, encode),\n    link: getMethodsForTag(TAG_NAMES.LINK, linkTags, encode),\n    meta: getMethodsForTag(TAG_NAMES.META, metaTags, encode),\n    noscript: getMethodsForTag(TAG_NAMES.NOSCRIPT, noscriptTags, encode),\n    script: getMethodsForTag(TAG_NAMES.SCRIPT, scriptTags, encode),\n    style: getMethodsForTag(TAG_NAMES.STYLE, styleTags, encode),\n    title: getMethodsForTag(TAG_NAMES.TITLE, { title, titleAttributes }, encode),\n  };\n};\n\nexport default mapStateOnServer;\n", "import mapStateOnServer from './server';\n\nconst instances = [];\n\nexport function clearInstances() {\n  instances.length = 0;\n}\n\nexport default class HelmetData {\n  instances = [];\n\n  value = {\n    setHelmet: serverState => {\n      this.context.helmet = serverState;\n    },\n    helmetInstances: {\n      get: () => (this.canUseDOM ? instances : this.instances),\n      add: instance => {\n        (this.canUseDOM ? instances : this.instances).push(instance);\n      },\n      remove: instance => {\n        const index = (this.canUseDOM ? instances : this.instances).indexOf(instance);\n        (this.canUseDOM ? instances : this.instances).splice(index, 1);\n      },\n    },\n  };\n\n  constructor(context, canUseDOM = typeof document !== 'undefined') {\n    this.context = context;\n    this.canUseDOM = canUseDOM;\n\n    if (!canUseDOM) {\n      context.helmet = mapStateOnServer({\n        baseTag: [],\n        bodyAttributes: {},\n        encodeSpecialCharacters: true,\n        htmlAttributes: {},\n        linkTags: [],\n        metaTags: [],\n        noscriptTags: [],\n        scriptTags: [],\n        styleTags: [],\n        title: '',\n        titleAttributes: {},\n      });\n    }\n  }\n}\n", "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport HelmetData from './HelmetData';\n\nconst defaultValue = {};\n\nexport const Context = React.createContext(defaultValue);\n\nexport const providerShape = PropTypes.shape({\n  setHelmet: PropTypes.func,\n  helmetInstances: PropTypes.shape({\n    get: PropTypes.func,\n    add: PropTypes.func,\n    remove: PropTypes.func,\n  }),\n});\n\nconst canUseDOM = typeof document !== 'undefined';\n\nexport default class Provider extends Component {\n  static canUseDOM = canUseDOM;\n\n  static propTypes = {\n    context: PropTypes.shape({\n      helmet: PropTypes.shape(),\n    }),\n    children: PropTypes.node.isRequired,\n  };\n\n  static defaultProps = {\n    context: {},\n  };\n\n  static displayName = 'HelmetProvider';\n\n  constructor(props) {\n    super(props);\n\n    this.helmetData = new HelmetData(this.props.context, Provider.canUseDOM);\n  }\n\n  render() {\n    return <Context.Provider value={this.helmetData.value}>{this.props.children}</Context.Provider>;\n  }\n}\n", "import { HELMET_ATTRIBUTE, TAG_NAMES, TAG_PROPERTIES } from './constants';\nimport { flattenArray } from './utils';\n\nconst updateTags = (type, tags) => {\n  const headElement = document.head || document.querySelector(TAG_NAMES.HEAD);\n  const tagNodes = headElement.querySelectorAll(`${type}[${HELMET_ATTRIBUTE}]`);\n  const oldTags = [].slice.call(tagNodes);\n  const newTags = [];\n  let indexToDelete;\n\n  if (tags && tags.length) {\n    tags.forEach(tag => {\n      const newElement = document.createElement(type);\n\n      // eslint-disable-next-line\n      for (const attribute in tag) {\n        if (Object.prototype.hasOwnProperty.call(tag, attribute)) {\n          if (attribute === TAG_PROPERTIES.INNER_HTML) {\n            newElement.innerHTML = tag.innerHTML;\n          } else if (attribute === TAG_PROPERTIES.CSS_TEXT) {\n            if (newElement.styleSheet) {\n              newElement.styleSheet.cssText = tag.cssText;\n            } else {\n              newElement.appendChild(document.createTextNode(tag.cssText));\n            }\n          } else {\n            const value = typeof tag[attribute] === 'undefined' ? '' : tag[attribute];\n            newElement.setAttribute(attribute, value);\n          }\n        }\n      }\n\n      newElement.setAttribute(HELMET_ATTRIBUTE, 'true');\n\n      // Remove a duplicate tag from domTagstoRemove, so it isn't cleared.\n      if (\n        oldTags.some((existingTag, index) => {\n          indexToDelete = index;\n          return newElement.isEqualNode(existingTag);\n        })\n      ) {\n        oldTags.splice(indexToDelete, 1);\n      } else {\n        newTags.push(newElement);\n      }\n    });\n  }\n\n  oldTags.forEach(tag => tag.parentNode.removeChild(tag));\n  newTags.forEach(tag => headElement.appendChild(tag));\n\n  return {\n    oldTags,\n    newTags,\n  };\n};\n\nconst updateAttributes = (tagName, attributes) => {\n  const elementTag = document.getElementsByTagName(tagName)[0];\n\n  if (!elementTag) {\n    return;\n  }\n\n  const helmetAttributeString = elementTag.getAttribute(HELMET_ATTRIBUTE);\n  const helmetAttributes = helmetAttributeString ? helmetAttributeString.split(',') : [];\n  const attributesToRemove = [].concat(helmetAttributes);\n  const attributeKeys = Object.keys(attributes);\n\n  for (let i = 0; i < attributeKeys.length; i += 1) {\n    const attribute = attributeKeys[i];\n    const value = attributes[attribute] || '';\n\n    if (elementTag.getAttribute(attribute) !== value) {\n      elementTag.setAttribute(attribute, value);\n    }\n\n    if (helmetAttributes.indexOf(attribute) === -1) {\n      helmetAttributes.push(attribute);\n    }\n\n    const indexToSave = attributesToRemove.indexOf(attribute);\n    if (indexToSave !== -1) {\n      attributesToRemove.splice(indexToSave, 1);\n    }\n  }\n\n  for (let i = attributesToRemove.length - 1; i >= 0; i -= 1) {\n    elementTag.removeAttribute(attributesToRemove[i]);\n  }\n\n  if (helmetAttributes.length === attributesToRemove.length) {\n    elementTag.removeAttribute(HELMET_ATTRIBUTE);\n  } else if (elementTag.getAttribute(HELMET_ATTRIBUTE) !== attributeKeys.join(',')) {\n    elementTag.setAttribute(HELMET_ATTRIBUTE, attributeKeys.join(','));\n  }\n};\n\nconst updateTitle = (title, attributes) => {\n  if (typeof title !== 'undefined' && document.title !== title) {\n    document.title = flattenArray(title);\n  }\n\n  updateAttributes(TAG_NAMES.TITLE, attributes);\n};\n\nconst commitTagChanges = (newState, cb) => {\n  const {\n    baseTag,\n    bodyAttributes,\n    htmlAttributes,\n    linkTags,\n    metaTags,\n    noscriptTags,\n    onChangeClientState,\n    scriptTags,\n    styleTags,\n    title,\n    titleAttributes,\n  } = newState;\n  updateAttributes(TAG_NAMES.BODY, bodyAttributes);\n  updateAttributes(TAG_NAMES.HTML, htmlAttributes);\n\n  updateTitle(title, titleAttributes);\n\n  const tagUpdates = {\n    baseTag: updateTags(TAG_NAMES.BASE, baseTag),\n    linkTags: updateTags(TAG_NAMES.LINK, linkTags),\n    metaTags: updateTags(TAG_NAMES.META, metaTags),\n    noscriptTags: updateTags(TAG_NAMES.NOSCRIPT, noscriptTags),\n    scriptTags: updateTags(TAG_NAMES.SCRIPT, scriptTags),\n    styleTags: updateTags(TAG_NAMES.STYLE, styleTags),\n  };\n\n  const addedTags = {};\n  const removedTags = {};\n\n  Object.keys(tagUpdates).forEach(tagType => {\n    const { newTags, oldTags } = tagUpdates[tagType];\n\n    if (newTags.length) {\n      addedTags[tagType] = newTags;\n    }\n    if (oldTags.length) {\n      removedTags[tagType] = tagUpdates[tagType].oldTags;\n    }\n  });\n\n  if (cb) {\n    cb();\n  }\n\n  onChangeClientState(newState, addedTags, removedTags);\n};\n\n// eslint-disable-next-line\nlet _helmetCallback = null;\n\nconst handleStateChangeOnClient = newState => {\n  if (_helmetCallback) {\n    cancelAnimationFrame(_helmetCallback);\n  }\n\n  if (newState.defer) {\n    _helmetCallback = requestAnimationFrame(() => {\n      commitTagChanges(newState, () => {\n        _helmetCallback = null;\n      });\n    });\n  } else {\n    commitTagChanges(newState);\n    _helmetCallback = null;\n  }\n};\n\nexport default handleStateChangeOnClient;\n", "import { Component } from 'react';\nimport shallowEqual from 'shallowequal';\nimport handleStateChangeOnClient from './client';\nimport mapStateOnServer from './server';\nimport { reducePropsToState } from './utils';\nimport Provider, { providerShape } from './Provider';\n\nexport default class Dispatcher extends Component {\n  static propTypes = {\n    context: providerShape.isRequired,\n  };\n\n  static displayName = 'HelmetDispatcher';\n\n  rendered = false;\n\n  shouldComponentUpdate(nextProps) {\n    return !shallowEqual(nextProps, this.props);\n  }\n\n  componentDidUpdate() {\n    this.emitChange();\n  }\n\n  componentWillUnmount() {\n    const { helmetInstances } = this.props.context;\n    helmetInstances.remove(this);\n    this.emitChange();\n  }\n\n  emitChange() {\n    const { helmetInstances, setHelmet } = this.props.context;\n    let serverState = null;\n    const state = reducePropsToState(\n      helmetInstances.get().map(instance => {\n        const props = { ...instance.props };\n        delete props.context;\n        return props;\n      })\n    );\n    if (Provider.canUseDOM) {\n      handleStateChangeOnClient(state);\n    } else if (mapStateOnServer) {\n      serverState = mapStateOnServer(state);\n    }\n    setHelmet(serverState);\n  }\n\n  // componentWillMount will be deprecated\n  // for SSR, initialize on first render\n  // constructor is also unsafe in StrictMode\n  init() {\n    if (this.rendered) {\n      return;\n    }\n\n    this.rendered = true;\n\n    const { helmetInstances } = this.props.context;\n    helmetInstances.add(this);\n    this.emitChange();\n  }\n\n  render() {\n    this.init();\n\n    return null;\n  }\n}\n", "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport fastCompare from 'react-fast-compare';\nimport invariant from 'invariant';\nimport { Context } from './Provider';\nimport HelmetData from './HelmetData';\nimport Dispatcher from './Dispatcher';\nimport { without } from './utils';\nimport { TAG_NAMES, VALID_TAG_NAMES, HTML_TAG_MAP } from './constants';\n\nexport { default as HelmetData } from './HelmetData';\nexport { default as HelmetProvider } from './Provider';\n\n/* eslint-disable class-methods-use-this */\nexport class Helmet extends Component {\n  /**\n   * @param {Object} base: {\"target\": \"_blank\", \"href\": \"http://mysite.com/\"}\n   * @param {Object} bodyAttributes: {\"className\": \"root\"}\n   * @param {String} defaultTitle: \"Default Title\"\n   * @param {Boolean} defer: true\n   * @param {Boolean} encodeSpecialCharacters: true\n   * @param {Object} htmlAttributes: {\"lang\": \"en\", \"amp\": undefined}\n   * @param {Array} link: [{\"rel\": \"canonical\", \"href\": \"http://mysite.com/example\"}]\n   * @param {Array} meta: [{\"name\": \"description\", \"content\": \"Test description\"}]\n   * @param {Array} noscript: [{\"innerHTML\": \"<img src='http://mysite.com/js/test.js'\"}]\n   * @param {Function} onChangeClientState: \"(newState) => console.log(newState)\"\n   * @param {Array} script: [{\"type\": \"text/javascript\", \"src\": \"http://mysite.com/js/test.js\"}]\n   * @param {Array} style: [{\"type\": \"text/css\", \"cssText\": \"div { display: block; color: blue; }\"}]\n   * @param {String} title: \"Title\"\n   * @param {Object} titleAttributes: {\"itemprop\": \"name\"}\n   * @param {String} titleTemplate: \"MySite.com - %s\"\n   * @param {Boolean} prioritizeSeoTags: false\n   */\n  /* eslint-disable react/forbid-prop-types, react/require-default-props */\n  static propTypes = {\n    base: PropTypes.object,\n    bodyAttributes: PropTypes.object,\n    children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n    defaultTitle: PropTypes.string,\n    defer: PropTypes.bool,\n    encodeSpecialCharacters: PropTypes.bool,\n    htmlAttributes: PropTypes.object,\n    link: PropTypes.arrayOf(PropTypes.object),\n    meta: PropTypes.arrayOf(PropTypes.object),\n    noscript: PropTypes.arrayOf(PropTypes.object),\n    onChangeClientState: PropTypes.func,\n    script: PropTypes.arrayOf(PropTypes.object),\n    style: PropTypes.arrayOf(PropTypes.object),\n    title: PropTypes.string,\n    titleAttributes: PropTypes.object,\n    titleTemplate: PropTypes.string,\n    prioritizeSeoTags: PropTypes.bool,\n    helmetData: PropTypes.object,\n  };\n  /* eslint-enable react/prop-types, react/forbid-prop-types, react/require-default-props */\n\n  static defaultProps = {\n    defer: true,\n    encodeSpecialCharacters: true,\n    prioritizeSeoTags: false,\n  };\n\n  static displayName = 'Helmet';\n\n  shouldComponentUpdate(nextProps) {\n    return !fastCompare(without(this.props, 'helmetData'), without(nextProps, 'helmetData'));\n  }\n\n  mapNestedChildrenToProps(child, nestedChildren) {\n    if (!nestedChildren) {\n      return null;\n    }\n\n    switch (child.type) {\n      case TAG_NAMES.SCRIPT:\n      case TAG_NAMES.NOSCRIPT:\n        return {\n          innerHTML: nestedChildren,\n        };\n\n      case TAG_NAMES.STYLE:\n        return {\n          cssText: nestedChildren,\n        };\n      default:\n        throw new Error(\n          `<${child.type} /> elements are self-closing and can not contain children. Refer to our API for more information.`\n        );\n    }\n  }\n\n  flattenArrayTypeChildren({ child, arrayTypeChildren, newChildProps, nestedChildren }) {\n    return {\n      ...arrayTypeChildren,\n      [child.type]: [\n        ...(arrayTypeChildren[child.type] || []),\n        {\n          ...newChildProps,\n          ...this.mapNestedChildrenToProps(child, nestedChildren),\n        },\n      ],\n    };\n  }\n\n  mapObjectTypeChildren({ child, newProps, newChildProps, nestedChildren }) {\n    switch (child.type) {\n      case TAG_NAMES.TITLE:\n        return {\n          ...newProps,\n          [child.type]: nestedChildren,\n          titleAttributes: { ...newChildProps },\n        };\n\n      case TAG_NAMES.BODY:\n        return {\n          ...newProps,\n          bodyAttributes: { ...newChildProps },\n        };\n\n      case TAG_NAMES.HTML:\n        return {\n          ...newProps,\n          htmlAttributes: { ...newChildProps },\n        };\n      default:\n        return {\n          ...newProps,\n          [child.type]: { ...newChildProps },\n        };\n    }\n  }\n\n  mapArrayTypeChildrenToProps(arrayTypeChildren, newProps) {\n    let newFlattenedProps = { ...newProps };\n\n    Object.keys(arrayTypeChildren).forEach(arrayChildName => {\n      newFlattenedProps = {\n        ...newFlattenedProps,\n        [arrayChildName]: arrayTypeChildren[arrayChildName],\n      };\n    });\n\n    return newFlattenedProps;\n  }\n\n  warnOnInvalidChildren(child, nestedChildren) {\n    invariant(\n      VALID_TAG_NAMES.some(name => child.type === name),\n      typeof child.type === 'function'\n        ? `You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.`\n        : `Only elements types ${VALID_TAG_NAMES.join(\n            ', '\n          )} are allowed. Helmet does not support rendering <${\n            child.type\n          }> elements. Refer to our API for more information.`\n    );\n\n    invariant(\n      !nestedChildren ||\n        typeof nestedChildren === 'string' ||\n        (Array.isArray(nestedChildren) &&\n          !nestedChildren.some(nestedChild => typeof nestedChild !== 'string')),\n      `Helmet expects a string as a child of <${child.type}>. Did you forget to wrap your children in braces? ( <${child.type}>{\\`\\`}</${child.type}> ) Refer to our API for more information.`\n    );\n\n    return true;\n  }\n\n  mapChildrenToProps(children, newProps) {\n    let arrayTypeChildren = {};\n\n    React.Children.forEach(children, child => {\n      if (!child || !child.props) {\n        return;\n      }\n\n      const { children: nestedChildren, ...childProps } = child.props;\n      // convert React props to HTML attributes\n      const newChildProps = Object.keys(childProps).reduce((obj, key) => {\n        obj[HTML_TAG_MAP[key] || key] = childProps[key];\n        return obj;\n      }, {});\n\n      let { type } = child;\n      if (typeof type === 'symbol') {\n        type = type.toString();\n      } else {\n        this.warnOnInvalidChildren(child, nestedChildren);\n      }\n\n      switch (type) {\n        case TAG_NAMES.FRAGMENT:\n          newProps = this.mapChildrenToProps(nestedChildren, newProps);\n          break;\n\n        case TAG_NAMES.LINK:\n        case TAG_NAMES.META:\n        case TAG_NAMES.NOSCRIPT:\n        case TAG_NAMES.SCRIPT:\n        case TAG_NAMES.STYLE:\n          arrayTypeChildren = this.flattenArrayTypeChildren({\n            child,\n            arrayTypeChildren,\n            newChildProps,\n            nestedChildren,\n          });\n          break;\n\n        default:\n          newProps = this.mapObjectTypeChildren({\n            child,\n            newProps,\n            newChildProps,\n            nestedChildren,\n          });\n          break;\n      }\n    });\n\n    return this.mapArrayTypeChildrenToProps(arrayTypeChildren, newProps);\n  }\n\n  render() {\n    const { children, ...props } = this.props;\n    let newProps = { ...props };\n    let { helmetData } = props;\n\n    if (children) {\n      newProps = this.mapChildrenToProps(children, newProps);\n    }\n\n    if (helmetData && !(helmetData instanceof HelmetData)) {\n      helmetData = new HelmetData(helmetData.context, helmetData.instances);\n    }\n\n    return helmetData ? (\n      // eslint-disable-next-line react/jsx-props-no-spreading\n      <Dispatcher {...newProps} context={helmetData.value} helmetData={undefined} />\n    ) : (\n      <Context.Consumer>\n        {(\n          context // eslint-disable-next-line react/jsx-props-no-spreading\n        ) => <Dispatcher {...newProps} context={context} />}\n      </Context.Consumer>\n    );\n  }\n}\n", "import map from 'lodash-es/map';\nimport unescape from 'lodash-es/unescape';\nimport type { FC } from 'react';\nimport { Helmet } from 'react-helmet-async';\n\nexport interface HeaderProps {\n  title?: string;\n  description?: string;\n  keywords?: string[];\n  ogImage?: string;\n  ogVideo?: string;\n  noIndex?: boolean;\n  noFollow?: boolean;\n  customMetas?: {\n    name: string;\n    content: string;\n  }[];\n}\n\nexport const Header: FC<HeaderProps> = ({\n  title,\n  description,\n  keywords,\n  ogImage,\n  ogVideo,\n  noIndex,\n  noFollow,\n  customMetas,\n}) => {\n  let robots: string | undefined;\n\n  if (noIndex && noFollow) {\n    robots = 'noindex, nofollow';\n  } else if (noIndex) {\n    robots = 'noindex';\n  } else if (noFollow) {\n    robots = 'nofollow';\n  }\n\n  return (\n    // @ts-ignore - Need to update to latest to support children type with React 18.\n    <Helmet>\n      {!!title && <title>{unescape(title)}</title>}\n      {!!title && <meta property=\"og:title\" content={unescape(title)} />}\n      {!!description && <meta name=\"description\" content={unescape(description)} />}\n      {!!description && <meta property=\"og:description\" content={unescape(description)} />}\n      {!!keywords && <meta name=\"keywords\" content={unescape(keywords.join(','))} />}\n      {!!ogImage && <meta property=\"og:image\" content={ogImage} />}\n      {!!ogImage && <meta property=\"og:image:secure_url\" content={ogImage} />}\n      {!!ogVideo && <meta property=\"og:video\" content={ogVideo} />}\n      {!!ogVideo && <meta property=\"og:video:secure_url\" content={ogVideo} />}\n      {!!robots && <meta name=\"robots\" content={robots} />}\n      {!!customMetas &&\n        map(customMetas, customMeta => (\n          <meta key={customMeta.name} name={customMeta.name} content={customMeta.content} />\n        ))}\n    </Helmet>\n  );\n};\n\nHeader.displayName = 'Header';\n", "import { cx } from '@emotion/css';\nimport { isEmpty, isNullish } from 'radashi';\nimport type { CSSProperties, ReactElement, ReactNode } from 'react';\nimport { forwardRef } from 'react';\n\nimport type { BackgroundColor, Device } from '../../constants';\nimport { Alignment, mobileMaxWidth, VerticalAlignment } from '../../constants';\nimport { useIsMobile } from '../../hooks';\nimport { MotifComponent, MotifScheme, useMotifStyles } from '../../motif';\nimport type { BaseComponentProps, Buttons, ImageSources } from '../../types';\nimport {\n  alignmentCss,\n  dataSetToAttributes,\n  getBackgroundClassName,\n  mobileAlignmentCss,\n  useWindowSize,\n} from '../../utils';\nimport { BlockBoundary } from '../BlockBoundary';\nimport type { BreadcrumbProps } from '../Breadcrumbs/Breadcrumb';\nimport { Breadcrumbs } from '../Breadcrumbs/Breadcrumbs';\nimport type { CarouselV3Props } from '../CarouselV3';\nimport { IconButton } from '../IconButton';\nimport { IconButtonSize } from '../IconButton/IconButton.types';\nimport type { MediaProps } from '../Media';\nimport { PictureWithStickers } from '../Picture';\nimport { Social } from '../Social';\nimport { type StickerProps, StickerSize } from '../Sticker';\nimport { stickersDesktopOnlyCss } from '../Sticker/styles';\nimport { VideoWithStickers } from '../Video';\nimport { HeroSize } from './Hero.constants';\nimport {\n  alignItemsEndCss,\n  alignItemsStartCss,\n  backgroundContainerCss,\n  backgroundCss,\n  bodyCss,\n  boundaryCss,\n  callsToActionWrapperCss,\n  compactBoundaryCss,\n  curtainCss,\n  cutoffWithMediaPx,\n  eyebrowCss,\n  fitWindowCss,\n  footerCss,\n  headerCss,\n  heroCompactTitleCss,\n  heroCss,\n  heroCurtainOpacityCssVar,\n  heroMediaCss,\n  heroScrollButtonCss,\n  heroScrollButtonWrapCss,\n  heroSocialContainerCss,\n  heroSplitCss,\n  heroTitleContainerCss,\n  heroTopicsTransparencyCss,\n  heroWithBreadcrumbsCss,\n  hideTextOverflowCss,\n  reverseSplitCss,\n  splitItemCss,\n  splitMediaCss,\n  splitMediaItemCss,\n  subTitleCss,\n  textContentCss,\n  titleCss,\n  titleIncreasedFontSizeCss,\n  topicsContainerCss,\n} from './Hero.styled';\nimport { HeroHeader } from './HeroHeader';\nimport { HeroMedia } from './HeroMedia';\n\nexport type ForegroundMediaProps = MediaProps | CarouselV3Props;\n\nexport type HeroBreakTemplate = 'Straight' | 'Default';\n\nexport const BackgroundMediaLayout = {\n  FullScreen: 'Full screen',\n  Start: '50% start',\n  End: '50% end',\n} as const;\n\nexport type BackgroundMediaLayout =\n  (typeof BackgroundMediaLayout)[keyof typeof BackgroundMediaLayout];\n\nexport interface HeroProps extends BaseComponentProps {\n  wrapMedia?: Device;\n  body?: ReactNode;\n  callsToAction?: Buttons;\n  foregroundMedia?: ReactElement<ForegroundMediaProps>;\n  backgroundVideoSource?: string;\n  backgroundPosterSource?: string;\n  mobileBackgroundVideoSource?: string;\n  curtainOpacityPercentage?: number;\n  fitWindow?: boolean;\n  motifScheme?: MotifScheme;\n  /** @deprecated Use motifScheme instead. */\n  backgroundColor?: BackgroundColor;\n  eyebrow?: ReactNode;\n  title: ReactNode;\n  header?: ReactNode | Date;\n  textAlign?: Alignment;\n  textAlignMobile?: Alignment;\n  verticalTextAlign?: VerticalAlignment;\n  bgImgSrcs?: ImageSources;\n  bgImgAltText?: string;\n  headerImgSrcs?: ImageSources;\n  headerImgAltText?: string;\n  /** Hero foreground media sources. */\n  imgSrcs?: ImageSources;\n  imgAltText?: string;\n  shareable?: boolean;\n  footer?: ReactNode;\n  showMediaMobile?: boolean;\n  anchorId?: string;\n  eyebrowDataset?: DOMStringMap;\n  titleDataset?: DOMStringMap;\n  bodyDataset?: DOMStringMap;\n  headerDataset?: DOMStringMap;\n  postChildren?: ReactNode;\n  size?: HeroSize;\n  subTitle?: ReactNode;\n  subTitleDataset?: DOMStringMap;\n  showScrollButton?: boolean;\n  onScrollDownButtonClick?: () => void;\n  backgroundMediaLayout?: BackgroundMediaLayout;\n  breadcrumbs?: Array<BreadcrumbProps>;\n  topics?: ReactNode;\n  backgroundMediaStickers?: StickerProps[];\n  increaseTitleFontSize?: boolean;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO: Refactor to reduce complexity.\nexport const Hero = forwardRef<HTMLElement, HeroProps>((props, ref) => {\n  useMotifStyles(MotifComponent.HERO);\n\n  const {\n    backgroundVideoSource,\n    backgroundPosterSource,\n    mobileBackgroundVideoSource,\n    body,\n    callsToAction,\n    fitWindow = false,\n    foregroundMedia,\n    curtainOpacityPercentage: defaultCurtainOpacityPercentage,\n    headerImgSrcs,\n    headerImgAltText,\n    eyebrow,\n    title,\n    motifScheme,\n    backgroundColor,\n    header,\n    bgImgSrcs,\n    bgImgAltText,\n    imgSrcs,\n    // Note that we do not set a default for horizontal text align. This\n    // is _intentional_. Reasoning: when we have a media, left-align text.\n    // When we don't center align text. Therefore, use undefined to mean\n    // \"default behavior\"\n    textAlign,\n    textAlignMobile,\n    verticalTextAlign = VerticalAlignment.Middle,\n    shareable = false,\n    className,\n    footer,\n    anchorId,\n    eyebrowDataset,\n    titleDataset,\n    bodyDataset,\n    headerDataset,\n    postChildren,\n    showMediaMobile,\n    wrapMedia,\n    size,\n    subTitle,\n    subTitleDataset,\n    showScrollButton,\n    onScrollDownButtonClick,\n    backgroundMediaLayout = BackgroundMediaLayout.FullScreen,\n    breadcrumbs,\n    topics,\n    backgroundMediaStickers,\n    increaseTitleFontSize = false,\n  } = props;\n\n  const hasMedia = !!(foregroundMedia || imgSrcs);\n\n  const { width } = useWindowSize();\n\n  const isMobile = useIsMobile();\n\n  // Create fallback chain here instead of default parameters otherwise if 'motifScheme' is not provided,\n  // the default background color will be used instead of falling back to the 'backgroundColor' parameter\n  const motifSchemeWithFallback =\n    motifScheme ??\n    (getBackgroundClassName(backgroundColor) as MotifScheme) ??\n    MotifScheme.SECONDARY;\n\n  // There's a resolution where the media does not look good and squishes\n  // the text too hard. So in this case we have to hide this.\n  // NOTE: We aren't doing this in CSS to not affect the grid layout\n  // when the media isn't shown.\n  const hideMedia = !!width && width > mobileMaxWidth && width < cutoffWithMediaPx;\n  const hasBackgroundMedia = !isEmpty(bgImgSrcs) || !isEmpty(backgroundVideoSource);\n\n  const isCompact = size === HeroSize.Compact;\n\n  let curtainOpacityPercentage = defaultCurtainOpacityPercentage;\n\n  if (isNullish(curtainOpacityPercentage)) {\n    curtainOpacityPercentage = hasBackgroundMedia ? 75 : 0;\n  }\n\n  const isSplitBlock =\n    backgroundMediaLayout === BackgroundMediaLayout.Start ||\n    backgroundMediaLayout === BackgroundMediaLayout.End;\n\n  let backgroundContent: ReactNode;\n\n  const backgroundMediaStickersSized = backgroundMediaStickers?.map(sticker => ({\n    ...sticker,\n    size: isSplitBlock ? StickerSize.Medium : StickerSize.Large,\n    insetPx: 16, // Inset stickers from the screen edges as these are applied to background media\n    className: stickersDesktopOnlyCss,\n  }));\n\n  if (bgImgSrcs) {\n    backgroundContent = (\n      <PictureWithStickers\n        imgSrcs={bgImgSrcs}\n        altText={bgImgAltText}\n        className={cx(backgroundContainerCss, {\n          [splitItemCss]: isSplitBlock,\n          [splitMediaItemCss]: isSplitBlock,\n          [splitMediaCss]: isSplitBlock,\n        })}\n        imgClassName={backgroundCss}\n        fetchPriority=\"high\"\n        stickers={backgroundMediaStickersSized}\n      />\n    );\n  } else if (backgroundVideoSource) {\n    backgroundContent = (\n      <div\n        className={cx({\n          [splitItemCss]: isSplitBlock,\n          [splitMediaItemCss]: isSplitBlock,\n        })}\n      >\n        <VideoWithStickers\n          mobileSource={mobileBackgroundVideoSource}\n          className={cx(backgroundContainerCss, {\n            [splitMediaCss]: isSplitBlock,\n          })}\n          videoClassName={backgroundCss}\n          source={backgroundVideoSource}\n          posterSource={backgroundPosterSource}\n          isBackgroundVideo\n          stickers={backgroundMediaStickersSized}\n        />\n      </div>\n    );\n  }\n\n  const alignMobileCss = mobileAlignmentCss[textAlignMobile ?? Alignment.Start];\n  const defaultTextAlign = hasMedia ? Alignment.Start : Alignment.Center;\n  const contentAlignmentCss = alignmentCss[textAlign ?? defaultTextAlign];\n  const verticalAlignCss = cx({\n    [alignItemsStartCss]: verticalTextAlign === VerticalAlignment.Top,\n    [alignItemsEndCss]: verticalTextAlign === VerticalAlignment.Bottom,\n  });\n\n  const showCurtain = !!curtainOpacityPercentage && !isSplitBlock;\n\n  return (\n    <section\n      ref={ref}\n      className={cx(\n        MotifComponent.HERO,\n        motifSchemeWithFallback,\n        heroCss,\n        {\n          [fitWindowCss]: fitWindow,\n          [heroSplitCss]: isSplitBlock,\n          [reverseSplitCss]: backgroundMediaLayout === BackgroundMediaLayout.End,\n          [heroTopicsTransparencyCss]: hasBackgroundMedia,\n        },\n        className\n      )}\n      id={anchorId}\n      data-curtain={showCurtain}\n    >\n      {backgroundContent}\n      {showCurtain && (\n        <div\n          data-testid=\"sdsm-hero-curtain\"\n          className={curtainCss}\n          style={\n            {\n              [heroCurtainOpacityCssVar]: curtainOpacityPercentage / 100,\n            } as CSSProperties\n          }\n        />\n      )}\n      {!!breadcrumbs?.length && (\n        <Breadcrumbs\n          motifScheme={motifSchemeWithFallback}\n          breadcrumbsItems={breadcrumbs}\n          showBgGradient={backgroundMediaLayout === BackgroundMediaLayout.Start}\n        />\n      )}\n      <BlockBoundary\n        data-testid=\"sdsm-hero-block-content\"\n        className={cx(\n          boundaryCss,\n          verticalAlignCss,\n          { [heroWithBreadcrumbsCss]: !!breadcrumbs?.length },\n          { [fitWindowCss]: fitWindow },\n          {\n            [compactBoundaryCss]: isCompact,\n            [splitItemCss]: isSplitBlock,\n          }\n        )}\n      >\n        <div\n          data-testid=\"sdsm-hero-text\"\n          className={cx(alignMobileCss, contentAlignmentCss, textContentCss, {\n            [hideTextOverflowCss]: fitWindow,\n          })}\n        >\n          {(header || headerImgSrcs) && (\n            <HeroHeader\n              content={header}\n              iconSrcs={headerImgSrcs}\n              iconAltText={headerImgAltText}\n              textAlignMobile={textAlignMobile}\n              headerDataset={headerDataset}\n              className={headerCss}\n            />\n          )}\n          {eyebrow && (\n            <div className={eyebrowCss} {...dataSetToAttributes(eyebrowDataset)}>\n              {eyebrow}\n            </div>\n          )}\n          {title && (\n            <div className={heroTitleContainerCss}>\n              <h1\n                className={cx(\n                  {\n                    [titleCss]: !isSplitBlock && !hasMedia,\n                    [heroCompactTitleCss]: isSplitBlock || hasMedia,\n                    [titleIncreasedFontSizeCss]:\n                      increaseTitleFontSize && !isSplitBlock && !hasMedia,\n                  },\n                  contentAlignmentCss,\n                  alignMobileCss\n                )}\n                {...dataSetToAttributes(titleDataset)}\n              >\n                {title}\n              </h1>\n            </div>\n          )}\n          {subTitle && (\n            <div className={subTitleCss} {...dataSetToAttributes(subTitleDataset)}>\n              {subTitle}\n            </div>\n          )}\n          {body && (\n            <div\n              className={cx(alignMobileCss, contentAlignmentCss, bodyCss)}\n              {...dataSetToAttributes(bodyDataset)}\n            >\n              {body}\n            </div>\n          )}\n          {topics && <div className={cx(topicsContainerCss, contentAlignmentCss)}>{topics}</div>}\n          {callsToAction && (\n            <div className={cx(alignMobileCss, callsToActionWrapperCss)}>{callsToAction}</div>\n          )}\n          {footer && <footer className={footerCss}>{footer}</footer>}\n        </div>\n        {hasMedia && !hideMedia && !isSplitBlock && (\n          <HeroMedia\n            className={heroMediaCss}\n            foregroundMedia={foregroundMedia}\n            imgSrcs={imgSrcs}\n            wrapMedia={wrapMedia}\n            showMediaMobile={showMediaMobile}\n            size={size}\n          />\n        )}\n        {fitWindow && showScrollButton && !isMobile && (\n          <div className={heroScrollButtonWrapCss}>\n            <IconButton\n              size={IconButtonSize.SMALL}\n              iconName=\"chevron-down\"\n              className={heroScrollButtonCss}\n              onClick={onScrollDownButtonClick}\n            />\n          </div>\n        )}\n      </BlockBoundary>\n      {shareable && <Social className={heroSocialContainerCss} title={title?.toString() ?? ''} />}\n      {postChildren}\n    </section>\n  );\n});\n\nHero.displayName = 'Hero';\n", "import { cx } from '@emotion/css';\nimport { type FC, useContext, useRef, useState } from 'react';\n\nimport { Icon } from '../Icon';\nimport { PrimitivesContext } from '../Primitives';\nimport {\n  backIconCss,\n  breadcrumbActiveCss,\n  breadcrumbAnchorCss,\n  breadcrumbContainerCss,\n  breadcrumbCss,\n  breadcrumbTextCss,\n  tooltipCss,\n} from './Breadcrumb.styles';\n\nexport type BreadcrumbProps = {\n  breadcrumbText: string;\n  slug?: string;\n  isCurrent?: boolean;\n  showBackIcon?: boolean;\n};\n\nexport const Breadcrumb: FC<BreadcrumbProps> = ({\n  breadcrumbText,\n  slug,\n  isCurrent,\n  showBackIcon,\n}) => {\n  const { Anchor } = useContext(PrimitivesContext);\n  const textRef = useRef<HTMLSpanElement>(null);\n  const [isTruncated, setIsTruncated] = useState(false);\n\n  const checkIfTruncated = () => {\n    if (!textRef.current) return;\n\n    const { offsetWidth, scrollWidth } = textRef.current;\n    setIsTruncated(scrollWidth > offsetWidth);\n  };\n\n  const text = (\n    <span ref={textRef} className={breadcrumbTextCss}>\n      {breadcrumbText}\n    </span>\n  );\n\n  const breadcrumb =\n    slug && !isCurrent ? (\n      <Anchor href={slug} className={cx(breadcrumbCss, breadcrumbAnchorCss)}>\n        {showBackIcon && <Icon name=\"chevron-left\" size={24} className={backIconCss} />}\n        {text}\n      </Anchor>\n    ) : (\n      <span\n        className={cx(breadcrumbCss, {\n          [breadcrumbActiveCss]: isCurrent,\n        })}\n      >\n        {text}\n      </span>\n    );\n\n  return (\n    <span\n      className={breadcrumbContainerCss}\n      data-truncated={isTruncated}\n      onMouseEnter={checkIfTruncated}\n    >\n      {breadcrumb}\n      <span role=\"tooltip\" className={tooltipCss}>\n        {breadcrumbText}\n      </span>\n    </span>\n  );\n};\n\nBreadcrumb.displayName = 'BreadcrumbItem';\n", "import { css } from '@emotion/css';\n\nimport { nonMobileMediaQuery } from '../../constants';\nimport { m, p3Css } from '../../motif';\n\nexport const breadcrumbContainerCss = css`\n  overflow: hidden;\n`;\n\nexport const breadcrumbCss = css`\n  align-items: center;\n  color: ${m('--action-text-default-color')};\n  display: flex;\n  font-size: ${m('--annotation-mobile-font-size')};\n  font-weight: ${m('--annotation-mobile-font-weight')};\n  gap: ${m('--spacing-xxs')};\n  letter-spacing: ${m('--annotation-mobile-font-letter-spacing')};\n  line-height: ${m('--annotation-mobile-font-line-height')};\n  overflow: hidden;\n  padding: ${m('--spacing-xs')} ${m('--spacing-xxs')};\n\n  ${nonMobileMediaQuery} {\n    font-size: ${m('--annotation-desktop-font-size')};\n    font-weight: ${m('--annotation-desktop-font-weight')};\n    letter-spacing: ${m('--annotation-desktop-font-letter-spacing')};\n    line-height: ${m('--annotation-desktop-font-line-height')};\n  }\n`;\n\nexport const breadcrumbAnchorCss = css`\n  text-decoration: none;\n\n  @media (hover: hover) {\n    :hover {\n      color: ${m('--action-text-hover-color')};\n    }\n  }\n`;\n\nexport const breadcrumbTextCss = css`\n  display: block;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n`;\n\nexport const breadcrumbActiveCss = css`\n  color: ${m('--action-text-active-color')};\n`;\n\nexport const tooltipCss = css`\n  ${p3Css}\n  background-color: ${m('--neutral-v625')};\n  border-radius: 4px;\n  color: ${m('--neutral-v0')};\n  left: 50%;\n  opacity: 0;\n  padding: ${m('--spacing-xs')} 21px;\n  position: absolute;\n  top: 120%;\n  transform: translateX(-50%);\n  transition: opacity 200ms, visibility 200ms;\n  white-space: nowrap;\n  pointer-events: none;\n  visibility: hidden;\n\n  ${`.${breadcrumbContainerCss}[data-truncated=\"true\"]`}:hover & {\n    opacity: 1;\n    pointer-events: auto;\n    visibility: visible;\n  }\n\n  &::before {\n    border-bottom: 12px solid ${m('--neutral-v625')};\n    border-left: 12px solid transparent;\n    border-right: 12px solid transparent;\n    bottom: 100%;\n    content: '';\n    height: 0;\n    left: 50%;\n    position: absolute;\n    transform: translateX(-50%);\n    width: 0;\n  }\n`;\n\nexport const backIconCss = css`\n  fill: ${m('--action-text-default-color')};\n  margin-inline-start: calc(${m('--spacing-xxs')} * -1);\n\n  [dir='rtl'] & {\n    transform: scaleX(-1);\n  }\n\n  ${nonMobileMediaQuery} {\n    display: none;\n  }\n`;\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, nonMobileMediaQuery } from '../../constants';\nimport { m } from '../../motif';\n\nexport const breadcrumbCss = css`\n  inset-block: 0 auto;\n  inset-inline: 0;\n  position: absolute;\n  /** Allow tooltip to show on top the Hero text */\n  z-index: 10;\n`;\n\nexport const bgDarkGradientCss = css`\n  background: linear-gradient(to bottom, rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0));\n`;\n\nexport const bgLightGradientCss = css`\n  background: linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));\n`;\n\nexport const breadcrumbsListCss = css`\n  align-items: center;\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(0, auto));\n  justify-content: start;\n  list-style: none;\n  padding-block: ${m('--spacing-xs')};\n  /**\n    * Hardcoded calc(28px - ${m(\n    '--spacing-xxs'\n  )})  to align the element with the first element on the header and to make the dependency on the breadcrumb padding explicit.\n    * Find the design in the jira ticket: https://jira.sc-corp.net/browse/WEBP-11085\n    */\n  padding-inline: calc(28px - ${m('--spacing-xxs')}) ${m('--spacing-xxs')};\n\n  ${nonMobileMediaQuery} {\n    padding-block: ${m('--spacing-m')};\n    /**\n     * Hardcoded calc(60px - ${m(\n      '--spacing-xxs'\n    )})  to align the element with the first element on the header and to make the dependency on the breadcrumb padding explicit.\n    * Find the design in the jira ticket: https://jira.sc-corp.net/browse/WEBP-11085\n    */\n    padding-inline: calc(60px - ${m('--spacing-xxs')}) ${m('--spacing-l')};\n    max-width: 50%;\n  }\n`;\n\nexport const breadcrumbsListItemCss = css`\n  display: flex;\n  position: relative;\n\n  /** Add separator for list items except the last one */\n  &:not(:last-of-type)::after {\n    color: ${m('--action-text-default-color')};\n    content: '/';\n    font-size: ${m('--annotation-mobile-font-size')};\n    font-weight: ${m('--annotation-mobile-font-weight')};\n    letter-spacing: ${m('--annotation-mobile-font-letter-spacing')};\n    line-height: ${m('--annotation-mobile-font-line-height')};\n    padding: ${m('--spacing-xs')};\n\n    ${nonMobileMediaQuery} {\n      font-size: ${m('--annotation-desktop-font-size')};\n      font-weight: ${m('--annotation-desktop-font-weight')};\n      letter-spacing: ${m('--annotation-desktop-font-letter-spacing')};\n      line-height: ${m('--annotation-desktop-font-line-height')};\n    }\n  }\n\n  ${mobileMediaQuery} {\n    display: none;\n\n    /** Hide the trailing slash */\n    &::after {\n      display: none;\n    }\n  }\n`;\n\nexport const breadcrumbsListItemShowMobileCss = css`\n  ${mobileMediaQuery} {\n    display: flex;\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport { MotifScheme } from '../../motif';\nimport { type BreadcrumbProps, Breadcrumb } from './Breadcrumb';\nimport {\n  bgDarkGradientCss,\n  bgLightGradientCss,\n  breadcrumbCss,\n  breadcrumbsListCss,\n  breadcrumbsListItemCss,\n  breadcrumbsListItemShowMobileCss,\n} from './Breadcrumbs.styles';\n\nexport type BreadcrumbsProps = {\n  motifScheme: MotifScheme;\n  breadcrumbsItems: BreadcrumbProps[];\n  showBgGradient?: boolean;\n};\n\nexport const Breadcrumbs: FC<BreadcrumbsProps> = ({\n  motifScheme,\n  breadcrumbsItems,\n  showBgGradient,\n}) => {\n  if (!breadcrumbsItems.length) return null;\n\n  return (\n    <nav aria-label=\"breadcrumbs\" className={breadcrumbCss}>\n      <ol\n        className={cx(breadcrumbsListCss, {\n          [bgLightGradientCss]: showBgGradient && motifScheme !== MotifScheme.SECONDARY,\n          [bgDarkGradientCss]: showBgGradient && motifScheme === MotifScheme.SECONDARY,\n        })}\n      >\n        {breadcrumbsItems.map((breadcrumb, index) => {\n          const isCurrent = index === breadcrumbsItems.length - 1;\n          const shouldShowOnMobile = index === breadcrumbsItems.length - 2;\n\n          return (\n            <li\n              key={breadcrumb.breadcrumbText}\n              className={cx(breadcrumbsListItemCss, {\n                [breadcrumbsListItemShowMobileCss]: shouldShowOnMobile,\n              })}\n            >\n              <Breadcrumb {...breadcrumb} isCurrent={isCurrent} showBackIcon={shouldShowOnMobile} />\n            </li>\n          );\n        })}\n      </ol>\n    </nav>\n  );\n};\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport { useEffect, useState } from 'react';\nimport { LinkedinIcon, LinkedinShareButton, TwitterIcon, TwitterShareButton } from 'react-share';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport type { BaseComponentProps } from '../../types';\n\ninterface SocialProps extends BaseComponentProps {\n  title: string;\n}\n\nexport const Social: FC<SocialProps> = ({ title, ...props }) => {\n  useMotifStyles(MotifComponent.SOCIAL);\n  const [shareUrl, setShareUrl] = useState<string>('');\n  useMotifStyles(MotifComponent.SOCIAL);\n\n  useEffect(() => {\n    setShareUrl(window.location.origin + window.location.pathname);\n  }, []);\n\n  return (\n    <article\n      {...props}\n      className={cx(MotifComponent.SOCIAL, props.className)}\n      data-testid=\"sdsm-social\"\n    >\n      <LinkedinShareButton title={title} url={shareUrl}>\n        <LinkedinIcon size={32} round />\n      </LinkedinShareButton>\n      <TwitterShareButton title={title} url={shareUrl}>\n        <TwitterIcon size={32} round />\n      </TwitterShareButton>\n    </article>\n  );\n};\n\nSocial.displayName = 'Social';\n", "import React from 'react';\n\ntype Props = Omit<React.SVGProps<SVGSVGElement>, 'width' | 'height'> & {\n  bgStyle?: React.CSSProperties;\n  borderRadius?: number;\n  iconFillColor?: string;\n  round?: boolean;\n  size?: number | string;\n};\n\ntype IconConfig = {\n  color: string;\n  networkName: string;\n  /** SVG path */\n  path: string;\n};\n\nexport default function createIcon(iconConfig: IconConfig) {\n  const Icon: React.FC<Props> = ({\n    bgStyle = {},\n    borderRadius = 0,\n    iconFillColor = 'white',\n    round = false,\n    size = 64,\n    ...rest\n  }) => (\n    <svg viewBox=\"0 0 64 64\" width={size} height={size} {...rest}>\n      {round ? (\n        <circle cx=\"32\" cy=\"32\" r=\"32\" fill={iconConfig.color} style={bgStyle} />\n      ) : (\n        <rect\n          width=\"64\"\n          height=\"64\"\n          rx={borderRadius}\n          ry={borderRadius}\n          fill={iconConfig.color}\n          style={bgStyle}\n        />\n      )}\n\n      <path d={iconConfig.path} fill={iconFillColor} />\n    </svg>\n  );\n\n  return Icon;\n}\n", "import createIcon from './hocs/createIcon';\n\nconst EmailIcon = createIcon({\n  color: '#7f7f7f',\n  networkName: 'email',\n  path: 'M17,22v20h30V22H17z M41.1,25L32,32.1L22.9,25H41.1z M20,39V26.6l12,9.3l12-9.3V39H20z',\n});\n\nexport default EmailIcon;\n", "export default function objectToGetParams(object: {\n  [key: string]: string | number | undefined | null;\n}) {\n  const params = Object.entries(object)\n    .filter(([, value]) => value !== undefined && value !== null)\n    .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n\n  return params.length > 0 ? `?${params.join('&')}` : '';\n}\n", "import React, { Ref } from 'react';\nimport cx from 'classnames';\n\ntype NetworkLink<LinkOptions> = (url: string, options: LinkOptions) => string;\n\ntype WindowPosition = 'windowCenter' | 'screenCenter';\n\nconst isPromise = (obj: any): obj is Promise<unknown> =>\n  !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';\n\nconst getBoxPositionOnWindowCenter = (width: number, height: number) => ({\n  left: window.outerWidth / 2 + (window.screenX || window.screenLeft || 0) - width / 2,\n  top: window.outerHeight / 2 + (window.screenY || window.screenTop || 0) - height / 2,\n});\n\nconst getBoxPositionOnScreenCenter = (width: number, height: number) => ({\n  top: (window.screen.height - height) / 2,\n  left: (window.screen.width - width) / 2,\n});\n\nfunction windowOpen(\n  url: string,\n  { height, width, ...configRest }: { height: number; width: number; [key: string]: any },\n  onClose?: (dialog: Window | null) => void,\n) {\n  const config: { [key: string]: string | number } = {\n    height,\n    width,\n    location: 'no',\n    toolbar: 'no',\n    status: 'no',\n    directories: 'no',\n    menubar: 'no',\n    scrollbars: 'yes',\n    resizable: 'no',\n    centerscreen: 'yes',\n    chrome: 'yes',\n    ...configRest,\n  };\n\n  const shareDialog = window.open(\n    url,\n    '',\n    Object.keys(config)\n      .map(key => `${key}=${config[key]}`)\n      .join(', '),\n  );\n\n  if (onClose) {\n    const interval = window.setInterval(() => {\n      try {\n        if (shareDialog === null || shareDialog.closed) {\n          window.clearInterval(interval);\n          onClose(shareDialog);\n        }\n      } catch (e) {\n        /* eslint-disable no-console */\n        console.error(e);\n        /* eslint-enable no-console */\n      }\n    }, 1000);\n  }\n\n  return shareDialog;\n}\n\ninterface CustomProps<LinkOptions> {\n  /**\n   *  Takes a function that returns a Promise to be fulfilled before calling\n   * `onClick`. If you do not return promise, `onClick` is called immediately.\n   */\n  beforeOnClick?: () => Promise<void> | void;\n  children: React.ReactNode;\n  className?: string;\n  /** Disables click action and adds `disabled` class */\n  disabled?: boolean;\n  /**\n   * Style when button is disabled\n   * @default { opacity: 0.6 }\n   */\n  disabledStyle?: React.CSSProperties;\n  forwardedRef?: Ref<HTMLButtonElement>;\n  /**\n   * Passes as the native `title` atribute for the `button` element.\n   */\n  htmlTitle?: HTMLButtonElement['title'];\n  networkName: string;\n  networkLink: NetworkLink<LinkOptions>;\n  onClick?: (event: React.MouseEvent<HTMLButtonElement>, link: string) => void;\n  /**\n   * Takes a function to be called after closing share dialog.\n   */\n  onShareWindowClose?: () => void;\n  openShareDialogOnClick?: boolean;\n  opts: LinkOptions;\n  resetButtonStyle?: boolean;\n  /**\n   * URL of the shared page\n   */\n  url: string;\n  style?: React.CSSProperties;\n  windowWidth?: number;\n  windowHeight?: number;\n  windowPosition?: WindowPosition;\n}\n\nexport type Props<LinkOptions extends Record<string, unknown>> = Omit<\n  React.ButtonHTMLAttributes<HTMLButtonElement>,\n  keyof CustomProps<LinkOptions>\n> &\n  CustomProps<LinkOptions>;\n\nexport default function ShareButton<LinkOptions extends Record<string, unknown>>({\n  beforeOnClick,\n  children,\n  className,\n  disabled,\n  disabledStyle = { opacity: 0.6 },\n  forwardedRef,\n  htmlTitle,\n  networkLink,\n  networkName,\n  onClick,\n  onShareWindowClose,\n  openShareDialogOnClick = true,\n  opts,\n  resetButtonStyle = true,\n  style,\n  url,\n  windowHeight = 400,\n  windowPosition = 'windowCenter',\n  windowWidth = 550,\n  ...rest\n}: Props<LinkOptions>) {\n  const handleClick = async (event: React.MouseEvent<HTMLButtonElement>) => {\n    const link = networkLink(url, opts);\n\n    if (disabled) {\n      return;\n    }\n\n    event.preventDefault();\n\n    if (beforeOnClick) {\n      const returnVal = beforeOnClick();\n\n      if (isPromise(returnVal)) {\n        await returnVal;\n      }\n    }\n\n    if (openShareDialogOnClick) {\n      const windowConfig = {\n        height: windowHeight,\n        width: windowWidth,\n        ...(windowPosition === 'windowCenter'\n          ? getBoxPositionOnWindowCenter(windowWidth, windowHeight)\n          : getBoxPositionOnScreenCenter(windowWidth, windowHeight)),\n      };\n\n      windowOpen(link, windowConfig, onShareWindowClose);\n    }\n\n    if (onClick) {\n      onClick(event, link);\n    }\n  };\n\n  const newClassName = cx(\n    'react-share__ShareButton',\n    {\n      'react-share__ShareButton--disabled': !!disabled,\n      disabled: !!disabled,\n    },\n    className,\n  );\n\n  const newStyle = resetButtonStyle\n    ? {\n        backgroundColor: 'transparent',\n        border: 'none',\n        padding: 0,\n        font: 'inherit',\n        color: 'inherit',\n        cursor: 'pointer',\n        ...style,\n        ...(disabled && disabledStyle),\n      }\n    : {\n        ...style,\n        ...(disabled && disabledStyle),\n      };\n\n  return (\n    <button\n      {...rest}\n      className={newClassName}\n      onClick={handleClick}\n      ref={forwardedRef}\n      style={newStyle}\n      title={htmlTitle}\n    >\n      {children}\n    </button>\n  );\n}\n", "import React, { Ref, forwardRef } from 'react';\n\nimport ShareButton, { Props as ShareButtonProps } from '../ShareButton';\n\nfunction createShareButton<\n  OptionProps extends Record<string, any>,\n  LinkOptions extends Record<string, unknown> = OptionProps,\n>(\n  networkName: string,\n  link: (url: string, options: LinkOptions) => string,\n  optsMap: (props: OptionProps) => LinkOptions,\n  defaultProps: Partial<ShareButtonProps<LinkOptions> & OptionProps>,\n) {\n  type Props = Omit<\n    ShareButtonProps<LinkOptions>,\n    'forwardedRef' | 'networkName' | 'networkLink' | 'opts'\n  > &\n    OptionProps;\n\n  function CreatedButton(props: Props, ref: Ref<HTMLButtonElement>) {\n    const opts = optsMap(props);\n    const passedProps = { ...props };\n\n    // remove keys from passed props that are passed as opts\n    const optsKeys = Object.keys(opts);\n    optsKeys.forEach(key => {\n      delete passedProps[key];\n    });\n\n    return (\n      <ShareButton<LinkOptions>\n        {...defaultProps}\n        {...passedProps}\n        forwardedRef={ref}\n        networkName={networkName}\n        networkLink={link}\n        opts={optsMap(props)}\n      />\n    );\n  }\n\n  CreatedButton.displayName = `ShareButton-${networkName}`;\n\n  return forwardRef(CreatedButton);\n}\n\nexport default createShareButton;\n", "import objectToGetParams from './utils/objectToGetParams';\nimport createShareButton from './hocs/createShareButton';\n\ntype Options = {\n  body?: string;\n  separator?: string;\n  subject?: string;\n};\n\nfunction emailLink(url: string, { subject, body, separator }: Options) {\n  return 'mailto:' + objectToGetParams({ subject, body: body ? body + separator + url : url });\n}\n\nconst EmailShareButton = createShareButton<Options>(\n  'email',\n  emailLink,\n  props => ({\n    subject: props.subject,\n    body: props.body,\n    separator: props.separator || ' ',\n  }),\n  {\n    openShareDialogOnClick: false,\n    onClick: (_, link: string) => {\n      window.location.href = link;\n    },\n  },\n);\n\nexport default EmailShareButton;\n", "import createIcon from './hocs/createIcon';\n\nconst FacebookIcon = createIcon({\n  color: '#0965FE',\n  networkName: 'facebook',\n  path: 'M34.1,47V33.3h4.6l0.7-5.3h-5.3v-3.4c0-1.5,0.4-2.6,2.6-2.6l2.8,0v-4.8c-0.5-0.1-2.2-0.2-4.1-0.2 c-4.1,0-6.9,2.5-6.9,7V28H24v5.3h4.6V47H34.1z',\n});\n\nexport default FacebookIcon;\n", "import createIcon from './hocs/createIcon';\n\nconst FacebookMessengerIcon = createIcon({\n  color: '#0A7CFF',\n  networkName: 'facebookmessenger',\n  path: 'M 53.066406 21.871094 C 52.667969 21.339844 51.941406 21.179688 51.359375 21.496094 L 37.492188 29.058594 L 28.867188 21.660156 C 28.339844 21.207031 27.550781 21.238281 27.054688 21.730469 L 11.058594 37.726562 C 10.539062 38.25 10.542969 39.09375 11.0625 39.613281 C 11.480469 40.027344 12.121094 40.121094 12.640625 39.839844 L 26.503906 32.28125 L 35.136719 39.679688 C 35.667969 40.132812 36.457031 40.101562 36.949219 39.609375 L 52.949219 23.613281 C 53.414062 23.140625 53.464844 22.398438 53.066406 21.871094 Z M 53.066406 21.871094',\n});\n\nexport default FacebookMessengerIcon;\n", "import objectToGetParams from './utils/objectToGetParams';\nimport createShareButton from './hocs/createShareButton';\n\ntype Options = {\n  /** Your app's unique identifier. */\n  appId: string;\n  /** The URL to redirect to after a person clicks a button on the dialog.\n   * Required when using URL redirection. */\n  redirectUri?: string;\n  /** A user ID of a recipient. Once the dialog comes up, the sender can\n   * specify additional people as recipients. */\n  to?: string;\n};\n\nfunction facebookMessengerLink(url: string, { appId, redirectUri, to }: Options) {\n  return (\n    'https://www.facebook.com/dialog/send' +\n    objectToGetParams({\n      link: url,\n      redirect_uri: redirectUri || url,\n      app_id: appId,\n      to,\n    })\n  );\n}\n\nconst FacebookMessengerShareButton = createShareButton<Options>(\n  'facebookmessenger',\n  facebookMessengerLink,\n  props => ({\n    appId: props.appId,\n    redirectUri: props.redirectUri,\n    to: props.to,\n  }),\n  {\n    windowWidth: 1000,\n    windowHeight: 820,\n  },\n);\n\nexport default FacebookMessengerShareButton;\n", "class AssertionError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = 'AssertionError';\n  }\n}\n\nexport default function assert(value: any, message: string) {\n  if (!value) {\n    throw new AssertionError(message);\n  }\n}\n", "import assert from './utils/assert';\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareButton from './hocs/createShareButton';\n\nfunction facebookLink(url: string, { hashtag }: { hashtag?: string }) {\n  assert(url, 'facebook.url');\n\n  return 'https://www.facebook.com/sharer/sharer.php' + objectToGetParams({ u: url, hashtag });\n}\n\nconst FacebookShareButton = createShareButton<{ hashtag?: string }>(\n  'facebook',\n  facebookLink,\n  props => ({ hashtag: props.hashtag }),\n  {\n    windowWidth: 550,\n    windowHeight: 400,\n  },\n);\n\nexport default FacebookShareButton;\n", "import { useCallback, useEffect, useRef } from 'react';\n\nexport function useIsMounted() {\n  const isMounted = useRef(false);\n\n  useEffect(() => {\n    isMounted.current = true;\n\n    return () => {\n      isMounted.current = false;\n    };\n  }, []);\n\n  return useCallback(() => isMounted.current, []);\n}\n", "import React, { useEffect, useState } from 'react';\nimport cx from 'classnames';\nimport { useIsMounted } from '../hooks/useIsMounted';\n\ntype SocialMediaShareCountProps = Omit<React.HTMLAttributes<HTMLSpanElement>, 'children'> & {\n  children?: (shareCount: number) => React.ReactNode;\n  getCount: (url: string, callback: (shareCount?: number) => void) => void;\n  url: string;\n};\n\nexport function SocialMediaShareCount({\n  children = (shareCount: number) => shareCount,\n  className,\n  getCount,\n  url,\n  ...rest\n}: SocialMediaShareCountProps) {\n  const isMounted = useIsMounted();\n  const [count, setCount] = useState<number | undefined>(undefined);\n  const [isLoading, setIsLoading] = useState(false);\n\n  useEffect(() => {\n    setIsLoading(true);\n\n    getCount(url, count => {\n      if (isMounted()) {\n        setCount(count);\n        setIsLoading(false);\n      }\n    });\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [url]);\n\n  return (\n    <span className={cx('react-share__ShareCount', className)} {...rest}>\n      {!isLoading && count !== undefined && children(count)}\n    </span>\n  );\n}\n\nexport default function createShareCount(getCount: SocialMediaShareCountProps['getCount']) {\n  const ShareCount = (props: Omit<SocialMediaShareCountProps, 'getCount'>) => (\n    <SocialMediaShareCount getCount={getCount} {...props} />\n  );\n\n  ShareCount.displayName = `ShareCount(${getCount.name})`;\n\n  return ShareCount;\n}\n", "import jsonp from 'jsonp';\n\nimport createShareCount from './hocs/createShareCount';\n\nfunction getFacebookShareCount(shareUrl: string, callback: (shareCount?: number) => void) {\n  const endpoint = `https://graph.facebook.com/?id=${shareUrl}&fields=og_object{engagement}`;\n\n  jsonp(endpoint, (err, data) => {\n    callback(\n      !err && data && data.og_object && data.og_object.engagement\n        ? data.og_object.engagement.count\n        : undefined,\n    );\n  });\n}\n\nexport default createShareCount(getFacebookShareCount);\n", "import createIcon from './hocs/createIcon';\n\nconst HatenaIcon = createIcon({\n  color: '#009ad9',\n  networkName: 'hatena',\n  path: 'M 36.164062 33.554688 C 34.988281 32.234375 33.347656 31.5 31.253906 31.34375 C 33.125 30.835938 34.476562 30.09375 35.335938 29.09375 C 36.191406 28.09375 36.609375 26.78125 36.609375 25.101562 C 36.628906 23.875 36.332031 22.660156 35.75 21.578125 C 35.160156 20.558594 34.292969 19.71875 33.253906 19.160156 C 32.304688 18.640625 31.175781 18.265625 29.847656 18.042969 C 28.523438 17.824219 26.195312 17.730469 22.867188 17.730469 L 14.769531 17.730469 L 14.769531 47.269531 L 23.113281 47.269531 C 26.46875 47.269531 28.886719 47.15625 30.367188 46.929688 C 31.851562 46.695312 33.085938 46.304688 34.085938 45.773438 C 35.289062 45.148438 36.28125 44.179688 36.933594 42.992188 C 37.597656 41.796875 37.933594 40.402344 37.933594 38.816406 C 37.933594 36.621094 37.347656 34.867188 36.164062 33.554688 Z M 22.257812 24.269531 L 23.984375 24.269531 C 25.988281 24.269531 27.332031 24.496094 28.015625 24.945312 C 28.703125 25.402344 29.042969 26.183594 29.042969 27.285156 C 29.042969 28.390625 28.664062 29.105469 27.9375 29.550781 C 27.210938 29.992188 25.84375 30.199219 23.855469 30.199219 L 22.257812 30.199219 Z M 29.121094 41.210938 C 28.328125 41.691406 26.976562 41.925781 25.078125 41.925781 L 22.257812 41.925781 L 22.257812 35.488281 L 25.195312 35.488281 C 27.144531 35.488281 28.496094 35.738281 29.210938 36.230469 C 29.925781 36.726562 30.304688 37.582031 30.304688 38.832031 C 30.304688 40.078125 29.914062 40.742188 29.105469 41.222656 Z M 29.121094 41.210938 M 46.488281 39.792969 C 44.421875 39.792969 42.742188 41.46875 42.742188 43.535156 C 42.742188 45.605469 44.421875 47.28125 46.488281 47.28125 C 48.554688 47.28125 50.230469 45.605469 50.230469 43.535156 C 50.230469 41.46875 48.554688 39.792969 46.488281 39.792969 Z M 46.488281 39.792969 M 43.238281 17.730469 L 49.738281 17.730469 L 49.738281 37.429688 L 43.238281 37.429688 Z M 43.238281 17.730469 ',\n});\n\nexport default HatenaIcon;\n", "import assert from './utils/assert';\n\nimport createShareButton from './hocs/createShareButton';\n\nfunction hatenaLink(url: string, { title }: { title?: string }) {\n  assert(url, 'hatena.url');\n\n  return `http://b.hatena.ne.jp/add?mode=confirm&url=${url}&title=${title}`;\n}\n\nconst HatenaShareButton = createShareButton<{ title?: string }>(\n  'hatena',\n  hatenaLink,\n  props => ({\n    title: props.title,\n  }),\n  {\n    windowWidth: 660,\n    windowHeight: 460,\n    windowPosition: 'windowCenter',\n  },\n);\n\nexport default HatenaShareButton;\n", "import jsonp from 'jsonp';\n\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareCount from './hocs/createShareCount';\n\nfunction getHatenaShareCount(shareUrl: string, callback: (shareCount?: number) => void) {\n  const url = 'https://bookmark.hatenaapis.com/count/entry';\n\n  jsonp(\n    url +\n      objectToGetParams({\n        url: shareUrl,\n      }),\n    (err, data) => {\n      callback(data ?? undefined);\n    },\n  );\n}\n\nexport default createShareCount(getHatenaShareCount);\n", "import createIcon from './hocs/createIcon';\n\nconst InstapaperIcon = createIcon({\n  color: '#1F1F1F',\n  networkName: 'instapaper',\n  path: 'M35.688 43.012c0 2.425.361 2.785 3.912 3.056V48H24.401v-1.932c3.555-.27 3.912-.63 3.912-3.056V20.944c0-2.379-.36-2.785-3.912-3.056V16H39.6v1.888c-3.55.27-3.912.675-3.912 3.056v22.068h.001z',\n});\n\nexport default InstapaperIcon;\n", "import assert from './utils/assert';\nimport createShareButton from './hocs/createShareButton';\nimport objectToGetParams from './utils/objectToGetParams';\n\nfunction instapaperLink(\n  url: string,\n  { title, description }: { title?: string; description?: string },\n) {\n  assert(url, 'instapaper.url');\n\n  return (\n    'http://www.instapaper.com/hello2' +\n    objectToGetParams({\n      url,\n      title,\n      description,\n    })\n  );\n}\n\nconst InstapaperShareButton = createShareButton<{ title?: string; description?: string }>(\n  'instapaper',\n  instapaperLink,\n  props => ({\n    title: props.title,\n    description: props.description,\n  }),\n  {\n    windowWidth: 500,\n    windowHeight: 500,\n    windowPosition: 'windowCenter',\n  },\n);\n\nexport default InstapaperShareButton;\n", "import createIcon from './hocs/createIcon';\n\nconst LineIcon = createIcon({\n  color: '#00b800',\n  networkName: 'line',\n  path: 'M52.62 30.138c0 3.693-1.432 7.019-4.42 10.296h.001c-4.326 4.979-14 11.044-16.201 11.972-2.2.927-1.876-.591-1.786-1.112l.294-1.765c.069-.527.142-1.343-.066-1.865-.232-.574-1.146-.872-1.817-1.016-9.909-1.31-17.245-8.238-17.245-16.51 0-9.226 9.251-16.733 20.62-16.733 11.37 0 20.62 7.507 20.62 16.733zM27.81 25.68h-1.446a.402.402 0 0 0-.402.401v8.985c0 .221.18.4.402.4h1.446a.401.401 0 0 0 .402-.4v-8.985a.402.402 0 0 0-.402-.401zm9.956 0H36.32a.402.402 0 0 0-.402.401v5.338L31.8 25.858a.39.39 0 0 0-.031-.04l-.002-.003-.024-.025-.008-.007a.313.313 0 0 0-.032-.026.255.255 0 0 1-.021-.014l-.012-.007-.021-.012-.013-.006-.023-.01-.013-.005-.024-.008-.014-.003-.023-.005-.017-.002-.021-.003-.021-.002h-1.46a.402.402 0 0 0-.402.401v8.985c0 .221.18.4.402.4h1.446a.401.401 0 0 0 .402-.4v-5.337l4.123 5.568c.028.04.063.072.101.099l.004.003a.236.236 0 0 0 .025.015l.012.006.019.01a.154.154 0 0 1 .019.008l.012.004.028.01.005.001a.442.442 0 0 0 .104.013h1.446a.4.4 0 0 0 .401-.4v-8.985a.402.402 0 0 0-.401-.401zm-13.442 7.537h-3.93v-7.136a.401.401 0 0 0-.401-.401h-1.447a.4.4 0 0 0-.401.401v8.984a.392.392 0 0 0 .123.29c.072.068.17.111.278.111h5.778a.4.4 0 0 0 .401-.401v-1.447a.401.401 0 0 0-.401-.401zm21.429-5.287c.222 0 .401-.18.401-.402v-1.446a.401.401 0 0 0-.401-.402h-5.778a.398.398 0 0 0-.279.113l-.005.004-.006.008a.397.397 0 0 0-.111.276v8.984c0 .108.043.206.112.278l.005.006a.401.401 0 0 0 .284.117h5.778a.4.4 0 0 0 .401-.401v-1.447a.401.401 0 0 0-.401-.401h-3.93v-1.519h3.93c.222 0 .401-.18.401-.402V29.85a.401.401 0 0 0-.401-.402h-3.93V27.93h3.93z',\n});\n\nexport default LineIcon;\n", "import assert from './utils/assert';\nimport createShareButton from './hocs/createShareButton';\nimport objectToGetParams from './utils/objectToGetParams';\n\nfunction lineLink(url: string, { title }: { title?: string }) {\n  assert(url, 'line.url');\n\n  return (\n    'https://social-plugins.line.me/lineit/share' +\n    objectToGetParams({\n      url,\n      text: title,\n    })\n  );\n}\n\nconst LineShareButton = createShareButton<{ title?: string }>(\n  'line',\n  lineLink,\n  props => ({\n    title: props.title,\n  }),\n  {\n    windowWidth: 500,\n    windowHeight: 500,\n  },\n);\n\nexport default LineShareButton;\n", "import createIcon from './hocs/createIcon';\n\nconst LinkedinIcon = createIcon({\n  color: '#0077B5',\n  networkName: 'linkedin',\n  path: 'M20.4,44h5.4V26.6h-5.4V44z M23.1,18c-1.7,0-3.1,1.4-3.1,3.1c0,1.7,1.4,3.1,3.1,3.1 c1.7,0,3.1-1.4,3.1-3.1C26.2,19.4,24.8,18,23.1,18z M39.5,26.2c-2.6,0-4.4,1.4-5.1,2.8h-0.1v-2.4h-5.2V44h5.4v-8.6 c0-2.3,0.4-4.5,3.2-4.5c2.8,0,2.8,2.6,2.8,4.6V44H46v-9.5C46,29.8,45,26.2,39.5,26.2z',\n});\n\nexport default LinkedinIcon;\n", "import assert from './utils/assert';\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareButton from './hocs/createShareButton';\n\ntype Options = {\n  /** The url-encoded title value that you wish you use. */\n  title?: string;\n  /** The url-encoded description that you wish you use. */\n  summary?: string;\n  /** The url-encoded source of the content (e.g. your website or application name) */\n  source?: string;\n};\n\nfunction linkedinLink(url: string, { title, summary, source }: Options) {\n  assert(url, 'linkedin.url');\n\n  return (\n    'https://linkedin.com/shareArticle' +\n    objectToGetParams({ url, mini: 'true', title, summary, source })\n  );\n}\n\nconst LinkedinShareButton = createShareButton<Options>(\n  'linkedin',\n  linkedinLink,\n  ({ title, summary, source }) => ({ title, summary, source }),\n  {\n    windowWidth: 750,\n    windowHeight: 600,\n  },\n);\n\nexport default LinkedinShareButton;\n", "import createIcon from './hocs/createIcon';\n\nconst LivejournalIcon = createIcon({\n  color: '#21A5D8',\n  networkName: 'livejournal',\n  path: 'M18.3407821,28.1764706 L21.9441341,31.789916 L33.0055865,42.882353 C33.0055865,42.882353 33.0893855,42.9663866 33.0893855,42.9663866 L46.6648046,47 C46.6648046,47 46.6648046,47 46.7486034,47 C46.8324022,47 46.8324022,47 46.9162012,46.9159664 C47,46.8319327 47,46.8319327 47,46.7478991 L42.9776536,33.1344537 C42.9776536,33.1344537 42.9776536,33.1344537 42.8938548,33.0504202 L31.1620111,21.3697479 L31.1620111,21.3697479 L28.1452514,18.2605042 C27.3072626,17.4201681 26.5530726,17 25.7150838,17 C24.2905028,17 23.0335195,18.3445378 21.5251397,19.8571429 C21.273743,20.1092437 20.9385475,20.4453781 20.6871508,20.697479 C20.3519553,21.0336134 20.1005586,21.2857143 19.849162,21.5378151 C18.3407821,22.9663866 17.0837989,24.2268908 17,25.7394958 C17.0837989,26.4957983 17.5027933,27.3361345 18.3407821,28.1764706 Z M39.9012319,39.6134454 C39.7336341,39.4453781 39.4822374,37.6806724 40.2364275,36.8403362 C40.9906174,36.0840337 41.6610084,36 42.1638017,36 C42.3313995,36 42.4989973,36 42.5827961,36 L44.8453659,43.5630253 L43.5883828,44.8235295 L36.0464833,42.5546218 C35.9626843,42.2184874 35.8788855,41.2100841 36.8844722,40.2016807 C37.2196676,39.8655463 37.8900587,39.6134454 38.5604498,39.6134454 C39.147042,39.6134454 39.5660364,39.7815126 39.5660364,39.7815126 C39.6498353,39.8655463 39.8174331,39.8655463 39.8174331,39.7815126 C39.9850307,39.7815126 39.9850307,39.697479 39.9012319,39.6134454 Z',\n});\n\nexport default LivejournalIcon;\n", "import assert from './utils/assert';\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareButton from './hocs/createShareButton';\n\nfunction livejournalLink(\n  url: string,\n  { title, description }: { title?: string; description?: string },\n) {\n  assert(url, 'livejournal.url');\n\n  return (\n    'https://www.livejournal.com/update.bml' +\n    objectToGetParams({\n      subject: title,\n      event: description,\n    })\n  );\n}\n\nconst LivejournalShareButton = createShareButton<{ title?: string; description?: string }>(\n  'livejournal',\n  livejournalLink,\n  props => ({\n    title: props.title,\n    description: props.description,\n  }),\n  {\n    windowWidth: 660,\n    windowHeight: 460,\n  },\n);\n\nexport default LivejournalShareButton;\n", "import createIcon from './hocs/createIcon';\n\nconst MailruIcon = createIcon({\n  color: '#168DE2',\n  networkName: 'mailru',\n  path: 'M39.7107745,17 C41.6619755,17 43.3204965,18.732852 43.3204965,21.0072202 C43.3204965,23.2815885 41.7595357,25.0144404 39.7107745,25.0144404 C37.7595732,25.0144404 36.1010522,23.2815885 36.1010522,21.0072202 C36.1010522,18.732852 37.7595732,17 39.7107745,17 Z M24.3938451,17 C26.3450463,17 28.0035672,18.732852 28.0035672,21.0072202 C28.0035672,23.2815885 26.4426063,25.0144404 24.3938451,25.0144404 C22.4426439,25.0144404 20.7841229,23.2815885 20.7841229,21.0072202 C20.7841229,18.732852 22.4426439,17 24.3938451,17 Z M51.9057817,43.4259928 C51.7106617,44.0758123 51.4179815,44.6173285 50.9301812,44.9422383 C50.637501,45.1588448 50.2472607,45.267148 49.8570205,45.267148 C49.07654,45.267148 48.3936197,44.833935 48.0033795,44.0758123 L46.2472985,40.7184115 L45.759498,41.2599278 C42.5400162,44.9422383 37.466893,47 32.0035297,47 C26.5401664,47 21.5646034,44.9422383 18.2475614,41.2599278 L17.7597611,40.7184115 L16.00368,44.0758123 C15.6134398,44.833935 14.9305194,45.267148 14.1500389,45.267148 C13.7597986,45.267148 13.3695584,45.1588448 13.0768782,44.9422383 C12.0037176,44.2924187 11.7110374,42.7761733 12.2963978,41.5848375 L16.7841605,33.0288807 C17.1744007,32.270758 17.8573211,31.8375453 18.6378016,31.8375453 C19.0280418,31.8375453 19.4182821,31.9458485 19.7109623,32.1624548 C20.7841229,32.8122743 21.0768031,34.3285197 20.4914427,35.5198555 L20.1012025,36.2779783 L20.2963226,36.602888 C22.4426439,39.9602888 27.0279667,42.234657 31.9059697,42.234657 C36.7839727,42.234657 41.3692955,40.068592 43.5156167,36.602888 L43.7107367,36.2779783 L43.3204965,35.6281587 C43.0278165,35.0866425 42.9302562,34.436823 43.1253765,33.7870035 C43.3204965,33.137184 43.6131767,32.5956678 44.100977,32.270758 C44.3936572,32.0541515 44.7838975,31.9458485 45.1741377,31.9458485 C45.9546182,31.9458485 46.6375385,32.3790613 47.0277787,33.137184 L51.5155415,41.6931408 C52.003342,42.234657 52.100902,42.8844765 51.9057817,43.4259928 Z',\n});\n\nexport default MailruIcon;\n", "import assert from './utils/assert';\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareButton from './hocs/createShareButton';\n\nfunction mailruLink(\n  url: string,\n  { title, description, imageUrl }: { title?: string; description?: string; imageUrl?: string },\n) {\n  assert(url, 'mailru.url');\n\n  return (\n    'https://connect.mail.ru/share' +\n    objectToGetParams({\n      url,\n      title,\n      description,\n      image_url: imageUrl,\n    })\n  );\n}\n\nconst MailruShareButton = createShareButton<{\n  title?: string;\n  description?: string;\n  imageUrl?: string;\n}>(\n  'mailru',\n  mailruLink,\n  props => ({\n    title: props.title,\n    description: props.description,\n    imageUrl: props.imageUrl,\n  }),\n  {\n    windowWidth: 660,\n    windowHeight: 460,\n  },\n);\n\nexport default MailruShareButton;\n", "import createIcon from './hocs/createIcon';\n\nconst OKIcon = createIcon({\n  color: '#F97400',\n  networkName: 'ok',\n  path: 'M39,30c-1,0-3,2-7,2s-6-2-7-2c-1.1,0-2,0.9-2,2c0,1,0.6,1.5,1,1.7c1.2,0.7,5,2.3,5,2.3l-4.3,5.4   c0,0-0.8,0.9-0.8,1.6c0,1.1,0.9,2,2,2c1,0,1.5-0.7,1.5-0.7S32,39,32,39c0,0,4.5,5.3,4.5,5.3S37,45,38,45c1.1,0,2-0.9,2-2   c0-0.6-0.8-1.6-0.8-1.6L35,36c0,0,3.8-1.6,5-2.3c0.4-0.3,1-0.7,1-1.7C41,30.9,40.1,30,39,30z M32,15c-3.9,0-7,3.1-7,7s3.1,7,7,7c3.9,0,7-3.1,7-7S35.9,15,32,15z M32,25.5   c-1.9,0-3.5-1.6-3.5-3.5c0-1.9,1.6-3.5,3.5-3.5c1.9,0,3.5,1.6,3.5,3.5C35.5,23.9,33.9,22.5,35,22.5z ',\n});\n\nexport default OKIcon;\n", "import assert from './utils/assert';\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareButton from './hocs/createShareButton';\n\nfunction okLink(\n  url: string,\n  { title, description, image }: { title?: string; description?: string; image?: string },\n) {\n  assert(url, 'ok.url');\n\n  return (\n    'https://connect.ok.ru/offer' +\n    objectToGetParams({\n      url,\n      title,\n      description,\n      imageUrl: image,\n    })\n  );\n}\n\nconst OKShareButton = createShareButton<{ title?: string; description?: string; image?: string }>(\n  'ok',\n  okLink,\n  props => ({\n    title: props.title,\n    description: props.description,\n    image: props.image,\n  }),\n  {\n    windowWidth: 588,\n    windowHeight: 480,\n    windowPosition: 'screenCenter',\n  },\n);\n\nexport default OKShareButton;\n", "import jsonp from 'jsonp';\n\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareCount from './hocs/createShareCount';\n\ndeclare global {\n  interface Window {\n    OK: {\n      Share: {\n        count: (index: number, _count: number) => void;\n      };\n      callbacks: ((count?: number) => void)[];\n    };\n    ODKL: {\n      updateCount: (index: string, count: string) => void;\n    };\n  }\n}\n\nfunction getOKShareCount(shareUrl: string, callback: (shareCount?: number) => void) {\n  if (!window.OK) {\n    window.OK = {\n      Share: {\n        count: function count(index, _count) {\n          window.OK.callbacks[index]?.(_count);\n        },\n      },\n      callbacks: [],\n    };\n  }\n\n  const url = 'https://connect.ok.ru/dk';\n  const index = window.OK.callbacks.length;\n\n  window.ODKL = {\n    updateCount(index, count) {\n      const callbackIndex = index === '' ? 0 : parseInt(index.replace('react-share-', ''), 10);\n      window.OK.callbacks[callbackIndex]?.(count === '' ? undefined : parseInt(count, 10));\n    },\n  };\n  window.OK.callbacks.push(callback);\n\n  return jsonp(\n    url +\n      objectToGetParams({\n        'st.cmd': 'extLike',\n        uid: `react-share-${index}`,\n        ref: shareUrl,\n      }),\n  );\n}\n\nexport default createShareCount(getOKShareCount);\n", "import createIcon from './hocs/createIcon';\n\nconst PinterestIcon = createIcon({\n  color: '#E60023',\n  networkName: 'pinterest',\n  path: 'M32,16c-8.8,0-16,7.2-16,16c0,6.6,3.9,12.2,9.6,14.7c0-1.1,0-2.5,0.3-3.7 c0.3-1.3,2.1-8.7,2.1-8.7s-0.5-1-0.5-2.5c0-2.4,1.4-4.1,3.1-4.1c1.5,0,2.2,1.1,2.2,2.4c0,1.5-0.9,3.7-1.4,5.7 c-0.4,1.7,0.9,3.1,2.5,3.1c3,0,5.1-3.9,5.1-8.5c0-3.5-2.4-6.1-6.7-6.1c-4.9,0-7.9,3.6-7.9,7.7c0,1.4,0.4,2.4,1.1,3.1 c0.3,0.3,0.3,0.5,0.2,0.9c-0.1,0.3-0.3,1-0.3,1.3c-0.1,0.4-0.4,0.6-0.8,0.4c-2.2-0.9-3.3-3.4-3.3-6.1c0-4.5,3.8-10,11.4-10 c6.1,0,10.1,4.4,10.1,9.2c0,6.3-3.5,11-8.6,11c-1.7,0-3.4-0.9-3.9-2c0,0-0.9,3.7-1.1,4.4c-0.3,1.2-1,2.5-1.6,3.4 c1.4,0.4,3,0.7,4.5,0.7c8.8,0,16-7.2,16-16C48,23.2,40.8,16,32,16z',\n});\n\nexport default PinterestIcon;\n", "import assert from './utils/assert';\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareButton from './hocs/createShareButton';\n\ninterface PinterestShareProps {\n  media: string;\n  description?: string;\n  pinId?: string;\n}\n\nfunction pinterestLink(url: string, { media, description, pinId }: PinterestShareProps) {\n  if (pinId) {\n    return `https://pinterest.com/pin/${pinId}/repin/x/`;\n  }\n\n  assert(url, 'pinterest.url');\n  assert(media, 'pinterest.media');\n\n  return (\n    'https://pinterest.com/pin/create/button/' +\n    objectToGetParams({\n      url,\n      media,\n      description,\n    })\n  );\n}\n\nconst PinterestShareButton = createShareButton<PinterestShareProps>(\n  'pinterest',\n  pinterestLink,\n  props => ({\n    media: props.media,\n    description: props.description,\n    pinId: props.pinId,\n  }),\n  {\n    windowWidth: 1000,\n    windowHeight: 730,\n  },\n);\n\nexport default PinterestShareButton;\n", "import jsonp from 'jsonp';\n\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareCount from './hocs/createShareCount';\n\nfunction getPinterestShareCount(shareUrl: string, callback: (shareCount?: number) => void) {\n  const url = 'https://api.pinterest.com/v1/urls/count.json';\n\n  jsonp(\n    url +\n      objectToGetParams({\n        url: shareUrl,\n      }),\n    (err, data) => {\n      callback(data ? data.count : undefined);\n    },\n  );\n}\n\nexport default createShareCount(getPinterestShareCount);\n", "import createIcon from './hocs/createIcon';\n\nconst PocketIcon = createIcon({\n  color: '#EF3F56',\n  networkName: 'pocket',\n  path: 'M41.084 29.065l-7.528 7.882a2.104 2.104 0 0 1-1.521.666 2.106 2.106 0 0 1-1.522-.666l-7.528-7.882c-.876-.914-.902-2.43-.065-3.384.84-.955 2.228-.987 3.1-.072l6.015 6.286 6.022-6.286c.88-.918 2.263-.883 3.102.071.841.938.82 2.465-.06 3.383l-.015.002zm6.777-10.976C47.463 16.84 46.361 16 45.14 16H18.905c-1.2 0-2.289.82-2.716 2.044-.125.363-.189.743-.189 1.125v10.539l.112 2.096c.464 4.766 2.73 8.933 6.243 11.838.06.053.125.102.19.153l.04.033c1.882 1.499 3.986 2.514 6.259 3.014a14.662 14.662 0 0 0 6.13.052c.118-.042.235-.065.353-.087.03 0 .065-.022.098-.042a15.395 15.395 0 0 0 6.011-2.945l.039-.045.18-.153c3.502-2.902 5.765-7.072 6.248-11.852L48 29.674v-10.52c0-.366-.041-.728-.161-1.08l.022.015z',\n});\n\nexport default PocketIcon;\n", "import assert from './utils/assert';\nimport createShareButton from './hocs/createShareButton';\nimport objectToGetParams from './utils/objectToGetParams';\n\nfunction pocketLink(url: string, { title }: { title?: string }) {\n  assert(url, 'pocket.url');\n\n  return (\n    'https://getpocket.com/save' +\n    objectToGetParams({\n      url,\n      title,\n    })\n  );\n}\n\nconst PocketShareButton = createShareButton<{ title?: string }>(\n  'pocket',\n  pocketLink,\n  props => ({\n    title: props.title,\n  }),\n  {\n    windowWidth: 500,\n    windowHeight: 500,\n  },\n);\n\nexport default PocketShareButton;\n", "import createIcon from './hocs/createIcon';\n\nconst RedditIcon = createIcon({\n  color: '#FF5700',\n  networkName: 'reddit',\n  path: 'M 53.34375 32 C 53.277344 30.160156 52.136719 28.53125 50.429688 27.839844 C 48.722656 27.148438 46.769531 27.523438 45.441406 28.800781 C 41.800781 26.324219 37.519531 24.957031 33.121094 24.863281 L 35.199219 14.878906 L 42.046875 16.320312 C 42.214844 17.882812 43.496094 19.09375 45.066406 19.171875 C 46.636719 19.253906 48.03125 18.183594 48.359375 16.644531 C 48.6875 15.105469 47.847656 13.558594 46.382812 12.992188 C 44.914062 12.425781 43.253906 13.007812 42.464844 14.367188 L 34.625 12.800781 C 34.363281 12.742188 34.09375 12.792969 33.871094 12.9375 C 33.648438 13.082031 33.492188 13.308594 33.441406 13.566406 L 31.070312 24.671875 C 26.617188 24.738281 22.277344 26.105469 18.59375 28.609375 C 17.242188 27.339844 15.273438 26.988281 13.570312 27.707031 C 11.863281 28.429688 10.746094 30.089844 10.71875 31.941406 C 10.691406 33.789062 11.757812 35.484375 13.441406 36.257812 C 13.402344 36.726562 13.402344 37.195312 13.441406 37.664062 C 13.441406 44.832031 21.792969 50.65625 32.097656 50.65625 C 42.398438 50.65625 50.753906 44.832031 50.753906 37.664062 C 50.789062 37.195312 50.789062 36.726562 50.753906 36.257812 C 52.363281 35.453125 53.371094 33.800781 53.34375 32 Z M 21.34375 35.199219 C 21.34375 33.433594 22.777344 32 24.542969 32 C 26.3125 32 27.742188 33.433594 27.742188 35.199219 C 27.742188 36.96875 26.3125 38.398438 24.542969 38.398438 C 22.777344 38.398438 21.34375 36.96875 21.34375 35.199219 Z M 39.9375 44 C 37.664062 45.710938 34.871094 46.582031 32.03125 46.464844 C 29.191406 46.582031 26.398438 45.710938 24.128906 44 C 23.847656 43.65625 23.871094 43.15625 24.183594 42.839844 C 24.5 42.527344 25 42.503906 25.34375 42.785156 C 27.269531 44.195312 29.617188 44.90625 32 44.800781 C 34.386719 44.929688 36.746094 44.242188 38.6875 42.847656 C 39.042969 42.503906 39.605469 42.511719 39.953125 42.863281 C 40.296875 43.21875 40.289062 43.785156 39.9375 44.128906 Z M 39.359375 38.527344 C 37.59375 38.527344 36.160156 37.09375 36.160156 35.328125 C 36.160156 33.5625 37.59375 32.128906 39.359375 32.128906 C 41.128906 32.128906 42.558594 33.5625 42.558594 35.328125 C 42.59375 36.203125 42.269531 37.054688 41.65625 37.6875 C 41.046875 38.316406 40.203125 38.664062 39.328125 38.65625 Z M 39.359375 38.527344',\n});\n\nexport default RedditIcon;\n", "import assert from './utils/assert';\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareButton from './hocs/createShareButton';\n\nfunction redditLink(url: string, { title }: { title?: string }) {\n  assert(url, 'reddit.url');\n\n  return (\n    'https://www.reddit.com/submit' +\n    objectToGetParams({\n      url,\n      title,\n    })\n  );\n}\n\nconst RedditShareButton = createShareButton<{ title?: string }>(\n  'reddit',\n  redditLink,\n  props => ({\n    title: props.title,\n  }),\n  {\n    windowWidth: 660,\n    windowHeight: 460,\n    windowPosition: 'windowCenter',\n  },\n);\n\nexport default RedditShareButton;\n", "import assert from './utils/assert';\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareButton from './hocs/createShareButton';\n\nfunction gabLink(url: string, { title }: { title?: string }) {\n  assert(url, 'gab.url');\n\n  return (\n    'https://gab.com/compose' +\n    objectToGetParams({\n      url,\n      text: title,\n    })\n  );\n}\n\nconst GabShareButton = createShareButton<{ title?: string }>(\n  'gab',\n  gabLink,\n  props => ({\n    title: props.title,\n  }),\n  {\n    windowWidth: 660,\n    windowHeight: 640,\n    windowPosition: 'windowCenter',\n  },\n);\n\nexport default GabShareButton;\n", "import createIcon from './hocs/createIcon';\n\nconst GabIcon = createIcon({\n  color: '#00d178',\n  networkName: 'gab',\n  path: 'm17.0506,23.97457l5.18518,0l0,14.23933c0,6.82699 -3.72695,10.09328 -9.33471,10.09328c-2.55969,0 -4.82842,-0.87286 -6.22084,-2.0713l2.07477,-3.88283c1.19844,0.81051 2.33108,1.29543 3.85511,1.29543c2.75366,0 4.44049,-1.97432 4.44049,-4.82149l0,-0.87286c-1.16728,1.39242 -2.81947,2.0713 -4.63446,2.0713c-4.44048,0 -7.81068,-3.68885 -7.81068,-8.28521c0,-4.59289 3.37019,-8.28174 7.81068,-8.28174c1.81499,0 3.46718,0.67888 4.63446,2.0713l0,-1.55521zm-3.62997,11.39217c1.97777,0 3.62997,-1.6522 3.62997,-3.62652c0,-1.97432 -1.6522,-3.62305 -3.62997,-3.62305c-1.97778,0 -3.62997,1.64873 -3.62997,3.62305c0,1.97432 1.65219,3.62652 3.62997,3.62652zm25.7077,4.13913l-5.18518,0l0,-1.29197c-1.00448,1.13264 -2.3969,1.81152 -4.21188,1.81152c-3.62997,0 -5.63893,-2.52504 -5.63893,-5.4034c0,-4.27076 5.251,-5.85715 9.78846,-4.49937c-0.09698,-1.39241 -0.9733,-2.39343 -2.78829,-2.39343c-1.26426,0 -2.72248,0.48492 -3.62997,1.00102l-1.5552,-3.72003c1.19844,-0.77587 3.40136,-1.55174 5.96452,-1.55174c3.78931,0 7.25648,2.13365 7.25648,7.95962l0,8.08777zm-5.18518,-6.14809c-2.42806,-0.77587 -4.66563,-0.3533 -4.66563,1.36124c0,1.00101 0.84168,1.6799 1.84616,1.6799c1.20191,0 2.56315,-0.96984 2.81947,-3.04115zm13.00626,-17.66495l0,9.83695c1.16727,-1.39242 2.81946,-2.0713 4.63445,-2.0713c4.44048,0 7.81068,3.68885 7.81068,8.28174c0,4.59636 -3.37019,8.28521 -7.81068,8.28521c-1.81499,0 -3.46718,-0.67888 -4.63445,-2.0713l0,1.55174l-5.18519,0l0,-23.81304l5.18519,0zm3.62997,19.67391c1.97777,0 3.62997,-1.6522 3.62997,-3.62652c0,-1.97432 -1.6522,-3.62305 -3.62997,-3.62305c-1.97778,0 -3.62997,1.64873 -3.62997,3.62305c0,1.97432 1.65219,3.62652 3.62997,3.62652zm0,0',\n});\n\nexport default GabIcon;\n", "import jsonp from 'jsonp';\n\nimport createShareCount from './hocs/createShareCount';\n\nfunction getRedditShareCount(shareUrl: string, callback: (shareCount?: number) => void) {\n  const endpoint = `https://www.reddit.com/api/info.json?limit=1&url=${shareUrl}`;\n\n  jsonp(endpoint, { param: 'jsonp' }, (err, response) => {\n    callback(\n      !err &&\n        response &&\n        response.data &&\n        response.data.children.length > 0 &&\n        response.data.children[0].data.score\n        ? response.data.children[0].data.score\n        : undefined,\n    );\n  });\n}\n\nexport default createShareCount(getRedditShareCount);\n", "import createIcon from './hocs/createIcon';\n\nconst TelegramIcon = createIcon({\n  color: '#25A3E3',\n  networkName: 'telegram',\n  path: 'm45.90873,15.44335c-0.6901,-0.0281 -1.37668,0.14048 -1.96142,0.41265c-0.84989,0.32661 -8.63939,3.33986 -16.5237,6.39174c-3.9685,1.53296 -7.93349,3.06593 -10.98537,4.24067c-3.05012,1.1765 -5.34694,2.05098 -5.4681,2.09312c-0.80775,0.28096 -1.89996,0.63566 -2.82712,1.72788c-0.23354,0.27218 -0.46884,0.62161 -0.58825,1.10275c-0.11941,0.48114 -0.06673,1.09222 0.16682,1.5716c0.46533,0.96052 1.25376,1.35737 2.18443,1.71383c3.09051,0.99037 6.28638,1.93508 8.93263,2.8236c0.97632,3.44171 1.91401,6.89571 2.84116,10.34268c0.30554,0.69185 0.97105,0.94823 1.65764,0.95525l-0.00351,0.03512c0,0 0.53908,0.05268 1.06412,-0.07375c0.52679,-0.12292 1.18879,-0.42846 1.79109,-0.99212c0.662,-0.62161 2.45836,-2.38812 3.47683,-3.38552l7.6736,5.66477l0.06146,0.03512c0,0 0.84989,0.59703 2.09312,0.68132c0.62161,0.04214 1.4399,-0.07726 2.14229,-0.59176c0.70766,-0.51626 1.1765,-1.34683 1.396,-2.29506c0.65673,-2.86224 5.00979,-23.57745 5.75257,-27.00686l-0.02107,0.08077c0.51977,-1.93157 0.32837,-3.70159 -0.87096,-4.74991c-0.60054,-0.52152 -1.2924,-0.7498 -1.98425,-0.77965l0,0.00176zm-0.2072,3.29069c0.04741,0.0439 0.0439,0.0439 0.00351,0.04741c-0.01229,-0.00351 0.14048,0.2072 -0.15804,1.32576l-0.01229,0.04214l-0.00878,0.03863c-0.75858,3.50668 -5.15554,24.40802 -5.74203,26.96472c-0.08077,0.34417 -0.11414,0.31959 -0.09482,0.29852c-0.1756,-0.02634 -0.50045,-0.16506 -0.52679,-0.1756l-13.13468,-9.70175c4.4988,-4.33199 9.09945,-8.25307 13.744,-12.43229c0.8218,-0.41265 0.68483,-1.68573 -0.29852,-1.70681c-1.04305,0.24584 -1.92279,0.99564 -2.8798,1.47502c-5.49971,3.2626 -11.11882,6.13186 -16.55882,9.49279c-2.792,-0.97105 -5.57873,-1.77704 -8.15298,-2.57601c2.2336,-0.89555 4.00889,-1.55579 5.75608,-2.23009c3.05188,-1.1765 7.01687,-2.7042 10.98537,-4.24067c7.94051,-3.06944 15.92667,-6.16346 16.62028,-6.43037l0.05619,-0.02283l0.05268,-0.02283c0.19316,-0.0878 0.30378,-0.09658 0.35471,-0.10009c0,0 -0.01756,-0.05795 -0.00351,-0.04566l-0.00176,0zm-20.91715,22.0638l2.16687,1.60145c-0.93418,0.91311 -1.81743,1.77353 -2.45485,2.38812l0.28798,-3.98957',\n});\n\nexport default TelegramIcon;\n", "import assert from './utils/assert';\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareButton from './hocs/createShareButton';\n\nfunction telegramLink(url: string, { title }: { title?: string }) {\n  assert(url, 'telegram.url');\n\n  return (\n    'https://telegram.me/share/url' +\n    objectToGetParams({\n      url,\n      text: title,\n    })\n  );\n}\n\nconst TelegramShareButton = createShareButton<{ title?: string }>(\n  'telegram',\n  telegramLink,\n  props => ({\n    title: props.title,\n  }),\n  {\n    windowWidth: 550,\n    windowHeight: 400,\n  },\n);\n\nexport default TelegramShareButton;\n", "import createIcon from './hocs/createIcon';\n\nconst TumblrIcon = createIcon({\n  color: '#34526f',\n  networkName: 'tumblr',\n  path: 'M39.2,41c-0.6,0.3-1.6,0.5-2.4,0.5c-2.4,0.1-2.9-1.7-2.9-3v-9.3h6v-4.5h-6V17c0,0-4.3,0-4.4,0 c-0.1,0-0.2,0.1-0.2,0.2c-0.3,2.3-1.4,6.4-5.9,8.1v3.9h3V39c0,3.4,2.5,8.1,9,8c2.2,0,4.7-1,5.2-1.8L39.2,41z',\n});\n\nexport default TumblrIcon;\n", "import assert from './utils/assert';\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareButton from './hocs/createShareButton';\n\nfunction tumblrLink(\n  url: string,\n  {\n    title,\n    caption,\n    tags,\n    posttype,\n  }: { title?: string; caption?: string; tags?: string; posttype?: 'link' | string },\n) {\n  assert(url, 'tumblr.url');\n\n  return (\n    'https://www.tumblr.com/widgets/share/tool' +\n    objectToGetParams({\n      canonicalUrl: url,\n      title,\n      caption,\n      tags,\n      posttype,\n    })\n  );\n}\n\ntype Options = {\n  title?: string;\n  caption?: string;\n  posttype?: 'link' | string;\n};\n\nconst TumblrShareButton = createShareButton<\n  Options & { tags?: string[] },\n  Options & { tags: string }\n>(\n  'tumblr',\n  tumblrLink,\n  props => ({\n    title: props.title,\n    tags: (props.tags || []).join(','),\n    caption: props.caption,\n    posttype: props.posttype || 'link',\n  }),\n  {\n    windowWidth: 660,\n    windowHeight: 460,\n  },\n);\n\nexport default TumblrShareButton;\n", "import jsonp from 'jsonp';\n\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareCount from './hocs/createShareCount';\n\nfunction getTumblrShareCount(shareUrl: string, callback: (shareCount?: number) => void) {\n  const endpoint = 'https://api.tumblr.com/v2/share/stats';\n\n  return jsonp(\n    endpoint +\n      objectToGetParams({\n        url: shareUrl,\n      }),\n    (err, data) => {\n      callback(!err && data && data.response ? data.response.note_count : undefined);\n    },\n  );\n}\n\nexport default createShareCount(getTumblrShareCount);\n", "import createIcon from './hocs/createIcon';\n\nconst TwitterIcon = createIcon({\n  color: '#00aced',\n  networkName: 'twitter',\n  path: 'M48,22.1c-1.2,0.5-2.4,0.9-3.8,1c1.4-0.8,2.4-2.1,2.9-3.6c-1.3,0.8-2.7,1.3-4.2,1.6 C41.7,19.8,40,19,38.2,19c-3.6,0-6.6,2.9-6.6,6.6c0,0.5,0.1,1,0.2,1.5c-5.5-0.3-10.3-2.9-13.5-6.9c-0.6,1-0.9,2.1-0.9,3.3 c0,2.3,1.2,4.3,2.9,5.5c-1.1,0-2.1-0.3-3-0.8c0,0,0,0.1,0,0.1c0,3.2,2.3,5.8,5.3,6.4c-0.6,0.1-1.1,0.2-1.7,0.2c-0.4,0-0.8,0-1.2-0.1 c0.8,2.6,3.3,4.5,6.1,4.6c-2.2,1.8-5.1,2.8-8.2,2.8c-0.5,0-1.1,0-1.6-0.1c2.9,1.9,6.4,2.9,10.1,2.9c12.1,0,18.7-10,18.7-18.7 c0-0.3,0-0.6,0-0.8C46,24.5,47.1,23.4,48,22.1z',\n});\n\nexport default TwitterIcon;\n", "import assert from './utils/assert';\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareButton from './hocs/createShareButton';\n\nfunction twitterLink(\n  url: string,\n  {\n    title,\n    via,\n    hashtags = [],\n    related = [],\n  }: { title?: string; via?: string; hashtags?: string[]; related?: string[] },\n) {\n  assert(url, 'twitter.url');\n  assert(Array.isArray(hashtags), 'twitter.hashtags is not an array');\n  assert(Array.isArray(related), 'twitter.related is not an array');\n\n  return (\n    'https://twitter.com/intent/tweet' +\n    objectToGetParams({\n      url,\n      text: title,\n      via,\n      hashtags: hashtags.length > 0 ? hashtags.join(',') : undefined,\n      related: related.length > 0 ? related.join(',') : undefined,\n    })\n  );\n}\n\nconst TwitterShareButton = createShareButton<{\n  title?: string;\n  via?: string;\n  hashtags?: string[];\n  related?: string[];\n}>(\n  'twitter',\n  twitterLink,\n  props => ({\n    hashtags: props.hashtags,\n    title: props.title,\n    via: props.via,\n    related: props.related,\n  }),\n  {\n    windowWidth: 550,\n    windowHeight: 400,\n  },\n);\n\nexport default TwitterShareButton;\n", "import createIcon from './hocs/createIcon';\n\nconst ViberIcon = createIcon({\n  color: '#7360f2',\n  networkName: 'viber',\n  path: 'm31.0,12.3c9.0,0.2 16.4,6.2 18.0,15.2c0.2,1.5 0.3,3.0 0.4,4.6a1.0,1.0 0 0 1 -0.8,1.2l-0.1,0a1.1,1.1 0 0 1 -1.0,-1.2l0,0c-0.0,-1.2 -0.1,-2.5 -0.3,-3.8a16.1,16.1 0 0 0 -13.0,-13.5c-1.0,-0.1 -2.0,-0.2 -3.0,-0.3c-0.6,-0.0 -1.4,-0.1 -1.6,-0.8a1.1,1.1 0 0 1 0.9,-1.2l0.6,0l0.0,-0.0zm10.6,39.2a19.9,19.9 0 0 1 -2.1,-0.6c-6.9,-2.9 -13.2,-6.6 -18.3,-12.2a47.5,47.5 0 0 1 -7.0,-10.7c-0.8,-1.8 -1.6,-3.7 -2.4,-5.6c-0.6,-1.7 0.3,-3.4 1.4,-4.7a11.3,11.3 0 0 1 3.7,-2.8a2.4,2.4 0 0 1 3.0,0.7a39.0,39.0 0 0 1 4.7,6.5a3.1,3.1 0 0 1 -0.8,4.2c-0.3,0.2 -0.6,0.5 -1.0,0.8a3.3,3.3 0 0 0 -0.7,0.7a2.1,2.1 0 0 0 -0.1,1.9c1.7,4.9 4.7,8.7 9.7,10.8a5.0,5.0 0 0 0 2.5,0.6c1.5,-0.1 2.0,-1.8 3.1,-2.7a2.9,2.9 0 0 1 3.5,-0.1c1.1,0.7 2.2,1.4 3.3,2.2a37.8,37.8 0 0 1 3.1,2.4a2.4,2.4 0 0 1 0.7,3.0a10.4,10.4 0 0 1 -4.4,4.8a10.8,10.8 0 0 1 -1.9,0.6c-0.7,-0.2 0.6,-0.2 0,0l0.0,0l0,-0.0zm3.1,-21.4a4.2,4.2 0 0 1 -0.0,0.6a1.0,1.0 0 0 1 -1.9,0.1a2.7,2.7 0 0 1 -0.1,-0.8a10.9,10.9 0 0 0 -1.4,-5.5a10.2,10.2 0 0 0 -4.2,-4.0a12.3,12.3 0 0 0 -3.4,-1.0c-0.5,-0.0 -1.0,-0.1 -1.5,-0.2a0.9,0.9 0 0 1 -0.9,-1.0l0,-0.1a0.9,0.9 0 0 1 0.9,-0.9l0.1,0a14.1,14.1 0 0 1 5.9,1.5a11.9,11.9 0 0 1 6.5,9.3c0,0.1 0.0,0.3 0.0,0.5c0,0.4 0.0,0.9 0.0,1.5l0,0l0.0,0.0zm-5.6,-0.2a1.1,1.1 0 0 1 -1.2,-0.9l0,-0.1a11.3,11.3 0 0 0 -0.2,-1.4a4.0,4.0 0 0 0 -1.5,-2.3a3.9,3.9 0 0 0 -1.2,-0.5c-0.5,-0.1 -1.1,-0.1 -1.6,-0.2a1.0,1.0 0 0 1 -0.8,-1.1l0,0l0,0a1.0,1.0 0 0 1 1.1,-0.8c3.4,0.2 6.0,2.0 6.3,6.2a2.8,2.8 0 0 1 0,0.8a0.8,0.8 0 0 1 -0.8,0.7l0,0l0.0,-0.0z',\n});\n\nexport default ViberIcon;\n", "import assert from './utils/assert';\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareButton from './hocs/createShareButton';\n\nfunction viberLink(url: string, { title, separator }: { title?: string; separator?: string }) {\n  assert(url, 'viber.url');\n  return (\n    'viber://forward' +\n    objectToGetParams({\n      text: title ? title + separator + url : url,\n    })\n  );\n}\n\nconst ViberShareButton = createShareButton<{ title?: string; separator?: string }>(\n  'viber',\n  viberLink,\n  props => ({\n    title: props.title,\n    separator: props.separator || ' ',\n  }),\n  {\n    windowWidth: 660,\n    windowHeight: 460,\n  },\n);\n\nexport default ViberShareButton;\n", "import createIcon from './hocs/createIcon';\n\nconst VKIcon = createIcon({\n  color: '#4C75A3',\n  networkName: 'vk',\n  path: 'M44.94,44.84h-0.2c-2.17-.36-3.66-1.92-4.92-3.37C39.1,40.66,38,38.81,36.7,39c-1.85.3-.93,3.52-1.71,4.9-0.62,1.11-3.29.91-5.12,0.71-5.79-.62-8.75-3.77-11.35-7.14A64.13,64.13,0,0,1,11.6,26a10.59,10.59,0,0,1-1.51-4.49C11,20.7,12.56,21,14.11,21c1.31,0,3.36-.29,4.32.2C19,21.46,19.57,23,20,24a37.18,37.18,0,0,0,3.31,5.82c0.56,0.81,1.41,2.35,2.41,2.14s1.06-2.63,1.1-4.18c0-1.77,0-4-.5-4.9S25,22,24.15,21.47c0.73-1.49,2.72-1.63,5.12-1.63,2,0,4.84-.23,5.62,1.12s0.25,3.85.2,5.71c-0.06,2.09-.41,4.25,1,5.21,1.09-.12,1.68-1.2,2.31-2A28,28,0,0,0,41.72,24c0.44-1,.91-2.65,1.71-3,1.21-.47,3.15-0.1,4.92-0.1,1.46,0,4.05-.41,4.52.61,0.39,0.85-.75,3-1.1,3.57a61.88,61.88,0,0,1-4.12,5.61c-0.58.78-1.78,2-1.71,3.27,0.05,0.94,1,1.67,1.71,2.35a33.12,33.12,0,0,1,3.92,4.18c0.47,0.62,1.5,2,1.4,2.76C52.66,45.81,46.88,44.24,44.94,44.84Z',\n});\n\nexport default VKIcon;\n", "import assert from './utils/assert';\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareButton from './hocs/createShareButton';\n\ntype Options = {\n  title?: string;\n  image?: string;\n  noParse?: boolean;\n  noVkLinks?: boolean;\n};\n\nfunction vkLink(url: string, { title, image, noParse, noVkLinks }: Options) {\n  assert(url, 'vk.url');\n\n  return (\n    'https://vk.com/share.php' +\n    objectToGetParams({\n      url,\n      title,\n      image,\n      noparse: noParse ? 1 : 0,\n      no_vk_links: noVkLinks ? 1 : 0,\n    })\n  );\n}\n\nconst VKShareButton = createShareButton<Options>(\n  'vk',\n  vkLink,\n  props => ({\n    title: props.title,\n    image: props.image,\n    noParse: props.noParse,\n    noVkLinks: props.noVkLinks,\n  }),\n  {\n    windowWidth: 660,\n    windowHeight: 460,\n  },\n);\n\nexport default VKShareButton;\n", "import jsonp from 'jsonp';\n\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareCount from './hocs/createShareCount';\n\ndeclare global {\n  interface Window {\n    VK: {\n      Share?: {\n        count: (index: number, count: number) => void;\n      };\n      callbacks?: ((count?: number) => void)[];\n    };\n  }\n}\n\nfunction getVKShareCount(shareUrl: string, callback: (shareCount?: number) => void) {\n  if (!window.VK) window.VK = {};\n  window.VK.Share = {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    count: (index, count) => window.VK.callbacks?.[index]?.(count),\n  };\n  window.VK.callbacks = [];\n\n  const url = 'https://vk.com/share.php';\n  const index = window.VK.callbacks.length;\n\n  window.VK.callbacks.push(callback);\n\n  return jsonp(\n    url +\n      objectToGetParams({\n        act: 'count',\n        index,\n        url: shareUrl,\n      }),\n  );\n}\n\nexport default createShareCount(getVKShareCount);\n", "import createIcon from './hocs/createIcon';\n\nconst WeiboIcon = createIcon({\n  color: '#DF2029',\n  networkName: 'weibo',\n  path: 'M40.9756152,15.0217119 C40.5000732,15.0546301 39.9999314,15.1204666 39.5325878,15.2192213 C38.6634928,15.4085016 38.0977589,16.2643757 38.2863368,17.1284787 C38.4667163,18.0008129 39.3194143,18.5686519 40.1885094,18.3793715 C42.8613908,17.8115326 45.7720411,18.6427174 47.7316073,20.8153207 C49.6911735,22.996153 50.2077122,25.975254 49.3714112,28.5840234 C49.1008441,29.4316684 49.5763861,30.3533789 50.4208857,30.6249537 C51.2653852,30.8965286 52.1754769,30.4192153 52.4542425,29.5715703 C53.6349013,25.9011885 52.9133876,21.7699494 50.1585171,18.7085538 C48.0923641,16.4042776 45.2063093,15.1533848 42.3530505,15.0217119 C41.8775084,14.9970227 41.4511594,14.9887937 40.9756152,15.0217119 Z M27.9227762,19.8277737 C24.9957268,20.140498 20.863421,22.4365431 17.2312548,26.0822378 C13.2711279,30.0571148 11,34.2871065 11,37.9328012 C11,44.9032373 19.8713401,49.125 28.5786978,49.125 C39.9917329,49.125 47.600423,42.4261409 47.600423,37.1427636 C47.600423,33.9496952 44.9603397,32.1638816 42.549827,31.4149913 C41.9594976,31.2339421 41.5167516,31.1434164 41.8283133,30.3616079 C42.5006339,28.66632 42.6236176,27.1932286 41.8939054,26.1480742 C40.5328692,24.1894405 36.7203236,24.2881952 32.448635,26.0822378 C32.448635,26.0822378 31.1203949,26.6912261 31.4647526,25.6213825 C32.1206742,23.4981576 32.0304845,21.712342 31.0056075,20.6836478 C30.2840938,19.9512176 29.2510184,19.6878718 27.9227762,19.8277737 Z M42.0906819,20.6836478 C41.6233383,20.6589586 41.1723917,20.716566 40.7132466,20.8153207 C39.9671353,20.9716828 39.4997917,21.7781784 39.6637721,22.5270687 C39.8277525,23.275959 40.5574647,23.7450433 41.303576,23.5804521 C42.1972686,23.3911718 43.2057485,23.6380596 43.8616701,24.3704897 C44.5175916,25.1029198 44.6733735,26.0657797 44.3864073,26.9381118 C44.1486363,27.6705419 44.5093932,28.4770397 45.2391054,28.7156963 C45.9688176,28.9461239 46.780521,28.5922524 47.0100936,27.8598223 C47.584026,26.0740087 47.2396661,24.0248493 45.8950269,22.5270687 C44.886547,21.4078489 43.4845162,20.7494842 42.0906819,20.6836478 Z M29.496988,29.9665891 C35.3100922,30.1723275 39.9917329,33.0691319 40.3852858,37.0769272 C40.8362324,41.6607904 35.5970585,45.9319315 28.6442899,46.6232144 C21.6915214,47.3144973 15.6488446,44.154347 15.197898,39.5787128 C14.7469514,34.9948495 20.059916,30.7237084 27.004486,30.0324256 C27.8735831,29.950131 28.6688875,29.9336709 29.496988,29.9665891 Z M25.5614586,34.3776322 C23.183744,34.5916017 20.9372116,35.9577073 19.9205332,37.9328012 C18.5348994,40.6238672 19.9041362,43.6029661 23.0689567,44.582284 C26.340366,45.5945202 30.1857056,44.0638213 31.5303448,41.1587879 C32.8503864,38.3195909 31.1613894,35.3734082 27.9227762,34.5751416 C27.1438688,34.3776322 26.356763,34.3035667 25.5614586,34.3776322 Z M24.052839,38.7228388 C24.3316067,38.7310678 24.5857748,38.8215935 24.8399449,38.9203482 C25.8648218,39.3400561 26.1845841,40.4428158 25.5614586,41.4221338 C24.9219361,42.3932227 23.5690963,42.8623069 22.5442194,42.4096807 C21.5357395,41.9652856 21.2487754,40.8542948 21.8882979,39.9078951 C22.3638421,39.2001542 23.2247386,38.7146097 24.052839,38.7228388 Z',\n});\n\nexport default WeiboIcon;\n", "import assert from './utils/assert';\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareButton from './hocs/createShareButton';\n\nfunction weiboLink(url: string, { title, image }: { title?: string; image?: string }) {\n  assert(url, 'weibo.url');\n\n  return (\n    'http://service.weibo.com/share/share.php' +\n    objectToGetParams({\n      url,\n      title,\n      pic: image,\n    })\n  );\n}\n\nconst WeiboShareButton = createShareButton<{ title?: string; image?: string }>(\n  'weibo',\n  weiboLink,\n  props => ({\n    title: props.title,\n    image: props.image,\n  }),\n  {\n    windowWidth: 660,\n    windowHeight: 550,\n    windowPosition: 'screenCenter',\n  },\n);\n\nexport default WeiboShareButton;\n", "import createIcon from './hocs/createIcon';\n\nconst WhatsappIcon = createIcon({\n  color: '#25D366',\n  networkName: 'whatsapp',\n  path: 'm42.32286,33.93287c-0.5178,-0.2589 -3.04726,-1.49644 -3.52105,-1.66732c-0.4712,-0.17346 -0.81554,-0.2589 -1.15987,0.2589c-0.34175,0.51004 -1.33075,1.66474 -1.63108,2.00648c-0.30032,0.33658 -0.60064,0.36247 -1.11327,0.12945c-0.5178,-0.2589 -2.17994,-0.80259 -4.14759,-2.56312c-1.53269,-1.37217 -2.56312,-3.05503 -2.86603,-3.57283c-0.30033,-0.5178 -0.03366,-0.80259 0.22524,-1.06149c0.23301,-0.23301 0.5178,-0.59547 0.7767,-0.90616c0.25372,-0.31068 0.33657,-0.5178 0.51262,-0.85437c0.17088,-0.36246 0.08544,-0.64725 -0.04402,-0.90615c-0.12945,-0.2589 -1.15987,-2.79613 -1.58964,-3.80584c-0.41424,-1.00971 -0.84142,-0.88027 -1.15987,-0.88027c-0.29773,-0.02588 -0.64208,-0.02588 -0.98382,-0.02588c-0.34693,0 -0.90616,0.12945 -1.37736,0.62136c-0.4712,0.5178 -1.80194,1.76053 -1.80194,4.27186c0,2.51134 1.84596,4.945 2.10227,5.30747c0.2589,0.33657 3.63497,5.51458 8.80262,7.74113c1.23237,0.5178 2.1903,0.82848 2.94111,1.08738c1.23237,0.38836 2.35599,0.33657 3.24402,0.20712c0.99159,-0.15534 3.04985,-1.24272 3.47963,-2.45956c0.44013,-1.21683 0.44013,-2.22654 0.31068,-2.45955c-0.12945,-0.23301 -0.46601,-0.36247 -0.98382,-0.59548m-9.40068,12.84407l-0.02589,0c-3.05503,0 -6.08417,-0.82849 -8.72495,-2.38189l-0.62136,-0.37023l-6.47252,1.68286l1.73463,-6.29129l-0.41424,-0.64725c-1.70875,-2.71846 -2.6149,-5.85116 -2.6149,-9.07706c0,-9.39809 7.68934,-17.06155 17.15993,-17.06155c4.58253,0 8.88029,1.78642 12.11655,5.02268c3.23625,3.21036 5.02267,7.50812 5.02267,12.06476c-0.0078,9.3981 -7.69712,17.06155 -17.14699,17.06155m14.58906,-31.58846c-3.93529,-3.80584 -9.1133,-5.95471 -14.62789,-5.95471c-11.36055,0 -20.60848,9.2065 -20.61625,20.52564c0,3.61684 0.94757,7.14565 2.75211,10.26282l-2.92557,10.63564l10.93337,-2.85309c3.0136,1.63108 6.4052,2.4958 9.85634,2.49839l0.01037,0c11.36574,0 20.61884,-9.2091 20.62403,-20.53082c0,-5.48093 -2.14111,-10.64081 -6.03239,-14.51915',\n});\n\nexport default WhatsappIcon;\n", "import assert from './utils/assert';\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareButton from './hocs/createShareButton';\n\nfunction isMobileOrTablet() {\n  return /(android|iphone|ipad|mobile)/i.test(navigator.userAgent);\n}\n\nfunction whatsappLink(url: string, { title, separator }: { title?: string; separator?: string }) {\n  assert(url, 'whatsapp.url');\n  return (\n    'https://' +\n    (isMobileOrTablet() ? 'api' : 'web') +\n    '.whatsapp.com/send' +\n    objectToGetParams({\n      text: title ? title + separator + url : url,\n    })\n  );\n}\n\nconst WhatsappShareButton = createShareButton<{ title?: string; separator?: string }>(\n  'whatsapp',\n  whatsappLink,\n  props => ({\n    title: props.title,\n    separator: props.separator || ' ',\n  }),\n  {\n    windowWidth: 550,\n    windowHeight: 400,\n  },\n);\n\nexport default WhatsappShareButton;\n", "import createIcon from './hocs/createIcon';\n\nconst WorkplaceIcon = createIcon({\n  color: '#4326c4',\n  networkName: 'workplace',\n  path: 'M34.019,10.292c0.21,0.017,0.423,0.034,0.636,0.049 c3.657,0.262,6.976,1.464,9.929,3.635c3.331,2.448,5.635,5.65,6.914,9.584c0.699,2.152,0.983,4.365,0.885,6.623 c-0.136,3.171-1.008,6.13-2.619,8.867c-0.442,0.75-0.908,1.492-1.495,2.141c-0.588,0.651-1.29,1.141-2.146,1.383 c-1.496,0.426-3.247-0.283-3.961-1.642c-0.26-0.494-0.442-1.028-0.654-1.548c-1.156-2.838-2.311-5.679-3.465-8.519 c-0.017-0.042-0.037-0.082-0.065-0.145c-0.101,0.245-0.192,0.472-0.284,0.698c-1.237,3.051-2.475,6.103-3.711,9.155 c-0.466,1.153-1.351,1.815-2.538,2.045c-1.391,0.267-2.577-0.154-3.496-1.247c-0.174-0.209-0.31-0.464-0.415-0.717 c-2.128-5.22-4.248-10.442-6.37-15.665c-0.012-0.029-0.021-0.059-0.036-0.104c0.054-0.003,0.103-0.006,0.15-0.006 c1.498-0.001,2.997,0,4.495-0.004c0.12-0.001,0.176,0.03,0.222,0.146c1.557,3.846,3.117,7.691,4.679,11.536 c0.018,0.046,0.039,0.091,0.067,0.159c0.273-0.673,0.536-1.32,0.797-1.968c1.064-2.627,2.137-5.25,3.19-7.883 c0.482-1.208,1.376-1.917,2.621-2.135c1.454-0.255,2.644,0.257,3.522,1.449c0.133,0.18,0.229,0.393,0.313,0.603 c1.425,3.495,2.848,6.991,4.269,10.488c0.02,0.047,0.04,0.093,0.073,0.172c0.196-0.327,0.385-0.625,0.559-0.935 c0.783-1.397,1.323-2.886,1.614-4.461c0.242-1.312,0.304-2.634,0.187-3.962c-0.242-2.721-1.16-5.192-2.792-7.38 c-2.193-2.939-5.086-4.824-8.673-5.625c-1.553-0.346-3.124-0.405-4.705-0.257c-3.162,0.298-6.036,1.366-8.585,3.258 c-3.414,2.534-5.638,5.871-6.623,10.016c-0.417,1.76-0.546,3.547-0.384,5.348c0.417,4.601,2.359,8.444,5.804,11.517 c2.325,2.073,5.037,3.393,8.094,3.989c1.617,0.317,3.247,0.395,4.889,0.242c1-0.094,1.982-0.268,2.952-0.529 c0.04-0.01,0.081-0.018,0.128-0.028c0,1.526,0,3.047,0,4.586c-0.402,0.074-0.805,0.154-1.21,0.221 c-0.861,0.14-1.728,0.231-2.601,0.258c-0.035,0.002-0.071,0.013-0.108,0.021c-0.493,0-0.983,0-1.476,0 c-0.049-0.007-0.1-0.018-0.149-0.022c-0.315-0.019-0.629-0.033-0.945-0.058c-1.362-0.105-2.702-0.346-4.017-0.716 c-3.254-0.914-6.145-2.495-8.66-4.752c-2.195-1.971-3.926-4.29-5.176-6.963c-1.152-2.466-1.822-5.057-1.993-7.774 c-0.014-0.226-0.033-0.451-0.05-0.676c0-0.502,0-1.003,0-1.504c0.008-0.049,0.02-0.099,0.022-0.148 c0.036-1.025,0.152-2.043,0.338-3.052c0.481-2.616,1.409-5.066,2.8-7.331c2.226-3.625,5.25-6.386,9.074-8.254 c2.536-1.24,5.217-1.947,8.037-2.126c0.23-0.015,0.461-0.034,0.691-0.051C33.052,10.292,33.535,10.292,34.019,10.292z',\n});\n\nexport default WorkplaceIcon;\n", "import assert from './utils/assert';\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareButton from './hocs/createShareButton';\n\nfunction workplaceLink(url: string, { quote, hashtag }: { quote?: string; hashtag?: string }) {\n  assert(url, 'workplace.url');\n\n  return (\n    'https://work.facebook.com/sharer.php' +\n    objectToGetParams({\n      u: url,\n      quote,\n      hashtag,\n    })\n  );\n}\n\nconst WorkplaceShareButton = createShareButton<{ quote?: string; hashtag?: string }>(\n  'workplace',\n  workplaceLink,\n  props => ({\n    quote: props.quote,\n    hashtag: props.hashtag,\n  }),\n  {\n    windowWidth: 550,\n    windowHeight: 400,\n  },\n);\n\nexport default WorkplaceShareButton;\n", "import createIcon from './hocs/createIcon';\n\nconst XIcon = createIcon({\n  color: '#000000',\n  networkName: 'X',\n  path: 'M 41.116 18.375 h 4.962 l -10.8405 12.39 l 12.753 16.86 H 38.005 l -7.821 -10.2255 L 21.235 47.625 H 16.27 l 11.595 -13.2525 L 15.631 18.375 H 25.87 l 7.0695 9.3465 z m -1.7415 26.28 h 2.7495 L 24.376 21.189 H 21.4255 z',\n});\n\nexport default XIcon;\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, nonMobileMediaQuery, smallMobileMediaQuery } from '../../constants';\nimport { ZIndex } from '../../constants/zIndex';\nimport { m, MotifComponent, p1Css, p2Css } from '../../motif';\nimport { globalHeaderHeight } from '../GlobalHeader/GlobalHeader.constants';\n\nconst heroMobileMinHeightPx = 256;\n\n/**\n * Minimum height of the hero.\n *\n * Calculated to fit a standard tile image.\n */\nconst heroDesktopMinHeightPx = 714;\n\n/**\n * Between mobile (768) and this, there's just not enough room to lay out the media and text in the\n * hero. So this serves as a cut-off to not show the media in these resolutions.\n */\nexport const cutoffWithMediaPx = 1014;\n\n/** Max width for subTitle and body text from designs. */\nconst contentMaxWith = '860px';\n\n/** Fixed height for mobile assets when Hero mimics Split Block */\n// TODO: Consume mobileMediaMinHeightPx variable from SplitBlock\nconst heroMobileAssetHeightPx = 375;\nexport const heroCurtainOpacityCssVar = '--hero-curtain-opacity';\n\nexport const alignItemsStartCss = css`\n  align-items: start;\n`;\n\nexport const alignItemsEndCss = css`\n  align-items: end;\n`;\n\nexport const textContentCss = css`\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  padding-block: ${m('--spacing-xl')};\n  padding-inline: ${m('--spacing-xl')};\n  z-index: ${ZIndex.HERO_TEXT};\n\n  ${mobileMediaQuery} {\n    padding-inline: 0;\n    width: 100%;\n  }\n`;\n\nexport const heroTopicsTransparencyCss = css`\n  & .${MotifComponent.TOPIC} {\n    &:hover {\n      background-color: rgba(0, 0, 0, calc(var(${heroCurtainOpacityCssVar}, 0) + 0.2));\n    }\n  }\n`;\n\nexport const hideTextOverflowCss = css`\n  overflow: hidden;\n  max-height: 100%;\n`;\n\nexport const heroCss = css`\n  background-color: ${m('--bg-color')};\n  background-image: ${m('--bg-image')};\n  position: relative;\n  width: 100%;\n  --hero-text-color-curtain-title-color: ${m('--hero-title-color')};\n  --hero-text-color-curtain-subtitle-color: ${m('--hero-subtitle-color')};\n\n  &[data-curtain='true'] {\n    --hero-text-color-curtain-title-color: ${m('--hero-text-color-curtain-active')};\n    --hero-text-color-curtain-subtitle-color: ${m('--hero-text-color-curtain-active')};\n\n    & .${MotifComponent.TOPIC} {\n      border-color: ${m('--hero-text-color-curtain-active')};\n      color: ${m('--hero-text-color-curtain-active')};\n    }\n\n    ${heroTopicsTransparencyCss}\n  }\n\n  ${mobileMediaQuery} {\n    min-height: ${heroMobileMinHeightPx}px;\n\n    & > video {\n      min-height: ${heroMobileMinHeightPx}px;\n    }\n  }\n`;\n\nexport const boundaryCss = css`\n  align-items: center;\n  display: grid;\n  grid-auto-columns: minmax(0, 100%) 40%;\n  grid-auto-flow: column;\n  grid-gap: ${m('--spacing-xl')};\n  min-height: ${heroDesktopMinHeightPx}px;\n  padding: ${m('--hero-content-desktop-padding')};\n\n  ${mobileMediaQuery} {\n    grid-auto-flow: row;\n    padding: ${m('--hero-content-mobile-padding')};\n    min-height: ${heroMobileMinHeightPx}px;\n    max-width: 100vw;\n  }\n\n  ${smallMobileMediaQuery} {\n    padding-bottom: ${m('--spacing-xl')};\n  }\n`;\n\nexport const heroWithBreadcrumbsCss = css`\n  ${mobileMediaQuery} {\n    padding-block-start: ${m('--spacing-xxl')};\n  }\n\n  ${nonMobileMediaQuery} {\n    padding-block-start: ${m('--spacing-xxxxl')};\n  }\n`;\n\nexport const compactBoundaryCss = css`\n  min-height: 0px;\n`;\n\nexport const curtainCss = css`\n  /** Relative color syntax decomposes the hex --curtain-color into r g b channels so opacity can be applied dynamically */\n  background-color: rgb(from ${m('--curtain-color')} r g b / var(${heroCurtainOpacityCssVar}, 0));\n  backdrop-filter: ${m('--curtain-backdrop-filter')};\n  inset: 0;\n  position: absolute;\n  z-index: ${ZIndex.HERO_CURTAIN};\n`;\n\nexport const headerCss = css`\n  color: var(--hero-text-color-curtain-title-color);\n`;\n\nexport const eyebrowCss = css`\n  /**\n   * using var instead of m function because this is not a motif variable.\n   * It is a custom css var defined in heroCss.\n   */\n  color: var(--hero-text-color-curtain-title-color);\n  font-size: ${m('--annotation-desktop-font-size')};\n  line-height: ${m('--annotation-desktop-font-line-height')};\n  font-weight: ${m('--annotation-desktop-font-weight')};\n  letter-spacing: ${m('--annotation-desktop-font-letter-spacing')};\n  margin-block-end: ${m('--spacing-m')};\n\n  ${mobileMediaQuery} {\n    font-size: ${m('--annotation-mobile-font-size')};\n    line-height: ${m('--annotation-mobile-font-line-height')};\n    font-weight: ${m('--annotation-mobile-font-weight')};\n    letter-spacing: ${m('--annotation-mobile-font-letter-spacing')};\n  }\n`;\n\nexport const titleCss = css`\n  /**\n * using var instead of m function because this is not a motif variable.\n * It is a custom css var defined in heroCss.\n */\n  color: var(--hero-text-color-curtain-title-color);\n  margin-block: 0 ${m('--spacing-m')};\n\n  &:has(.${MotifComponent.EMPHASIZED_TEXT}) {\n    color: ${m('--hero-title-de-emphasized-color')};\n  }\n\n  ${mobileMediaQuery} {\n    margin-block: 0 ${m('--spacing-xs')};\n  }\n`;\n\nexport const heroCompactTitleCss = css`\n  ${titleCss}\n  /**\n   * Ensure Hero Split title uses compact desktop font size\n   */\n  && {\n    ${nonMobileMediaQuery} {\n      && {\n        font-size: ${m('--h1-desktop-font-size-compact')};\n      }\n    }\n  }\n`;\n\nexport const titleIncreasedFontSizeCss = css`\n  && {\n    font-size: ${m('--hero-title-increased-font-size')};\n  }\n`;\n\nexport const subTitleCss = css`\n  ${p1Css}\n  color: var(--hero-text-color-curtain-subtitle-color);\n  margin-block-end: ${m('--spacing-m')};\n  max-width: ${contentMaxWith};\n\n  ${mobileMediaQuery} {\n    margin-block-end: ${m('--spacing-xs')};\n  }\n\n  /** Overriding margin added from renderRichTextWithElementsNoHeadings*/\n  & p {\n    margin: 0;\n  }\n`;\n\nexport const topicsContainerCss = css`\n  display: flex;\n  flex-wrap: wrap;\n  gap: ${m('--spacing-s')};\n  margin-top: ${m('--spacing-xs')};\n`;\n\nexport const bodyCss = css`\n  ${p2Css}\n  color: var(--hero-text-color-curtain-subtitle-color);\n  margin-block-end: ${m('--spacing-m')};\n  max-width: ${contentMaxWith};\n\n  ${mobileMediaQuery} {\n    margin-block-end: ${m('--spacing-xs')};\n  }\n  /** Overriding margin added from renderRichTextWithElementsNoHeadings */\n  & p {\n    margin-bottom: 0;\n  }\n\n  /**\n   * If the body has multiple paragraphs, we need to add a top margin.\n   * Do not add a margin bottom to avoid extra white space by adding the paragraph and parent margins.\n   */\n  & p + p {\n    margin-block-start: ${m('--spacing-s')};\n  }\n`;\n\nexport const callsToActionWrapperCss = css`\n  display: flex;\n  gap: ${m('--spacing-m')};\n  margin-block-start: ${m('--spacing-m')};\n\n  ${mobileMediaQuery} {\n    flex-direction: column;\n  }\n\n  ${smallMobileMediaQuery} {\n    width: 100%;\n  }\n`;\n\nexport const footerCss = css`\n  ${p2Css}\n  color: var(--hero-text-color-curtain-subtitle-color);\n  margin-block-start: ${m('--spacing-xl')};\n\n  ${mobileMediaQuery} {\n    margin-block-start: ${m('--spacing-l')};\n    text-align: center;\n  }\n`;\n\nexport const heroSocialContainerCss = css`\n  position: absolute;\n  bottom: calc(${m('--break-total-desktop-height')} + ${m('--spacing-xl')});\n  left: ${m('--spacing-xl')};\n  z-index: ${ZIndex.HERO_CURTAIN};\n\n  button {\n    margin-right: ${m('--spacing-s')};\n  }\n\n  ${mobileMediaQuery} {\n    bottom: calc(${m('--break-total-mobile-height')} + ${m('--spacing-m')});\n    left: ${m('--spacing-xl')};\n  }\n`;\n\nexport const fitWindowCss = css`\n  ${nonMobileMediaQuery} {\n    height: calc(100vh - ${globalHeaderHeight}px);\n    max-height: 1600px;\n    min-height: ${heroDesktopMinHeightPx}px;\n  }\n`;\n\nexport const backgroundContainerCss = css`\n  height: 100%;\n  left: 0;\n  /* Prevent overflowing elements from adding extra page width, e.g. background media stickers */\n  overflow: hidden;\n  position: absolute;\n  top: 0;\n  width: 100%;\n`;\n\nexport const backgroundCss = css`\n  height: 100%;\n  object-fit: cover;\n  width: 100%;\n`;\n\nexport const heroTitleContainerCss = css`\n  ${mobileMediaQuery} {\n    max-width: 100%;\n    overflow-x: auto;\n  }\n`;\n\n/**\n * Have to set the z-index separately on the media so it can be rendered over the background-image\n * and curtain.\n */\nexport const heroMediaCss = css`\n  z-index: ${ZIndex.HERO_BOUNDARY};\n`;\n\nexport const heroScrollButtonWrapCss = css`\n  bottom: ${m('--spacing-xl')};\n  position: absolute;\n  left: 50%;\n  transform: translateX(-50%);\n  z-index: ${ZIndex.HERO_TEXT};\n`;\n\nexport const heroScrollButtonCss = css`\n  background: ${m('--hero-scroll-button-bg-color')};\n  border: none;\n  box-shadow: none;\n  transition: background 0.2s linear;\n\n  svg {\n    fill: ${m('--hero-scroll-button-fg-color')};\n  }\n\n  &:hover {\n    background: ${m('--hero-scroll-button-hover-bg-color')};\n    border: none;\n    transform: none;\n\n    svg {\n      fill: ${m('--hero-scroll-button-hover-fg-color')};\n    }\n  }\n\n  [data-curtain='true'] & {\n    background: ${m('--hero-scroll-button-curtain-active-bg-color')};\n\n    svg {\n      fill: ${m('--hero-scroll-button-curtain-active-fg-color')};\n    }\n\n    &:hover {\n      background: ${m('--hero-scroll-button-curtain-active-hover-bg-color')};\n\n      svg {\n        fill: ${m('--hero-scroll-button-curtain-active-hover-fg-color')};\n      }\n    }\n  }\n`;\n\n/** Styles for Hero Split Block */\n\nexport const heroSplitCss = css`\n  align-items: stretch;\n  display: flex;\n  justify-content: space-between;\n\n  ${mobileMediaQuery} {\n    flex-direction: column;\n    flex-direction: column-reverse;\n  }\n`;\n\nexport const reverseSplitCss = css`\n  flex-direction: row-reverse;\n`;\n\nexport const splitItemCss = css`\n  width: 50%;\n  ${mobileMediaQuery} {\n    width: 100%;\n  }\n`;\n\nexport const splitMediaItemCss = css`\n  height: inherit;\n  position: relative;\n\n  ${mobileMediaQuery} {\n    height: ${heroMobileAssetHeightPx}px;\n  }\n`;\n\nexport const splitMediaCss = css`\n  ${mobileMediaQuery} {\n    max-height: ${heroMobileAssetHeightPx}px;\n  }\n`;\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, nonMobileMediaQuery } from '../../constants';\nimport { m, p2Css } from '../../motif';\n\nconst iconSize = 84; // width and height, taken from figma\n\n// mobile or a full date on desktop.\nexport const headerMobileCss = css`\n  ${p2Css}\n  ${mobileMediaQuery} {\n    margin-block-end: ${m('--spacing-xs')};\n    display: flex;\n    flex-direction: column;\n    width: 100%;\n  }\n\n  ${nonMobileMediaQuery} {\n    display: none;\n  }\n`;\n\nexport const headerDesktopCss = css`\n  ${p2Css}\n  ${mobileMediaQuery} {\n    display: none;\n  }\n\n  ${nonMobileMediaQuery} {\n    margin-block-end: ${m('--spacing-m')};\n    display: flex;\n    align-items: center;\n  }\n`;\n\nexport const headerImageCss = css`\n  border-radius: ${m('--spacing-xs')};\n  width: ${iconSize}px;\n  height: ${iconSize}px;\n  object-fit: contain;\n\n  ${mobileMediaQuery} {\n    margin-bottom: ${m('--spacing-m')};\n  }\n\n  ${nonMobileMediaQuery} {\n    margin-inline: 0 ${m('--spacing-m')};\n\n    *[dir='rtl'] & {\n      margin-inline: ${m('--spacing-m')} 0;\n    }\n  }\n`;\n", "export function isDate<T>(date?: Date | T): date is Date {\n  if (!date) {\n    return false;\n  }\n\n  return typeof (date as Date).getFullYear === 'function';\n}\n\nexport const dateDesktopString = (date: Date): string => {\n  return date.toLocaleDateString(undefined, {\n    year: 'numeric',\n    month: 'long',\n    day: 'numeric',\n  });\n};\n\nexport const dateMobileString = (date: Date): string => {\n  return date.toLocaleDateString(undefined, {\n    year: 'numeric',\n    month: 'numeric',\n    day: '2-digit',\n  });\n};\n", "import { cx } from '@emotion/css';\nimport type { FC, PropsWithChildren, ReactNode } from 'react';\n\nimport { Alignment } from '../../constants';\nimport type { ImageSources } from '../../types';\nimport { dataSetToAttributes, mobileAlignmentCss } from '../../utils';\nimport { Picture } from '../Picture';\nimport { headerDesktopCss, headerImageCss, headerMobileCss } from './HeroHeader.styles';\nimport { dateDesktopString, dateMobileString, isDate } from './utils';\n\ninterface Props {\n  content?: ReactNode | Date;\n  /** @deprecated Use iconSrcs instead */\n  iconSource?: string;\n  /** @deprecated */\n  desktopCutoff?: number;\n  iconSrcs?: ImageSources;\n  iconAltText?: string;\n  textAlignMobile?: Alignment;\n  headerDataset?: DOMStringMap;\n  className?: string;\n}\n\nexport const HeroHeader: FC<PropsWithChildren<Props>> = ({\n  content,\n  iconSrcs,\n  iconAltText,\n  textAlignMobile,\n  headerDataset,\n  className,\n}) => {\n  if (!content && !iconSrcs) {\n    return null;\n  }\n\n  const headerIsDate = isDate(content);\n  const headerMobile = headerIsDate ? dateMobileString(content as Date) : content;\n  const headerDesktop = headerIsDate ? dateDesktopString(content as Date) : content;\n\n  const icon = iconSrcs && (\n    <div className={headerImageCss}>\n      <Picture imgSrcs={iconSrcs} imgClassName={headerImageCss} altText={iconAltText} />\n    </div>\n  );\n\n  return (\n    <>\n      <div\n        data-testid=\"sdsm-hero-header\"\n        className={cx(headerDesktopCss, className)}\n        {...dataSetToAttributes(headerDataset)}\n      >\n        {icon}\n        {headerDesktop}\n      </div>\n      <div\n        className={cx(\n          mobileAlignmentCss[textAlignMobile ?? Alignment.Start],\n          headerMobileCss,\n          className\n        )}\n        {...dataSetToAttributes(headerDataset)}\n      >\n        {icon}\n        {headerMobile}\n      </div>\n    </>\n  );\n};\n\nHeroHeader.displayName = 'HeroHeader';\n", "import { cx } from '@emotion/css';\nimport type { FC, ReactNode } from 'react';\nimport { cloneElement } from 'react';\n\nimport { useIsMobile } from '../../../hooks';\nimport type { BaseComponentProps } from '../../../types/components';\nimport type { CarouselV3Props } from '../../CarouselV3';\nimport { isCarouselV3Element } from '../../CarouselV3/utils';\nimport type { MediaProps } from '../../Media';\nimport { Media } from '../../Media';\nimport { isSummaryCardElement } from '../../SummaryCard/utils';\nimport type { HeroProps } from '../Hero';\nimport { HeroSize } from '../Hero.constants';\nimport { compactHeroMediaCss, heroMediaCss, heroWideMediaCss } from './HeroMedia.styles';\n\nexport type Props = BaseComponentProps &\n  Pick<HeroProps, 'foregroundMedia' | 'imgSrcs' | 'wrapMedia' | 'showMediaMobile' | 'size'>;\n\nexport const HeroMedia: FC<Props> = ({\n  className,\n  foregroundMedia,\n  imgSrcs,\n  wrapMedia,\n  showMediaMobile,\n  size,\n}) => {\n  const isMobile = useIsMobile();\n\n  wrapMedia = (foregroundMedia?.props as MediaProps)?.wrap ?? wrapMedia;\n\n  if (isMobile && !showMediaMobile) return null;\n\n  let children: ReactNode;\n\n  if (foregroundMedia) {\n    children = foregroundMedia;\n\n    if (isCarouselV3Element(foregroundMedia)) {\n      children = cloneElement(foregroundMedia, {\n        isSingleView: true, // need to force single view\n      } as Partial<CarouselV3Props>);\n    }\n  } else {\n    children = <Media imgSrcs={imgSrcs} wrap={wrapMedia} />;\n  }\n\n  return (\n    <aside\n      data-testid=\"sdsm-hero-media\"\n      className={cx(\n        heroMediaCss,\n        className,\n        { [compactHeroMediaCss]: size === HeroSize.Compact },\n        { [heroWideMediaCss]: foregroundMedia ? isSummaryCardElement(foregroundMedia) : false }\n      )}\n    >\n      {children}\n    </aside>\n  );\n};\n\nHeroMedia.displayName = 'HeroMedia';\n", "import { css } from '@emotion/css';\n\nimport {\n  extraLargeDesktopMediaQuery,\n  largeDesktopMediaQuery,\n  nonMobileMediaQuery,\n} from '../../constants';\nimport { m } from '../../motif';\n\n// NOTE(paulomartinsbynd): these values have been decided by the design team\nconst summaryCardHeight = 225;\nconst mobileSummaryCardHeight = 180;\nconst dataLineHeight = 20;\n\nexport const summaryCardCss = css`\n  color: ${m('--summary-card-fg-color')};\n  background-color: ${m('--summary-card-bg-color')};\n  border: ${m('--summary-card-border-width')} solid ${m('--summary-card-border-color')};\n  border-radius: ${m('--summary-card-border-radius')};\n  display: flex;\n  box-shadow: ${m('--summary-card-box-shadow')};\n  flex-direction: row;\n  height: ${mobileSummaryCardHeight}px;\n  transition: background-color 0.2s linear, border-color 0.2s linear, box-shadow 0.2s linear;\n  will-change: filter;\n\n  ${nonMobileMediaQuery} {\n    height: ${summaryCardHeight}px;\n  }\n\n  :hover {\n    background-color: ${m('--summary-card-hover-bg-color')};\n    border-color: ${m('--summary-card-hover-border-color')};\n    box-shadow: ${m('--summary-card-hover-box-shadow')};\n  }\n`;\n\nexport const summaryCardRowCss = css`\n  display: flex;\n  flex-direction: row;\n  width: 100%;\n`;\n\nexport const summaryCardImageCss = css`\n  background-position: center;\n  background-repeat: no-repeat;\n  background-size: cover;\n  height: 100%;\n  min-width: 101px;\n  width: 101px;\n\n  video {\n    border-radius: 0;\n    height: ${mobileSummaryCardHeight}px;\n    width: 100%;\n\n    ${nonMobileMediaQuery} {\n      height: ${summaryCardHeight}px;\n    }\n  }\n\n  ${largeDesktopMediaQuery} {\n    min-width: 126px;\n    width: 126px;\n  }\n\n  ${extraLargeDesktopMediaQuery} {\n    min-width: 134px;\n    width: 134px;\n  }\n`;\n\nexport const summaryCardTitleCss = css`\n  /* stylelint-disable-next-line value-no-vendor-prefix */\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  font-weight: 500;\n  margin-bottom: ${m('--spacing-xxs')};\n  overflow: hidden;\n  word-break: break-word;\n  color: ${m('--summary-card-title-color')};\n\n  ${largeDesktopMediaQuery} {\n    margin-bottom: ${m('--spacing-xs')};\n  }\n`;\nexport const summaryCardTitleNoDateCss = css`\n  /* NOTE(dvazbynd): margin-block-start should match line-height of summaryCardDateCss */\n  margin-block-start: ${dataLineHeight}px;\n`;\n\nexport const summaryCardTitleNoMediaNoDescriptionCss = css`\n  -webkit-line-clamp: 4;\n  font-size: 18px;\n  line-height: 26px;\n\n  ${nonMobileMediaQuery} {\n    font-size: 24px;\n    line-height: 34px;\n  }\n`;\n\nexport const summaryCardTitleMediaNoDescriptionCss = css`\n  -webkit-line-clamp: 5;\n  font-size: 14px;\n  line-height: 20px;\n\n  ${nonMobileMediaQuery} {\n    -webkit-line-clamp: 4;\n    font-size: 20px;\n    line-height: 30px;\n  }\n`;\n\nexport const summaryCardTitleNoMediaDescriptionNoDateCss = css`\n  -webkit-line-clamp: 3;\n  font-size: 18px;\n  line-height: 26px;\n\n  ${nonMobileMediaQuery} {\n    -webkit-line-clamp: 4;\n    font-size: 20px;\n    line-height: 30px;\n  }\n`;\n\nexport const summaryCardTitleNoMediaDescriptionCss = css`\n  -webkit-line-clamp: 3;\n  font-size: 18px;\n  line-height: 26px;\n\n  ${nonMobileMediaQuery} {\n    -webkit-line-clamp: 3;\n    font-size: 20px;\n    line-height: 30px;\n  }\n`;\n\nexport const summaryCardTitleMediaDescriptionCss = css`\n  -webkit-line-clamp: 3;\n  font-size: 14px;\n  line-height: 20px;\n\n  ${nonMobileMediaQuery} {\n    font-size: 20px;\n    line-height: 30px;\n  }\n`;\n\nexport const summaryCardDateCss = css`\n  font-size: 12px;\n  font-weight: 500;\n  line-height: ${dataLineHeight}px;\n  margin-bottom: ${m('--spacing-xxs')};\n\n  ${largeDesktopMediaQuery} {\n    font-size: 14px;\n    margin-bottom: ${m('--spacing-xs')};\n  }\n`;\n\nexport const summaryCardContainerCss = css`\n  color: ${m('--summary-card-fg-color')};\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  padding: ${m('--spacing-m')};\n\n  ${nonMobileMediaQuery} {\n    padding: ${m('--spacing-l')};\n  }\n`;\n\nexport const summaryCardSkeletonContainerCss = css`\n  justify-content: space-between;\n`;\n\nexport const summaryCardDescriptionCss = css`\n  -webkit-box-orient: vertical;\n  color: ${m('--summary-card-description-color')};\n  /* stylelint-disable-next-line value-no-vendor-prefix */\n  display: -webkit-box;\n  font-size: 14px;\n  font-weight: 400;\n  line-height: 20px;\n  overflow: hidden;\n  pointer-events: none;\n  word-break: break-word;\n\n  b,\n  strong,\n  > * b,\n  > * strong {\n    font-weight: normal;\n  }\n\n  i,\n  > * i {\n    font-style: normal;\n  }\n\n  a,\n  u,\n  > * a,\n  > * u {\n    text-decoration: none;\n    color: inherit;\n  }\n\n  ${nonMobileMediaQuery} {\n    font-size: 16px;\n    line-height: 26px;\n  }\n\n  > *:not(:first-child) {\n    display: none;\n  }\n`;\n\nexport const summaryCardDescriptionMediaCss = css`\n  -webkit-line-clamp: 3;\n\n  ${nonMobileMediaQuery} {\n    -webkit-line-clamp: 2;\n  }\n`;\n\nexport const summaryCardDescriptionNoMediaCss = css`\n  -webkit-line-clamp: 2;\n`;\n\nexport const summaryCardPictureContainerCss = css`\n  display: block;\n  height: 100%;\n  width: 100%;\n`;\n\nexport const summaryCardPictureCss = css`\n  /* Due to stickers overlapping the image, we cannot have 'overflow: hidden' on the container or they\n  * get clipped. Therefore, we need to set the border radius on the image as well.\n  *\n  * As the image is inside the outer card container, which has the border applied, the radius needs to\n  * be smaller in order to match the curve of the container, so remove the border width from the radius.\n  * \n  * NOTE: Ensure that '--summary-card-border-width' has 'px' unit as it is required for 'calc()', which\n  * will not work with '0'.\n  */\n  border-end-end-radius: calc(\n    ${m('--summary-card-border-radius')} - ${m('--summary-card-border-width')}\n  );\n  border-start-end-radius: calc(\n    ${m('--summary-card-border-radius')} - ${m('--summary-card-border-width')}\n  );\n  height: 100%;\n  object-fit: cover;\n  object-position: center;\n  width: 100%;\n`;\n\nexport const summaryCardAnchorCss = css`\n  text-decoration: none;\n`;\n\nexport const summaryCardSkeletonCss = css`\n  background-color: rgb(232, 232, 235);\n`;\n\nexport const summaryCardSkeletonGapCss = css`\n  gap: 10px;\n`;\n\nexport const summaryCardDashCss = css`\n  border-radius: ${m('--border-radius-m')};\n`;\n\nexport const summaryCardSkeletonAnimationCss = css`\n  position: relative;\n  overflow: hidden;\n\n  &::before {\n    position: absolute;\n    top: 0;\n    left: 0;\n    height: 100%;\n    width: 100%;\n    transform: translateX(-100%);\n    content: '';\n    background: linear-gradient(0.25turn, transparent, #fff, transparent);\n    pointer-events: none;\n    opacity: 0.8;\n    animation: summary-card-skeleton 2s infinite;\n  }\n\n  @keyframes summary-card-skeleton {\n    0% {\n      transform: translateX(-100%);\n    }\n    30% {\n      transform: translateX(-100%);\n    }\n    100% {\n      transform: translateX(100%);\n    }\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport type { BaseComponentProps } from '../../types';\nimport {\n  summaryCardContainerCss,\n  summaryCardCss,\n  summaryCardDashCss,\n  summaryCardImageCss,\n  summaryCardRowCss,\n  summaryCardSkeletonAnimationCss,\n  summaryCardSkeletonContainerCss,\n  summaryCardSkeletonCss,\n  summaryCardSkeletonGapCss,\n} from './SummaryCard.styled';\n\n// https://www.figma.com/file/ZGx8KtLKunDcyUlhT6wtCE/SDS-M-Production?type=design&node-id=7887%3A103257&mode=design&t=y4zjz5uyXzB85w9K-1\n/**\n * Skeleton hardcoded structure to render some animated lines and their items\n *\n * @param height Height in pixels for the gray line (and its items).\n * @param items List of items to render within that line - each number represents a width\n *   percentage.\n */\n\nconst skeletonLines = [\n  {\n    height: 8,\n    items: [20],\n  },\n  {\n    height: 12,\n    items: [40, 17, 25],\n  },\n  {\n    height: 12,\n    items: [25, 55],\n  },\n  {\n    height: 8,\n    items: [36, 19, 27],\n  },\n  {\n    height: 8,\n    items: [15, 46, 25],\n  },\n  {\n    height: 8,\n    items: [22, 39],\n  },\n];\n\nexport const SkeletonSummaryCard: FC<BaseComponentProps> = ({ className }) => {\n  const summaryCardClassName = cx(summaryCardCss, className);\n  const summaryCardContainerClassName = cx(\n    summaryCardContainerCss,\n    summaryCardSkeletonContainerCss\n  );\n  const summaryCardImageClassName = cx(summaryCardImageCss, summaryCardSkeletonCss);\n  const summaryCardDashClassName = cx(\n    summaryCardDashCss,\n    summaryCardSkeletonCss,\n    summaryCardSkeletonAnimationCss\n  );\n  const summaryCardRowClassName = cx(summaryCardRowCss, summaryCardSkeletonGapCss);\n\n  return (\n    <div className={summaryCardClassName} data-testid=\"skeleton-summary-card-container\">\n      <div className={summaryCardContainerClassName}>\n        {skeletonLines.map(({ height, items }, lineIndex) => (\n          <div\n            key={`skeleton-line-${lineIndex}`}\n            style={{ height }}\n            className={summaryCardRowClassName}\n          >\n            {items.map((widthPercentage, itemIndex) => (\n              <div\n                key={`skeleton-line-${lineIndex}-${itemIndex}`}\n                className={summaryCardDashClassName}\n                style={{ height, width: `${widthPercentage}%` }}\n              />\n            ))}\n          </div>\n        ))}\n      </div>\n      <div className={cx(summaryCardImageClassName, summaryCardSkeletonAnimationCss)} />\n    </div>\n  );\n};\n\nSkeletonSummaryCard.displayName = 'SkeletonSummaryCard';\n", "import { cx } from '@emotion/css';\nimport type { FC, ReactNode } from 'react';\nimport { useContext } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport type { BaseComponentProps, ImageSources } from '../../types';\nimport { dataSetToAttributes, formatDateToDatetime } from '../../utils';\nimport { PictureWithStickers } from '../Picture';\nimport { PrimitivesContext } from '../Primitives';\nimport type { StickerProps } from '../Sticker';\nimport {\n  summaryCardAnchorCss,\n  summaryCardContainerCss,\n  summaryCardCss,\n  summaryCardDateCss,\n  summaryCardDescriptionCss,\n  summaryCardDescriptionMediaCss,\n  summaryCardDescriptionNoMediaCss,\n  summaryCardImageCss,\n  summaryCardPictureContainerCss,\n  summaryCardPictureCss,\n  summaryCardRowCss,\n  summaryCardTitleCss,\n  summaryCardTitleMediaDescriptionCss,\n  summaryCardTitleMediaNoDescriptionCss,\n  summaryCardTitleNoDateCss,\n  summaryCardTitleNoMediaDescriptionCss,\n  summaryCardTitleNoMediaDescriptionNoDateCss,\n  summaryCardTitleNoMediaNoDescriptionCss,\n} from './SummaryCard.styled';\n\nexport interface SummaryCardProps extends BaseComponentProps {\n  date?: string;\n  dateTime?: Date;\n  description?: ReactNode;\n  title?: ReactNode;\n  onClick?: () => void;\n  link?: string;\n  className?: string;\n  imgSrcs?: ImageSources;\n  imgAltText?: string;\n  showMedia?: boolean;\n  showDescription?: boolean;\n  showDate?: boolean;\n  titleDataset?: DOMStringMap;\n  descriptionDataset?: DOMStringMap;\n  dateDataset?: DOMStringMap;\n  mediaDataset?: DOMStringMap;\n  eyebrowText?: string;\n  stickers?: StickerProps[];\n}\n\nexport const SummaryCard: FC<SummaryCardProps> = ({\n  date,\n  dateTime,\n  className,\n  title,\n  description,\n  onClick,\n  link,\n  imgSrcs,\n  imgAltText,\n  showMedia,\n  showDescription,\n  showDate,\n  dataset,\n  dateDataset,\n  titleDataset,\n  descriptionDataset,\n  mediaDataset,\n  eyebrowText,\n  stickers,\n}) => {\n  useMotifStyles(MotifComponent.SUMMARY_CARD);\n  const { Anchor } = useContext(PrimitivesContext);\n\n  const rootClassName = cx(\n    MotifComponent.SUMMARY_CARD,\n    {\n      [summaryCardCss]: !link,\n      [summaryCardRowCss]: !!link,\n    },\n    className\n  );\n\n  const anchorRootClassName = cx(\n    summaryCardAnchorCss,\n    {\n      [summaryCardCss]: !!link,\n    },\n    className\n  );\n\n  const summaryCardTitleClassName = cx(summaryCardTitleCss, {\n    [summaryCardTitleMediaDescriptionCss]: showDescription && showMedia,\n    [summaryCardTitleNoMediaNoDescriptionCss]: !showDescription && !showMedia,\n    [summaryCardTitleNoMediaDescriptionCss]: showDescription && !showMedia && showDate,\n    [summaryCardTitleNoMediaDescriptionNoDateCss]: !showDescription && !showMedia && !showDate,\n    [summaryCardTitleMediaNoDescriptionCss]: !showDescription && showMedia,\n    [summaryCardTitleNoDateCss]: !date && showDate,\n  });\n\n  const summaryCardDescriptionClassName = cx(summaryCardDescriptionCss, {\n    [summaryCardDescriptionMediaCss]: showMedia,\n    [summaryCardDescriptionNoMediaCss]: !showMedia,\n  });\n\n  const innerContainer = (\n    <div\n      className={rootClassName}\n      data-testid=\"summary-card-container\"\n      {...dataSetToAttributes(dataset)}\n    >\n      <div className={summaryCardContainerCss}>\n        {eyebrowText ? (\n          <span className={summaryCardDateCss}>{eyebrowText}</span>\n        ) : showDate && date ? (\n          <time\n            dateTime={formatDateToDatetime(dateTime)}\n            className={summaryCardDateCss}\n            {...dataSetToAttributes(dateDataset)}\n          >\n            {date}\n          </time>\n        ) : null}\n        {title ? (\n          <div className={summaryCardTitleClassName} {...dataSetToAttributes(titleDataset)}>\n            {title}\n          </div>\n        ) : null}\n        {showDescription && description ? (\n          <div\n            className={summaryCardDescriptionClassName}\n            {...dataSetToAttributes(descriptionDataset)}\n          >\n            {description}\n          </div>\n        ) : null}\n      </div>\n      {showMedia ? (\n        <div className={summaryCardImageCss}>\n          {imgSrcs ? (\n            <PictureWithStickers\n              altText={imgAltText}\n              imgSrcs={imgSrcs}\n              className={summaryCardPictureContainerCss}\n              imgClassName={summaryCardPictureCss}\n              dataset={mediaDataset}\n              stickers={stickers}\n            />\n          ) : null}\n        </div>\n      ) : null}\n    </div>\n  );\n\n  if (link) {\n    return (\n      <Anchor href={link} className={anchorRootClassName} onClick={onClick}>\n        {innerContainer}\n      </Anchor>\n    );\n  }\n\n  return innerContainer;\n};\n\nSummaryCard.displayName = 'SummaryCard';\n", "import type { FC, ReactElement } from 'react';\n\nimport { SkeletonSummaryCard } from './SkeletonSummaryCard';\nimport type { SummaryCardProps } from './SummaryCard';\nimport { SummaryCard } from './SummaryCard';\n\n/**\n * Type guard function to check if the given element is a SummaryCard.\n *\n * @param elem - The element to be checked.\n * @returns True if the element is a React element with SummaryCardProps, false otherwise.\n */\nexport const isSummaryCardElement = (elem: unknown): elem is ReactElement<SummaryCardProps> => {\n  const asSummaryCard = elem as ReactElement<SummaryCardProps>;\n\n  if (asSummaryCard?.type === SummaryCard) {\n    return true;\n  }\n\n  if (asSummaryCard?.type === SkeletonSummaryCard) {\n    return true;\n  }\n\n  // evil displayName check\n  const typeAsFC = (elem as ReactElement).type as FC;\n  return typeAsFC.displayName === 'SummaryCard' || typeAsFC.displayName === 'SkeletonSummaryCard';\n};\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery } from '../../../constants';\nimport { m } from '../../../motif';\n\nexport const heroMediaCss = css`\n  /* Setting height so that we reserve the space for the video/carousel. */\n  max-height: 650px;\n\n  /* Limiting the width to at least allow for 1 tile. */\n  min-width: 274px;\n  max-width: 100%;\n\n  /* Matches the padding on the Hero Text container. */\n  padding-inline: ${m('--spacing-xxl')};\n\n  /* TODO: Fix this for the case where VIDEOS overflow */\n  overflow: visible;\n\n  ${mobileMediaQuery} {\n    height: unset;\n  }\n\n  /* Limits the height of the video wrapper. Without this max-height is ignored */\n  * {\n    max-height: 650px;\n  }\n`;\n\nexport const heroWideMediaCss = css`\n  padding-inline: 0;\n`;\n\nexport const compactHeroMediaCss = css`\n  max-height: 350px;\n\n  /* Limits the height of the video wrapper. Without this max-height is ignored */\n  * {\n    max-height: 350px;\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC, ReactNode } from 'react';\nimport { memo, useContext } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport type { OnActivateHandler } from '../../types/activationEvents';\nimport { PrimitivesContext } from '../Primitives';\nimport { hyperLinkCss } from './Hyperlink.styled';\n\nexport interface HyperlinkProps {\n  link?: string;\n  target?: string;\n  onClick?: OnActivateHandler;\n  children?: ReactNode;\n}\n\nexport const Hyperlink: FC<HyperlinkProps> = memo(({ children, link, target, onClick }) => {\n  useMotifStyles(MotifComponent.HYPERLINK);\n  const { Anchor } = useContext(PrimitivesContext);\n\n  return (\n    <Anchor\n      href={link}\n      target={target}\n      className={cx(MotifComponent.HYPERLINK, hyperLinkCss)}\n      onClick={onClick}\n    >\n      {children}\n    </Anchor>\n  );\n});\n\nHyperlink.displayName = 'Hyperlink';\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, nonMobileMediaQuery } from '../../constants';\nimport { m } from '../../motif';\n\nexport const hyperLinkCss = css`\n  cursor: pointer;\n\n  /** TODO: Troubleshoot this w/ designers. */\n  text-decoration: underline;\n\n  color: ${m('--hyperlink-color')};\n  :hover {\n    color: ${m('--hyperlink-hover-color')};\n    border-bottom: 0;\n  }\n\n  ${mobileMediaQuery} {\n    font-size: ${m('--hyperlink-mobile-font-size')};\n    font-weight: ${m('--hyperlink-mobile-font-weight')};\n    letter-spacing: ${m('--hyperlink-mobile-font-letter-spacing')};\n    line-height: ${m('--hyperlink-mobile-font-line-height')};\n  }\n\n  ${nonMobileMediaQuery} {\n    font-size: ${m('--hyperlink-desktop-font-size')};\n    font-weight: ${m('--hyperlink-desktop-font-weight')};\n    letter-spacing: ${m('--hyperlink-desktop-font-letter-spacing')};\n    line-height: ${m('--hyperlink-desktop-font-line-height')};\n  }\n`;\n", "import { css, cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport type { BaseComponentProps, ImageSources } from '../../types';\nimport type { OnActivateHandler } from '../../types/activationEvents';\nimport { Picture } from '../Picture/Picture';\nimport { PrimitivesContext } from '../Primitives';\n\ninterface ImageButtonProps extends BaseComponentProps {\n  height?: number;\n  imgSrcs?: ImageSources;\n  url?: string;\n  width?: number;\n  onClick?: OnActivateHandler;\n  altText?: string;\n  pictureClassName?: string;\n}\n\nconst imageButtonCss = css`\n  background: none;\n  border: none;\n  cursor: pointer;\n  outline: inherit;\n`;\n\nexport const ImageButton: FC<ImageButtonProps> = ({\n  height,\n  imgSrcs,\n  url,\n  width,\n  onClick,\n  altText,\n  pictureClassName,\n  className,\n}) => {\n  useMotifStyles(MotifComponent.IMAGE_BUTTON);\n  const { Anchor } = useContext(PrimitivesContext);\n  return url ? (\n    <Anchor href={url} className={cx(MotifComponent.IMAGE_BUTTON, className)} onClick={onClick}>\n      <Picture\n        className={pictureClassName}\n        altText={altText}\n        height={height}\n        width={width}\n        imgSrcs={imgSrcs}\n      />\n    </Anchor>\n  ) : (\n    <button\n      className={cx(MotifComponent.IMAGE_BUTTON, imageButtonCss, className)}\n      onClick={onClick}\n    >\n      <Picture\n        className={pictureClassName}\n        altText={altText}\n        height={height}\n        width={width}\n        imgSrcs={imgSrcs}\n      />\n    </button>\n  );\n};\n", "import { cx } from '@emotion/css';\nimport { type FC, type PropsWithChildren, Children, useId, useRef } from 'react';\n\nimport { Alignment } from '../../constants';\nimport { useIsMobile } from '../../hooks';\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { MotifScheme } from '../../motif/motifConstants';\nimport { getBackgroundClassName } from '../../utils';\nimport { BlockBoundary } from '../BlockBoundary';\nimport {\n  boundaryCss,\n  cardsColumnCss,\n  cardWrapperCss,\n  contentWrapperCss,\n  contentWrapperStartAlignmentCss,\n  eyebrowCss,\n  immersiveScrollBlockCss,\n  navigationElementActiveCss,\n  navigationElementCss,\n  navigationWrapperAlignmentCss,\n  navigationWrapperCss,\n  textCenterCss,\n  textColumnCss,\n  textColumnStartAlignmentCss,\n  textCss,\n  textEndCss,\n  textStartCss,\n  textWrapperCss,\n  titleCss,\n} from './styles';\nimport type { ImmersiveScrollBlockProps } from './types';\nimport { useActiveCardObserver } from './useActiveCardObserver';\nimport { useWheelScrollAnimation } from './useWheelScrollAnimation';\n\nexport const ImmersiveScrollBlock: FC<PropsWithChildren<ImmersiveScrollBlockProps>> = props => {\n  const {\n    anchor,\n    motifScheme,\n    backgroundColor,\n    children,\n    eyebrow,\n    text,\n    textAlignmentMobile = Alignment.Center,\n    tilesDirection = Alignment.End,\n    title,\n  } = props;\n  // Using Carousel motif because children from Web component are CarouseLCards.\n  // TODO: Find a way to not couple this component with Motif variables.\n  useMotifStyles(MotifComponent.CAROUSEL);\n  const cardRefs = useRef<Array<HTMLLIElement | null>>([]);\n  const containerRef = useRef<HTMLElement>(null);\n  const childCount = Children.count(children);\n  const isMobile = useIsMobile();\n  const titleId = useId();\n\n  // Create fallback chain here instead of default parameters otherwise if 'motifScheme' is not provided,\n  // the default background color will be used instead of falling back to the 'backgroundColor' parameter\n  const motifSchemeWithFallback =\n    motifScheme ??\n    (getBackgroundClassName(backgroundColor) as MotifScheme) ??\n    MotifScheme.SECONDARY;\n\n  const setCardRef = (el: HTMLLIElement | null, index: number) => {\n    cardRefs.current[index] = el;\n  };\n\n  useWheelScrollAnimation({ elementRefs: cardRefs, childCount, isEnabled: isMobile });\n  const activeCardIndex = useActiveCardObserver({\n    cardRefs,\n    childCount,\n    options: {\n      isEnabled: !isMobile,\n      threshold: 0.8,\n    },\n  });\n\n  return (\n    <section\n      aria-labelledby={titleId}\n      className={cx(immersiveScrollBlockCss, motifSchemeWithFallback)}\n      id={anchor}\n      ref={containerRef}\n    >\n      <BlockBoundary className={boundaryCss}>\n        <div\n          className={cx(contentWrapperCss, {\n            [contentWrapperStartAlignmentCss]: tilesDirection === Alignment.Start,\n          })}\n        >\n          <section\n            className={cx(textColumnCss, {\n              [textColumnStartAlignmentCss]: tilesDirection === Alignment.Start,\n            })}\n          >\n            <ul\n              className={cx(navigationWrapperCss, {\n                [navigationWrapperAlignmentCss]: tilesDirection === Alignment.Start,\n              })}\n            >\n              {Children.map(children, (_, index) => (\n                <li\n                  // biome-ignore lint/suspicious/noArrayIndexKey: Ok if list is static\n                  key={index}\n                >\n                  <button\n                    type=\"button\"\n                    aria-label={`Go to item ${index + 1}`}\n                    onClick={() => {\n                      cardRefs.current[index]?.scrollIntoView({ behavior: 'smooth' });\n                    }}\n                    className={cx(navigationElementCss(motifSchemeWithFallback), {\n                      [navigationElementActiveCss(motifSchemeWithFallback)]:\n                        activeCardIndex === index,\n                    })}\n                    aria-current={activeCardIndex === index ? 'true' : 'false'}\n                  />\n                </li>\n              ))}\n            </ul>\n            <div\n              className={cx(textWrapperCss, {\n                [textStartCss]: textAlignmentMobile === Alignment.Start,\n                [textCenterCss]: textAlignmentMobile === Alignment.Center,\n                [textEndCss]: textAlignmentMobile === Alignment.End,\n              })}\n            >\n              {eyebrow && <div className={eyebrowCss}>{eyebrow}</div>}\n              {\n                <h2 id={titleId} className={titleCss}>\n                  {title}\n                </h2>\n              }\n              {text && <div className={textCss}>{text}</div>}\n            </div>\n          </section>\n          <ul className={cardsColumnCss}>\n            {Children.map(children, (child, index) => (\n              <li\n                // biome-ignore lint/suspicious/noArrayIndexKey: Ok to use index\n                key={index}\n                className={cardWrapperCss}\n                ref={el => setCardRef(el, index)}\n              >\n                {child}\n              </li>\n            ))}\n          </ul>\n        </div>\n      </BlockBoundary>\n    </section>\n  );\n};\n\nImmersiveScrollBlock.displayName = 'ImmersiveScrollBlock';\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, nonMobileMediaQuery } from '../../constants';\nimport { h2Css, m, MotifScheme, p1Css } from '../../motif';\nimport { globalHeaderHeight } from '../GlobalHeader';\n\nexport const immersiveScrollBlockCss = css`\n  background-color: ${m('--bg-color')};\n`;\n\nexport const boundaryCss = css`\n  padding: ${m('--spacing-xxxl')} ${m('--spacing-l')};\n\n  ${nonMobileMediaQuery} {\n    padding-inline: ${m('--spacing-xxxxl')};\n  }\n`;\n\nexport const contentWrapperCss = css`\n  display: grid;\n  gap: ${m('--spacing-xl')};\n  grid-template-columns: 1fr;\n\n  ${nonMobileMediaQuery} {\n    grid-template-areas: 'text text text text text . cards cards cards cards cards cards';\n    grid-template-columns: repeat(12, 1fr);\n  }\n`;\n\nexport const contentWrapperStartAlignmentCss = css`\n  ${nonMobileMediaQuery} {\n    grid-template-areas: 'cards cards cards cards cards cards . text text text text text';\n  }\n`;\n\nexport const textColumnCss = css`\n  grid-column: span 1;\n\n  ${nonMobileMediaQuery} {\n    align-items: center;\n    display: flex;\n    grid-area: text;\n    height: calc(100vh - ${globalHeaderHeight}px);\n    position: sticky;\n    top: ${globalHeaderHeight}px;\n  }\n`;\n\nexport const textColumnStartAlignmentCss = css`\n  ${nonMobileMediaQuery} {\n    flex-direction: row-reverse;\n  }\n`;\n\nexport const navigationWrapperCss = css`\n  display: none;\n  list-style: none;\n\n  > li {\n    line-height: 0;\n  }\n\n  ${nonMobileMediaQuery} {\n    display: flex;\n    flex-direction: column;\n    flex: 0 0 20%;\n    gap: ${m('--spacing-m')};\n  }\n`;\n\nexport const navigationWrapperAlignmentCss = css`\n  ${nonMobileMediaQuery} {\n    align-items: flex-end;\n  }\n`;\n\nconst activeColor = m('--neutral-v700');\nconst activeDarkColor = m('--primary-v100');\n\nexport const navigationElementCss = (motifScheme: MotifScheme) => css`\n  background-color: transparent;\n  height: 24px;\n  transition: height 0.3s ease-in-out, background-color 0.3s ease-in-out;\n  width: 14px;\n\n  &::before {\n    background-color: rgba(133, 141, 148, 0.5);\n    border-radius: ${m('--border-radius-s')};\n    content: '';\n    display: block;\n    height: 100%;\n    width: 4px;\n  }\n\n  @media (hover: hover) {\n    cursor: pointer;\n\n    &:hover {\n      height: 56px;\n    }\n\n    &:hover::before {\n      background-color: ${motifScheme === MotifScheme.SECONDARY ? activeDarkColor : activeColor};\n    }\n  }\n`;\n\nexport const navigationElementActiveCss = (motifScheme: MotifScheme) => css`\n  height: 56px;\n\n  &::before {\n    background-color: ${motifScheme === MotifScheme.SECONDARY ? activeDarkColor : activeColor};\n  }\n`;\n\nexport const textWrapperCss = css`\n  color: ${m('--fg-color')};\n\n  ${mobileMediaQuery} {\n    display: flex;\n    flex-direction: column;\n    flex: 0 0 80%;\n    gap: ${m('--spacing-m')};\n    padding: ${m('--spacing-m')};\n  }\n\n  ${nonMobileMediaQuery} {\n    align-self: center;\n    flex: 1;\n    padding-block: 134px;\n  }\n`;\n\nexport const textStartCss = css`\n  ${mobileMediaQuery} {\n    text-align: start;\n  }\n`;\n\nexport const textCenterCss = css`\n  ${mobileMediaQuery} {\n    text-align: center;\n  }\n`;\n\nexport const textEndCss = css`\n  ${mobileMediaQuery} {\n    text-align: end;\n  }\n`;\n\nexport const cardsColumnCss = css`\n  grid-column: span 1;\n  list-style: none;\n\n  ${mobileMediaQuery} {\n    display: flex;\n    flex-direction: column;\n    gap: ${m('--spacing-m')};\n  }\n\n  ${nonMobileMediaQuery} {\n    grid-area: cards;\n  }\n`;\n\nexport const cardWrapperCss = css`\n  align-items: center;\n  display: flex;\n  justify-content: center;\n\n  > div {\n    cursor: initial;\n  }\n\n  ${mobileMediaQuery} {\n    transform: scale(0.7);\n    transition: transform 50ms linear;\n    will-change: transform;\n  }\n\n  ${nonMobileMediaQuery} {\n    padding-block: 134px;\n    scroll-margin-top: ${globalHeaderHeight}px;\n\n    /* Override the Carousel Card width. Value defined by the design team. */\n    > div {\n      width: 320px;\n    }\n  }\n`;\n\nexport const eyebrowCss = css`\n  /**\n   * using var instead of m function because this is not a motif variable.\n   * It is a custom css var defined in heroCss.\n   */\n  color: ${m('--fg-color')};\n  font-size: ${m('--annotation-desktop-font-size')};\n  font-weight: ${m('--annotation-desktop-font-weight')};\n  letter-spacing: ${m('--annotation-desktop-font-letter-spacing')};\n  line-height: ${m('--annotation-desktop-font-line-height')};\n\n  ${mobileMediaQuery} {\n    font-size: ${m('--annotation-mobile-font-size')};\n    font-weight: ${m('--annotation-mobile-font-weight')};\n    letter-spacing: ${m('--annotation-mobile-font-letter-spacing')};\n    line-height: ${m('--annotation-mobile-font-line-height')};\n  }\n`;\n\nexport const titleCss = css`\n  ${h2Css}\n  margin-block-start: ${m('--spacing-xs')};\n`;\n\nexport const textCss = css`\n  ${p1Css}\n\n  ${nonMobileMediaQuery} {\n    margin-block-start: ${m('--spacing-m')};\n  }\n`;\n", "import { type MutableRefObject, useEffect, useState } from 'react';\n\ntype UseActiveCardObserverProps = {\n  cardRefs: MutableRefObject<(HTMLElement | null)[]>;\n  childCount: number;\n  options: {\n    isEnabled: boolean;\n    threshold?: number;\n  };\n};\n\nexport const useActiveCardObserver = ({\n  cardRefs,\n  childCount,\n  options,\n}: UseActiveCardObserverProps): number => {\n  const { threshold = 0.5, isEnabled } = options;\n  const [activeCardIndex, setActiveCardIndex] = useState(0);\n\n  useEffect(() => {\n    // If this hook is disabled (e.g., on mobile), do nothing.\n    if (!isEnabled) {\n      setActiveCardIndex(0);\n      return;\n    }\n\n    const cardElements = cardRefs.current.slice(0, childCount);\n\n    if (cardElements.length === 0) {\n      return;\n    }\n\n    // Track intersection ratios for all cards to find the most visible one.\n    const intersectionRatios = new Map<Element, number>();\n\n    const observerCallback = (entries: IntersectionObserverEntry[]) => {\n      // Update intersection ratios for all observed entries\n      for (const entry of entries) {\n        intersectionRatios.set(entry.target, entry.intersectionRatio);\n      }\n\n      // If the card is bigger than the viewport, the threshold might never be met.\n      // So, find the card with the highest intersection ratio that meets the threshold\n      // or fallback to the most visible card if none meet the threshold.\n      let bestIndex = -1;\n      let bestRatio = 0;\n      let bestThresholdIndex = -1;\n      let bestThresholdRatio = 0;\n\n      for (let i = 0; i < cardElements.length; i++) {\n        const element = cardElements[i];\n        if (!element) continue;\n        const ratio = intersectionRatios.get(element) ?? 0;\n\n        // Track the best card meeting the threshold\n        if (ratio >= threshold && ratio > bestThresholdRatio) {\n          bestThresholdRatio = ratio;\n          bestThresholdIndex = i;\n        }\n\n        // Track the most visible card overall (fallback for small viewports)\n        if (ratio > bestRatio) {\n          bestRatio = ratio;\n          bestIndex = i;\n        }\n      }\n\n      // Prefer a card that meets threshold, otherwise use most visible card\n      const newIndex = bestThresholdIndex !== -1 ? bestThresholdIndex : bestIndex;\n\n      if (newIndex !== -1) {\n        setActiveCardIndex(newIndex);\n      }\n    };\n\n    // Use multiple thresholds to get more granular intersection updates.\n    // This ensures we detect changes even in constrained viewports.\n    const thresholds = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1];\n    const observer = new IntersectionObserver(observerCallback, { threshold: thresholds });\n\n    for (const cardEl of cardElements) {\n      if (cardEl) {\n        observer.observe(cardEl);\n      }\n    }\n\n    return () => {\n      observer.disconnect();\n    };\n  }, [cardRefs, childCount, threshold, isEnabled]);\n\n  return activeCardIndex;\n};\n", "import debounce from 'lodash-es/debounce';\nimport { type MutableRefObject, useEffect, useRef } from 'react';\n\nimport { globalHeaderHeight } from '../GlobalHeader';\n\ntype UseWheelScrollAnimationProps = {\n  childCount: number;\n  elementRefs: MutableRefObject<Array<HTMLElement | null>>;\n  isEnabled: boolean;\n};\n\nexport const useWheelScrollAnimation = ({\n  childCount,\n  elementRefs,\n  isEnabled,\n}: UseWheelScrollAnimationProps) => {\n  const visibleCardIndices = useRef(new Set<number>());\n  const ticking = useRef(false);\n\n  useEffect(() => {\n    const cardElements = elementRefs.current.slice(0, childCount);\n\n    if (!isEnabled) {\n      for (const element of cardElements) {\n        if (element) {\n          element.style.transform = 'scale(1)';\n        }\n      }\n\n      return;\n    }\n\n    const animateScales = () => {\n      // + globalHeaderHeight to consider the \"center\" of the screen without the header\n      const viewportCenterY = window.innerHeight / 2 + globalHeaderHeight;\n\n      for (const cardIndex of visibleCardIndices.current) {\n        const cardEl = cardElements[cardIndex];\n        if (!cardEl) continue;\n\n        const rect = cardEl.getBoundingClientRect();\n        const cardCenterY = rect.top + rect.height / 2;\n        const distance = Math.abs(viewportCenterY - cardCenterY);\n        const deadZone = 30; // Period, in px, where scaling does not happen.\n        const adjustedDistance = Math.max(0, distance - deadZone);\n        const progress = Math.min(1, adjustedDistance / viewportCenterY);\n        const easedProgress = progress * progress; // smooth the transition\n        const scale = 1 - easedProgress * 0.3;\n\n        cardEl.style.transform = `scale(${scale})`;\n      }\n    };\n\n    const onScroll = () => {\n      if (!ticking.current) {\n        window.requestAnimationFrame(() => {\n          animateScales();\n          ticking.current = false;\n        });\n        ticking.current = true;\n      }\n    };\n\n    const observerCallback = (entries: IntersectionObserverEntry[]) => {\n      for (const entry of entries) {\n        const targetEl = entry.target as HTMLDivElement;\n        const targetIndex = cardElements.indexOf(targetEl);\n\n        if (targetIndex === -1) return;\n\n        if (entry.isIntersecting) {\n          visibleCardIndices.current.add(targetIndex);\n        } else {\n          visibleCardIndices.current.delete(targetIndex);\n        }\n      }\n    };\n\n    const observer = new IntersectionObserver(observerCallback, {\n      rootMargin: '20px',\n      threshold: 0,\n    });\n\n    for (const element of cardElements) {\n      if (element) {\n        observer.observe(element);\n      }\n    }\n\n    const debouncedAnimateScales = debounce(animateScales, 200, { trailing: true });\n\n    window.addEventListener('scroll', onScroll, { passive: true });\n    window.addEventListener('resize', debouncedAnimateScales);\n    animateScales();\n\n    return () => {\n      window.removeEventListener('scroll', onScroll);\n      window.removeEventListener('resize', debouncedAnimateScales);\n      observer.disconnect();\n      visibleCardIndices.current.clear();\n    };\n  }, [elementRefs, childCount, isEnabled]);\n};\n", "import { css } from '@emotion/css';\n\nimport { m } from '../../motif/m';\n\nexport const latestPostItemWrapperCss = css`\n  width: 100%;\n  margin-top: ${m('--spacing-xs')};\n  padding: 0 0 ${m('--spacing-m')};\n`;\n\nexport const latestPostItemTitleCss = css`\n  font-size: 2rem;\n  font-weight: 600;\n  line-height: 2.5rem;\n  margin-bottom: 0;\n\n  :hover {\n    text-decoration: underline;\n  }\n\n  a {\n    /* TODO: See if this should be hyperlink color or its own */\n    color: ${m('--fg-color')};\n    text-decoration: none;\n  }\n`;\n", "import type { FC } from 'react';\n\nimport { Alignment } from '../../constants';\nimport { AuthorByline } from '../AuthorByline';\nimport { Block } from '../Block';\nimport { Category } from '../Category';\nimport { Content } from '../Content';\nimport { latestPostItemTitleCss, latestPostItemWrapperCss } from './styles';\nimport type { LatestPostsProps } from './types';\n\nexport const LatestPosts: FC<LatestPostsProps> = ({\n  anchorId,\n  title,\n  items,\n  cta,\n  motifScheme,\n  backgroundColor,\n  scrollSnap,\n  className,\n  preChildren,\n  postChildren,\n}) => {\n  const latestPostsBody = (\n    <>\n      {items.map((item, index) => (\n        <article data-testid=\"latest-post-item\" className={latestPostItemWrapperCss} key={index}>\n          {item.category && <Category title={item.category} />}\n          <div className={latestPostItemTitleCss}>{item.title}</div>\n          {(item.author || item.date) && <AuthorByline author={item.author} date={item.date} />}\n          <hr />\n        </article>\n      ))}\n    </>\n  );\n\n  return (\n    <Block\n      title={title}\n      titleAlignment={Alignment.Center}\n      anchorId={anchorId}\n      className={className}\n      fullHeight={scrollSnap}\n      motifScheme={motifScheme}\n      backgroundColor={backgroundColor}\n      maxColumns={1}\n      preChildren={preChildren}\n      postChildren={postChildren}\n    >\n      <Content body={latestPostsBody} callsToAction={cta ? [cta] : undefined} />\n    </Block>\n  );\n};\n", "import { css, cx } from '@emotion/css';\n\nimport { ZIndex } from '../../constants';\nimport { m, MotifComponent, useMotifStyles } from '../../motif';\n\nexport const keyframesAnimationCss = css`\n  @keyframes loader-animation {\n    0% {\n      left: -60%;\n    }\n    50% {\n      left: 60%;\n    }\n    100% {\n      left: -60%;\n    }\n  }\n`;\n\nexport const loadingBarContainerCss = css`\n  position: absolute;\n  height: 3.75px;\n  width: 100%;\n  overflow: hidden;\n`;\n\nexport const barCss = css`\n  position: relative;\n  height: 5px;\n  z-index: ${ZIndex.LOADING_BAR};\n  width: 75%;\n  margin: 0;\n  background: linear-gradient(\n    90deg,\n    transparent 0%,\n    ${m('--loading-bar-left-color')} 14%,\n    ${m('--loading-bar-right-color')} 86%,\n    transparent 100%\n  );\n\n  animation-name: loader-animation;\n  animation-duration: 2s;\n  animation-iteration-count: infinite;\n  animation-timing-function: ease-in-out;\n`;\n\n/** Creates the Loading Bar component */\nexport const LoadingBar: React.FC<{ className?: string }> = ({ className }) => {\n  useMotifStyles(MotifComponent.LOADING_BAR);\n\n  return (\n    <div\n      className={cx(\n        MotifComponent.LOADING_BAR,\n        loadingBarContainerCss,\n        keyframesAnimationCss,\n        className\n      )}\n    >\n      <hr className={barCss} />\n    </div>\n  );\n};\n", "import { css, cx } from '@emotion/css';\nimport type { FC, ReactNode } from 'react';\nimport { useContext } from 'react';\n\nimport { mobileMediaQuery } from '../../constants';\nimport { actionCss } from '../../motif';\nimport { m } from '../../motif/m';\nimport type { ImageSources } from '../../types';\nimport type { OnActivateHandler } from '../../types/activationEvents';\nimport { globalHeaderHeight } from '../GlobalHeader/GlobalHeader.constants';\nimport { Picture } from '../Picture';\nimport { PrimitivesContext } from '../Primitives';\nimport { GhostSvg } from './Logo.Ghost';\nimport { SnapIncLogoSvg } from './Logo.SnapInc';\n\nconst rootCss = css`\n  text-decoration: none;\n  display: flex;\n  padding-top: 0;\n  padding-bottom: 0;\n  cursor: pointer;\n`;\n\nconst customLogoCss = css`\n  max-width: 100%;\n  /* Prevents large logo images from exceeding header height */\n  max-height: calc(${globalHeaderHeight}px - ${m('--spacing-m')});\n\n  ${mobileMediaQuery} {\n    max-width: 100%;\n  }\n  display: block;\n`;\n\nconst labelCss = css`\n  margin-left: ${m('--spacing-m')};\n\n  *[dir='rtl'] & {\n    margin-right: ${m('--spacing-m')};\n    margin-left: 0;\n  }\n\n  ${actionCss}\n`;\n\ntype LogoType = 'Ghost' | 'SnapInc';\n\nexport interface LogoProps {\n  label?: ReactNode;\n  /** @deprecated Use imgSrcs in favor of imageSource to utilize next gen image formats */\n  imageSource?: string;\n  /** @deprecated Background color is no longer used. */\n  backgroundColor?: string;\n  url?: string;\n  onClick?: OnActivateHandler;\n  isSelected?: boolean;\n  className?: string;\n  innerLogoClassName?: string;\n  imgSrcs?: ImageSources;\n  logoType?: LogoType;\n  openInNewTab?: boolean;\n  ariaLabel?: string;\n}\n\nexport const Logo: FC<LogoProps> = ({\n  imgSrcs,\n  imageSource,\n  label,\n  url = '/',\n  onClick,\n  innerLogoClassName,\n  className,\n  openInNewTab,\n  logoType = 'Ghost',\n  ariaLabel,\n}) => {\n  const { Anchor } = useContext(PrimitivesContext);\n\n  let logo: ReactNode;\n\n  if (imgSrcs) {\n    logo = <Picture altText=\"logo\" imgClassName={customLogoCss} imgSrcs={imgSrcs} />;\n  } else if (imageSource) {\n    logo = <Picture altText=\"logo\" imgClassName={customLogoCss} defaultSrc={imageSource} />;\n  } else if (logoType === 'SnapInc') {\n    logo = <SnapIncLogoSvg className={innerLogoClassName} />;\n  } else {\n    logo = <GhostSvg className={innerLogoClassName} width={32} height={32} />;\n  }\n\n  return (\n    <Anchor\n      href={url}\n      onClick={onClick}\n      className={cx(className, rootCss)}\n      aria-label={ariaLabel}\n      {...(openInNewTab ? { target: '_blank', rel: 'noopener' } : {})}\n    >\n      {logo}\n      {label && <span className={labelCss}>{label}</span>}\n    </Anchor>\n  );\n};\n\nLogo.displayName = 'Logo';\n", "import { css } from '@emotion/css';\n\nimport { m } from '../../motif/m';\n\nexport const ghostOutlineCss = css`\n  fill: ${m('--logo-stroke-color')};\n`;\n\nexport const ghostCss = css`\n  fill: ${m('--logo-fill-color')};\n`;\n\nexport const snapLogoCss = css`\n  fill: ${m('--logo-stroke-color')};\n  fill-rule: evenodd;\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { ghostCss, ghostOutlineCss } from './Logo.styles';\n\nexport interface GhostProps {\n  className?: string;\n  width: number;\n  height: number;\n  /** @deprecated Background color is no longer used. */\n  backgroundColor?: string;\n}\n\nexport const GhostSvg: FC<GhostProps> = ({ className, width, height }) => {\n  useMotifStyles(MotifComponent.LOGO);\n\n  return (\n    <svg\n      version=\"1.1\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      x=\"0px\"\n      y=\"0px\"\n      viewBox=\"0 0 500 500\"\n      className={cx(MotifComponent.LOGO, className)}\n      width={width}\n      height={height}\n    >\n      <g id=\"Layer_1\">\n        <g>\n          <g>\n            <path\n              className={ghostCss}\n              d=\"M484.6,369.3c-2-6.8-11.9-11.6-11.9-11.6l0,0c-0.9-0.5-1.7-0.9-2.4-1.3c-16.4-7.9-30.8-17.4-43.1-28.2\n\t\t\t\tc-9.8-8.7-18.2-18.2-25-28.4c-8.2-12.4-12.1-22.8-13.8-28.4c-0.9-3.7-0.8-5.1,0-7c0.6-1.6,2.5-3.1,3.4-3.8\n\t\t\t\tc5.5-3.9,14.4-9.7,19.9-13.2c4.7-3.1,8.8-5.7,11.2-7.4c7.7-5.4,12.9-10.8,16-16.7c4-7.6,4.5-16,1.4-24.3\n\t\t\t\tc-4.2-11.1-14.6-17.8-27.8-17.8c-2.9,0-6,0.3-9,1c-7.6,1.6-14.8,4.3-20.8,6.7c-0.4,0.2-0.9-0.2-0.9-0.6\n\t\t\t\tc0.6-14.9,1.3-34.9-0.3-53.9c-1.5-17.2-5-31.7-10.8-44.3c-5.8-12.7-13.4-22.1-19.3-28.9c-5.7-6.5-15.5-16-30.5-24.5\n\t\t\t\tc-21-12-45-18.1-71.1-18.1c-26.1,0-50,6.1-71.1,18.1c-15.8,9-25.9,19.2-30.5,24.5c-5.9,6.8-13.5,16.2-19.3,28.9\n\t\t\t\tc-5.8,12.6-9.3,27.1-10.8,44.3c-1.6,19.1-1,37.5-0.3,53.9c0,0.5-0.5,0.8-0.9,0.6c-6-2.3-13.2-5-20.7-6.7c-3-0.7-6-1-9-1\n\t\t\t\tc-13.2,0-23.6,6.7-27.8,17.8c-3.1,8.3-2.7,16.7,1.4,24.3c3.1,5.9,8.4,11.4,16,16.7c2.4,1.7,6.4,4.3,11.2,7.4\n\t\t\t\tc5.3,3.5,14,9.1,19.5,13c0.7,0.5,3,2.3,3.8,4.1c0.8,2,0.9,3.4-0.1,7.3c-1.7,5.7-5.6,15.9-13.7,28.1c-6.8,10.2-15.2,19.7-25,28.4\n\t\t\t\tC60.5,339,46,348.5,29.7,356.5c-0.8,0.4-1.7,0.8-2.7,1.4l0,0c0,0-9.8,5-11.6,11.4c-2.7,9.5,4.5,18.4,11.9,23.2\n\t\t\t\tc12.1,7.8,26.9,12,35.4,14.3c2.4,0.6,4.5,1.2,6.5,1.8c1.2,0.4,4.3,1.6,5.6,3.3c1.7,2.1,1.9,4.8,2.5,7.8v0c0.9,5,3,11.2,9.2,15.5\n\t\t\t\tc6.8,4.7,15.5,5,26.4,5.5c11.5,0.4,25.8,1,42.1,6.4c7.6,2.5,14.4,6.7,22.4,11.6c16.6,10.2,37.2,22.9,72.5,22.9\n\t\t\t\tc35.3,0,56.1-12.8,72.8-23c7.9-4.8,14.7-9,22.1-11.5c16.3-5.4,30.6-5.9,42.1-6.4c11-0.4,19.6-0.7,26.4-5.5\n\t\t\t\tc6.6-4.6,8.6-11.4,9.4-16.6c0.5-2.5,0.8-4.8,2.3-6.7c1.2-1.6,4.1-2.7,5.4-3.2c2-0.6,4.2-1.2,6.7-1.9c8.6-2.3,19.3-5,32.3-12.4\n\t\t\t\tC485.2,385.6,486.3,374.7,484.6,369.3z\"\n            />\n          </g>\n          <path\n            className={ghostOutlineCss}\n            d=\"M498.2,364c-3.5-9.5-10.1-14.5-17.6-18.7c-1.4-0.8-2.7-1.5-3.8-2c-2.2-1.2-4.5-2.3-6.8-3.5\n\t\t\tc-23.5-12.5-41.8-28.2-54.6-46.8c-4.3-6.3-7.3-12-9.4-16.6c-1.1-3.1-1-4.9-0.3-6.5c0.6-1.2,2.2-2.5,3-3.1c4-2.7,8.2-5.4,11-7.2\n\t\t\tc5-3.3,9-5.8,11.6-7.6c9.6-6.7,16.4-13.9,20.6-21.9c5.9-11.3,6.7-24.2,2.1-36.3c-6.4-16.8-22.3-27.3-41.5-27.3\n\t\t\tc-4,0-8,0.4-12.1,1.3c-1.1,0.2-2.1,0.5-3.1,0.7c0.2-11.4-0.1-23.6-1.1-35.6c-3.6-42-18.3-64-33.7-81.6c-6.4-7.3-17.5-18-34.2-27.6\n\t\t\tC305.1,10.6,278.8,3.9,250,3.9c-28.7,0-55,6.7-78.3,20c-16.8,9.6-27.9,20.3-34.3,27.6c-15.3,17.5-30,39.6-33.7,81.6\n\t\t\tc-1,11.9-1.3,24.1-1.1,35.6c-1-0.3-2.1-0.5-3.1-0.7c-4-0.9-8.1-1.3-12.1-1.3c-19.3,0-35.2,10.4-41.5,27.3\n\t\t\tc-4.6,12.1-3.8,25,2.1,36.3c4.2,8,11,15.2,20.6,21.9c2.6,1.8,6.6,4.4,11.6,7.6c2.7,1.8,6.7,4.3,10.6,6.9c0.6,0.4,2.7,1.9,3.4,3.4\n\t\t\tc0.8,1.7,0.8,3.5-0.4,6.8c-2.1,4.6-5,10.1-9.2,16.3c-12.4,18.2-30.3,33.6-53,46c-12,6.4-24.6,10.6-29.9,25\n\t\t\tc-4,10.9-1.4,23.2,8.8,33.6l0,0c3.3,3.6,7.5,6.8,12.8,9.7c12.4,6.9,23,10.2,31.3,12.5c1.5,0.4,4.8,1.5,6.3,2.8\n\t\t\tc3.7,3.2,3.2,8.1,8.1,15.2c3,4.4,6.4,7.4,9.2,9.4c10.3,7.1,21.9,7.6,34.2,8c11.1,0.4,23.7,0.9,38.1,5.7c6,2,12.1,5.8,19.3,10.2\n\t\t\tc17.2,10.6,40.8,25,80.2,25c39.4,0,63.1-14.5,80.5-25.2c7.1-4.4,13.3-8.1,19-10c14.4-4.7,27-5.2,38.1-5.7\n\t\t\tc12.3-0.5,23.9-0.9,34.2-8c3.2-2.2,7.3-5.9,10.5-11.5c3.5-6,3.4-10.2,6.8-13.2c1.4-1.2,4.3-2.2,5.9-2.7\n\t\t\tc8.4-2.3,19.1-5.7,31.7-12.6c5.6-3.1,10-6.5,13.4-10.3c0,0,0.1-0.1,0.1-0.1C499.7,386.6,502.1,374.6,498.2,364z M463.2,382.8\n\t\t\tc-21.4,11.8-35.6,10.5-46.6,17.7c-9.4,6-3.8,19.1-10.7,23.8c-8.4,5.8-33.2-0.4-65.1,10.2c-26.4,8.7-43.2,33.8-90.7,33.8\n\t\t\tc-47.6,0-64-25-90.7-33.8c-32-10.6-56.8-4.4-65.1-10.2c-6.8-4.7-1.3-17.7-10.7-23.8c-11-7.1-25.3-5.9-46.6-17.7\n\t\t\tc-13.6-7.5-5.9-12.2-1.4-14.4c77.4-37.5,89.8-95.4,90.3-99.7c0.7-5.2,1.4-9.3-4.3-14.6c-5.5-5.1-30.1-20.3-36.9-25\n\t\t\tc-11.3-7.9-16.2-15.7-12.6-25.4c2.5-6.7,8.8-9.2,15.4-9.2c2,0,4.1,0.2,6.1,0.7c12.4,2.7,24.4,8.9,31.3,10.6c1,0.2,1.8,0.3,2.6,0.3\n\t\t\tc3.7,0,5-1.9,4.8-6.1c-0.8-13.5-2.7-39.9-0.6-64.5c2.9-33.9,13.9-50.7,26.9-65.6c6.2-7.1,35.5-38.1,91.6-38.1\n\t\t\tc56.2,0,85.3,30.9,91.6,38.1c13,14.9,23.9,31.7,26.9,65.6c2.1,24.6,0.3,51-0.6,64.5c-0.3,4.5,1.1,6.1,4.8,6.1\n\t\t\tc0.8,0,1.6-0.1,2.6-0.3c6.9-1.7,19-7.9,31.3-10.6c2-0.4,4.1-0.7,6.1-0.7c6.6,0,12.8,2.5,15.4,9.2c3.7,9.7-1.3,17.5-12.6,25.4\n\t\t\tc-6.8,4.7-31.3,19.9-36.9,25c-5.7,5.3-5,9.4-4.3,14.6c0.6,4.4,12.9,62.2,90.3,99.7C469.1,370.6,476.8,375.3,463.2,382.8z\"\n          />\n        </g>\n      </g>\n    </svg>\n  );\n};\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport type { BaseComponentProps } from '../../types';\nimport { snapLogoCss } from './Logo.styles';\n\ninterface SnapIncLogoProps extends BaseComponentProps {}\n\nexport const SnapIncLogoSvg: FC<SnapIncLogoProps> = ({ className }) => {\n  useMotifStyles(MotifComponent.LOGO);\n\n  return (\n    <svg\n      className={cx(MotifComponent.LOGO, className, snapLogoCss)}\n      width=\"89\"\n      height=\"22\"\n      viewBox=\"0 0 89 22\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <g>\n        {/* eslint-disable-next-line max-len */}\n        <path d=\"M.261 15.794C.247 14.39.126 12.767.003 11.526a.513.513 0 0 1 .433-.559l.02-.003a.518.518 0 0 1 .58.38 5.99 5.99 0 0 0 .742 1.767c.308.484 1.386 2.155 3.65 2.155 1.65 0 2.86-1.166 2.86-2.64 0-1.362-1.1-1.912-3.255-2.726-.637-.264-1.297-.505-1.935-.791C2.218 8.69.15 7.723.15 5.039.15 2.05 2.548.29 5.605.29c.742 0 1.798.104 2.856.59.234.107.51.024.648-.192l.175-.276a.515.515 0 0 1 .422-.24.519.519 0 0 1 .53.48 55.8 55.8 0 0 0 .418 3.743.518.518 0 1 1-.994.255c-.276-.729-.432-1.07-.735-1.524-.725-.989-1.693-1.67-2.902-1.67-1.562 0-2.485 1.274-2.485 2.308 0 1.187 1.055 1.693 1.517 1.913.946.462 1.935.77 2.925 1.166 1.583.616 3.76 1.562 3.76 4.465 0 2.858-2.287 5.255-5.915 5.255-1.803 0-2.978-.57-3.66-1.003a.514.514 0 0 0-.714.17l-.195.322a.518.518 0 0 1-.402.246l-.037.003a.514.514 0 0 1-.556-.507M12.223 15.668c0-.219.157-.405.371-.441.332-.055.734-.198.795-.62.066-.507.066-1.826.066-2.156 0-.77-.022-2.023-.022-2.793 0-1.104-.37-1.407-.89-1.554a.445.445 0 0 1-.32-.429v-.052c0-.219.158-.403.373-.44 1.095-.192 2.751-.66 3.62-.96a.446.446 0 0 1 .57.283c.018.058.035.113.05.17a.447.447 0 0 0 .66.26c.83-.482 1.617-.84 2.776-.84.836 0 1.672.22 2.354.703 1.071.744 1.25 1.88 1.34 3.083v1.931c0 .33-.043 2.045-.043 2.42 0 .556.151.895.878 1.03a.442.442 0 0 1 .353.439.446.446 0 0 1-.475.446c-.623-.042-1.564-.069-3.11-.069-.872 0-1.353.024-1.8.063a.447.447 0 0 1-.487-.445v-.094c0-.201.135-.379.33-.43.643-.174.723-.481.704-1.82l-.044-3.431c-.022-1.055-.066-2.265-1.496-2.265-.595 0-1.056.218-1.5.553a.451.451 0 0 0-.184.374c.035 1.102.035 4.23.035 5.208 0 1.009.175 1.288.712 1.43.192.05.322.23.322.429v.058a.447.447 0 0 1-.475.447c-.747-.047-1.707-.077-3.506-.077-.692 0-1.094.022-1.469.058a.446.446 0 0 1-.488-.446v-.023zM31.379 12.006a.447.447 0 0 0-.56-.43c-.742.188-1.727.621-1.727 1.777 0 .594.308 1.253 1.144 1.253.426 0 .68-.129.947-.305a.444.444 0 0 0 .196-.37v-1.925zm5.082 2.544a.447.447 0 0 1 .041.66c-1.057 1.07-2.105 1.288-2.682 1.288a2.85 2.85 0 0 1-1.649-.55 2.385 2.385 0 0 1-.408-.42.44.44 0 0 0-.594-.102c-.605.393-1.854 1.093-3.242 1.093-2.024 0-2.507-1.363-2.507-2.176 0-2.513 3.867-3.564 5.618-3.878a.444.444 0 0 0 .364-.436c.002-.68.003-1.48-.089-1.756-.264-.77-1.143-.77-1.253-.77-.726 0-1.122.44-1.254.924-.066.286-.066.594-.132.88-.176.747-.792 1.033-1.341 1.033-.682 0-1.32-.44-1.32-1.253 0-1.628 3.013-2.948 5.74-2.948 1.891 0 3.276.616 3.276 2.442l-.043 4.904c-.022.374-.045 1.23.527 1.23.142 0 .276-.074.402-.172a.443.443 0 0 1 .546.007z\" />\n        {/* eslint-disable-next-line max-len */}\n        <path d=\"M42.65 15.002c1.627 0 2.22-2.265 2.22-3.76 0-1.584-.66-3.695-2.286-3.695-1.474 0-1.474 1.518-1.474 1.979 0 .506.023 2.969.023 3.519 0 .704 0 1.957 1.517 1.957zM37.482 9.79c.04-1.68-.2-2.076-.95-2.283a.425.425 0 0 1-.304-.412v-.11a.42.42 0 0 1 .372-.419c1.485-.159 3.056-.564 3.829-.774a.417.417 0 0 1 .52.32c.023.102.046.227.074.384a.421.421 0 0 0 .636.288c.863-.553 1.714-.842 2.794-.842 2.661 0 4.31 2.287 4.31 4.706 0 3.32-2.353 5.63-5.101 5.63-.843 0-1.457-.215-1.882-.444a.422.422 0 0 0-.625.368v2.538c0 .851.052 1.507.962 1.661a.416.416 0 0 1 .335.414.422.422 0 0 1-.432.422 150.558 150.558 0 0 0-3.262-.055c-.827 0-1.362.015-2.066.045a.422.422 0 0 1-.442-.42v-.055c0-.204.142-.387.344-.421.818-.14.888-.59.888-1.217.022-.418.022-1.715.022-2.199l-.022-7.125zM60.272 16.146c-.893-.066-1.477-.066-3.816-.066-1.28 0-1.791.015-2.54.068a.502.502 0 0 1-.11-.996c1.233-.173 1.286-.618 1.286-3.405V4.754c-.022-1.671-.043-2.177-.198-2.485-.166-.39-.427-.482-1.099-.594a.5.5 0 0 1-.418-.493c0-.308.232-.533.514-.525 1.236.033 2.473.05 3.708.05 1.24 0 2.035-.027 2.717-.05a.5.5 0 0 1 .082.997c-1.303.163-1.303.558-1.303 3.474l.022 6.817c.044 2.31.066 2.442.33 2.793.188.222.483.339.935.4a.5.5 0 0 1 .428.495.504.504 0 0 1-.538.513zM60.97 15.668c0-.219.157-.405.371-.441.332-.055.734-.198.795-.62.066-.507.066-1.826.066-2.156 0-.77-.022-2.023-.022-2.793 0-1.104-.37-1.407-.89-1.554a.445.445 0 0 1-.32-.429v-.052c0-.219.157-.403.373-.44 1.095-.192 2.75-.66 3.62-.96a.446.446 0 0 1 .57.283c.018.058.035.113.05.17a.447.447 0 0 0 .659.26c.83-.482 1.617-.84 2.777-.84.835 0 1.671.22 2.353.703 1.072.744 1.252 1.88 1.34 3.083.002.012.002.024.002.036v1.895c0 .33-.044 2.045-.044 2.42 0 .556.15.895.878 1.03a.442.442 0 0 1 .353.439.446.446 0 0 1-.476.446c-.622-.042-1.564-.069-3.109-.069-.873 0-1.353.024-1.8.063a.447.447 0 0 1-.487-.445v-.094c0-.201.135-.379.33-.43.643-.174.723-.481.704-1.82l-.044-3.431c-.023-1.055-.066-2.265-1.496-2.265-.595 0-1.057.218-1.501.553a.451.451 0 0 0-.183.374c.035 1.102.035 4.23.035 5.208 0 1.009.174 1.288.712 1.43.192.05.322.23.322.429v.058a.447.447 0 0 1-.475.447c-.747-.047-1.707-.077-3.506-.077-.692 0-1.094.022-1.469.058a.446.446 0 0 1-.488-.446v-.023zM83.847 13.754c.276.2.314.604.072.844a6.543 6.543 0 0 1-4.557 1.9c-3.145 0-5.454-2.178-5.454-5.169 0-3.144 2.683-5.167 5.96-5.167 2.155 0 4.2.945 4.2 2.529 0 .747-.637 1.385-1.385 1.385-.33 0-.726-.154-.968-.396-.198-.176-.242-.286-.66-1.231-.198-.418-.638-1.166-1.319-1.166-1.276 0-1.628 2.177-1.628 3.255 0 2.485 1.408 4.156 2.947 4.156.818 0 1.495-.376 2.096-.904a.558.558 0 0 1 .696-.036M86.884 12.539c1.078 0 2 .858 2 2.001 0 1.122-.922 1.98-1.978 1.98a1.96 1.96 0 0 1-1.98-1.936c0-1.363 1.056-2.045 1.958-2.045\" />\n      </g>\n    </svg>\n  );\n};\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport { useCallback, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { VerticalAlignment } from '../../constants';\nimport { useIsMobile } from '../../hooks';\nimport { useDisableScrollOutside } from '../../hooks/useDisableBodyScroll';\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { dataSetToAttributes } from '../../utils';\nimport { IconButton } from '../IconButton';\nimport { IconButtonSize } from '../IconButton/IconButton.types';\nimport {\n  alignmentCss,\n  closeButtonCss,\n  isBlockingClassName,\n  modalBackdropCss,\n  modalContentCss,\n} from './styles';\nimport type { ModalProps } from './types';\n\n/**\n * Component that displays an element over an overlay.\n *\n * There is a close button that renders for blocking modals.\n *\n * Note that there's no border UI or anything like that. That's up to the children prop.\n */\nexport const Modal: FC<ModalProps> = ({\n  className,\n  contentClassName,\n  isBlocking = false,\n  verticalAlignment = VerticalAlignment.Middle,\n  onClose,\n  isDisplayed = false,\n  portalRoot,\n  style,\n  dataset,\n  children,\n  disableBackgroundScroll,\n  shouldAllowScrollEvent,\n}) => {\n  useMotifStyles(MotifComponent.MODAL);\n\n  // Using useState and useCallback to call `useDisableScrollOutside` after initial load\n  const [modalRef, setModalRef] = useState<HTMLElement | null>(null);\n  const isMobile = useIsMobile();\n  const captureModalRef = useCallback(\n    (node: HTMLElement | null) => setModalRef(node),\n    [setModalRef]\n  );\n\n  useDisableScrollOutside(\n    isBlocking || disableBackgroundScroll ? modalRef : null,\n    undefined,\n    shouldAllowScrollEvent\n  );\n\n  const modal = (\n    <section\n      className={cx(\n        MotifComponent.MODAL,\n        modalBackdropCss,\n        {\n          [isBlockingClassName]: isBlocking,\n        },\n        className\n      )}\n      style={style}\n      {...dataSetToAttributes(dataset)}\n    >\n      <div\n        className={cx(\n          modalContentCss,\n          'sdsm-modal-content',\n          alignmentCss[verticalAlignment],\n          contentClassName\n        )}\n        ref={captureModalRef}\n      >\n        {children}\n        {!isBlocking && (\n          <IconButton\n            size={isMobile ? IconButtonSize.MEDIUM : IconButtonSize.LARGE}\n            className={closeButtonCss}\n            iconName=\"cross\"\n            onClick={onClose}\n          />\n        )}\n      </div>\n    </section>\n  );\n\n  if (!portalRoot) {\n    return isDisplayed ? modal : null;\n  }\n\n  return isDisplayed ? createPortal(modal, portalRoot) : null;\n};\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, VerticalAlignment } from '../../constants';\nimport { ZIndex } from '../../constants/zIndex';\nimport { m } from '../../motif/m';\n\nexport const alignmentCss: Record<VerticalAlignment, string> = {\n  [VerticalAlignment.Top]: css`\n    left: 50%;\n    top: 0;\n    transform: translateX(-50%);\n  `,\n  [VerticalAlignment.Bottom]: css`\n    left: 50%;\n    bottom: 0;\n    transform: translateX(-50%);\n  `,\n  [VerticalAlignment.Middle]: css`\n    left: 50%;\n    top: 50%;\n    transform: translate(-50%, -50%);\n  `,\n};\n\nexport const modalBackdropCss = css`\n  position: fixed;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  box-shadow: none;\n  z-index: ${ZIndex.MODAL};\n  overflow: hidden;\n  background: ${m('--modal-bg-color')};\n  backdrop-filter: blur(4px);\n\n  /* ==========================================================================================================\n  Specific fix to address errant behavior in Safari browser when in fullscreen mode.\n    Bug Behavior: certain CSS transforms (like blur) will cause the browser to stop honoring z-index values.\n      Since this style is only applied when in full-screen mode, there should be no issues with\n      removing the background blur since it should be hidden by the fullscreen content.\n    Use Case: Rendering a Video player inside of the SDS-M Modal component.\n  ========================================================================================================== */\n  :-webkit-full-screen-ancestor:not(iframe) {\n    /* NOTE: Safari needs the prefix. See https://caniuse.com/css-backdrop-filter */\n    /* stylelint-disable-next-line property-no-vendor-prefix */\n    -webkit-backdrop-filter: unset;\n  }\n`;\n\nexport const modalContentCss = css`\n  position: fixed;\n`;\n\nexport const isBlockingClassName = 'sdsm-modal-blocking';\n\nexport const closeButtonCss = css`\n  --close-button-size: 40px;\n\n  ${mobileMediaQuery} {\n    right: 0;\n    --close-button-size: 32px;\n  }\n\n  /* Render over video content. */\n  z-index: ${ZIndex.MODAL + 1};\n\n  *[dir='rtl'] {\n    left: -80px;\n  }\n\n  position: absolute;\n  right: calc(0px - calc(var(--close-button-size) + ${m('--spacing-s')}));\n  top: calc(0px - calc(var(--close-button-size) + ${m('--spacing-s')}));\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport type React from 'react';\nimport { memo, useCallback, useMemo, useRef, useState } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { MosaicFilters } from './MosaicFilters';\nimport { MosaicLightBox } from './MosaicLightBox';\nimport { MosaicTile } from './MosaicTile';\nimport { containerCss, tileCss } from './styles';\nimport type { MosaicProps } from './types';\n\n/** A component that lays out videos onto a grid. */\nexport const Mosaic: FC<MosaicProps> = memo(\n  ({ tiles, columns, mobileColumns, filters, className, lightboxClassName }) => {\n    useMotifStyles(MotifComponent.MOSAIC);\n\n    const [currentTile, setCurrentTile] = useState<number>();\n    const [currentFilter, setCurrentFilter] = useState<string>('');\n    const [isRTL, setIsRTL] = useState(false);\n    const containerRef = useCallback((node: HTMLDivElement) => {\n      setIsRTL(!!node?.closest('[dir=\"rtl\"]'));\n    }, []);\n\n    const tileRefs = useRef<Array<HTMLDivElement | null>>([]);\n\n    const goNext = useCallback(() => {\n      if (currentTile === undefined) {\n        return;\n      }\n      const next = (currentTile + 1) % tiles.length;\n      setCurrentTile(next);\n    }, [currentTile, tiles.length]);\n    const goPrevious = useCallback(() => {\n      if (currentTile === undefined) {\n        return;\n      }\n      const previous = (currentTile - 1 + tiles.length) % tiles.length;\n      setCurrentTile(previous);\n    }, [currentTile, tiles.length]);\n\n    const close = () => {\n      setCurrentTile(undefined);\n    };\n\n    const handleKeyPress = useCallback(\n      (idx?: number) => (event: React.KeyboardEvent) => {\n        if (idx === undefined) {\n          return;\n        }\n\n        if (event.key === (isRTL ? 'ArrowLeft' : 'ArrowRight')) {\n          const next = (idx + 1) % tiles.length;\n\n          if (currentTile !== undefined) {\n            setCurrentTile(next);\n          }\n          tileRefs.current[next]?.focus();\n        }\n\n        if (event.key === (isRTL ? 'ArrowRight' : 'ArrowLeft')) {\n          const previous = (idx - 1 + tiles.length) % tiles.length;\n\n          if (currentTile !== undefined) {\n            setCurrentTile(previous);\n          }\n          tileRefs.current[previous]?.focus();\n        }\n\n        if (event.key === 'Enter' && currentTile === undefined) {\n          setCurrentTile(idx);\n        }\n\n        if (event.key === 'Escape' && currentTile !== undefined) {\n          setCurrentTile(undefined);\n        }\n      },\n      [currentTile, isRTL, tiles.length]\n    );\n\n    const filteredTiles = useMemo(() => {\n      if (!currentFilter) {\n        return tiles;\n      }\n\n      return tiles.filter(t => t.filters?.includes(currentFilter));\n    }, [currentFilter, tiles]);\n\n    return (\n      <div className={cx(MotifComponent.MOSAIC, className)}>\n        <MosaicLightBox\n          className={lightboxClassName}\n          tile={currentTile !== undefined ? tiles[currentTile] : undefined}\n          handleKeyPress={handleKeyPress(currentTile)}\n          goNext={goNext}\n          goPrevious={goPrevious}\n          close={close}\n        />\n        {filters?.length ? (\n          <MosaicFilters\n            filters={filters}\n            onSelectFilter={setCurrentFilter}\n            currentFilter={currentFilter}\n          />\n        ) : undefined}\n        <div\n          ref={containerRef}\n          className={cx(containerCss(columns, mobileColumns))}\n          data-active={currentTile !== undefined}\n        >\n          {filteredTiles.map((tile, i) => (\n            <div\n              className={cx(tileCss(tile.rows, tile.columns, tile.mobileRows, tile.mobileColumns))}\n              aria-pressed={currentTile === i}\n              role=\"button\"\n              tabIndex={0}\n              onClick={() => setCurrentTile(i)}\n              onKeyDown={handleKeyPress(i)}\n              key={`${i}-${tile.poster?.src}`}\n              ref={el => {\n                tileRefs.current[i] = el;\n              }}\n            >\n              <MosaicTile {...tile} />\n            </div>\n          ))}\n        </div>\n      </div>\n    );\n  }\n);\n\nMosaic.displayName = 'Mosaic';\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport type React from 'react';\nimport { memo, useCallback } from 'react';\n\nimport { ToggleButton } from '../ToggleButton';\nimport { filtersCss } from './styles';\nimport type { MosaicFiltersProps } from './types';\n\nexport const MosaicFilters: FC<MosaicFiltersProps> = memo(\n  ({ filters, currentFilter, onSelectFilter }) => {\n    const handleClick = useCallback(\n      (filterId: string) => () => {\n        onSelectFilter(currentFilter === filterId ? '' : filterId);\n      },\n      [currentFilter, onSelectFilter]\n    );\n\n    const handleKeyPress = useCallback(\n      (filterId: string) => (event: React.KeyboardEvent) => {\n        if (event.key === 'Enter') {\n          onSelectFilter(currentFilter === filterId ? '' : filterId);\n        }\n\n        if (event.key === 'Escape') {\n          onSelectFilter('');\n        }\n      },\n      [currentFilter, onSelectFilter]\n    );\n\n    return (\n      <div className={cx(filtersCss)}>\n        {filters.map(({ id, icon, text }, i) => {\n          return (\n            <div\n              key={`${id}-${i}`}\n              aria-pressed={currentFilter === id}\n              onKeyPress={handleKeyPress(id)}\n              role=\"button\"\n              tabIndex={0}\n            >\n              {icon && (\n                <ToggleButton\n                  icon={icon}\n                  onClick={handleClick(id)}\n                  selected={currentFilter === id}\n                  id={id}\n                  index={i}\n                  text={text}\n                />\n              )}\n            </div>\n          );\n        })}\n      </div>\n    );\n  }\n);\n\nMosaicFilters.displayName = 'MosaicFilters';\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, mobilePageContainerQuery } from '../../constants';\nimport { ZIndex } from '../../constants/zIndex';\nimport { m } from '../../motif';\nimport { globalHeaderHeight } from '../GlobalHeader/GlobalHeader.constants';\n\nexport const filtersCss = css`\n  display: flex;\n  justify-content: center;\n  padding: ${m('--spacing-m')} 0;\n  margin-bottom: ${m('--spacing-xxxxl')};\n`;\n\nexport const containerCss = (columns?: number, mobileColumns?: number): string => css`\n  display: grid;\n  grid-auto-flow: dense;\n  transition: filter 0.2s;\n  grid-template-columns: repeat(${Math.max(1, columns ?? 4)}, 1fr);\n\n  ${mobileMediaQuery} {\n    grid-template-columns: repeat(${Math.max(1, mobileColumns ?? columns ?? 2)}, 1fr);\n    padding: 0 8px;\n  }\n\n  /*\n  We are keeping the media queries above in addition to the container queries below in case:\n  - this component is ever rendered without a wrapping SDS-M Page component\n  - the browser does not support container queries (smart TVs, etc.)\n  */\n  ${mobilePageContainerQuery} {\n    grid-template-columns: repeat(${Math.max(1, mobileColumns ?? columns ?? 2)}, 1fr);\n  }\n`;\n\nexport const wrapperCss = css`\n  position: relative;\n  border-radius: ${m('--border-radius-xl')};\n  overflow: hidden;\n  z-index: 0;\n\n  &:before {\n    content: '';\n    display: block;\n    height: 0;\n  }\n\n  @media (hover: hover) {\n    transition: box-shadow 0.2s;\n\n    div[data-poster] {\n      transition: opacity 0.2s;\n    }\n\n    &:hover {\n      box-shadow: ${m('--box-shadow-xl')};\n\n      div[data-poster] {\n        opacity: 0;\n      }\n    }\n  }\n`;\n\nexport const coveredTileCss = css`\n  min-height: 100%;\n`;\n\nexport const overlayCss = css`\n  position: absolute;\n  inset: 0;\n  z-index: 1;\n  display: flex;\n  align-content: center;\n  flex-direction: row;\n  align-items: flex-end;\n  justify-content: flex-start;\n  padding: ${m('--spacing-xl')};\n  font-size: 16px;\n\n  [data-playing='true'] > & {\n    opacity: 0;\n  }\n\n  [data-overlay='true'] > & {\n    background: linear-gradient(180deg, rgba(0, 0, 0, 0) 42.19%, rgba(0, 0, 0, 0.9) 100%);\n  }\n\n  [data-overlay='false'] > & {\n    font-weight: 700;\n    font-size: 24px;\n    line-height: 38px;\n  }\n\n  ${mobileMediaQuery} {\n    padding: ${m('--spacing-m')};\n  }\n`;\n\nexport const titleCss = css`\n  flex: 1 1 auto;\n  width: 100%;\n  color: ${m('--mosaic-title-color')};\n`;\n\nexport const highlightCss = css`\n  display: inline-block;\n  color: ${m('--mosaic-highlight-color')};\n  white-space: nowrap;\n\n  &:after {\n    /* NOTE: Emotion has a rule that there has to be a space at the end here. */\n    content: '\\\\00a0 ';\n  }\n`;\n\nexport const durationCss = css`\n  margin-inline-start: auto;\n  flex: 0 0 auto;\n  color: ${m('--mosaic-duration-color')};\n`;\n\nexport const videoCss = css`\n  position: absolute;\n  inset: 0;\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n`;\n\nexport const playButtonCss = css`\n  position: absolute;\n  inset: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n\n  [data-playing='true'] > & {\n    opacity: 0;\n  }\n`;\n\nexport const tileCss = (\n  rows?: number,\n  columns?: number,\n  mobileRows?: number,\n  mobileColumns?: number\n): string => css`\n  cursor: pointer;\n  position: relative;\n  padding: calc(${m('--mosaic-grid-gap')} / 2);\n  grid-row: span ${Math.max(1, rows ?? 1)};\n  grid-column: span ${Math.max(1, columns ?? 1)};\n\n  ${mobileMediaQuery} {\n    padding: ${m('--spacing-xs')};\n    grid-row: span ${Math.max(1, mobileRows ?? rows ?? 1)};\n    grid-column: span ${Math.max(1, mobileColumns ?? columns ?? 1)};\n  }\n\n  /*\n  We are keeping the media queries above in addition to the container queries below in case:\n  - this component is ever rendered without a wrapping SDS-M Page component\n  - the browser does not support container queries (smart TVs, etc.)\n  */\n  ${mobilePageContainerQuery} {\n    grid-row: span ${Math.max(1, mobileRows ?? rows ?? 1)};\n    grid-column: span ${Math.max(1, mobileColumns ?? columns ?? 1)};\n  }\n`;\n\nexport const posterCss = css`\n  position: absolute;\n  inset: 0;\n`;\n\nexport const posterImageCss = css`\n  position: absolute;\n  inset: 0;\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  transition: opacity 0.2s;\n`;\n\n// TODO: This CSS is pretty hacky. But for some reason neither flex nor\n// grid layout the <video> component without very specific boundaries.\n// We should revisit when someoen has a week to dig into this.\nexport const lightBoxContainerCss = css`\n  /* This is set such that the 40px close button fits in the middle. */\n  --lightbox-horizontal-padding: 80px;\n  --lightbox-vertical-padding: 80px;\n\n  ${mobileMediaQuery} {\n    --lightbox-horizontal-padding: 24px;\n    --lightbox-vertical-padding: 80px;\n  }\n\n  width: calc(100vw - calc(2 * var(--lightbox-horizontal-padding)));\n  width: calc(100dvw - calc(2 * var(--lightbox-horizontal-padding)));\n  height: calc(100vh - calc(2 * var(--lightbox-vertical-padding)));\n  height: calc(100dvh - calc(2 * var(--lightbox-vertical-padding)));\n`;\n\nexport const lightBoxCss = css`\n  height: calc(100% + var(--lightbox-vertical-padding));\n  display: grid;\n  grid-template-rows: calc(100% - 100px) auto;\n  align-items: center;\n\n  margin: 0;\n  margin-bottom: calc(0px - var(--lightbox-vertical-padding));\n\n  z-index: ${ZIndex.MOSAIC_LIGHTBOX};\n  inset: ${globalHeaderHeight}px 0 0;\n  transition: opacity 0.2s;\n\n  &[data-active='false'] {\n    opacity: 0;\n    pointer-events: none;\n  }\n`;\n\nexport const lightBoxControlsCss = css`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n`;\n\nexport const lightBoxCaptionCss = css`\n  color: ${m('--fg-color')};\n  width: 100%;\n  padding: ${m('--spacing-l')};\n  text-align: center;\n`;\n\nexport const lightBoxVideoCss = css`\n  border-radius: ${m('--border-radius-l')};\n  overflow: hidden;\n  max-width: 100%;\n  max-height: 100%;\n  width: auto;\n  height: auto;\n`;\n\nexport const lightboxNavLeftIconCss = css`\n  margin: 5px 0;\n  transform: rotate(270deg);\n  [dir='rtl'] & {\n    transform: rotate(90deg);\n  }\n`;\n\nexport const lightboxNavRightIconCss = css`\n  margin: 5px -1px 5px 1px;\n  transform: rotate(270deg);\n  [dir='rtl'] & {\n    transform: rotate(90deg);\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport { useEffect } from 'react';\n\nimport { IconButton } from '../IconButton';\nimport { Media } from '../Media';\nimport { Modal } from '../Modal/Modal';\nimport {\n  lightBoxCaptionCss,\n  lightBoxContainerCss,\n  lightBoxControlsCss,\n  lightBoxCss,\n  lightboxNavLeftIconCss,\n  lightboxNavRightIconCss,\n  lightBoxVideoCss,\n} from './styles';\nimport type { MosaicLightBoxProps } from './types';\n\nexport const MosaicLightBox: FC<MosaicLightBoxProps> = ({\n  tile,\n  handleKeyPress,\n  goNext,\n  goPrevious,\n  close,\n  className,\n}) => {\n  useEffect(() => {\n    if (tile?.onOpen) {\n      tile.onOpen();\n    }\n  }, [tile]);\n\n  if (!tile || !tile.video) return null;\n\n  return (\n    <Modal\n      contentClassName={lightBoxContainerCss}\n      isBlocking={false}\n      isDisplayed={!!tile}\n      disableBackgroundScroll={true}\n      onClose={close}\n    >\n      <figure\n        data-testid=\"sdsm-mosaic-lightbox\"\n        className={cx(lightBoxCss, className)}\n        key={`${tile.video.source}-${tile.title}-${tile.highlight}`}\n      >\n        <Media\n          loop={true}\n          className={lightBoxVideoCss}\n          {...tile.video}\n          showVideoControls={true}\n          autoplay={true}\n        />\n        <div data-testid=\"sdsm-mosaic-lightbox-controls\" className={lightBoxControlsCss}>\n          <IconButton\n            iconName=\"chevron-up\"\n            iconClassName={lightboxNavLeftIconCss}\n            onClick={goPrevious}\n            onKeyDown={handleKeyPress}\n          />\n\n          <figcaption className={lightBoxCaptionCss}>{tile.title}</figcaption>\n\n          <IconButton\n            iconName=\"chevron-down\"\n            iconClassName={lightboxNavRightIconCss}\n            onClick={goNext}\n            onKeyDown={handleKeyPress}\n          />\n        </div>\n      </figure>\n    </Modal>\n  );\n};\n", "import { css, cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { mobileMediaQuery } from '../../constants';\nimport { Icon } from '../Icon';\nimport { Media } from '../Media';\nimport { isVideoPlaying } from '../Video/utils';\nimport {\n  coveredTileCss,\n  durationCss,\n  highlightCss,\n  overlayCss,\n  playButtonCss,\n  posterCss,\n  posterImageCss,\n  titleCss,\n  videoCss,\n  wrapperCss,\n} from './styles';\nimport type { MosaicTileProps } from './types';\n\nexport const MosaicTile: FC<MosaicTileProps> = ({\n  columns = 1,\n  rows = 1,\n  mobileColumns = columns,\n  mobileRows = rows,\n  cover = true,\n  poster,\n  preview,\n  showOverlay,\n  highlight,\n  title,\n  duration,\n  onEnter,\n  onLeave,\n}) => {\n  //TODO: use a callback instead of a ref as in https://reactjs.org/docs/hooks-faq.html#how-can-i-measure-a-dom-node\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [playing, setPlaying] = useState(false);\n\n  const ratio = rows / columns;\n  const mobileRatio = mobileRows / mobileColumns;\n\n  const ratioCss = css`\n    &:before {\n      padding-bottom: ${ratio * 100}%;\n    }\n    ${mobileMediaQuery} {\n      &:before {\n        padding-bottom: ${mobileRatio * 100}%;\n      }\n    }\n  `;\n\n  const onTileEnter = useCallback(async () => {\n    onEnter?.();\n    //TODO: use a forwardRef here: Video component should forward the video tag ref\n    const video = containerRef.current?.querySelector('video');\n\n    if (!video) {\n      return;\n    }\n    await video.play();\n    setPlaying(true);\n  }, [containerRef, onEnter]);\n  const onTileLeave = useCallback(() => {\n    onLeave?.();\n    //TODO: ditto `onTileEnter`\n    const video = containerRef.current?.querySelector('video');\n\n    if (!video) {\n      return;\n    }\n\n    if (isVideoPlaying(video)) {\n      video.pause();\n    }\n    video.currentTime = 0;\n    setPlaying(false);\n  }, [containerRef, onLeave]);\n\n  useEffect(() => {\n    const container = containerRef.current;\n    container?.addEventListener('mouseenter', onTileEnter);\n    container?.addEventListener('mouseleave', onTileLeave);\n\n    return () => {\n      container?.removeEventListener('mouseenter', onTileEnter);\n      container?.removeEventListener('mouseleave', onTileLeave);\n    };\n  }, [containerRef, onTileEnter, onTileLeave]);\n\n  return (\n    <div\n      ref={containerRef}\n      className={cx(ratioCss, wrapperCss, cover ? coveredTileCss : undefined)}\n      data-playing={playing}\n      data-overlay={!!showOverlay}\n    >\n      {preview && (\n        <Media className={videoCss} isBackgroundVideo={true} autoPlay={false} {...preview} />\n      )}\n      {poster && (\n        <div className={posterCss} data-poster>\n          <img\n            alt={title ?? highlight ?? ''}\n            src={poster.src}\n            srcSet={poster.srcSet}\n            className={posterImageCss}\n          />\n        </div>\n      )}\n      <div className={overlayCss}>\n        {(title || highlight) && (\n          <div className={titleCss}>\n            {highlight && <div className={highlightCss}>{highlight}</div>}\n            {title}\n          </div>\n        )}\n        {duration && <div className={durationCss}>{duration}</div>}\n        <div className={playButtonCss}>\n          <Icon name=\"play-filled\" />\n        </div>\n      </div>\n    </div>\n  );\n};\n", "import { css } from '@emotion/css';\n\nimport { largeDesktopMediaQuery, mobileMediaQuery } from '../../constants';\nimport { m, p2Css, p4Css } from '../../motif';\nimport { mediaQueryForRange } from '../../utils';\nimport { globalHeaderHeight } from '../GlobalHeader';\n\n/** The following values are set by design */\n\n/** Max width width for Content block from designs */\nconst maxBlockWidthPx = 864;\n\n/** Image subtopic's width for its image */\nconst imageSubtopicWidthPx = 120;\n\n/** Media width value for 9:16 aspect ratio to mimic Carousel card items */\nconst aspectRatio916MediaWidthPx = 369;\nconst mobileAspectRatio916MediaWidthPx = 225;\n\n/** Main wrapper styles */\nexport const boundaryCss = css`\n  display: flex;\n  gap: ${m('--spacing-xl')};\n  justify-content: center;\n  margin-block: 0;\n  padding: ${m('--spacing-xl')} ${m('--spacing-xxxxl')};\n  width: 100%;\n\n  ${largeDesktopMediaQuery} {\n    align-items: center;\n  }\n\n  ${mobileMediaQuery} {\n    padding: ${m('--spacing-xl')};\n  }\n`;\n\nexport const mainWrapperCss = css`\n  background-color: ${m('--bg-color')};\n  color: ${m('--fg-color')};\n  display: flex;\n`;\n\nexport const singleColumnCss = css`\n  max-width: ${maxBlockWidthPx}px;\n  width: 100%;\n`;\n\nexport const reverseDirectionCss = css`\n  flex-direction: row-reverse;\n`;\n\nexport const fullHeightCss = css`\n  min-height: calc(100vh - ${globalHeaderHeight}px);\n`;\n\n/** Content styles */\nexport const blockContentWrapperCss = css`\n  display: flex;\n  flex-direction: column;\n  gap: ${m('--spacing-xxxl')};\n  width: 60%;\n\n  /** Dynamic padding for nonmobile devices such that content inside the block could be centered\n   * Have to use dyanmic padding (should be a one-off case) instead of fixed padding\n   * due to the media inside was complicatedly implemented (animated carousel, video were using fixed padding)\n   * Ticket: https://jira.sc-corp.net/browse/WEBP-13033\n   */\n  padding-inline-start: 6%;\n\n  ${mediaQueryForRange({ max: 1366 })} {\n    padding-inline-start: 3%;\n  }\n\n  ${mobileMediaQuery} {\n    gap: ${m('--spacing-xl')};\n    width: 100%;\n    padding-inline-start: 0;\n  }\n`;\n\nexport const contentWrapperCss = css`\n  display: flex;\n  flex-direction: column;\n  gap: ${m('--spacing-l')};\n  overflow-wrap: break-word;\n\n  ${p2Css}\n`;\n\nexport const headerWrapperCss = css`\n  display: flex;\n  flex-direction: column;\n  gap: ${m('--spacing-xs')};\n`;\n\n/** Subtopics styles */\nexport const subtopicsWrapperCss = css`\n  display: grid;\n  gap: ${m('--spacing-l')};\n  grid-template-columns: repeat(2, 1fr);\n  overflow-wrap: anywhere;\n\n  ${largeDesktopMediaQuery} {\n    display: flex;\n  }\n`;\n\nexport const subtopicCss = css`\n  box-sizing: border-box;\n  display: flex;\n  flex: 1 0 0;\n\n  ${p4Css}\n\n  ${mobileMediaQuery} {\n    flex-direction: column;\n    gap: ${m('--spacing-xxs')};\n  }\n`;\n\nexport const subtopicContentWrapperCss = css`\n  display: flex;\n  flex-direction: column;\n  gap: ${m('--spacing-xs')};\n`;\n\nexport const customIconWrapperCss = css`\n  display: flex;\n  flex-shrink: 0;\n  margin: 3px;\n  pointer-events: none;\n  user-select: none;\n`;\n\nexport const customIconCss = css`\n  height: 18px;\n  width: 18px;\n`;\n\nexport const subtopicSdsIconCss = css`\n  fill: ${m('--fg-color')};\n  flex-shrink: 0;\n  margin: 3px;\n`;\n\n/** Stat subtopic styles */\nexport const statSubtopicCss = css`\n  flex-direction: column;\n`;\n\n/** Image subtopic styles */\nexport const subtopicMediaWrapperCss = css`\n  max-width: ${imageSubtopicWidthPx}px;\n`;\n\nexport const subtopicMediaCss = css`\n  aspect-ratio: 1 / 1;\n`;\n\nexport const ctasContainerCss = css`\n  display: flex;\n  flex-wrap: wrap;\n  gap: ${m('--spacing-m')};\n`;\n\n/** Media styles */\nexport const blockMediaWrapperCss = css`\n  align-items: flex-start;\n  display: flex;\n  justify-content: center;\n  padding-inline: 20px;\n  width: 40%;\n\n  ${largeDesktopMediaQuery} {\n    align-items: center;\n  }\n\n  ${mobileMediaQuery} {\n    width: 100%;\n  }\n`;\n\nexport const mediaWrapperCss = css`\n  display: block;\n  object-fit: cover;\n  object-position: center;\n  width: 100%;\n\n  > picture {\n    pointer-events: none;\n  }\n`;\n\nexport const aspectRatio916Css = css`\n  aspect-ratio: 9 / 16;\n  width: ${aspectRatio916MediaWidthPx}px;\n\n  & img {\n    aspect-ratio: 9 / 16;\n  }\n`;\n\nexport const mobileAspectRatio916Css = css`\n  ${mobileMediaQuery} {\n    aspect-ratio: 9 / 16;\n    width: ${mobileAspectRatio916MediaWidthPx}px;\n\n    & img {\n      aspect-ratio: 9 / 16;\n    }\n  }\n`;\n\nexport const aspectRatio169Css = css`\n  aspect-ratio: 16 / 9;\n\n  & img {\n    aspect-ratio: 16 / 9;\n  }\n`;\n\nexport const mobileAspectRatio169Css = css`\n  ${mobileMediaQuery} {\n    ${aspectRatio169Css}\n  }\n`;\n\nexport const aspectRatio32Css = css`\n  aspect-ratio: 3 / 2;\n\n  & img {\n    aspect-ratio: 3 / 2;\n  }\n`;\n\nexport const mobileAspectRatio32Css = css`\n  ${mobileMediaQuery} {\n    ${aspectRatio32Css}\n  }\n`;\n\nexport const aspectRatio11Css = css`\n  aspect-ratio: 1 / 1;\n\n  & img {\n    aspect-ratio: 1 / 1;\n  }\n`;\n\nexport const mobileAspectRatio11Css = css`\n  ${mobileMediaQuery} {\n    ${aspectRatio11Css}\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport { h6Css } from '../../motif';\nimport { Media } from '../Media';\nimport {\n  subtopicContentWrapperCss,\n  subtopicCss,\n  subtopicMediaCss,\n  subtopicMediaWrapperCss,\n} from './styles';\nimport type { ImageSubtopicProps } from './types';\n\n/**\n * A component for displaying complementary details to support main content using images.\n *\n * This component is designed to be used within the Multi Value Prop Block component that provides\n * structure and layout.\n *\n * @param {string} [title] - The title of the subtopic.\n * @param {ImageSources} [imgSrcs] - An object containing image sources for different screen sizes.\n */\n\nexport const ImageSubtopic: FC<ImageSubtopicProps> = props => {\n  const { title, imgSrcs } = props;\n\n  return (\n    <div className={cx(subtopicCss, subtopicContentWrapperCss)}>\n      <div className={subtopicMediaWrapperCss}>\n        <Media className={subtopicMediaCss} imgSrcs={imgSrcs} />\n      </div>\n      {title && <h6 className={h6Css}>{title}</h6>}\n    </div>\n  );\n};\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport { Alignment } from '../../constants';\nimport { useIsMobile } from '../../hooks';\nimport { getMotifSchemeForLegacyBackgroundColor, h3Css, MotifComponent, p1Css } from '../../motif';\nimport { BlockBoundary } from '../BlockBoundary';\nimport { CarouselCardItem, CarouselV3 } from '../CarouselV3';\nimport { MediaWithStickers } from '../Media';\nimport {\n  aspectRatio11Css,\n  aspectRatio32Css,\n  aspectRatio169Css,\n  aspectRatio916Css,\n  blockContentWrapperCss,\n  blockMediaWrapperCss,\n  boundaryCss,\n  contentWrapperCss,\n  ctasContainerCss,\n  fullHeightCss,\n  headerWrapperCss,\n  mainWrapperCss,\n  mediaWrapperCss,\n  mobileAspectRatio11Css,\n  mobileAspectRatio32Css,\n  mobileAspectRatio169Css,\n  mobileAspectRatio916Css,\n  reverseDirectionCss,\n  singleColumnCss,\n  subtopicsWrapperCss,\n} from './styles';\nimport type { ImageMediaSource, MultiValuePropBlockProps, VideoSource } from './types';\n\nexport const MultiValuePropBlock: FC<MultiValuePropBlockProps> = props => {\n  const isMobile = useIsMobile();\n\n  const {\n    anchor,\n    motifScheme,\n    backgroundColor,\n    title,\n    subtitle,\n    body,\n    children,\n    mediaSources = [],\n    desktopMediaAspectRatio = '9:16',\n    mobileMediaAspectRatio = '9:16',\n    mediaDirection = Alignment.End,\n    autoplayCarousel,\n    callsToAction,\n    fullHeight,\n    className,\n    style,\n    stickers,\n    isRtl = false,\n  } = props;\n\n  const mediaSourcesCount = mediaSources?.length || 0;\n\n  const MultiValuePropBlockMedia: FC = () => {\n    if (mediaSourcesCount > 0) {\n      return (\n        <section className={blockMediaWrapperCss}>\n          {mediaSourcesCount > 1 ? (\n            <CarouselV3 autoPlay={autoplayCarousel} isSingleView={true} isRtl={isRtl}>\n              {mediaSources.map(\n                (item, index) =>\n                  item && (\n                    <CarouselCardItem\n                      key={`${item.type}-${index}`}\n                      aspectRatio={isMobile ? mobileMediaAspectRatio : desktopMediaAspectRatio}\n                      imgSrcs={(item as ImageMediaSource)?.sources}\n                      imgAltText={(item as ImageMediaSource)?.altText}\n                      className={cx({\n                        [aspectRatio916Css]: !isMobile && desktopMediaAspectRatio === '9:16',\n                        [mobileAspectRatio916Css]: isMobile && mobileMediaAspectRatio === '9:16',\n                      })}\n                      {...(item as VideoSource)}\n                    />\n                  )\n              )}\n            </CarouselV3>\n          ) : mediaSourcesCount > 0 ? (\n            <MediaWithStickers\n              mediaClassName={cx(mediaWrapperCss, {\n                [aspectRatio916Css]: desktopMediaAspectRatio === '9:16',\n                [mobileAspectRatio916Css]: mobileMediaAspectRatio === '9:16',\n                [aspectRatio169Css]: desktopMediaAspectRatio === '16:9',\n                [aspectRatio32Css]: desktopMediaAspectRatio === '3:2',\n                [aspectRatio11Css]: desktopMediaAspectRatio === '1:1',\n                [mobileAspectRatio169Css]: mobileMediaAspectRatio === '16:9',\n                [mobileAspectRatio32Css]: mobileMediaAspectRatio === '3:2',\n                [mobileAspectRatio11Css]: mobileMediaAspectRatio === '1:1',\n              })}\n              imgSrcs={(mediaSources[0] as ImageMediaSource)?.sources}\n              altText={(mediaSources[0] as ImageMediaSource)?.altText}\n              {...(mediaSources[0] as VideoSource)}\n              stickers={stickers}\n            />\n          ) : null}\n        </section>\n      );\n    }\n\n    return null;\n  };\n\n  return (\n    <article\n      id={anchor}\n      className={cx(\n        MotifComponent.MULTI_VALUE_PROP_BLOCK,\n        motifScheme ?? getMotifSchemeForLegacyBackgroundColor(backgroundColor),\n        mainWrapperCss,\n        {\n          [fullHeightCss]: fullHeight,\n        },\n        className\n      )}\n      style={style}\n    >\n      <BlockBoundary\n        className={cx(boundaryCss, {\n          [reverseDirectionCss]: !isMobile && mediaDirection === Alignment.Start && !isRtl,\n        })}\n      >\n        <section\n          className={cx(blockContentWrapperCss, {\n            [singleColumnCss]: mediaSourcesCount === 0,\n          })}\n        >\n          <div className={contentWrapperCss}>\n            <div className={headerWrapperCss}>\n              <h3 className={h3Css}>{title}</h3>\n              {subtitle && <p className={p1Css}>{subtitle}</p>}\n            </div>\n            {isMobile && <MultiValuePropBlockMedia />}\n            {body && body}\n          </div>\n          {children && <div className={subtopicsWrapperCss}>{children}</div>}\n          {callsToAction && <div className={ctasContainerCss}>{callsToAction}</div>}\n        </section>\n        {!isMobile && <MultiValuePropBlockMedia />}\n      </BlockBoundary>\n    </article>\n  );\n};\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport { h3Css } from '../../motif';\nimport { statSubtopicCss, subtopicCss } from './styles';\nimport type { StatSubtopicProps } from './types';\n\n/**\n * A component for displaying complementary details to support main content using stats.\n *\n * This component is designed to be used within the Multi Value Prop Block component that provides\n * structure and layout.\n *\n * @param {string} [stat] - The main stat value to display.\n * @param {ReactNode} [subtitle] - An optional subtitle to provide context for the stat.\n */\n\nexport const StatSubtopic: FC<StatSubtopicProps> = ({ stat, subtitle }) => {\n  return (\n    <div className={cx(subtopicCss, statSubtopicCss)}>\n      <h3 className={h3Css}>{stat}</h3>\n      {subtitle}\n    </div>\n  );\n};\n", "import type { FC } from 'react';\n\nimport { h6Css } from '../../motif';\nimport { Icon } from '../Icon';\nimport { Picture } from '../Picture';\nimport {\n  customIconCss,\n  customIconWrapperCss,\n  subtopicContentWrapperCss,\n  subtopicCss,\n  subtopicSdsIconCss,\n} from './styles';\nimport type { TextSubtopicProps } from './types';\n\n/**\n * A component for displaying complementary details to support main content.\n *\n * This component is designed to be used within the Multi Value Prop Block component that provides\n * structure and layout.\n *\n * @param {string} [title] - The title of the subtopic.\n * @param {ReactNode} [body] - The body content of the subtopic\n * @param {string} [icon] - The name of the SDS icon to display. This should correspond to a valid\n *   SDS icon name.\n * @param {ImageSources} [imgSrcs] - An object containing image sources for different screen sizes.\n */\nexport const TextSubtopic: FC<TextSubtopicProps> = props => {\n  const { title, body, icon, imgSrcs } = props;\n  return (\n    <div className={subtopicCss}>\n      {icon ? (\n        <Icon name={icon} size={18} className={subtopicSdsIconCss} />\n      ) : (\n        imgSrcs && (\n          <Picture\n            className={customIconWrapperCss}\n            imgClassName={customIconCss}\n            imgSrcs={imgSrcs}\n          />\n        )\n      )}\n      <div className={subtopicContentWrapperCss}>\n        <h6 className={h6Css}>{title}</h6>\n        {body}\n      </div>\n    </div>\n  );\n};\n", "import { cx } from '@emotion/css';\nimport { noop } from 'radashi';\nimport type { FC, ReactNode } from 'react';\nimport type React from 'react';\nimport { useRef, useState } from 'react';\n\nimport type { VideoPanelAlignment } from '../../constants';\nimport { MediaMode } from '../../constants';\nimport { useMediaMode } from '../../hooks/useMediaMode';\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport type { IconName } from '../Icon';\nimport type { TogglePanelItem } from '../TogglePanel/TogglePanel';\nimport { TogglePanel } from '../TogglePanel/TogglePanel';\nimport {\n  backgroundImageCss,\n  multiVideoBlockCss,\n  slidePanelCss,\n  slidePanelMobileCss,\n  togglePanelWithBreakSpacerWrapCss,\n  togglePanelWrapCss,\n} from './styles';\nimport { VideoItem as VideoItemSDS } from './VideoItem';\n\nexport interface MediaItem {\n  url: string;\n  contentType?: string;\n}\n\nexport interface VideoItem extends TogglePanelItem {\n  posterSource?: string;\n  media: MediaItem;\n  thumbnailMedia: MediaItem;\n}\n\nexport interface MultiVideoBlockProps {\n  anchorId?: string;\n  children?: ReactNode | Array<ReactNode>;\n  className?: string;\n  hasVideoSync?: boolean;\n  id: string;\n  mobilePrimaryVideos: Array<VideoItem>;\n  mobileSecondaryVideos: Array<VideoItem>;\n  onVideoChange?: (index: number, isChecked: boolean) => void;\n  panelPosition: VideoPanelAlignment;\n  primaryVideos: Array<VideoItem>;\n  secondaryVideos: Array<VideoItem>;\n  style?: React.CSSProperties;\n  toggleButtonIcons: Array<IconName>;\n  togglePanelClassName?: string;\n  togglePanelLabel?: string;\n  preChildren?: ReactNode;\n  postChildren?: ReactNode;\n}\n\nexport const MultiVideoBlock: FC<MultiVideoBlockProps> = ({\n  anchorId,\n  children,\n  className,\n  hasVideoSync = true,\n  id,\n  mobilePrimaryVideos,\n  mobileSecondaryVideos,\n  onVideoChange = noop,\n  panelPosition,\n  primaryVideos,\n  style,\n  secondaryVideos,\n  toggleButtonIcons,\n  togglePanelClassName,\n  togglePanelLabel,\n  preChildren,\n  postChildren,\n}: MultiVideoBlockProps) => {\n  const [sliderChecked, setSliderChecked] = useState(false);\n  const [selectedVideoIndex, setSelectedVideoIndex] = useState(0);\n  const currentTime = useRef(0);\n  useMotifStyles(MotifComponent.MULTI_VIDEO_BLOCK);\n\n  const mode = useMediaMode();\n  const isMobile = mode === MediaMode.Mobile;\n\n  const videoGroup = isMobile\n    ? [mobilePrimaryVideos, mobileSecondaryVideos]\n    : [primaryVideos, secondaryVideos];\n  const videos = sliderChecked ? videoGroup[1]! : videoGroup[0]!;\n  const selectedVideo = videos[selectedVideoIndex];\n\n  const allVideos = isMobile\n    ? [...mobilePrimaryVideos, ...mobileSecondaryVideos]\n    : [...primaryVideos, ...secondaryVideos];\n\n  const handleButtonToggle = (index: number) => {\n    setSelectedVideoIndex(index);\n    currentTime.current = 0;\n    onVideoChange(index, sliderChecked);\n  };\n\n  const handleSliderCheck = (isSliderChecked: boolean) => {\n    setSliderChecked(isSliderChecked);\n    onVideoChange(selectedVideoIndex, isSliderChecked);\n  };\n\n  const prefetchedVideos = allVideos\n    .filter(video => video?.media?.url)\n    .map((video, index) => {\n      return <link key={index} rel=\"prefetch\" as=\"video\" href={video.media.url} />;\n    });\n\n  return (\n    <div\n      id={anchorId}\n      style={style}\n      className={cx(MotifComponent.MULTI_VIDEO_BLOCK, multiVideoBlockCss, className)}\n    >\n      {prefetchedVideos}\n\n      {/* This component will display with zero height, when used as a page block,\n      if a thumbnail is not selected in Contentful */}\n      {selectedVideo?.thumbnailMedia?.url && (\n        <img className={backgroundImageCss} src={selectedVideo.thumbnailMedia.url} />\n      )}\n\n      {selectedVideo && (\n        <VideoItemSDS\n          hasVideoSync={hasVideoSync}\n          isSelected={true}\n          video={selectedVideo}\n          currentTime={currentTime}\n        />\n      )}\n\n      {children}\n\n      {/* This container covers the whole component height and contains a 'BreakSpacer' at the top and/or bottom\n      (if a 'Break' overlays this component in a page) and an inner container that takes up the remaining height.\n      The 'TogglePanel' is positioned absolute in the inner container so that it can be offset by the 'BreakSpacer'. */}\n      <div className={togglePanelWithBreakSpacerWrapCss}>\n        {preChildren}\n        <div className={togglePanelWrapCss}>\n          <TogglePanel\n            id={id}\n            items={videos}\n            label={togglePanelLabel}\n            sliderChecked={sliderChecked}\n            onSliderUpdate={handleSliderCheck}\n            onButtonToggle={handleButtonToggle}\n            hasToggleSlider={!!videoGroup[1]?.length}\n            selectedId={(videos[selectedVideoIndex] as VideoItem).id}\n            className={cx(slidePanelCss[panelPosition], slidePanelMobileCss, togglePanelClassName)}\n            buttonIcons={toggleButtonIcons}\n          />\n        </div>\n        {postChildren}\n      </div>\n    </div>\n  );\n};\n\nMultiVideoBlock.displayName = 'MultiVideoBlock';\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, VideoPanelAlignment } from '../../constants';\n\nexport const slidePanelCss: Record<VideoPanelAlignment, string> = {\n  [VideoPanelAlignment.TopLeft]: css`\n    left: 2%;\n    top: 4%;\n  `,\n  [VideoPanelAlignment.TopRight]: css`\n    right: 2%;\n    top: 4%;\n  `,\n  [VideoPanelAlignment.TopCenter]: css`\n    left: 50%;\n    top: 4%;\n    transform: translateX(-50%);\n  `,\n  [VideoPanelAlignment.BottomLeft]: css`\n    left: 2%;\n    bottom: 4%;\n  `,\n  [VideoPanelAlignment.BottomRight]: css`\n    right: 2%;\n    bottom: 4%;\n  `,\n  [VideoPanelAlignment.BottomCenter]: css`\n    left: 50%;\n    bottom: 4%;\n    transform: translateX(-50%);\n  `,\n};\n\nexport const slidePanelMobileCss = css`\n  position: absolute;\n\n  ${mobileMediaQuery} {\n    left: 50%;\n    right: auto;\n    transform: translateX(-50%);\n  }\n`;\n\nexport const multiVideoBlockCss = css`\n  width: 100%;\n  height: 100%;\n  display: flex;\n  position: relative;\n`;\n\nexport const backgroundImageCss = css`\n  width: 100%;\n`;\n\nexport const togglePanelWithBreakSpacerWrapCss = css`\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n`;\n\nexport const togglePanelWrapCss = css`\n  flex: 1;\n  position: relative;\n`;\n", "import { css, cx } from '@emotion/css';\nimport { isNullish } from 'radashi';\nimport type { FC, MutableRefObject } from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport { Video } from '../Video';\nimport type { VideoItem as VideoItemType } from './MultiVideoBlock';\n\ninterface VideoItemProps {\n  hasVideoSync: boolean;\n  isSelected: boolean;\n  video: VideoItemType;\n  currentTime: MutableRefObject<number>;\n}\n\nconst visibleVideoCss = css`\n  visibility: visible;\n`;\n\nconst videoCss = css`\n  position: absolute;\n  visibility: hidden;\n`;\n\nexport const VideoItem: FC<VideoItemProps> = ({ hasVideoSync, video, currentTime }) => {\n  const videoRef = useRef<HTMLVideoElement | null>(null);\n\n  useEffect(() => {\n    if (isNullish(currentTime) || !videoRef.current || !hasVideoSync) {\n      return;\n    }\n\n    videoRef.current!.currentTime = currentTime.current;\n    // Reason: currentTime will cause the video to jump\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [video]);\n\n  useEffect(() => {\n    const video = videoRef.current;\n\n    if (!video || !hasVideoSync) {\n      return;\n    }\n\n    const handleTimeUpdate: EventListener = event => {\n      const video = event.target as HTMLVideoElement;\n      currentTime.current = video.currentTime;\n    };\n\n    video!.addEventListener('timeupdate', handleTimeUpdate);\n\n    return () => {\n      video!.removeEventListener('timeupdate', handleTimeUpdate);\n    };\n  }, [currentTime, video, hasVideoSync]);\n\n  return (\n    <Video\n      className={cx(videoCss, { [visibleVideoCss]: true })}\n      source={video.media?.url}\n      posterSource={video.thumbnailMedia?.url}\n      isBackgroundVideo\n      sourceType={video.media?.contentType}\n      ref={videoRef}\n    />\n  );\n};\n", "import { cx } from '@emotion/css';\nimport debounce from 'lodash-es/debounce';\nimport type { FC, KeyboardEventHandler, MouseEventHandler } from 'react';\nimport { useCallback, useContext, useEffect, useRef, useState } from 'react';\n\nimport { Alignment, maxWidth } from '../../../constants';\nimport { MotifComponent, useMotifStyles } from '../../../motif';\nimport { dataSetToAttributes } from '../../../utils';\nimport { defaultIsUrlCurrent as getDefaultIsUrlCurrent } from '../../GlobalHeader/GlobalHeader.utils';\nimport { GlobalHeaderContext } from '../../GlobalHeader/GlobalHeaderContext';\nimport type { GlobalHeaderProps } from '../../GlobalHeader/types';\nimport { Icon } from '../../Icon';\nimport { PrimitivesContext } from '../../Primitives';\nimport { NavigatorItemFeaturedLink } from '../NavigatorItemFeaturedLink';\nimport { NavigatorItemLink } from '../NavigatorItemLink';\nimport { getColsWithDivider } from '../utils';\nimport {\n  navigatorItemDesktopClickableCss,\n  navigatorItemDesktopCss,\n  navigatorItemDesktopIconCss,\n  navigatorItemDesktopLeftAlignedCss,\n  navigatorItemDesktopMenu4ColCss,\n  navigatorItemDesktopMenuColCss,\n  navigatorItemDesktopMenuColLabelCss,\n  navigatorItemDesktopMenuColWithDividerCss,\n  navigatorItemDesktopMenuCss,\n  navigatorItemDesktopMenuExpandedCss,\n  navigatorItemDesktopMenuGridCss,\n  navigatorItemDesktopRightAlignedCss,\n} from './NavigatorItemDesktop.styled';\nimport type { NavigatorItemDesktopProps } from './types';\n\ntype NavMenuAlignment = Extract<Alignment, 'Left' | 'Center' | 'Right'>;\n\n/**\n * Implementation of `isUrlCurrent` if not specified by caller. Primarily for standalone script\n * usage. This implementation is a wrapper around the existing `defaultIsUrlCurrent` which can be\n * rewritten once we remove the deprecated `navigationBreadcrumbs` and prior Nav Menu\n * implementation.\n */\nconst defaultIsUrlCurrent: GlobalHeaderProps['isUrlCurrent'] = url => {\n  const currentLocation = typeof window === 'undefined' ? undefined : window?.location;\n  const isUrlCurrent = getDefaultIsUrlCurrent(currentLocation);\n  return isUrlCurrent(url);\n};\n\nexport const NavigatorItemDesktop: FC<NavigatorItemDesktopProps> = ({\n  url,\n  onClick,\n  isSelected,\n  title,\n  dataset,\n  analytics,\n  col1Label,\n  col1Items = [],\n  col2Label,\n  col2Items = [],\n  col3Label,\n  col3Items = [],\n  featuredItem,\n}) => {\n  useMotifStyles(MotifComponent.HEADER);\n  const { Anchor } = useContext(PrimitivesContext);\n  const { isUrlCurrent } = useContext(GlobalHeaderContext);\n  const [shouldSelect, setShouldSelect] = useState(isSelected ?? false);\n  const [isExpanded, setIsExpanded] = useState(false);\n  const [navAlignment, setNavAlignment] = useState<NavMenuAlignment | undefined>();\n\n  useEffect(() => {\n    // If isSelected prop has a value, use it.\n    if (isSelected !== undefined) {\n      setShouldSelect(isSelected);\n      return;\n    }\n\n    // otherwise use the `isUrlCurrent` function from context to determine selected state\n    const urlsToCheck = [\n      url,\n      ...col1Items.map(item => item.url),\n      ...col2Items.map(item => item.url),\n      ...col3Items.map(item => item.url),\n      featuredItem?.url,\n    ];\n\n    const isRelevantUrl = urlsToCheck.some(url => {\n      if (!url) return false;\n\n      // use caller specified `isUrlCurrent` function if provided\n      if (isUrlCurrent) return isUrlCurrent(url);\n\n      // use default implementation as fallback (primarily for standalone script usage)\n      return defaultIsUrlCurrent(url);\n    });\n\n    setShouldSelect(isRelevantUrl);\n  }, [isSelected, url, col1Items, col2Items, col3Items, featuredItem?.url, isUrlCurrent]);\n\n  const parentRef = useRef<HTMLElement>(null);\n  const menuRef = useRef<HTMLDivElement>(null);\n  const iconName = isExpanded ? 'chevron-up' : 'chevron-down';\n\n  /**\n   * OnResize listener to control positioning of the Navigation Menu for the following cases:\n   *\n   * - Normal case: enforce consistent UX by centering the menu in device window\n   * - Edge case: parent nav item is positioned to far left/right (e.g. ultra-wide screen), position\n   *   menu below the parent so the user's mouse doesn't traverse a long distance to access the\n   *   menu.\n   */\n  const positionNavMenu = useCallback(() => {\n    if (typeof window === 'undefined') return;\n    if (!parentRef.current || !menuRef.current) return;\n\n    const deviceWidth = window.innerWidth;\n    const parentLeft = parentRef.current.offsetLeft;\n    const parentWidth = parentRef.current.offsetWidth;\n    const parentRight = parentLeft + parentWidth;\n    const menuWidth = menuRef.current.offsetWidth;\n\n    // We will center align menu by default, using these calculations to determine if parent element overlaps center aligned menu.\n    const centerAlignedMenuLeft = deviceWidth / 2 - menuWidth / 2;\n    const centerAlignedMenuRight = deviceWidth / 2 + menuWidth / 2;\n\n    // Only left/right align to parent if necessary\n    const shouldRightAlign = deviceWidth > maxWidth && parentRight > centerAlignedMenuRight;\n    const shouldLeftAlign = deviceWidth > maxWidth && parentLeft < centerAlignedMenuLeft;\n\n    if (shouldRightAlign) {\n      setNavAlignment(Alignment.Right);\n    } else if (shouldLeftAlign) {\n      setNavAlignment(Alignment.Left);\n    } else {\n      setNavAlignment(Alignment.Center);\n    }\n  }, []);\n\n  /** Adds a onResize listener to reposition the Navigation Menu when necessary */\n  useEffect(() => {\n    const onResize = debounce(positionNavMenu, 500);\n\n    window.addEventListener('resize', onResize);\n\n    return () => {\n      window.removeEventListener('resize', onResize);\n    };\n  }, [positionNavMenu]);\n\n  const clickableItemClassName = onClick || url ? navigatorItemDesktopClickableCss : null;\n  const titleClassName = cx({ selected: shouldSelect });\n  const linkOrText = <span className={titleClassName}>{title}</span>;\n\n  const handleTriggerKeyPress: KeyboardEventHandler = e => {\n    e.stopPropagation(); // Only move dropdown nav up/down\n\n    if (e.key === ' ') {\n      e.preventDefault(); // Prevent page down action when opening by keyboard\n    }\n\n    const focusableElements = menuRef.current?.querySelectorAll(\n      'a, button, input, textarea, select, details, [tabindex]:not([tabindex=\"-1\"])'\n    );\n    const firstElement = focusableElements?.[0] as HTMLElement;\n    const lastElement = focusableElements?.[focusableElements.length - 1] as HTMLElement;\n\n    // defer setting nav menu positioning till user interacts with the parent nav item\n    if (!navAlignment) {\n      positionNavMenu();\n    }\n\n    if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {\n      setIsExpanded(true);\n      setTimeout(() => firstElement?.focus(), 250); // Wait for transition\n    } else if (e.key === 'ArrowUp') {\n      setIsExpanded(true);\n      setTimeout(() => lastElement?.focus(), 250); // Wait for transition\n    }\n  };\n\n  const handleMenuKeyPress: KeyboardEventHandler = e => {\n    if (e.key === 'Tab') {\n      const focusableElements = menuRef.current?.querySelectorAll(\n        'a, button, input, textarea, select, details, [tabindex]:not([tabindex=\"-1\"])'\n      );\n      const firstElement = focusableElements?.[0] as HTMLElement;\n      const lastElement = focusableElements?.[focusableElements.length - 1] as HTMLElement;\n\n      if (e.shiftKey) {\n        // If tabbing forward, close menu if tabbing off of the last focussable item\n        if (e.target === firstElement) {\n          setIsExpanded(false);\n        }\n      } else {\n        // If tabbing backward, close menu if tabbing off of the first focussable item\n        if (e.target === lastElement) {\n          setIsExpanded(false);\n        }\n      }\n    }\n  };\n\n  const handleMouseEnter: MouseEventHandler = () => {\n    // defer setting nav menu positioning till user interacts with the parent nav item\n    if (!navAlignment) {\n      positionNavMenu();\n    }\n\n    setIsExpanded(true);\n  };\n\n  const handleMouseLeave: MouseEventHandler = () => setIsExpanded(false);\n\n  // Find the number of columns that have content\n  const numOfColsWithItems = [\n    col1Items?.length,\n    col2Items?.length,\n    col3Items?.length,\n    featuredItem,\n  ].filter(c => !!c).length;\n  // fill remaining columns with empty space elements\n  const numOfSpacers = 3 - numOfColsWithItems;\n\n  // Only use trigger link (no dropdown menu) if there are no menu items\n  if (!numOfColsWithItems) {\n    return (\n      <Anchor\n        href={url}\n        className={cx(MotifComponent.HEADER, navigatorItemDesktopCss, clickableItemClassName)}\n        onClick={() => onClick?.(url, analytics?.label)}\n        tabIndex={0}\n        {...dataSetToAttributes(dataset)}\n      >\n        {linkOrText}\n      </Anchor>\n    );\n  }\n\n  // Check if any of the items, in any column, have a description\n  const hasCol1Descriptions = col1Items?.some(item => !!item.description);\n  const hasCol2Descriptions = col1Items?.some(item => !!item.description);\n  const hasCol3Descriptions = col1Items?.some(item => !!item.description);\n\n  const colsWithDivider = getColsWithDivider({\n    col1Label,\n    col1Items,\n    col2Label,\n    col2Items,\n    col3Label,\n    col3Items,\n  });\n\n  // Determine if a column has any icons, otherwise the space can be collapsed\n  const showCol1Icons = col1Items?.some(item => item?.icon || item?.media);\n  const showCol2Icons = col2Items?.some(item => item?.icon || item?.media);\n  const showCol3Icons = col3Items?.some(item => item?.icon || item?.media);\n\n  const handleItemLinkClick = (url: string, label?: string) => {\n    setIsExpanded(false);\n    onClick?.(url, label);\n  };\n\n  return (\n    <section\n      ref={parentRef}\n      className={cx(\n        {\n          [navigatorItemDesktopRightAlignedCss]: navAlignment === Alignment.Right,\n          [navigatorItemDesktopLeftAlignedCss]: navAlignment === Alignment.Left,\n        },\n        'sdsm-nav-item-desktop'\n      )}\n    >\n      {/* Trigger element - no link if has dropdown items */}\n      <Anchor\n        className={cx(navigatorItemDesktopCss, clickableItemClassName)}\n        onMouseEnter={handleMouseEnter}\n        onMouseLeave={handleMouseLeave}\n        onKeyDown={handleTriggerKeyPress}\n        tabIndex={0}\n        {...dataSetToAttributes(dataset)}\n      >\n        {linkOrText}\n        <Icon size={24} className={navigatorItemDesktopIconCss} name={iconName} />\n      </Anchor>\n\n      {/* Dropdown menu */}\n      <div\n        ref={menuRef}\n        className={cx(\n          navigatorItemDesktopMenuCss,\n          {\n            [navigatorItemDesktopMenuExpandedCss]: isExpanded,\n            [navigatorItemDesktopMenu4ColCss]: numOfColsWithItems === 4,\n          },\n          'sdsm-nav-item-menu'\n        )}\n        onMouseEnter={handleMouseEnter}\n        onMouseLeave={handleMouseLeave}\n        onKeyDown={handleMenuKeyPress}\n        role=\"menu\"\n        aria-label=\"Menu\"\n      >\n        <div className={navigatorItemDesktopMenuGridCss}>\n          {/* Column 1 */}\n          {!!col1Items?.length && (\n            <div>\n              <div\n                className={cx(navigatorItemDesktopMenuColCss, {\n                  [navigatorItemDesktopMenuColWithDividerCss]: colsWithDivider.includes(1),\n                })}\n              >\n                {!!col1Label && (\n                  <span className={navigatorItemDesktopMenuColLabelCss}>{col1Label}</span>\n                )}\n                {col1Items?.map(\n                  ({ url, title, description, icon, media, analytics, dataset }, i) => (\n                    <NavigatorItemLink\n                      key={i}\n                      url={url}\n                      title={title}\n                      description={description}\n                      icon={showCol1Icons ? icon : undefined}\n                      media={showCol1Icons ? media : undefined}\n                      showSpacer={hasCol1Descriptions}\n                      onClick={() => handleItemLinkClick(url, analytics?.label)}\n                      dataset={isExpanded ? dataset : undefined}\n                      isUrlCurrent={isUrlCurrent?.(url)}\n                    />\n                  )\n                )}\n              </div>\n            </div>\n          )}\n\n          {/* Column 2 */}\n          {!!col2Items?.length && (\n            <div>\n              <div\n                className={cx(navigatorItemDesktopMenuColCss, {\n                  [navigatorItemDesktopMenuColWithDividerCss]: colsWithDivider.includes(2),\n                })}\n              >\n                {!!col2Label && (\n                  <span className={navigatorItemDesktopMenuColLabelCss}>{col2Label}</span>\n                )}\n                {col2Items?.map(\n                  ({ url, title, description, icon, media, analytics, dataset }, i) => (\n                    <NavigatorItemLink\n                      key={i}\n                      url={url}\n                      title={title}\n                      description={description}\n                      icon={showCol2Icons ? icon : undefined}\n                      media={showCol2Icons ? media : undefined}\n                      showSpacer={hasCol2Descriptions}\n                      onClick={() => handleItemLinkClick(url, analytics?.label)}\n                      dataset={isExpanded ? dataset : undefined}\n                      isUrlCurrent={isUrlCurrent?.(url)}\n                    />\n                  )\n                )}\n              </div>\n            </div>\n          )}\n\n          {/* Column 3 */}\n          {!!col3Items?.length && (\n            <div>\n              <div\n                className={cx(navigatorItemDesktopMenuColCss, {\n                  [navigatorItemDesktopMenuColWithDividerCss]: colsWithDivider.includes(3),\n                })}\n              >\n                {!!col3Label && (\n                  <span className={navigatorItemDesktopMenuColLabelCss}>{col3Label}</span>\n                )}\n                {col3Items?.map(\n                  ({ url, title, description, icon, media, analytics, dataset }, i) => (\n                    <NavigatorItemLink\n                      key={i}\n                      url={url}\n                      title={title}\n                      description={description}\n                      icon={showCol3Icons ? icon : undefined}\n                      media={showCol3Icons ? media : undefined}\n                      showSpacer={hasCol3Descriptions}\n                      onClick={() => handleItemLinkClick(url, analytics?.label)}\n                      dataset={isExpanded ? dataset : undefined}\n                      isUrlCurrent={isUrlCurrent?.(url)}\n                    />\n                  )\n                )}\n              </div>\n            </div>\n          )}\n\n          {/* Spacer columns */}\n          {Array.from({ length: numOfSpacers }).map((_, i) => (\n            <div key={i} />\n          ))}\n\n          {/* Featured item column */}\n          {!!featuredItem && (\n            <div>\n              <div className={navigatorItemDesktopMenuColCss}>\n                <NavigatorItemFeaturedLink\n                  url={featuredItem.url}\n                  title={featuredItem.title}\n                  description={featuredItem.description}\n                  icon={featuredItem.icon}\n                  media={featuredItem.media}\n                  ctaLabel={featuredItem.ctaLabel}\n                  onClick={() =>\n                    handleItemLinkClick(featuredItem.url, featuredItem.analytics?.label)\n                  }\n                  analytics={featuredItem.analytics}\n                  dataset={isExpanded ? featuredItem.dataset : undefined}\n                  isUrlCurrent={isUrlCurrent?.(featuredItem.url)}\n                />\n              </div>\n            </div>\n          )}\n        </div>\n      </div>\n    </section>\n  );\n};\n\nNavigatorItemDesktop.displayName = 'NavigatorItemDesktop';\n", "/**\n * Checks if the destination URL matches with the current url as in window.location. This is the\n * default function for checking if a navigation item should be highlighted in the breadcrumb.\n */\n\nexport function defaultIsUrlCurrent(location?: Location): (url: string) => boolean {\n  return (destinationUrl: string): boolean => {\n    if (!location) {\n      return false;\n    }\n\n    try {\n      const base = `${location.protocol}//${location.hostname}`;\n      const destUrl = new URL(destinationUrl, base);\n\n      const currentUrlHost = location.hostname;\n      const currentUrlPath = location.pathname;\n\n      return currentUrlHost === destUrl.hostname && currentUrlPath === destUrl.pathname;\n    } catch (_error) {\n      return false;\n    }\n  };\n}\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { m } from '../../../motif';\nimport { dataSetToAttributes } from '../../../utils';\nimport { Icon } from '../../Icon';\nimport { PrimitivesContext } from '../../Primitives';\nimport { IconOrImage } from '../IconOrImage';\nimport {\n  navigatorItemFeaturedLinkActiveCss,\n  navigatorItemFeaturedLinkCss,\n  navigatorItemFeaturedLinkCtaContainerCss,\n  navigatorItemFeaturedLinkCtaIconCss,\n  navigatorItemFeaturedLinkCtaTextCss,\n  navigatorItemFeaturedLinkDescriptionCss,\n  navigatorItemFeaturedLinkTitleClassName,\n  navigatorItemFeaturedLinkTitleCss,\n} from './NavigatorItemFeaturedLink.styled';\nimport type { NavigatorItemFeaturedLinkProps } from './types';\n\nexport const NavigatorItemFeaturedLink: FC<NavigatorItemFeaturedLinkProps> = ({\n  url,\n  title,\n  dataset,\n  description,\n  icon,\n  media,\n  ctaLabel,\n  onClick,\n  isUrlCurrent,\n}) => {\n  const { Anchor } = useContext(PrimitivesContext);\n\n  return (\n    <Anchor\n      className={cx('sdsm-nav-featured-link', navigatorItemFeaturedLinkCss, {\n        [navigatorItemFeaturedLinkActiveCss]: isUrlCurrent,\n      })}\n      href={url}\n      role=\"menuitem\"\n      onClick={onClick}\n      {...dataSetToAttributes(dataset)}\n    >\n      {(icon || media) && (\n        <IconOrImage\n          icon={icon}\n          media={media}\n          size={48}\n          fill={m('--global-header-menu-featured-item-icon-color')}\n        />\n      )}\n      <span\n        className={cx(navigatorItemFeaturedLinkTitleClassName, navigatorItemFeaturedLinkTitleCss)}\n      >\n        {title}\n      </span>\n      <span className={navigatorItemFeaturedLinkDescriptionCss}>{description}</span>\n      <span className={navigatorItemFeaturedLinkCtaContainerCss}>\n        <span className={navigatorItemFeaturedLinkCtaTextCss}>{ctaLabel}</span>\n        <Icon\n          className={navigatorItemFeaturedLinkCtaIconCss}\n          size={24}\n          name=\"arrow-right\"\n          fill={m('--global-header-menu-featured-item-fg-color')}\n        />\n      </span>\n    </Anchor>\n  );\n};\n\nNavigatorItemFeaturedLink.displayName = 'NavigatorItemFeaturedLink';\n", "import { Icon } from '../../Icon';\nimport { Picture } from '../../Picture';\nimport type { IconOrImageProps } from './types';\n\nexport const IconOrImage = ({ fill, icon, media, size }: IconOrImageProps) => {\n  // Icon takes precendence if provided\n  if (icon) {\n    return <Icon size={size} name={icon.name} fill={icon.fill ? icon.fill : fill} />;\n  }\n\n  // Otherwise use image if provided\n  if (media) {\n    const { altText, imgSrcs } = media;\n    return <Picture imgSrcs={imgSrcs} width={size} height={size} altText={altText} />;\n  }\n\n  return null;\n};\n\nIconOrImage.displayName = 'IconOrImage';\n", "import { css } from '@emotion/css';\n\nimport { nonMobileMediaQuery } from '../../../constants';\nimport { m } from '../../../motif/m';\n\nexport const navigatorItemFeaturedLinkTitleClassName = 'sdsm-nav-featured-link-title';\n\nexport const navigatorItemFeaturedLinkCss = css`\n  align-items: flex-start;\n  background-color: ${m('--global-header-menu-featured-item-bg-color')};\n  border-radius: ${m('--global-header-menu-featured-item-border-radius')};\n  color: ${m('--global-header-menu-featured-item-fg-color')};\n  cursor: pointer;\n  display: flex;\n  flex-direction: column;\n  gap: ${m('--spacing-s')};\n  padding: ${m('--spacing-m')};\n  text-decoration: none;\n  transition: background-color 0.2s linear;\n\n  &:hover {\n    color: ${m('--global-header-menu-featured-item-hover-color')};\n    background-color: ${m('--global-header-menu-featured-item-bg-hover-color')};\n  }\n`;\n\n/*\n * Reusing the --global-header-menu-featured-item-bg-hover-color and --global-header-menu-featured-item-hover-color\n * variables since they match the color values defined by Design. This may change in the future.\n */\nexport const navigatorItemFeaturedLinkActiveCss = css`\n  background-color: ${m('--global-header-menu-featured-item-bg-hover-color')};\n  color: ${m('--global-header-menu-featured-item-hover-color')};\n\n  & .${navigatorItemFeaturedLinkTitleClassName} {\n    color: ${m('--global-header-menu-featured-item-active-color')};\n  }\n\n  &:hover {\n    & .${navigatorItemFeaturedLinkTitleClassName} {\n      color: ${m('--global-header-menu-featured-item-active-color')};\n    }\n  }\n`;\n\nexport const navigatorItemFeaturedLinkTitleCss = css`\n  && {\n    font-size: ${m('--p2-desktop-font-size')};\n    font-weight: 500;\n    line-height: ${m('--p2-desktop-font-line-height')};\n    margin: 0;\n  }\n`;\n\nexport const navigatorItemFeaturedLinkDescriptionCss = css`\n  && {\n    font-size: ${m('--p3-desktop-font-size')};\n    font-weight: 400;\n    line-height: ${m('--p3-desktop-font-line-height')};\n    margin: 0;\n  }\n`;\n\nexport const navigatorItemFeaturedLinkCtaContainerCss = css`\n  && {\n    align-items: center;\n    display: flex;\n    gap: ${m('--spacing-xs')};\n    justify-content: end;\n    margin: auto 0 0 0;\n    width: 100%;\n  }\n`;\n\nexport const navigatorItemFeaturedLinkCtaTextCss = css`\n  && {\n    font-size: ${m('--p3-desktop-font-size')};\n    font-weight: 400;\n    line-height: ${m('--p3-desktop-font-line-height')};\n    margin: auto 0 0 0;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n\n    ${nonMobileMediaQuery} {\n      opacity: 0;\n      transform: translateX(${m('--spacing-xs')});\n      transition: opacity 0.2s linear, transform 0.2s ease-in-out;\n\n      [dir='rtl'] & {\n        transform: translateX(calc(${m('--spacing-xs')} * -1));\n      }\n\n      ${`.${navigatorItemFeaturedLinkCss}`}:hover &,\n    ${`.${navigatorItemFeaturedLinkCss}`}:focus & {\n        opacity: 1;\n        transform: translateX(0);\n      }\n    }\n  }\n`;\n\nexport const navigatorItemFeaturedLinkCtaIconCss = css`\n  [dir='rtl'] & {\n    transform: scaleX(-1);\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { m } from '../../../motif';\nimport { dataSetToAttributes } from '../../../utils';\nimport { PrimitivesContext } from '../../Primitives';\nimport { IconOrImage } from '../IconOrImage';\nimport {\n  navigatorItemLinkActiveCss,\n  navigatorItemLinkCss,\n  navigatorItemLinkIconCss,\n  navigatorItemLinkSpacerCss,\n  navigatorItemLinkTextCss,\n  navigatorItemLinkTextDescriptionCss,\n  navigatorItemLinkTextTitleClassName,\n  navigatorItemLinkTextTitleCss,\n} from './NavigatorItemLink.styled';\nimport type { NavigatorItemLinkProps } from './types';\n\nexport const NavigatorItemLink: FC<NavigatorItemLinkProps> = ({\n  url,\n  title,\n  dataset,\n  description,\n  icon,\n  media,\n  showSpacer,\n  onClick,\n  isUrlCurrent,\n}) => {\n  const { Anchor } = useContext(PrimitivesContext);\n\n  return (\n    <>\n      <Anchor\n        className={cx('sdsm-nav-link', navigatorItemLinkCss, {\n          [navigatorItemLinkActiveCss]: isUrlCurrent,\n        })}\n        href={url}\n        role=\"menuitem\"\n        onClick={onClick}\n        {...dataSetToAttributes(dataset)}\n      >\n        {(icon || media) && (\n          <span className={navigatorItemLinkIconCss}>\n            <IconOrImage\n              icon={icon}\n              media={media}\n              size={24}\n              fill={m('--global-header-menu-item-icon-color')}\n            />\n          </span>\n        )}\n        <span className={navigatorItemLinkTextCss}>\n          <span className={cx(navigatorItemLinkTextTitleClassName, navigatorItemLinkTextTitleCss)}>\n            {title}\n          </span>\n          {!!description && (\n            <span className={navigatorItemLinkTextDescriptionCss}>{description}</span>\n          )}\n        </span>\n      </Anchor>\n      {/* If there are other items in the same column with a description, add extra space so that\n          all items appear the same size */}\n      {!description && showSpacer ? (\n        <span className={navigatorItemLinkSpacerCss}>&nbsp;</span>\n      ) : null}\n    </>\n  );\n};\n\nNavigatorItemLink.displayName = 'NavigatorItemLink';\n", "import { css } from '@emotion/css';\n\nimport { m } from '../../../motif/m';\n\nexport const navigatorItemLinkTextTitleClassName = 'sdsm-navigator-item-link-text-title';\n\nexport const navigatorItemLinkCss = css`\n  background-color: transparent;\n  border-radius: ${m('--global-header-menu-item-border-radius')};\n  color: ${m('--global-header-menu-item-fg-color')};\n  cursor: pointer;\n  display: flex;\n  gap: 8px;\n  padding: 16px;\n  text-decoration: none;\n  transition: background-color 0.2s linear;\n  width: 100%;\n\n  :hover {\n    background-color: ${m('--global-header-menu-item-bg-hover-color')};\n\n    & .${navigatorItemLinkTextTitleClassName} {\n      color: ${m('--global-header-menu-item-hover-color')};\n    }\n  }\n`;\n\nexport const navigatorItemLinkActiveCss = css`\n  background-color: ${m('--global-header-menu-item-bg-hover-color')};\n  color: ${m('--global-header-menu-item-hover-color')};\n\n  & .${navigatorItemLinkTextTitleClassName} {\n    color: ${m('--global-header-menu-item-active-color')};\n  }\n\n  :hover {\n    & .${navigatorItemLinkTextTitleClassName} {\n      color: ${m('--global-header-menu-item-active-color')};\n    }\n  }\n`;\n\nexport const navigatorItemLinkIconCss = css`\n  && {\n    margin: 1px 0 0 0;\n    min-width: 24px;\n  }\n`;\n\nexport const navigatorItemLinkTextCss = css`\n  && {\n    display: flex;\n    flex-direction: column;\n    gap: ${m('--spacing-xs')};\n    margin: 0;\n\n    span {\n      margin: 0;\n    }\n  }\n`;\n\nexport const navigatorItemLinkTextTitleCss = css`\n  && {\n    font-size: ${m('--p2-desktop-font-size')};\n    font-weight: 500;\n    line-height: ${m('--p2-desktop-font-line-height')};\n    margin: 0;\n  }\n`;\n\nexport const navigatorItemLinkTextDescriptionCss = css`\n  && {\n    font-size: ${m('--p3-desktop-font-size')};\n    font-weight: 400;\n    line-height: ${m('--p3-desktop-font-line-height')};\n    margin: 0;\n  }\n`;\n\nexport const navigatorItemLinkSpacerCss = css`\n  && {\n    font-size: ${m('--p3-desktop-font-size')};\n    font-weight: 400;\n    line-height: ${m('--p3-desktop-font-line-height')};\n    margin: 0 0 ${m('--spacing-xs')} 0;\n  }\n`;\n", "import type { NavigatorItemMobileProps } from './NavigatorItemMobile/types';\n\n/**\n * Utility to get Header menu's column dividers. Dividers are shown if header menu has two or more\n * columns.\n *\n * @param {string} props.col1Label - The label for the first column.\n * @param {NavigatorItemProps[]} props.col1Items - The items in the first column.\n * @param {string} props.col2Label - The label for the second column.\n * @param {NavigatorItemProps[]} props.col2Items - The items in the second column.\n * @param {string} props.col3Label - The label for the third column.\n * @param {NavigatorItemProps[]} props.col3Items - The items in the third column.\n * @returns {number[]} An array of column IDs that should have a divider.\n */\nexport const getColsWithDivider = ({\n  col1Label,\n  col1Items = [],\n  col2Label,\n  col2Items = [],\n  col3Label,\n  col3Items = [],\n}: NavigatorItemMobileProps) => {\n  // Dividers should be shown either side of a column with a label (excluding the first and last column edges)\n  // This can be achieved by adding a divider to the left side (right side for RTL languages) of columns if they\n  // have a label or the next column has a label\n  const colsWithDivider = [\n    { id: 1, hasItems: !!col1Items?.length, hasLabel: !!col1Label },\n    { id: 2, hasItems: !!col2Items?.length, hasLabel: !!col2Label },\n    { id: 3, hasItems: !!col3Items?.length, hasLabel: !!col3Label },\n  ]\n    // Remove columns that do not have items as those columns will not be rendered\n    .filter(({ hasItems }) => hasItems)\n    // Remove items that don't have a label or are next to a column that has a label\n    // This is because each columns divider also acts as a divider for the previous column\n    .filter((col, i, arr) => {\n      const prevCol = arr[i - 1];\n      const isFirstCol = i === 0;\n      const hasDivider = col.hasLabel || prevCol?.hasLabel;\n\n      // Remove the first item as we never want it to have a left divider as the menu's edge\n      return !isFirstCol && hasDivider;\n    })\n    // Map to just the column id for ease of use\n    .map(({ id }) => id);\n\n  return colsWithDivider;\n};\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery } from '../../../constants';\nimport { m } from '../../../motif/m';\nimport { globalHeaderHeight } from '../../GlobalHeader/GlobalHeader.constants';\n\nexport const navigatorItemDesktopCss = css`\n  align-items: center;\n  color: ${m('--global-header-navigator-item-color')};\n  display: flex;\n  /* Set font-family here or the var from the default motif is used */\n  font-family: ${m('--font-family')};\n  font-size: ${m('--action-desktop-font-size')};\n  font-weight: 500;\n  line-height: ${globalHeaderHeight}px;\n  margin-left: ${m('--spacing-m')};\n  margin-right: ${m('--spacing-m')};\n  padding-bottom: 0;\n  padding-top: 0;\n  text-decoration: none;\n  text-transform: ${m('--global-header-navigator-item-desktop-font-text-transform')};\n  white-space: nowrap;\n\n  ${mobileMediaQuery} {\n    font-size: ${m('--action-mobile-font-size')};\n  }\n\n  &:hover {\n    color: ${m('--global-header-navigator-item-hover-color')};\n  }\n\n  & span {\n    position: relative; /* For the underline */\n    overflow-y: hidden;\n  }\n\n  /** Custom underline */\n  & > span::after {\n    /* TODO: consolidate the rounded underline css? */\n    background-color: ${m('--global-header-navigator-indicator-active-color')};\n    bottom: -8px;\n    content: '';\n    height: 8px;\n    left: 0;\n    position: absolute;\n    border-radius: ${m('--action-indicator-border-radius')};\n    transform: translateY(0);\n    transition: all 0.15s ease;\n    width: 100%;\n  }\n\n  &:hover > span::after {\n    opacity: ${m('--action-indicator-hover-opacity')};\n    transform: translateY(-4px);\n  }\n\n  & > span.selected {\n    color: ${m('--global-header-navigator-item-active-color')};\n  }\n\n  & > span.selected::after {\n    opacity: 1;\n    transform: translateY(-4px);\n  }\n\n  &:hover > span.selected::after {\n    background-color: ${m('--global-header-navigator-indicator-active-color')};\n  }\n`;\n\nexport const navigatorItemDesktopClickableCss = css`\n  cursor: pointer;\n`;\n\nexport const navigatorItemDesktopIconCss = css`\n  /**\n   * use negative margin to make icon take up space same as previous\n   */\n  margin: calc(${m('--spacing-xxs')} * -1);\n  fill: ${m('--global-header-navigator-item-color')};\n\n  margin-left: calc(${m('--spacing-xs')} - 4px);\n  *[dir='rtl'] & {\n    margin-right: calc(${m('--spacing-xs')} - 4px);\n  }\n`;\n\nexport const navigatorItemDesktopMenuCss = css`\n  background-color: ${m('--global-header-menu-bg-color')};\n  border: ${m('--border-width-xs')} solid ${m('--global-header-menu-border-color')};\n  border-radius: ${m('--global-header-menu-border-radius')};\n  border-top: none;\n  box-shadow: ${m('--global-header-menu-box-shadow')};\n  /* Trim box shadow from the top, otherwise it will overlap the main header bar */\n  clip-path: inset(0 -20px -20px -20px);\n  left: 50%;\n  max-width: calc(100vw - 2 * ${m('--spacing-m')});\n  opacity: 0;\n  padding: ${m('--spacing-l')};\n  position: absolute;\n  top: 100%;\n\n  /* Safari fix: with the translateZ fix from below, we need this because for some\n  reason there is a tiny 1px gap between the menu and the navbar sometimes.\n  We accomadate for this by adding 1px of padding so visually looks the same */\n  margin-top: -1px;\n  padding-top: calc(${m('--spacing-l')} + 1px);\n\n  /*\n    We NEED translateZ(0) otherwise the menu flickers for some reason on safari\n    https://developer.apple.com/forums/thread/705172\n    not official, but other people have used this workaround\n  */\n  transform: translate(-50%, 0) translateZ(0);\n  transition: opacity 0.2s linear, visibility 0.2s linear;\n  visibility: hidden;\n  width: 1080px;\n`;\n\nexport const navigatorItemDesktopMenu4ColCss = css`\n  width: 1280px;\n`;\n\n/** Anchor menu position to parent element, aligns right edges of parent and menu. */\nexport const navigatorItemDesktopRightAlignedCss = css`\n  position: relative;\n\n  > div.sdsm-nav-item-menu {\n    transform: unset;\n    left: unset;\n    right: 0;\n  }\n`;\n\n/** Anchor menu position to parent element, aligns left edges of parent and menu. */\nexport const navigatorItemDesktopLeftAlignedCss = css`\n  position: relative;\n\n  > div.sdsm-nav-item-menu {\n    transform: unset;\n    left: 0;\n  }\n`;\n\nexport const navigatorItemDesktopMenuExpandedCss = css`\n  opacity: 1;\n  visibility: visible;\n`;\n\nexport const navigatorItemDesktopMenuGridCss = css`\n  display: grid;\n  gap: ${m('--spacing-l')};\n  grid-template-columns: repeat(auto-fit, minmax(0, 1fr));\n`;\n\nexport const navigatorItemDesktopMenuColCss = css`\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n  position: relative;\n`;\n\nexport const navigatorItemDesktopMenuColWithDividerCss = css`\n  &::before {\n    background-color: ${m('--global-header-menu-col-divider-color')};\n    bottom: 0;\n    content: '';\n    height: calc(100% - ${m('--spacing-m')});\n    left: calc(${m('--spacing-s')} * -1);\n    position: absolute;\n    width: 1px;\n\n    [dir='rtl'] & {\n      left: auto;\n      right: calc(${m('--spacing-s')} * -1);\n    }\n  }\n`;\n\nexport const navigatorItemDesktopMenuColLabelCss = css`\n  && {\n    color: ${m('--global-header-menu-col-label-color')};\n    font-size: ${m('--p3-desktop-font-size')};\n    font-weight: 500;\n    letter-spacing: -0.01em;\n    line-height: ${m('--p3-desktop-font-line-height')};\n    margin: ${m('--spacing-m')};\n    overflow: hidden;\n    text-overflow: ellipsis;\n    text-transform: uppercase;\n    white-space: nowrap;\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../../motif';\nimport { dataSetToAttributes } from '../../../utils';\nimport { GlobalHeaderContext } from '../../GlobalHeader';\nimport { PrimitivesContext } from '../../Primitives';\nimport type { NavigatorItemProps } from '../NavigatorItemDesktop';\nimport { NavigatorItemFeaturedLink } from '../NavigatorItemFeaturedLink';\nimport { getColsWithDivider } from '../utils';\nimport {\n  navigatorItemActiveMobileTextCss,\n  navigatorItemMobileColCss,\n  navigatorItemMobileColLabelCss,\n  navigatorItemMobileColWithDividerCss,\n  navigatorItemMobileCss,\n  navigatorItemMobileFeaturedItemCss,\n  navigatorItemMobileTextCss,\n} from './NavigatorItemMobile.styled';\nimport type { NavigatorItemMobileProps } from './types';\n\nexport const NavigatorItemMobile: FC<NavigatorItemMobileProps> = ({\n  col1Label,\n  col1Items = [],\n  col2Label,\n  col2Items = [],\n  col3Label,\n  col3Items = [],\n  featuredItem,\n  onClick,\n  className,\n}) => {\n  useMotifStyles(MotifComponent.HEADER);\n  const { Anchor } = useContext(PrimitivesContext);\n  const { isUrlCurrent } = useContext(GlobalHeaderContext);\n\n  const colsWithDivider = getColsWithDivider({\n    col1Label,\n    col1Items,\n    col2Label,\n    col2Items,\n    col3Label,\n    col3Items,\n  });\n\n  /**\n   * Very similar to the NavigatorItemLink component, but trimmed down for rendering on mobile\n   * (omits descriptive text, icons, etc.)\n   */\n  const NavigatorItemLinkMobile: FC<NavigatorItemProps> = ({\n    url,\n    title,\n    analytics,\n    dataset,\n    isUrlCurrent,\n  }) => (\n    <div\n      className={cx(navigatorItemMobileTextCss, {\n        [navigatorItemActiveMobileTextCss]: isUrlCurrent,\n      })}\n      {...dataSetToAttributes(dataset)}\n    >\n      <Anchor className=\"sdsm-nav-link\" href={url} onClick={() => onClick?.(url, analytics?.label)}>\n        {title}\n      </Anchor>\n    </div>\n  );\n\n  return (\n    <div className={cx(navigatorItemMobileCss, 'sdsm-nav-item-mobile', className)}>\n      {/* Column 1 */}\n      {!!col1Items?.length && (\n        <div\n          className={cx(navigatorItemMobileColCss, {\n            [navigatorItemMobileColWithDividerCss]: colsWithDivider.includes(1),\n          })}\n        >\n          {!!col1Label && <div className={navigatorItemMobileColLabelCss}>{col1Label}</div>}\n          {col1Items?.map(({ url, title, analytics, dataset }, i) => (\n            <NavigatorItemLinkMobile\n              key={i}\n              url={url}\n              title={title}\n              analytics={analytics}\n              dataset={dataset}\n              isUrlCurrent={isUrlCurrent?.(url)}\n            />\n          ))}\n        </div>\n      )}\n\n      {/* Column 2 */}\n      {!!col2Items?.length && (\n        <div\n          className={cx(navigatorItemMobileColCss, {\n            [navigatorItemMobileColWithDividerCss]: colsWithDivider.includes(2),\n          })}\n        >\n          {!!col2Label && <div className={navigatorItemMobileColLabelCss}>{col2Label}</div>}\n          {col2Items?.map(({ url, title, analytics, dataset }, i) => (\n            <NavigatorItemLinkMobile\n              key={i}\n              url={url}\n              title={title}\n              analytics={analytics}\n              dataset={dataset}\n              isUrlCurrent={isUrlCurrent?.(url)}\n            />\n          ))}\n        </div>\n      )}\n\n      {/* Column 3 */}\n      {!!col3Items?.length && (\n        <div\n          className={cx(navigatorItemMobileColCss, {\n            [navigatorItemMobileColWithDividerCss]: colsWithDivider.includes(3),\n          })}\n        >\n          {!!col3Label && <div className={navigatorItemMobileColLabelCss}>{col3Label}</div>}\n          {col3Items?.map(({ url, title, analytics, dataset }, i) => (\n            <NavigatorItemLinkMobile\n              key={i}\n              url={url}\n              title={title}\n              analytics={analytics}\n              dataset={dataset}\n              isUrlCurrent={isUrlCurrent?.(url)}\n            />\n          ))}\n        </div>\n      )}\n\n      {/* Featured item */}\n      {!!featuredItem && (\n        <div className={navigatorItemMobileFeaturedItemCss}>\n          <NavigatorItemFeaturedLink\n            url={featuredItem.url}\n            title={featuredItem.title}\n            description={featuredItem.description}\n            icon={featuredItem.icon}\n            media={featuredItem.media}\n            ctaLabel={featuredItem.ctaLabel}\n            onClick={() => onClick?.(featuredItem.url, featuredItem.analytics?.label)}\n            dataset={featuredItem.dataset}\n            isUrlCurrent={isUrlCurrent?.(featuredItem.url)}\n          />\n        </div>\n      )}\n    </div>\n  );\n};\n\nNavigatorItemMobile.displayName = 'NavigatorItemMobile';\n", "import { css } from '@emotion/css';\n\nimport { m } from '../../../motif/m';\n\nexport const navigatorItemMobileCss = css`\n  display: flex;\n  flex-direction: column;\n  gap: ${m('--spacing-s')};\n  padding: ${m('--spacing-m')} 0;\n  padding-inline-start: ${m('--spacing-m')};\n`;\n\nexport const navigatorItemMobileColCss = css`\n  display: flex;\n  flex-direction: column;\n  gap: ${m('--spacing-s')};\n`;\n\nexport const navigatorItemMobileColWithDividerCss = css`\n  border-top: 1px solid ${m('--global-header-menu-col-divider-color')};\n  margin-top: ${m('--spacing-s')};\n  padding-top: ${m('--spacing-l')};\n`;\n\nexport const navigatorItemMobileTextCss = css`\n  && {\n    color: ${m('--global-header-menu-item-fg-color')};\n    font-size: ${m('--p2-desktop-font-size')};\n    font-weight: 400;\n    line-height: ${m('--p2-desktop-font-line-height')};\n\n    a {\n      color: ${m('--global-header-menu-item-fg-color')};\n    }\n\n    a:hover {\n      color: ${m('--global-header-menu-item-hover-color')};\n    }\n  }\n`;\n\nexport const navigatorItemActiveMobileTextCss = css`\n  && {\n    a {\n      color: ${m('--global-header-menu-item-active-color')};\n    }\n\n    a:hover {\n      color: ${m('--global-header-menu-item-active-color')};\n    }\n  }\n`;\n\nexport const navigatorItemMobileColLabelCss = css`\n  && {\n    color: ${m('--global-header-menu-col-label-color')};\n    font-size: ${m('--p3-desktop-font-size')};\n    font-weight: 500;\n    letter-spacing: -0.01em;\n    line-height: ${m('--p3-desktop-font-line-height')};\n    overflow: hidden;\n    text-overflow: ellipsis;\n    text-transform: uppercase;\n    white-space: nowrap;\n  }\n`;\n\nexport const navigatorItemMobileFeaturedItemCss = css`\n  margin-top: ${m('--spacing-s')};\n  margin-inline-start: calc(${m('--spacing-m')} * -1);\n\n  :first-child {\n    margin-top: 0;\n  }\n`;\n", "import { css, cx } from '@emotion/css';\nimport type { FC, PropsWithChildren, ReactElement } from 'react';\nimport { Children, cloneElement, useEffect } from 'react';\n\nconst scrollSnapItemCss = css`\n  scroll-snap-align: center;\n`;\n\ninterface SliderElement extends ReactElement {\n  className: string;\n}\n\nexport const ScrollSnapContainer: FC<PropsWithChildren> = ({ children }) => {\n  useEffect(() => {\n    if (typeof window === 'undefined') return;\n\n    const html = document.getElementsByTagName('html')[0]!;\n    const body = document.body;\n    // NOTE: We want scroll snap to be view height so it needs to be added to the html element.\n    // Though it's possible the style needs to be on the body.\n    // See https://css-tricks.com/practical-css-scroll-snapping/#aa-example-3-vertical-full-screen\n    // TODO: This doesn't seem to work anymore. Tracking ticket: https://jira.sc-corp.net/browse/ENTWEB-8974\n    html.style.scrollSnapType = 'y proximity';\n    body.style.scrollSnapType = 'y proximity';\n\n    return () => {\n      html.style.scrollSnapType = 'none';\n      body.style.scrollSnapType = 'none';\n    };\n  }, []);\n\n  const childrenArray = Children.toArray(children);\n\n  return (\n    <>\n      {children &&\n        childrenArray.map((child, index) => {\n          const sliderChild = child as SliderElement;\n          const isLastItem = index === childrenArray.length - 1;\n          return cloneElement(sliderChild, {\n            className: cx({ [scrollSnapItemCss]: !isLastItem }, sliderChild.className),\n          });\n        })}\n    </>\n  );\n};\n", "import { cx } from '@emotion/css';\nimport type { CSSProperties, FC, PropsWithChildren } from 'react';\n\nimport type { BackgroundColor } from '../../constants';\nimport { BackgroundStyle } from '../../constants/background';\nimport type { MotifScheme } from '../../motif';\nimport { m, MotifComponent, useMotifStyles } from '../../motif';\nimport type { BaseComponentProps, ImageSources } from '../../types';\nimport { getBackgroundClassName } from '../../utils';\nimport { Picture } from '../Picture';\nimport { Video } from '../Video';\nimport {\n  backgroundMediaCss,\n  fixedBackgroundMediaCss,\n  innerContainerCss,\n  outerContainerCss,\n  pageBgColorCss,\n  pageGutterCss,\n  pageTransparentBgCss,\n} from './Page.styled';\nimport { ScrollSnapContainer } from './ScrollSnapContainer';\n\nexport interface PageProps extends BaseComponentProps {\n  motifScheme?: MotifScheme;\n  /** @deprecated Use motifScheme instead. */\n  backgroundColor?: BackgroundColor;\n  backgroundImageSources?: ImageSources;\n  backgroundMediaStyle?: BackgroundStyle; // Not CSS properties\n  backgroundPosterSource?: string;\n  backgroundVideoSource?: string;\n  mobileBackgroundVideoSource?: string;\n  scrollSnap?: boolean;\n  gutterMatchesPageBackground?: boolean;\n}\n\nexport const Page: FC<PropsWithChildren<PageProps>> = ({\n  motifScheme,\n  backgroundColor: pageBackgroundColor,\n  backgroundImageSources,\n  backgroundMediaStyle = BackgroundStyle.Normal,\n  backgroundPosterSource,\n  backgroundVideoSource,\n  children,\n  className: pageClassName,\n  mobileBackgroundVideoSource,\n  scrollSnap,\n  gutterMatchesPageBackground,\n}) => {\n  useMotifStyles(MotifComponent.PAGE);\n\n  const innerContainerClassName = cx(\n    innerContainerCss,\n    motifScheme ?? getBackgroundClassName(pageBackgroundColor),\n    pageGutterCss,\n    pageClassName,\n    /**\n     * Need set bg to transparent if bg img or video because we need to keep z-index: -1 on the\n     * background media to ensure it's behind the content because some content does not set\n     * position: relative. TODO: This is a temporary solution until we have a better way to handle\n     * (specifically, cheerios is broken without this, can potentially be fixed by setting\n     * position:relative on CheeriosStaticBlock) https://jira.sc-corp.net/browse/WEBP-9706\n     *\n     * TLDR: If there is no background media, we can use the page background color, otherwise its\n     * transparent.\n     */\n    backgroundImageSources || backgroundVideoSource ? pageTransparentBgCss : pageBgColorCss\n  );\n\n  const gutterColorCss: CSSProperties | undefined = gutterMatchesPageBackground\n    ? {\n        // @ts-ignore using a css variable\n        '--gutter-color': m('--bg-color'), // Use the page background color as gutter color\n      }\n    : undefined;\n\n  /**\n   * Split `container-*` styles out to a separate wrapper to resolve issues with margins when\n   * 'container-type' is applied, e.g. Snap.com home page\n   */\n  return (\n    <div data-testid={MotifComponent.PAGE} className={cx(outerContainerCss, MotifComponent.PAGE)}>\n      <div className={innerContainerClassName} style={gutterColorCss}>\n        {backgroundImageSources && (\n          <Picture\n            imgSrcs={backgroundImageSources}\n            imgClassName={\n              backgroundMediaStyle === BackgroundStyle.Fixed\n                ? fixedBackgroundMediaCss\n                : backgroundMediaCss\n            }\n            fetchPriority=\"auto\"\n          />\n        )}\n        {backgroundVideoSource ? (\n          <Video\n            className={\n              backgroundMediaStyle === BackgroundStyle.Fixed\n                ? fixedBackgroundMediaCss\n                : backgroundMediaCss\n            }\n            source={backgroundVideoSource}\n            mobileSource={mobileBackgroundVideoSource}\n            posterSource={backgroundPosterSource}\n            isBackgroundVideo\n          />\n        ) : undefined}\n        {scrollSnap ? <ScrollSnapContainer>{children}</ScrollSnapContainer> : children}\n      </div>\n    </div>\n  );\n};\n\nPage.displayName = 'Page';\n", "import { cx } from '@emotion/css';\nimport { type FC, useContext } from 'react';\n\nimport { MessageContext } from '../../contexts';\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { PaginationItem } from './PaginationItem';\nimport { paginationCss } from './styles';\nimport type { PaginationProps } from './types';\nimport { getPaginationItems } from './utils';\n\n/**\n * Component to render the pagination\n *\n * @param className Extra classnames for the pagination wrapper\n * @param totalPages Number of total pages of the pagination\n * @param currentPage Current page of the pagination\n * @param onChange Called whenever there's a valid new page to go to.\n */\nexport const Pagination: FC<PaginationProps> = ({\n  ariaLabel,\n  className,\n  totalPages,\n  currentPage,\n  onChange,\n}) => {\n  useMotifStyles(MotifComponent.PAGINATION);\n\n  const { formatMessage } = useContext(MessageContext);\n  const previousPageMessage = formatMessage({\n    id: 'pagination-go-to-previous-page',\n    defaultMessage: 'Go to previous page',\n  });\n  const nextPageMessage = formatMessage({\n    id: 'pagination-go-to-next-page',\n    defaultMessage: 'Go to next page',\n  });\n\n  const goToPageMessage = (pageNumber: string) =>\n    formatMessage(\n      {\n        id: 'pagination-go-to-page',\n        defaultMessage: 'Go to page {page}',\n      },\n      { page: pageNumber }\n    );\n\n  if (!totalPages || !currentPage || totalPages === 1) return null;\n\n  const handlePageChange = (newPage: number) => () => {\n    if (newPage >= 1 && newPage <= totalPages && newPage !== currentPage) {\n      onChange(newPage);\n    }\n  };\n\n  const paginationItems = getPaginationItems(totalPages, currentPage);\n\n  return (\n    <nav aria-label={ariaLabel} className={cx(MotifComponent.PAGINATION, className)}>\n      <ul className={paginationCss}>\n        <PaginationItem\n          disabled={currentPage === 1}\n          handlePageChange={handlePageChange(currentPage - 1)}\n          type=\"previous\"\n          ariaLabel={previousPageMessage}\n        />\n        {paginationItems.map((item, index) => {\n          if (Array.isArray(item)) {\n            if (!item.length) return null;\n\n            return (\n              <li key={index}>\n                <span>...</span>\n              </li>\n            );\n          }\n\n          return (\n            <PaginationItem\n              ariaLabel={item === currentPage ? `${item}` : `${goToPageMessage(String(item))}`}\n              handlePageChange={handlePageChange(item)}\n              isActive={item === currentPage}\n              disabled={item === currentPage}\n              key={index}\n            >\n              {item}\n            </PaginationItem>\n          );\n        })}\n        <PaginationItem\n          disabled={currentPage === totalPages}\n          handlePageChange={handlePageChange(currentPage + 1)}\n          type=\"next\"\n          ariaLabel={nextPageMessage}\n        />\n      </ul>\n    </nav>\n  );\n};\n\nPagination.displayName = 'Pagination';\n", "import { css } from '@emotion/css';\n\nimport { nonMobileMediaQuery, smallMobileMediaQuery } from '../../constants';\nimport { m } from '../../motif/m';\n\nexport const paginationCss = css`\n  align-items: center;\n  display: flex;\n  height: 44px;\n  justify-content: center;\n  list-style: none;\n  margin: 0;\n  padding: ${m('--spacing-l')} 0;\n\n  ${nonMobileMediaQuery} {\n    padding-block-start: ${m('--spacing-xxxl')};\n  }\n\n  li {\n    display: flex;\n    justify-content: center;\n    position: relative;\n  }\n`;\n\nexport const paginationItemButtonCss = css`\n  background-color: transparent;\n  border: 0;\n  user-select: none;\n  color: ${m('--pagination-item-color')};\n  cursor: pointer;\n  font: inherit;\n  font-size: 16px;\n  height: 44px;\n  letter-spacing: 0.01em;\n  padding: 0;\n  width: 44px;\n\n  ${smallMobileMediaQuery} {\n    min-width: 40px;\n    padding-inline: ${m('--spacing-xxs')};\n    width: auto;\n  }\n`;\n\nexport const paginationItemCss = css`\n  ::after {\n    border-radius: ${m('--spacing-xxs')} ${m('--spacing-xxs')} 0 0;\n    bottom: 0;\n    content: ' ';\n    height: ${m('--spacing-xxs')};\n    position: absolute;\n    width: ${m('--spacing-l')};\n  }\n\n  ${nonMobileMediaQuery} {\n    &:hover::after {\n      background-color: ${m('--pagination-indicator-hover-color')};\n    }\n  }\n`;\n\nexport const activePaginationItemCss = css`\n  button {\n    color: ${m('--pagination-item-active-color')};\n    font-weight: 500;\n  }\n\n  ::after,\n  &:hover::after {\n    background-color: ${m('--pagination-indicator-active-color')};\n  }\n`;\n\nexport const arrowButtonCss = css`\n  *[dir='rtl'] & {\n    transform: rotate(180deg);\n  }\n`;\n\nexport const previousButtonCss = css`\n  margin-inline-end: ${m('--spacing-xxs')};\n\n  ${nonMobileMediaQuery} {\n    margin-inline-end: ${m('--spacing-l')};\n  }\n`;\n\nexport const nextButtonCss = css`\n  margin-inline-start: ${m('--spacing-xxs')};\n\n  ${nonMobileMediaQuery} {\n    margin-inline-start: ${m('--spacing-l')};\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport { IconButton } from '../IconButton';\nimport { IconButtonSize } from '../IconButton/IconButton.types';\nimport {\n  activePaginationItemCss,\n  arrowButtonCss,\n  nextButtonCss,\n  paginationItemButtonCss,\n  paginationItemCss,\n  previousButtonCss,\n} from './styles';\nimport type { PaginationItemProps } from './types';\n\nexport const PaginationItem: FC<PaginationItemProps> = ({\n  ariaLabel,\n  children,\n  disabled,\n  handlePageChange,\n  isActive,\n  type,\n}) => {\n  if (type === 'previous')\n    return (\n      <li>\n        <IconButton\n          size={IconButtonSize.SMALL}\n          iconName=\"chevron-left\"\n          aria-label={ariaLabel}\n          className={cx(arrowButtonCss, previousButtonCss)}\n          disabled={disabled}\n          onClick={handlePageChange}\n          tabIndex={disabled ? -1 : 0}\n          data-testid=\"pagination-item-previous\"\n        />\n      </li>\n    );\n\n  if (type === 'next')\n    return (\n      <li>\n        <IconButton\n          size={IconButtonSize.SMALL}\n          iconName=\"chevron-right\"\n          aria-label={ariaLabel}\n          className={cx(arrowButtonCss, nextButtonCss)}\n          disabled={disabled}\n          onClick={handlePageChange}\n          tabIndex={disabled ? -1 : 0}\n          data-testid=\"pagination-item-next\"\n        />\n      </li>\n    );\n\n  return (\n    <li\n      className={cx(paginationItemCss, {\n        [activePaginationItemCss]: isActive,\n      })}\n    >\n      <button\n        aria-label={ariaLabel}\n        aria-current={isActive}\n        className={paginationItemButtonCss}\n        disabled={disabled}\n        onClick={handlePageChange}\n        tabIndex={0}\n        type=\"button\"\n      >\n        {children?.toLocaleString()}\n      </button>\n    </li>\n  );\n};\n", "const range = (start: number, end: number) => {\n  const length = end - start + 1;\n  return Array.from({ length }, (_, index) => start + index);\n};\n\n/** Function to generate a list of pagination items e.g. itemList = [ 1, [2,3], 4, 5, 6, [7,8,9], 10] */\nexport const getPaginationItems = (\n  totalPages: number,\n  currentPage: number\n): Array<number | number[]> => {\n  // Number of always visible pages at the beginning and end\n  const boundaryCount = 1;\n\n  // Number of always visible pages before and after the current page\n  const siblingCount = 0;\n\n  // Start of the sibling range\n  const siblingsStart = Math.max(\n    Math.min(\n      currentPage - siblingCount,\n      // totalPages - page at beginning - sibilings for each side - current page\n      totalPages - boundaryCount - siblingCount * 2 - 1\n    ),\n    // Greater than pages that should display at the beginning\n    boundaryCount + 2\n  );\n\n  // End of the sibling range\n  const siblingsEnd = Math.min(\n    Math.max(\n      currentPage + siblingCount,\n      // upper boundary pages + sibilings for each side + current page + last page\n      boundaryCount + siblingCount * 2 + 2\n    ),\n    // Less than pages that should display at the end\n    totalPages - boundaryCount - 1\n  );\n\n  const hasStartEllipsis = siblingsStart > boundaryCount + 2;\n  const hasEndEllipsis = siblingsEnd < totalPages - boundaryCount - 1;\n\n  const pageBeforeEllipses =\n    boundaryCount + 1 < totalPages - boundaryCount ? boundaryCount + 1 : [];\n  const pageAfterEllipses =\n    totalPages - boundaryCount > boundaryCount ? totalPages - boundaryCount : [];\n\n  // range starts from first page + boundaryCount and stops before siblingsStart starts\n  const leftEllipsisRange = range(1 + boundaryCount, siblingsStart - 1);\n  // range starts after siblingsEnd ended and stops before last page - boundaryCount\n  const rightEllipsisRange = range(siblingsEnd + 1, totalPages - boundaryCount);\n\n  return [\n    1,\n    hasStartEllipsis ? leftEllipsisRange : pageBeforeEllipses,\n    ...range(siblingsStart, siblingsEnd),\n    hasEndEllipsis ? rightEllipsisRange : pageAfterEllipses,\n    totalPages,\n  ];\n};\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, nonMobileMediaQuery } from '../../constants';\nimport { m } from '../../motif/m';\n\nexport const bigQuoteCss = css`\n  font-size: 40px;\n  line-height: 40px;\n  margin-bottom: -20px;\n  margin-top: -8px;\n`;\n\nexport const startQuoteCss = css`\n  margin-inline-start: -16px;\n  text-align: start;\n`;\n\nexport const endQuoteCss = css`\n  margin-inline-end: -20px;\n  text-align: end;\n`;\n\nexport const quoteCss = css`\n  padding: ${m('--spacing-xl')};\n  border-radius: ${m('--border-radius-l')};\n\n  background-color: ${m('--quote-bg-color')};\n  color: ${m('--quote-fg-color')};\n`;\n\nexport const authorCss = css`\n  text-align: end;\n  margin-top: ${m('--spacing-s')};\n\n  ${nonMobileMediaQuery} {\n    font-size: ${m('--quote-author-desktop-font-size')};\n    font-weight: ${m('--quote-author-desktop-font-weight')};\n  }\n\n  ${mobileMediaQuery} {\n    font-size: ${m('--quote-author-mobile-font-size')};\n    font-weight: ${m('--quote-author-mobile-font-weight')};\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC, ReactNode } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { authorCss, bigQuoteCss, endQuoteCss, quoteCss, startQuoteCss } from './Quote.styled';\ninterface Props {\n  author?: ReactNode;\n  children?: ReactNode;\n}\n\nexport const Quote: FC<Props> = ({ author, children }) => {\n  useMotifStyles(MotifComponent.QUOTE);\n\n  return (\n    <div className={cx(MotifComponent.QUOTE, quoteCss)}>\n      <aside className={cx(startQuoteCss, bigQuoteCss)}>\u201C</aside>\n      {children}\n      <aside className={cx(endQuoteCss, bigQuoteCss)}>\u201D</aside>\n      {author && <div className={authorCss}>\u2014 {author}</div>}\n    </div>\n  );\n};\n\nQuote.displayName = 'Quote';\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, nonMobileMediaQuery } from '../../constants';\nimport { m } from '../../motif/m';\nimport { FontFamily } from '../Font/fontConstants';\n\nexport const bigQuoteCss = css`\n  font-size: 40px;\n  line-height: 40px;\n  margin-bottom: -20px;\n  margin-top: -8px;\n  text-align: start;\n`;\n\nexport const startQuoteCss = css`\n  margin-inline-start: -16px;\n  text-align: start;\n`;\n\nexport const endQuoteCss = css`\n  margin-inline-end: -20px;\n  text-align: end;\n`;\n\nexport const quoteCss = css`\n  /* we separate the values to allow the snap brand to override the LR padding since no \"card\" is rendered on snap brand */\n  padding: ${m('--spacing-xl')} ${m('--quote-card-left-right-padding')};\n  border-radius: ${m('--border-radius-l')};\n\n  background-color: ${m('--quote-bg-color')};\n  color: ${m('--quote-fg-color')};\n  box-shadow: ${m('--quote-box-shadow')};\n  font-family: ${m('--h5-font-family')};\n  line-height: 120%;\n\n  *[dir='rtl'] & {\n    direction: rtl;\n  }\n\n  ${nonMobileMediaQuery} {\n    width: 70%;\n    max-width: 700px;\n    font-size: ${m('--h5-desktop-font-size')};\n    font-weight: ${m('--h5-desktop-font-weight')};\n  }\n\n  ${mobileMediaQuery} {\n    width: 100%;\n    padding: ${m('--spacing-l')};\n    font-size: ${m('--h5-mobile-font-size')};\n    font-weight: ${m('--h5-mobile-font-weight')};\n  }\n`;\n\nexport const quoteWithoutImageCss = css`\n  ${nonMobileMediaQuery} {\n    width: 100%;\n  }\n`;\n\nexport const quoteIconCss = css`\n  font-family: ${FontFamily.PROGRAM_OT}, Helvetica, Tahoma, Arial, sans-serif;\n  color: ${m('--action-text-active-color')};\n  font-size: ${m('--quote-icon-desktop-font-size')};\n  line-height: ${m('--quote-icon-desktop-line-height')};\n  margin-bottom: ${m('--quote-icon-desktop-margin-bottom')};\n\n  ${mobileMediaQuery} {\n    font-size: ${m('--quote-icon-mobile-font-size')};\n    line-height: ${m('--quote-icon-mobile-line-height')};\n    margin-bottom: ${m('--quote-icon-mobile-margin-bottom')};\n  }\n`;\n\nexport const quoteTextCss = css`\n  display: block;\n  clear: both;\n`;\n\nexport const longQuoteTextCss = css`\n  display: block;\n  clear: both;\n  font-family: ${m('--font-family')};\n  line-height: 120%;\n\n  ${nonMobileMediaQuery} {\n    font-size: ${m('--p1-desktop-font-size')};\n    font-weight: ${m('--p1-desktop-font-weight')};\n  }\n\n  ${mobileMediaQuery} {\n    font-size: ${m('--p1-mobile-font-size')};\n    font-weight: ${m('--p1-mobile-font-weight')};\n  }\n`;\n\nexport const imageButtonContainerCss = css`\n  display: flex;\n  justify-content: flex-end;\n  width: 100%;\n  max-height: 98px;\n  margin-bottom: ${m('--spacing-l')};\n  margin-top: ${m('--spacing-l')};\n\n  /* Override default button padding for logo alignment */\n  button {\n    padding: 0;\n  }\n`;\n\nexport const quoteIconContainerCss = css`\n  display: flex;\n  justify-content: flex-start;\n\n  ${mobileMediaQuery} {\n    justify-content: center;\n  }\n`;\n\nexport const authorCss = css`\n  a {\n    color: inherit;\n    text-decoration: none;\n\n    &:hover {\n      text-decoration: underline;\n    }\n  }\n\n  text-align: ${m('--quote-author-text-align')};\n\n  ${nonMobileMediaQuery} {\n    font-size: ${m('--quote-author-desktop-font-size')};\n    font-weight: ${m('--quote-author-desktop-font-weight')};\n  }\n\n  ${mobileMediaQuery} {\n    font-size: ${m('--quote-author-mobile-font-size')};\n    font-weight: ${m('--quote-author-mobile-font-weight')};\n  }\n`;\n\nexport const authorWithoutLogoCss = css`\n  ${authorCss}\n  margin-top: ${m('--spacing-l')};\n`;\n\nexport const logoWithoutAuthorCss = css`\n  ${imageButtonContainerCss}\n`;\n\nexport const quoteContainerCss = css`\n  ${nonMobileMediaQuery} {\n    flex-direction: row;\n  }\n\n  ${mobileMediaQuery} {\n    flex-direction: column;\n  }\n\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 100%;\n  /* Force LTR for component layout, but text inside will still respect RTL */\n  direction: ltr;\n`;\n\nexport const quoteMediaContainerCss = css`\n  transform: rotate(-2deg) translateX(8px);\n  border-radius: ${m('--border-radius-xl')};\n  overflow: hidden;\n  box-shadow: ${m('--box-shadow-s')};\n\n  ${nonMobileMediaQuery} {\n    width: 30%;\n    height: 100%;\n    min-width: 280px;\n    max-width: 320px;\n  }\n\n  ${mobileMediaQuery} {\n    width: 90%;\n    max-width: 360px;\n    transform: rotate(-2deg) translateY(16px);\n  }\n`;\n\nexport const imageCss = css`\n  display: block;\n  height: 100%;\n  object-fit: cover;\n  object-position: center;\n  width: 100%;\n`;\n\nexport const videoCss = css`\n  height: 100%;\n  object-fit: cover;\n  object-position: center;\n  width: 100%;\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC, ReactNode } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport type { ImageSources } from '../../types';\nimport { ImageButton } from '../ImageButton';\nimport { Media } from '../Media';\nimport {\n  authorCss,\n  authorWithoutLogoCss,\n  imageButtonContainerCss,\n  imageCss,\n  logoWithoutAuthorCss,\n  longQuoteTextCss,\n  quoteContainerCss,\n  quoteCss,\n  quoteIconContainerCss,\n  quoteIconCss,\n  quoteMediaContainerCss,\n  quoteTextCss,\n  quoteWithoutImageCss,\n  videoCss,\n} from './QuoteV2.styled';\n\ninterface Props {\n  author?: ReactNode;\n  children?: ReactNode;\n  logoImageSrc?: ImageSources;\n  isRtl?: boolean;\n  isLongQuote?: boolean;\n  // image settings\n  imgSrcs?: ImageSources;\n  // video setings\n  videoSrc?: string;\n  mobileVideoSrc?: string;\n}\n\nexport const QuoteV2: FC<Props> = ({\n  author,\n  children,\n  logoImageSrc,\n  isRtl = false,\n  isLongQuote = false,\n  imgSrcs,\n  videoSrc,\n  mobileVideoSrc,\n}) => {\n  useMotifStyles(MotifComponent.QUOTE);\n\n  // Add extra spacing when there's no logo\n  const authorStylesWithSpacing = !logoImageSrc ? authorWithoutLogoCss : authorCss;\n  const quoteTextStyles = isLongQuote ? longQuoteTextCss : quoteTextCss;\n  const quoteIcon = isRtl ? '\u201D' : '\u201C';\n\n  const mediaCss = cx(videoSrc ? videoCss : imageCss);\n  const showMedia = !!(imgSrcs || videoSrc) && !isLongQuote;\n\n  return (\n    <div className={cx('sdsm-quote-container', quoteContainerCss)}>\n      {/* Only render media container when there's media and not a long quote */}\n      {showMedia && (\n        <div className={quoteMediaContainerCss}>\n          <Media\n            showVideoControls={false}\n            videoSource={videoSrc}\n            mobileVideoSource={mobileVideoSrc}\n            imgSrcs={imgSrcs}\n            className={mediaCss}\n            isDraggable={false}\n          />\n        </div>\n      )}\n\n      <div className={cx(MotifComponent.QUOTE, quoteCss, { [quoteWithoutImageCss]: !showMedia })}>\n        <div className={quoteIconContainerCss}>\n          <div className={quoteIconCss}> {quoteIcon}</div>\n        </div>\n        <div className={quoteTextStyles}>{children}</div>\n\n        {logoImageSrc && (\n          <div className={!author ? logoWithoutAuthorCss : imageButtonContainerCss}>\n            <ImageButton width={98} imgSrcs={logoImageSrc} altText=\"Quote background\" />\n          </div>\n        )}\n\n        {author && <div className={authorStylesWithSpacing}>{author}</div>}\n      </div>\n    </div>\n  );\n};\n\nQuoteV2.displayName = 'QuoteV2';\n", "import type { ChangeEvent, FC } from 'react';\nimport { memo, useCallback, useContext, useEffect } from 'react';\n\nimport { FormContext } from '../Form';\nimport { Field } from '../Form/Field';\nimport { FormEventType } from '../Form/Form.types';\nimport { InputRadio } from './InputRadio';\nimport { radioSelectOptionsWrapperCss } from './styles';\nimport type { RadioSelectFieldProps } from './types';\n\n/**\n * A radio select field component.\n *\n * This component is used to render a group of radio buttons. It is a controlled component, meaning\n * that the value of the field is controlled by the parent component. The parent component is\n * responsible for providing the `options` and `onChange` props.\n */\n\nexport const RadioSelectField: FC<RadioSelectFieldProps> = memo(props => {\n  const {\n    error,\n    helpText,\n    initialValue,\n    label,\n    name,\n    options = [],\n    required = false,\n    shouldResetToInitial = false,\n  } = props;\n\n  const { state, dispatch } = useContext(FormContext);\n\n  useEffect(() => {\n    dispatch({\n      type: FormEventType.REGISTER_FIELD,\n      name,\n      field: {\n        required,\n        initialValue,\n        shouldResetToInitial,\n      },\n    });\n  }, [dispatch, initialValue, name, required, shouldResetToInitial]);\n\n  const fieldMeta = state.fields[name];\n\n  const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n    dispatch({\n      type: FormEventType.CHANGE_FIELD_VALUE,\n      name,\n      value: e.target.value,\n    });\n  };\n\n  const handleInvalid = useCallback(() => {\n    dispatch({ type: FormEventType.INVALIDATE_FIELD, name });\n  }, [dispatch, name]);\n\n  if (options.length === 0) return null;\n\n  return (\n    <Field\n      type=\"Radio\"\n      name={name}\n      label={label}\n      required={required}\n      helpText={helpText}\n      error={error}\n      hasError={fieldMeta?.hasError}\n    >\n      <div className={radioSelectOptionsWrapperCss}>\n        {options.map(({ key, value }) => (\n          <InputRadio\n            key={key}\n            id={key}\n            name={name}\n            value={value ?? key}\n            label={value ?? key}\n            required={required}\n            hasError={fieldMeta?.hasError}\n            handleChange={handleChange}\n            handleInvalid={handleInvalid}\n          />\n        ))}\n      </div>\n    </Field>\n  );\n});\n", "import { cx } from '@emotion/css';\nimport { type FC, useContext } from 'react';\n\nimport { FormContext } from '../Form';\nimport { getStringValue } from '../Form/formUtils';\nimport {\n  inputErrorCss,\n  inputRadioWrapperCss,\n  radioCss,\n  radioLabelCss,\n  readonlyCss,\n} from './styles';\nimport type { InputRadioProps } from './types';\n\nexport const InputRadio: FC<InputRadioProps> = props => {\n  const {\n    id,\n    handleChange,\n    handleInvalid,\n    hasError = false,\n    label,\n    name,\n    readOnly,\n    value,\n    ...inputProps\n  } = props;\n\n  const { state } = useContext(FormContext);\n  const formFieldValue = getStringValue(state.formBody[name]);\n  const inputValue = getStringValue(value);\n\n  return (\n    <div className={inputRadioWrapperCss}>\n      <input\n        type=\"radio\"\n        name={name}\n        id={id}\n        value={inputValue}\n        checked={formFieldValue === inputValue}\n        className={cx(radioCss, { [inputErrorCss]: hasError })}\n        disabled={readOnly}\n        onChange={handleChange}\n        onBlur={handleChange}\n        onInvalid={handleInvalid}\n        readOnly={readOnly}\n        {...inputProps}\n      />\n      <label htmlFor={id} className={cx(radioLabelCss, { [readonlyCss]: readOnly })}>\n        {label}\n      </label>\n    </div>\n  );\n};\n", "import { css } from '@emotion/css';\n\nimport { m } from '../../motif';\n\nexport const radioSelectOptionsWrapperCss = css`\n  display: flex;\n  flex-direction: column;\n  gap: ${m('--spacing-xs')};\n`;\n\nexport const readonlyCss = css`\n  cursor: not-allowed;\n  opacity: 0.8;\n`;\n\nexport const inputRadioWrapperCss = css`\n  align-items: center;\n  display: flex;\n  gap: ${m('--spacing-s')};\n\n  label {\n    align-items: center;\n    display: flex;\n    justify-content: center;\n    margin-top: 0;\n\n    a {\n      &,\n      &:hover,\n      &:visited {\n        color: ${m('--fg-color')};\n      }\n    }\n  }\n`;\n\nexport const radioCss = css`\n  appearance: none;\n  background-color: ${m('--form-input-bg-color')};\n  border-radius: 50%;\n  border: ${m('--form-input-border-width')} solid ${m('--form-input-border-color')};\n  height: 20px;\n  margin: 0;\n  padding: 0;\n  width: 20px;\n\n  &:checked {\n    border-color: ${m('--form-input-active-border-color')};\n    box-shadow: ${m('--form-input-active-box-shadow')};\n  }\n\n  &:checked::before {\n    background-color: ${m('--form-input-active-border-color')};\n    border-radius: 50%;\n    content: '';\n    display: block;\n    height: 10px;\n    margin: 3px;\n    width: 10px;\n  }\n\n  &:focus-visible {\n    outline: ${m('--form-input-border-width')} solid ${m('--form-input-active-border-color')};\n    outline-offset: -2px;\n  }\n\n  &:not(:checked):hover {\n    border-color: ${m('--form-input-hover-border-color')};\n    box-shadow: ${m('--form-input-hover-box-shadow')};\n  }\n\n  &[required]:not(:checked)::before {\n    border-color: ${m('--form-input-error-color')};\n  }\n\n  &[readonly] {\n    ${readonlyCss}\n  }\n\n  &[readonly]:hover {\n    border-color: ${m('--form-input-border-color')};\n    box-shadow: none;\n  }\n\n  &[readonly]:checked {\n    border-color: ${m('--form-input-active-border-color')};\n    box-shadow: none;\n  }\n`;\n\nexport const radioLabelCss = css`\n  margin-top: 0 !important;\n`;\n\nexport const inputErrorCss = css`\n  border: ${m('--form-input-border-width')} solid ${m('--form-input-error-color')};\n\n  &:hover {\n    border: ${m('--form-input-border-width')} solid ${m('--form-input-error-color')};\n  }\n`;\n", "import { css } from '@emotion/css';\n\nexport const containerCss = css`\n  position: relative;\n  display: flex;\n  justify-content: center;\n`;\n\nexport const innerContainerCss = css`\n  position: sticky;\n  top: 0;\n  height: 100vh;\n  width: 100%;\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC, PropsWithChildren } from 'react';\n\nimport type { BaseComponentProps } from '../../types';\nimport { dataSetToAttributes } from '../../utils';\nimport { containerCss, innerContainerCss } from './styles';\n\nexport const scrollableSectionScrollProgressCssVar = '--scroll-progress';\n\ninterface ScrollAnimatedSectionProps extends BaseComponentProps {\n  /** Used to pass a className to the inner sticky container. */\n  innerContainerClassName?: string;\n  /** Ref to the outer section container */\n  containerRef: React.RefObject<HTMLDivElement>;\n  /** Sets an 'id' attribute to allow users to navigate to this section. */\n  anchorId?: string;\n}\n\n/**\n * Component that will create a scrollable section with a sticky inner container. Used for scroll\n * based animations\n */\nexport const ScrollAnimatedSection: FC<PropsWithChildren<ScrollAnimatedSectionProps>> = ({\n  className,\n  containerRef,\n  innerContainerClassName,\n  children,\n  dataset,\n  style,\n  anchorId,\n}) => {\n  return (\n    <section\n      ref={containerRef}\n      id={anchorId}\n      className={cx(containerCss, className)}\n      style={{ ...style }}\n      {...dataSetToAttributes(dataset)}\n    >\n      <div className={cx(innerContainerCss, innerContainerClassName)}>{children}</div>\n    </section>\n  );\n};\n", "import type { CSSProperties, FC } from 'react';\nimport { useContext, useEffect, useRef } from 'react';\n\nimport { BrowserFeaturesContext } from '../../BrowserFeatures/BrowserFeaturesContextProvider';\nimport type { BaseComponentProps } from '../../types';\nimport { dataSetToAttributes } from '../../utils';\n\ninterface ScrollAnimatedVideoProps extends BaseComponentProps {\n  className?: string;\n  /** Mp4 video source, used for safari and chrome */\n  videoMp4Src: string;\n  /** Webm video source, used for firefox */\n  videoWebmSrc: string;\n  /** Start time of video to use as start as animation. defaults to start of video */\n  videoStart?: number;\n  /** End time of video to use as end of animation. defaults to end of video */\n  videoEnd?: number;\n  /** What percent (0-100) the scrub animation should start at, defaults to 0 */\n  scrubStart?: number;\n  /** What percent (0-100) the scrub animation should end at, defaults to 100 */\n  scrubEnd?: number;\n  /**\n   * Function that returns the scroll progress for the scrub video. Needs to return a value between\n   * 0 and 1. Memoize this function to prevent attaching and unattaching scroll listeners on every\n   * render\n   */\n  calculateScrollProgress: () => number;\n  style?: CSSProperties;\n}\n\n/**\n * Component that will scrub through a video based on the scrollProgress calculated by the\n * calculateScrollProgress function on scroll and resize\n */\nexport const ScrollAnimatedVideo: FC<ScrollAnimatedVideoProps> = ({\n  calculateScrollProgress,\n  className,\n  videoMp4Src,\n  videoWebmSrc,\n  videoStart = 0,\n  videoEnd,\n  scrubStart = 0,\n  scrubEnd = 100,\n  style,\n  dataset,\n}) => {\n  const videoRef = useRef<HTMLVideoElement>(null);\n\n  const browserFeatures = useContext(BrowserFeaturesContext);\n  const hints = browserFeatures.getLowEntropyHints();\n  const isFirefox = hints.browsers.some(browser => browser.brand === 'Firefox');\n\n  const finalVideoSrc = isFirefox ? videoWebmSrc : videoMp4Src;\n\n  useEffect(() => {\n    if (videoRef.current) {\n      videoRef.current.currentTime = videoStart || 0;\n    }\n\n    const scrollCallback = () => {\n      if (videoRef.current) {\n        const scrollPercent = calculateScrollProgress();\n\n        const scrubRange = (scrubEnd - scrubStart) / 100;\n        // scale the scroll percent to the scrub range\n        const animationPercent = (scrollPercent - scrubStart / 100) * (1 / scrubRange);\n\n        if (animationPercent > 0 && animationPercent <= 1) {\n          const finalVideoEnd = videoEnd\n            ? Math.min(videoEnd, videoRef.current.duration)\n            : videoRef.current.duration;\n          const animationDuration = finalVideoEnd - videoStart;\n          const newTime = videoStart + animationDuration * animationPercent;\n\n          videoRef.current.currentTime = Number.parseFloat(newTime.toFixed(3));\n        }\n      }\n    };\n\n    // NOTE: if performance proves to be an issue, we can look into using\n    // blobs to load a whole video, or requestAnimationFrame, or adding an intersection observer\n    // to attach/remove the scroll listeners\n    window.addEventListener('scroll', scrollCallback);\n    window.addEventListener('resize', scrollCallback);\n\n    return () => {\n      window.removeEventListener('scroll', scrollCallback);\n      window.removeEventListener('resize', scrollCallback);\n    };\n  }, [calculateScrollProgress, scrubEnd, scrubStart, videoEnd, videoStart]);\n\n  return (\n    <video\n      ref={videoRef}\n      src={finalVideoSrc}\n      className={className}\n      style={style}\n      {...dataSetToAttributes(dataset)}\n    />\n  );\n};\n", "import { cx } from '@emotion/css';\nimport type { FC, KeyboardEvent, MouseEvent, ReactNode } from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport { MotifComponent, m, useMotifStyles } from '../../motif';\nimport type { BaseComponentProps } from '../../types';\nimport { DirectionalOverlay } from '../DirectionalOverlay/DirectionalOverlay';\nimport { Icon } from '../Icon';\nimport {\n  sideOverlayBackdropMobileOnlyCss,\n  sideOverlayCloseButtonCss,\n  sideOverlayCss,\n  sideOverlayDefinitionCss,\n  sideOverlayDirectionLeftCss,\n  sideOverlayDirectionRightCss,\n  sideOverlayHeaderCss,\n  sideOverlayListCss,\n  sideOverlayTermCss,\n  sideOverlayWithSideNavCss,\n  sideOverlayWithSideNavDirectionLeftCss,\n} from './SideOverlay.styles';\n\n/**\n * A fixed panel that slides in from the left or right edge of the screen.\n *\n * Use `SideOverlay` when you need an opinionated, content-ready drawer with a built-in close\n * button, title/body layout, Motif theming, RTL support, and mobile-first behaviour\n * (slides from the bottom on mobile, from the side on desktop).\n *\n * Prefer {@link DirectionalOverlay} instead when you need:\n * - A custom slide direction other than `left`/`right` (e.g. `top` or `bottom` on desktop).\n * - Full control over the panel's interior content without a fixed header/body structure.\n * - A different desktop size or a backdrop that is always visible (not mobile-only).\n * - Independent desktop and mobile directions.\n *\n * @example\n * // Standard usage \u2013 slides in from the right\n * <SideOverlay isOpen={isOpen} title=\"Details\" body={<p>\u2026</p>} onClose={close} />\n *\n * @example\n * // Left-side drawer alongside a side navigation\n * <SideOverlay isOpen={isOpen} direction=\"left\" hasSideNav title=\"Menu\" onClose={close} />\n */\nexport type SideOverlayDirection = 'left' | 'right';\n\n/** Desktop panel width is capped in CSS; this sets the animated width basis (viewport share). */\nconst sideOverlayDesktopSizePercent = 24;\nconst sideOverlayMobileSizePercent = 100;\n\ninterface SideOverlayProps extends BaseComponentProps {\n  isOpen: boolean;\n  title?: ReactNode;\n  body?: ReactNode;\n  onClose?: (e: MouseEvent | KeyboardEvent) => void;\n  hasSideNav?: boolean;\n  /** Which side the overlay slides in from on desktop. Defaults to `'right'`. */\n  direction?: SideOverlayDirection;\n}\n\nexport const SideOverlay: FC<SideOverlayProps> = ({\n  isOpen,\n  title,\n  body,\n  onClose,\n  className,\n  hasSideNav,\n  style,\n  dataset,\n  'data-testid': dataTestId,\n  direction = 'right',\n}) => {\n  useMotifStyles(MotifComponent.SIDE_OVERLAY);\n\n  const closeButtonRef = useRef<HTMLButtonElement>(null);\n\n  useEffect(() => {\n    if (isOpen) {\n      setTimeout(() => {\n        closeButtonRef?.current?.focus();\n      }, 250);\n    }\n  }, [isOpen]);\n\n  const handleBackdropClick = (\n    event: MouseEvent<HTMLDivElement> | KeyboardEvent<HTMLDivElement>\n  ) => {\n    onClose?.(event);\n  };\n\n  const isLeft = direction === 'left';\n\n  return (\n    <DirectionalOverlay\n      backdropClassName={sideOverlayBackdropMobileOnlyCss}\n      showBackdrop\n      className={cx(\n        MotifComponent.SIDE_OVERLAY,\n        sideOverlayCss,\n        isLeft ? sideOverlayDirectionLeftCss : sideOverlayDirectionRightCss,\n        {\n          [sideOverlayWithSideNavCss]: hasSideNav && !isLeft,\n          [sideOverlayWithSideNavDirectionLeftCss]: hasSideNav && isLeft,\n        },\n        className\n      )}\n      dataset={dataset}\n      data-testid={dataTestId}\n      desktopDirection={direction}\n      desktopSizePercent={sideOverlayDesktopSizePercent}\n      isOpen={isOpen}\n      mobileDirection=\"bottom\"\n      mobileSizePercent={sideOverlayMobileSizePercent}\n      onBackdropClick={handleBackdropClick}\n      style={style}\n    >\n      <div className={sideOverlayHeaderCss}>\n        <button\n          className={sideOverlayCloseButtonCss}\n          type=\"button\"\n          ref={closeButtonRef}\n          onClick={onClose}\n          onKeyDown={onClose}\n        >\n          <Icon name=\"cross\" size={24} fill={m('--side-overlay-fg-color')} />\n        </button>\n      </div>\n      <dl className={sideOverlayListCss}>\n        <dt className={sideOverlayTermCss}>{title}</dt>\n        <dd className={sideOverlayDefinitionCss}>{body}</dd>\n      </dl>\n    </DirectionalOverlay>\n  );\n};\n\nSideOverlay.displayName = 'SideOverlay';\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, nonMobileMediaQuery } from '../../constants';\nimport { m } from '../../motif/m';\nimport { directionalOverlayPanelActiveCss } from '../DirectionalOverlay/DirectionalOverlay.styles';\nimport { desktopSideNavWidthPx } from '../SideNavigation';\n\n// Value taken from designs. Jira ticket: https://jira.sc-corp.net/browse/WEBP-10648\nconst contentMaxWidthPx = 340;\nconst contentMaxWidthPxMobile = 640;\n\n/**\n * Shared styles for all SideOverlay directions: background, border, dimensions, and mobile sheet.\n * Combines with a direction-specific class (`sideOverlayDirectionRightCss` or\n * `sideOverlayDirectionLeftCss`) which overrides the `right`/`left` position set by\n * `DirectionalOverlay`'s base direction class.\n */\nexport const sideOverlayCss = css`\n  /* Extra clearance beyond 100% so the panel clears the page container edge. */\n  --directional-overlay-lateral-outset: calc(2 * ${m('--spacing-l')});\n\n  background-color: ${m('--side-overlay-bg-color')};\n  border: ${m('--border-width-xs')} solid ${m('--side-overlay-border-color')};\n  box-shadow: 0 12px 20px 0 #0000001f;\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n\n  ${nonMobileMediaQuery} {\n    border-radius: ${m('--border-radius-l')};\n    height: calc(100vh - var(--total-header-height, 0px) - (2 * ${m('--spacing-l')}));\n    max-width: ${contentMaxWidthPx}px;\n    top: calc(var(--total-header-height, 0px) + ${m('--spacing-l')});\n    width: ${contentMaxWidthPx}px;\n  }\n\n  ${mobileMediaQuery} {\n    border-radius: ${m('--border-radius-l')} ${m('--border-radius-l')} 0 0;\n    bottom: 0;\n    height: auto;\n    left: 0;\n    margin-left: auto;\n    margin-right: auto;\n    max-height: calc(100vh - var(--total-header-height, 0px) - ${m('--spacing-m')});\n    max-width: ${contentMaxWidthPxMobile}px;\n    right: 0;\n    width: calc(100vw - (2 * ${m('--spacing-m')}));\n\n    *[dir='rtl'] & {\n      left: 0;\n      right: 0;\n    }\n  }\n`;\n\n/**\n * Right-docked position, overriding the `right: 0` from `directionalOverlayDesktopRightCss`.\n * Uses `&&` to guarantee higher specificity regardless of stylesheet insertion order.\n */\nexport const sideOverlayDirectionRightCss = css`\n  ${nonMobileMediaQuery} {\n    /*\n     * 50%              --> move to center of the viewport (from the right)\n     * 50cqw            --> move back by half of the page container width to reach its right edge\n     * var(--spacing-l) --> adjust to move away from the container edge\n     */\n    && {\n      right: calc(50% - 50cqw + ${m('--spacing-l')});\n    }\n\n    *[dir='rtl'] & {\n      left: calc(50% - 50cqw + ${m('--spacing-l')});\n      right: auto;\n    }\n\n    /* RTL: negate the direction-class transform so the panel slides from the left. */\n    *[dir='rtl'] &:not(.${directionalOverlayPanelActiveCss}) {\n      transform: translateX(calc(-100% - var(--directional-overlay-lateral-outset, 0px)));\n    }\n  }\n`;\n\n/** Left-docked position, overriding the `left: 0` from `directionalOverlayDesktopLeftCss`. */\nexport const sideOverlayDirectionLeftCss = css`\n  ${nonMobileMediaQuery} {\n    && {\n      left: calc(50% - 50cqw + ${m('--spacing-l')});\n      right: auto;\n    }\n\n    *[dir='rtl'] & {\n      left: auto;\n      right: calc(50% - 50cqw + ${m('--spacing-l')});\n    }\n\n    /* RTL: negate the direction-class transform so the panel slides from the right. */\n    *[dir='rtl'] &:not(.${directionalOverlayPanelActiveCss}) {\n      transform: translateX(calc(100% + var(--directional-overlay-lateral-outset, 0px)));\n    }\n  }\n`;\n\nexport const sideOverlayWithSideNavCss = css`\n  ${nonMobileMediaQuery} {\n    /*\n     * 50%                       --> move to center of the viewport (from the right)\n     * 50cqw                     --> move back by half of the page container width to reach its right edge\n     * desktopSideNavWidthPx / 2 --> move back by half of the side navigation width\n     * var(--spacing-l)          --> adjust to move away from the container edge\n     */\n    && {\n      right: calc(50% - 50cqw - ${desktopSideNavWidthPx / 2}px + ${m('--spacing-l')});\n    }\n\n    *[dir='rtl'] & {\n      left: calc(50% - 50cqw - ${desktopSideNavWidthPx / 2}px + ${m('--spacing-l')});\n      right: auto;\n    }\n  }\n`;\n\n/** Left-docked position adjusted for the side navigation width offset. */\nexport const sideOverlayWithSideNavDirectionLeftCss = css`\n  ${nonMobileMediaQuery} {\n    && {\n      left: calc(50% - 50cqw - ${desktopSideNavWidthPx / 2}px + ${m('--spacing-l')});\n      right: auto;\n    }\n\n    *[dir='rtl'] & {\n      left: auto;\n      right: calc(50% - 50cqw - ${desktopSideNavWidthPx / 2}px + ${m('--spacing-l')});\n    }\n  }\n`;\n\nexport const sideOverlayHeaderCss = css`\n  display: flex;\n  font-size: ${m('--h6-desktop-font-size')};\n  font-weight: ${m('--h6-desktop-font-weight')};\n  justify-content: end;\n  line-height: ${m('--h6-desktop-font-line-height')};\n  padding: ${m('--spacing-m')};\n`;\n\nexport const sideOverlayCloseButtonCss = css`\n  background: transparent;\n  border: none;\n  cursor: pointer;\n  margin: calc(${m('--spacing-m')} * -1);\n  padding: ${m('--spacing-m')};\n`;\n\nexport const sideOverlayListCss = css`\n  height: 100%;\n  margin: 0;\n  overflow-y: auto;\n  padding: ${m('--spacing-xs')} ${m('--spacing-l')} ${m('--spacing-l')} ${m('--spacing-l')};\n\n  ${mobileMediaQuery} {\n    padding-bottom: ${m('--spacing-xxxxl')};\n  }\n`;\n\nexport const sideOverlayTermCss = css`\n  color: ${m('--side-overlay-fg-color')};\n  font-size: ${m('--h6-desktop-font-size')};\n  font-weight: ${m('--h6-desktop-font-weight')};\n  line-height: ${m('--h6-desktop-font-line-height')};\n  margin: 0 0 ${m('--spacing-s')} 0;\n  padding: 0;\n`;\n\nexport const sideOverlayDefinitionCss = css`\n  color: ${m('--side-overlay-fg-color')};\n  font-size: ${m('--p2-desktop-font-size')};\n  font-weight: ${m('--p2-desktop-font-weight')};\n  line-height: ${m('--p2-desktop-font-line-height')};\n  margin: 0;\n  padding: 0;\n`;\n\n/** Hides the backdrop on desktop so it only appears on mobile (sheet behavior). */\nexport const sideOverlayBackdropMobileOnlyCss = css`\n  ${nonMobileMediaQuery} {\n    display: none;\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport { ensureSingleScript } from '@snapchat/mw-common/client';\nimport type { FC } from 'react';\nimport { useContext, useEffect, useRef } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport type { BaseComponentProps } from '../../types';\nimport { dataSetToAttributes } from '../../utils';\nimport { PrimitivesContext } from '../Primitives';\nimport {\n  blockQuoteCss,\n  footerCss,\n  footerLinkCss,\n  footerTextCss,\n  frameContainerCss,\n  frameCss,\n  iframeContainerCss,\n  linkCss,\n  spacerCss,\n} from './SnapchatEmbed.styles';\n\nexport interface SnapchatEmbedProps extends BaseComponentProps {\n  url: string;\n}\n\n/** (BETA) Renders an embedded Lens, Spotlight, Publish Profile, or Story. */\nexport const SnapchatEmbed: FC<SnapchatEmbedProps> = props => {\n  const { url, dataset, className } = props;\n  const ref = useRef<HTMLDivElement>(null);\n  useMotifStyles(MotifComponent.SNAPCHAT_EMBED);\n  const { Anchor } = useContext(PrimitivesContext);\n\n  useEffect(() => {\n    ensureSingleScript('snapchat-embed', 'https://www.snapchat.com/embed.js', () => {\n      // See https://github.sc-corp.net/Snapchat/web/pull/4201\n      const event = new Event('loadEmbed', { bubbles: true });\n      ref.current?.dispatchEvent(event);\n    });\n  }, [url]);\n\n  // Remove params and trailing slash\n  const newUrl = new URL(url);\n  const urlWithoutParams = `${newUrl.origin}${newUrl.pathname}`.replace(/\\/$/, '');\n\n  // Note: These elements and styles comes directly from the embed code\n  return (\n    <div\n      className={cx(MotifComponent.SNAPCHAT_EMBED, iframeContainerCss, className)}\n      ref={ref}\n      {...dataSetToAttributes(dataset)}\n    >\n      <blockquote\n        className={cx(blockQuoteCss, 'snapchat-embed')}\n        data-snapchat-embed-width=\"416\"\n        data-snapchat-embed-height=\"692\"\n        data-snapchat-embed-url={`${urlWithoutParams}/embed`}\n        data-snapchat-embed-style=\"border-radius: 40px;\"\n      >\n        <div className={frameContainerCss}>\n          <Anchor href={urlWithoutParams} className={linkCss} />\n\n          <div className={frameCss} />\n        </div>\n        <div className={spacerCss} />\n        <div className={footerCss}>\n          <Anchor href={urlWithoutParams} className={footerLinkCss}>\n            <div className={footerTextCss}>View more on Snapchat</div>\n          </Anchor>\n        </div>\n      </blockquote>\n    </div>\n  );\n};\n", "import { css } from '@emotion/css';\n\nexport const iframeContainerCss = css`\n  width: 100%;\n  min-width: 300px;\n  max-width: 416px;\n  margin: 0 auto;\n\n  > iframe {\n    aspect-ratio: 3 / 5;\n    width: 100%;\n    height: 100%;\n  }\n`;\n\nexport const blockQuoteCss = css`\n  background: #c4c4c4;\n  border: 0;\n  border-radius: 40px;\n  box-shadow: 0 0 1px 0 rgba(0, 0, 0, 0.5), 0 1px 10px 0 rgba(0, 0, 0, 0.15);\n  margin: 1px;\n  min-width: 300px;\n  max-width: 416px;\n  padding: 0;\n  width: 99.375%;\n  display: flex;\n  flex-direction: column;\n  position: relative;\n  height: 650px;\n`;\n\nexport const frameContainerCss = css`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n`;\n\nexport const linkCss = css`\n  background-color: #f4f4f4;\n  border-radius: 50%;\n  flex-grow: 0;\n  height: 40px;\n  margin: 16px 14px 16px 16px;\n  width: 40px;\n  cursor: pointer;\n`;\n\nexport const frameCss = css`\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  justify-content: center;\n`;\n\nexport const spacerCss = css`\n  flex: 1;\n`;\n\nexport const footerCss = css`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  border-end-end-radius: 40px;\n  border-end-start-radius: 40px;\n`;\n\nexport const footerLinkCss = css`\n  background-color: yellow;\n  width: 100%;\n  padding: 10px 20px;\n  border: none;\n  border-radius: inherit;\n  cursor: pointer;\n  text-align: center;\n  display: flex;\n  flex-direction: row;\n  justify-content: center;\n  text-decoration: none;\n  color: black;\n  align-items: center;\n`;\n\n// Using non-motif values because these should match with external embed styles, not sdsm\nexport const footerTextCss = css`\n  margin-left: 4px;\n  padding-bottom: 1px;\n  font-size: 14px;\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport { Children } from 'react';\n\nimport { Alignment } from '../../constants';\nimport { MotifComponent, MotifScheme } from '../../motif';\nimport {\n  alignmentCss,\n  getBackgroundClassName,\n  justifyContentCss,\n  mobileAlignmentCss,\n} from '../../utils';\nimport { PictureWithStickers } from '../Picture';\nimport { StickerSize } from '../Sticker';\nimport { VideoWithStickers } from '../Video';\nimport {\n  backgroundCss,\n  backgroundMediaCss,\n  bodyCss,\n  contentWrapperCss,\n  ctaWrapperCss,\n  fitWindowCss,\n  mediaCaptionCss,\n  mediaWrapperCss,\n  reverseSplitCss,\n  splitBlockWrapperCss,\n  subtitleCss,\n  textWrapperCss,\n  titleCss,\n} from './styles';\nimport type { SplitBlockProps } from './types';\n\n/**\n * A SDS-M component for displaying content in a split layout, with media section (image or video)\n * on one side and content with calls to action on the other.\n *\n * @property {MotifScheme} [motifScheme] - The motif scheme for theming. Supersedes backgroundColor\n *   when provided. Default is `MotifScheme.SECONDARY`\n * @property {BackgroundColor} [backgroundColor] - @deprecated Use motifScheme instead. The legacy\n *   background color of the component. Default is `BackgroundColor.Black`\n * @property {ReactNode} [body] - The main text content to be displayed.\n * @property {Buttons} [callsToAction] - An array of call-to-action buttons.\n * @property {boolean} [fitWindow] - Whether the component should expand to fit the entire viewport\n *   height. Default is `false`\n * @property {ImageSources} [imageSources] - An object containing image sources for different screen\n *   sizes (if using an image).\n * @property {string} [imageAltText] - Alternative text for the image (for accessibility).\n * @property {string} [mediaCaption] - A caption for the media (image or video) that will be visibly\n *   displayed.\n * @property {string} [mediaContentType] - The content type of the media (e.g., 'image/jpeg',\n *   'video/mp4').\n * @property {Alignment} [mediaDirection] - The position of the media section (start or end).\n *   Default is `Alignment.End`\n * @property {string} [mobileMediaContentType] - The content type of the media on mobile devices.\n * @property {string} [mobileVideoSource] - The video source for mobile devices.\n * @property {string} [subtitle] - A subtitle to be displayed below the title.\n * @property {Alignment} [textAlignment] - The horizontal alignment of the text content. Default is\n *   `Alignment.Start`\n * @property {Alignment} [textAlignmentMobile] - The horizontal alignment of the text content on\n *   mobile devices. Default is `Alignment.Center`\n * @property {string} [title] - The main title to be displayed.\n * @property {Alignment} [verticalTextAlignment] - The vertical alignment of the text content.\n *   Default is `Alignment.Center`\n * @property {string} [videoSource] - The video source (if using a video).\n * @property {string} [posterSource] - The poster image source for the video (if using a video).\n * @property {StickerProps[]} [stickers] - The array of data used to render stickers.\n * @returns {JSX.Element} The rendered SplitBlock component.\n */\n\nexport const SplitBlock: FC<SplitBlockProps> = props => {\n  const {\n    anchorId,\n    motifScheme,\n    backgroundColor,\n    body,\n    callsToAction,\n    fitWindow = false,\n    imageSources,\n    imageAltText,\n    mediaCaption,\n    mediaContentType,\n    mediaDirection = Alignment.End,\n    mobileMediaContentType,\n    mobileVideoSource,\n    subtitle,\n    textAlignment = Alignment.Start,\n    textAlignmentMobile = Alignment.Center,\n    title,\n    verticalTextAlignment = Alignment.Center,\n    videoSource,\n    posterSource,\n    stickers,\n  } = props;\n\n  const callsToActionCount = Children.toArray(callsToAction).length;\n\n  // Create fallback chain here instead of default parameters otherwise if 'motifScheme' is not provided,\n  // the default background color will be used instead of falling back to the 'backgroundColor' parameter\n  const motifSchemeWithFallback =\n    motifScheme ??\n    (getBackgroundClassName(backgroundColor) as MotifScheme) ??\n    MotifScheme.SECONDARY;\n\n  const stickersMedium = stickers?.map(sticker => ({\n    ...sticker,\n    size: StickerSize.Medium,\n    insetPx: 16, // Inset stickers as media stretches to the component edges (often also the screen edge)\n  }));\n\n  return (\n    <article\n      id={anchorId}\n      className={cx(MotifComponent.SPLIT_BLOCK, motifSchemeWithFallback, splitBlockWrapperCss, {\n        [fitWindowCss]: fitWindow,\n        [reverseSplitCss]: mediaDirection === Alignment.Start,\n      })}\n    >\n      <section\n        className={cx(textWrapperCss, {\n          [reverseSplitCss]: mediaDirection === Alignment.Start,\n        })}\n      >\n        <div\n          className={cx(\n            contentWrapperCss,\n            alignmentCss[textAlignment],\n            mobileAlignmentCss[textAlignmentMobile],\n            justifyContentCss[verticalTextAlignment]\n          )}\n        >\n          {title && <h2 className={titleCss}>{title}</h2>}\n          {subtitle && <div className={subtitleCss}>{subtitle}</div>}\n          {body && <div className={bodyCss}>{body}</div>}\n          {callsToActionCount > 0 ? (\n            <section\n              className={cx(\n                ctaWrapperCss,\n                alignmentCss[textAlignment],\n                mobileAlignmentCss[textAlignmentMobile]\n              )}\n            >\n              {callsToAction}\n            </section>\n          ) : null}\n        </div>\n      </section>\n      {(imageSources || videoSource) && (\n        <section className={mediaWrapperCss}>\n          {imageSources && (\n            <PictureWithStickers\n              altText={imageAltText}\n              imgSrcs={imageSources}\n              className={backgroundCss}\n              imgClassName={backgroundMediaCss}\n              fetchPriority=\"auto\"\n              stickers={stickersMedium}\n            />\n          )}\n          {videoSource && (\n            <VideoWithStickers\n              className={backgroundCss}\n              videoClassName={backgroundMediaCss}\n              isBackgroundVideo\n              mobileSource={mobileVideoSource}\n              mobileSourceType={mobileMediaContentType}\n              source={videoSource}\n              sourceType={mediaContentType}\n              posterSource={posterSource}\n              stickers={stickersMedium}\n            />\n          )}\n          {mediaCaption && <div className={mediaCaptionCss}>{mediaCaption}</div>}\n        </section>\n      )}\n    </article>\n  );\n};\n", "import { css } from '@emotion/css';\n\nimport {\n  mobileMediaQuery,\n  mobilePageContainerQuery,\n  nonMobileMediaQuery,\n  nonMobilePageContainerQuery,\n  twoColumnCollapseMediaQuery,\n  twoColumnCollapsePageContainerQuery,\n  White,\n} from '../../constants';\nimport { h1Css, m, p1Css, p2Css, p3Css } from '../../motif';\nimport { globalHeaderHeight } from '../GlobalHeader';\nimport { primitiveElementClassNames } from '../Primitives';\n\n/** Minimum height of the Split block */\n// TODO: Make sure this is the expected min height in the next Snap meeting\nconst minHeightPx = 400;\n\n/** Minimum height of mobile media */\nconst mobileMediaMinHeightPx = 375;\n\n/** Max width for Content wrapper from designs */\nconst contentMaxWidthPx = 592;\n\n/** Max width for Media caption from designs */\nconst mediaCaptionMaxWidthPx = 440;\n\nexport const splitBlockWrapperCss = css`\n  align-items: stretch;\n  background-color: ${m('--bg-color')};\n  display: flex;\n  gap: 0;\n  justify-content: center;\n  min-height: ${minHeightPx}px;\n  width: 100%;\n\n  ${mobileMediaQuery} {\n    flex-direction: column;\n    height: 100%;\n  }\n\n  /*\n  We are keeping the media queries above in addition to the container queries below in case:\n  - this component is ever rendered without a wrapping SDS-M Page component\n  - the browser does not support container queries (smart TVs, etc.)\n  */\n  ${mobilePageContainerQuery} {\n    flex-direction: column;\n    height: 100%;\n  }\n`;\n\nexport const fitWindowCss = css`\n  height: calc(100vh - ${globalHeaderHeight}px);\n`;\n\nexport const reverseSplitCss = css`\n  flex-direction: row-reverse;\n`;\n\nexport const textWrapperCss = css`\n  display: flex;\n  flex-shrink: 0;\n  justify-content: flex-end;\n  padding: ${m('--spacing-xxxxl')};\n  width: 50%;\n\n  ${twoColumnCollapseMediaQuery} {\n    width: 60%;\n  }\n\n  ${mobileMediaQuery} {\n    padding: 0;\n    width: 100%;\n  }\n\n  /*\n  We are keeping the media queries above in addition to the container queries below in case:\n  - this component is ever rendered without a wrapping SDS-M Page component\n  - the browser does not support container queries (smart TVs, etc.)\n  */\n  ${twoColumnCollapsePageContainerQuery} {\n    width: 60%;\n  }\n\n  ${mobilePageContainerQuery} {\n    padding: 0;\n    width: 100%;\n  }\n`;\n\nexport const contentWrapperCss = css`\n  color: ${m('--fg-color')};\n  display: flex;\n  flex-direction: column;\n  gap: ${m('--spacing-m')};\n  padding: ${m('--spacing-xl')};\n  width: 100%;\n\n  ${nonMobileMediaQuery} {\n    max-width: ${contentMaxWidthPx}px;\n  }\n\n  /*\n  We are keeping the media queries above in addition to the container queries below in case:\n  - this component is ever rendered without a wrapping SDS-M Page component\n  - the browser does not support container queries (smart TVs, etc.)\n  */\n  ${mobilePageContainerQuery} {\n    max-width: unset;\n  }\n\n  ${nonMobilePageContainerQuery} {\n    max-width: ${contentMaxWidthPx}px;\n  }\n`;\n\nexport const titleCss = css`\n  ${h1Css}\n  word-break: break-word;\n`;\n\nexport const subtitleCss = css`\n  ${p1Css}\n  word-break: break-word;\n`;\n\nexport const bodyCss = css`\n  ${p2Css}\n  margin-bottom: 0;\n  word-break: break-word;\n\n  & .${primitiveElementClassNames.p}:last-child {\n    margin-bottom: 0;\n  }\n`;\n\nexport const ctaWrapperCss = css`\n  align-items: center;\n  display: flex;\n  flex-wrap: wrap;\n  gap: ${m('--spacing-m')};\n  margin-top: ${m('--spacing-m')};\n`;\n\nexport const mediaWrapperCss = css`\n  display: flex;\n  justify-content: center;\n  position: relative;\n  width: 50%;\n\n  ${twoColumnCollapseMediaQuery} {\n    width: 40%;\n  }\n\n  ${mobileMediaQuery} {\n    height: ${mobileMediaMinHeightPx}px;\n    width: 100%;\n  }\n\n  /*\n  We are keeping the media queries above in addition to the container queries below in case:\n  - this component is ever rendered without a wrapping SDS-M Page component\n  - the browser does not support container queries (smart TVs, etc.)\n  */\n  ${twoColumnCollapsePageContainerQuery} {\n    width: 40%;\n  }\n\n  ${mobilePageContainerQuery} {\n    height: ${mobileMediaMinHeightPx}px;\n    width: 100%;\n  }\n`;\n\n// This is needed to ensure the background media covers the entire container on wide screens\nexport const backgroundCss = css`\n  inset: 0;\n  /* Prevent overflowing elements from adding extra page width, e.g. background media stickers */\n  overflow: hidden;\n  position: absolute;\n`;\n\nexport const backgroundMediaCss = css`\n  height: 100%;\n  object-fit: cover;\n  width: 100%;\n`;\n\nexport const mediaCaptionCss = css`\n  background: rgba(0, 0, 0, 0.8);\n  border-radius: ${m('--border-radius-s')};\n  bottom: ${m('--spacing-m')};\n  color: ${White};\n  max-width: ${mediaCaptionMaxWidthPx}px;\n  padding: ${m('--spacing-xxs')} ${m('--spacing-xs')};\n  position: absolute;\n  ${p3Css}\n\n  ${mobileMediaQuery} {\n    margin-inline: ${m('--spacing-xl')};\n    max-width: 100%;\n  }\n\n  /*\n  We are keeping the media queries above in addition to the container queries below in case:\n  - this component is ever rendered without a wrapping SDS-M Page component\n  - the browser does not support container queries (smart TVs, etc.)\n  */\n  ${mobilePageContainerQuery} {\n    margin-inline: ${m('--spacing-xl')};\n    max-width: 100%;\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport { type FC, useRef } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport type { BaseComponentProps } from '../../types';\nimport type { Animation } from '../Animations';\nimport { useAnimations } from '../Animations';\nimport { statCss, statsContainerCss, supplementaryTextCss } from './Stats.styled';\n\nexport interface StatsProps extends BaseComponentProps {\n  stat: string;\n  optionalSupplementaryText?: string;\n  animation?: Animation;\n}\n\nexport const Stats: FC<StatsProps> = ({ stat, optionalSupplementaryText, animation, style }) => {\n  useMotifStyles(MotifComponent.STATS);\n\n  const statsRef = useRef(null);\n  const animationCssProps = useAnimations(statsRef, animation);\n\n  return (\n    <figure\n      ref={statsRef}\n      className={cx(MotifComponent.STATS, statsContainerCss)}\n      style={{ ...animationCssProps, ...style }}\n    >\n      <span className={statCss}>{stat}</span>\n      {optionalSupplementaryText && (\n        <span className={supplementaryTextCss}>{optionalSupplementaryText}</span>\n      )}\n    </figure>\n  );\n};\n\nStats.displayName = 'Stats';\n", "import { css } from '@emotion/css';\n\nimport { m } from '../../motif/m';\n\nexport const statsContainerCss = css`\n  display: flex;\n  flex-direction: column;\n  gap: ${m('--spacing-l')};\n  justify-content: center;\n  align-items: center;\n`;\n\nexport const statCss = css`\n  font-family: ${m('--h1-font-family')};\n  font-stretch: condensed;\n  color: ${m('--stats-stat-color')};\n  font-weight: ${m('--stats-stat-font-weight')};\n  font-size: ${m('--stats-stat-font-size')};\n  line-height: ${m('--stats-stat-font-line-height')};\n  margin: 0;\n`;\n\nexport const supplementaryTextCss = css`\n  font-family: ${m('--h1-font-family')};\n  font-stretch: condensed;\n  color: ${m('--stats-stat-color')};\n  font-size: ${m('--stats-stat-supplementary-text-font-size')};\n  font-weight: ${m('--stats-stat-supplementary-text-font-weight')};\n  line-height: ${m('--stats-stat-font-line-height')};\n  margin: 0;\n`;\n", "import { cx } from '@emotion/css';\nimport { useBrowserLayoutEffect } from '@snapchat/mw-common/client';\nimport { type FC, type PropsWithChildren, useEffect, useState } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { dataSetToAttributes, getBackgroundClassName, useWindowSize } from '../../utils';\nimport { itemsCss, itemsWrapCss, leftGradientCss, navCss, rightGradientCss } from './styles';\nimport type { SubNavigationProps } from './types';\n\nexport const SubNavigation: FC<PropsWithChildren<SubNavigationProps>> = ({\n  motifScheme,\n  backgroundColor,\n  className,\n  children,\n  horizontalScrollRef,\n  dataset,\n}) => {\n  useMotifStyles(MotifComponent.SUB_NAVIGATION);\n\n  const { width: windowWidth } = useWindowSize();\n\n  const [isRTL, setIsRTL] = useState(false);\n  const [scrollPosition, setScrollPosition] = useState(0);\n\n  useBrowserLayoutEffect(() => {\n    setIsRTL(!!horizontalScrollRef?.current?.closest('[dir=\"rtl\"]'));\n  }, [horizontalScrollRef?.current, windowWidth]);\n\n  useEffect(() => {\n    const element = horizontalScrollRef?.current;\n    if (!element) return;\n\n    const listener = () => {\n      /* There is an issue with the scroll poisition being .5px out in some cases so using\n       * Math.ceil() to force to closest whole number\n       */\n      setScrollPosition(Math.ceil(horizontalScrollRef?.current?.scrollLeft ?? 0));\n    };\n\n    element.addEventListener('scroll', listener, { passive: false });\n    element.addEventListener('touchmove', listener, { passive: false });\n\n    return () => {\n      element.removeEventListener('scroll', listener);\n      element.removeEventListener('touchmove', listener);\n    };\n  }, [horizontalScrollRef]);\n\n  let parentElementWidth = 0;\n  let totalElementWidth = 0;\n\n  if (horizontalScrollRef?.current?.parentElement) {\n    parentElementWidth = horizontalScrollRef.current.parentElement.scrollWidth;\n    totalElementWidth = horizontalScrollRef.current.scrollWidth;\n  }\n\n  let isGradientLeft = false;\n  let isGradientRight = false;\n\n  if (isRTL) {\n    isGradientLeft = Math.ceil(-scrollPosition) < totalElementWidth - parentElementWidth;\n    isGradientRight = scrollPosition < 0;\n  } else {\n    isGradientLeft = scrollPosition > 0;\n    isGradientRight = scrollPosition < totalElementWidth - parentElementWidth;\n  }\n\n  return (\n    <nav\n      className={cx(\n        MotifComponent.SUB_NAVIGATION,\n        navCss,\n        motifScheme ?? getBackgroundClassName(backgroundColor),\n        className\n      )}\n      {...dataSetToAttributes(dataset)}\n    >\n      {isGradientLeft && <div className={leftGradientCss} />}\n      <div ref={horizontalScrollRef} className={itemsWrapCss}>\n        <ul className={itemsCss}>{children}</ul>\n      </div>\n      {isGradientRight && <div className={rightGradientCss} />}\n    </nav>\n  );\n};\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery } from '../../constants';\nimport { ZIndex } from '../../constants/zIndex';\nimport { m } from '../../motif';\n\nexport const navCss = css`\n  align-items: center;\n  background-color: ${m('--bg-color')};\n  box-shadow: ${m('--sub-navigation-box-shadow')};\n  color: white;\n  display: flex;\n  height: 56px;\n  justify-content: center;\n  overflow: hidden;\n  position: sticky;\n  top: 125px;\n  width: 100%;\n  z-index: ${ZIndex.SUB_NAVIGATION};\n\n  ${mobileMediaQuery} {\n    justify-content: flex-start;\n  }\n`;\n\nexport const itemsWrapCss = css`\n  align-items: center;\n  display: flex;\n  height: 100%;\n  -ms-overflow-style: none; /* Hide scrollbar for IE and Edge */\n  overflow-x: scroll;\n  overflow-y: hidden;\n  scrollbar-width: none; /* Hide scrollbar for Firefox */\n\n  &::-webkit-scrollbar {\n    display: none; /* Hide scrollbar for Chrome and Safari */\n  }\n`;\n\nexport const itemsCss = css`\n  align-items: center;\n  display: flex;\n  gap: ${m('--spacing-xl')};\n  height: 100%;\n  list-style: none;\n  padding-inline: ${m('--spacing-xl')};\n`;\n\nexport const itemCss = css`\n  align-items: center;\n  display: flex;\n  height: 100%;\n`;\n\nconst underlineHeight = 8;\n\nexport const itemLinkCss = css`\n  align-items: center;\n  color: ${m('--sub-navigation-item-color')};\n  display: flex;\n  font-size: ${m('--action-desktop-font-size')};\n  font-weight: ${m('--action-desktop-font-weight')};\n  height: 100%;\n  line-height: ${m('--action-desktop-font-line-height')};\n  position: relative;\n  text-decoration: none;\n  white-space: nowrap;\n\n  ${mobileMediaQuery} {\n    font-size: ${m('--action-mobile-font-size')};\n    font-weight: ${m('--action-mobile-font-weight')};\n    line-height: ${m('--action-mobile-font-line-height')};\n  }\n\n  @media (hover: hover) {\n    &:hover {\n      color: ${m('--sub-navigation-item-hover-color')};\n    }\n\n    &:hover::after {\n      transform: translateY(-${underlineHeight / 2}px);\n    }\n  }\n\n  &::after {\n    background-color: ${m('--sub-navigation-indicator-hover-color')};\n    bottom: -${underlineHeight}px;\n    content: '';\n    height: ${underlineHeight}px;\n    left: 0;\n    position: absolute;\n    border-radius: ${m('--action-indicator-border-radius')};\n    transform: translateY(0);\n    transition: all 0.15s ease;\n    width: 100%;\n  }\n\n  @media (hover: hover) {\n    &:hover {\n      color: ${m('--sub-navigation-item-hover-color')};\n    }\n\n    &:hover::after {\n      transform: translateY(-${underlineHeight / 2}px);\n    }\n  }\n`;\n\nexport const itemLinkActiveCss = css`\n  color: ${m('--sub-navigation-item-active-color')};\n\n  &:hover {\n    color: ${m('--sub-navigation-item-active-color')};\n  }\n\n  &::after {\n    background-color: ${m('--sub-navigation-indicator-active-color')};\n    transform: translateY(-${underlineHeight / 2}px);\n  }\n`;\n\nexport const leftGradientCss = css`\n  background: linear-gradient(to left, transparent 10%, ${m('--bg-color')} 100%);\n  content: '';\n  display: block;\n  height: 100%;\n  left: 0;\n  pointer-events: none;\n  position: absolute;\n  width: 80px;\n  z-index: 1;\n`;\n\nexport const rightGradientCss = css`\n  background: linear-gradient(to right, transparent 10%, ${m('--bg-color')} 100%);\n  content: '';\n  display: block;\n  height: 100%;\n  right: 0;\n  pointer-events: none;\n  position: absolute;\n  width: 80px;\n  z-index: 1;\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC, PropsWithChildren } from 'react';\nimport { useContext, useEffect, useRef } from 'react';\n\nimport { dataSetToAttributes } from '../../utils';\nimport { PrimitivesContext } from '../Primitives';\nimport { itemCss, itemLinkActiveCss, itemLinkCss } from './styles';\nimport type { SubNavigationItemProps } from './types';\n\nexport const SubNavigationItem: FC<PropsWithChildren<SubNavigationItemProps>> = ({\n  href,\n  isActive,\n  onLinkClick,\n  className,\n  children,\n  dataset,\n}) => {\n  const { Anchor } = useContext(PrimitivesContext);\n  const ref = useRef<HTMLLIElement>(null);\n\n  // Scroll active item to the center\n  useEffect(() => {\n    if (isActive) {\n      ref.current?.scrollIntoView({\n        behavior: 'smooth',\n        block: 'nearest',\n        inline: 'center',\n      });\n    }\n  }, [isActive]);\n\n  return (\n    <li ref={ref} className={cx(itemCss, className)} {...dataSetToAttributes(dataset)}>\n      <Anchor\n        className={cx(itemLinkCss, { [itemLinkActiveCss]: isActive })}\n        href={href}\n        onClick={onLinkClick}\n      >\n        {children}\n      </Anchor>\n    </li>\n  );\n};\n\nSubNavigationItem.displayName = 'SubNavigationItem';\n", "import { cx } from '@emotion/css';\nimport { useBrowserLayoutEffect } from '@snapchat/mw-common/client';\nimport { type FC, type PropsWithChildren, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { MediaMode } from '../../constants';\nimport { useMediaMode } from '../../hooks';\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport type { BaseComponentProps } from '../../types';\nimport { useWindowSize } from '../../utils';\nimport {\n  arrowButtonContainerCss,\n  itemLinkActiveCss,\n  itemLinkCss,\n  leftGradientCss,\n  rightGradientCss,\n  tabItemContainerCss,\n  tabItemContainterOverflowMobileCss,\n  tabItemListCenterCss,\n  tabItemListCss,\n  tabItemListStartCss,\n  tabsContainerCss,\n  tabsContainerOverflowMobileCss,\n} from './styles';\nimport { TabArrows } from './TabArrows';\nimport type { TabsNavigationItemProps } from './types';\nimport { TabDirection } from './types';\n\nexport interface TabItemsProps extends BaseComponentProps {\n  onLinkClick?: (event: React.MouseEvent) => void;\n  items: TabsNavigationItemProps[];\n  selectTab: (index: number) => void;\n  selectedTab: number;\n}\n\n/**\n * Returns the entire tab component.\n *\n * @param items - Contains text, content, and maxColumns\n * @param className - Attribute for selecting CSS class\n * @param selectTab - UseState hook for selecting the tab\n * @param selectedTab - UseState hook for accessing selected tab\n */\nexport const TabItems: FC<PropsWithChildren<TabItemsProps>> = ({\n  items,\n  className,\n  selectTab,\n  selectedTab,\n}) => {\n  useMotifStyles(MotifComponent.TABS);\n\n  const containerRef = useRef<HTMLDivElement | null>(null);\n  const listContainerRef = useRef<HTMLUListElement | null>(null);\n  const arrowContainerRef = useRef<HTMLDivElement | null>(null);\n\n  const [isRTL, setIsRTL] = useState(false);\n  const [scrollPosition, setScrollPosition] = useState(0);\n  const [hasOverflow, setHasOverflow] = useState(false);\n  const { width: windowWidth } = useWindowSize();\n\n  const centerTab = useCallback((index: number) => {\n    if (listContainerRef.current) {\n      const selectedTabItem = listContainerRef.current.children[index];\n\n      if (selectedTabItem) {\n        selectedTabItem.scrollIntoView({\n          behavior: 'smooth',\n          block: 'nearest',\n          inline: 'center',\n        });\n      }\n    }\n  }, []);\n\n  const scroll = useCallback(\n    (scrollNum: number) => {\n      if (containerRef.current) {\n        const newScrollPosition = scrollPosition + scrollNum;\n        containerRef.current.scrollLeft = newScrollPosition;\n      }\n    },\n    [scrollPosition]\n  );\n\n  let parentTabWidth = 0;\n  let totalTabWidth = 0;\n\n  if (arrowContainerRef.current && containerRef.current?.parentElement) {\n    parentTabWidth =\n      containerRef.current.parentElement.scrollWidth - arrowContainerRef.current.scrollWidth;\n    totalTabWidth = containerRef.current.scrollWidth;\n  }\n\n  const onScroll = useCallback(\n    (direction: TabDirection) => {\n      if (isRTL) {\n        if (direction === 'Left' && -scrollPosition + parentTabWidth < totalTabWidth) {\n          scroll(Math.min(-parentTabWidth, -scrollPosition));\n        }\n\n        if (direction === 'Right' && scrollPosition < 0) {\n          scroll(Math.max(parentTabWidth, scrollPosition));\n        }\n      } else {\n        if (direction === 'Left' && scrollPosition > 0) {\n          scroll(Math.max(-parentTabWidth, -scrollPosition));\n        }\n\n        if (direction === 'Right' && scrollPosition + parentTabWidth < totalTabWidth) {\n          scroll(Math.min(parentTabWidth, totalTabWidth - (scrollPosition + parentTabWidth)));\n        }\n      }\n    },\n    [isRTL, parentTabWidth, scroll, scrollPosition, totalTabWidth]\n  );\n\n  useBrowserLayoutEffect(() => {\n    let totalParentWidth = 0;\n    let totalTabWidth = 0;\n    let arrowWidth = 0;\n    setIsRTL(!!containerRef?.current?.closest('[dir=\"rtl\"]'));\n\n    if (containerRef.current?.parentElement) {\n      totalParentWidth = containerRef.current.parentElement.scrollWidth;\n      totalTabWidth = containerRef.current.scrollWidth;\n    }\n\n    if (arrowContainerRef.current) {\n      arrowWidth = arrowContainerRef.current.scrollWidth;\n    }\n    const parentTabWidth = totalParentWidth - arrowWidth;\n\n    if (totalTabWidth > parentTabWidth) {\n      setHasOverflow(true);\n    } else {\n      setHasOverflow(false);\n    }\n  }, [windowWidth, items]);\n\n  const mode = useMediaMode();\n  const isMobile = mode === MediaMode.Mobile;\n\n  const [swipePosition, setSwipePosition] = useState(0);\n\n  useEffect(() => {\n    const element = containerRef?.current;\n    if (!element) return;\n\n    const swipeListener = () => {\n      /* There is an issue with the swipe poisition being .5px out in some cases so using\n       * Math.ceil() to force to closest whole number\n       */\n      setSwipePosition(Math.ceil(containerRef?.current?.scrollLeft ?? 0));\n    };\n\n    // Mobile should track scroll as well as touch events as active items are auto-scrolled\n    const scrollListener = () => {\n      /* There is an issue with the swipe poisition being .5px out in some cases so using\n       * Math.ceil() to force to closest whole number\n       */\n      setSwipePosition(Math.ceil(containerRef?.current?.scrollLeft ?? 0));\n      setScrollPosition(Math.ceil(containerRef?.current?.scrollLeft ?? 0));\n    };\n\n    element.addEventListener('touchmove', swipeListener, { passive: false });\n    element.addEventListener('scroll', scrollListener, { passive: false });\n\n    return () => {\n      element.removeEventListener('touchmove', swipeListener);\n      element.removeEventListener('scroll', scrollListener);\n    };\n  }, [containerRef]);\n\n  let isDisabledLeft = false;\n  let isDisabledRight = false;\n\n  if (isRTL) {\n    isDisabledLeft = scrollPosition <= -totalTabWidth + parentTabWidth;\n    isDisabledRight = scrollPosition === 0;\n  } else {\n    isDisabledLeft = scrollPosition === 0;\n    isDisabledRight = scrollPosition >= totalTabWidth - parentTabWidth;\n  }\n\n  let isGradientLeft = false;\n  let isGradientRight = false;\n\n  if (isRTL) {\n    if (isMobile) {\n      isGradientLeft = Math.ceil(-swipePosition) < totalTabWidth - parentTabWidth;\n      isGradientRight = swipePosition < 0;\n    } else {\n      isGradientLeft = -scrollPosition <= totalTabWidth - parentTabWidth;\n      isGradientRight = scrollPosition < 0;\n    }\n  } else {\n    if (isMobile) {\n      isGradientLeft = swipePosition > 0;\n      isGradientRight = swipePosition < totalTabWidth - parentTabWidth;\n    } else {\n      isGradientLeft = scrollPosition > 0;\n      isGradientRight = scrollPosition < totalTabWidth - parentTabWidth;\n    }\n  }\n\n  return (\n    <nav\n      className={cx('sdsm-tabs-item', tabsContainerCss, {\n        [tabsContainerOverflowMobileCss]: isMobile && hasOverflow,\n      })}\n    >\n      {isGradientLeft && hasOverflow && <div className={leftGradientCss} />}\n      <div\n        ref={containerRef}\n        className={cx(tabItemContainerCss, {\n          [tabItemContainterOverflowMobileCss]: isMobile && hasOverflow,\n        })}\n      >\n        <ul\n          ref={listContainerRef}\n          className={cx(tabItemListCss, {\n            [tabItemListStartCss]: hasOverflow,\n            [tabItemListCenterCss]: !hasOverflow,\n          })}\n          role=\"tablist\"\n        >\n          {items?.map((item, index) => {\n            const isSelected = selectedTab === index;\n            return (\n              <li\n                // biome-ignore lint/a11y/noNoninteractiveElementToInteractiveRole: It's made interactible via tabindex.\n                role=\"tab\"\n                tabIndex={0}\n                aria-current={isSelected}\n                id={`tab-${index}`}\n                key={`tabItem-${index}`}\n                className={cx(\n                  itemLinkCss,\n                  {\n                    [itemLinkActiveCss]: isSelected,\n                  },\n                  className\n                )}\n                onClick={() => {\n                  selectTab(index);\n                  centerTab(index);\n                }}\n                onKeyUp={() => {\n                  selectTab(index);\n                  centerTab(index);\n                }}\n              >\n                {item.text}\n              </li>\n            );\n          })}\n        </ul>\n      </div>\n      {isGradientRight && hasOverflow && <div className={rightGradientCss} />}\n      {hasOverflow && (\n        <div ref={arrowContainerRef} className={arrowButtonContainerCss}>\n          <TabArrows\n            direction={TabDirection.Left}\n            onClick={() => {\n              onScroll(TabDirection.Left);\n            }}\n            isDisabled={isDisabledLeft}\n          />\n          <TabArrows\n            direction={TabDirection.Right}\n            onClick={() => {\n              onScroll(TabDirection.Right);\n            }}\n            isDisabled={isDisabledRight}\n          />\n        </div>\n      )}\n    </nav>\n  );\n};\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, nonMobileMediaQuery, ZIndex } from '../../constants';\nimport { m } from '../../motif';\n\nexport const tabsPanelsCss = css`\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  width: 100%;\n\n  & > div {\n    margin: auto;\n  }\n\n  ${mobileMediaQuery} {\n    margin-top: ${m('--spacing-m')};\n  }\n`;\n\nexport const arrowButtonContainerCss = css`\n  display: flex;\n  z-index: ${ZIndex.HERO_CURTAIN};\n  background-color: ${m('--bg-color')};\n  min-width: 80px;\n  justify-content: center;\n  align-items: center;\n  padding: 0 0 0 0;\n  margin: 0 0 0 0;\n  flex-direction: row;\n  [dir='rtl'] & {\n    flex-direction: row-reverse;\n  }\n  ${mobileMediaQuery} {\n    display: none;\n  }\n`;\n\nexport const arrowCss = css`\n  cursor: pointer;\n  z-index: ${ZIndex.CAROUSEL_ARROW};\n  background-color: ${m('--bg-color')};\n  border: none;\n\n  :disabled {\n    opacity: 50%;\n  }\n  ${mobileMediaQuery} {\n    display: none;\n  }\n`;\n\nexport const leftGradientCss = css`\n  background: linear-gradient(to left, transparent 10%, ${m('--bg-color')} 100%);\n  content: '';\n  display: block;\n  height: calc(${m('--spacing-xxxxl')} + 1px);\n  left: 0;\n  pointer-events: none;\n  position: absolute;\n  width: 80px;\n  z-index: ${ZIndex.CAROUSEL_SIDE_GRADIENT};\n\n  [dir='rtl'] & {\n    /*\n    The height is 1px less on the left-side (RTL) on desktop so that this gradient does not cover the bottom border line.\n    This is because there are arrow buttons on desktop so the gradient is not the farthest element to the right.\n    */\n    height: ${m('--spacing-xxxxl')};\n    left: ${m('--spacing-xxxxl')};\n  }\n\n  ${mobileMediaQuery} {\n    height: calc(${m('--spacing-xxxxl')} + 1px);\n    left: 0;\n\n    [dir='rtl'] & {\n      height: calc(${m('--spacing-xxxxl')} + 1px);\n      left: 0;\n    }\n  }\n`;\n\nexport const rightGradientCss = css`\n  background: linear-gradient(to right, transparent 10%, ${m('--bg-color')} 100%);\n  content: '';\n  display: block;\n  /*\n  The height is 1px less on the right-side on desktop so that this gradient does not cover the bottom border line.\n  This is because there are arrow buttons on desktop so the gradient is not the farthest element to the right.\n  */\n  height: ${m('--spacing-xxxxl')};\n  pointer-events: none;\n  position: absolute;\n  right: ${m('--spacing-xxxxl')};\n  width: 80px;\n  z-index: ${ZIndex.CAROUSEL_SIDE_GRADIENT};\n\n  [dir='rtl'] & {\n    height: calc(${m('--spacing-xxxxl')} + 1px);\n    right: 0;\n  }\n\n  ${mobileMediaQuery} {\n    height: calc(${m('--spacing-xxxxl')} + 1px);\n    right: 0;\n\n    [dir='rtl'] & {\n      height: calc(${m('--spacing-xxxxl')} + 1px);\n      right: 0;\n    }\n  }\n`;\n\nexport const tabsContainerCss = css`\n  border-bottom: 1px ${m('--tabs-underline-color')} solid;\n  display: flex;\n  margin: 0 ${m('--spacing-xxxl')} 0 ${m('--spacing-xxxl')};\n  max-width: 100%;\n  padding-top: ${m('--spacing-xl')};\n  position: relative;\n\n  ${mobileMediaQuery} {\n    /*\n    The border is applied to a different element on mobile due to different visual requirements:\n    - Desktop: continue border under arrow buttons\n    - Mobile: border stops at end of last item\n    */\n    border-bottom: none;\n    margin: 0 ${m('--spacing-xs')} 0 ${m('--spacing-xs')};\n    padding: 0;\n  }\n`;\n\n/**\n * Stretch the tabs container to the screen edge for mobile screens when the number of items\n * overflows the container\n */\nexport const tabsContainerOverflowMobileCss = css`\n  ${mobileMediaQuery} {\n    margin-inline-end: calc(50% - 50vw);\n    position: relative;\n    max-width: unset;\n  }\n`;\n\nexport const tabItemContainerCss = css`\n  display: flex;\n  overflow: hidden;\n  position: relative;\n  scroll-behavior: smooth;\n  width: 100%;\n  z-index: ${ZIndex.BUTTON};\n\n  ${mobileMediaQuery} {\n    overflow-x: auto;\n    padding-inline-start: 0;\n\n    &::-webkit-scrollbar {\n      display: none;\n    }\n  }\n`;\n\nexport const tabItemContainterOverflowMobileCss = css`\n  padding-inline-end: ${m('--spacing-xl')};\n`;\n\nexport const tabItemListCss = css`\n  align-items: center;\n  display: flex;\n  flex: 1;\n  gap: ${m('--spacing-xl')};\n  list-style: none;\n  margin: 0;\n  padding: 0;\n\n  ${mobileMediaQuery} {\n    border-bottom: 1px ${m('--tabs-underline-color')} solid;\n    justify-content: start;\n  }\n`;\n\nexport const tabItemListCenterCss = css`\n  justify-content: center;\n`;\n\nexport const tabItemListStartCss = css`\n  justify-content: flex-start;\n`;\n\nconst itemLinkUnderlineCss = css`\n  &::after {\n    bottom: 0px;\n    content: '';\n    position: absolute;\n    transition: all 0.15s ease;\n    visibility: hidden;\n    width: 100%;\n    text-align: left;\n    margin-left: 0;\n    height: 0px;\n    border-top: 5px solid;\n    border-radius: ${m('--action-indicator-border-radius')};\n    margin-bottom: -5px;\n    color: ${m('--tabs-item-color')};\n  }\n\n  &.active::after {\n    visibility: visible;\n    color: ${m('--tabs-indicator-active-color')};\n  }\n\n  &:hover::after {\n    transform: translateY(-4px);\n    visibility: visible;\n    color: ${m('--tabs-indicator-hover-color')};\n  }\n`;\n\nconst itemLinkUnderlineActiveCss = css`\n  &::after {\n    transform: translateY(-4px);\n    visibility: visible;\n    color: ${m('--tabs-indicator-active-color')};\n  }\n  &:hover::after {\n    color: ${m('--tabs-indicator-active-color')};\n  }\n`;\n\nexport const itemLinkCss = css`\n  align-items: center;\n  cursor: pointer;\n  color: ${m('--tabs-item-color')};\n  display: flex;\n\n  :hover {\n    color: ${m('--tabs-item-hover-color')};\n  }\n\n  position: relative;\n  text-decoration: none;\n  justify-content: center;\n  white-space: nowrap;\n  user-select: none;\n\n  ${mobileMediaQuery} {\n    font-size: ${m('--action-mobile-font-size')};\n    font-weight: ${m('--action-mobile-font-weight')};\n  }\n\n  ${nonMobileMediaQuery} {\n    font-size: ${m('--action-desktop-font-size')};\n    font-weight: ${m('--action-desktop-font-weight')};\n  }\n\n  line-height: ${m('--spacing-xxxxl')};\n\n  ${itemLinkUnderlineCss}\n`;\n\nexport const itemLinkActiveCss = css`\n  color: ${m('--tabs-item-active-color')};\n\n  &:hover {\n    color: ${m('--tabs-item-active-color')};\n  }\n\n  ${itemLinkUnderlineActiveCss}\n`;\n\nexport const tabBreakCss = css`\n  z-index: ${ZIndex.NAVIGATOR_BUTTON};\n  width: 100%;\n  ${mobileMediaQuery} {\n    width: calc(100% - ${m('--spacing-xl')}px);\n  }\n  height: 16px;\n  position: relative;\n  margin-top: -${m('--spacing-xs')};\n  background-color: ${m('--bg-color')};\n`;\n", "import type { FC } from 'react';\n\nimport { Icon } from '../Icon';\nimport { arrowCss } from './styles';\nimport type { TabDirection } from './types';\n\nexport interface TabArrowsProps {\n  direction: TabDirection;\n  onClick?: () => void;\n  isDisabled: boolean;\n}\n\n/**\n * Returns the tab arrow components.\n *\n * @param direction - Direction that the arrow is pointing to\n * @param onClick - Handles arrow clicks\n * @param isDisabled - Checks if the arrows are enabled or disabled\n */\nexport const TabArrows: FC<TabArrowsProps> = ({ direction, onClick, isDisabled }) => {\n  const iconName = direction === 'Left' ? 'chevron-left' : 'chevron-right';\n  return (\n    <button disabled={isDisabled} className={arrowCss} onClick={onClick}>\n      <Icon name={iconName} size={22} />\n    </button>\n  );\n};\n", "import type { FC } from 'react';\nimport { useCallback, useRef, useState } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { TabItems } from './TabItems';\nimport { TabsContext } from './TabsContext';\nimport { TabsPanels } from './TabsPanels';\nimport type { TabsV2NavigationProps } from './types';\n\nexport const Tabs: FC<TabsV2NavigationProps> = ({ items, defaultSelectedTab = 0, onSelectTab }) => {\n  const [selectedTab, selectTab] = useState(defaultSelectedTab);\n  const eventListenersRef = useRef([] as (() => void)[]);\n\n  useMotifStyles(MotifComponent.TABS);\n\n  const handleSelectTab = useCallback(\n    (index: number) => {\n      selectTab(index);\n      onSelectTab?.(index);\n      // call all event listners registered\n      eventListenersRef.current.forEach(listener => listener?.());\n    },\n    [selectTab, onSelectTab]\n  );\n\n  if (!items || items.length < 2) {\n    return null;\n  }\n\n  return (\n    <TabsContext.Provider\n      value={{\n        addOnTabChangeListener(listener) {\n          eventListenersRef.current.push(listener);\n        },\n        removeOnTabChangeListener(listener) {\n          eventListenersRef.current = eventListenersRef.current.filter(l => l !== listener);\n        },\n      }}\n    >\n      <div className={MotifComponent.TABS} data-testid=\"sdsm-tabs\">\n        <TabItems items={items} selectTab={handleSelectTab} selectedTab={selectedTab} />\n        <TabsPanels items={items} selectedTab={selectedTab} />\n      </div>\n    </TabsContext.Provider>\n  );\n};\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\n// TODO: This is wrong. Shouldn't be importing styles from the Block!!!\nimport {\n  contentContainerCss,\n  contentContainerStyle1ColumnCss,\n  contentContainerStyle2ColumnCss,\n  contentContainerStyle3ColumnCss,\n} from '../Block/Block.styled';\nimport { tabsPanelsCss } from './styles';\nimport type { TabsNavigationItemProps } from './types';\n\nconst contentContainerStyles = {\n  1: contentContainerStyle1ColumnCss,\n  2: contentContainerStyle2ColumnCss,\n  3: contentContainerStyle3ColumnCss,\n} as Record<number, string>;\n\nexport interface TabsPanelProps {\n  items: Array<TabsNavigationItemProps>;\n  selectedTab: number;\n}\n\nexport const TabsPanels: FC<TabsPanelProps> = ({ items, selectedTab }) => {\n  return (\n    <div className={tabsPanelsCss}>\n      {items.map((item, index) => (\n        <div\n          key={`tabPanel-${index}`}\n          role=\"tabpanel\"\n          className={cx(contentContainerCss, contentContainerStyles[item.maxColumns ?? 3])}\n          style={selectedTab !== index ? { display: 'none' } : undefined}\n        >\n          {item.content.map(content => content)}\n        </div>\n      ))}\n    </div>\n  );\n};\n", "import type { ValueOf } from '../../types';\n\nexport const TileImageSize = {\n  Small: 'Small',\n  Medium: 'Medium',\n  Large: 'Large',\n} as const;\n\nexport type TileImageSize = ValueOf<typeof TileImageSize>;\n\nexport const TileImageFit = {\n  Contain: 'Contain',\n  Cover: 'Cover',\n} as const;\n\nexport type TileImageFit = ValueOf<typeof TileImageFit>;\n", "import { mapValues } from 'radashi';\n\nimport { Spacing } from '../../constants';\nimport { TileImageSize } from './types';\n\nexport const labelLineHeight = 29;\nexport const labelHeight = labelLineHeight + Spacing.SM;\n// This Heading.H500.lineHeight, can't reference it directly because it can be\n// a string, a number, or a string[] (wtf???)\nexport const textLineHeight = 28;\n\n/**\n * TODO: Remove as part of the package cleanup effort\n *\n * Once removed, set the value of 'tileWidth' directly\n *\n * @deprecated\n */\nexport const imgWidth = 284;\nexport const imgWidthWithIcon = 260;\nexport const imgHeight = 461;\nexport const imgHeightWithIcon = 419;\nexport const tileWidth = imgWidth;\nexport const tileHeight = Spacing.SM + imgHeight + labelHeight + 4 * textLineHeight;\n\nexport const imageHeightForImageSize = {\n  [TileImageSize.Small]: Math.floor(tileWidth / 2),\n  [TileImageSize.Medium]: tileWidth,\n  [TileImageSize.Large]: imgHeight,\n};\n\nexport const titleHeightForImageSize = mapValues(imageHeightForImageSize, (height: number) => {\n  const preresult = tileHeight - height;\n  return preresult - labelHeight;\n});\n\nexport const titleLinesForImageSize = mapValues(titleHeightForImageSize, (height: number) => {\n  return Math.floor(height / textLineHeight);\n});\n\n// This is the left/right margin of a tile whenever it is inside a Carousel.\nexport const tileCarouselMargin = Spacing.MD * 2;\n", "import { css, cx } from '@emotion/css';\nimport type { FC, MouseEventHandler, ReactNode } from 'react';\nimport { useCallback, useContext } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport type { BaseComponentProps, ImageSources } from '../../types';\nimport type { OnNavigateHandler } from '../../types/activationEvents';\nimport { Media } from '../Media';\nimport { Picture } from '../Picture';\nimport { PrimitivesContext } from '../Primitives';\nimport {\n  imageHeightForImageSize,\n  imgHeightWithIcon,\n  labelLineHeight,\n  titleHeightForImageSize,\n} from './constants';\nimport {\n  anchorCss,\n  containCss,\n  coverCss,\n  innerTitleCss,\n  innerTitleWithUserIconCss,\n  pointerCss,\n  tileCss,\n  tileImageClassName,\n  tileImageWithUserIconClassName,\n  tileLabelCss,\n  tileLabelWithUserIconCss,\n  tileNoBgImgCss,\n  tilePictureCss,\n  tileTitleCss,\n  tileTitleWithUserIconCss,\n  tileUserIconCss,\n  tileVideoWithUserIconClassName,\n  tileWithUserIconCss,\n} from './Tile.styled';\nimport { TileImageFit, TileImageSize } from './types';\nimport { tileTitleHeight, tileTitleLines } from './utils';\n\nexport interface TileProps extends BaseComponentProps {\n  /** @deprecated - Use `onClick` instead. Links open in new window if Super is pressed. */\n  onSuperClick?: OnNavigateHandler;\n  /** @deprecated - Does nothing */\n  bgImgClassName?: string;\n\n  label?: ReactNode;\n  title?: ReactNode;\n  onClick?: OnNavigateHandler;\n  link?: string;\n\n  /** If the media is a video, source goes here. */\n  videoSource?: string;\n\n  imageSource?: string;\n  imgSrcs?: ImageSources;\n\n  imgAltText?: string;\n  imagePadding?: boolean;\n  imageSize?: TileImageSize;\n  imageFit?: TileImageFit;\n\n  iconImageSource?: string;\n\n  /** If true, adds width and height to the container. */\n  tilesLayout?: boolean;\n\n  isRTL?: boolean;\n\n  iconImgSrcs?: ImageSources;\n  iconAltText?: string;\n}\n\nexport const Tile: FC<TileProps> = ({\n  className,\n  title,\n  imageSource,\n  videoSource,\n  iconImageSource,\n  label,\n  onClick,\n  imageSize = TileImageSize.Large,\n  imageFit = TileImageFit.Cover,\n  imagePadding = false,\n  link,\n  tilesLayout,\n  isRTL,\n  iconImgSrcs,\n  iconAltText,\n  imgSrcs,\n  imgAltText,\n}) => {\n  useMotifStyles(MotifComponent.TILE);\n  const { Anchor } = useContext(PrimitivesContext);\n\n  // Have to use 'undefined' for LTR to make it dynamic (discard dir attr). Only need override for RTL.\n  const dir = isRTL ? 'rtl' : undefined;\n\n  const onClickWrapped = useCallback<MouseEventHandler>(\n    event => {\n      link && onClick && onClick(link, event);\n    },\n    [link, onClick]\n  );\n\n  const imageHeight = imageHeightForImageSize[imageSize];\n\n  const useTileImageClassName = tileImageClassName({\n    imageSource,\n    imageFit,\n    imageHeight,\n    imagePadding,\n  });\n\n  const useTileImageWithUserIconClassName = tileImageWithUserIconClassName({\n    imageSource,\n    imageFit,\n    imageHeight: imgHeightWithIcon,\n    imagePadding,\n  });\n\n  const useTileVideoWithUserIconClassName = tileVideoWithUserIconClassName({\n    imageFit,\n    imageHeight: imgHeightWithIcon,\n    imagePadding,\n  });\n\n  const defaultInner = (\n    <div\n      data-testid=\"sdsm-tile-default-inner\"\n      className={cx(\n        MotifComponent.TILE,\n        {\n          [pointerCss]: !!onClick,\n        },\n        tileCss,\n        className\n      )}\n      onClick={link ? undefined : onClickWrapped}\n      dir={dir}\n    >\n      {(imageSource || imgSrcs) && (\n        <div\n          data-testid=\"sdsm-tile-image\"\n          className={cx(useTileImageClassName, imgSrcs ? tileNoBgImgCss : undefined)}\n        >\n          {imgSrcs && (\n            <Picture\n              altText={imgAltText}\n              imgSrcs={imgSrcs}\n              imgClassName={cx(\n                tilePictureCss,\n                imageFit === TileImageFit.Cover ? coverCss : containCss\n              )}\n            />\n          )}\n        </div>\n      )}\n      {(title || label) && (\n        <div\n          data-testid=\"sdsm-tile-text\"\n          className={cx(\n            tileTitleCss,\n            css`\n              height: ${titleHeightForImageSize[imageSize] + labelLineHeight}px;\n            `\n          )}\n        >\n          {label && <div className={tileLabelCss}>{label}</div>}\n          <div\n            className={innerTitleCss}\n            style={{\n              WebkitLineClamp: tileTitleLines({ imageSize, label }),\n              maxHeight: tileTitleHeight({ imageSize, label }),\n            }}\n          >\n            {title}\n          </div>\n        </div>\n      )}\n    </div>\n  );\n\n  const tilesInner = (\n    <div\n      data-testid=\"sdsm-tile-alternate-inner\"\n      className={cx(MotifComponent.TILE, tileWithUserIconCss, className)}\n      onClick={link ? undefined : onClickWrapped}\n      dir={dir}\n    >\n      {(imageSource || imgSrcs) && (\n        <div\n          data-testid=\"sdsm-tile-alternate-image\"\n          className={cx(useTileImageWithUserIconClassName, imgSrcs ? tileNoBgImgCss : undefined)}\n        >\n          {imgSrcs && (\n            <Picture\n              altText={imgAltText}\n              imgSrcs={imgSrcs}\n              imgClassName={cx(\n                tilePictureCss,\n                imageFit === TileImageFit.Cover ? coverCss : containCss\n              )}\n            />\n          )}\n        </div>\n      )}\n\n      {!imageSource && videoSource && (\n        <div data-testid=\"sdsm-tile-alternate-video\" className={useTileVideoWithUserIconClassName}>\n          <Media\n            showVideoControls={false}\n            videoSource={videoSource}\n            maxHeight={imgHeightWithIcon}\n            isBackgroundVideo\n          />\n        </div>\n      )}\n\n      {(iconImageSource || iconImgSrcs) && (\n        <Picture\n          altText={iconAltText}\n          imgSrcs={iconImgSrcs}\n          imgClassName={tileUserIconCss}\n          defaultSrc={iconImageSource}\n        />\n      )}\n\n      {(title || label) && (\n        <div data-testid=\"sdsm-tile-alternate-text\" className={tileTitleWithUserIconCss}>\n          {title && <div className={innerTitleWithUserIconCss}>{title}</div>}\n          {label && <div className={tileLabelWithUserIconCss}>{label}</div>}\n        </div>\n      )}\n    </div>\n  );\n\n  if (link) {\n    return (\n      <Anchor\n        data-testid=\"sdsm-tile-click-handler\"\n        href={link}\n        className={anchorCss}\n        onClick={onClickWrapped}\n      >\n        {tilesLayout ? tilesInner : defaultInner}\n      </Anchor>\n    );\n  }\n\n  return tilesLayout ? tilesInner : defaultInner;\n};\n\nTile.displayName = 'Tile';\n", "import { css } from '@emotion/css';\n\nimport { mobileMediaQuery, Spacing } from '../../constants';\nimport { p1Css, p2Css } from '../../motif';\nimport { m } from '../../motif/m';\nimport { imgWidthWithIcon, labelLineHeight, tileHeight, tileWidth } from './constants';\nimport { TileImageFit } from './types';\n\nexport const anchorCss = css`\n  text-decoration: none;\n`;\n\nexport const tileCss = css`\n  display: flex;\n  flex-direction: column;\n  width: ${tileWidth}px;\n  height: ${tileHeight}px;\n  border-radius: ${m('--spacing-xxs')};\n  box-shadow: ${m('--box-shadow-m')};\n  background-color: ${m('--tile-bg-color')};\n\n  *[dir='rtl'] & {\n    text-align: right;\n  }\n\n  &:hover {\n    box-shadow: ${m('--box-shadow-l')};\n  }\n`;\n\nexport interface TileImageClassNameProps {\n  imageSource?: string;\n  imageHeight: number;\n  imageFit: TileImageFit;\n  imagePadding: boolean;\n}\n\nexport const tileImageClassName = ({\n  imageSource,\n  imageHeight,\n  imageFit,\n  imagePadding,\n}: TileImageClassNameProps): string =>\n  css`\n    background-position: center;\n    background-repeat: no-repeat;\n    background-image: url(${imageSource});\n    height: ${imagePadding ? imageHeight - Spacing.SM : imageHeight}px;\n    margin-top: ${imagePadding ? Spacing.SM : 0}px;\n    margin-left: ${imagePadding ? Spacing.LG : 0}px;\n    margin-right: ${imagePadding ? Spacing.LG : 0}px;\n    background-size: ${imageFit === TileImageFit.Cover ? 'cover' : 'contain'};\n    border-radius: ${imagePadding ? Spacing['2XS'] : 0}px;\n    /* do the top corners of the image no matter what */\n    border-top-left-radius: ${m('--spacing-xxs')};\n    border-top-right-radius: ${m('--spacing-xxs')};\n  `;\n\nexport const tileLabelCss = css`\n  font-size: 18px;\n  line-height: ${labelLineHeight}px;\n  font-weight: normal;\n  margin-bottom: ${m('--spacing-s')};\n`;\n\nexport const tileTitleCss = css`\n  padding-left: ${m('--spacing-l')};\n  padding-right: ${m('--spacing-l')};\n  padding-top: ${m('--spacing-s')};\n  padding-bottom: ${m('--spacing-s')};\n  color: ${m('--tile-fg-color')};\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n`;\n\nexport const innerTitleCss = css`\n  ${p1Css}\n\n  /* stylelint-disable-next-line value-no-vendor-prefix */\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n\n  text-overflow: ellipsis;\n  overflow: hidden;\n`;\n\nexport const tileImageWithUserIconClassName = ({\n  imageSource,\n  imageHeight,\n  imageFit,\n  imagePadding,\n}: TileImageClassNameProps): string =>\n  css`\n    background-position: center;\n    background-repeat: no-repeat;\n    background-image: url(${imageSource});\n    height: ${imageHeight}px;\n    margin-top: 0;\n    margin-left: ${imagePadding ? Spacing.SM : 0}px;\n    margin-right: ${imagePadding ? Spacing.SM : 0}px;\n    background-size: ${imageFit === TileImageFit.Cover ? 'cover' : 'contain'}px;\n    border-radius: ${m('--spacing-xs')};\n    box-shadow: ${m('--box-shadow-l')};\n    /* For node > picture > img */\n    img {\n      border-radius: ${m('--spacing-xs')};\n    }\n  `;\n\nexport const tileVideoWithUserIconClassName = ({\n  imageHeight,\n  imageFit,\n  imagePadding,\n}: TileImageClassNameProps): string =>\n  css`\n    height: ${imageHeight}px;\n    margin-top: 0;\n    margin-left: ${imagePadding ? Spacing.SM : 0};\n    margin-right: ${imagePadding ? Spacing.SM : 0};\n    background-size: ${imageFit === TileImageFit.Cover ? 'cover' : 'contain'};\n    border-radius: ${m('--spacing-xs')};\n    box-shadow: ${m('--box-shadow-l')};\n\n    > div {\n      margin: 0;\n    }\n\n    video {\n      height: ${imageHeight}px;\n      width: 100%;\n    }\n\n    ${mobileMediaQuery} {\n      video {\n        width: ${imgWidthWithIcon}px;\n      }\n    }\n  `;\n\nexport const tileWithUserIconCss = css`\n  display: flex;\n  flex-direction: column;\n  border-radius: ${m('--spacing-xxs')};\n  background-color: transparent;\n  align-items: center;\n`;\n\nexport const tileUserIconCss = css`\n  width: 56px;\n  height: 56px;\n  margin: 16px auto 0 auto;\n`;\n\nexport const tileTitleWithUserIconCss = css`\n  /* Note: Not using --tile-fg-color here because it has no background. */\n  color: ${m('--fg-color')};\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  align-items: center;\n  margin-top: 16px;\n`;\n\nexport const innerTitleWithUserIconCss = css`\n  ${p1Css}\n  text-align: center;\n  padding-left: ${m('--spacing-s')};\n  padding-right: ${m('--spacing-s')};\n`;\n\nexport const tileLabelWithUserIconCss = css`\n  ${p2Css}\n  text-align: center;\n  padding-left: ${m('--spacing-s')};\n  padding-right: ${m('--spacing-s')};\n`;\n\nexport const tilePictureCss = css`\n  width: 100%;\n  height: 100%;\n  object-position: center;\n`;\n\nexport const coverCss = css`\n  object-fit: cover;\n`;\n\nexport const containCss = css`\n  object-fit: contain;\n`;\n\nexport const tileNoBgImgCss = css`\n  background-image: none;\n`;\n\nexport const pointerCss = css`\n  cursor: pointer;\n`;\n", "import type { ReactNode } from 'react';\n\nimport { labelHeight, textLineHeight, titleHeightForImageSize } from './constants';\nimport type { TileImageSize } from './types';\n\nexport interface TileTitleProps {\n  imageSize: TileImageSize;\n  label?: ReactNode;\n}\n\nexport const tileTitleHeight = ({ imageSize, label }: TileTitleProps): number => {\n  const baseHeight = titleHeightForImageSize[imageSize];\n\n  if (label) {\n    return baseHeight;\n  }\n\n  return baseHeight + labelHeight;\n};\n\n/** @deprecated Just use line-clamp which is available now. TODO: Update. */\nexport const tileTitleLines = ({ imageSize, label }: TileTitleProps): number => {\n  const h = tileTitleHeight({ imageSize, label });\n  return Math.floor(h / textLineHeight);\n};\n", "import { css } from '@emotion/css';\n\nimport { m } from '../../motif';\n\nexport const topicStylesCss = css`\n  align-items: center;\n  /* Reusing --action-text-default-color since it has the color value defined by Design. This may change in the future. */\n  border: ${m('--border-width-xs')} solid ${m('--action-text-default-color')};\n  border-radius: ${m('--border-radius-s')};\n  color: ${m('--fg-color')};\n  display: flex;\n  font-family: ${m('--font-family')};\n  font-size: 14px;\n  font-weight: 500;\n  justify-content: center;\n  line-height: 88%;\n  padding: ${m('--spacing-xs')};\n  text-align: center;\n  text-decoration: none;\n  text-transform: capitalize;\n  white-space: nowrap;\n\n  &:hover {\n    background-color: ${m('--topic-hover-bg-color')};\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../motif';\nimport { Anchor } from '../Primitives';\nimport { topicStylesCss } from './Topic.styles';\nimport type { TopicProps } from './types';\n\nexport const Topic: FC<TopicProps> = props => {\n  useMotifStyles(MotifComponent.TOPIC);\n  const { displayText, url } = props;\n\n  if (!displayText) {\n    return null;\n  }\n\n  if (!url) {\n    return (\n      <span className={cx(MotifComponent.TOPIC, topicStylesCss)} data-testid={MotifComponent.TOPIC}>\n        {displayText}\n      </span>\n    );\n  }\n\n  return (\n    <Anchor\n      className={cx(MotifComponent.TOPIC, topicStylesCss)}\n      href={url}\n      data-testid={MotifComponent.TOPIC}\n    >\n      {displayText}\n    </Anchor>\n  );\n};\n", "import { css } from '@emotion/css';\n\nimport { nonTwoColumnCollapseMediaQuery, White } from '../../../constants';\nimport { m } from '../../../motif';\n\nexport const skeletonWrapperCss = css`\n  background-color: ${White};\n  border-radius: ${m('--border-radius-xl')};\n  display: flex;\n  justify-content: center;\n  padding: 20px;\n\n  ${nonTwoColumnCollapseMediaQuery} {\n    padding: ${m('--spacing-xxl')};\n  }\n`;\n\nexport const skeletonChartCss = css`\n  background-color: ${m('--chart-skeleton-bg-color')};\n  border-radius: ${m('--border-radius-xl')};\n  overflow: hidden;\n  position: relative;\n  width: 100%;\n\n  ${nonTwoColumnCollapseMediaQuery} {\n    margin: 0px 112px;\n  }\n`;\n\nexport const skeletonSvgCss = css`\n  height: 100%;\n  width: 100%;\n`;\n\nexport const skeletonSvgBackgroundCss = css`\n  fill: url('#shimmerGradient');\n  mask: url('#shimmerMask');\n`;\n\nexport const skeletonSvgMaskCss = css`\n  fill: ${m('--chart-skeleton-mask-color')};\n`;\n\nexport const skeletonSvgGradientDarkColorCss = css`\n  stop-color: ${m('--chart-skeleton-dark-animation-color')};\n`;\n\nexport const skeletonSvgGradientLightColorCss = css`\n  stop-color: ${m('--chart-skeleton-light-animation-color')};\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../../motif';\nimport {\n  skeletonChartCss,\n  skeletonSvgBackgroundCss,\n  skeletonSvgCss,\n  skeletonSvgGradientDarkColorCss,\n  skeletonSvgGradientLightColorCss,\n  skeletonSvgMaskCss,\n  skeletonWrapperCss,\n} from './styles';\n\nconst animationDuration = '2s';\n\nexport const ChartSkeleton: FC = () => {\n  useMotifStyles(MotifComponent.CHART_SKELETON);\n  return (\n    <article className={cx(MotifComponent.CHART_SKELETON, skeletonWrapperCss)}>\n      <div className={skeletonChartCss}>\n        <svg\n          viewBox=\"0 0 664 328\"\n          fill=\"none\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          className={skeletonSvgCss}\n        >\n          <defs>\n            {/* Define the shimmer gradient */}\n            <linearGradient id=\"shimmerGradient\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n              <stop className={skeletonSvgGradientDarkColorCss} offset=\"0%\" strokeOpacity={1} />\n              <stop className={skeletonSvgGradientLightColorCss} offset=\"50%\" strokeOpacity={1} />\n              <stop className={skeletonSvgGradientDarkColorCss} offset=\"100%\" strokeOpacity={1} />\n              <animate\n                attributeName=\"x1\"\n                values=\"-100%;100%\"\n                dur={animationDuration}\n                repeatCount=\"indefinite\"\n              />\n              <animate\n                attributeName=\"x2\"\n                values=\"0%;200%\"\n                dur={animationDuration}\n                repeatCount=\"indefinite\"\n              />\n            </linearGradient>\n            {/* Define the shimmer mask */}\n            <mask id=\"shimmerMask\">\n              <rect\n                className={skeletonSvgMaskCss}\n                height=\"11.0865\"\n                rx=\"5.54325\"\n                width=\"31.4118\"\n                x=\"36.955\"\n                y=\"60.0518\"\n              />\n              <rect\n                className={skeletonSvgMaskCss}\n                height=\"11.0865\"\n                rx=\"5.54325\"\n                width=\"31.4118\"\n                x=\"36.955\"\n                y=\"113.944\"\n              />\n              <rect\n                className={skeletonSvgMaskCss}\n                height=\"11.0865\"\n                rx=\"5.54325\"\n                width=\"31.4118\"\n                x=\"36.955\"\n                y=\"167.838\"\n              />\n              <rect\n                className={skeletonSvgMaskCss}\n                height=\"11.0865\"\n                rx=\"5.54325\"\n                width=\"31.4118\"\n                x=\"36.955\"\n                y=\"221.73\"\n              />\n              <path\n                className={skeletonSvgMaskCss}\n                clipRule=\"evenodd\"\n                d=\"M609.376 62.2274C613.179 65.7331 613.232 71.466 609.493 75.0322L484.305 194.434C479.871 198.663\n                472.912 199.467 467.516 196.374L472.552 188.649L467.516 196.374L347.249 127.445L229.404 229.841C225.443\n                233.282 219.686 234.2 214.734 232.18L218.588 223.877L214.734 232.18L98.1939 184.629C93.3034 182.634\n                91.0641 177.299 93.1923 172.714C95.3205 168.128 101.01 166.029 105.901 168.024L219.015 214.177L337.294\n                111.404C341.761 107.523 348.434 106.899 353.63 109.877L348.593 117.603L353.63 109.877L473.715\n                178.703L595.719 62.3369C599.458 58.7707 605.573 58.7217 609.376 62.2274ZM470.541 181.73C470.538\n                181.733 470.535 181.736 470.532 181.739L474.608 185.495L470.532 181.739L470.541 181.73Z\"\n                fillRule=\"evenodd\"\n              />\n              <rect\n                className={skeletonSvgMaskCss}\n                height=\"11.0865\"\n                rx=\"5.54325\"\n                width=\"36.955\"\n                x=\"77.6056\"\n                y=\"265.152\"\n              />\n              <rect\n                className={skeletonSvgMaskCss}\n                height=\"11.0865\"\n                rx=\"5.54325\"\n                width=\"36.955\"\n                x=\"205.727\"\n                y=\"265.152\"\n              />\n              <rect\n                className={skeletonSvgMaskCss}\n                height=\"11.0865\"\n                rx=\"5.54325\"\n                width=\"36.955\"\n                x=\"333.848\"\n                y=\"265.152\"\n              />\n              <rect\n                className={skeletonSvgMaskCss}\n                height=\"11.0865\"\n                rx=\"5.54325\"\n                width=\"36.955\"\n                x=\"461.969\"\n                y=\"265.152\"\n              />\n              <rect\n                className={skeletonSvgMaskCss}\n                height=\"11.0865\"\n                rx=\"5.54325\"\n                width=\"36.955\"\n                x=\"590.09\"\n                y=\"265.152\"\n              />\n            </mask>\n          </defs>\n\n          <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" className={skeletonSvgBackgroundCss} />\n        </svg>\n      </div>\n    </article>\n  );\n};\n", "import type { FC } from 'react';\nimport { useEffect, useState } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../../motif';\nimport { ChartToggleButtons } from './ChartToggleButtons';\nimport { TabsPanels as ChartTogglePanels } from './ChartTogglePanels';\nimport type { ChartToggleItemProps, ChartToggleProps } from './types';\n\nexport const ChartToggle: FC<ChartToggleProps> = ({ items }) => {\n  const [selectedChart, selectChart] = useState(0);\n  useMotifStyles(MotifComponent.CHART_TOGGLE);\n\n  useEffect(() => {\n    const { onToggle } = items[selectedChart] as ChartToggleItemProps;\n    onToggle?.();\n  }, [items, selectedChart]);\n\n  if (!items?.length) {\n    return null;\n  }\n\n  return (\n    <section className={MotifComponent.CHART_TOGGLE}>\n      <ChartToggleButtons items={items} selectedChart={selectedChart} selectChart={selectChart} />\n      <ChartTogglePanels items={items} selectedChart={selectedChart} />\n    </section>\n  );\n};\n", "import { cx } from '@emotion/css';\nimport type { FC, ReactNode } from 'react';\n\nimport type { BaseComponentProps } from '../../../types';\nimport type { OnActivateHandler } from '../../../types/activationEvents';\nimport { buttonActiveClassName, buttonCss } from './styles';\n\nexport interface Props extends BaseComponentProps {\n  children?: ReactNode;\n  active?: boolean;\n  onClick?: OnActivateHandler;\n}\n\nexport const ChartToggleButton: FC<Props> = ({ children, active, onClick }) => {\n  const className = cx(buttonCss, active && buttonActiveClassName);\n\n  return (\n    <button role=\"tab\" onClick={onClick} className={className}>\n      {children}\n    </button>\n  );\n};\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport { ChartToggleButton } from './ChartToggleButton';\nimport { buttonsCss, buttonsWrapperClassName, buttonsWrapperCss } from './styles';\nimport type { ChartToggleItemProps } from './types';\n\nexport interface ChartToggleButtonsProps {\n  items: Array<ChartToggleItemProps>;\n  selectedChart: number;\n  selectChart: (index: number) => void;\n}\n\nexport const ChartToggleButtons: FC<ChartToggleButtonsProps> = ({\n  items,\n  selectedChart,\n  selectChart,\n}) => {\n  const handleOnClick = (index: number) => {\n    if (selectedChart !== index) {\n      selectChart(index);\n    }\n  };\n\n  const wrapperClassName = cx(buttonsWrapperCss, buttonsWrapperClassName);\n\n  return (\n    <div className={wrapperClassName}>\n      <nav className={buttonsCss} role=\"tablist\">\n        {items.map(({ title }, index) => (\n          <ChartToggleButton\n            key={`chart-button-${index}`}\n            active={selectedChart === index}\n            onClick={() => handleOnClick(index)}\n          >\n            {title}\n          </ChartToggleButton>\n        ))}\n      </nav>\n    </div>\n  );\n};\n", "import type { FC } from 'react';\n\nimport { contentContainerStyle1ColumnCss, panelsCss } from './styles';\nimport type { ChartToggleItemProps } from './types';\nexport interface Props {\n  items: Array<ChartToggleItemProps>;\n  selectedChart: number;\n}\n\nexport const TabsPanels: FC<Props> = ({ items, selectedChart }) => {\n  return (\n    <div className={panelsCss} role=\"tabpanel\">\n      {items.map(\n        ({ content }, index) =>\n          selectedChart === index && (\n            <div key={index} className={contentContainerStyle1ColumnCss}>\n              {content}\n            </div>\n          )\n      )}\n    </div>\n  );\n};\n", "import type { FC } from 'react';\n\nimport type { ChartToggleItemProps } from './types';\n\nexport interface ChartTogglePanelsV2Props {\n  items: Array<ChartToggleItemProps>;\n  selectedChart: string;\n}\n\nexport const ChartTogglePanelsV2: FC<ChartTogglePanelsV2Props> = ({ items, selectedChart }) => {\n  // We need to have this component as a direct child on the ChartToggleWrapper component.\n  return <>{items.map(({ content }, index) => selectedChart === index.toString() && content)}</>;\n};\n", "import type { FC } from 'react';\nimport { useEffect, useState } from 'react';\n\nimport { MotifComponent, useMotifStyles } from '../../../motif';\nimport { DropdownSkeleton } from '../../DropdownMenu/DropdownSkeleton';\nimport { ChartToggleDropdown } from './ChartToggleDropdowns';\nimport { ChartTogglePanelsV2 } from './ChartTogglePanelsV2';\nimport type { ChartToggleItemProps, ChartToggleV2Props } from './types';\n\nexport const ChartToggleV2: FC<ChartToggleV2Props> = ({ items, label, isLoading }) => {\n  const [selectedChart, selectChart] = useState('0');\n  useMotifStyles(MotifComponent.CHART_TOGGLE);\n\n  // Logic to call ChartToggleItemProps onToggle.\n  // This is set on MW side and should log the dropdown change.\n  useEffect(() => {\n    if (!items?.length) {\n      return;\n    }\n\n    const { onToggle } = items[Number(selectedChart)] as ChartToggleItemProps;\n    onToggle?.();\n  }, [items, selectedChart]);\n\n  if (isLoading) {\n    return <DropdownSkeleton />;\n  }\n\n  if (!items?.length) {\n    return null;\n  }\n\n  // We need to have this component as a direct child on the ChartToggleWrapper component.\n  return (\n    <>\n      <ChartToggleDropdown\n        label={label}\n        items={items}\n        selectedChart={selectedChart}\n        selectChart={selectChart}\n      />\n      <ChartTogglePanelsV2 items={items} selectedChart={selectedChart} />\n    </>\n  );\n};\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport type { DropdownItemProps } from '../../DropdownMenu';\nimport { DropdownMenu } from '../../DropdownMenu';\nimport { dropdownCss, dropdownWrapperClassName, noLabelCss } from './styles';\nimport type { ChartToggleDropdownsProps } from './types';\n\nexport const ChartToggleDropdown: FC<ChartToggleDropdownsProps> = ({\n  label,\n  items,\n  selectedChart,\n  selectChart,\n}) => {\n  const handleOnClick = (item: DropdownItemProps) => {\n    if (selectedChart !== item.id) {\n      selectChart(item.id);\n    }\n  };\n\n  const dropdownItems = items.map((item, index) => ({\n    id: index.toString(),\n    title: item.title,\n    isSelected: index.toString() === selectedChart,\n  }));\n\n  return (\n    <div\n      className={cx(dropdownWrapperClassName, dropdownCss, {\n        [noLabelCss]: !label,\n      })}\n    >\n      {label && <label>{label}</label>}\n      <DropdownMenu\n        items={dropdownItems}\n        selectedItemId={selectedChart}\n        onItemSelect={handleOnClick}\n      />\n    </div>\n  );\n};\n", "import { cx } from '@emotion/css';\nimport type { FC, ReactNode } from 'react';\n\nimport { MotifComponent } from '../../../motif';\nimport type { BaseComponentProps } from '../../../types';\nimport { chartToggleWrapperCss } from './styles';\n\nexport interface ChartToggleWrapperProps extends BaseComponentProps {\n  children?: ReactNode;\n}\n\nexport const ChartToggleWrapper: FC<ChartToggleWrapperProps> = ({ children }) => {\n  return (\n    <section className={cx(MotifComponent.CHART_TOGGLE, chartToggleWrapperCss)}>{children}</section>\n  );\n};\n", "import type {\n  CookieModalProps as CookieModalComponentProps,\n  CookieProviderProps,\n} from '@snapchat/mw-cookie-components';\nimport {\n  CookieModal as CookieModalComponent,\n  CookieProvider,\n} from '@snapchat/mw-cookie-components';\nimport { PrimitivesProvider } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext, useEffect } from 'react';\n\nimport {\n  type LocaleOption,\n  defaultSupportedLocales,\n  GlobalComponentsContext,\n} from '../../context/GlobalComponentsContext';\nimport {\n  type PluginObject,\n  configureDataLayer,\n  enablePerformanceAnalytics,\n  toggleGoogleTracking,\n} from './analytics';\nimport { type BackgroundType, CategoryOptInCookie } from './cookieModalTypes';\nimport { SdsmComponents } from './SdsmComponents';\n\nexport interface CookieModalProps {\n  portalRoot?: Element;\n  /** @deprecated Dropdown will get it from context */\n  cookieDomain?: string;\n  /** @deprecated Dropdown will get it from context */\n  supportedLocales?: Record<string, LocaleOption>;\n  /** @deprecated - Cookie modal shouldn't load GTM */\n  GTMID?: string;\n  /** @deprecated - Cookie modal shouldn't load GA */\n  GAID?: string;\n  /**\n   * If specified, applies the nonce to the generated GTM or GA script\n   *\n   * @deprecated See above.\n   */\n  nonce?: string;\n  /** @deprecated Dropdown will get it from context */\n  onLocaleChange?: (locale: string) => void;\n  /** @deprecated Use onComplete instead. */\n  preferencesAcceptedCallback?: () => void;\n  /** @deprecated Use onComplete instead. */\n  performanceAnalyticsCallback?: () => void;\n  /** @deprecated Use onComplete instead. */\n  marketingAnalyticsCallback?: () => void;\n  plugins?: Array<PluginObject>;\n  onComplete?: CookieModalComponentProps['onComplete'];\n  backgroundType?: BackgroundType;\n  forceVisible?: boolean;\n  /** Whether the user has enabled Global Privacy Control. undefined is treated same as false */\n  globalPrivacyControl?: boolean;\n  /** Fires whenever global privacy control is in place */\n  onGlobalPrivacyControlSet?: () => void;\n}\n\ntype LogEventParameters = Parameters<Required<CookieModalComponentProps>['onEvent']>;\ntype LogEventListener = (...params: LogEventParameters) => void;\ntype OnCompleteListener = Required<CookieModalComponentProps>['onComplete'];\n\nexport const CookieModal: FC<CookieModalProps> = ({\n  portalRoot,\n  cookieDomain,\n  supportedLocales,\n  GTMID = '',\n  GAID = '',\n  nonce,\n  plugins,\n  onLocaleChange,\n  onComplete: userOnComplete,\n  preferencesAcceptedCallback,\n  performanceAnalyticsCallback,\n  marketingAnalyticsCallback,\n  backgroundType,\n  forceVisible,\n  globalPrivacyControl,\n  onGlobalPrivacyControlSet,\n}) => {\n  // Disable GA/GTM until the performance tracking is enabled via `onComplete` event hook.\n  useEffect(() => {\n    toggleGoogleTracking(GAID, false);\n  }, [GAID]);\n\n  // Construct props for <CookieProvider />\n  const context = useContext(GlobalComponentsContext);\n  const { Anchor, globalApolloClient, currentLocale, isPreview, isSSR, onEvent, onError } = context;\n\n  cookieDomain ??= context.hostname;\n  supportedLocales ??= context.supportedLocales ?? defaultSupportedLocales;\n  onLocaleChange ??= context.onLocaleChange;\n\n  const providerProps: CookieProviderProps = {\n    ...SdsmComponents,\n    isSSR,\n    isPreview,\n    currentLocale,\n    client: globalApolloClient,\n  };\n\n  // Construct props for <CookieModalComponent />\n  const logEvent: LogEventListener = ({ label }) =>\n    onEvent?.({ component: 'CookieModal', label, action: 'Click' });\n\n  const onComplete: OnCompleteListener = props => {\n    const { cookieAcceptance, userLocation } = props;\n\n    // Add user location to data layer for GA/GTM to reference\n    configureDataLayer({ userLocation });\n\n    // Set up GA/GTM integration\n    cookieAcceptance[CategoryOptInCookie.Performance] &&\n      enablePerformanceAnalytics(GTMID, GAID, plugins, nonce);\n\n    // Legacy callbacks trigger\n    cookieAcceptance[CategoryOptInCookie.Preferences] && preferencesAcceptedCallback?.();\n    cookieAcceptance[CategoryOptInCookie.Performance] && performanceAnalyticsCallback?.();\n    cookieAcceptance[CategoryOptInCookie.Marketing] && marketingAnalyticsCallback?.();\n\n    // Callback trigger.\n    userOnComplete?.(props);\n  };\n\n  const modalProps: CookieModalComponentProps = {\n    supportedLocales,\n    cookieDomain,\n    portalRoot: portalRoot as HTMLElement,\n    backgroundType,\n    onLocaleChange,\n    onComplete,\n    onEvent: logEvent,\n    onError,\n    forceVisible,\n    globalPrivacyControl,\n    onGlobalPrivacyControlSet,\n  };\n\n  return (\n    <PrimitivesProvider value={{ Anchor }}>\n      <CookieProvider {...providerProps}>\n        <CookieModalComponent {...modalProps} />\n      </CookieProvider>\n    </PrimitivesProvider>\n  );\n};\n", "import type { ApolloClient, NormalizedCacheObject } from '@apollo/client';\nimport type { AnchorComponent } from '@snapchat/snap-design-system-marketing';\nimport merge from 'lodash-es/merge';\nimport type { FC, PropsWithChildren } from 'react';\nimport { createContext } from 'react';\n\nimport type { Action } from '../analytics/Action';\n\nexport interface EventLog {\n  // NOTE: Some of these map to GA actions. See this doc: https://support.google.com/analytics/answer/1033068\n  action: Action; // Action being performed\n  component: string; // Roughly maps to GA category like \"Video\", \"Hero\"\n  label?: string; // Label of the item that the event is for\n  url?: string; // URL if this is for a link\n}\n\n/**\n * Interface for locale options. Note that doesn't use contentful's Locale to support sites that do\n * not store data in contentful.\n */\nexport interface LocaleOption {\n  /** Locale Code */\n  code: string;\n  /** Display Text for the Locale */\n  name: string;\n}\n\n/** Properties that are shared between multiple global components. */\nexport interface GlobalComponentsProps {\n  /**\n   * Whether to get unpublished entries from contentful.\n   *\n   * DO NOT USE on production. For testing new links on staging builds only.\n   */\n  isPreview?: boolean;\n\n  /** Passes this value to the creation of the default apollo client. */\n  isSSR?: boolean;\n\n  /** Logger for interaction events. */\n  onEvent?: (event: EventLog) => void;\n\n  /** Logger for error events. */\n  onError?: (error: Error | string) => void;\n\n  /**\n   * Check for whether the URL is current.\n   *\n   * TODO: Describe what this affects.\n   */\n  isUrlCurrent?: (url: string) => boolean;\n\n  /**\n   * The domain of the current site.\n   *\n   * On the client it's `window.location.hostname`.\n   *\n   * On the server this needs to be provided.\n   *\n   * Used for hiding/showing certain links and determining if links lead to the same domain.\n   */\n  hostname: string;\n\n  /**\n   * The code for the currently selected locale and the language in which the elements will be\n   * presented in.\n   */\n  currentLocale?: string;\n\n  /**\n   * Collection of options in the locale dropdown. Without these locale dropdown will not be\n   * rendered.\n   */\n  supportedLocales?: Record<string, LocaleOption>;\n\n  /** Handles changing the langauge on the site. */\n  onLocaleChange?: (locale: string) => void;\n\n  /** Override for the apollo client. */\n  globalApolloClient?: ApolloClient<NormalizedCacheObject>;\n\n  /**\n   * Override for which component to use when rendering links. This is useful when you want to\n   * override how links are rendered to apply redirects, target and other attributes.\n   */\n  Anchor?: AnchorComponent;\n}\n\nexport const defaultLocaleCode = 'en-US';\nexport const defaultSupportedLocales = {\n  [defaultLocaleCode]: {\n    code: defaultLocaleCode,\n    name: 'English (United States)',\n  },\n};\n\n/** Default check for whether a URL is the one we're currently on. */\nconst defaultIsUrlCurrent = (pathOrUrl: string): boolean => {\n  const url = new URL(pathOrUrl, window.location.href);\n  if (window.location.hostname !== url.hostname) return false;\n  return window.location.pathname !== url.pathname;\n};\n\n/** Sensible defaults. Here to simplify library usage. */\nconst defaults: Partial<GlobalComponentsProps> = {\n  currentLocale: defaultLocaleCode,\n  supportedLocales: defaultSupportedLocales,\n  onError: console.error,\n  // No default onEvent because spamming console isn't useful.\n  isPreview: false,\n  isSSR: false,\n  isUrlCurrent: defaultIsUrlCurrent,\n};\n\nexport const GlobalComponentsContext = createContext<GlobalComponentsProps>({\n  onError: error => console.error(error),\n  currentLocale: defaultLocaleCode,\n  hostname: 'unknown',\n  supportedLocales: defaultSupportedLocales,\n});\n\n/** Provider for GlobalComponentsContext that populates the defaults. */\nexport const GlobalComponentsContextProvider: FC<\n  PropsWithChildren<{ value: GlobalComponentsProps }>\n> = ({ children, value }) => {\n  return (\n    <GlobalComponentsContext.Provider value={merge(defaults, value)}>\n      {children}\n    </GlobalComponentsContext.Provider>\n  );\n};\n", "import type { GoogleConfig, GoogleLocation, GtmStartEvent } from '../../types/gtm';\n\nexport interface PluginObject {\n  name: string;\n  options: Record<string, unknown>;\n}\n\nconst googleTagDataLayerSet = (document: Document, GTMID: string, nonce?: string): void => {\n  // We need to configure datalayer with a custom record due to GTM requiring gtm.start\n  // https://developers.google.com/tag-platform/tag-manager/web/datalayer\n  configureDataLayer({ 'gtm.start': Date.now(), event: 'gtm.js' });\n  const createdScriptElement = document.createElement('script');\n  createdScriptElement.async = true;\n  createdScriptElement.src = `https://www.googletagmanager.com/gtm.js?id=${GTMID}`;\n\n  if (nonce) createdScriptElement.nonce = nonce;\n\n  document.head.appendChild(createdScriptElement);\n};\n\n/** Toggle GTM and GA tracking. */\nexport const toggleGoogleTracking = (GAID: string, enabled: boolean): void => {\n  if (GAID === '') return;\n\n  const identifier = getGaidWithPrefix(GAID);\n\n  // Uses as syntax due to dynamic key name\n  (window as unknown as Record<string, unknown>)[`ga-disable-${identifier}`] = !enabled;\n};\n\n/**\n * Ensures the full GAID is populated. Necessary for setting the proper key to enable/disable GTM\n * and GA features.\n */\nconst getGaidWithPrefix = (GAID: string) => {\n  if (GAID.includes('UA-') || GAID.includes('G-')) {\n    return GAID;\n  }\n\n  return `UA-${GAID}`;\n};\n\nexport const configureDataLayer = (input: GoogleConfig | GoogleLocation | GtmStartEvent): void => {\n  window.dataLayer = window.dataLayer ?? [];\n  window.dataLayer.push(input);\n};\n\nconst enableGoogleTagManager = (GTMID: string, GAID: string, nonce?: string): void => {\n  if (window) {\n    toggleGoogleTracking(GAID, true);\n    googleTagDataLayerSet(document, GTMID, nonce);\n  }\n};\n\nconst windowGaArgumentSetter = (args: Array<IArguments>) => {\n  (window.ga.q = window.ga.q ?? []).push(...args);\n};\n\nconst googleAnalyticsArgumentsSet = (nonce?: string): void => {\n  window.GoogleAnalyticsObject = 'ga';\n  window.ga = window.ga ?? windowGaArgumentSetter;\n  window.ga.l = new Date().getTime;\n  const createdScriptElement = document.createElement('script');\n  createdScriptElement.async = true;\n  createdScriptElement.src = 'https://www.google-analytics.com/analytics.js';\n\n  if (nonce) createdScriptElement.nonce = nonce;\n\n  document.head.appendChild(createdScriptElement);\n};\n\nconst enableGoogleAnalytics = (\n  GAID: string,\n  gaPlugins: Array<PluginObject> = [],\n  nonce?: string\n): void => {\n  if (window) {\n    toggleGoogleTracking(GAID, true);\n\n    if (GAID.includes('UA-')) {\n      // GA 360 configuration\n      googleAnalyticsArgumentsSet(nonce);\n      ga('create', GAID, 'auto');\n\n      gaPlugins.forEach(plugin => {\n        ga('require', plugin.name, plugin.options);\n      });\n      ga('set', 'anonymizeIp', true);\n      ga('send', 'pageview');\n    } else {\n      // GA 4 Configuration\n      window.dataLayer = window.dataLayer ?? [];\n      const GA4Script = document.createElement('script');\n      GA4Script.async = true;\n      GA4Script.src = `https://www.googletagmanager.com/gtag/js?id=${GAID}`;\n\n      GA4Script.onload = () => {\n        configureDataLayer({ js: new Date(), config: GAID });\n      };\n\n      if (nonce) GA4Script.nonce = nonce;\n\n      document.head.appendChild(GA4Script);\n    }\n  }\n};\n\nexport const enablePerformanceAnalytics = (\n  GTMID: string,\n  GAID: string,\n  plugins?: Array<PluginObject>,\n  /** Optional: nonce to apply to GTM/GA inline script element */\n  nonce?: string\n): void => {\n  const gaIdentifier = getGaidWithPrefix(GAID);\n\n  if (GTMID && GAID) {\n    enableGoogleTagManager(GTMID, gaIdentifier, nonce);\n  } else if (GAID) {\n    enableGoogleAnalytics(gaIdentifier, plugins, nonce);\n  }\n};\n", "import { cx } from '@emotion/css';\nimport { localeMap } from '@snapchat/mw-common';\nimport { getTopLevelDomain } from '@snapchat/parse-domain';\nimport type { DropdownItem, DropdownMenuButtonProps } from '@snapchat/snap-design-system-marketing';\nimport { DropdownMenu } from '@snapchat/snap-design-system-marketing';\nimport Cookies from 'js-cookie';\nimport type { FC } from 'react';\nimport { useCallback, useContext } from 'react';\n\nimport { Action } from '../../analytics/Action';\nimport type { LocaleOption } from '../../context/GlobalComponentsContext';\nimport {\n  defaultLocaleCode,\n  defaultSupportedLocales,\n  GlobalComponentsContext,\n} from '../../context/GlobalComponentsContext';\nimport { CategoryOptInCookie } from '../CookieModal/cookieModalTypes';\nimport { localeCookie } from './localeConstants';\nimport { localeDropdownCss } from './LocaleDropdown.styles';\n\nexport interface LocaleDropdownProps {\n  className?: string;\n  buttonComponent?: FC<DropdownMenuButtonProps>;\n  /** @deprecated Read from global context */\n  supportedLocales?: Record<string, LocaleOption>;\n  /** @deprecated Read from global context */\n  currentLocale?: string;\n  /** @deprecated Read from global context */\n  onLocaleChange?: (locale: string) => void;\n  /** @deprecated Does nothing */\n  containerProvider?: (node: HTMLElement) => HTMLElement;\n}\n\n/**\n * Default implementation of the locale dropdown that sets a cookie value and triggers a callback\n * when the selected value changes.\n */\nexport const LocaleDropdown: FC<LocaleDropdownProps> = ({\n  currentLocale,\n  supportedLocales,\n  onLocaleChange,\n  className,\n  buttonComponent,\n}) => {\n  const context = useContext(GlobalComponentsContext);\n  currentLocale ??= context.currentLocale;\n  supportedLocales ??= context.supportedLocales ?? defaultSupportedLocales;\n  onLocaleChange ??= context.onLocaleChange;\n  const localeArray = Object.values(supportedLocales);\n\n  const onSelect = useCallback(\n    (item: DropdownItem) => {\n      const localeCode = item.id;\n\n      // we can only set locale cookie when preferences are enabled\n      if (Cookies.get(CategoryOptInCookie.Preferences) === 'true') {\n        Cookies.set(localeCookie, localeCode, {\n          // Note: We set the cookie on the base domain, so all websites on the *.snap.com domain\n          // use the same cookie. Ditto for snapchat.com.\n          // Also note that we use the &lang= parameter to transfer language setting between domains.\n          domain: getTopLevelDomain(window.location.host),\n          secure: true,\n        });\n      }\n\n      context.onEvent?.({\n        action: Action.LocaleSelect,\n        component: 'LocaleDropdown',\n        label: `Language: ${localeCode}`,\n      });\n\n      onLocaleChange?.(localeCode);\n    },\n    [context, onLocaleChange]\n  );\n\n  // Order the locales alphabetically.\n  localeArray.sort((l1, l2) => l1.code.localeCompare(l2.code));\n\n  const dropdownItems: DropdownItem[] = localeArray.map(locale => {\n    const displayText = localeMap[locale.code] ?? locale.name;\n    return { id: locale.code, title: displayText };\n  });\n\n  return (\n    <DropdownMenu\n      items={dropdownItems}\n      className={cx(localeDropdownCss, className)}\n      data-testid=\"gc-locale-language\"\n      selectedItemId={currentLocale ?? defaultLocaleCode}\n      onItemSelect={onSelect}\n      buttonComponent={buttonComponent}\n    />\n  );\n};\n\nLocaleDropdown.displayName = 'LocaleDropdown';\n", "/* eslint-disable import/no-unused-modules */\nexport const localeCookie = 'sc-language';\n\nexport const defaultLocale = 'en-US';\n", "import { css } from '@emotion/css';\nimport { dropdownMenuClassName } from '@snapchat/snap-design-system-marketing';\n\nexport const localeDropdownCss = css`\n  .sdsm-dropdown-button {\n    font-size: 14px;\n    line-height: 20px;\n  }\n\n  .${dropdownMenuClassName} {\n    max-width: 200%;\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport type { DesignAgnosticModalProps } from '@snapchat/mw-cookie-components';\nimport {\n  getBackgroundClassName,\n  Modal,\n  MotifComponent,\n  smallMobileMaxWidth,\n  useMediaMode,\n  useMotifStyles,\n  useWindowSize,\n  VerticalAlignment,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useEffect, useState } from 'react';\n\nimport { contentCss, cookieModalCss, globalCss } from './SdsmCookieModal.styles';\n\n/** SdsmModal with positioning logic and emotion styles used for rendering the Cookie Modal */\nexport const SdsmCookieModal: FC<DesignAgnosticModalProps> = ({\n  backgroundType,\n  className,\n  children,\n  isDisplayed,\n  portalRoot,\n}) => {\n  useMotifStyles(MotifComponent.COOKIE_MODAL_SETTINGS);\n  const mode = useMediaMode();\n  const { width: windowWidth } = useWindowSize();\n  const [modalAlignment, setModalAlignment] = useState<VerticalAlignment>(VerticalAlignment.Middle);\n\n  // Set Modal positioning\n  useEffect(() => {\n    let alignment = VerticalAlignment.Middle;\n\n    if (mode === 'Mobile' && (windowWidth ?? Number.POSITIVE_INFINITY) <= smallMobileMaxWidth) {\n      alignment = VerticalAlignment.Bottom;\n    }\n    setModalAlignment(alignment);\n  }, [mode, windowWidth, setModalAlignment]);\n\n  return (\n    <Modal\n      isBlocking={true}\n      disableBackgroundScroll={true}\n      verticalAlignment={modalAlignment}\n      isDisplayed={isDisplayed}\n      portalRoot={portalRoot}\n      className={cx(\n        MotifComponent.COOKIE_MODAL_SETTINGS,\n        globalCss,\n        getBackgroundClassName(backgroundType),\n        cookieModalCss,\n        className\n      )}\n      contentClassName={cx(contentCss)}\n    >\n      {children}\n    </Modal>\n  );\n};\n", "import { css } from '@emotion/css';\nimport {\n  h5Css,\n  m,\n  mobileMediaQuery,\n  nonMobileMediaQuery,\n  smallMobileMediaQuery,\n} from '@snapchat/snap-design-system-marketing';\n\n/* Styles copied from: marketing-web/packages/web/src/index.ejs */\nconst normalizeCss = css`\n  font-family: ${m('--font-family')};\n\n  * {\n    box-sizing: border-box;\n    margin: 0;\n  }\n`;\n\nconst cookieTitleFontRampCss = css`\n  ${h5Css}\n  margin-bottom: ${m('--spacing-m')};\n  text-transform: uppercase;\n`;\n\n/* Standardize UI when rendered outside of MWP */\nexport const globalCss = css`\n  ${normalizeCss}\n\n  /* override site settings that override header behaviors */\n  h1,h2,h3,h4,h5,h6 {\n    font-family: ${m('--font-family')};\n    line-height: inherit;\n    text-transform: initial;\n  }\n\n  /* Ensure consistent rendering of lists */\n  ul {\n    list-style: disc outside;\n  }\n`;\n\nconst cookieModalHeaderCss = css`\n  .modal-header {\n    display: flex;\n    flex-direction: row;\n    justify-content: space-between;\n    margin-bottom: ${m('--spacing-xs')};\n\n    .logo-container {\n      display: flex;\n      justify-content: center;\n      flex-direction: column;\n      opacity: ${m('--cookie-modal-logo-opacity')};\n    }\n\n    /* Ensure locale dropdown is aligned to the right regardless of logo display */\n    .locale-container {\n      margin-inline-start: auto;\n    }\n  }\n`;\n\n/* Shared rich text layout styles applied within both .contentful-rich-text and .category-description */\nconst richTextCss = css`\n  a {\n    color: inherit;\n    font-weight: 500;\n  }\n  > ul {\n    padding-left: ${m('--spacing-l')};\n    margin-bottom: ${m('--spacing-s')};\n  }\n  > ul > li {\n    margin-bottom: ${m('--spacing-xxs')};\n  }\n  > p {\n    margin: 0 0 ${m('--spacing-xxs')};\n  }\n  *[dir='rtl'] & {\n    > ul {\n      padding-left: unset;\n      padding-right: ${m('--spacing-l')};\n    }\n  }\n`;\n\nconst cookieModalRichTextCss = css`\n  .contentful-rich-text {\n    /* Rich Text Base Styles */\n    ${nonMobileMediaQuery} {\n      font-size: ${m('--cookie-modal-rich-text-base-desktop-font-size')};\n      font-weight: ${m('--cookie-modal-rich-text-base-desktop-font-weight')};\n      line-height: ${m('--cookie-modal-rich-text-base-desktop-font-line-height')};\n      font-stretch: ${m('--cookie-modal-rich-text-base-desktop-font-stretch')};\n    }\n\n    ${mobileMediaQuery} {\n      font-size: ${m('--cookie-modal-rich-text-base-mobile-font-size')};\n      font-weight: ${m('--cookie-modal-rich-text-base-mobile-font-weight')};\n      line-height: ${m('--cookie-modal-rich-text-base-mobile-font-line-height')};\n      font-stretch: ${m('--cookie-modal-rich-text-base-mobile-font-stretch')};\n    }\n\n    /* Rich Text H3 Styles (title) */\n    h3 {\n      ${nonMobileMediaQuery} {\n        font-size: ${m('--cookie-modal-rich-text-title-desktop-font-size')};\n        line-height: ${m('--cookie-modal-rich-text-title-desktop-font-line-height')};\n        font-weight: ${m('--cookie-modal-rich-text-title-desktop-font-weight')};\n        font-stretch: ${m('--cookie-modal-rich-text-title-desktop-font-stretch')};\n      }\n      ${mobileMediaQuery} {\n        font-size: ${m('--cookie-modal-rich-text-title-mobile-font-size')};\n        line-height: ${m('--cookie-modal-rich-text-title-mobile-font-line-height')};\n        font-weight: ${m('--cookie-modal-rich-text-title-mobile-font-weight')};\n        font-stretch: ${m('--cookie-modal-rich-text-title-mobile-font-stretch')};\n      }\n    }\n\n    ${richTextCss}\n  }\n`;\n\n/* Shared between cookieModalCss (modal settings screen) and cookieSettingsPageCss (standalone page) */\nconst cookieModalSettingsScreenCss = css`\n  .category-border {\n    border: ${m('--cookie-settings-category-border-width')} solid\n      ${m('--cookie-settings-category-border-color')};\n    border-radius: ${m('--cookie-settings-category-border-radius')};\n    margin-bottom: ${m('--spacing-s')};\n    padding: ${m('--cookie-settings-category-padding')};\n  }\n\n  .category-title-container {\n    align-items: center;\n    display: flex;\n    margin-bottom: ${m('--spacing-xs')};\n  }\n\n  .category-title {\n    flex: 1;\n\n    ${nonMobileMediaQuery} {\n      font-size: ${m('--cookie-settings-category-title-desktop-font-size')};\n      font-stretch: ${m('--cookie-settings-category-title-desktop-font-stretch')};\n      font-weight: ${m('--cookie-settings-category-title-desktop-font-weight')};\n      line-height: ${m('--cookie-settings-category-title-desktop-font-line-height')};\n    }\n    ${mobileMediaQuery} {\n      font-size: ${m('--cookie-settings-category-title-mobile-font-size')};\n      font-stretch: ${m('--cookie-settings-category-title-mobile-font-stretch')};\n      font-weight: ${m('--cookie-settings-category-title-mobile-font-weight')};\n      line-height: ${m('--cookie-settings-category-title-mobile-font-line-height')};\n    }\n\n    *[dir='rtl'] & {\n      text-align: right;\n    }\n  }\n\n  .category-status {\n    font-size: 14px;\n    margin-right: ${m('--spacing-xs')};\n    *[dir='rtl'] & {\n      margin-right: unset;\n      margin-left: ${m('--spacing-xs')};\n    }\n  }\n\n  .category-toggle {\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n  }\n\n  /* Rich text base styles first; settings screen styles second for cascade priority */\n  ${cookieModalRichTextCss}\n\n  .category-description {\n    ${nonMobileMediaQuery} {\n      font-size: ${m('--cookie-settings-category-description-desktop-font-size')};\n      font-stretch: ${m('--cookie-settings-category-description-desktop-font-stretch')};\n      font-weight: ${m('--cookie-settings-category-description-desktop-font-weight')};\n      line-height: ${m('--cookie-settings-category-description-desktop-font-line-height')};\n    }\n    ${mobileMediaQuery} {\n      font-size: ${m('--cookie-settings-category-description-mobile-font-size')};\n      font-stretch: ${m('--cookie-settings-category-description-mobile-font-stretch')};\n      font-weight: ${m('--cookie-settings-category-description-mobile-font-weight')};\n      line-height: ${m('--cookie-settings-category-description-mobile-font-line-height')};\n    }\n  }\n`;\n\nconst cookieModalFooterCss = css`\n  .modal-footer {\n    padding-top: ${m('--spacing-s')}; /* Padding set by design */\n    text-align: center;\n    display: flex;\n    /* Reverse direction so that when we wrap on smaller screens, the break happens on 1st, rather than last element.\n       NOTE: requires that content be rendered in reverse order */\n    flex-direction: row-reverse;\n    gap: ${m('--spacing-s')};\n    align-self: center;\n    justify-content: center;\n\n    /* Button spacing managed via gap instead of margins */\n    .sdsm-button {\n      margin: 0;\n    }\n\n    ${mobileMediaQuery} {\n      flex-wrap: wrap;\n      width: 100%;\n    }\n\n    ${smallMobileMediaQuery} {\n      /* See note above, accounts for content rendered in reverse order. */\n      flex-direction: column-reverse;\n      align-items: center;\n    }\n  }\n`;\n\nconst settingsPageFooterCss = css`\n  .settings-page-footer {\n    padding-top: ${m('--spacing-xl')};\n    display: flex;\n    flex-direction: row;\n    gap: ${m('--spacing-s')};\n    align-self: center;\n    justify-content: center;\n\n    /* Button spacing managed via gap instead of margins */\n    .sdsm-button {\n      margin: 0;\n    }\n\n    ${smallMobileMediaQuery} {\n      padding-top: unset;\n      flex-direction: column;\n    }\n  }\n`;\n\nexport const contentCss = css`\n  /* card style. */\n  background-color: ${m('--bg-color')};\n  border: ${m('--cookie-settings-border-width')} solid ${m('--cookie-modal-border-color')};\n  border-radius: ${m('--cookie-modal-border-radius')};\n  box-shadow: ${m('--cookie-settings-box-shadow')};\n  color: ${m('--fg-color')};\n  padding: ${m('--cookie-settings-padding')};\n`;\n\nexport const cookieModalCss = css`\n  --padding-horizontal: ${m('--cookie-modal-desktop-horizontal-padding')};\n  --padding-vertical: ${m('--cookie-modal-desktop-vertical-padding')};\n\n  ${mobileMediaQuery} {\n    --padding-horizontal: ${m('--cookie-modal-mobile-horizontal-padding')};\n    --padding-vertical: ${m('--cookie-modal-mobile-vertical-padding')};\n  }\n\n  --max-height: calc(100vh - var(--padding-vertical));\n  /* stylelint-disable-next-line declaration-block-no-duplicate-custom-properties */\n  --max-height: calc(100dvh - var(--padding-vertical));\n\n  .sdsm-modal-content {\n    ${contentCss}\n    border-width: ${m('--cookie-modal-border-width')};\n    box-shadow: ${m('--cookie-modal-box-shadow')};\n    padding: var(--padding-vertical) var(--padding-horizontal);\n    width: max-content;\n\n    /* stop-gap solution to prevent any part from being hidden */\n    overflow: auto;\n\n    /* prevents overflow of this container. */\n    max-height: 100%;\n    max-width: 100%;\n\n    ${nonMobileMediaQuery} {\n      max-width: ${m('--cookie-settings-max-width')};\n      min-width: ${m('--cookie-modal-min-width')};\n    }\n  }\n\n  .cookie-landing-screen,\n  .cookie-settings-screen {\n    max-height: calc(var(--max-height) - calc(2 * calc(1px + var(--padding-vertical))));\n\n    display: flex;\n    flex-direction: column;\n\n    /* Header Styles */\n    ${cookieModalHeaderCss}\n\n    /* Body Styles */\n    .modal-body {\n      flex: 1;\n      overflow-y: auto;\n      min-height: 5em;\n      margin-bottom: ${m('--spacing-xs')};\n      padding-right: ${m('--cookie-modal-body-inline-padding')};\n\n      *[dir='rtl'] & {\n        padding-right: unset;\n        padding-left: ${m('--cookie-modal-body-inline-padding')};\n      }\n\n      .cookie-title {\n        ${cookieTitleFontRampCss}\n      }\n\n      h3,\n      b {\n        font-weight: 500;\n      }\n\n      ${cookieModalSettingsScreenCss}\n    }\n\n    /* Footer Styles */\n    ${cookieModalFooterCss}\n  }\n`;\n\nexport const cookieSettingsPageCss = css`\n  /* Container Styles */\n  justify-self: center;\n  max-width: ${m('--cookie-settings-max-width')};\n\n  /* Body Styles */\n  .settings-page-body {\n    text-align: left;\n\n    .cookie-title {\n      ${cookieTitleFontRampCss}\n    }\n\n    ${cookieModalSettingsScreenCss}\n  }\n\n  /* Footer Styles */\n  ${settingsPageFooterCss}\n`;\n", "/* eslint-disable import/no-duplicates */\nimport { cx } from '@emotion/css';\nimport type { DesignSystemProps } from '@snapchat/mw-cookie-components';\nimport { Button, ButtonType, getBackgroundClassName } from '@snapchat/snap-design-system-marketing';\n// TODO: this caused issues due to esm vs csj default exports, check if this is still a problem for consumers.\n// see https://github.sc-corp.net/Snapchat/marketing-web/pull/1770\nimport { ToggleSlider } from '@snapchat/snap-design-system-marketing';\n\nimport { LocaleDropdown } from '../LocaleDropdown/LocaleDropdown';\nimport { SdsmCookieModal } from './SdsmCookieModal';\nimport { contentCss } from './SdsmCookieModal.styles';\n\nexport const SdsmComponents: DesignSystemProps = {\n  buttonComponent: ({ text, isDisabled, isPrimary, onClick }) => {\n    const type = isPrimary ? ButtonType.Primary : undefined;\n    return (\n      <Button disabled={isDisabled} onClick={onClick} size=\"Compact\" type={type}>\n        {text}\n      </Button>\n    );\n  },\n\n  localeDropdownComponent: ({\n    currentLocale,\n    supportedLocales,\n    containerProvider,\n    onLocaleChange,\n  }) => {\n    // TODO: Use SDS-M Locale Dropdown.\n    return (\n      <LocaleDropdown\n        currentLocale={currentLocale.code}\n        supportedLocales={supportedLocales}\n        containerProvider={containerProvider}\n        onLocaleChange={onLocaleChange}\n      />\n    );\n  },\n\n  modalComponent: ({ backgroundType, children, isDisplayed, portalRoot }) => {\n    return (\n      <SdsmCookieModal\n        backgroundType={backgroundType}\n        isDisplayed={isDisplayed}\n        portalRoot={portalRoot}\n      >\n        {children}\n      </SdsmCookieModal>\n    );\n  },\n\n  sectionComponent: ({ backgroundType, children }) => {\n    return (\n      <section className={cx(contentCss, getBackgroundClassName(backgroundType))}>\n        {children}\n      </section>\n    );\n  },\n\n  toggleComponent: ({ id, isChecked, onToggle }) => {\n    const noop = () => undefined;\n    return <ToggleSlider id={id} isChecked={isChecked} onToggle={onToggle ?? noop} />;\n  },\n};\n", "import { cx } from '@emotion/css';\nimport type {\n  CookieProviderProps,\n  CookieSettingsProps as InnerSettingsProps,\n} from '@snapchat/mw-cookie-components';\nimport {\n  CookieProvider,\n  CookieSettings as CookieSettingsComponent,\n} from '@snapchat/mw-cookie-components';\nimport {\n  MotifComponent,\n  PrimitivesProvider,\n  useMotifStyles,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { GlobalComponentsContext } from '../../context/GlobalComponentsContext';\nimport type { BackgroundType } from '../CookieModal/cookieModalTypes';\nimport { SdsmComponents } from '../CookieModal/SdsmComponents';\nimport { cookieSettingsPageCss, globalCss } from '../CookieModal/SdsmCookieModal.styles';\n\nexport interface CookieSettingsProps {\n  backgroundType?: BackgroundType;\n  /** @deprecated Can grab hostname from the global context */\n  cookieDomain?: string;\n}\n\nexport const CookieSettings: FC<CookieSettingsProps> = ({ backgroundType, cookieDomain }) => {\n  useMotifStyles(MotifComponent.COOKIE_MODAL_SETTINGS);\n  // Construct props for <CookieProvider />\n  const context = useContext(GlobalComponentsContext);\n  const { Anchor, currentLocale, isPreview, isSSR, onEvent, onError, globalApolloClient } = context;\n\n  cookieDomain ??= context.hostname;\n\n  const providerProps: CookieProviderProps = {\n    ...SdsmComponents,\n    isSSR,\n    isPreview,\n    currentLocale,\n    client: globalApolloClient,\n  };\n\n  // Construct props for <CookieSettingsComponent />\n  const settingsProps: InnerSettingsProps = {\n    backgroundType,\n    cookieDomain,\n    onEvent,\n    onError,\n  };\n\n  return (\n    <PrimitivesProvider value={{ Anchor }}>\n      <div\n        data-testid=\"mwp-cookie-settings\"\n        className={cx(MotifComponent.COOKIE_MODAL_SETTINGS, globalCss, cookieSettingsPageCss)}\n      >\n        <CookieProvider {...providerProps}>\n          <CookieSettingsComponent {...settingsProps} />\n        </CookieProvider>\n      </div>\n    </PrimitivesProvider>\n  );\n};\n", "import type {\n  BackgroundColor,\n  DropdownMenuButtonProps,\n  MotifScheme,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC, ReactNode } from 'react';\nimport { useCallback, useContext } from 'react';\n\nimport { Action } from '../../analytics/Action';\nimport { GlobalComponentsContext } from '../../context/GlobalComponentsContext';\nimport type { CustomFooterGroupProps } from '../FooterV3/FooterCollectionV3/FooterCollectionV3';\nimport { FooterCollectionV3 } from '../FooterV3/FooterCollectionV3/FooterCollectionV3';\n\nexport enum FooterType {\n  FULL_FOOTER = 'Full Footer',\n  NO_FOOTER = 'No Footer',\n  SIMPLE_FOOTER = 'Simple Footer',\n}\n\n/**\n * Properties for the footer.\n *\n * Note that THIS IS PUBLIC so it cannot have any references to contentful, sys ids, or anything\n * that's related to MWP.\n */\nexport type GlobalFooterProps = {\n  /** Motif scheme for the footer */\n  motifScheme?: MotifScheme;\n  /** @deprecated Use motifScheme instead. */\n  backgroundColor?: BackgroundColor;\n  /** Url for cookie settings page */\n  cookieSettingsUrl?: string;\n  /** Allow adding and overriding of columns */\n  customColumns?: CustomFooterGroupProps[];\n  /** Allow adding and overriding of bottom bar */\n  customFooterBar?: CustomFooterGroupProps[];\n  /** Use a custom logo instead of the default one that comes with global components */\n  logo?: ReactNode;\n  /** Renders at the top of the footer. Used to link to socials. */\n  socialBar?: ReactNode;\n  /** Controls what type of footer to use, Full, None, or Simple. Defaults to Full */\n  footerType?: FooterType;\n  /** Let the footer know if the page has a sidenav */\n  hasSideNav?: boolean;\n  /** Allow the locale dropdown button to be customized */\n  customLocaleDropdownButton?: FC<DropdownMenuButtonProps>;\n  /** Allow the footer to be customized with css */\n  className?: string;\n  /** Called when a footer group is toggled on mobile */\n  onGroupToggle?: (groupId: string, groupTitle: string) => void;\n};\n\n/**\n * Standard Footer for marketing sites.\n *\n * Note that this is the PUBLIC interface for the footer used by other teams who do not use\n * contentful nor MWP.\n */\nexport const GlobalFooter: FC<GlobalFooterProps> = ({\n  footerType = FooterType.FULL_FOOTER,\n  onGroupToggle,\n  ...props\n}) => {\n  const { onEvent } = useContext(GlobalComponentsContext);\n\n  const handleGroupToggle = useCallback(\n    (groupId: string, groupTitle: string) => {\n      onEvent?.({\n        component: 'GlobalFooter',\n        action: Action.Click,\n        label: `footer_group_toggle: ${groupId}`,\n      });\n      onGroupToggle?.(groupId, groupTitle);\n    },\n    [onEvent, onGroupToggle]\n  );\n\n  return (\n    <FooterCollectionV3 footerType={footerType} {...props} onGroupToggle={handleGroupToggle} />\n  );\n};\n", "import { useGlobalComponentsContentfulQuery } from '@snapchat/mw-global-components-schema';\nimport type {\n  BackgroundColor,\n  DropdownMenuButtonProps,\n} from '@snapchat/snap-design-system-marketing';\nimport {\n  FooterBar as FooterBarSDS,\n  FooterColumns as FooterColumnsSDS,\n  FooterV2 as FooterV2SDS,\n  getBackgroundClassName,\n  Logo,\n  MotifScheme,\n  Orientation,\n  PrimitivesProvider,\n} from '@snapchat/snap-design-system-marketing';\nimport head from 'lodash-es/head';\nimport type { FC, ReactNode } from 'react';\nimport { useContext } from 'react';\n\nimport {\n  defaultLocaleCode,\n  GlobalComponentsContext,\n} from '../../../context/GlobalComponentsContext';\nimport type { FooterV3AllType } from '../../../generated/contentful-types';\nimport { FooterV3CollectionQueryDocumentType } from '../../../generated/contentful-types';\nimport { FooterType } from '../../GlobalFooter/GlobalFooter';\nimport { FooterGroup } from '../FooterGroup/FooterGroup';\nimport {\n  lightBgSnapLogoCss,\n  localeDropdownContainerCss,\n  logoWrapperCss,\n} from '../FooterGroup/FooterGroup.styles';\nimport { FooterLocaleDropdown } from '../FooterLocaleDropdown/FooterLocaleDropdown';\nimport type { FooterGroupItem } from '../FooterV3Types';\nimport { filterFooterDomains, mergeFooterData } from './utils';\n\nexport type CustomFooterGroupProps = {\n  id?: string;\n  title: string;\n  groupKey: string;\n  items: FooterGroupItem[];\n  analyticsLabel?: string;\n};\n\ninterface LocaleDropdownData {\n  id: string;\n  title: string;\n}\n\ninterface FooterCollectionV3Props {\n  customColumns?: CustomFooterGroupProps[];\n  customFooterBar?: CustomFooterGroupProps[];\n  motifScheme?: MotifScheme;\n  /** @deprecated Use motifScheme instead. */\n  backgroundColor?: BackgroundColor;\n  logo?: ReactNode;\n  /** Renders at the top of the footer. Used to link to socials. */\n  socialBar?: ReactNode;\n  footerType?: FooterType;\n  cookieSettingsUrl?: string;\n  hasSideNav?: boolean;\n  customLocaleDropdownButton?: FC<DropdownMenuButtonProps>;\n  className?: string;\n  /** Called when a footer group is toggled on mobile. */\n  onGroupToggle?: (groupId: string, groupTitle: string) => void;\n}\n\nexport const FooterCollectionV3: FC<FooterCollectionV3Props> = ({\n  customColumns,\n  customFooterBar,\n  motifScheme,\n  backgroundColor,\n  logo,\n  socialBar,\n  footerType = FooterType.FULL_FOOTER,\n  cookieSettingsUrl,\n  hasSideNav,\n  customLocaleDropdownButton,\n  className,\n  onGroupToggle,\n}) => {\n  const {\n    Anchor,\n    supportedLocales,\n    currentLocale,\n    hostname,\n    isPreview,\n    isSSR,\n    globalApolloClient,\n  } = useContext(GlobalComponentsContext);\n\n  const { data, loading, error } = useGlobalComponentsContentfulQuery(\n    FooterV3CollectionQueryDocumentType,\n    {\n      currentLocale: currentLocale ?? defaultLocaleCode,\n      isPreview: isPreview ?? false,\n      isSSR: isSSR ?? false,\n    },\n    { client: globalApolloClient }\n  );\n\n  if (loading || !!error || !hostname || !data) {\n    return null;\n  }\n\n  // Create fallback chain here instead of default parameters otherwise if 'motifScheme' is not provided,\n  // the default background color will be used instead of falling back to the 'backgroundColor' parameter\n  const motifSchemeWithFallback =\n    motifScheme ?? (getBackgroundClassName(backgroundColor) as MotifScheme) ?? MotifScheme.TERTIARY;\n\n  const hasMultipleLanguages = Object.keys(supportedLocales || {}).length > 1;\n  const footerProps = head(data.footerV3Collection.items) as FooterV3AllType;\n\n  const globalFooterColumnsItems = footerProps?.columnsCollection.items ?? [];\n  const globalFooterColumnsCollectionGroups = filterFooterDomains(\n    globalFooterColumnsItems,\n    hostname\n  );\n\n  const globalFooterBarItems = footerProps?.barCollection.items ?? [];\n  const globalFooterBarCollectionGroups = filterFooterDomains(globalFooterBarItems, hostname);\n\n  let localeDropdownData: LocaleDropdownData | undefined;\n\n  globalFooterBarCollectionGroups.forEach(group => {\n    const localeDropdownItem = group.itemsCollection.items.find(\n      i => i.__typename === 'FooterLocaleDropdown'\n    );\n\n    if (localeDropdownItem && !localeDropdownItem.hideOnDomains?.includes(hostname)) {\n      localeDropdownData = {\n        title: localeDropdownItem.title,\n        id: localeDropdownItem.sys.id,\n      };\n    }\n  });\n\n  const columnsGroups = mergeFooterData(\n    globalFooterColumnsCollectionGroups,\n    customColumns ?? [],\n    cookieSettingsUrl\n  );\n\n  const barGroups = mergeFooterData(\n    globalFooterBarCollectionGroups,\n    customFooterBar ?? [],\n    cookieSettingsUrl\n  );\n\n  let finalLogo: ReactNode;\n\n  if (barGroups.length) {\n    if (logo) {\n      finalLogo = logo;\n    } else {\n      const defaultLogo = (\n        <Logo\n          url={footerProps?.url}\n          className={logoWrapperCss}\n          innerLogoClassName={\n            motifSchemeWithFallback !== MotifScheme.SECONDARY ? lightBgSnapLogoCss : undefined\n          }\n          logoType={'SnapInc'}\n          openInNewTab\n        />\n      );\n\n      finalLogo = defaultLogo;\n    }\n\n    if (finalLogo && !footerProps?.hideLogoOnDomains?.includes(hostname)) {\n      //(NOTE: dvazbynd): adding the logo item to the right group to match position in the design\n      barGroups[0]!.beforeItems = <li>{finalLogo}</li>;\n    }\n\n    // Add locale dropdown to end of bar groups\n    if (localeDropdownData) {\n      const localeDropdown = (\n        <li\n          key={localeDropdownData.id}\n          id={localeDropdownData.id}\n          className={localeDropdownContainerCss}\n        >\n          <FooterLocaleDropdown\n            title={localeDropdownData.title}\n            currentOrientation={Orientation.Horizontal}\n            buttonComponent={customLocaleDropdownButton}\n          />\n        </li>\n      );\n\n      // TODO: we don't want to modify bar groups like this,\n      // and directly render localeDropdown instead. Likely paired\n      // with a migration to move localeDropdown to its own field on footer.\n      barGroups.push({\n        id: 'localeDropdownGroup',\n        title: '',\n        items: [],\n        orientation: Orientation.Horizontal,\n        afterItems: localeDropdown,\n      });\n    }\n  }\n\n  let output: ReactNode = null;\n\n  if (footerType === FooterType.NO_FOOTER) {\n    // Handle no footer case\n    if (!hasMultipleLanguages) {\n      return null;\n    }\n\n    if (!localeDropdownData) return null;\n\n    const localeDropdown = (\n      <li\n        key={localeDropdownData.id}\n        id={localeDropdownData.id}\n        className={localeDropdownContainerCss}\n      >\n        <FooterLocaleDropdown\n          title={localeDropdownData.title}\n          currentOrientation={Orientation.Horizontal}\n          buttonComponent={customLocaleDropdownButton}\n        />\n      </li>\n    );\n\n    output = (\n      <FooterV2SDS motifScheme={motifSchemeWithFallback} className={className}>\n        {socialBar}\n        <FooterBarSDS hasSideNav={hasSideNav}>\n          <FooterGroup\n            key={'noFooter'}\n            id={'localeDropdown'}\n            title=\"\"\n            items={[]}\n            orientation={Orientation.Horizontal}\n            afterItems={localeDropdown}\n          />\n        </FooterBarSDS>\n      </FooterV2SDS>\n    );\n  } else {\n    // handle hideFooterLinks or full footer case\n    const footerBar = (\n      <FooterBarSDS hasSideNav={hasSideNav}>\n        {barGroups.map((group, i) => {\n          return (\n            <FooterGroup\n              key={`${i}-${group.id}`}\n              id={group.id}\n              title={group.title}\n              items={group.items}\n              orientation={Orientation.Horizontal}\n              beforeItems={group.beforeItems}\n              afterItems={group.afterItems}\n              isFooterBar\n            />\n          );\n        })}\n      </FooterBarSDS>\n    );\n\n    if (footerType === FooterType.SIMPLE_FOOTER) {\n      output = (\n        <FooterV2SDS motifScheme={motifSchemeWithFallback} className={className}>\n          {socialBar}\n          {footerBar}\n        </FooterV2SDS>\n      );\n    } else {\n      const footerColumns = columnsGroups.map((group, i) => (\n        <FooterGroup\n          key={`${i}-${group.id}`}\n          id={group.id}\n          title={group.title}\n          items={group.items}\n          onToggle={onGroupToggle}\n        />\n      ));\n\n      output = (\n        <FooterV2SDS motifScheme={motifSchemeWithFallback} className={className}>\n          {socialBar}\n          <FooterColumnsSDS hasSideNav={hasSideNav}>{footerColumns}</FooterColumnsSDS>\n          {footerBar}\n        </FooterV2SDS>\n      );\n    }\n  }\n\n  return <PrimitivesProvider value={{ Anchor }}>{output}</PrimitivesProvider>;\n};\n", "import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core';\nexport type Maybe<T> = T;\nexport type InputMaybe<T> = T;\nexport type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };\nexport type MakeEmpty<T extends { [key: string]: unknown }, K extends keyof T> = { [_ in K]?: never };\nexport type Incremental<T> = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n  ID: { input: string; output: string; }\n  String: { input: string; output: string; }\n  Boolean: { input: boolean; output: boolean; }\n  Int: { input: number; output: number; }\n  Float: { input: number; output: number; }\n  /**\n   * A date-time string at UTC, such as 2007-12-03T10:15:30Z,\n   *     compliant with the 'date-time' format outlined in section 5.6 of\n   *     the RFC 3339 profile of the ISO 8601 standard for representation\n   *     of dates and times using the Gregorian calendar.\n   */\n  DateTime: { input: string; output: string; }\n  /** The 'Dimension' type represents dimensions as whole numeric values between `1` and `4000`. */\n  Dimension: { input: number; output: number; }\n  /** The 'Quality' type represents quality as whole numeric values between `1` and `100`. */\n  Quality: { input: number; output: number; }\n  /** The 'HexColor' type represents color in `rgb:ffffff` string format. */\n  HexColor: { input: string; output: string; }\n  /** The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */\n  JSON: { input: Record<string, unknown>; output: Record<string, unknown>; }\n};\n\nexport type QueryType = {\n  readonly __typename?: 'Query';\n  readonly asset: Maybe<AssetType>;\n  readonly assetCollection: Maybe<AssetCollectionType>;\n  readonly globalNavConfig: Maybe<GlobalNavConfigType>;\n  readonly globalNavConfigCollection: Maybe<GlobalNavConfigCollectionType>;\n  readonly cookieModal: Maybe<CookieModalType>;\n  readonly cookieModalCollection: Maybe<CookieModalCollectionType>;\n  readonly trackingCookie: Maybe<TrackingCookieType>;\n  readonly trackingCookieCollection: Maybe<TrackingCookieCollectionType>;\n  readonly image: Maybe<ImageType>;\n  readonly imageCollection: Maybe<ImageCollectionType>;\n  readonly globalNavHighlight: Maybe<GlobalNavHighlightType>;\n  readonly globalNavHighlightCollection: Maybe<GlobalNavHighlightCollectionType>;\n  readonly globalNav: Maybe<GlobalNavType>;\n  readonly globalNavCollection: Maybe<GlobalNavCollectionType>;\n  readonly cookieCategory: Maybe<CookieCategoryType>;\n  readonly cookieCategoryCollection: Maybe<CookieCategoryCollectionType>;\n  readonly footerV3: Maybe<FooterV3Type>;\n  readonly footerV3Collection: Maybe<FooterV3CollectionType>;\n  readonly footerItemV3: Maybe<FooterItemV3Type>;\n  readonly footerItemV3Collection: Maybe<FooterItemV3CollectionType>;\n  readonly footerLocaleDropdown: Maybe<FooterLocaleDropdownType>;\n  readonly footerLocaleDropdownCollection: Maybe<FooterLocaleDropdownCollectionType>;\n  readonly footerCookiesSettingsLink: Maybe<FooterCookiesSettingsLinkType>;\n  readonly footerCookiesSettingsLinkCollection: Maybe<FooterCookiesSettingsLinkCollectionType>;\n  readonly footerGroup: Maybe<FooterGroupType>;\n  readonly footerGroupCollection: Maybe<FooterGroupCollectionType>;\n  readonly cookieBanner: Maybe<CookieBannerType>;\n  readonly cookieBannerCollection: Maybe<CookieBannerCollectionType>;\n  readonly footer: Maybe<FooterType>;\n  readonly footerCollection: Maybe<FooterCollectionType>;\n  readonly analytics: Maybe<AnalyticsType>;\n  readonly analyticsCollection: Maybe<AnalyticsCollectionType>;\n  readonly globalNavItem: Maybe<GlobalNavItemType>;\n  readonly globalNavItemCollection: Maybe<GlobalNavItemCollectionType>;\n  readonly button: Maybe<ButtonType>;\n  readonly buttonCollection: Maybe<ButtonCollectionType>;\n  readonly callToAction: Maybe<CallToActionType>;\n  readonly callToActionCollection: Maybe<CallToActionCollectionType>;\n  readonly message: Maybe<MessageType>;\n  readonly messageCollection: Maybe<MessageCollectionType>;\n  readonly legalMessage: Maybe<LegalMessageType>;\n  readonly legalMessageCollection: Maybe<LegalMessageCollectionType>;\n  readonly video: Maybe<VideoType>;\n  readonly videoCollection: Maybe<VideoCollectionType>;\n  readonly footerItem: Maybe<FooterItemType>;\n  readonly footerItemCollection: Maybe<FooterItemCollectionType>;\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly _node: Maybe<_NodeType>;\n};\n\n\nexport type QueryAssetArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryAssetCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<AssetFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<AssetOrderType>>>;\n};\n\n\nexport type QueryGlobalNavConfigArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryGlobalNavConfigCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<GlobalNavConfigFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavConfigOrderType>>>;\n};\n\n\nexport type QueryCookieModalArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryCookieModalCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<CookieModalFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<CookieModalOrderType>>>;\n};\n\n\nexport type QueryTrackingCookieArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryTrackingCookieCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<TrackingCookieFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<TrackingCookieOrderType>>>;\n};\n\n\nexport type QueryImageArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryImageCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<ImageFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<ImageOrderType>>>;\n};\n\n\nexport type QueryGlobalNavHighlightArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryGlobalNavHighlightCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<GlobalNavHighlightFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavHighlightOrderType>>>;\n};\n\n\nexport type QueryGlobalNavArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryGlobalNavCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<GlobalNavFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavOrderType>>>;\n};\n\n\nexport type QueryCookieCategoryArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryCookieCategoryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<CookieCategoryFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<CookieCategoryOrderType>>>;\n};\n\n\nexport type QueryFooterV3ArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryFooterV3CollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterV3FilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterV3OrderType>>>;\n};\n\n\nexport type QueryFooterItemV3ArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryFooterItemV3CollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterItemV3FilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterItemV3OrderType>>>;\n};\n\n\nexport type QueryFooterLocaleDropdownArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryFooterLocaleDropdownCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterLocaleDropdownFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterLocaleDropdownOrderType>>>;\n};\n\n\nexport type QueryFooterCookiesSettingsLinkArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryFooterCookiesSettingsLinkCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterCookiesSettingsLinkFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterCookiesSettingsLinkOrderType>>>;\n};\n\n\nexport type QueryFooterGroupArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryFooterGroupCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterGroupFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterGroupOrderType>>>;\n};\n\n\nexport type QueryCookieBannerArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryCookieBannerCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<CookieBannerFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<CookieBannerOrderType>>>;\n};\n\n\nexport type QueryFooterArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryFooterCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterOrderType>>>;\n};\n\n\nexport type QueryAnalyticsArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryAnalyticsCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<AnalyticsFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<AnalyticsOrderType>>>;\n};\n\n\nexport type QueryGlobalNavItemArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryGlobalNavItemCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<GlobalNavItemFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavItemOrderType>>>;\n};\n\n\nexport type QueryButtonArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryButtonCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<ButtonFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<ButtonOrderType>>>;\n};\n\n\nexport type QueryCallToActionArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryCallToActionCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<CallToActionFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<CallToActionOrderType>>>;\n};\n\n\nexport type QueryMessageArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryMessageCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<MessageFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<MessageOrderType>>>;\n};\n\n\nexport type QueryLegalMessageArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryLegalMessageCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<LegalMessageFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<LegalMessageOrderType>>>;\n};\n\n\nexport type QueryVideoArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryVideoCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<VideoFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<VideoOrderType>>>;\n};\n\n\nexport type QueryFooterItemArgsType = {\n  id: Scalars['String']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryFooterItemCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterItemFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterItemOrderType>>>;\n};\n\n\nexport type QueryEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<EntryFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<EntryOrderType>>>;\n};\n\n\nexport type Query_NodeArgsType = {\n  id: Scalars['ID']['input'];\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n/** Represents a binary file in a space. An asset can be any file type. */\nexport type AssetType = {\n  readonly __typename?: 'Asset';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly description: Maybe<Scalars['String']['output']>;\n  readonly contentType: Maybe<Scalars['String']['output']>;\n  readonly fileName: Maybe<Scalars['String']['output']>;\n  readonly size: Maybe<Scalars['Int']['output']>;\n  readonly url: Maybe<Scalars['String']['output']>;\n  readonly width: Maybe<Scalars['Int']['output']>;\n  readonly height: Maybe<Scalars['Int']['output']>;\n  readonly linkedFrom: Maybe<AssetLinkingCollectionsType>;\n};\n\n\n/** Represents a binary file in a space. An asset can be any file type. */\nexport type AssetTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Represents a binary file in a space. An asset can be any file type. */\nexport type AssetDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Represents a binary file in a space. An asset can be any file type. */\nexport type AssetContentTypeArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Represents a binary file in a space. An asset can be any file type. */\nexport type AssetFileNameArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Represents a binary file in a space. An asset can be any file type. */\nexport type AssetSizeArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Represents a binary file in a space. An asset can be any file type. */\nexport type AssetUrlArgsType = {\n  transform: InputMaybe<ImageTransformOptionsType>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Represents a binary file in a space. An asset can be any file type. */\nexport type AssetWidthArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Represents a binary file in a space. An asset can be any file type. */\nexport type AssetHeightArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Represents a binary file in a space. An asset can be any file type. */\nexport type AssetLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\nexport type SysType = {\n  readonly __typename?: 'Sys';\n  readonly id: Scalars['String']['output'];\n  readonly spaceId: Scalars['String']['output'];\n  readonly environmentId: Scalars['String']['output'];\n  readonly publishedAt: Maybe<Scalars['DateTime']['output']>;\n  readonly firstPublishedAt: Maybe<Scalars['DateTime']['output']>;\n  readonly publishedVersion: Maybe<Scalars['Int']['output']>;\n  /** The locale that was requested. */\n  readonly locale: Maybe<Scalars['String']['output']>;\n};\n\nexport type ContentfulMetadataType = {\n  readonly __typename?: 'ContentfulMetadata';\n  readonly tags: ReadonlyArray<Maybe<ContentfulTagType>>;\n  readonly concepts: ReadonlyArray<Maybe<TaxonomyConceptType>>;\n};\n\n/**\n * Represents a tag entity for finding and organizing content easily.\n *         Find out more here: https://www.contentful.com/developers/docs/references/content-delivery-api/#/reference/content-concepts\n */\nexport type TaxonomyConceptType = {\n  readonly __typename?: 'TaxonomyConcept';\n  readonly id: Maybe<Scalars['String']['output']>;\n};\n\n/**\n * Represents a tag entity for finding and organizing content easily.\n *       Find out more here: https://www.contentful.com/developers/docs/references/content-delivery-api/#/reference/content-tags\n */\nexport type ContentfulTagType = {\n  readonly __typename?: 'ContentfulTag';\n  readonly id: Maybe<Scalars['String']['output']>;\n  readonly name: Maybe<Scalars['String']['output']>;\n};\n\nexport type ImageTransformOptionsType = {\n  /** Desired width in pixels. Defaults to the original image width. */\n  readonly width: InputMaybe<Scalars['Dimension']['input']>;\n  /** Desired height in pixels. Defaults to the original image height. */\n  readonly height: InputMaybe<Scalars['Dimension']['input']>;\n  /**\n   * Desired quality of the image in percents.\n   *         Used for `PNG8`, `JPG`, `JPG_PROGRESSIVE` and `WEBP` formats.\n   */\n  readonly quality: InputMaybe<Scalars['Quality']['input']>;\n  /**\n   * Desired corner radius in pixels.\n   *         Results in an image with rounded corners (pass `-1` for a full circle/ellipse).\n   *         Defaults to `0`. Uses desired background color as padding color,\n   *         unless the format is `JPG` or `JPG_PROGRESSIVE` and resize strategy is `PAD`, then defaults to white.\n   */\n  readonly cornerRadius: InputMaybe<Scalars['Int']['input']>;\n  /** Desired resize strategy. Defaults to `FIT`. */\n  readonly resizeStrategy: InputMaybe<ImageResizeStrategyType>;\n  /** Desired resize focus area. Defaults to `CENTER`. */\n  readonly resizeFocus: InputMaybe<ImageResizeFocusType>;\n  /**\n   * Desired background color, used with corner radius or `PAD` resize strategy.\n   *         Defaults to transparent (for `PNG`, `PNG8` and `WEBP`) or white (for `JPG` and `JPG_PROGRESSIVE`).\n   */\n  readonly backgroundColor: InputMaybe<Scalars['HexColor']['input']>;\n  /** Desired image format. Defaults to the original image format. */\n  readonly format: InputMaybe<ImageFormatType>;\n};\n\nexport enum ImageResizeStrategyType {\n  /** Resizes the image to fit into the specified dimensions. */\n  FitType = 'FIT',\n  /**\n   * Resizes the image to the specified dimensions, padding the image if needed.\n   *         Uses desired background color as padding color.\n   */\n  PadType = 'PAD',\n  /** Resizes the image to the specified dimensions, cropping the image if needed. */\n  FillType = 'FILL',\n  /** Resizes the image to the specified dimensions, changing the original aspect ratio if needed. */\n  ScaleType = 'SCALE',\n  /** Crops a part of the original image to fit into the specified dimensions. */\n  CropType = 'CROP',\n  /** Creates a thumbnail from the image. */\n  ThumbType = 'THUMB'\n}\n\nexport enum ImageResizeFocusType {\n  /** Focus the resizing on the center. */\n  CenterType = 'CENTER',\n  /** Focus the resizing on the top. */\n  TopType = 'TOP',\n  /** Focus the resizing on the top right. */\n  TopRightType = 'TOP_RIGHT',\n  /** Focus the resizing on the right. */\n  RightType = 'RIGHT',\n  /** Focus the resizing on the bottom right. */\n  BottomRightType = 'BOTTOM_RIGHT',\n  /** Focus the resizing on the bottom. */\n  BottomType = 'BOTTOM',\n  /** Focus the resizing on the bottom left. */\n  BottomLeftType = 'BOTTOM_LEFT',\n  /** Focus the resizing on the left. */\n  LeftType = 'LEFT',\n  /** Focus the resizing on the top left. */\n  TopLeftType = 'TOP_LEFT',\n  /** Focus the resizing on the largest face. */\n  FaceType = 'FACE',\n  /** Focus the resizing on the area containing all the faces. */\n  FacesType = 'FACES'\n}\n\nexport enum ImageFormatType {\n  /** JPG image format. */\n  JpgType = 'JPG',\n  /**\n   * Progressive JPG format stores multiple passes of an image in progressively higher detail.\n   *         When a progressive image is loading, the viewer will first see a lower quality pixelated version which\n   *         will gradually improve in detail, until the image is fully downloaded. This is to display an image as\n   *         early as possible to make the layout look as designed.\n   */\n  JpgProgressiveType = 'JPG_PROGRESSIVE',\n  /** PNG image format */\n  PngType = 'PNG',\n  /**\n   * 8-bit PNG images support up to 256 colors and weigh less than the standard 24-bit PNG equivalent.\n   *         The 8-bit PNG format is mostly used for simple images, such as icons or logos.\n   */\n  Png8Type = 'PNG8',\n  /** WebP image format. */\n  WebpType = 'WEBP',\n  AvifType = 'AVIF'\n}\n\nexport type AssetLinkingCollectionsType = {\n  readonly __typename?: 'AssetLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly imageCollection: Maybe<ImageCollectionType>;\n  readonly globalNavHighlightCollection: Maybe<GlobalNavHighlightCollectionType>;\n  readonly cookieBannerCollection: Maybe<CookieBannerCollectionType>;\n  readonly videoCollection: Maybe<VideoCollectionType>;\n};\n\n\nexport type AssetLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type AssetLinkingCollectionsImageCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type AssetLinkingCollectionsGlobalNavHighlightCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type AssetLinkingCollectionsCookieBannerCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type AssetLinkingCollectionsVideoCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type EntryCollectionType = {\n  readonly __typename?: 'EntryCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type EntryType = {\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n};\n\nexport type ImageCollectionType = {\n  readonly __typename?: 'ImageCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<ImageType>>;\n};\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/image) */\nexport type ImageType = EntryType & _NodeType & {\n  readonly __typename?: 'Image';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<ImageLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly contentfulDescription: Maybe<Scalars['String']['output']>;\n  readonly media: Maybe<AssetType>;\n  readonly wrap: Maybe<Scalars['String']['output']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/image) */\nexport type ImageLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/image) */\nexport type ImageContentfulDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/image) */\nexport type ImageMediaArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/image) */\nexport type ImageWrapArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type _NodeType = {\n  readonly _id: Scalars['ID']['output'];\n};\n\nexport type ImageLinkingCollectionsType = {\n  readonly __typename?: 'ImageLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly footerV3Collection: Maybe<FooterV3CollectionType>;\n  readonly buttonCollection: Maybe<ButtonCollectionType>;\n};\n\n\nexport type ImageLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type ImageLinkingCollectionsFooterV3CollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<ImageLinkingCollectionsFooterV3CollectionOrderType>>>;\n};\n\n\nexport type ImageLinkingCollectionsButtonCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<ImageLinkingCollectionsButtonCollectionOrderType>>>;\n};\n\nexport type FooterV3CollectionType = {\n  readonly __typename?: 'FooterV3Collection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterV3Type>>;\n};\n\n/** Type for the new Footer V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerV3) */\nexport type FooterV3Type = EntryType & _NodeType & {\n  readonly __typename?: 'FooterV3';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<FooterV3LinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly contentfulDescription: Maybe<Scalars['String']['output']>;\n  readonly columnsCollection: Maybe<FooterV3ColumnsCollectionType>;\n  readonly barCollection: Maybe<FooterV3BarCollectionType>;\n  readonly logo: Maybe<ImageType>;\n  readonly url: Maybe<Scalars['String']['output']>;\n  readonly hideLogoOnDomains: Maybe<ReadonlyArray<Maybe<Scalars['String']['output']>>>;\n};\n\n\n/** Type for the new Footer V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerV3) */\nexport type FooterV3LinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** Type for the new Footer V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerV3) */\nexport type FooterV3ContentfulDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Type for the new Footer V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerV3) */\nexport type FooterV3ColumnsCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterGroupFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterV3ColumnsCollectionOrderType>>>;\n};\n\n\n/** Type for the new Footer V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerV3) */\nexport type FooterV3BarCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterGroupFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterV3BarCollectionOrderType>>>;\n};\n\n\n/** Type for the new Footer V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerV3) */\nexport type FooterV3LogoArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<ImageFilterType>;\n};\n\n\n/** Type for the new Footer V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerV3) */\nexport type FooterV3UrlArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Type for the new Footer V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerV3) */\nexport type FooterV3HideLogoOnDomainsArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type FooterV3LinkingCollectionsType = {\n  readonly __typename?: 'FooterV3LinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n};\n\n\nexport type FooterV3LinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type FooterV3ColumnsCollectionType = {\n  readonly __typename?: 'FooterV3ColumnsCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterGroupType>>;\n};\n\n/** This model will hold and group footer items [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerGroup) */\nexport type FooterGroupType = EntryType & _NodeType & {\n  readonly __typename?: 'FooterGroup';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<FooterGroupLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly contentfulDescription: Maybe<Scalars['String']['output']>;\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly groupKey: Maybe<Scalars['String']['output']>;\n  readonly itemsCollection: Maybe<FooterGroupItemsCollectionType>;\n  readonly analytics: Maybe<AnalyticsType>;\n  readonly hideOnDomains: Maybe<ReadonlyArray<Maybe<Scalars['String']['output']>>>;\n};\n\n\n/** This model will hold and group footer items [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerGroup) */\nexport type FooterGroupLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** This model will hold and group footer items [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerGroup) */\nexport type FooterGroupContentfulDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** This model will hold and group footer items [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerGroup) */\nexport type FooterGroupTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** This model will hold and group footer items [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerGroup) */\nexport type FooterGroupGroupKeyArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** This model will hold and group footer items [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerGroup) */\nexport type FooterGroupItemsCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterGroupItemsFilterType>;\n};\n\n\n/** This model will hold and group footer items [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerGroup) */\nexport type FooterGroupAnalyticsArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<AnalyticsFilterType>;\n};\n\n\n/** This model will hold and group footer items [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerGroup) */\nexport type FooterGroupHideOnDomainsArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type FooterGroupLinkingCollectionsType = {\n  readonly __typename?: 'FooterGroupLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly footerV3Collection: Maybe<FooterV3CollectionType>;\n};\n\n\nexport type FooterGroupLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type FooterGroupLinkingCollectionsFooterV3CollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterGroupLinkingCollectionsFooterV3CollectionOrderType>>>;\n};\n\nexport enum FooterGroupLinkingCollectionsFooterV3CollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterGroupItemsCollectionType = {\n  readonly __typename?: 'FooterGroupItemsCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterGroupItemsItemType>>;\n};\n\nexport type FooterGroupItemsItemType = FooterCookiesSettingsLinkType | FooterItemV3Type | FooterLocaleDropdownType;\n\n/** Footer Cookie Settings Link model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerCookiesSettingsLink) */\nexport type FooterCookiesSettingsLinkType = EntryType & _NodeType & {\n  readonly __typename?: 'FooterCookiesSettingsLink';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<FooterCookiesSettingsLinkLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly contentfulDescription: Maybe<Scalars['String']['output']>;\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly hideOnDomains: Maybe<ReadonlyArray<Maybe<Scalars['String']['output']>>>;\n  readonly analytics: Maybe<AnalyticsType>;\n};\n\n\n/** Footer Cookie Settings Link model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerCookiesSettingsLink) */\nexport type FooterCookiesSettingsLinkLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** Footer Cookie Settings Link model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerCookiesSettingsLink) */\nexport type FooterCookiesSettingsLinkContentfulDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Footer Cookie Settings Link model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerCookiesSettingsLink) */\nexport type FooterCookiesSettingsLinkTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Footer Cookie Settings Link model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerCookiesSettingsLink) */\nexport type FooterCookiesSettingsLinkHideOnDomainsArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Footer Cookie Settings Link model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerCookiesSettingsLink) */\nexport type FooterCookiesSettingsLinkAnalyticsArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<AnalyticsFilterType>;\n};\n\nexport type FooterCookiesSettingsLinkLinkingCollectionsType = {\n  readonly __typename?: 'FooterCookiesSettingsLinkLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly footerGroupCollection: Maybe<FooterGroupCollectionType>;\n};\n\n\nexport type FooterCookiesSettingsLinkLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type FooterCookiesSettingsLinkLinkingCollectionsFooterGroupCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterCookiesSettingsLinkLinkingCollectionsFooterGroupCollectionOrderType>>>;\n};\n\nexport type FooterGroupCollectionType = {\n  readonly __typename?: 'FooterGroupCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterGroupType>>;\n};\n\nexport enum FooterCookiesSettingsLinkLinkingCollectionsFooterGroupCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/analytics) */\nexport type AnalyticsType = EntryType & _NodeType & {\n  readonly __typename?: 'Analytics';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<AnalyticsLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly label: Maybe<Scalars['String']['output']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/analytics) */\nexport type AnalyticsLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/analytics) */\nexport type AnalyticsLabelArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type AnalyticsLinkingCollectionsType = {\n  readonly __typename?: 'AnalyticsLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly footerItemV3Collection: Maybe<FooterItemV3CollectionType>;\n  readonly footerCookiesSettingsLinkCollection: Maybe<FooterCookiesSettingsLinkCollectionType>;\n  readonly footerGroupCollection: Maybe<FooterGroupCollectionType>;\n  readonly globalNavItemCollection: Maybe<GlobalNavItemCollectionType>;\n  readonly callToActionCollection: Maybe<CallToActionCollectionType>;\n  readonly footerItemCollection: Maybe<FooterItemCollectionType>;\n};\n\n\nexport type AnalyticsLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type AnalyticsLinkingCollectionsFooterItemV3CollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<AnalyticsLinkingCollectionsFooterItemV3CollectionOrderType>>>;\n};\n\n\nexport type AnalyticsLinkingCollectionsFooterCookiesSettingsLinkCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<AnalyticsLinkingCollectionsFooterCookiesSettingsLinkCollectionOrderType>>>;\n};\n\n\nexport type AnalyticsLinkingCollectionsFooterGroupCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<AnalyticsLinkingCollectionsFooterGroupCollectionOrderType>>>;\n};\n\n\nexport type AnalyticsLinkingCollectionsGlobalNavItemCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<AnalyticsLinkingCollectionsGlobalNavItemCollectionOrderType>>>;\n};\n\n\nexport type AnalyticsLinkingCollectionsCallToActionCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<AnalyticsLinkingCollectionsCallToActionCollectionOrderType>>>;\n};\n\n\nexport type AnalyticsLinkingCollectionsFooterItemCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<AnalyticsLinkingCollectionsFooterItemCollectionOrderType>>>;\n};\n\nexport type FooterItemV3CollectionType = {\n  readonly __typename?: 'FooterItemV3Collection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterItemV3Type>>;\n};\n\n/** Footer item for the Footer - V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItemV3) */\nexport type FooterItemV3Type = EntryType & _NodeType & {\n  readonly __typename?: 'FooterItemV3';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<FooterItemV3LinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly contentfulDescription: Maybe<Scalars['String']['output']>;\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly url: Maybe<Scalars['String']['output']>;\n  readonly analytics: Maybe<AnalyticsType>;\n  readonly hideOnDomains: Maybe<ReadonlyArray<Maybe<Scalars['String']['output']>>>;\n};\n\n\n/** Footer item for the Footer - V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItemV3) */\nexport type FooterItemV3LinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** Footer item for the Footer - V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItemV3) */\nexport type FooterItemV3ContentfulDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Footer item for the Footer - V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItemV3) */\nexport type FooterItemV3TitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Footer item for the Footer - V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItemV3) */\nexport type FooterItemV3UrlArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Footer item for the Footer - V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItemV3) */\nexport type FooterItemV3AnalyticsArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<AnalyticsFilterType>;\n};\n\n\n/** Footer item for the Footer - V3 [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItemV3) */\nexport type FooterItemV3HideOnDomainsArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type FooterItemV3LinkingCollectionsType = {\n  readonly __typename?: 'FooterItemV3LinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly footerGroupCollection: Maybe<FooterGroupCollectionType>;\n};\n\n\nexport type FooterItemV3LinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type FooterItemV3LinkingCollectionsFooterGroupCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterItemV3LinkingCollectionsFooterGroupCollectionOrderType>>>;\n};\n\nexport enum FooterItemV3LinkingCollectionsFooterGroupCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type AnalyticsFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly label_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly label: InputMaybe<Scalars['String']['input']>;\n  readonly label_not: InputMaybe<Scalars['String']['input']>;\n  readonly label_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly label_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly label_contains: InputMaybe<Scalars['String']['input']>;\n  readonly label_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<AnalyticsFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<AnalyticsFilterType>>>;\n};\n\nexport type SysFilterType = {\n  readonly id_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly id: InputMaybe<Scalars['String']['input']>;\n  readonly id_not: InputMaybe<Scalars['String']['input']>;\n  readonly id_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly id_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly id_contains: InputMaybe<Scalars['String']['input']>;\n  readonly id_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly publishedAt_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly publishedAt: InputMaybe<Scalars['DateTime']['input']>;\n  readonly publishedAt_not: InputMaybe<Scalars['DateTime']['input']>;\n  readonly publishedAt_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['DateTime']['input']>>>;\n  readonly publishedAt_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['DateTime']['input']>>>;\n  readonly publishedAt_gt: InputMaybe<Scalars['DateTime']['input']>;\n  readonly publishedAt_gte: InputMaybe<Scalars['DateTime']['input']>;\n  readonly publishedAt_lt: InputMaybe<Scalars['DateTime']['input']>;\n  readonly publishedAt_lte: InputMaybe<Scalars['DateTime']['input']>;\n  readonly firstPublishedAt_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly firstPublishedAt: InputMaybe<Scalars['DateTime']['input']>;\n  readonly firstPublishedAt_not: InputMaybe<Scalars['DateTime']['input']>;\n  readonly firstPublishedAt_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['DateTime']['input']>>>;\n  readonly firstPublishedAt_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['DateTime']['input']>>>;\n  readonly firstPublishedAt_gt: InputMaybe<Scalars['DateTime']['input']>;\n  readonly firstPublishedAt_gte: InputMaybe<Scalars['DateTime']['input']>;\n  readonly firstPublishedAt_lt: InputMaybe<Scalars['DateTime']['input']>;\n  readonly firstPublishedAt_lte: InputMaybe<Scalars['DateTime']['input']>;\n  readonly publishedVersion_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly publishedVersion: InputMaybe<Scalars['Float']['input']>;\n  readonly publishedVersion_not: InputMaybe<Scalars['Float']['input']>;\n  readonly publishedVersion_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['Float']['input']>>>;\n  readonly publishedVersion_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['Float']['input']>>>;\n  readonly publishedVersion_gt: InputMaybe<Scalars['Float']['input']>;\n  readonly publishedVersion_gte: InputMaybe<Scalars['Float']['input']>;\n  readonly publishedVersion_lt: InputMaybe<Scalars['Float']['input']>;\n  readonly publishedVersion_lte: InputMaybe<Scalars['Float']['input']>;\n};\n\nexport type ContentfulMetadataFilterType = {\n  readonly tags_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly tags: InputMaybe<ContentfulMetadataTagsFilterType>;\n  readonly concepts_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly concepts: InputMaybe<ContentfulMetadataConceptsFilterType>;\n};\n\nexport type ContentfulMetadataConceptsFilterType = {\n  readonly id_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly id_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly id_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly descendants: InputMaybe<ContentfulMetadataConceptsDescendantsFilterType>;\n};\n\nexport type ContentfulMetadataConceptsDescendantsFilterType = {\n  readonly id_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly id_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly id_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\nexport type ContentfulMetadataTagsFilterType = {\n  readonly id_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly id_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly id_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\nexport enum AnalyticsLinkingCollectionsFooterItemV3CollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterCookiesSettingsLinkCollectionType = {\n  readonly __typename?: 'FooterCookiesSettingsLinkCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterCookiesSettingsLinkType>>;\n};\n\nexport enum AnalyticsLinkingCollectionsFooterCookiesSettingsLinkCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum AnalyticsLinkingCollectionsFooterGroupCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type GlobalNavItemCollectionType = {\n  readonly __typename?: 'GlobalNavItemCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<GlobalNavItemType>>;\n};\n\n/** Individual link in the global nav. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavItem) */\nexport type GlobalNavItemType = EntryType & _NodeType & {\n  readonly __typename?: 'GlobalNavItem';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<GlobalNavItemLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly url: Maybe<Scalars['String']['output']>;\n  readonly analytics: Maybe<AnalyticsType>;\n  readonly hideHostnameRegex: Maybe<Scalars['String']['output']>;\n};\n\n\n/** Individual link in the global nav. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavItem) */\nexport type GlobalNavItemLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** Individual link in the global nav. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavItem) */\nexport type GlobalNavItemTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Individual link in the global nav. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavItem) */\nexport type GlobalNavItemUrlArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Individual link in the global nav. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavItem) */\nexport type GlobalNavItemAnalyticsArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<AnalyticsFilterType>;\n};\n\n\n/** Individual link in the global nav. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavItem) */\nexport type GlobalNavItemHideHostnameRegexArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type GlobalNavItemLinkingCollectionsType = {\n  readonly __typename?: 'GlobalNavItemLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly globalNavCollection: Maybe<GlobalNavCollectionType>;\n};\n\n\nexport type GlobalNavItemLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type GlobalNavItemLinkingCollectionsGlobalNavCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavItemLinkingCollectionsGlobalNavCollectionOrderType>>>;\n};\n\nexport type GlobalNavCollectionType = {\n  readonly __typename?: 'GlobalNavCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<GlobalNavType>>;\n};\n\n/** Link group in the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNav) */\nexport type GlobalNavType = EntryType & _NodeType & {\n  readonly __typename?: 'GlobalNav';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<GlobalNavLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly groupKey: Maybe<Scalars['String']['output']>;\n  readonly highlight: Maybe<GlobalNavHighlightType>;\n  readonly itemsCollection: Maybe<GlobalNavItemsCollectionType>;\n  readonly primaryHostnameRegex: Maybe<Scalars['String']['output']>;\n  readonly hideHostnameRegex: Maybe<Scalars['String']['output']>;\n};\n\n\n/** Link group in the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNav) */\nexport type GlobalNavLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** Link group in the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNav) */\nexport type GlobalNavTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Link group in the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNav) */\nexport type GlobalNavGroupKeyArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Link group in the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNav) */\nexport type GlobalNavHighlightArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<GlobalNavHighlightFilterType>;\n};\n\n\n/** Link group in the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNav) */\nexport type GlobalNavItemsCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<GlobalNavItemFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavItemsCollectionOrderType>>>;\n};\n\n\n/** Link group in the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNav) */\nexport type GlobalNavPrimaryHostnameRegexArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Link group in the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNav) */\nexport type GlobalNavHideHostnameRegexArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type GlobalNavLinkingCollectionsType = {\n  readonly __typename?: 'GlobalNavLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly globalNavConfigCollection: Maybe<GlobalNavConfigCollectionType>;\n};\n\n\nexport type GlobalNavLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type GlobalNavLinkingCollectionsGlobalNavConfigCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavLinkingCollectionsGlobalNavConfigCollectionOrderType>>>;\n};\n\nexport type GlobalNavConfigCollectionType = {\n  readonly __typename?: 'GlobalNavConfigCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<GlobalNavConfigType>>;\n};\n\n/** Configuration for the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavConfig) */\nexport type GlobalNavConfigType = EntryType & _NodeType & {\n  readonly __typename?: 'GlobalNavConfig';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<GlobalNavConfigLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly globalNavGroupsCollection: Maybe<GlobalNavConfigGlobalNavGroupsCollectionType>;\n  readonly globalNavLabel: Maybe<Scalars['String']['output']>;\n  readonly globalNavButtonAriaLabel: Maybe<Scalars['String']['output']>;\n};\n\n\n/** Configuration for the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavConfig) */\nexport type GlobalNavConfigLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** Configuration for the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavConfig) */\nexport type GlobalNavConfigTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Configuration for the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavConfig) */\nexport type GlobalNavConfigGlobalNavGroupsCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<GlobalNavFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavConfigGlobalNavGroupsCollectionOrderType>>>;\n};\n\n\n/** Configuration for the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavConfig) */\nexport type GlobalNavConfigGlobalNavLabelArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Configuration for the global navigation. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavConfig) */\nexport type GlobalNavConfigGlobalNavButtonAriaLabelArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type GlobalNavConfigLinkingCollectionsType = {\n  readonly __typename?: 'GlobalNavConfigLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n};\n\n\nexport type GlobalNavConfigLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type GlobalNavConfigGlobalNavGroupsCollectionType = {\n  readonly __typename?: 'GlobalNavConfigGlobalNavGroupsCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<GlobalNavType>>;\n};\n\nexport type GlobalNavFilterType = {\n  readonly highlight: InputMaybe<CfGlobalNavHighlightNestedFilterType>;\n  readonly items: InputMaybe<CfGlobalNavItemNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly groupKey: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_not: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly groupKey_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly groupKey_contains: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly highlight_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly itemsCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly primaryHostnameRegex_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly primaryHostnameRegex: InputMaybe<Scalars['String']['input']>;\n  readonly primaryHostnameRegex_not: InputMaybe<Scalars['String']['input']>;\n  readonly primaryHostnameRegex_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly primaryHostnameRegex_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly primaryHostnameRegex_contains: InputMaybe<Scalars['String']['input']>;\n  readonly primaryHostnameRegex_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideHostnameRegex: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_not: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideHostnameRegex_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideHostnameRegex_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavFilterType>>>;\n};\n\nexport type CfGlobalNavHighlightNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cta_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly background_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardTitleV2_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardTitleV2: InputMaybe<Scalars['String']['input']>;\n  readonly cardTitleV2_not: InputMaybe<Scalars['String']['input']>;\n  readonly cardTitleV2_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly cardTitleV2_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly cardTitleV2_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardTitleV2_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardBodyV2_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardBodyV2: InputMaybe<Scalars['String']['input']>;\n  readonly cardBodyV2_not: InputMaybe<Scalars['String']['input']>;\n  readonly cardBodyV2_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly cardBodyV2_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly cardBodyV2_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardBodyV2_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardContent_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardContent_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardContent_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardTitle_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardTitle_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardTitle_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardBody_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardBody_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardBody_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfGlobalNavHighlightNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfGlobalNavHighlightNestedFilterType>>>;\n};\n\nexport type CfGlobalNavItemNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url: InputMaybe<Scalars['String']['input']>;\n  readonly url_not: InputMaybe<Scalars['String']['input']>;\n  readonly url_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly analytics_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideHostnameRegex_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideHostnameRegex: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_not: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideHostnameRegex_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideHostnameRegex_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfGlobalNavItemNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfGlobalNavItemNestedFilterType>>>;\n};\n\nexport enum GlobalNavConfigGlobalNavGroupsCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  PrimaryHostnameRegexAscType = 'primaryHostnameRegex_ASC',\n  PrimaryHostnameRegexDescType = 'primaryHostnameRegex_DESC',\n  HideHostnameRegexAscType = 'hideHostnameRegex_ASC',\n  HideHostnameRegexDescType = 'hideHostnameRegex_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum GlobalNavLinkingCollectionsGlobalNavConfigCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GlobalNavLabelAscType = 'globalNavLabel_ASC',\n  GlobalNavLabelDescType = 'globalNavLabel_DESC',\n  GlobalNavButtonAriaLabelAscType = 'globalNavButtonAriaLabel_ASC',\n  GlobalNavButtonAriaLabelDescType = 'globalNavButtonAriaLabel_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\n/** The highlight for a group of links. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavHighlight) */\nexport type GlobalNavHighlightType = EntryType & _NodeType & {\n  readonly __typename?: 'GlobalNavHighlight';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<GlobalNavHighlightLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly cta: Maybe<CallToActionType>;\n  readonly background: Maybe<AssetType>;\n  readonly cardTitleV2: Maybe<Scalars['String']['output']>;\n  readonly cardBodyV2: Maybe<Scalars['String']['output']>;\n  readonly cardContent: Maybe<GlobalNavHighlightCardContentType>;\n  readonly cardTitle: Maybe<GlobalNavHighlightCardTitleType>;\n  readonly cardBody: Maybe<GlobalNavHighlightCardBodyType>;\n};\n\n\n/** The highlight for a group of links. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavHighlight) */\nexport type GlobalNavHighlightLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** The highlight for a group of links. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavHighlight) */\nexport type GlobalNavHighlightTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** The highlight for a group of links. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavHighlight) */\nexport type GlobalNavHighlightCtaArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<CallToActionFilterType>;\n};\n\n\n/** The highlight for a group of links. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavHighlight) */\nexport type GlobalNavHighlightBackgroundArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** The highlight for a group of links. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavHighlight) */\nexport type GlobalNavHighlightCardTitleV2ArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** The highlight for a group of links. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavHighlight) */\nexport type GlobalNavHighlightCardBodyV2ArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** The highlight for a group of links. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavHighlight) */\nexport type GlobalNavHighlightCardContentArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** The highlight for a group of links. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavHighlight) */\nexport type GlobalNavHighlightCardTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** The highlight for a group of links. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/globalNavHighlight) */\nexport type GlobalNavHighlightCardBodyArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type GlobalNavHighlightLinkingCollectionsType = {\n  readonly __typename?: 'GlobalNavHighlightLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly globalNavCollection: Maybe<GlobalNavCollectionType>;\n};\n\n\nexport type GlobalNavHighlightLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type GlobalNavHighlightLinkingCollectionsGlobalNavCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavHighlightLinkingCollectionsGlobalNavCollectionOrderType>>>;\n};\n\nexport enum GlobalNavHighlightLinkingCollectionsGlobalNavCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  PrimaryHostnameRegexAscType = 'primaryHostnameRegex_ASC',\n  PrimaryHostnameRegexDescType = 'primaryHostnameRegex_DESC',\n  HideHostnameRegexAscType = 'hideHostnameRegex_ASC',\n  HideHostnameRegexDescType = 'hideHostnameRegex_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/callToAction) */\nexport type CallToActionType = EntryType & _NodeType & {\n  readonly __typename?: 'CallToAction';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<CallToActionLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly contentfulDescription: Maybe<Scalars['String']['output']>;\n  readonly presentation: Maybe<CallToActionPresentationType>;\n  readonly analytics: Maybe<AnalyticsType>;\n  readonly url: Maybe<Scalars['String']['output']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/callToAction) */\nexport type CallToActionLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/callToAction) */\nexport type CallToActionContentfulDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/callToAction) */\nexport type CallToActionPresentationArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/callToAction) */\nexport type CallToActionAnalyticsArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<AnalyticsFilterType>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/callToAction) */\nexport type CallToActionUrlArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type CallToActionLinkingCollectionsType = {\n  readonly __typename?: 'CallToActionLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly globalNavHighlightCollection: Maybe<GlobalNavHighlightCollectionType>;\n};\n\n\nexport type CallToActionLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type CallToActionLinkingCollectionsGlobalNavHighlightCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<CallToActionLinkingCollectionsGlobalNavHighlightCollectionOrderType>>>;\n};\n\nexport type GlobalNavHighlightCollectionType = {\n  readonly __typename?: 'GlobalNavHighlightCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<GlobalNavHighlightType>>;\n};\n\nexport enum CallToActionLinkingCollectionsGlobalNavHighlightCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  CardTitleV2AscType = 'cardTitleV2_ASC',\n  CardTitleV2DescType = 'cardTitleV2_DESC',\n  CardBodyV2AscType = 'cardBodyV2_ASC',\n  CardBodyV2DescType = 'cardBodyV2_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type CallToActionPresentationType = ButtonType;\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/button) */\nexport type ButtonType = EntryType & _NodeType & {\n  readonly __typename?: 'Button';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<ButtonLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly contentfulDescription: Maybe<Scalars['String']['output']>;\n  readonly title: Maybe<ButtonTitleType>;\n  readonly url: Maybe<Scalars['String']['output']>;\n  readonly size: Maybe<Scalars['String']['output']>;\n  readonly theme: Maybe<Scalars['String']['output']>;\n  readonly buttonType: Maybe<Scalars['String']['output']>;\n  readonly image: Maybe<ImageType>;\n  readonly iconName: Maybe<Scalars['String']['output']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/button) */\nexport type ButtonLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/button) */\nexport type ButtonContentfulDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/button) */\nexport type ButtonTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/button) */\nexport type ButtonUrlArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/button) */\nexport type ButtonSizeArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/button) */\nexport type ButtonThemeArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/button) */\nexport type ButtonButtonTypeArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/button) */\nexport type ButtonImageArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<ImageFilterType>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/button) */\nexport type ButtonIconNameArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type ButtonLinkingCollectionsType = {\n  readonly __typename?: 'ButtonLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly callToActionCollection: Maybe<CallToActionCollectionType>;\n};\n\n\nexport type ButtonLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type ButtonLinkingCollectionsCallToActionCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<ButtonLinkingCollectionsCallToActionCollectionOrderType>>>;\n};\n\nexport type CallToActionCollectionType = {\n  readonly __typename?: 'CallToActionCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<CallToActionType>>;\n};\n\nexport enum ButtonLinkingCollectionsCallToActionCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type ButtonTitleType = {\n  readonly __typename?: 'ButtonTitle';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: ButtonTitleLinksType;\n};\n\nexport type ButtonTitleLinksType = {\n  readonly __typename?: 'ButtonTitleLinks';\n  readonly entries: ButtonTitleEntriesType;\n  readonly assets: ButtonTitleAssetsType;\n  readonly resources: ButtonTitleResourcesType;\n};\n\nexport type ButtonTitleEntriesType = {\n  readonly __typename?: 'ButtonTitleEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type ButtonTitleAssetsType = {\n  readonly __typename?: 'ButtonTitleAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type ButtonTitleResourcesType = {\n  readonly __typename?: 'ButtonTitleResources';\n  readonly block: ReadonlyArray<ButtonTitleResourcesBlockType>;\n  readonly inline: ReadonlyArray<ButtonTitleResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<ButtonTitleResourcesHyperlinkType>;\n};\n\nexport type ButtonTitleResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'ButtonTitleResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type ResourceLinkType = {\n  readonly sys: ResourceSysType;\n};\n\nexport type ResourceSysType = {\n  readonly __typename?: 'ResourceSys';\n  readonly urn: Scalars['String']['output'];\n  readonly linkType: Scalars['String']['output'];\n};\n\nexport type ButtonTitleResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'ButtonTitleResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type ButtonTitleResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'ButtonTitleResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type ImageFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly media_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly wrap_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly wrap: InputMaybe<Scalars['String']['input']>;\n  readonly wrap_not: InputMaybe<Scalars['String']['input']>;\n  readonly wrap_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly wrap_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly wrap_contains: InputMaybe<Scalars['String']['input']>;\n  readonly wrap_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<ImageFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<ImageFilterType>>>;\n};\n\nexport type CallToActionFilterType = {\n  readonly analytics: InputMaybe<CfAnalyticsNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly presentation_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly analytics_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url: InputMaybe<Scalars['String']['input']>;\n  readonly url_not: InputMaybe<Scalars['String']['input']>;\n  readonly url_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CallToActionFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CallToActionFilterType>>>;\n};\n\nexport type CfAnalyticsNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly label_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly label: InputMaybe<Scalars['String']['input']>;\n  readonly label_not: InputMaybe<Scalars['String']['input']>;\n  readonly label_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly label_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly label_contains: InputMaybe<Scalars['String']['input']>;\n  readonly label_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfAnalyticsNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfAnalyticsNestedFilterType>>>;\n};\n\nexport type GlobalNavHighlightCardContentType = {\n  readonly __typename?: 'GlobalNavHighlightCardContent';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: GlobalNavHighlightCardContentLinksType;\n};\n\nexport type GlobalNavHighlightCardContentLinksType = {\n  readonly __typename?: 'GlobalNavHighlightCardContentLinks';\n  readonly entries: GlobalNavHighlightCardContentEntriesType;\n  readonly assets: GlobalNavHighlightCardContentAssetsType;\n  readonly resources: GlobalNavHighlightCardContentResourcesType;\n};\n\nexport type GlobalNavHighlightCardContentEntriesType = {\n  readonly __typename?: 'GlobalNavHighlightCardContentEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type GlobalNavHighlightCardContentAssetsType = {\n  readonly __typename?: 'GlobalNavHighlightCardContentAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type GlobalNavHighlightCardContentResourcesType = {\n  readonly __typename?: 'GlobalNavHighlightCardContentResources';\n  readonly block: ReadonlyArray<GlobalNavHighlightCardContentResourcesBlockType>;\n  readonly inline: ReadonlyArray<GlobalNavHighlightCardContentResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<GlobalNavHighlightCardContentResourcesHyperlinkType>;\n};\n\nexport type GlobalNavHighlightCardContentResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'GlobalNavHighlightCardContentResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type GlobalNavHighlightCardContentResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'GlobalNavHighlightCardContentResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type GlobalNavHighlightCardContentResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'GlobalNavHighlightCardContentResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type GlobalNavHighlightCardTitleType = {\n  readonly __typename?: 'GlobalNavHighlightCardTitle';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: GlobalNavHighlightCardTitleLinksType;\n};\n\nexport type GlobalNavHighlightCardTitleLinksType = {\n  readonly __typename?: 'GlobalNavHighlightCardTitleLinks';\n  readonly entries: GlobalNavHighlightCardTitleEntriesType;\n  readonly assets: GlobalNavHighlightCardTitleAssetsType;\n  readonly resources: GlobalNavHighlightCardTitleResourcesType;\n};\n\nexport type GlobalNavHighlightCardTitleEntriesType = {\n  readonly __typename?: 'GlobalNavHighlightCardTitleEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type GlobalNavHighlightCardTitleAssetsType = {\n  readonly __typename?: 'GlobalNavHighlightCardTitleAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type GlobalNavHighlightCardTitleResourcesType = {\n  readonly __typename?: 'GlobalNavHighlightCardTitleResources';\n  readonly block: ReadonlyArray<GlobalNavHighlightCardTitleResourcesBlockType>;\n  readonly inline: ReadonlyArray<GlobalNavHighlightCardTitleResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<GlobalNavHighlightCardTitleResourcesHyperlinkType>;\n};\n\nexport type GlobalNavHighlightCardTitleResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'GlobalNavHighlightCardTitleResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type GlobalNavHighlightCardTitleResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'GlobalNavHighlightCardTitleResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type GlobalNavHighlightCardTitleResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'GlobalNavHighlightCardTitleResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type GlobalNavHighlightCardBodyType = {\n  readonly __typename?: 'GlobalNavHighlightCardBody';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: GlobalNavHighlightCardBodyLinksType;\n};\n\nexport type GlobalNavHighlightCardBodyLinksType = {\n  readonly __typename?: 'GlobalNavHighlightCardBodyLinks';\n  readonly entries: GlobalNavHighlightCardBodyEntriesType;\n  readonly assets: GlobalNavHighlightCardBodyAssetsType;\n  readonly resources: GlobalNavHighlightCardBodyResourcesType;\n};\n\nexport type GlobalNavHighlightCardBodyEntriesType = {\n  readonly __typename?: 'GlobalNavHighlightCardBodyEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type GlobalNavHighlightCardBodyAssetsType = {\n  readonly __typename?: 'GlobalNavHighlightCardBodyAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type GlobalNavHighlightCardBodyResourcesType = {\n  readonly __typename?: 'GlobalNavHighlightCardBodyResources';\n  readonly block: ReadonlyArray<GlobalNavHighlightCardBodyResourcesBlockType>;\n  readonly inline: ReadonlyArray<GlobalNavHighlightCardBodyResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<GlobalNavHighlightCardBodyResourcesHyperlinkType>;\n};\n\nexport type GlobalNavHighlightCardBodyResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'GlobalNavHighlightCardBodyResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type GlobalNavHighlightCardBodyResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'GlobalNavHighlightCardBodyResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type GlobalNavHighlightCardBodyResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'GlobalNavHighlightCardBodyResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type GlobalNavHighlightFilterType = {\n  readonly cta: InputMaybe<CfCallToActionNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cta_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly background_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardTitleV2_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardTitleV2: InputMaybe<Scalars['String']['input']>;\n  readonly cardTitleV2_not: InputMaybe<Scalars['String']['input']>;\n  readonly cardTitleV2_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly cardTitleV2_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly cardTitleV2_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardTitleV2_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardBodyV2_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardBodyV2: InputMaybe<Scalars['String']['input']>;\n  readonly cardBodyV2_not: InputMaybe<Scalars['String']['input']>;\n  readonly cardBodyV2_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly cardBodyV2_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly cardBodyV2_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardBodyV2_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardContent_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardContent_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardContent_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardTitle_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardTitle_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardTitle_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardBody_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cardBody_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cardBody_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavHighlightFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavHighlightFilterType>>>;\n};\n\nexport type CfCallToActionNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly presentation_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly analytics_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url: InputMaybe<Scalars['String']['input']>;\n  readonly url_not: InputMaybe<Scalars['String']['input']>;\n  readonly url_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfCallToActionNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfCallToActionNestedFilterType>>>;\n};\n\nexport type GlobalNavItemsCollectionType = {\n  readonly __typename?: 'GlobalNavItemsCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<GlobalNavItemType>>;\n};\n\nexport type GlobalNavItemFilterType = {\n  readonly analytics: InputMaybe<CfAnalyticsNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url: InputMaybe<Scalars['String']['input']>;\n  readonly url_not: InputMaybe<Scalars['String']['input']>;\n  readonly url_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly analytics_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideHostnameRegex_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideHostnameRegex: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_not: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideHostnameRegex_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideHostnameRegex_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavItemFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavItemFilterType>>>;\n};\n\nexport enum GlobalNavItemsCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  HideHostnameRegexAscType = 'hideHostnameRegex_ASC',\n  HideHostnameRegexDescType = 'hideHostnameRegex_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum GlobalNavItemLinkingCollectionsGlobalNavCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  PrimaryHostnameRegexAscType = 'primaryHostnameRegex_ASC',\n  PrimaryHostnameRegexDescType = 'primaryHostnameRegex_DESC',\n  HideHostnameRegexAscType = 'hideHostnameRegex_ASC',\n  HideHostnameRegexDescType = 'hideHostnameRegex_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum AnalyticsLinkingCollectionsGlobalNavItemCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  HideHostnameRegexAscType = 'hideHostnameRegex_ASC',\n  HideHostnameRegexDescType = 'hideHostnameRegex_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum AnalyticsLinkingCollectionsCallToActionCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterItemCollectionType = {\n  readonly __typename?: 'FooterItemCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterItemType>>;\n};\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItem) */\nexport type FooterItemType = EntryType & _NodeType & {\n  readonly __typename?: 'FooterItem';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<FooterItemLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly url: Maybe<Scalars['String']['output']>;\n  readonly analytics: Maybe<AnalyticsType>;\n  readonly footerItemsCollection: Maybe<FooterItemFooterItemsCollectionType>;\n  readonly globalOnly: Maybe<Scalars['Boolean']['output']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItem) */\nexport type FooterItemLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItem) */\nexport type FooterItemTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItem) */\nexport type FooterItemUrlArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItem) */\nexport type FooterItemAnalyticsArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<AnalyticsFilterType>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItem) */\nexport type FooterItemFooterItemsCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterItemFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterItemFooterItemsCollectionOrderType>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerItem) */\nexport type FooterItemGlobalOnlyArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type FooterItemLinkingCollectionsType = {\n  readonly __typename?: 'FooterItemLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly footerCollection: Maybe<FooterCollectionType>;\n  readonly footerItemCollection: Maybe<FooterItemCollectionType>;\n};\n\n\nexport type FooterItemLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type FooterItemLinkingCollectionsFooterCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterItemLinkingCollectionsFooterCollectionOrderType>>>;\n};\n\n\nexport type FooterItemLinkingCollectionsFooterItemCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterItemLinkingCollectionsFooterItemCollectionOrderType>>>;\n};\n\nexport type FooterCollectionType = {\n  readonly __typename?: 'FooterCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterType>>;\n};\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footer) */\nexport type FooterType = EntryType & _NodeType & {\n  readonly __typename?: 'Footer';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<FooterLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly footerColumnCollection: Maybe<FooterFooterColumnCollectionType>;\n  readonly footerBarCollection: Maybe<FooterFooterBarCollectionType>;\n  readonly globalOnly: Maybe<Scalars['Boolean']['output']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footer) */\nexport type FooterLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footer) */\nexport type FooterTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footer) */\nexport type FooterFooterColumnCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterItemFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterFooterColumnCollectionOrderType>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footer) */\nexport type FooterFooterBarCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<FooterItemFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterFooterBarCollectionOrderType>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footer) */\nexport type FooterGlobalOnlyArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type FooterLinkingCollectionsType = {\n  readonly __typename?: 'FooterLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n};\n\n\nexport type FooterLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type FooterFooterColumnCollectionType = {\n  readonly __typename?: 'FooterFooterColumnCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterItemType>>;\n};\n\nexport type FooterItemFilterType = {\n  readonly analytics: InputMaybe<CfAnalyticsNestedFilterType>;\n  readonly footerItems: InputMaybe<CfFooterItemNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url: InputMaybe<Scalars['String']['input']>;\n  readonly url_not: InputMaybe<Scalars['String']['input']>;\n  readonly url_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly analytics_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly footerItemsCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalOnly_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalOnly: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalOnly_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<FooterItemFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<FooterItemFilterType>>>;\n};\n\nexport type CfFooterItemNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url: InputMaybe<Scalars['String']['input']>;\n  readonly url_not: InputMaybe<Scalars['String']['input']>;\n  readonly url_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly analytics_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly footerItemsCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalOnly_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalOnly: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalOnly_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfFooterItemNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfFooterItemNestedFilterType>>>;\n};\n\nexport enum FooterFooterColumnCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  GlobalOnlyAscType = 'globalOnly_ASC',\n  GlobalOnlyDescType = 'globalOnly_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterFooterBarCollectionType = {\n  readonly __typename?: 'FooterFooterBarCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterItemType>>;\n};\n\nexport enum FooterFooterBarCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  GlobalOnlyAscType = 'globalOnly_ASC',\n  GlobalOnlyDescType = 'globalOnly_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum FooterItemLinkingCollectionsFooterCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GlobalOnlyAscType = 'globalOnly_ASC',\n  GlobalOnlyDescType = 'globalOnly_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum FooterItemLinkingCollectionsFooterItemCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  GlobalOnlyAscType = 'globalOnly_ASC',\n  GlobalOnlyDescType = 'globalOnly_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterItemFooterItemsCollectionType = {\n  readonly __typename?: 'FooterItemFooterItemsCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterItemType>>;\n};\n\nexport enum FooterItemFooterItemsCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  GlobalOnlyAscType = 'globalOnly_ASC',\n  GlobalOnlyDescType = 'globalOnly_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum AnalyticsLinkingCollectionsFooterItemCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  GlobalOnlyAscType = 'globalOnly_ASC',\n  GlobalOnlyDescType = 'globalOnly_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\n/** Footer Locale Dropdown model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerLocaleDropdown) */\nexport type FooterLocaleDropdownType = EntryType & _NodeType & {\n  readonly __typename?: 'FooterLocaleDropdown';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<FooterLocaleDropdownLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly contentfulDescription: Maybe<Scalars['String']['output']>;\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly hideOnDomains: Maybe<ReadonlyArray<Maybe<Scalars['String']['output']>>>;\n};\n\n\n/** Footer Locale Dropdown model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerLocaleDropdown) */\nexport type FooterLocaleDropdownLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** Footer Locale Dropdown model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerLocaleDropdown) */\nexport type FooterLocaleDropdownContentfulDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Footer Locale Dropdown model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerLocaleDropdown) */\nexport type FooterLocaleDropdownTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Footer Locale Dropdown model [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/footerLocaleDropdown) */\nexport type FooterLocaleDropdownHideOnDomainsArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type FooterLocaleDropdownLinkingCollectionsType = {\n  readonly __typename?: 'FooterLocaleDropdownLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly footerGroupCollection: Maybe<FooterGroupCollectionType>;\n};\n\n\nexport type FooterLocaleDropdownLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type FooterLocaleDropdownLinkingCollectionsFooterGroupCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<FooterLocaleDropdownLinkingCollectionsFooterGroupCollectionOrderType>>>;\n};\n\nexport enum FooterLocaleDropdownLinkingCollectionsFooterGroupCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterGroupItemsFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideOnDomains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideOnDomains_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<FooterGroupItemsFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<FooterGroupItemsFilterType>>>;\n};\n\nexport type FooterGroupFilterType = {\n  readonly items: InputMaybe<CfitemsMultiTypeNestedFilterType>;\n  readonly analytics: InputMaybe<CfAnalyticsNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly groupKey: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_not: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly groupKey_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly groupKey_contains: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly itemsCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly analytics_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideOnDomains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideOnDomains_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<FooterGroupFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<FooterGroupFilterType>>>;\n};\n\nexport type CfitemsMultiTypeNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideOnDomains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideOnDomains_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfitemsMultiTypeNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfitemsMultiTypeNestedFilterType>>>;\n};\n\nexport enum FooterV3ColumnsCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterV3BarCollectionType = {\n  readonly __typename?: 'FooterV3BarCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterGroupType>>;\n};\n\nexport enum FooterV3BarCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum ImageLinkingCollectionsFooterV3CollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type ButtonCollectionType = {\n  readonly __typename?: 'ButtonCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<ButtonType>>;\n};\n\nexport enum ImageLinkingCollectionsButtonCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SizeAscType = 'size_ASC',\n  SizeDescType = 'size_DESC',\n  ThemeAscType = 'theme_ASC',\n  ThemeDescType = 'theme_DESC',\n  ButtonTypeAscType = 'buttonType_ASC',\n  ButtonTypeDescType = 'buttonType_DESC',\n  IconNameAscType = 'iconName_ASC',\n  IconNameDescType = 'iconName_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type CookieBannerCollectionType = {\n  readonly __typename?: 'CookieBannerCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<CookieBannerType>>;\n};\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieBanner) */\nexport type CookieBannerType = EntryType & _NodeType & {\n  readonly __typename?: 'CookieBanner';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<CookieBannerLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly leftMedia: Maybe<AssetType>;\n  readonly rightMedia: Maybe<AssetType>;\n  readonly body: Maybe<CookieBannerBodyType>;\n  readonly acceptCookiesButton: Maybe<Scalars['String']['output']>;\n  readonly cookieSettingsButtonText: Maybe<Scalars['String']['output']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieBanner) */\nexport type CookieBannerLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieBanner) */\nexport type CookieBannerTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieBanner) */\nexport type CookieBannerLeftMediaArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieBanner) */\nexport type CookieBannerRightMediaArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieBanner) */\nexport type CookieBannerBodyArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieBanner) */\nexport type CookieBannerAcceptCookiesButtonArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieBanner) */\nexport type CookieBannerCookieSettingsButtonTextArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type CookieBannerLinkingCollectionsType = {\n  readonly __typename?: 'CookieBannerLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n};\n\n\nexport type CookieBannerLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type CookieBannerBodyType = {\n  readonly __typename?: 'CookieBannerBody';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: CookieBannerBodyLinksType;\n};\n\nexport type CookieBannerBodyLinksType = {\n  readonly __typename?: 'CookieBannerBodyLinks';\n  readonly entries: CookieBannerBodyEntriesType;\n  readonly assets: CookieBannerBodyAssetsType;\n  readonly resources: CookieBannerBodyResourcesType;\n};\n\nexport type CookieBannerBodyEntriesType = {\n  readonly __typename?: 'CookieBannerBodyEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type CookieBannerBodyAssetsType = {\n  readonly __typename?: 'CookieBannerBodyAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type CookieBannerBodyResourcesType = {\n  readonly __typename?: 'CookieBannerBodyResources';\n  readonly block: ReadonlyArray<CookieBannerBodyResourcesBlockType>;\n  readonly inline: ReadonlyArray<CookieBannerBodyResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<CookieBannerBodyResourcesHyperlinkType>;\n};\n\nexport type CookieBannerBodyResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'CookieBannerBodyResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type CookieBannerBodyResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'CookieBannerBodyResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type CookieBannerBodyResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'CookieBannerBodyResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type VideoCollectionType = {\n  readonly __typename?: 'VideoCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<VideoType>>;\n};\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/video) */\nexport type VideoType = EntryType & _NodeType & {\n  readonly __typename?: 'Video';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<VideoLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly contentfulDescription: Maybe<Scalars['String']['output']>;\n  readonly media: Maybe<AssetType>;\n  readonly thumbnailMedia: Maybe<AssetType>;\n  readonly autoPlay: Maybe<Scalars['Boolean']['output']>;\n  readonly wrap: Maybe<Scalars['String']['output']>;\n  readonly captions: Maybe<AssetType>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/video) */\nexport type VideoLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/video) */\nexport type VideoContentfulDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/video) */\nexport type VideoMediaArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/video) */\nexport type VideoThumbnailMediaArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/video) */\nexport type VideoAutoPlayArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/video) */\nexport type VideoWrapArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/video) */\nexport type VideoCaptionsArgsType = {\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type VideoLinkingCollectionsType = {\n  readonly __typename?: 'VideoLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n};\n\n\nexport type VideoLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type AssetCollectionType = {\n  readonly __typename?: 'AssetCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type AssetFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly description_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly description: InputMaybe<Scalars['String']['input']>;\n  readonly description_not: InputMaybe<Scalars['String']['input']>;\n  readonly description_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly description_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly description_contains: InputMaybe<Scalars['String']['input']>;\n  readonly description_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url: InputMaybe<Scalars['String']['input']>;\n  readonly url_not: InputMaybe<Scalars['String']['input']>;\n  readonly url_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly size_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly size: InputMaybe<Scalars['Int']['input']>;\n  readonly size_not: InputMaybe<Scalars['Int']['input']>;\n  readonly size_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['Int']['input']>>>;\n  readonly size_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['Int']['input']>>>;\n  readonly size_gt: InputMaybe<Scalars['Int']['input']>;\n  readonly size_gte: InputMaybe<Scalars['Int']['input']>;\n  readonly size_lt: InputMaybe<Scalars['Int']['input']>;\n  readonly size_lte: InputMaybe<Scalars['Int']['input']>;\n  readonly contentType_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentType: InputMaybe<Scalars['String']['input']>;\n  readonly contentType_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentType_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentType_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentType_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentType_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly fileName_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly fileName: InputMaybe<Scalars['String']['input']>;\n  readonly fileName_not: InputMaybe<Scalars['String']['input']>;\n  readonly fileName_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly fileName_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly fileName_contains: InputMaybe<Scalars['String']['input']>;\n  readonly fileName_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly width_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly width: InputMaybe<Scalars['Int']['input']>;\n  readonly width_not: InputMaybe<Scalars['Int']['input']>;\n  readonly width_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['Int']['input']>>>;\n  readonly width_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['Int']['input']>>>;\n  readonly width_gt: InputMaybe<Scalars['Int']['input']>;\n  readonly width_gte: InputMaybe<Scalars['Int']['input']>;\n  readonly width_lt: InputMaybe<Scalars['Int']['input']>;\n  readonly width_lte: InputMaybe<Scalars['Int']['input']>;\n  readonly height_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly height: InputMaybe<Scalars['Int']['input']>;\n  readonly height_not: InputMaybe<Scalars['Int']['input']>;\n  readonly height_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['Int']['input']>>>;\n  readonly height_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['Int']['input']>>>;\n  readonly height_gt: InputMaybe<Scalars['Int']['input']>;\n  readonly height_gte: InputMaybe<Scalars['Int']['input']>;\n  readonly height_lt: InputMaybe<Scalars['Int']['input']>;\n  readonly height_lte: InputMaybe<Scalars['Int']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<AssetFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<AssetFilterType>>>;\n};\n\nexport enum AssetOrderType {\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SizeAscType = 'size_ASC',\n  SizeDescType = 'size_DESC',\n  ContentTypeAscType = 'contentType_ASC',\n  ContentTypeDescType = 'contentType_DESC',\n  FileNameAscType = 'fileName_ASC',\n  FileNameDescType = 'fileName_DESC',\n  WidthAscType = 'width_ASC',\n  WidthDescType = 'width_DESC',\n  HeightAscType = 'height_ASC',\n  HeightDescType = 'height_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type GlobalNavConfigFilterType = {\n  readonly globalNavGroups: InputMaybe<CfGlobalNavNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly globalNavGroupsCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalNavLabel_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalNavLabel: InputMaybe<Scalars['String']['input']>;\n  readonly globalNavLabel_not: InputMaybe<Scalars['String']['input']>;\n  readonly globalNavLabel_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly globalNavLabel_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly globalNavLabel_contains: InputMaybe<Scalars['String']['input']>;\n  readonly globalNavLabel_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly globalNavButtonAriaLabel_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalNavButtonAriaLabel: InputMaybe<Scalars['String']['input']>;\n  readonly globalNavButtonAriaLabel_not: InputMaybe<Scalars['String']['input']>;\n  readonly globalNavButtonAriaLabel_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly globalNavButtonAriaLabel_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly globalNavButtonAriaLabel_contains: InputMaybe<Scalars['String']['input']>;\n  readonly globalNavButtonAriaLabel_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavConfigFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<GlobalNavConfigFilterType>>>;\n};\n\nexport type CfGlobalNavNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly groupKey: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_not: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly groupKey_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly groupKey_contains: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly highlight_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly itemsCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly primaryHostnameRegex_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly primaryHostnameRegex: InputMaybe<Scalars['String']['input']>;\n  readonly primaryHostnameRegex_not: InputMaybe<Scalars['String']['input']>;\n  readonly primaryHostnameRegex_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly primaryHostnameRegex_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly primaryHostnameRegex_contains: InputMaybe<Scalars['String']['input']>;\n  readonly primaryHostnameRegex_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideHostnameRegex: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_not: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideHostnameRegex_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideHostnameRegex_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideHostnameRegex_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfGlobalNavNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfGlobalNavNestedFilterType>>>;\n};\n\nexport enum GlobalNavConfigOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GlobalNavLabelAscType = 'globalNavLabel_ASC',\n  GlobalNavLabelDescType = 'globalNavLabel_DESC',\n  GlobalNavButtonAriaLabelAscType = 'globalNavButtonAriaLabel_ASC',\n  GlobalNavButtonAriaLabelDescType = 'globalNavButtonAriaLabel_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalType = EntryType & _NodeType & {\n  readonly __typename?: 'CookieModal';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<CookieModalLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly contentfulDescription: Maybe<Scalars['String']['output']>;\n  readonly landingScreenTitle: Maybe<Scalars['String']['output']>;\n  readonly content: Maybe<CookieModalContentType>;\n  readonly acceptAllButtonText: Maybe<Scalars['String']['output']>;\n  readonly essentialOnlyButtonText: Maybe<Scalars['String']['output']>;\n  readonly settingsButtonText: Maybe<Scalars['String']['output']>;\n  readonly settingsScreenTitle: Maybe<Scalars['String']['output']>;\n  readonly acceptSelectedButtonText: Maybe<Scalars['String']['output']>;\n  readonly saveChangesText: Maybe<Scalars['String']['output']>;\n  readonly changesSavedText: Maybe<Scalars['String']['output']>;\n  readonly toggleEnabledText: Maybe<Scalars['String']['output']>;\n  readonly toggleDisabledText: Maybe<Scalars['String']['output']>;\n  readonly cookieCategoriesCollection: Maybe<CookieModalCookieCategoriesCollectionType>;\n  readonly gpcLocations: Maybe<ReadonlyArray<Maybe<Scalars['String']['output']>>>;\n  readonly enableCookieDeletion: Maybe<Scalars['Boolean']['output']>;\n  readonly logCookieDeletion: Maybe<Scalars['Boolean']['output']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalContentfulDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalLandingScreenTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalContentArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalAcceptAllButtonTextArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalEssentialOnlyButtonTextArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalSettingsButtonTextArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalSettingsScreenTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalAcceptSelectedButtonTextArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalSaveChangesTextArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalChangesSavedTextArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalToggleEnabledTextArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalToggleDisabledTextArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalCookieCategoriesCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<CookieCategoryFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<CookieModalCookieCategoriesCollectionOrderType>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalGpcLocationsArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalEnableCookieDeletionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieModal) */\nexport type CookieModalLogCookieDeletionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type CookieModalLinkingCollectionsType = {\n  readonly __typename?: 'CookieModalLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n};\n\n\nexport type CookieModalLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type CookieModalContentType = {\n  readonly __typename?: 'CookieModalContent';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: CookieModalContentLinksType;\n};\n\nexport type CookieModalContentLinksType = {\n  readonly __typename?: 'CookieModalContentLinks';\n  readonly entries: CookieModalContentEntriesType;\n  readonly assets: CookieModalContentAssetsType;\n  readonly resources: CookieModalContentResourcesType;\n};\n\nexport type CookieModalContentEntriesType = {\n  readonly __typename?: 'CookieModalContentEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type CookieModalContentAssetsType = {\n  readonly __typename?: 'CookieModalContentAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type CookieModalContentResourcesType = {\n  readonly __typename?: 'CookieModalContentResources';\n  readonly block: ReadonlyArray<CookieModalContentResourcesBlockType>;\n  readonly inline: ReadonlyArray<CookieModalContentResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<CookieModalContentResourcesHyperlinkType>;\n};\n\nexport type CookieModalContentResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'CookieModalContentResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type CookieModalContentResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'CookieModalContentResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type CookieModalContentResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'CookieModalContentResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type CookieModalCookieCategoriesCollectionType = {\n  readonly __typename?: 'CookieModalCookieCategoriesCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<CookieCategoryType>>;\n};\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieCategory) */\nexport type CookieCategoryType = EntryType & _NodeType & {\n  readonly __typename?: 'CookieCategory';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<CookieCategoryLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly description: Maybe<CookieCategoryDescriptionType>;\n  readonly categoryCookieName: Maybe<Scalars['String']['output']>;\n  readonly displayMode: Maybe<Scalars['String']['output']>;\n  readonly isEssential: Maybe<Scalars['Boolean']['output']>;\n  readonly enableToggle: Maybe<Scalars['Boolean']['output']>;\n  readonly cookiesCollection: Maybe<CookieCategoryCookiesCollectionType>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieCategory) */\nexport type CookieCategoryLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieCategory) */\nexport type CookieCategoryTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieCategory) */\nexport type CookieCategoryDescriptionArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieCategory) */\nexport type CookieCategoryCategoryCookieNameArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieCategory) */\nexport type CookieCategoryDisplayModeArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieCategory) */\nexport type CookieCategoryIsEssentialArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieCategory) */\nexport type CookieCategoryEnableToggleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/cookieCategory) */\nexport type CookieCategoryCookiesCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  where: InputMaybe<TrackingCookieFilterType>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<CookieCategoryCookiesCollectionOrderType>>>;\n};\n\nexport type CookieCategoryLinkingCollectionsType = {\n  readonly __typename?: 'CookieCategoryLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly cookieModalCollection: Maybe<CookieModalCollectionType>;\n};\n\n\nexport type CookieCategoryLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type CookieCategoryLinkingCollectionsCookieModalCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<CookieCategoryLinkingCollectionsCookieModalCollectionOrderType>>>;\n};\n\nexport type CookieModalCollectionType = {\n  readonly __typename?: 'CookieModalCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<CookieModalType>>;\n};\n\nexport enum CookieCategoryLinkingCollectionsCookieModalCollectionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  LandingScreenTitleAscType = 'landingScreenTitle_ASC',\n  LandingScreenTitleDescType = 'landingScreenTitle_DESC',\n  AcceptAllButtonTextAscType = 'acceptAllButtonText_ASC',\n  AcceptAllButtonTextDescType = 'acceptAllButtonText_DESC',\n  EssentialOnlyButtonTextAscType = 'essentialOnlyButtonText_ASC',\n  EssentialOnlyButtonTextDescType = 'essentialOnlyButtonText_DESC',\n  SettingsButtonTextAscType = 'settingsButtonText_ASC',\n  SettingsButtonTextDescType = 'settingsButtonText_DESC',\n  SettingsScreenTitleAscType = 'settingsScreenTitle_ASC',\n  SettingsScreenTitleDescType = 'settingsScreenTitle_DESC',\n  AcceptSelectedButtonTextAscType = 'acceptSelectedButtonText_ASC',\n  AcceptSelectedButtonTextDescType = 'acceptSelectedButtonText_DESC',\n  SaveChangesTextAscType = 'saveChangesText_ASC',\n  SaveChangesTextDescType = 'saveChangesText_DESC',\n  ChangesSavedTextAscType = 'changesSavedText_ASC',\n  ChangesSavedTextDescType = 'changesSavedText_DESC',\n  ToggleEnabledTextAscType = 'toggleEnabledText_ASC',\n  ToggleEnabledTextDescType = 'toggleEnabledText_DESC',\n  ToggleDisabledTextAscType = 'toggleDisabledText_ASC',\n  ToggleDisabledTextDescType = 'toggleDisabledText_DESC',\n  EnableCookieDeletionAscType = 'enableCookieDeletion_ASC',\n  EnableCookieDeletionDescType = 'enableCookieDeletion_DESC',\n  LogCookieDeletionAscType = 'logCookieDeletion_ASC',\n  LogCookieDeletionDescType = 'logCookieDeletion_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type CookieCategoryDescriptionType = {\n  readonly __typename?: 'CookieCategoryDescription';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: CookieCategoryDescriptionLinksType;\n};\n\nexport type CookieCategoryDescriptionLinksType = {\n  readonly __typename?: 'CookieCategoryDescriptionLinks';\n  readonly entries: CookieCategoryDescriptionEntriesType;\n  readonly assets: CookieCategoryDescriptionAssetsType;\n  readonly resources: CookieCategoryDescriptionResourcesType;\n};\n\nexport type CookieCategoryDescriptionEntriesType = {\n  readonly __typename?: 'CookieCategoryDescriptionEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type CookieCategoryDescriptionAssetsType = {\n  readonly __typename?: 'CookieCategoryDescriptionAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type CookieCategoryDescriptionResourcesType = {\n  readonly __typename?: 'CookieCategoryDescriptionResources';\n  readonly block: ReadonlyArray<CookieCategoryDescriptionResourcesBlockType>;\n  readonly inline: ReadonlyArray<CookieCategoryDescriptionResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<CookieCategoryDescriptionResourcesHyperlinkType>;\n};\n\nexport type CookieCategoryDescriptionResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'CookieCategoryDescriptionResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type CookieCategoryDescriptionResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'CookieCategoryDescriptionResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type CookieCategoryDescriptionResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'CookieCategoryDescriptionResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type CookieCategoryCookiesCollectionType = {\n  readonly __typename?: 'CookieCategoryCookiesCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<TrackingCookieType>>;\n};\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookieType = EntryType & _NodeType & {\n  readonly __typename?: 'TrackingCookie';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<TrackingCookieLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly name: Maybe<Scalars['String']['output']>;\n  readonly provider: Maybe<TrackingCookieProviderType>;\n  readonly domains: Maybe<TrackingCookieDomainsType>;\n  readonly purpose: Maybe<TrackingCookiePurposeType>;\n  readonly expiration: Maybe<TrackingCookieExpirationType>;\n  readonly pattern: Maybe<Scalars['String']['output']>;\n  readonly subDomains: Maybe<ReadonlyArray<Maybe<Scalars['String']['output']>>>;\n  readonly path: Maybe<Scalars['String']['output']>;\n  readonly secure: Maybe<Scalars['Boolean']['output']>;\n  readonly sameSite: Maybe<Scalars['String']['output']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookieLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookieNameArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookieProviderArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookieDomainsArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookiePurposeArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookieExpirationArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookiePatternArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookieSubDomainsArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookiePathArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookieSecureArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/trackingCookie) */\nexport type TrackingCookieSameSiteArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type TrackingCookieLinkingCollectionsType = {\n  readonly __typename?: 'TrackingCookieLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n  readonly cookieCategoryCollection: Maybe<CookieCategoryCollectionType>;\n};\n\n\nexport type TrackingCookieLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type TrackingCookieLinkingCollectionsCookieCategoryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n  order: InputMaybe<ReadonlyArray<InputMaybe<TrackingCookieLinkingCollectionsCookieCategoryCollectionOrderType>>>;\n};\n\nexport type CookieCategoryCollectionType = {\n  readonly __typename?: 'CookieCategoryCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<CookieCategoryType>>;\n};\n\nexport enum TrackingCookieLinkingCollectionsCookieCategoryCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  CategoryCookieNameAscType = 'categoryCookieName_ASC',\n  CategoryCookieNameDescType = 'categoryCookieName_DESC',\n  DisplayModeAscType = 'displayMode_ASC',\n  DisplayModeDescType = 'displayMode_DESC',\n  IsEssentialAscType = 'isEssential_ASC',\n  IsEssentialDescType = 'isEssential_DESC',\n  EnableToggleAscType = 'enableToggle_ASC',\n  EnableToggleDescType = 'enableToggle_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type TrackingCookieProviderType = {\n  readonly __typename?: 'TrackingCookieProvider';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: TrackingCookieProviderLinksType;\n};\n\nexport type TrackingCookieProviderLinksType = {\n  readonly __typename?: 'TrackingCookieProviderLinks';\n  readonly entries: TrackingCookieProviderEntriesType;\n  readonly assets: TrackingCookieProviderAssetsType;\n  readonly resources: TrackingCookieProviderResourcesType;\n};\n\nexport type TrackingCookieProviderEntriesType = {\n  readonly __typename?: 'TrackingCookieProviderEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type TrackingCookieProviderAssetsType = {\n  readonly __typename?: 'TrackingCookieProviderAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type TrackingCookieProviderResourcesType = {\n  readonly __typename?: 'TrackingCookieProviderResources';\n  readonly block: ReadonlyArray<TrackingCookieProviderResourcesBlockType>;\n  readonly inline: ReadonlyArray<TrackingCookieProviderResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<TrackingCookieProviderResourcesHyperlinkType>;\n};\n\nexport type TrackingCookieProviderResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookieProviderResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookieProviderResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookieProviderResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookieProviderResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookieProviderResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookieDomainsType = {\n  readonly __typename?: 'TrackingCookieDomains';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: TrackingCookieDomainsLinksType;\n};\n\nexport type TrackingCookieDomainsLinksType = {\n  readonly __typename?: 'TrackingCookieDomainsLinks';\n  readonly entries: TrackingCookieDomainsEntriesType;\n  readonly assets: TrackingCookieDomainsAssetsType;\n  readonly resources: TrackingCookieDomainsResourcesType;\n};\n\nexport type TrackingCookieDomainsEntriesType = {\n  readonly __typename?: 'TrackingCookieDomainsEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type TrackingCookieDomainsAssetsType = {\n  readonly __typename?: 'TrackingCookieDomainsAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type TrackingCookieDomainsResourcesType = {\n  readonly __typename?: 'TrackingCookieDomainsResources';\n  readonly block: ReadonlyArray<TrackingCookieDomainsResourcesBlockType>;\n  readonly inline: ReadonlyArray<TrackingCookieDomainsResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<TrackingCookieDomainsResourcesHyperlinkType>;\n};\n\nexport type TrackingCookieDomainsResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookieDomainsResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookieDomainsResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookieDomainsResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookieDomainsResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookieDomainsResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookiePurposeType = {\n  readonly __typename?: 'TrackingCookiePurpose';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: TrackingCookiePurposeLinksType;\n};\n\nexport type TrackingCookiePurposeLinksType = {\n  readonly __typename?: 'TrackingCookiePurposeLinks';\n  readonly entries: TrackingCookiePurposeEntriesType;\n  readonly assets: TrackingCookiePurposeAssetsType;\n  readonly resources: TrackingCookiePurposeResourcesType;\n};\n\nexport type TrackingCookiePurposeEntriesType = {\n  readonly __typename?: 'TrackingCookiePurposeEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type TrackingCookiePurposeAssetsType = {\n  readonly __typename?: 'TrackingCookiePurposeAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type TrackingCookiePurposeResourcesType = {\n  readonly __typename?: 'TrackingCookiePurposeResources';\n  readonly block: ReadonlyArray<TrackingCookiePurposeResourcesBlockType>;\n  readonly inline: ReadonlyArray<TrackingCookiePurposeResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<TrackingCookiePurposeResourcesHyperlinkType>;\n};\n\nexport type TrackingCookiePurposeResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookiePurposeResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookiePurposeResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookiePurposeResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookiePurposeResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookiePurposeResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookieExpirationType = {\n  readonly __typename?: 'TrackingCookieExpiration';\n  readonly json: Scalars['JSON']['output'];\n  readonly links: TrackingCookieExpirationLinksType;\n};\n\nexport type TrackingCookieExpirationLinksType = {\n  readonly __typename?: 'TrackingCookieExpirationLinks';\n  readonly entries: TrackingCookieExpirationEntriesType;\n  readonly assets: TrackingCookieExpirationAssetsType;\n  readonly resources: TrackingCookieExpirationResourcesType;\n};\n\nexport type TrackingCookieExpirationEntriesType = {\n  readonly __typename?: 'TrackingCookieExpirationEntries';\n  readonly inline: ReadonlyArray<Maybe<EntryType>>;\n  readonly hyperlink: ReadonlyArray<Maybe<EntryType>>;\n  readonly block: ReadonlyArray<Maybe<EntryType>>;\n};\n\nexport type TrackingCookieExpirationAssetsType = {\n  readonly __typename?: 'TrackingCookieExpirationAssets';\n  readonly hyperlink: ReadonlyArray<Maybe<AssetType>>;\n  readonly block: ReadonlyArray<Maybe<AssetType>>;\n};\n\nexport type TrackingCookieExpirationResourcesType = {\n  readonly __typename?: 'TrackingCookieExpirationResources';\n  readonly block: ReadonlyArray<TrackingCookieExpirationResourcesBlockType>;\n  readonly inline: ReadonlyArray<TrackingCookieExpirationResourcesInlineType>;\n  readonly hyperlink: ReadonlyArray<TrackingCookieExpirationResourcesHyperlinkType>;\n};\n\nexport type TrackingCookieExpirationResourcesBlockType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookieExpirationResourcesBlock';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookieExpirationResourcesInlineType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookieExpirationResourcesInline';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookieExpirationResourcesHyperlinkType = ResourceLinkType & {\n  readonly __typename?: 'TrackingCookieExpirationResourcesHyperlink';\n  readonly sys: ResourceSysType;\n};\n\nexport type TrackingCookieFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly name_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly name: InputMaybe<Scalars['String']['input']>;\n  readonly name_not: InputMaybe<Scalars['String']['input']>;\n  readonly name_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly name_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly name_contains: InputMaybe<Scalars['String']['input']>;\n  readonly name_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly provider_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly provider_contains: InputMaybe<Scalars['String']['input']>;\n  readonly provider_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly domains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly domains_contains: InputMaybe<Scalars['String']['input']>;\n  readonly domains_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly purpose_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly purpose_contains: InputMaybe<Scalars['String']['input']>;\n  readonly purpose_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly expiration_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly expiration_contains: InputMaybe<Scalars['String']['input']>;\n  readonly expiration_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly pattern_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly pattern: InputMaybe<Scalars['String']['input']>;\n  readonly pattern_not: InputMaybe<Scalars['String']['input']>;\n  readonly pattern_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly pattern_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly pattern_contains: InputMaybe<Scalars['String']['input']>;\n  readonly pattern_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly subDomains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly subDomains_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly subDomains_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly subDomains_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly path_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly path: InputMaybe<Scalars['String']['input']>;\n  readonly path_not: InputMaybe<Scalars['String']['input']>;\n  readonly path_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly path_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly path_contains: InputMaybe<Scalars['String']['input']>;\n  readonly path_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly secure_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly secure: InputMaybe<Scalars['Boolean']['input']>;\n  readonly secure_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly sameSite_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly sameSite: InputMaybe<Scalars['String']['input']>;\n  readonly sameSite_not: InputMaybe<Scalars['String']['input']>;\n  readonly sameSite_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly sameSite_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly sameSite_contains: InputMaybe<Scalars['String']['input']>;\n  readonly sameSite_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<TrackingCookieFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<TrackingCookieFilterType>>>;\n};\n\nexport enum CookieCategoryCookiesCollectionOrderType {\n  NameAscType = 'name_ASC',\n  NameDescType = 'name_DESC',\n  PatternAscType = 'pattern_ASC',\n  PatternDescType = 'pattern_DESC',\n  PathAscType = 'path_ASC',\n  PathDescType = 'path_DESC',\n  SecureAscType = 'secure_ASC',\n  SecureDescType = 'secure_DESC',\n  SameSiteAscType = 'sameSite_ASC',\n  SameSiteDescType = 'sameSite_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type CookieCategoryFilterType = {\n  readonly cookies: InputMaybe<CfTrackingCookieNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly description_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly description_contains: InputMaybe<Scalars['String']['input']>;\n  readonly description_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly categoryCookieName_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly categoryCookieName: InputMaybe<Scalars['String']['input']>;\n  readonly categoryCookieName_not: InputMaybe<Scalars['String']['input']>;\n  readonly categoryCookieName_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly categoryCookieName_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly categoryCookieName_contains: InputMaybe<Scalars['String']['input']>;\n  readonly categoryCookieName_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly displayMode_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly displayMode: InputMaybe<Scalars['String']['input']>;\n  readonly displayMode_not: InputMaybe<Scalars['String']['input']>;\n  readonly displayMode_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly displayMode_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly displayMode_contains: InputMaybe<Scalars['String']['input']>;\n  readonly displayMode_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly isEssential_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly isEssential: InputMaybe<Scalars['Boolean']['input']>;\n  readonly isEssential_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly enableToggle_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly enableToggle: InputMaybe<Scalars['Boolean']['input']>;\n  readonly enableToggle_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cookiesCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CookieCategoryFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CookieCategoryFilterType>>>;\n};\n\nexport type CfTrackingCookieNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly name_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly name: InputMaybe<Scalars['String']['input']>;\n  readonly name_not: InputMaybe<Scalars['String']['input']>;\n  readonly name_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly name_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly name_contains: InputMaybe<Scalars['String']['input']>;\n  readonly name_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly provider_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly provider_contains: InputMaybe<Scalars['String']['input']>;\n  readonly provider_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly domains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly domains_contains: InputMaybe<Scalars['String']['input']>;\n  readonly domains_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly purpose_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly purpose_contains: InputMaybe<Scalars['String']['input']>;\n  readonly purpose_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly expiration_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly expiration_contains: InputMaybe<Scalars['String']['input']>;\n  readonly expiration_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly pattern_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly pattern: InputMaybe<Scalars['String']['input']>;\n  readonly pattern_not: InputMaybe<Scalars['String']['input']>;\n  readonly pattern_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly pattern_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly pattern_contains: InputMaybe<Scalars['String']['input']>;\n  readonly pattern_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly subDomains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly subDomains_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly subDomains_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly subDomains_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly path_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly path: InputMaybe<Scalars['String']['input']>;\n  readonly path_not: InputMaybe<Scalars['String']['input']>;\n  readonly path_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly path_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly path_contains: InputMaybe<Scalars['String']['input']>;\n  readonly path_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly secure_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly secure: InputMaybe<Scalars['Boolean']['input']>;\n  readonly secure_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly sameSite_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly sameSite: InputMaybe<Scalars['String']['input']>;\n  readonly sameSite_not: InputMaybe<Scalars['String']['input']>;\n  readonly sameSite_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly sameSite_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly sameSite_contains: InputMaybe<Scalars['String']['input']>;\n  readonly sameSite_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfTrackingCookieNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfTrackingCookieNestedFilterType>>>;\n};\n\nexport enum CookieModalCookieCategoriesCollectionOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  CategoryCookieNameAscType = 'categoryCookieName_ASC',\n  CategoryCookieNameDescType = 'categoryCookieName_DESC',\n  DisplayModeAscType = 'displayMode_ASC',\n  DisplayModeDescType = 'displayMode_DESC',\n  IsEssentialAscType = 'isEssential_ASC',\n  IsEssentialDescType = 'isEssential_DESC',\n  EnableToggleAscType = 'enableToggle_ASC',\n  EnableToggleDescType = 'enableToggle_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type CookieModalFilterType = {\n  readonly cookieCategories: InputMaybe<CfCookieCategoryNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly landingScreenTitle_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly landingScreenTitle: InputMaybe<Scalars['String']['input']>;\n  readonly landingScreenTitle_not: InputMaybe<Scalars['String']['input']>;\n  readonly landingScreenTitle_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly landingScreenTitle_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly landingScreenTitle_contains: InputMaybe<Scalars['String']['input']>;\n  readonly landingScreenTitle_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly content_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly content_contains: InputMaybe<Scalars['String']['input']>;\n  readonly content_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly acceptAllButtonText_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly acceptAllButtonText: InputMaybe<Scalars['String']['input']>;\n  readonly acceptAllButtonText_not: InputMaybe<Scalars['String']['input']>;\n  readonly acceptAllButtonText_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly acceptAllButtonText_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly acceptAllButtonText_contains: InputMaybe<Scalars['String']['input']>;\n  readonly acceptAllButtonText_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly essentialOnlyButtonText_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly essentialOnlyButtonText: InputMaybe<Scalars['String']['input']>;\n  readonly essentialOnlyButtonText_not: InputMaybe<Scalars['String']['input']>;\n  readonly essentialOnlyButtonText_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly essentialOnlyButtonText_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly essentialOnlyButtonText_contains: InputMaybe<Scalars['String']['input']>;\n  readonly essentialOnlyButtonText_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly settingsButtonText_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly settingsButtonText: InputMaybe<Scalars['String']['input']>;\n  readonly settingsButtonText_not: InputMaybe<Scalars['String']['input']>;\n  readonly settingsButtonText_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly settingsButtonText_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly settingsButtonText_contains: InputMaybe<Scalars['String']['input']>;\n  readonly settingsButtonText_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly settingsScreenTitle_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly settingsScreenTitle: InputMaybe<Scalars['String']['input']>;\n  readonly settingsScreenTitle_not: InputMaybe<Scalars['String']['input']>;\n  readonly settingsScreenTitle_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly settingsScreenTitle_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly settingsScreenTitle_contains: InputMaybe<Scalars['String']['input']>;\n  readonly settingsScreenTitle_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly acceptSelectedButtonText_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly acceptSelectedButtonText: InputMaybe<Scalars['String']['input']>;\n  readonly acceptSelectedButtonText_not: InputMaybe<Scalars['String']['input']>;\n  readonly acceptSelectedButtonText_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly acceptSelectedButtonText_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly acceptSelectedButtonText_contains: InputMaybe<Scalars['String']['input']>;\n  readonly acceptSelectedButtonText_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly saveChangesText_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly saveChangesText: InputMaybe<Scalars['String']['input']>;\n  readonly saveChangesText_not: InputMaybe<Scalars['String']['input']>;\n  readonly saveChangesText_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly saveChangesText_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly saveChangesText_contains: InputMaybe<Scalars['String']['input']>;\n  readonly saveChangesText_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly changesSavedText_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly changesSavedText: InputMaybe<Scalars['String']['input']>;\n  readonly changesSavedText_not: InputMaybe<Scalars['String']['input']>;\n  readonly changesSavedText_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly changesSavedText_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly changesSavedText_contains: InputMaybe<Scalars['String']['input']>;\n  readonly changesSavedText_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly toggleEnabledText_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly toggleEnabledText: InputMaybe<Scalars['String']['input']>;\n  readonly toggleEnabledText_not: InputMaybe<Scalars['String']['input']>;\n  readonly toggleEnabledText_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly toggleEnabledText_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly toggleEnabledText_contains: InputMaybe<Scalars['String']['input']>;\n  readonly toggleEnabledText_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly toggleDisabledText_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly toggleDisabledText: InputMaybe<Scalars['String']['input']>;\n  readonly toggleDisabledText_not: InputMaybe<Scalars['String']['input']>;\n  readonly toggleDisabledText_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly toggleDisabledText_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly toggleDisabledText_contains: InputMaybe<Scalars['String']['input']>;\n  readonly toggleDisabledText_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cookieCategoriesCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly gpcLocations_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly gpcLocations_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly gpcLocations_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly gpcLocations_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly enableCookieDeletion_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly enableCookieDeletion: InputMaybe<Scalars['Boolean']['input']>;\n  readonly enableCookieDeletion_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly logCookieDeletion_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly logCookieDeletion: InputMaybe<Scalars['Boolean']['input']>;\n  readonly logCookieDeletion_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CookieModalFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CookieModalFilterType>>>;\n};\n\nexport type CfCookieCategoryNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly description_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly description_contains: InputMaybe<Scalars['String']['input']>;\n  readonly description_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly categoryCookieName_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly categoryCookieName: InputMaybe<Scalars['String']['input']>;\n  readonly categoryCookieName_not: InputMaybe<Scalars['String']['input']>;\n  readonly categoryCookieName_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly categoryCookieName_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly categoryCookieName_contains: InputMaybe<Scalars['String']['input']>;\n  readonly categoryCookieName_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly displayMode_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly displayMode: InputMaybe<Scalars['String']['input']>;\n  readonly displayMode_not: InputMaybe<Scalars['String']['input']>;\n  readonly displayMode_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly displayMode_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly displayMode_contains: InputMaybe<Scalars['String']['input']>;\n  readonly displayMode_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly isEssential_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly isEssential: InputMaybe<Scalars['Boolean']['input']>;\n  readonly isEssential_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly enableToggle_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly enableToggle: InputMaybe<Scalars['Boolean']['input']>;\n  readonly enableToggle_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cookiesCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfCookieCategoryNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfCookieCategoryNestedFilterType>>>;\n};\n\nexport enum CookieModalOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  LandingScreenTitleAscType = 'landingScreenTitle_ASC',\n  LandingScreenTitleDescType = 'landingScreenTitle_DESC',\n  AcceptAllButtonTextAscType = 'acceptAllButtonText_ASC',\n  AcceptAllButtonTextDescType = 'acceptAllButtonText_DESC',\n  EssentialOnlyButtonTextAscType = 'essentialOnlyButtonText_ASC',\n  EssentialOnlyButtonTextDescType = 'essentialOnlyButtonText_DESC',\n  SettingsButtonTextAscType = 'settingsButtonText_ASC',\n  SettingsButtonTextDescType = 'settingsButtonText_DESC',\n  SettingsScreenTitleAscType = 'settingsScreenTitle_ASC',\n  SettingsScreenTitleDescType = 'settingsScreenTitle_DESC',\n  AcceptSelectedButtonTextAscType = 'acceptSelectedButtonText_ASC',\n  AcceptSelectedButtonTextDescType = 'acceptSelectedButtonText_DESC',\n  SaveChangesTextAscType = 'saveChangesText_ASC',\n  SaveChangesTextDescType = 'saveChangesText_DESC',\n  ChangesSavedTextAscType = 'changesSavedText_ASC',\n  ChangesSavedTextDescType = 'changesSavedText_DESC',\n  ToggleEnabledTextAscType = 'toggleEnabledText_ASC',\n  ToggleEnabledTextDescType = 'toggleEnabledText_DESC',\n  ToggleDisabledTextAscType = 'toggleDisabledText_ASC',\n  ToggleDisabledTextDescType = 'toggleDisabledText_DESC',\n  EnableCookieDeletionAscType = 'enableCookieDeletion_ASC',\n  EnableCookieDeletionDescType = 'enableCookieDeletion_DESC',\n  LogCookieDeletionAscType = 'logCookieDeletion_ASC',\n  LogCookieDeletionDescType = 'logCookieDeletion_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type TrackingCookieCollectionType = {\n  readonly __typename?: 'TrackingCookieCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<TrackingCookieType>>;\n};\n\nexport enum TrackingCookieOrderType {\n  NameAscType = 'name_ASC',\n  NameDescType = 'name_DESC',\n  PatternAscType = 'pattern_ASC',\n  PatternDescType = 'pattern_DESC',\n  PathAscType = 'path_ASC',\n  PathDescType = 'path_DESC',\n  SecureAscType = 'secure_ASC',\n  SecureDescType = 'secure_DESC',\n  SameSiteAscType = 'sameSite_ASC',\n  SameSiteDescType = 'sameSite_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum ImageOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  WrapAscType = 'wrap_ASC',\n  WrapDescType = 'wrap_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum GlobalNavHighlightOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  CardTitleV2AscType = 'cardTitleV2_ASC',\n  CardTitleV2DescType = 'cardTitleV2_DESC',\n  CardBodyV2AscType = 'cardBodyV2_ASC',\n  CardBodyV2DescType = 'cardBodyV2_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum GlobalNavOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  PrimaryHostnameRegexAscType = 'primaryHostnameRegex_ASC',\n  PrimaryHostnameRegexDescType = 'primaryHostnameRegex_DESC',\n  HideHostnameRegexAscType = 'hideHostnameRegex_ASC',\n  HideHostnameRegexDescType = 'hideHostnameRegex_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum CookieCategoryOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  CategoryCookieNameAscType = 'categoryCookieName_ASC',\n  CategoryCookieNameDescType = 'categoryCookieName_DESC',\n  DisplayModeAscType = 'displayMode_ASC',\n  DisplayModeDescType = 'displayMode_DESC',\n  IsEssentialAscType = 'isEssential_ASC',\n  IsEssentialDescType = 'isEssential_DESC',\n  EnableToggleAscType = 'enableToggle_ASC',\n  EnableToggleDescType = 'enableToggle_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterV3FilterType = {\n  readonly columns: InputMaybe<CfFooterGroupNestedFilterType>;\n  readonly bar: InputMaybe<CfFooterGroupNestedFilterType>;\n  readonly logo: InputMaybe<CfImageNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly columnsCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly barCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly logo_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url: InputMaybe<Scalars['String']['input']>;\n  readonly url_not: InputMaybe<Scalars['String']['input']>;\n  readonly url_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideLogoOnDomains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideLogoOnDomains_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideLogoOnDomains_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideLogoOnDomains_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<FooterV3FilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<FooterV3FilterType>>>;\n};\n\nexport type CfFooterGroupNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly groupKey: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_not: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly groupKey_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly groupKey_contains: InputMaybe<Scalars['String']['input']>;\n  readonly groupKey_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly itemsCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly analytics_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideOnDomains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideOnDomains_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfFooterGroupNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfFooterGroupNestedFilterType>>>;\n};\n\nexport type CfImageNestedFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly media_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly wrap_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly wrap: InputMaybe<Scalars['String']['input']>;\n  readonly wrap_not: InputMaybe<Scalars['String']['input']>;\n  readonly wrap_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly wrap_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly wrap_contains: InputMaybe<Scalars['String']['input']>;\n  readonly wrap_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CfImageNestedFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CfImageNestedFilterType>>>;\n};\n\nexport enum FooterV3OrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterItemV3FilterType = {\n  readonly analytics: InputMaybe<CfAnalyticsNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url: InputMaybe<Scalars['String']['input']>;\n  readonly url_not: InputMaybe<Scalars['String']['input']>;\n  readonly url_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly analytics_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideOnDomains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideOnDomains_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<FooterItemV3FilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<FooterItemV3FilterType>>>;\n};\n\nexport enum FooterItemV3OrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterLocaleDropdownCollectionType = {\n  readonly __typename?: 'FooterLocaleDropdownCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<FooterLocaleDropdownType>>;\n};\n\nexport type FooterLocaleDropdownFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideOnDomains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideOnDomains_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<FooterLocaleDropdownFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<FooterLocaleDropdownFilterType>>>;\n};\n\nexport enum FooterLocaleDropdownOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterCookiesSettingsLinkFilterType = {\n  readonly analytics: InputMaybe<CfAnalyticsNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly hideOnDomains_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly hideOnDomains_contains_all: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_some: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly hideOnDomains_contains_none: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly analytics_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<FooterCookiesSettingsLinkFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<FooterCookiesSettingsLinkFilterType>>>;\n};\n\nexport enum FooterCookiesSettingsLinkOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum FooterGroupOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GroupKeyAscType = 'groupKey_ASC',\n  GroupKeyDescType = 'groupKey_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type CookieBannerFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly leftMedia_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly rightMedia_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly body_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly body_contains: InputMaybe<Scalars['String']['input']>;\n  readonly body_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly acceptCookiesButton_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly acceptCookiesButton: InputMaybe<Scalars['String']['input']>;\n  readonly acceptCookiesButton_not: InputMaybe<Scalars['String']['input']>;\n  readonly acceptCookiesButton_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly acceptCookiesButton_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly acceptCookiesButton_contains: InputMaybe<Scalars['String']['input']>;\n  readonly acceptCookiesButton_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cookieSettingsButtonText_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly cookieSettingsButtonText: InputMaybe<Scalars['String']['input']>;\n  readonly cookieSettingsButtonText_not: InputMaybe<Scalars['String']['input']>;\n  readonly cookieSettingsButtonText_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly cookieSettingsButtonText_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly cookieSettingsButtonText_contains: InputMaybe<Scalars['String']['input']>;\n  readonly cookieSettingsButtonText_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<CookieBannerFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<CookieBannerFilterType>>>;\n};\n\nexport enum CookieBannerOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  AcceptCookiesButtonAscType = 'acceptCookiesButton_ASC',\n  AcceptCookiesButtonDescType = 'acceptCookiesButton_DESC',\n  CookieSettingsButtonTextAscType = 'cookieSettingsButtonText_ASC',\n  CookieSettingsButtonTextDescType = 'cookieSettingsButtonText_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type FooterFilterType = {\n  readonly footerColumn: InputMaybe<CfFooterItemNestedFilterType>;\n  readonly footerBar: InputMaybe<CfFooterItemNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly footerColumnCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly footerBarCollection_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalOnly_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalOnly: InputMaybe<Scalars['Boolean']['input']>;\n  readonly globalOnly_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<FooterFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<FooterFilterType>>>;\n};\n\nexport enum FooterOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  GlobalOnlyAscType = 'globalOnly_ASC',\n  GlobalOnlyDescType = 'globalOnly_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type AnalyticsCollectionType = {\n  readonly __typename?: 'AnalyticsCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<AnalyticsType>>;\n};\n\nexport enum AnalyticsOrderType {\n  LabelAscType = 'label_ASC',\n  LabelDescType = 'label_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum GlobalNavItemOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  HideHostnameRegexAscType = 'hideHostnameRegex_ASC',\n  HideHostnameRegexDescType = 'hideHostnameRegex_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type ButtonFilterType = {\n  readonly image: InputMaybe<CfImageNestedFilterType>;\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly url: InputMaybe<Scalars['String']['input']>;\n  readonly url_not: InputMaybe<Scalars['String']['input']>;\n  readonly url_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly url_contains: InputMaybe<Scalars['String']['input']>;\n  readonly url_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly size_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly size: InputMaybe<Scalars['String']['input']>;\n  readonly size_not: InputMaybe<Scalars['String']['input']>;\n  readonly size_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly size_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly size_contains: InputMaybe<Scalars['String']['input']>;\n  readonly size_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly theme_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly theme: InputMaybe<Scalars['String']['input']>;\n  readonly theme_not: InputMaybe<Scalars['String']['input']>;\n  readonly theme_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly theme_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly theme_contains: InputMaybe<Scalars['String']['input']>;\n  readonly theme_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly buttonType_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly buttonType: InputMaybe<Scalars['String']['input']>;\n  readonly buttonType_not: InputMaybe<Scalars['String']['input']>;\n  readonly buttonType_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly buttonType_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly buttonType_contains: InputMaybe<Scalars['String']['input']>;\n  readonly buttonType_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly image_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly iconName_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly iconName: InputMaybe<Scalars['String']['input']>;\n  readonly iconName_not: InputMaybe<Scalars['String']['input']>;\n  readonly iconName_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly iconName_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly iconName_contains: InputMaybe<Scalars['String']['input']>;\n  readonly iconName_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<ButtonFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<ButtonFilterType>>>;\n};\n\nexport enum ButtonOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SizeAscType = 'size_ASC',\n  SizeDescType = 'size_DESC',\n  ThemeAscType = 'theme_ASC',\n  ThemeDescType = 'theme_DESC',\n  ButtonTypeAscType = 'buttonType_ASC',\n  ButtonTypeDescType = 'buttonType_DESC',\n  IconNameAscType = 'iconName_ASC',\n  IconNameDescType = 'iconName_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum CallToActionOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\n/** Common strings used across components with or without dynamic content. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/message) */\nexport type MessageType = EntryType & _NodeType & {\n  readonly __typename?: 'Message';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<MessageLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly title: Maybe<Scalars['String']['output']>;\n  readonly key: Maybe<Scalars['String']['output']>;\n  readonly value: Maybe<Scalars['String']['output']>;\n};\n\n\n/** Common strings used across components with or without dynamic content. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/message) */\nexport type MessageLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** Common strings used across components with or without dynamic content. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/message) */\nexport type MessageTitleArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Common strings used across components with or without dynamic content. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/message) */\nexport type MessageKeyArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Common strings used across components with or without dynamic content. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/message) */\nexport type MessageValueArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type MessageLinkingCollectionsType = {\n  readonly __typename?: 'MessageLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n};\n\n\nexport type MessageLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type MessageCollectionType = {\n  readonly __typename?: 'MessageCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<MessageType>>;\n};\n\nexport type MessageFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly title_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly title: InputMaybe<Scalars['String']['input']>;\n  readonly title_not: InputMaybe<Scalars['String']['input']>;\n  readonly title_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly title_contains: InputMaybe<Scalars['String']['input']>;\n  readonly title_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly key_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly key: InputMaybe<Scalars['String']['input']>;\n  readonly key_not: InputMaybe<Scalars['String']['input']>;\n  readonly key_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly key_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly key_contains: InputMaybe<Scalars['String']['input']>;\n  readonly key_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly value_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly value: InputMaybe<Scalars['String']['input']>;\n  readonly value_not: InputMaybe<Scalars['String']['input']>;\n  readonly value_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly value_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly value_contains: InputMaybe<Scalars['String']['input']>;\n  readonly value_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<MessageFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<MessageFilterType>>>;\n};\n\nexport enum MessageOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  KeyAscType = 'key_ASC',\n  KeyDescType = 'key_DESC',\n  ValueAscType = 'value_ASC',\n  ValueDescType = 'value_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\n/** Common strings used across components with or without dynamic content. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/legalMessage) */\nexport type LegalMessageType = EntryType & _NodeType & {\n  readonly __typename?: 'LegalMessage';\n  readonly sys: SysType;\n  readonly contentfulMetadata: ContentfulMetadataType;\n  readonly linkedFrom: Maybe<LegalMessageLinkingCollectionsType>;\n  readonly _id: Scalars['ID']['output'];\n  readonly key: Maybe<Scalars['String']['output']>;\n  readonly value: Maybe<Scalars['String']['output']>;\n};\n\n\n/** Common strings used across components with or without dynamic content. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/legalMessage) */\nexport type LegalMessageLinkedFromArgsType = {\n  allowedLocales: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n};\n\n\n/** Common strings used across components with or without dynamic content. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/legalMessage) */\nexport type LegalMessageKeyArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Common strings used across components with or without dynamic content. [See type definition](https://app.contentful.com/spaces/kp51zybwznx4/content_types/legalMessage) */\nexport type LegalMessageValueArgsType = {\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type LegalMessageLinkingCollectionsType = {\n  readonly __typename?: 'LegalMessageLinkingCollections';\n  readonly entryCollection: Maybe<EntryCollectionType>;\n};\n\n\nexport type LegalMessageLinkingCollectionsEntryCollectionArgsType = {\n  skip?: InputMaybe<Scalars['Int']['input']>;\n  limit?: InputMaybe<Scalars['Int']['input']>;\n  preview: InputMaybe<Scalars['Boolean']['input']>;\n  locale: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type LegalMessageCollectionType = {\n  readonly __typename?: 'LegalMessageCollection';\n  readonly total: Scalars['Int']['output'];\n  readonly skip: Scalars['Int']['output'];\n  readonly limit: Scalars['Int']['output'];\n  readonly items: ReadonlyArray<Maybe<LegalMessageType>>;\n};\n\nexport type LegalMessageFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly key_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly key: InputMaybe<Scalars['String']['input']>;\n  readonly key_not: InputMaybe<Scalars['String']['input']>;\n  readonly key_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly key_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly key_contains: InputMaybe<Scalars['String']['input']>;\n  readonly key_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly value_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly value: InputMaybe<Scalars['String']['input']>;\n  readonly value_not: InputMaybe<Scalars['String']['input']>;\n  readonly value_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly value_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly value_contains: InputMaybe<Scalars['String']['input']>;\n  readonly value_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<LegalMessageFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<LegalMessageFilterType>>>;\n};\n\nexport enum LegalMessageOrderType {\n  KeyAscType = 'key_ASC',\n  KeyDescType = 'key_DESC',\n  ValueAscType = 'value_ASC',\n  ValueDescType = 'value_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type VideoFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly contentfulDescription_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly contentfulDescription: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly contentfulDescription_contains: InputMaybe<Scalars['String']['input']>;\n  readonly contentfulDescription_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly media_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly thumbnailMedia_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly autoPlay_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly autoPlay: InputMaybe<Scalars['Boolean']['input']>;\n  readonly autoPlay_not: InputMaybe<Scalars['Boolean']['input']>;\n  readonly wrap_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly wrap: InputMaybe<Scalars['String']['input']>;\n  readonly wrap_not: InputMaybe<Scalars['String']['input']>;\n  readonly wrap_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly wrap_not_in: InputMaybe<ReadonlyArray<InputMaybe<Scalars['String']['input']>>>;\n  readonly wrap_contains: InputMaybe<Scalars['String']['input']>;\n  readonly wrap_not_contains: InputMaybe<Scalars['String']['input']>;\n  readonly captions_exists: InputMaybe<Scalars['Boolean']['input']>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<VideoFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<VideoFilterType>>>;\n};\n\nexport enum VideoOrderType {\n  ContentfulDescriptionAscType = 'contentfulDescription_ASC',\n  ContentfulDescriptionDescType = 'contentfulDescription_DESC',\n  AutoPlayAscType = 'autoPlay_ASC',\n  AutoPlayDescType = 'autoPlay_DESC',\n  WrapAscType = 'wrap_ASC',\n  WrapDescType = 'wrap_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport enum FooterItemOrderType {\n  TitleAscType = 'title_ASC',\n  TitleDescType = 'title_DESC',\n  UrlAscType = 'url_ASC',\n  UrlDescType = 'url_DESC',\n  GlobalOnlyAscType = 'globalOnly_ASC',\n  GlobalOnlyDescType = 'globalOnly_DESC',\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type EntryFilterType = {\n  readonly sys: InputMaybe<SysFilterType>;\n  readonly contentfulMetadata: InputMaybe<ContentfulMetadataFilterType>;\n  readonly OR: InputMaybe<ReadonlyArray<InputMaybe<EntryFilterType>>>;\n  readonly AND: InputMaybe<ReadonlyArray<InputMaybe<EntryFilterType>>>;\n};\n\nexport enum EntryOrderType {\n  SysIdAscType = 'sys_id_ASC',\n  SysIdDescType = 'sys_id_DESC',\n  SysPublishedAtAscType = 'sys_publishedAt_ASC',\n  SysPublishedAtDescType = 'sys_publishedAt_DESC',\n  SysFirstPublishedAtAscType = 'sys_firstPublishedAt_ASC',\n  SysFirstPublishedAtDescType = 'sys_firstPublishedAt_DESC',\n  SysPublishedVersionAscType = 'sys_publishedVersion_ASC',\n  SysPublishedVersionDescType = 'sys_publishedVersion_DESC'\n}\n\nexport type ButtonAllType = { readonly __typename?: 'Button', readonly url: string, readonly size: string, readonly theme: string, readonly buttonType: string, readonly iconName: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly title: { readonly __typename?: 'ButtonTitle', readonly json: Record<string, unknown> }, readonly image: { readonly __typename?: 'Image', readonly wrap: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly media: { readonly __typename?: 'Asset', readonly title: string, readonly description: string, readonly url: string, readonly contentType: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } } };\n\nexport type ButtonQueryVariablesType = Exact<{\n  preview: Scalars['Boolean']['input'];\n  locale: Scalars['String']['input'];\n  id: Scalars['String']['input'];\n}>;\n\n\nexport type ButtonQueryType = { readonly __typename?: 'Query', readonly button: { readonly __typename?: 'Button', readonly url: string, readonly size: string, readonly theme: string, readonly buttonType: string, readonly iconName: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly title: { readonly __typename?: 'ButtonTitle', readonly json: Record<string, unknown> }, readonly image: { readonly __typename?: 'Image', readonly wrap: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly media: { readonly __typename?: 'Asset', readonly title: string, readonly description: string, readonly url: string, readonly contentType: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } } } };\n\nexport type CallToActionAllType = { readonly __typename?: 'CallToAction', readonly url: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } }, readonly presentation: { readonly __typename?: 'Button', readonly url: string, readonly size: string, readonly theme: string, readonly buttonType: string, readonly iconName: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly title: { readonly __typename?: 'ButtonTitle', readonly json: Record<string, unknown> }, readonly image: { readonly __typename?: 'Image', readonly wrap: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly media: { readonly __typename?: 'Asset', readonly title: string, readonly description: string, readonly url: string, readonly contentType: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } } } };\n\nexport type FooterV3CollectionQueryVariablesType = Exact<{\n  preview: Scalars['Boolean']['input'];\n  locale: Scalars['String']['input'];\n}>;\n\n\nexport type FooterV3CollectionQueryType = { readonly __typename?: 'Query', readonly footerV3Collection: { readonly __typename?: 'FooterV3Collection', readonly items: ReadonlyArray<{ readonly __typename?: 'FooterV3', readonly url: string, readonly hideLogoOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly logo: { readonly __typename?: 'Image', readonly wrap: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly media: { readonly __typename?: 'Asset', readonly title: string, readonly description: string, readonly url: string, readonly contentType: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } }, readonly columnsCollection: { readonly __typename?: 'FooterV3ColumnsCollection', readonly items: ReadonlyArray<{ readonly __typename?: 'FooterGroup', readonly title: string, readonly groupKey: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly itemsCollection: { readonly __typename?: 'FooterGroupItemsCollection', readonly items: ReadonlyArray<{ readonly __typename: 'FooterCookiesSettingsLink', readonly title: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } } | { readonly __typename: 'FooterItemV3', readonly title: string, readonly url: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } } | { readonly __typename: 'FooterLocaleDropdown', readonly title: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string } }> }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } }> }, readonly barCollection: { readonly __typename?: 'FooterV3BarCollection', readonly items: ReadonlyArray<{ readonly __typename?: 'FooterGroup', readonly title: string, readonly groupKey: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly itemsCollection: { readonly __typename?: 'FooterGroupItemsCollection', readonly items: ReadonlyArray<{ readonly __typename: 'FooterCookiesSettingsLink', readonly title: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } } | { readonly __typename: 'FooterItemV3', readonly title: string, readonly url: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } } | { readonly __typename: 'FooterLocaleDropdown', readonly title: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string } }> }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } }> } }> } };\n\nexport type FooterCookiesSettingsLinkAllType = { readonly __typename?: 'FooterCookiesSettingsLink', readonly title: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } };\n\nexport type FooterGroupAllType = { readonly __typename?: 'FooterGroup', readonly title: string, readonly groupKey: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly itemsCollection: { readonly __typename?: 'FooterGroupItemsCollection', readonly items: ReadonlyArray<{ readonly __typename: 'FooterCookiesSettingsLink', readonly title: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } } | { readonly __typename: 'FooterItemV3', readonly title: string, readonly url: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } } | { readonly __typename: 'FooterLocaleDropdown', readonly title: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string } }> }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } };\n\nexport type FooterItemV3AllType = { readonly __typename?: 'FooterItemV3', readonly title: string, readonly url: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } };\n\nexport type FooterItemV3QueryVariablesType = Exact<{\n  preview: Scalars['Boolean']['input'];\n  locale: Scalars['String']['input'];\n  id: Scalars['String']['input'];\n}>;\n\n\nexport type FooterItemV3QueryType = { readonly __typename?: 'Query', readonly footerItemV3: { readonly __typename?: 'FooterItemV3', readonly title: string, readonly url: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } } };\n\nexport type FooterLocaleDropdownAllType = { readonly __typename?: 'FooterLocaleDropdown', readonly title: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string } };\n\nexport type FooterV3AllType = { readonly __typename?: 'FooterV3', readonly url: string, readonly hideLogoOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly logo: { readonly __typename?: 'Image', readonly wrap: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly media: { readonly __typename?: 'Asset', readonly title: string, readonly description: string, readonly url: string, readonly contentType: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } }, readonly columnsCollection: { readonly __typename?: 'FooterV3ColumnsCollection', readonly items: ReadonlyArray<{ readonly __typename?: 'FooterGroup', readonly title: string, readonly groupKey: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly itemsCollection: { readonly __typename?: 'FooterGroupItemsCollection', readonly items: ReadonlyArray<{ readonly __typename: 'FooterCookiesSettingsLink', readonly title: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } } | { readonly __typename: 'FooterItemV3', readonly title: string, readonly url: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } } | { readonly __typename: 'FooterLocaleDropdown', readonly title: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string } }> }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } }> }, readonly barCollection: { readonly __typename?: 'FooterV3BarCollection', readonly items: ReadonlyArray<{ readonly __typename?: 'FooterGroup', readonly title: string, readonly groupKey: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly itemsCollection: { readonly __typename?: 'FooterGroupItemsCollection', readonly items: ReadonlyArray<{ readonly __typename: 'FooterCookiesSettingsLink', readonly title: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } } | { readonly __typename: 'FooterItemV3', readonly title: string, readonly url: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } } | { readonly __typename: 'FooterLocaleDropdown', readonly title: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string } }> }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } }> } };\n\nexport type FooterV3QueryVariablesType = Exact<{\n  preview: Scalars['Boolean']['input'];\n  locale: Scalars['String']['input'];\n  id: Scalars['String']['input'];\n}>;\n\n\nexport type FooterV3QueryType = { readonly __typename?: 'Query', readonly footerV3: { readonly __typename?: 'FooterV3', readonly url: string, readonly hideLogoOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly logo: { readonly __typename?: 'Image', readonly wrap: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly media: { readonly __typename?: 'Asset', readonly title: string, readonly description: string, readonly url: string, readonly contentType: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } }, readonly columnsCollection: { readonly __typename?: 'FooterV3ColumnsCollection', readonly items: ReadonlyArray<{ readonly __typename?: 'FooterGroup', readonly title: string, readonly groupKey: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly itemsCollection: { readonly __typename?: 'FooterGroupItemsCollection', readonly items: ReadonlyArray<{ readonly __typename: 'FooterCookiesSettingsLink', readonly title: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } } | { readonly __typename: 'FooterItemV3', readonly title: string, readonly url: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } } | { readonly __typename: 'FooterLocaleDropdown', readonly title: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string } }> }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } }> }, readonly barCollection: { readonly __typename?: 'FooterV3BarCollection', readonly items: ReadonlyArray<{ readonly __typename?: 'FooterGroup', readonly title: string, readonly groupKey: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly itemsCollection: { readonly __typename?: 'FooterGroupItemsCollection', readonly items: ReadonlyArray<{ readonly __typename: 'FooterCookiesSettingsLink', readonly title: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } } | { readonly __typename: 'FooterItemV3', readonly title: string, readonly url: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } } | { readonly __typename: 'FooterLocaleDropdown', readonly title: string, readonly hideOnDomains: ReadonlyArray<string>, readonly sys: { readonly __typename?: 'Sys', readonly id: string } }> }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } }> } } };\n\nexport type GlobalNavConfigCollectionQueryVariablesType = Exact<{\n  preview: Scalars['Boolean']['input'];\n  locale: Scalars['String']['input'];\n}>;\n\n\nexport type GlobalNavConfigCollectionQueryType = { readonly __typename?: 'Query', readonly globalNavConfigCollection: { readonly __typename?: 'GlobalNavConfigCollection', readonly items: ReadonlyArray<{ readonly __typename?: 'GlobalNavConfig', readonly globalNavLabel: string, readonly globalNavButtonAriaLabel: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly globalNavGroupsCollection: { readonly __typename?: 'GlobalNavConfigGlobalNavGroupsCollection', readonly items: ReadonlyArray<{ readonly __typename?: 'GlobalNav', readonly title: string, readonly groupKey: string, readonly primaryHostnameRegex: string, readonly hideHostnameRegex: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly highlight: { readonly __typename?: 'GlobalNavHighlight', readonly title: string, readonly cardTitleV2: string, readonly cardBodyV2: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly cta: { readonly __typename?: 'CallToAction', readonly url: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } }, readonly presentation: { readonly __typename?: 'Button', readonly url: string, readonly size: string, readonly theme: string, readonly buttonType: string, readonly iconName: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly title: { readonly __typename?: 'ButtonTitle', readonly json: Record<string, unknown> }, readonly image: { readonly __typename?: 'Image', readonly wrap: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly media: { readonly __typename?: 'Asset', readonly title: string, readonly description: string, readonly url: string, readonly contentType: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } } } }, readonly background: { readonly __typename?: 'Asset', readonly title: string, readonly description: string, readonly url: string, readonly contentType: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } }, readonly itemsCollection: { readonly __typename?: 'GlobalNavItemsCollection', readonly items: ReadonlyArray<{ readonly __typename?: 'GlobalNavItem', readonly title: string, readonly url: string, readonly hideHostnameRegex: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } }> } }> } }> } };\n\nexport type GlobalNavAllType = { readonly __typename?: 'GlobalNav', readonly title: string, readonly groupKey: string, readonly primaryHostnameRegex: string, readonly hideHostnameRegex: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly highlight: { readonly __typename?: 'GlobalNavHighlight', readonly title: string, readonly cardTitleV2: string, readonly cardBodyV2: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly cta: { readonly __typename?: 'CallToAction', readonly url: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } }, readonly presentation: { readonly __typename?: 'Button', readonly url: string, readonly size: string, readonly theme: string, readonly buttonType: string, readonly iconName: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly title: { readonly __typename?: 'ButtonTitle', readonly json: Record<string, unknown> }, readonly image: { readonly __typename?: 'Image', readonly wrap: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly media: { readonly __typename?: 'Asset', readonly title: string, readonly description: string, readonly url: string, readonly contentType: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } } } }, readonly background: { readonly __typename?: 'Asset', readonly title: string, readonly description: string, readonly url: string, readonly contentType: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } }, readonly itemsCollection: { readonly __typename?: 'GlobalNavItemsCollection', readonly items: ReadonlyArray<{ readonly __typename?: 'GlobalNavItem', readonly title: string, readonly url: string, readonly hideHostnameRegex: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } }> } };\n\nexport type GlobalNavHighlightAllType = { readonly __typename?: 'GlobalNavHighlight', readonly title: string, readonly cardTitleV2: string, readonly cardBodyV2: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly cta: { readonly __typename?: 'CallToAction', readonly url: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } }, readonly presentation: { readonly __typename?: 'Button', readonly url: string, readonly size: string, readonly theme: string, readonly buttonType: string, readonly iconName: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly title: { readonly __typename?: 'ButtonTitle', readonly json: Record<string, unknown> }, readonly image: { readonly __typename?: 'Image', readonly wrap: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly media: { readonly __typename?: 'Asset', readonly title: string, readonly description: string, readonly url: string, readonly contentType: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } } } }, readonly background: { readonly __typename?: 'Asset', readonly title: string, readonly description: string, readonly url: string, readonly contentType: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } };\n\nexport type GlobalNavItemAllType = { readonly __typename?: 'GlobalNavItem', readonly title: string, readonly url: string, readonly hideHostnameRegex: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly analytics: { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } };\n\nexport type AnalyticsAllType = { readonly __typename?: 'Analytics', readonly label: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } };\n\nexport type AssetAllType = { readonly __typename?: 'Asset', readonly title: string, readonly description: string, readonly url: string, readonly contentType: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } };\n\nexport type AssetsQueryVariablesType = Exact<{\n  preview: Scalars['Boolean']['input'];\n  locale: Scalars['String']['input'];\n  id: Scalars['String']['input'];\n}>;\n\n\nexport type AssetsQueryType = { readonly __typename?: 'Query', readonly asset: { readonly __typename?: 'Asset', readonly title: string, readonly description: string, readonly url: string, readonly contentType: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } };\n\nexport type ImageAllType = { readonly __typename?: 'Image', readonly wrap: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string }, readonly media: { readonly __typename?: 'Asset', readonly title: string, readonly description: string, readonly url: string, readonly contentType: string, readonly sys: { readonly __typename?: 'Sys', readonly id: string } } };\n\nexport const AssetAllType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Asset\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"description\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"contentType\"}}]}}]} as unknown as DocumentNode<AssetAllType, unknown>;\nexport const ImageAllType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"ImageAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Image\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"media\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"wrap\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Asset\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"description\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"contentType\"}}]}}]} as unknown as DocumentNode<ImageAllType, unknown>;\nexport const FooterItemV3AllType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3All\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"label\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideOnDomains\"}}]}}]} as unknown as DocumentNode<FooterItemV3AllType, unknown>;\nexport const FooterLocaleDropdownAllType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterLocaleDropdownAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterLocaleDropdown\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideOnDomains\"}}]}}]} as unknown as DocumentNode<FooterLocaleDropdownAllType, unknown>;\nexport const FooterCookiesSettingsLinkAllType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterCookiesSettingsLinkAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterCookiesSettingsLink\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideOnDomains\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"label\"}}]}}]}}]} as unknown as DocumentNode<FooterCookiesSettingsLinkAllType, unknown>;\nexport const FooterGroupAllType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterGroupAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterGroup\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"groupKey\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"itemsCollection\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"limit\"},\"value\":{\"kind\":\"IntValue\",\"value\":\"10\"}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"__typename\"}},{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3All\"}}]}},{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterLocaleDropdown\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterLocaleDropdownAll\"}}]}},{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterCookiesSettingsLink\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterCookiesSettingsLinkAll\"}}]}}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"label\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideOnDomains\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3All\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"label\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideOnDomains\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterLocaleDropdownAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterLocaleDropdown\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideOnDomains\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterCookiesSettingsLinkAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterCookiesSettingsLink\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideOnDomains\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"label\"}}]}}]}}]} as unknown as DocumentNode<FooterGroupAllType, unknown>;\nexport const FooterV3AllType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterV3All\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterV3\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"logo\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"ImageAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideLogoOnDomains\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"columnsCollection\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"limit\"},\"value\":{\"kind\":\"IntValue\",\"value\":\"10\"}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterGroup\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterGroupAll\"}}]}}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"barCollection\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"limit\"},\"value\":{\"kind\":\"IntValue\",\"value\":\"10\"}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterGroup\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterGroupAll\"}}]}}]}}]}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Asset\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"description\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"contentType\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3All\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"label\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideOnDomains\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterLocaleDropdownAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterLocaleDropdown\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideOnDomains\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterCookiesSettingsLinkAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterCookiesSettingsLink\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideOnDomains\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"label\"}}]}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"ImageAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Image\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"media\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"wrap\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterGroupAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterGroup\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"groupKey\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"itemsCollection\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"limit\"},\"value\":{\"kind\":\"IntValue\",\"value\":\"10\"}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"__typename\"}},{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3All\"}}]}},{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterLocaleDropdown\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterLocaleDropdownAll\"}}]}},{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterCookiesSettingsLink\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterCookiesSettingsLinkAll\"}}]}}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"label\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideOnDomains\"}}]}}]} as unknown as DocumentNode<FooterV3AllType, unknown>;\nexport const AnalyticsAllType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"AnalyticsAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Analytics\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"label\"}}]}}]} as unknown as DocumentNode<AnalyticsAllType, unknown>;\nexport const ButtonAllType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"ButtonAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Button\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"size\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"theme\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"buttonType\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"image\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Image\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"ImageAll\"}}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"iconName\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Asset\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"description\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"contentType\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"ImageAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Image\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"media\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"wrap\"}}]}}]} as unknown as DocumentNode<ButtonAllType, unknown>;\nexport const CallToActionAllType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"CallToActionAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"CallToAction\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"AnalyticsAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"presentation\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Button\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"ButtonAll\"}}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Asset\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"description\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"contentType\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"ImageAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Image\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"media\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"wrap\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"AnalyticsAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Analytics\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"label\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"ButtonAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Button\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"size\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"theme\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"buttonType\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"image\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Image\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"ImageAll\"}}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"iconName\"}}]}}]} as unknown as DocumentNode<CallToActionAllType, unknown>;\nexport const GlobalNavHighlightAllType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNavHighlightAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNavHighlight\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"cta\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"CallToActionAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"background\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"cardTitleV2\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"cardBodyV2\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"AnalyticsAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Analytics\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"label\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Asset\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"description\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"contentType\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"ImageAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Image\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"media\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"wrap\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"ButtonAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Button\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"size\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"theme\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"buttonType\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"image\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Image\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"ImageAll\"}}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"iconName\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"CallToActionAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"CallToAction\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"AnalyticsAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"presentation\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Button\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"ButtonAll\"}}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}}]}}]} as unknown as DocumentNode<GlobalNavHighlightAllType, unknown>;\nexport const GlobalNavItemAllType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNavItemAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNavItem\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideHostnameRegex\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"AnalyticsAll\"}}]}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"AnalyticsAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Analytics\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"label\"}}]}}]} as unknown as DocumentNode<GlobalNavItemAllType, unknown>;\nexport const GlobalNavAllType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNavAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNav\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"groupKey\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"primaryHostnameRegex\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideHostnameRegex\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"highlight\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNavHighlightAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"itemsCollection\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"limit\"},\"value\":{\"kind\":\"IntValue\",\"value\":\"20\"}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNavItemAll\"}}]}}]}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"AnalyticsAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Analytics\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"label\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Asset\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"description\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"contentType\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"ImageAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Image\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"media\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"wrap\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"ButtonAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Button\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"size\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"theme\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"buttonType\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"image\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Image\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"ImageAll\"}}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"iconName\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"CallToActionAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"CallToAction\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"AnalyticsAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"presentation\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Button\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"ButtonAll\"}}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNavHighlightAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNavHighlight\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"cta\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"CallToActionAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"background\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"cardTitleV2\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"cardBodyV2\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNavItemAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNavItem\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideHostnameRegex\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"AnalyticsAll\"}}]}}]}}]} as unknown as DocumentNode<GlobalNavAllType, unknown>;\nexport const ButtonQueryDocumentType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"ButtonQuery\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"preview\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Boolean\"}}}},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"locale\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}}},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"button\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"preview\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"preview\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"locale\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"locale\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"ButtonAll\"}}]}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Asset\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"description\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"contentType\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"ImageAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Image\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"media\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"wrap\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"ButtonAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Button\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"size\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"theme\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"buttonType\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"image\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Image\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"ImageAll\"}}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"iconName\"}}]}}]} as unknown as DocumentNode<ButtonQueryType, ButtonQueryVariablesType>;\nexport const FooterV3CollectionQueryDocumentType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterV3CollectionQuery\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"preview\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Boolean\"}}}},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"locale\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"footerV3Collection\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"preview\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"preview\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"locale\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"locale\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"limit\"},\"value\":{\"kind\":\"IntValue\",\"value\":\"1\"}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterV3All\"}}]}}]}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Asset\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"description\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"contentType\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"ImageAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Image\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"media\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"wrap\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3All\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"label\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideOnDomains\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterLocaleDropdownAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterLocaleDropdown\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideOnDomains\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterCookiesSettingsLinkAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterCookiesSettingsLink\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideOnDomains\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"label\"}}]}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterGroupAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterGroup\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"groupKey\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"itemsCollection\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"limit\"},\"value\":{\"kind\":\"IntValue\",\"value\":\"10\"}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"__typename\"}},{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3All\"}}]}},{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterLocaleDropdown\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterLocaleDropdownAll\"}}]}},{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterCookiesSettingsLink\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterCookiesSettingsLinkAll\"}}]}}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"label\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideOnDomains\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterV3All\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterV3\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"logo\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"ImageAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideLogoOnDomains\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"columnsCollection\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"limit\"},\"value\":{\"kind\":\"IntValue\",\"value\":\"10\"}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterGroup\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterGroupAll\"}}]}}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"barCollection\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"limit\"},\"value\":{\"kind\":\"IntValue\",\"value\":\"10\"}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterGroup\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterGroupAll\"}}]}}]}}]}}]}}]} as unknown as DocumentNode<FooterV3CollectionQueryType, FooterV3CollectionQueryVariablesType>;\nexport const FooterItemV3QueryDocumentType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3Query\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"preview\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Boolean\"}}}},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"locale\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}}},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"footerItemV3\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"preview\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"preview\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"locale\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"locale\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3All\"}}]}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3All\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"label\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideOnDomains\"}}]}}]} as unknown as DocumentNode<FooterItemV3QueryType, FooterItemV3QueryVariablesType>;\nexport const FooterV3QueryDocumentType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterV3Query\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"preview\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Boolean\"}}}},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"locale\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}}},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"footerV3\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"preview\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"preview\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"locale\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"locale\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterV3All\"}}]}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Asset\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"description\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"contentType\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"ImageAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Image\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"media\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"wrap\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3All\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"label\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideOnDomains\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterLocaleDropdownAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterLocaleDropdown\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideOnDomains\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterCookiesSettingsLinkAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterCookiesSettingsLink\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideOnDomains\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"label\"}}]}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterGroupAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterGroup\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"groupKey\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"itemsCollection\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"limit\"},\"value\":{\"kind\":\"IntValue\",\"value\":\"10\"}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"__typename\"}},{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterItemV3All\"}}]}},{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterLocaleDropdown\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterLocaleDropdownAll\"}}]}},{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterCookiesSettingsLink\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterCookiesSettingsLinkAll\"}}]}}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"label\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideOnDomains\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterV3All\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterV3\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"logo\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"ImageAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideLogoOnDomains\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"columnsCollection\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"limit\"},\"value\":{\"kind\":\"IntValue\",\"value\":\"10\"}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterGroup\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterGroupAll\"}}]}}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"barCollection\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"limit\"},\"value\":{\"kind\":\"IntValue\",\"value\":\"10\"}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterGroup\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"FooterGroupAll\"}}]}}]}}]}}]}}]} as unknown as DocumentNode<FooterV3QueryType, FooterV3QueryVariablesType>;\nexport const GlobalNavConfigCollectionQueryDocumentType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNavConfigCollectionQuery\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"preview\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Boolean\"}}}},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"locale\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"globalNavConfigCollection\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"preview\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"preview\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"locale\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"locale\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"limit\"},\"value\":{\"kind\":\"IntValue\",\"value\":\"1\"}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"globalNavLabel\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"globalNavButtonAriaLabel\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"globalNavGroupsCollection\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"limit\"},\"value\":{\"kind\":\"IntValue\",\"value\":\"20\"}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNavAll\"}}]}}]}}]}}]}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"AnalyticsAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Analytics\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"label\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Asset\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"description\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"contentType\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"ImageAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Image\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"media\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"wrap\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"ButtonAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Button\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"json\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"size\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"theme\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"buttonType\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"image\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Image\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"ImageAll\"}}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"iconName\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"CallToActionAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"CallToAction\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"AnalyticsAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"presentation\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Button\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"ButtonAll\"}}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNavHighlightAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNavHighlight\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"cta\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"CallToActionAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"background\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"cardTitleV2\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"cardBodyV2\"}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNavItemAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNavItem\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideHostnameRegex\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"analytics\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"AnalyticsAll\"}}]}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNavAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNav\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"groupKey\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"primaryHostnameRegex\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hideHostnameRegex\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"highlight\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNavHighlightAll\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"itemsCollection\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"limit\"},\"value\":{\"kind\":\"IntValue\",\"value\":\"20\"}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"GlobalNavItemAll\"}}]}}]}}]}}]} as unknown as DocumentNode<GlobalNavConfigCollectionQueryType, GlobalNavConfigCollectionQueryVariablesType>;\nexport const AssetsQueryDocumentType = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetsQuery\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"preview\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Boolean\"}}}},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"locale\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}}},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"asset\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"preview\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"preview\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"locale\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"locale\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"}}]}}]}},{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"AssetAll\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Asset\"}},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sys\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"title\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"description\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"contentType\"}}]}}]} as unknown as DocumentNode<AssetsQueryType, AssetsQueryVariablesType>;", "import createCompounder from './_createCompounder.js';\n\n/**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\nvar snakeCase = createCompounder(function(result, word, index) {\n  return result + (index ? '_' : '') + word.toLowerCase();\n});\n\nexport default snakeCase;\n", "import type { TrackingParameters } from '@snapchat/snap-design-system-marketing';\nimport {\n  appendTrackingParameters,\n  FooterItemV2 as FooterItemSDS,\n} from '@snapchat/snap-design-system-marketing';\nimport snakeCase from 'lodash-es/snakeCase';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { Action } from '../../../analytics/Action';\nimport { GlobalComponentsContext } from '../../../context/GlobalComponentsContext';\nimport type { FooterGroupItem } from '../FooterV3Types';\n\nconst defaultTrackingParameters: TrackingParameters = {\n  utm_source: 'global_footer',\n  utm_medium: 'referral',\n  utm_campaign: 'universal_navigation',\n  utm_content: 'footer_item_link',\n};\n\nexport const FooterItemV3: FC<Omit<FooterGroupItem, 'type'>> = props => {\n  const { id, url, title, analyticsLabel } = props;\n  const { isUrlCurrent, onEvent, hostname } = useContext(GlobalComponentsContext);\n\n  const trackingParameters = hostname\n    ? { ...defaultTrackingParameters, utm_source: snakeCase(hostname) }\n    : defaultTrackingParameters;\n\n  const trackedUrl = appendTrackingParameters(url, trackingParameters);\n\n  const onClick = () => {\n    onEvent?.({\n      action: Action.Click,\n      component: 'FooterItem',\n      label: analyticsLabel,\n      url: trackedUrl,\n    });\n  };\n\n  return (\n    <FooterItemSDS\n      id={id}\n      key={id}\n      isSelected={isUrlCurrent?.(url ?? '')}\n      url={trackedUrl}\n      title={title}\n      onClick={onClick}\n    />\n  );\n};\n", "import { FooterGroup as FooterGroupSDS, Orientation } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport { FooterItemV3 } from '../FooterItemV3/FooterItemV3';\nimport type { FooterGroupProps } from '../FooterV3Types';\n\nexport const FooterGroup: FC<FooterGroupProps> = ({\n  id,\n  title,\n  items,\n  onClick,\n  orientation = Orientation.Vertical,\n  isFooterBar,\n  beforeItems,\n  afterItems,\n  onToggle,\n}) => {\n  if (!items?.length && !beforeItems && !afterItems) {\n    return null;\n  }\n\n  const itemsToRender = items?.map((item, i) => {\n    return (\n      <FooterItemV3\n        // ok to use index here because we should never be dynamically adding or removing footer items\n        key={item.id || i}\n        id={item.id}\n        url={item.url}\n        title={item.title}\n        analyticsLabel={item.analyticsLabel}\n      />\n    );\n  });\n\n  return (\n    <FooterGroupSDS\n      isFooterBar={isFooterBar}\n      id={id}\n      title={title}\n      onClick={onClick}\n      orientation={orientation}\n      onToggle={onToggle}\n    >\n      {beforeItems}\n      {...itemsToRender}\n      {afterItems}\n    </FooterGroupSDS>\n  );\n};\n", "import { css } from '@emotion/css';\nimport { m, nonMobileMediaQuery } from '@snapchat/snap-design-system-marketing';\n\nexport const localeDropdownContainerCss = css`\n  width: 100%;\n\n  ${nonMobileMediaQuery} {\n    width: auto;\n  }\n`;\n\nexport const logoWrapperCss = css`\n  display: flex;\n  align-items: center;\n  margin-top: ${m('--spacing-xxxs')};\n\n  padding-block-end: ${m('--spacing-xs')};\n\n  ${nonMobileMediaQuery} {\n    padding-block-end: 0;\n  }\n`;\n\n// This fill color is taken from the official logo svg\nexport const lightBgSnapLogoCss = css`\n  &.sdsm-logo {\n    fill: #221f20;\n  }\n`;\n", "import { css } from '@emotion/css';\nimport { m, mobileMediaQuery } from '@snapchat/snap-design-system-marketing';\n\nexport const localeDropdownContainerCss = css`\n  ${mobileMediaQuery} {\n    width: 100%;\n    .sdsm-dropdown,\n    .sdsm-dropdown-button {\n      width: 100%;\n    }\n  }\n`;\n\nexport const dropdownCss = css`\n  display: flex;\n  flex-direction: column;\n  gap: ${m('--spacing-s')};\n`;\n\nexport const horizontalDropdownCss = css`\n  flex-direction: row;\n  align-items: center;\n\n  ${mobileMediaQuery} {\n    flex-direction: column;\n    align-items: flex-start;\n  }\n`;\n\nexport const titleCss = css`\n  color: ${m('--fg-color')};\n  /* Set font-family here or the var from the default motif is used */\n  font-family: ${m('--font-family')};\n  font-size: 14px;\n  font-weight: 600;\n  line-height: 16px;\n`;\n", "import { cx } from '@emotion/css';\nimport { Orientation } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport { LocaleDropdown } from '../../LocaleDropdown/LocaleDropdown';\nimport type { FooterLocaleDropdownProps } from '../FooterV3Types';\nimport {\n  dropdownCss,\n  horizontalDropdownCss,\n  localeDropdownContainerCss,\n  titleCss,\n} from './FooterLocaleDropdown.styles';\n\nexport const FooterLocaleDropdown: FC<FooterLocaleDropdownProps> = ({\n  title,\n  /**\n   * @deprecated. It should be on the styles in the footer Group to align the locale dropdown, instead\n   * of prop drilling it.\n   */\n  currentOrientation: orientation,\n  buttonComponent,\n}) => {\n  return (\n    <div\n      className={cx(dropdownCss, {\n        [horizontalDropdownCss]: orientation === Orientation.Horizontal,\n      })}\n    >\n      {title && <label className={titleCss}>{title}</label>}\n      <LocaleDropdown className={localeDropdownContainerCss} buttonComponent={buttonComponent} />\n    </div>\n  );\n};\n\nFooterLocaleDropdown.displayName = 'FooterLocaleDropdown';\n", "import clone from 'lodash-es/clone';\n\nimport type { FooterGroupAllType } from '../../../generated/contentful-types';\nimport type { FooterGroupItem, FooterGroupProps } from '../../FooterV3/FooterV3Types';\nimport type { CustomFooterGroupProps } from './FooterCollectionV3';\n\n/** Merges default global columns from contentful, with the custom ones a consumer can pass in */\nexport const mergeFooterData = (\n  globalGroups: Array<FooterGroupAllType>,\n  customGroups: Array<CustomFooterGroupProps>,\n  cookieSettingsUrl?: string\n): FooterGroupProps[] => {\n  // Ce clone this because we might splice later and it breaks things across renders\n  const clonedCustomGroups = clone(customGroups);\n\n  const computed = globalGroups.reduce((result, curGroup) => {\n    // Check if custom group key is set to override one of the defaults\n    const spaceItemIndex = clonedCustomGroups.findIndex(\n      group => group.groupKey.trim() === curGroup.groupKey.trim()\n    );\n\n    const genericItems = contentfulToGenericGroup(\n      curGroup.itemsCollection.items,\n      cookieSettingsUrl\n    );\n\n    if (!genericItems.length) {\n      return result;\n    }\n\n    // If found, replace the default with the custom\n    if (spaceItemIndex >= 0) {\n      const spaceGroupArr = clonedCustomGroups.splice(spaceItemIndex, 1);\n      const spaceGroup = spaceGroupArr[0]!;\n\n      const mergedGroup: FooterGroupProps = {\n        id: spaceGroup.id ?? curGroup.sys.id,\n        title: spaceGroup.title ?? curGroup.title,\n        items: spaceGroup.items.concat(genericItems),\n        analyticsLabel: spaceGroup.analyticsLabel ?? curGroup.analytics?.label,\n      };\n\n      result.push(mergedGroup);\n      // if not overridden, add to list per usual\n    } else {\n      const group: FooterGroupProps = {\n        id: curGroup.sys.id,\n        title: curGroup.title,\n        items: genericItems,\n        analyticsLabel: curGroup.analytics?.label,\n      };\n\n      result.push(group);\n    }\n\n    return result;\n  }, [] as FooterGroupProps[]);\n\n  const restMapped = clonedCustomGroups.map(\n    group =>\n      ({\n        id: group.id,\n        title: group.title,\n        items: group.items,\n        analyticsLabel: group.analyticsLabel,\n      } as FooterGroupProps)\n  );\n\n  return [...computed, ...restMapped];\n};\n\n/** Filters out columns and items that are restricted on the passed in domain. Use this BEFORE MERGE. */\nexport const filterFooterDomains = (\n  collection: readonly FooterGroupAllType[],\n  domain: string\n): FooterGroupAllType[] => {\n  const filteredGroups = collection.filter(\n    group => !group.hideOnDomains || !group.hideOnDomains.includes(domain)\n  );\n\n  return filteredGroups.map(group => ({\n    ...group,\n    itemsCollection: {\n      ...group.itemsCollection,\n      items: group.itemsCollection.items.filter(\n        item => !item.hideOnDomains || !item.hideOnDomains.includes(domain)\n      ),\n    },\n  }));\n};\n\nconst contentfulToGenericGroup = (\n  items: FooterGroupAllType['itemsCollection']['items'],\n  cookieSettingsUrl?: string\n): FooterGroupItem[] => {\n  const result = items\n    .map(item => {\n      if (item.__typename === 'FooterCookiesSettingsLink') {\n        if (!cookieSettingsUrl) return undefined;\n\n        return {\n          id: item.sys.id,\n          title: item.title,\n          url: cookieSettingsUrl,\n        };\n      }\n\n      if (item.__typename === 'FooterLocaleDropdown') {\n        return undefined;\n      }\n\n      return {\n        analyticsLabel: item?.analytics?.label,\n        id: item.sys.id,\n        title: item.title,\n        url: item.url,\n      };\n    })\n    .filter(item => !!item) as FooterGroupItem[];\n\n  return result;\n};\n", "import { useGlobalComponentsContentfulQuery } from '@snapchat/mw-global-components-schema';\nimport {\n  BackgroundColor,\n  BrowserFeaturesContext,\n  Button,\n  GlobalHeaderContext,\n  GlobalHeader as GlobalHeaderSDS,\n  isMobileOs,\n  GlobalNavItem as ItemMobileSDS,\n  Logo as LogoSDS,\n  mobileMaxWidth,\n  NavigatorItemDesktop as NavigatorItemDesktopSDS,\n  NavigatorItemMobile as NavigatorItemMobileSDS,\n  PrimitivesProvider,\n} from '@snapchat/snap-design-system-marketing';\nimport head from 'lodash-es/head';\nimport type { FC, ReactNode } from 'react';\nimport { Children, useContext, useMemo } from 'react';\n\nimport { Action } from '../../analytics/Action';\nimport { defaultLocaleCode, GlobalComponentsContext } from '../../context/GlobalComponentsContext';\nimport type { GlobalNavAllType, GlobalNavConfigType } from '../../generated/contentful-types';\nimport { GlobalNavConfigCollectionQueryDocumentType } from '../../generated/contentful-types';\nimport { hightlightSizedSrcSets } from '../GlobalNavHighlight/GlobalNavHighlight';\nimport { GlobalNavGroupScreen } from '../GlobalNavScreen/GlobalNavScreen';\nimport type { MediaPreloadSettings } from '../Media/mediaUtils';\nimport { useMediaPreload } from '../Media/useMediaPreload';\nimport type { GlobalHeaderProps } from './types';\n\nconst defaultBackgroundColor = BackgroundColor.Black;\nconst defaultDefaultGroupKey = 'snapchat';\n\n// Test to see if there are duplicate contexts.\n// Explanation: We set this value here as a type of invariant. Users of this package\n// Can see if this value is set to test if they have a different version of SDSM installed.\n// TODO: Make a separate file containing setting and testing logic.\n// Tracking: https://jira.sc-corp.net/browse/ENTWEB-4284\nGlobalHeaderContext.displayName = 'GlobalHeaderContextSDSM';\n\nconst mediaPreloadSettings: MediaPreloadSettings = {\n  sizedSrcSets: hightlightSizedSrcSets,\n  skipPreload: () => {\n    if (!window) return true;\n    return window.innerWidth <= mobileMaxWidth;\n  },\n};\n\n/** Navigation Header with a global nav available on click. */\nexport const GlobalHeader: FC<GlobalHeaderProps> = ({\n  motifScheme,\n  backgroundColor,\n  className,\n  defaultGroupKey,\n  siteName,\n  displayed,\n  trackingSiteName,\n  cta,\n  ctaItems,\n  localNavDesktop,\n  localNavMenuItems,\n  logo,\n  logoProps,\n  localNavMobile,\n  localNavMobileFooter,\n  onToggleExpanded,\n  search,\n  searchOpen,\n  endChildrenDesktopClassName,\n  endChildrenMobileClassName,\n  showGlobalLinks = true,\n  showNavScreen,\n  pathname,\n  navItemAlignment,\n  customIcon,\n  lessMargins,\n  addBottomBorder,\n  headerClassName,\n}) => {\n  const context = useContext(GlobalComponentsContext);\n  const { Anchor, onEvent } = context;\n\n  const { data } = useGlobalComponentsContentfulQuery(\n    GlobalNavConfigCollectionQueryDocumentType,\n    {\n      currentLocale: context.currentLocale ?? defaultLocaleCode,\n      isPreview: context.isPreview ?? false,\n      isSSR: context.isSSR ?? false,\n    },\n    { client: context.globalApolloClient }\n  );\n\n  const config = head(data?.globalNavConfigCollection.items) as GlobalNavConfigType;\n  const navGroups = useMemo(\n    () => config?.globalNavGroupsCollection.items ?? [],\n    [config?.globalNavGroupsCollection.items]\n  );\n\n  const browserFeatures = useContext(BrowserFeaturesContext);\n  const isMobile = isMobileOs(browserFeatures);\n\n  // we have to memo this otherwise we \"preload\" on every render since its a new array every time\n  const assetsToPreload = useMemo(\n    () =>\n      showGlobalLinks\n        ? navGroups.map(item => item.highlight?.background).filter(asset => !!asset)\n        : [],\n    [navGroups, showGlobalLinks]\n  );\n  useMediaPreload(assetsToPreload, false, mediaPreloadSettings);\n\n  // Track expansion.\n  const onToggleExpandedWithLogging = (isExpanded: boolean): void => {\n    onEvent?.({\n      component: 'GlobalHeader',\n      action: Action.Click,\n      label: isExpanded ? 'expand' : 'collapse',\n    });\n    onToggleExpanded?.(isExpanded);\n  };\n\n  const callToActions =\n    cta ??\n    Children.toArray(\n      ctaItems?.map((item, id) => (\n        <Button key={id} link={item.url} type={item.type} size=\"Compact\" onClick={item.onClick}>\n          {item.title}\n        </Button>\n      ))\n    );\n\n  // TODO: Remove the concept of \"search\" from this version. Does not belong in exported nav.\n  const endChildren = searchOpen ? (\n    search\n  ) : (\n    <>\n      {callToActions}\n      {search}\n    </>\n  );\n\n  const defaultLogo = logoProps ? <LogoSDS {...logoProps} logoType={'Ghost'} /> : null;\n\n  const shouldShowLogo = !(searchOpen && isMobile);\n\n  const endChildrenClassName = isMobile ? endChildrenMobileClassName : endChildrenDesktopClassName;\n\n  let mobileNavigation: ReactNode;\n  let desktopNavigation: ReactNode;\n\n  // Determine which mobile nav to use\n  if (localNavMobile) {\n    // If nav component passed\n    mobileNavigation = localNavMobile;\n  } else if (localNavMenuItems) {\n    // If props passed for new mega-menu\n    mobileNavigation = localNavMenuItems?.map(\n      ({\n        id,\n        url,\n        title,\n        isSelected,\n        col1Label,\n        col1Items,\n        col2Label,\n        col2Items,\n        col3Label,\n        col3Items,\n        featuredItem,\n      }) => (\n        <ItemMobileSDS\n          key={id}\n          showExternalIcon={false}\n          href={url}\n          title={title}\n          isSelected={isSelected}\n        >\n          {(col1Items?.length || col2Items?.length || col3Items?.length || !!featuredItem) && (\n            <NavigatorItemMobileSDS\n              col1Label={col1Label}\n              col1Items={col1Items}\n              col2Label={col2Label}\n              col2Items={col2Items}\n              col3Label={col3Label}\n              col3Items={col3Items}\n              featuredItem={featuredItem}\n            />\n          )}\n        </ItemMobileSDS>\n      )\n    );\n  }\n\n  // Determine which desktop nav to use\n  if (localNavDesktop) {\n    // If nav component passed\n    desktopNavigation = localNavDesktop;\n  } else if (localNavMenuItems) {\n    // If props passed for new mega-menu\n    desktopNavigation = localNavMenuItems?.map(\n      ({\n        id,\n        url,\n        title,\n        isSelected,\n        col1Label,\n        col1Items,\n        col2Label,\n        col2Items,\n        col3Label,\n        col3Items,\n        featuredItem,\n      }) => (\n        <NavigatorItemDesktopSDS\n          key={id}\n          url={url}\n          isSelected={isSelected}\n          title={title ?? ''}\n          col1Label={col1Label}\n          col1Items={col1Items}\n          col2Label={col2Label}\n          col2Items={col2Items}\n          col3Label={col3Label}\n          col3Items={col3Items}\n          featuredItem={featuredItem}\n        />\n      )\n    );\n  }\n\n  return (\n    <PrimitivesProvider value={{ Anchor }}>\n      <GlobalHeaderSDS\n        className={className}\n        siteName={siteName}\n        motifScheme={motifScheme}\n        backgroundColor={backgroundColor ?? defaultBackgroundColor}\n        displayed={displayed}\n        logo={shouldShowLogo && (logo ?? defaultLogo)}\n        onToggleExpanded={onToggleExpandedWithLogging}\n        cta={endChildren}\n        localNavDesktop={desktopNavigation}\n        defaultGroupKey={defaultGroupKey ?? defaultDefaultGroupKey}\n        stayOpenInvariant={pathname}\n        trackingSiteName={trackingSiteName ?? context.hostname}\n        endChildrenClassName={searchOpen ? endChildrenClassName : undefined}\n        showGlobalLinks={showGlobalLinks}\n        showNavScreen={showNavScreen}\n        isUrlCurrent={context.isUrlCurrent}\n        navItemAlignment={navItemAlignment}\n        buttonAriaLabel={config?.globalNavButtonAriaLabel}\n        lessMargins={lessMargins}\n        addBottomBorder={addBottomBorder}\n        customIcon={customIcon}\n        headerClassName={headerClassName}\n      >\n        {config && (\n          <GlobalNavGroupScreen\n            motifScheme={motifScheme}\n            backgroundColor={backgroundColor ?? defaultBackgroundColor}\n            localNavMobile={mobileNavigation}\n            localNavMobileFooter={localNavMobileFooter}\n            globalNavHeading={config?.globalNavLabel}\n            navGroups={navGroups as unknown as GlobalNavAllType[]}\n            showMobileGlobalLinks={showGlobalLinks}\n          />\n        )}\n      </GlobalHeaderSDS>\n    </PrimitivesProvider>\n  );\n};\n\nGlobalHeader.displayName = 'GlobalHeader';\n", "import type { SrcSetSizes } from '@snapchat/mw-contentful-client';\nimport {\n  GlobalNavHighlight as GlobalNavHighlightSDS,\n  mobileMaxWidth,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useState } from 'react';\n\nimport type { GlobalNavHighlightAllType } from '../../generated/contentful-types';\nimport { CallToAction } from '../CallToAction/CallToAction';\nimport { useActivation } from '../CallToAction/useActivation';\nimport { Media } from '../Media/Media';\n\n/**\n * Different sizes of images to serve.\n *\n * Somewhat arbitrarily chosen based off of the most popular resolutions from GA. Unfortunately GA\n * doesnt have DPR logged (i think)\n */\nconst hightlightWidths = [480, 960, 1440, 1920, 2560];\n\n/**\n * This is the amount of padding in the global nav highlight. we use this to help the browser more\n * accurately know the final img size so it can pick the optimal image.\n *\n * If the value changes in the future, it's not a huge deal to be exactly the same, as the only\n * difference would be slightly lower or higher resolution images.\n */\nconst hightlightPadding = 452;\n\nexport const globalNavHighlightSizes = `(max-width: ${mobileMaxWidth}px) 100vw, calc(100vw - ${hightlightPadding}px)`;\n\nexport const hightlightSizedSrcSets: SrcSetSizes = {\n  sizeToUrl: hightlightWidths.map(width => ({\n    size: `${width}w`,\n    settings: { quality: 70, width },\n  })),\n  sizes: globalNavHighlightSizes,\n};\n\nexport const GlobalNavHighlight: FC<GlobalNavHighlightAllType> = props => {\n  const [triggered, setTriggered] = useState<number>(0);\n  useActivation({ triggered, ctaProps: props?.cta });\n\n  const { cta, background, cardTitleV2, cardBodyV2 } = props;\n\n  const onActivate = () => {\n    // We increment the triggered here to change the useEffect hash\n    // and force another trigger. We do this since the activation can\n    // be an external link the user may want to open multiple times.\n    setTriggered(triggered + 1);\n  };\n\n  return (\n    <GlobalNavHighlightSDS\n      cardTitleV2={cardTitleV2}\n      cardBodyV2={cardBodyV2}\n      background={<Media {...background} sizedSrcSets={hightlightSizedSrcSets} />}\n      callToAction={<CallToAction {...cta} />}\n      onActivate={onActivate}\n    />\n  );\n};\n\nGlobalNavHighlight.displayName = 'GlobalNavHighlight';\n", "import type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { GlobalComponentsContext } from '../../context/GlobalComponentsContext';\nimport type { CallToActionAllType } from '../../generated/contentful-types';\nimport { Button } from '../Button/Button';\n\nexport const CallToAction: FC<CallToActionAllType> = props => {\n  const { onError } = useContext(GlobalComponentsContext);\n\n  const { presentation, analytics, url } = props;\n\n  if (url) {\n    onError?.(new Error('The \"url\" field on CallToAction is no longer supported'));\n  }\n\n  if (presentation.__typename === 'Button') {\n    return <Button analyticsLabel={analytics?.label} {...presentation} />;\n  }\n\n  onError?.(new Error(`Unable to render CTA presentation \"${presentation.__typename}\"`));\n  return null;\n};\n\nCallToAction.displayName = 'CallToAction';\n", "import type {\n  ButtonSize,\n  ButtonType as ButtonTypeSDS,\n  IconName,\n} from '@snapchat/snap-design-system-marketing';\nimport { Button as ButtonSDS, PrimitivesProvider } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { Action } from '../../analytics/Action';\nimport { GlobalComponentsContext } from '../../context/GlobalComponentsContext';\nimport type { ButtonAllType } from '../../generated/contentful-types';\nimport { PlainRichText } from '../Contentful/PlainRichText';\n\ntype Props = ButtonAllType & {\n  target?: string;\n  analyticsLabel?: string;\n};\n\nexport const Button: FC<Props> = props => {\n  const { Anchor, onEvent } = useContext(GlobalComponentsContext);\n\n  const { url, target, buttonType, theme, title, size, image, iconName } = props;\n\n  const onClick = (): void => {\n    onEvent?.({\n      action: Action.Click,\n      component: 'Button',\n      url,\n      label: props.analyticsLabel,\n    });\n  };\n\n  const type = buttonType ?? theme;\n\n  return (\n    <PrimitivesProvider value={{ Anchor }}>\n      <ButtonSDS\n        link={url}\n        target={target}\n        type={type as ButtonTypeSDS}\n        onClick={onClick}\n        size={size as ButtonSize}\n        image={\n          image?.media\n            ? {\n                ...image?.media,\n                // TODO: These need to be coming from somewhere...\n                width: 24,\n                height: 24,\n              }\n            : undefined\n        }\n        iconName={iconName as IconName}\n      >\n        {title?.json && <PlainRichText document={title.json} />}\n      </ButtonSDS>\n    </PrimitivesProvider>\n  );\n};\n\nButton.displayName = 'Button';\n", "import { useContext, useEffect } from 'react';\n\nimport { Action } from '../../analytics/Action';\nimport { GlobalComponentsContext } from '../../context/GlobalComponentsContext';\nimport type { CallToActionAllType } from '../../generated/contentful-types';\n\ninterface UseActivationProps {\n  /**\n   * Signal to push the trigger. Anything that evaluates to true will trigger the action. Note that\n   * this can be a number to allow for multi-trigger scenarios (like opening a link in a new\n   * window).\n   */\n  triggered: boolean | number;\n  ctaProps?: CallToActionAllType;\n}\n\n/**\n * Hook for activating the action on a CTA.\n *\n * This is useful to manually trigger the CTA for example onClick by another element.\n *\n * Usage:\n *\n * `useActivation({triggered, ...ctaProps});`\n */\nexport const useActivation = ({ triggered, ctaProps }: UseActivationProps): void => {\n  const context = useContext(GlobalComponentsContext);\n  const { onEvent } = context;\n\n  const { presentation, url, analytics } = ctaProps ?? {};\n\n  const usesButton = presentation?.__typename === 'Button';\n\n  useEffect(() => {\n    if (!triggered || !usesButton) {\n      return;\n    }\n\n    const resolvedUrl = url ?? presentation?.url;\n\n    if (onEvent) {\n      onEvent({\n        action: Action.Click,\n        component: 'VirtualCallToAction',\n        label: analytics?.label,\n        url: resolvedUrl,\n      });\n    }\n\n    if (window) {\n      window.location.href = resolvedUrl;\n    }\n  }, [triggered, url, analytics?.label, onEvent, usesButton, presentation?.url]);\n};\n", "import type { ContentfulImageApiParams } from './getImageUrl';\nimport type { SrcSetSettings } from './useContentfulImages';\n\nconst maxSupportedDpr = 2;\n\ninterface DprData {\n  /** Used to store the always used default 1x dpr settings */\n  baseDprSettings: ContentfulImageApiParams;\n  /** Secondary DPR setting to support */\n  additionalDpr?: {\n    dpr: number;\n    settings: ContentfulImageApiParams;\n  };\n}\n\nexport const getDprDataByHeight = (defaultHeight: number, assetHeight: number): DprData => {\n  const result: DprData = {\n    baseDprSettings: { height: defaultHeight },\n  };\n\n  if (assetHeight <= defaultHeight) {\n    return result;\n  }\n\n  // If asset is less than default height, but not big enough to handle our max supported DPR\n  // calculate optimal size\n  if (defaultHeight < assetHeight && assetHeight < defaultHeight * maxSupportedDpr) {\n    result.additionalDpr = {\n      dpr: Number.parseFloat((assetHeight / defaultHeight).toFixed(4)),\n      settings: { height: assetHeight },\n    };\n\n    return result;\n  }\n\n  result.additionalDpr = {\n    dpr: maxSupportedDpr,\n    settings: { height: defaultHeight * maxSupportedDpr },\n  };\n\n  return result;\n};\n\nexport const getDprSrcSetSettingsByHeight = (\n  defaultHeight: number,\n  assetHeight: number,\n  quality?: number\n): SrcSetSettings => {\n  const dprData = getDprDataByHeight(defaultHeight, assetHeight);\n\n  // if there is no additional DPR data (only base setting) return a single image setting\n  if (!dprData.additionalDpr) {\n    return { image: { height: defaultHeight, quality } };\n  }\n\n  return {\n    size: {\n      sizeToUrl: [\n        {\n          size: '1x',\n          settings: { ...dprData.baseDprSettings, quality },\n        },\n        {\n          size: `${dprData.additionalDpr.dpr}x`,\n          settings: { ...dprData.additionalDpr.settings, quality },\n        },\n      ],\n    },\n  };\n};\n", "export type ImageFormat = 'jpg' | 'png' | 'webp' | 'avif';\n\nexport type ImageFit = 'pad' | 'fill' | 'scale' | 'crop' | 'thumb';\n\nexport type ImageResizeFocus =\n  | 'bottom_left'\n  | 'bottom_right'\n  | 'bottom'\n  | 'center'\n  | 'faces'\n  | 'left'\n  | 'right'\n  | 'top_left'\n  | 'top_right'\n  | 'top';\n\n/**\n * Settings object to help interface with Contentful Image API:\n * https://www.contentful.com/developers/docs/references/images-api/\n */\nexport interface ContentfulImageApiParams {\n  progressive?: boolean;\n  width?: number;\n  height?: number;\n  quality?: number;\n  format?: ImageFormat;\n  fit?: ImageFit;\n  resizeFocus?: ImageResizeFocus;\n}\n\n/**\n * See\n * https://www.contentful.com/developers/docs/references/images-api/#/reference/resizing-&-cropping/specify-width-&-height\n */\nconst imgMaxWidth = 4000;\n\nconst imgMaxHeight = 4000;\n\ntype GetImageUrl = (args: {\n  // TODO: Make this optional.\n  imageUrl: string;\n  settings?: ContentfulImageApiParams;\n  currentUrl?: URL;\n}) => string;\n\n/**\n * Used to get an image url from Contentful abiding by the Images API:\n * https://www.contentful.com/developers/docs/references/images-api/ This will not work for images\n * not from Contentful (unless they also follow the same pattern as Contentful's Image API...)\n *\n * @returns Url as a string. Defaults to '' if no imageUrl is provided.\n *\n *   TODO: Consider renaming to \"tryGetImageUrl\".\n */\nexport const getImageUrl: GetImageUrl = ({ imageUrl, settings, currentUrl }) => {\n  if (!settings || !imageUrl) {\n    return imageUrl ?? '';\n  }\n\n  const { progressive, width, height, format, quality = 40, fit } = settings;\n\n  try {\n    const uri = new URL(imageUrl, currentUrl);\n\n    if (format) {\n      uri.searchParams.set('fm', format);\n    }\n\n    if (fit) {\n      uri.searchParams.set('fit', fit);\n    }\n\n    if (quality > 0 && quality <= 100) {\n      uri.searchParams.set('q', String(quality));\n    } else {\n      uri.searchParams.set('q', String(40));\n    }\n\n    if (progressive) {\n      uri.searchParams.set('fl', 'progressive');\n    }\n\n    if (width && 0 < width && width < imgMaxWidth) {\n      uri.searchParams.set('w', String(width));\n    }\n\n    if (height && 0 < height && height < imgMaxHeight) {\n      uri.searchParams.set('h', String(height));\n    }\n\n    return uri.href;\n  } catch (uriError) {\n    console.error('Error parsing URL', imageUrl, uriError);\n    return imageUrl;\n  }\n};\n", "import type { ConnectionType } from '@snapchat/client-hints';\nimport {\n  supportsAvif as supportsAvifCheck,\n  supportsWebP as supportsWebpCheck,\n} from '@snapchat/client-hints';\nimport { BrowserFeaturesContext } from '@snapchat/snap-design-system-marketing';\nimport merge from 'lodash-es/merge';\nimport { useCallback, useContext } from 'react';\n\nimport type { ContentfulImageApiParams } from './getImageUrl';\nimport { getImageUrl } from './getImageUrl';\n\nconst slowConnections = new Set<ConnectionType>(['slow-2g', '2g', '3g']);\n\nexport interface ImageSource {\n  url: string;\n  type: string;\n  sizes?: string;\n  media?: string;\n}\n\nexport interface ImageSources {\n  sources: ImageSource[];\n  default: string;\n  defaultSrcSet?: string;\n  defaultSizes?: string;\n}\n\n/**\n * Grouping between the image size (based on width, height or DPI (x)) to the Contentful api\n * settings.\n */\ninterface SizeToImageParams {\n  /**\n   * Size breakpoints. Must be consistent with all other sizes in the same srcset, e.g. all width\n   * based `w` or all dpr based `x`\n   */\n  size: string;\n  /** Image api settings for the url at this size breakpoint. */\n  settings: ContentfulImageApiParams;\n}\n\n/** Helper function that gets the best img format for a given url. */\nexport type GetBestImgSrc = (\n  url?: string,\n  settings?: ContentfulImageApiParams\n) => string | undefined;\n\n/**\n * Size setting object that specifies a size to url mapping, as well a sizes array of all sizes we\n * want to handle.\n */\nexport interface SrcSetSizes {\n  sizeToUrl: SizeToImageParams[];\n  sizes?: string;\n}\n\n/** Size settings to get srcSet with sizes. */\ninterface SrcSetSettingsBySizes {\n  size: SrcSetSizes;\n  media?: string;\n  quality?: number;\n}\n\n/** Settings for getting srcSet without sizes. */\n\ninterface SrcSetSettingsByImage {\n  image: ContentfulImageApiParams;\n}\n\n/**\n * Settings object that controls image settings OR size settings. If you have size and image, it\n * only checks size because each size can technically have its own image settings.\n *\n * This is used to set width/height and other properties per contentful image API.\n */\nexport type SrcSetSettings = SrcSetSettingsByImage | SrcSetSettingsBySizes;\n\n/**\n * Helper function that returns an ImageSources object. Can handle sizes or no sizes based on the\n * settings passed in.\n */\nexport type GetImageSources = (url?: string, settings?: SrcSetSettings) => ImageSources | undefined;\n\nexport const getSrcSetUrl = (\n  url: string,\n  settings?: SrcSetSettings,\n  // This overrides anything in settings\n  format?: 'webp' | 'avif' | 'png' | 'jpg'\n): string => {\n  if (!url) return '';\n\n  if (!!settings && 'size' in settings && settings.size) {\n    return settings.size.sizeToUrl\n      .map(({ size, settings }) => {\n        if (size) {\n          return `${getImageUrl({\n            imageUrl: url,\n            settings: { ...settings, format: format ?? settings?.format },\n          })} ${size}`;\n        }\n\n        return getImageUrl({\n          imageUrl: url,\n          settings: { ...settings, format: format ?? settings?.format },\n        });\n      })\n      .join(',');\n  }\n  const image = !!settings && 'image' in settings && settings.image ? settings.image : undefined;\n  return getImageUrl({\n    imageUrl: url,\n    settings: {\n      ...image,\n      format: format ?? image?.format,\n    },\n  });\n};\n\ninterface ContentfulImageHelpers {\n  getImageSources: GetImageSources;\n  getBestBgImgSrc: GetBestImgSrc;\n}\n\n/** Properties needed for determining how a contentful URL can be transformed. */\nexport type ImageTransformProps = {\n  supportsWebP: boolean;\n  supportsAvif: boolean;\n  isSlowConnection: boolean;\n};\n\n/**\n * Hook that returns all the helper functions you need to use sourcesets and contentful images.\n * Technically doesn't need to be a hook, but if we move BrowserFeatures to common in the future, we\n * will need to make it a hook, so leaving as is... for now.\n *\n * Will try to use browser hints to determine the best image format and quality settings.\n *\n * @returns `getImageSources`: Helper function that returns ImageSources object for using srcsets.\n *\n *   `getBestBgImgSrc`: Returns the best possible img src url for the users browser when using\n *   background-image css.\n */\nexport function useContentfulImages(): ContentfulImageHelpers {\n  const browserFeatures = useContext(BrowserFeaturesContext);\n\n  // NOTE: This isn't a good solution because in pretty much all usecases this\n  // won't be populated yet. But, it's better than nothing. I (Alex) tried to\n  // do an async state update, but I get all sort of warnings and errors about\n  // async state updates and nothing renders in tests.\n  const connectionType = browserFeatures.getCachedHighEntropyHints()?.connection;\n\n  const isSlowConnection =\n    browserFeatures.getLowEntropyHints().saveData ||\n    !!(connectionType && slowConnections.has(connectionType));\n\n  const lowEntropyBrowserHints = browserFeatures.getLowEntropyHints();\n\n  return useContentfulImagesInternal({\n    isSlowConnection,\n    supportsAvif: supportsAvifCheck(lowEntropyBrowserHints),\n    supportsWebP: supportsWebpCheck(lowEntropyBrowserHints),\n  });\n}\n\n/**\n * DO NOT USE THIS HOOK DIRECTLY. Use `useContentfulImages` instead. This is exported for testing\n * purposes.\n */\nexport const useContentfulImagesInternal = (props: ImageTransformProps): ContentfulImageHelpers => {\n  const { isSlowConnection, supportsAvif, supportsWebP } = props;\n\n  const getImageSources = useCallback<GetImageSources>(\n    (url, settings): ImageSources | undefined => {\n      if (!url) {\n        return undefined;\n      }\n\n      // Override the quality setting if the connection is slow.\n      if (settings && isSlowConnection) {\n        if ('image' in settings) {\n          merge(settings, { image: { quality: 10 } });\n        } else {\n          settings.quality = 10;\n        }\n      }\n\n      const isSvg = url.toLowerCase().endsWith('.svg');\n\n      let sources: ImageSource[] = [];\n\n      if (isSvg) {\n        sources = [{ type: 'image/svg+xml', url }];\n      } else {\n        const sizes = !!settings && 'size' in settings ? settings?.size?.sizes : undefined;\n        const media = !!settings && 'media' in settings ? settings?.media : undefined;\n\n        // It's always safe to register webP. It will be skipped if the browser doesn't support it.\n        sources.unshift({\n          type: 'image/webp',\n          url: getSrcSetUrl(url, settings, 'webp'),\n          sizes,\n          media,\n        });\n\n        // Avif should override webp. Can't always add it because of the IOS Safari bug.\n        if (supportsAvif) {\n          sources.unshift({\n            type: 'image/avif',\n            url: getSrcSetUrl(url, settings, 'avif'),\n            sizes,\n            media,\n          });\n        }\n      }\n\n      let defaultSettings: SrcSetSettings | undefined =\n        settings && 'image' in settings ? { image: settings?.image } : undefined;\n\n      // If we passed in size settings, find the smallest setting and use it on the <img> tags src\n      if (!!settings && 'size' in settings && settings.size) {\n        const lowestSettings = settings.size.sizeToUrl.reduce((prev, cur) => {\n          if (!prev) {\n            return cur;\n          }\n\n          return Number.parseInt(prev.size) < Number.parseInt(cur.size) ? prev : cur;\n        });\n        defaultSettings = { image: lowestSettings.settings };\n      }\n\n      return {\n        sources,\n        // Only pass in settings if there are NO size settings, since the default url is used\n        // on the <img src={here} /> so it doesn't take srcset\n        default: getSrcSetUrl(url, defaultSettings),\n      };\n    },\n    [isSlowConnection, supportsAvif]\n  );\n\n  const getBestBgImgSrc = useCallback(\n    (url?: string, settings?: ContentfulImageApiParams) => {\n      if (!url) {\n        return undefined;\n      }\n\n      if (url.toLowerCase().endsWith('.svg')) {\n        return url;\n      }\n\n      // Default to jpg since some images are png which can be large.\n      const bestFormat = (supportsAvif && 'avif') || (supportsWebP && 'webp') || 'jpg';\n\n      const finalSettings = { ...settings };\n\n      if (bestFormat) {\n        finalSettings.format = bestFormat;\n      }\n\n      return getImageUrl({ imageUrl: url, settings: finalSettings });\n    },\n    [supportsAvif, supportsWebP]\n  );\n\n  return {\n    getImageSources,\n    getBestBgImgSrc,\n  };\n};\n", "import type { SrcSetSizes } from '@snapchat/mw-contentful-client';\nimport { useContentfulImages } from '@snapchat/mw-contentful-client';\nimport { Media as MediaSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { GlobalComponentsContext } from '../../context/GlobalComponentsContext';\nimport type { AssetAllType } from '../../generated/contentful-types';\nimport { isImageUrl, isVideoUrl } from './mediaUtils';\n\ntype MediaWithSizes = AssetAllType & { sizedSrcSets?: SrcSetSizes };\n\nexport const Media: FC<MediaWithSizes> = props => {\n  const { onError } = useContext(GlobalComponentsContext);\n  const { contentType, url, description, sizedSrcSets: sizeSettings } = props;\n  const { getImageSources } = useContentfulImages();\n\n  if (isImageUrl(contentType)) {\n    //TODO: eventaully move to using a PictureSDS and VideoSDS ENTWEB-6350\n    let imgSrcs = getImageSources(url);\n\n    if (sizeSettings) {\n      imgSrcs = getImageSources(url, { size: sizeSettings });\n    }\n\n    return <MediaSDS sourceType={contentType} imgSrcs={imgSrcs} altText={description} />;\n  }\n\n  if (isVideoUrl(contentType)) {\n    return (\n      <MediaSDS\n        sourceType={contentType}\n        videoSource={url}\n        showVideoControls={true}\n        maxHeight={600}\n        altText={description}\n      />\n    );\n  }\n  onError?.(`Unsupported Mdea type ${contentType}`);\n  return null;\n};\n", "import type { SrcSetSizes } from '@snapchat/mw-contentful-client';\n\nexport const isVideoUrl = (contentType: string | null): boolean => {\n  if (!contentType) return false;\n  return contentType.startsWith('video');\n};\n\nexport const isImageUrl = (contentType: string | null): boolean => {\n  if (!contentType) return false;\n  return contentType.startsWith('image');\n};\n\nexport interface MediaPreloadSettings {\n  sizedSrcSets?: SrcSetSizes;\n  skipPreload?: () => boolean;\n}\n", "import type { BackgroundColor, MotifScheme } from '@snapchat/snap-design-system-marketing';\nimport {\n  GlobalHeaderContext,\n  GlobalNavScreen as GlobalNavScreenSDS,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC, ReactNode } from 'react';\nimport { useContext } from 'react';\n\nimport type { GlobalNavAllType } from '../../generated/contentful-types';\nimport { GlobalNavGroupCollection } from '../GlobalNavGroupCollection/GlobalNavGroupCollection';\nimport { GlobalNavHighlightCollection } from '../GlobalNavHighlightCollection/GlobalNavHighlightCollection';\n\ninterface GlobalNavGroupScreenProps {\n  motifScheme?: MotifScheme;\n  /** @deprecated Use motifScheme instead. */\n  backgroundColor?: BackgroundColor;\n  localNavMobile: ReactNode;\n  localNavMobileFooter?: ReactNode;\n  navGroups: readonly GlobalNavAllType[];\n  globalNavHeading: string;\n  showMobileGlobalLinks?: boolean;\n}\n\nexport const GlobalNavGroupScreen: FC<GlobalNavGroupScreenProps> = ({\n  motifScheme,\n  backgroundColor,\n  localNavMobile,\n  localNavMobileFooter,\n  navGroups,\n  globalNavHeading,\n  showMobileGlobalLinks,\n}) => {\n  const { toggleExpanded } = useContext(GlobalHeaderContext);\n  const onNavClose = toggleExpanded ?? (() => null);\n  return (\n    <GlobalNavScreenSDS\n      localNavMobile={localNavMobile}\n      localNavMobileFooter={localNavMobileFooter}\n      onNavClose={onNavClose}\n      motifScheme={motifScheme}\n      backgroundColor={backgroundColor}\n      globalNavHeading={globalNavHeading}\n      highlight={<GlobalNavHighlightCollection navGroups={navGroups} />}\n      globalNav={<GlobalNavGroupCollection navGroups={navGroups} />}\n      showMobileGlobalLinks={showMobileGlobalLinks}\n    />\n  );\n};\nGlobalNavGroupScreen.displayName = 'GlobalNavGroupScreen';\n", "import baseEach from './_baseEach.js';\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n  var result = [];\n  baseEach(collection, function(value, index, collection) {\n    if (predicate(value, index, collection)) {\n      result.push(value);\n    }\n  });\n  return result;\n}\n\nexport default baseFilter;\n", "/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n *   return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\nfunction negate(predicate) {\n  if (typeof predicate != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  return function() {\n    var args = arguments;\n    switch (args.length) {\n      case 0: return !predicate.call(this);\n      case 1: return !predicate.call(this, args[0]);\n      case 2: return !predicate.call(this, args[0], args[1]);\n      case 3: return !predicate.call(this, args[0], args[1], args[2]);\n    }\n    return !predicate.apply(this, args);\n  };\n}\n\nexport default negate;\n", "import arrayFilter from './_arrayFilter.js';\nimport baseFilter from './_baseFilter.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\nimport negate from './negate.js';\n\n/**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n *   { 'user': 'barney', 'age': 36, 'active': false },\n *   { 'user': 'fred',   'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\nfunction reject(collection, predicate) {\n  var func = isArray(collection) ? arrayFilter : baseFilter;\n  return func(collection, negate(baseIteratee(predicate, 3)));\n}\n\nexport default reject;\n", "import reject from 'lodash-es/reject';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { GlobalComponentsContext } from '../../context/GlobalComponentsContext';\nimport type { GlobalNavAllType } from '../../generated/contentful-types';\nimport { GlobalNavGroup } from '../GlobalNavGroup/GlobalNavGroup';\n\n/** Returns a sorted list of nav groups. */\nexport function sortNavGroups(\n  navGroups: readonly GlobalNavAllType[],\n  isPromoted: (group: GlobalNavAllType) => boolean\n): GlobalNavAllType[] {\n  return [...navGroups.filter(isPromoted), ...reject(navGroups, isPromoted)];\n}\n\n/** Returns a filtered list of nav groups that should remain visible */\nconst filterNavGroups = (\n  navGroups: readonly GlobalNavAllType[],\n  hostname: string\n): GlobalNavAllType[] =>\n  navGroups.filter(\n    navGroup => !navGroup.hideHostnameRegex || new RegExp(navGroup.hideHostnameRegex).test(hostname)\n  );\n\ninterface Props {\n  navGroups: ReadonlyArray<GlobalNavAllType>;\n}\n\nexport const GlobalNavGroupCollection: FC<Props> = ({ navGroups }) => {\n  const { hostname } = useContext(GlobalComponentsContext);\n  const isPromoted = (group: GlobalNavAllType) =>\n    !!group.primaryHostnameRegex && new RegExp(group.primaryHostnameRegex).test(hostname);\n  const filteredNavGroups = filterNavGroups(navGroups, hostname);\n  const sortedNavGroups = sortNavGroups(filteredNavGroups, isPromoted);\n  return (\n    <>\n      {sortedNavGroups.map(props => (\n        <GlobalNavGroup key={props.groupKey} {...props} />\n      ))}\n    </>\n  );\n};\nGlobalNavGroupCollection.displayName = 'GlobalNavGroupCollection';\n", "import { GlobalNavGroup as GlobalNavGroupSDS } from '@snapchat/snap-design-system-marketing';\nimport { type FC, useContext } from 'react';\n\nimport { GlobalComponentsContext } from '../../context/GlobalComponentsContext';\nimport type { GlobalNavAllType } from '../../generated/contentful-types';\nimport { GlobalNavHighlight } from '../GlobalNavHighlight/GlobalNavHighlight';\nimport { GlobalNavItem } from '../GlobalNavItem/GlobalNavItem';\n\nexport const GlobalNavGroup: FC<GlobalNavAllType> = ({\n  title,\n  groupKey,\n  itemsCollection,\n  highlight,\n}) => {\n  const { isUrlCurrent } = useContext(GlobalComponentsContext);\n\n  // TODO: This wasn't done here before. Might screw things up because of how bad the highlights\n  // look on mobile. Should ask design before going live with this.\n  const mobileNavHighlight = <GlobalNavHighlight {...highlight} />;\n  return (\n    <GlobalNavGroupSDS\n      navGroupKey={groupKey}\n      title={title}\n      mobileHighlight={mobileNavHighlight}\n      isExpandable\n      isActive={itemsCollection?.items.some(item => isUrlCurrent?.(item.url))}\n    >\n      {itemsCollection?.items.map((itemProps, i) => (\n        <GlobalNavItem key={`nav-item-${i}`} {...itemProps} />\n      ))}\n    </GlobalNavGroupSDS>\n  );\n};\n\nGlobalNavGroup.displayName = 'GlobalNavGroup';\n", "import { GlobalNavItem as GlobalNavItemSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC, MouseEventHandler } from 'react';\nimport { useContext } from 'react';\n\nimport { Action } from '../../analytics/Action';\nimport { GlobalComponentsContext } from '../../context/GlobalComponentsContext';\nimport type { GlobalNavItemAllType } from '../../generated/contentful-types';\n\nconst isHiddenNavItem = (hideHostnameRegex: string | undefined, hostname: string) => {\n  return !!hideHostnameRegex && new RegExp(hideHostnameRegex).test(hostname);\n};\n\nexport const GlobalNavItem: FC<GlobalNavItemAllType> = ({\n  hideHostnameRegex,\n  title,\n  url,\n  analytics,\n}) => {\n  const { onEvent, isUrlCurrent } = useContext(GlobalComponentsContext);\n\n  const onClick: MouseEventHandler = (): void => {\n    if (onEvent) {\n      onEvent({\n        action: Action.Click,\n        component: 'GlobalNavItem',\n        label: analytics?.label,\n        url,\n      });\n    }\n  };\n\n  return !isHiddenNavItem(hideHostnameRegex, window.location.hostname) ? (\n    <GlobalNavItemSDS\n      title={title}\n      href={url}\n      showExternalIcon={false}\n      onClick={onClick}\n      isSelected={isUrlCurrent?.(url)}\n    />\n  ) : null;\n};\n\nGlobalNavItem.displayName = 'GlobalNavItem';\n", "// eslint-disable-next-line max-len\nimport { GlobalNavHighlightReel as GlobalNavHighlightReelSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC, ReactElement } from 'react';\n\nimport type { GlobalNavAllType } from '../../generated/contentful-types';\nimport { GlobalNavHighlight } from '../GlobalNavHighlight/GlobalNavHighlight';\n\ninterface Props {\n  navGroups: ReadonlyArray<GlobalNavAllType>;\n}\n\nexport const GlobalNavHighlightCollection: FC<Props> = props => {\n  const highlights = new Map<string, ReactElement>();\n\n  props.navGroups\n    .filter(group => !!group.highlight)\n    .forEach(navGroup => {\n      highlights.set(navGroup.groupKey, <GlobalNavHighlight {...navGroup.highlight} />);\n    });\n\n  return <GlobalNavHighlightReelSDS highlights={highlights} />;\n};\nGlobalNavHighlightCollection.displayName = 'GlobalNavHighlightCollection';\n", "import { getImageUrl, getSrcSetUrl } from '@snapchat/mw-contentful-client';\nimport { useContext, useEffect } from 'react';\n\nimport { GlobalComponentsContext } from '../../context/GlobalComponentsContext';\nimport type { AssetAllType } from '../../generated/contentful-types';\nimport type { MediaPreloadSettings } from './mediaUtils';\nimport { isImageUrl, isVideoUrl } from './mediaUtils';\n\n/**\n * Hook to preload images from contentful. Pre-loading images not from contentful will break because\n * we use the Image API to get certain formats and sizes.\n */\nexport const useMediaPreload = (\n  media?: Array<AssetAllType>,\n  isImportant = false,\n  settings?: MediaPreloadSettings\n): void => {\n  const { onError } = useContext(GlobalComponentsContext);\n\n  useEffect(() => {\n    if (!document || !media) {\n      return;\n    }\n\n    if (settings?.skipPreload?.()) {\n      return;\n    }\n\n    if (isImportant) {\n      const preloads = media.map(asset => {\n        const link = document.createElement('link');\n        link.rel = 'preload';\n        link.as = isVideoUrl(asset.contentType) ? 'video' : 'image';\n        link.href = asset.url;\n        return link;\n      });\n\n      document.head.append(...preloads);\n    } else {\n      for (const asset of media) {\n        if (isVideoUrl(asset.contentType)) {\n          const video = document.createElement('video');\n          const source = document.createElement('source');\n          source.type = asset.contentType;\n          source.src = asset.url;\n          video.appendChild(source);\n          video.load();\n        } else if (isImageUrl(asset.contentType)) {\n          if (!asset.url) return;\n          const picture = document.createElement('picture');\n          const avifSrc = document.createElement('source');\n          const webpSrc = document.createElement('source');\n          const img = document.createElement('img');\n\n          if (asset.url.endsWith('.svg')) {\n            //No load necessary. this triggers browsers to load the img based on source\n            img.src = asset.url;\n          } else if (settings?.sizedSrcSets) {\n            const { sizedSrcSets: size } = settings;\n\n            avifSrc.srcset = getSrcSetUrl(asset.url, { size }, 'avif');\n            avifSrc.type = 'image/avif';\n            webpSrc.srcset = getSrcSetUrl(asset.url, { size }, 'webp');\n            webpSrc.type = 'image/webp';\n\n            if (size.sizes) {\n              avifSrc.sizes = size.sizes;\n              webpSrc.sizes = size.sizes;\n              img.sizes = size.sizes;\n            }\n\n            // we have to append after the srcs for source are set or else safari eagerly loads it all\n            picture.appendChild(avifSrc);\n            picture.appendChild(webpSrc);\n            picture.appendChild(img);\n\n            //No load necessary (or even setting src). this triggers browsers to load the img based on source\n            img.srcset = getSrcSetUrl(asset.url, { size }, 'jpg');\n          } else {\n            avifSrc.srcset = getImageUrl({ imageUrl: asset.url, settings: { format: 'avif' } });\n            avifSrc.type = 'image/avif';\n            webpSrc.srcset = getImageUrl({ imageUrl: asset.url, settings: { format: 'webp' } });\n            webpSrc.type = 'image/webp';\n\n            // we have to append after the srcs for source are set or else safari eagerly loads it all\n            picture.appendChild(avifSrc);\n            picture.appendChild(webpSrc);\n            picture.appendChild(img);\n\n            //No load necessary. this triggers browsers to load the img based on source\n            img.src = asset.url;\n          }\n        } else {\n          onError?.(`Cannot preload assets of type ${asset.contentType}`);\n        }\n      }\n    }\n  }, [media, isImportant, onError, settings]);\n};\n", "import type { Operation } from \"../core/index.js\";\n\n/**\n * Advanced mode: a function that implements the strategy for calculating delays\n * for particular responses.\n */\nexport interface DelayFunction {\n  (count: number, operation: Operation, error: any): number;\n}\n\nexport interface DelayFunctionOptions {\n  /**\n   * The number of milliseconds to wait before attempting the first retry.\n   *\n   * Delays will increase exponentially for each attempt.  E.g. if this is\n   * set to 100, subsequent retries will be delayed by 200, 400, 800, etc,\n   * until they reach maxDelay.\n   *\n   * Note that if jittering is enabled, this is the _average_ delay.\n   *\n   * Defaults to 300.\n   */\n  initial?: number;\n\n  /**\n   * The maximum number of milliseconds that the link should wait for any\n   * retry.\n   *\n   * Defaults to Infinity.\n   */\n  max?: number;\n\n  /**\n   * Whether delays between attempts should be randomized.\n   *\n   * This helps avoid thundering herd type situations by better distributing\n   * load during major outages.\n   *\n   * Defaults to true.\n   */\n  jitter?: boolean;\n}\n\nexport function buildDelayFunction(\n  delayOptions?: DelayFunctionOptions\n): DelayFunction {\n  const { initial = 300, jitter = true, max = Infinity } = delayOptions || {};\n  // If we're jittering, baseDelay is half of the maximum delay for that\n  // attempt (and is, on average, the delay we will encounter).\n  // If we're not jittering, adjust baseDelay so that the first attempt\n  // lines up with initialDelay, for everyone's sanity.\n  const baseDelay = jitter ? initial : initial / 2;\n\n  return function delayFunction(count: number) {\n    let delay = Math.min(max, baseDelay * 2 ** count);\n    if (jitter) {\n      // We opt for a full jitter approach for a mostly uniform distribution,\n      // but bound it within initialDelay and delay for everyone's sanity.\n      delay = Math.random() * delay;\n    }\n\n    return delay;\n  };\n}\n", "import type { Operation } from \"../core/index.js\";\n\n/**\n * Advanced mode: a function that determines both whether a particular\n * response should be retried.\n */\nexport interface RetryFunction {\n  (count: number, operation: Operation, error: any): boolean | Promise<boolean>;\n}\n\nexport interface RetryFunctionOptions {\n  /**\n   * The max number of times to try a single operation before giving up.\n   *\n   * Note that this INCLUDES the initial request as part of the count.\n   * E.g. maxTries of 1 indicates no retrying should occur.\n   *\n   * Defaults to 5.  Pass Infinity for infinite retries.\n   */\n  max?: number;\n\n  /**\n   * Predicate function that determines whether a particular error should\n   * trigger a retry.\n   *\n   * For example, you may want to not retry 4xx class HTTP errors.\n   *\n   * By default, all errors are retried.\n   */\n  retryIf?: (error: any, operation: Operation) => boolean | Promise<boolean>;\n}\n\nexport function buildRetryFunction(\n  retryOptions?: RetryFunctionOptions\n): RetryFunction {\n  const { retryIf, max = 5 } = retryOptions || ({} as RetryFunctionOptions);\n  return function retryFunction(count, operation, error) {\n    if (count >= max) return false;\n    return retryIf ? retryIf(error, operation) : !!error;\n  };\n}\n", "import type { Operation, FetchResult, NextLink } from \"../core/index.js\";\nimport { ApolloLink } from \"../core/index.js\";\nimport type { ObservableSubscription } from \"../../utilities/index.js\";\nimport { Observable } from \"../../utilities/index.js\";\nimport type { DelayFunction, DelayFunctionOptions } from \"./delayFunction.js\";\nimport { buildDelayFunction } from \"./delayFunction.js\";\nimport type { RetryFunction, RetryFunctionOptions } from \"./retryFunction.js\";\nimport { buildRetryFunction } from \"./retryFunction.js\";\nimport type { SubscriptionObserver } from \"zen-observable-ts\";\n\nexport namespace RetryLink {\n  export interface Options {\n    /**\n     * Configuration for the delay strategy to use, or a custom delay strategy.\n     */\n    delay?: DelayFunctionOptions | DelayFunction;\n\n    /**\n     * Configuration for the retry strategy to use, or a custom retry strategy.\n     */\n    attempts?: RetryFunctionOptions | RetryFunction;\n  }\n}\n\n/**\n * Tracking and management of operations that may be (or currently are) retried.\n */\nclass RetryableOperation {\n  private retryCount: number = 0;\n  private currentSubscription: ObservableSubscription | null = null;\n  private timerId: number | undefined;\n\n  constructor(\n    private observer: SubscriptionObserver<FetchResult>,\n    private operation: Operation,\n    private forward: NextLink,\n    private delayFor: DelayFunction,\n    private retryIf: RetryFunction\n  ) {\n    this.try();\n  }\n\n  /**\n   * Stop retrying for the operation, and cancel any in-progress requests.\n   */\n  public cancel() {\n    if (this.currentSubscription) {\n      this.currentSubscription.unsubscribe();\n    }\n    clearTimeout(this.timerId);\n    this.timerId = undefined;\n    this.currentSubscription = null;\n  }\n\n  private try() {\n    this.currentSubscription = this.forward(this.operation).subscribe({\n      next: this.observer.next.bind(this.observer),\n      error: this.onError,\n      complete: this.observer.complete.bind(this.observer),\n    });\n  }\n\n  private onError = async (error: any) => {\n    this.retryCount += 1;\n\n    // Should we retry?\n    const shouldRetry = await this.retryIf(\n      this.retryCount,\n      this.operation,\n      error\n    );\n    if (shouldRetry) {\n      this.scheduleRetry(this.delayFor(this.retryCount, this.operation, error));\n      return;\n    }\n\n    this.observer.error(error);\n  };\n\n  private scheduleRetry(delay: number) {\n    if (this.timerId) {\n      throw new Error(`RetryLink BUG! Encountered overlapping retries`);\n    }\n\n    this.timerId = setTimeout(() => {\n      this.timerId = undefined;\n      this.try();\n    }, delay) as any as number;\n  }\n}\n\nexport class RetryLink extends ApolloLink {\n  private delayFor: DelayFunction;\n  private retryIf: RetryFunction;\n\n  constructor(options?: RetryLink.Options) {\n    super();\n    const { attempts, delay } = options || ({} as RetryLink.Options);\n    this.delayFor =\n      typeof delay === \"function\" ? delay : buildDelayFunction(delay);\n    this.retryIf =\n      typeof attempts === \"function\" ? attempts : buildRetryFunction(attempts);\n  }\n\n  public request(\n    operation: Operation,\n    nextLink: NextLink\n  ): Observable<FetchResult> {\n    return new Observable((observer) => {\n      const retryable = new RetryableOperation(\n        observer,\n        operation,\n        nextLink,\n        this.delayFor,\n        this.retryIf\n      );\n      return () => {\n        retryable.cancel();\n      };\n    });\n  }\n}\n", "import type { ApolloClient, NormalizedCacheObject } from '@apollo/client';\nimport { ApolloProvider } from '@apollo/client';\nimport { injectGlobal } from '@emotion/css';\nimport type { AsyncDataController } from '@snapchat/async-data';\nimport { AsyncDataContext } from '@snapchat/async-data-browser';\nimport type { BrowserInfo } from '@snapchat/client-hints';\nimport { useBrowserLayoutEffect } from '@snapchat/mw-common/client';\nimport type { GlobalComponentsProps } from '@snapchat/mw-global-components';\nimport { GlobalComponentsContextProvider } from '@snapchat/mw-global-components';\nimport type { MapOf } from '@snapchat/snap-design-system-marketing';\nimport {\n  BrowserFeaturesContext,\n  defaultPrimitivesContext,\n  getMotifWithFontFallbacks,\n  GlobalHeaderContext,\n  PrimitivesContext,\n} from '@snapchat/snap-design-system-marketing';\nimport type { History } from 'history';\nimport type { FC, PropsWithChildren } from 'react';\nimport { StrictMode, useEffect, useRef, useState } from 'react';\nimport type { HelmetData } from 'react-helmet-async';\nimport { HelmetProvider } from 'react-helmet-async';\nimport type { StaticRouterContext } from 'react-router';\nimport { BrowserRouter, StaticRouter, useHistory } from 'react-router-dom';\n\nimport { Site } from '@snapchat/mw-common';\nimport type { AppProviderProps, PassThroughAppProviderProps } from './AppContext';\nimport { AppContext, defaultContext } from './AppContext';\nimport { AppPortal } from './AppPortal';\nimport { Anchor } from './components/Anchor';\nimport { Cart } from './components/Cart';\nimport { CartProvider } from './components/Cart/CartProvider';\nimport type { ShopifyResponse } from './components/Cart/types';\nimport type { ConsumerContextProps } from './components/ConsumerContextProvider';\nimport {\n  ConsumerContext,\n  filtersToUrlParams,\n  urlParamsToFilters,\n} from './components/ConsumerContextProvider';\nimport {\n  ContentfulLivePreview,\n  ContentfulLivePreviewContextProvider,\n} from './components/ContentfulLivePreview';\nimport { CookiePopup } from './components/CookiePopup';\nimport { DirectionDirective } from './components/DirectionDirective/DirectionDirective';\nimport { directionFromLocale } from './components/DirectionDirective/languageDirection';\nimport { Favicon } from './components/Favicon';\nimport { Footer } from './components/FooterWrapper';\nimport { HardcodedComponents } from './components/HardcodedComponents/HardcodedComponents';\nimport { Header } from './components/Header';\nimport { IntlProvider } from './components/IntlProvider';\nimport { LanguageDirective } from './components/LanguageDirective/LanguageDirective';\nimport { LoadingBar } from './components/LoadingBar';\nimport { LogAdBlockUsage } from './components/logging/LogAdBlockUsage';\nimport { LogCspViolation } from './components/logging/LogCspViolation';\nimport { LogPageLoad } from './components/logging/LogPageLoad';\nimport { LogScrollDepth } from './components/logging/LogScrollDepth';\nimport { MotifRootWrapper } from './components/MotifRootWrapper/MotifRootWrapper';\nimport { ShopifyProvider } from './components/ShopifyProvider';\nimport { Viewport } from './components/Viewport';\n\nimport { Config } from './config';\nimport { ElementLocation } from './context/ElementLocationContext/ElementLocationContext';\nimport type { PageLayoutContextProps } from './context/PageLayoutContext';\nimport { PageLayoutProvider } from './context/PageLayoutProvider';\nimport { SitewideConfigurationProvider } from './context/SitewideConfiguration/SitewideConfigurationProvider';\nimport { ErrorBoundary } from './ErrorBoundary';\nimport { FontChecker } from './helpers/FontChecker';\nimport { createIsCurrentUrl, isLocalUrl } from './helpers/getLocalPath';\nimport type { LoggingContext } from './helpers/logging';\nimport {\n  logEvent as internalLogEvent,\n  logError,\n  logger,\n  SubscribedEventType,\n} from './helpers/logging';\nimport { googleAnalyticsEventName } from './helpers/logging/google/GoogleEventListener';\nimport { getCookieSettingsUrl } from './helpers/trackingCookies';\nimport { SingleCallbackCacheContext } from './hooks/useSingleCallback';\nimport { Routes } from './Routes';\nimport { StinsonFontStylesheet } from './sites/stinson/StinsonFontStylesheet';\nimport { getSiteFontFallbacks } from './styles/getSiteFontFallbacks';\nimport { getSiteMotif } from './styles/getSiteMotif';\nimport type { Personas } from './types/personas';\nimport { ContentfulContext, getContentfulContext } from './utils/contentful/ContentfulContext';\nimport { initWebVitalsLogging } from './utils/initWebVitalsLogging';\nimport type { SingleCallbackCache } from './utils/singleCallback';\nimport { getTracer } from './utils/tracing/tracer';\nimport { userAgentHintsFromBowser } from './utils/userAgent/userAgentHints';\n\n/**\n * App component props.\n *\n * This includes anything that can be used by sub-components in the AppProviderProps, and the others\n * are listed here.\n */\nexport interface AppProps extends PassThroughAppProviderProps {\n  routerContext: StaticRouterContext;\n  helmetContext: HelmetData;\n  shopifyData?: ShopifyResponse;\n  apolloClient: ApolloClient<NormalizedCacheObject>;\n  globalApolloClient?: ApolloClient<NormalizedCacheObject>;\n  onHistory?: (history: History<unknown>) => void;\n  browserFeatures: BrowserInfo;\n  asyncDataController: AsyncDataController;\n  pageLayoutContext: PageLayoutContextProps;\n  globalPrivacyControl: boolean;\n  singleCallbackCache: SingleCallbackCache;\n  /** Initial value of personas that we get from APP_STATE */\n  initialPersonas?: Personas;\n  /** Function for server-side render to set the APP_STATE value for personas */\n  updatePersonas?: (personas: Personas) => void;\n}\n\nexport const HistoryCaptor: FC<{ onHistory: AppProps['onHistory'] }> = ({ onHistory }) => {\n  const history = useHistory();\n  onHistory?.(history);\n  return null;\n};\n\n/** Entry point for the react application. */\nexport const App: FC<AppProps> = ({\n  getCurrentUrl,\n  currentLocale,\n  supportedLocales,\n  routerContext,\n  userLocation,\n  shopifyData,\n  helmetContext,\n  pageLayoutContext,\n  apolloClient,\n  globalApolloClient,\n  siteData,\n  browserFeatures,\n  onRedirect,\n  onHistory,\n  asyncDataController,\n  globalPrivacyControl,\n  cookieManager,\n  getUserInfo,\n  getPersona,\n  createUuidV4,\n  singleCallbackCache,\n  onHlsVideo,\n  initialPersonas,\n  updatePersonas: updatePersonasProp,\n}) => {\n  const appRenderTrace = getTracer().startSpan('appRender');\n\n  const url = new URL(getCurrentUrl());\n\n  // TODO: Make the Router a parameter in AppProps and just pass the relevant\n  // routers as props.\n  let Router: FC<PropsWithChildren>;\n\n  if (Config.isClient) {\n    // eslint-disable-next-line react/display-name\n    Router = ({ children }) => (\n      <BrowserRouter>\n        <HistoryCaptor onHistory={onHistory} />\n        {children}\n      </BrowserRouter>\n    );\n  } else {\n    // eslint-disable-next-line react/display-name\n    Router = ({ children }) => (\n      <StaticRouter location={url.pathname} context={routerContext}>\n        {children}\n      </StaticRouter>\n    );\n  }\n  Router.displayName = 'Router';\n\n  // A naive attempt to seed some high entropy client hints.\n  // OK to run on re-render as the cache is hit.\n  // Components that use high entropy hints are still encouraged to call the\n  // async method to get the final value, but the default value should be\n  // populated from cache (i.e. browserFeatures.getCachedHighEntropyHints) which\n  // this will seed.\n  //\n  // NOTE: We don't include 'viewportWidth' and 'viewportHeight' here because\n  // We don't include the necessary headers in the CDN cache key since they\n  // have too high cardinality.\n  void browserFeatures.getHighEntropyHintsAsync({\n    hints: ['connection', 'reduceMotion'],\n  });\n\n  const userAgentHints = userAgentHintsFromBowser(browserFeatures);\n\n  const isRtl = directionFromLocale(currentLocale) === 'rtl';\n\n  // Sets the global logging context. Only works for client side.\n  // See loggingInitServer for the server - side version.\n  // Has to be run before any children render\n  //\n  // TODO: Because all this code is in a useEffect, it will by definition not run before children render. This means that\n  // the logging context will not be populated with AppContext values on the first render. This is a problem at least\n  // for experiment logging which happens on the first render. We need to find a way to cleanly populate the logging context\n  // synchronously with the AppContext values on the first render while still appropriately removing the context provider\n  // when necessary.\n  // https://jira.sc-corp.net/browse/WEBP-11200\n  useBrowserLayoutEffect(() => {\n    const appContextProvider = (): Partial<LoggingContext> => {\n      // We want to get a new URL each time. This is so we can pick up\n      // any changes pushed directly onto the URL, like via `history.pushState`.\n      // This is a little controversial because anything added through `history.pushState`\n      // DOES NOT get reflected by react.\n      const url = new URL(getCurrentUrl());\n      return {\n        locale: currentLocale,\n        url,\n        hostname: url.hostname,\n        userAgentHints,\n        uaBrand: userAgentHints?.brand,\n        uaPlatform: userAgentHints?.platform,\n        path: url.pathname,\n        userCountry: userLocation.country,\n        isRtl,\n      };\n    };\n    logger.addContextProvider(appContextProvider);\n\n    return () => logger.removeContextProvider(appContextProvider);\n  }, [currentLocale, url, isRtl, userAgentHints, userLocation.country]);\n\n  // Initializes web vitals logging\n  useEffect(() => {\n    initWebVitalsLogging();\n  }, [\n    currentLocale,\n    getCurrentUrl,\n    isRtl,\n    url.hostname,\n    url.pathname,\n    userAgentHints,\n    userLocation.country,\n  ]);\n\n  const consumerContext: ConsumerContextProps = {\n    supportedLocales,\n    currentLocale: supportedLocales[currentLocale ?? defaultContext.currentLocale]!.code,\n    logEvent: ({ type, label, url, component }) => {\n      if (!(type && (label || url))) {\n        return;\n      }\n\n      internalLogEvent({\n        // By default we assume that SDS-M only logs user events, not any internal events.\n        subscribedEventType: SubscribedEventType.USER_INTERACTION,\n        // For legacy reasons, we default the component as CTA.\n        // TODO: Clean up this assumption and make the event category mandatory.\n        eventCategory: component ?? 'CTA',\n        eventAction: type,\n        eventLabel: label ?? (url ? `to: ${url}` : null),\n      });\n    },\n    isUrlCurrent: createIsCurrentUrl(getCurrentUrl),\n    getUrlParams: () => {\n      const search = new URL(getCurrentUrl()).search;\n      return urlParamsToFilters(search);\n    },\n    setUrlParams: (paramsObj: MapOf<string | undefined>) => {\n      if (!Config.isClient) return;\n\n      const { pathname } = window.location;\n      const paramsStr = filtersToUrlParams(paramsObj);\n      const newPath = `${pathname}?${paramsStr}`;\n\n      // push to window to bypass scrolling behavior of redirectTo()\n      window.history.pushState(null, '', newPath);\n    },\n  };\n\n  // Test for duplicate SDSM contexts.\n  // TODO: Write a proper invariant file. Tracking: https://jira.sc-corp.net/browse/ENTWEB-4284\n  if (GlobalHeaderContext.displayName !== 'GlobalHeaderContextSDSM') {\n    throw new Error(\n      'Duplicate SDS-M packages found. See https://jira.sc-corp.net/browse/ENTWEB-4284'\n    );\n  }\n\n  const globalComponentsContext: GlobalComponentsProps = {\n    onError: error => {\n      logError({\n        component: 'GlobalComponents',\n        error: error instanceof Error ? error : undefined,\n        message: typeof error === 'string' ? error : undefined,\n      });\n    },\n    Anchor,\n    currentLocale,\n    isPreview: Config.isPreview,\n    isSSR: Config.isSSR,\n    hostname: Config.domainName,\n    onEvent: ({ component, action, label, url }) => {\n      internalLogEvent({\n        subscribedEventType: SubscribedEventType.USER_INTERACTION,\n        event: googleAnalyticsEventName,\n        eventCategory: component ?? 'GlobalComponent',\n        eventAction: action,\n        eventLabel: label ?? (url ? `to: ${url}` : 'generic'),\n      });\n\n      // If we're logging a Navigation event (has a URL), and we're leaving the\n      // tab, we should flush the loggers so that we attempt to send the logs\n      // out before the browser terminates this tab's JS loop.\n      if (url && !isLocalUrl(new URL(url, getCurrentUrl()))) {\n        void logger.flush();\n      }\n    },\n    supportedLocales,\n    // Moved here from part of footer refactor\n    onLocaleChange: (locale: string) => {\n      const url = new URL(window.location.href);\n      url.searchParams.set('lang', locale);\n      window.location.replace(url);\n    },\n    isUrlCurrent: createIsCurrentUrl(getCurrentUrl),\n    globalApolloClient,\n  };\n\n  const [siteDataState, setSiteData] = useState<Record<string, unknown> | undefined>(siteData);\n  const headerPortalRef = useRef<HTMLElement>(null);\n  const pageBottomStickyPortalRef = useRef<HTMLElement>(null);\n  const pageFixedPortalRef = useRef<HTMLElement>(null);\n  const appPortalRef = useRef<HTMLElement>(null);\n  /**\n   * Used on client side to help set cookie in case personas are updated after the initial render,\n   * and somehow cookies were not accepted yet. Only needed on client side.\n   */\n  const personasRef = useRef<Personas | undefined>(initialPersonas);\n\n  const appContext: AppProviderProps = {\n    currentLocale,\n    supportedLocales,\n    userLocation,\n    getCurrentUrl,\n    isRTL: isRtl,\n    siteData: siteDataState,\n    setSiteData,\n    headerPortalRef,\n    pageBottomStickyPortalRef,\n    pageFixedPortalRef,\n    appPortalRef,\n    onRedirect,\n    cookieManager,\n    getUserInfo,\n    getPersona,\n    createUuidV4,\n    onHlsVideo,\n    personasRef,\n    // Function for server-side render to set the APP_STATE value for personas\n    updatePersonas: updatedPersonas => {\n      if (!Config.isClient) {\n        updatePersonasProp?.(updatedPersonas);\n      }\n      personasRef.current = updatedPersonas;\n    },\n  };\n\n  const contentfulContext = getContentfulContext(currentLocale, url.searchParams);\n\n  const cookieSettingsUrl = getCookieSettingsUrl(\n    Config.domainName,\n    Config.trackingSettings.cookieDomain\n  );\n\n  const baseMotif = getSiteMotif();\n  const fontFallbackTokens = getSiteFontFallbacks();\n  const localizedMotif = fontFallbackTokens\n    ? getMotifWithFontFallbacks(currentLocale, baseMotif, fontFallbackTokens)\n    : baseMotif;\n\n  const primitivesContext = { ...defaultPrimitivesContext, Anchor };\n\n  // if site config defines global styles, inject them.\n  Config.globalStyles && injectGlobal(Config.globalStyles);\n\n  const renderedApp = (\n    <StrictMode>\n      <ErrorBoundary tracer={getTracer()}>\n        <Router>\n          <ContentfulContext.Provider value={contentfulContext}>\n            <ContentfulLivePreviewContextProvider>\n              <ApolloProvider client={apolloClient}>\n                <AsyncDataContext.Provider value={{ controller: asyncDataController }}>\n                  <ConsumerContext.Provider value={consumerContext}>\n                    <PrimitivesContext.Provider value={primitivesContext}>\n                      <GlobalComponentsContextProvider value={globalComponentsContext}>\n                        <BrowserFeaturesContext.Provider value={browserFeatures}>\n                          <HelmetProvider context={helmetContext}>\n                            <IntlProvider>\n                              <AppContext.Provider value={appContext}>\n                                <SingleCallbackCacheContext.Provider value={singleCallbackCache}>\n                                  <LogCspViolation />\n                                  <LogPageLoad />\n                                  <LogAdBlockUsage />\n                                  <LogScrollDepth />\n                                  <DirectionDirective />\n                                  <LanguageDirective />\n                                  <ContentfulLivePreview />\n                                  <Favicon />\n                                  <Viewport />\n                                  <FontChecker />\n                                  {Config.site === Site.STINSON && <StinsonFontStylesheet />}\n                                  <SitewideConfigurationProvider>\n                                    {/* this needs feature flags */}\n                                    <HardcodedComponents />\n                                    <PageLayoutProvider sessionValue={pageLayoutContext}>\n                                      <ShopifyProvider shopifyData={shopifyData}>\n                                        <CartProvider>\n                                          <MotifRootWrapper motif={localizedMotif} tag=\"section\">\n                                            <ElementLocation.Provider\n                                              value={{ elementLocation: 'Header' }}\n                                            >\n                                              <Header config={Config} />\n                                            </ElementLocation.Provider>\n                                            <LoadingBar />\n                                            <ElementLocation.Provider\n                                              value={{ elementLocation: 'Page' }}\n                                            >\n                                              <Routes />\n                                            </ElementLocation.Provider>\n                                            <AppPortal />\n                                            <ElementLocation.Provider\n                                              value={{ elementLocation: 'Footer' }}\n                                            >\n                                              <Footer cookieSettingsUrl={cookieSettingsUrl} />\n                                            </ElementLocation.Provider>\n                                            <CookiePopup\n                                              backgroundColor={\n                                                Config.theme?.defaultPageBackgroundColor\n                                              }\n                                              isClient={Config.isClient}\n                                              globalPrivacyControl={globalPrivacyControl}\n                                            />\n                                            {Config.shopify && <Cart />}\n                                          </MotifRootWrapper>\n                                        </CartProvider>\n                                      </ShopifyProvider>\n                                    </PageLayoutProvider>\n                                  </SitewideConfigurationProvider>\n                                </SingleCallbackCacheContext.Provider>\n                              </AppContext.Provider>\n                            </IntlProvider>\n                          </HelmetProvider>\n                        </BrowserFeaturesContext.Provider>\n                      </GlobalComponentsContextProvider>\n                    </PrimitivesContext.Provider>\n                  </ConsumerContext.Provider>\n                </AsyncDataContext.Provider>\n              </ApolloProvider>\n            </ContentfulLivePreviewContextProvider>\n          </ContentfulContext.Provider>\n        </Router>\n      </ErrorBoundary>\n    </StrictMode>\n  );\n\n  appRenderTrace.endSpan();\n  return renderedApp;\n};\n", "function _setPrototypeOf(t, e) {\n  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };", "import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inheritsLoose(t, o) {\n  t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);\n}\nexport { _inheritsLoose as default };", "function isAbsolute(pathname) {\n  return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n    list[i] = list[k];\n  }\n\n  list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to, from) {\n  if (from === undefined) from = '';\n\n  var toParts = (to && to.split('/')) || [];\n  var fromParts = (from && from.split('/')) || [];\n\n  var isToAbs = to && isAbsolute(to);\n  var isFromAbs = from && isAbsolute(from);\n  var mustEndAbs = isToAbs || isFromAbs;\n\n  if (to && isAbsolute(to)) {\n    // to is absolute\n    fromParts = toParts;\n  } else if (toParts.length) {\n    // to is relative, drop the filename\n    fromParts.pop();\n    fromParts = fromParts.concat(toParts);\n  }\n\n  if (!fromParts.length) return '/';\n\n  var hasTrailingSlash;\n  if (fromParts.length) {\n    var last = fromParts[fromParts.length - 1];\n    hasTrailingSlash = last === '.' || last === '..' || last === '';\n  } else {\n    hasTrailingSlash = false;\n  }\n\n  var up = 0;\n  for (var i = fromParts.length; i >= 0; i--) {\n    var part = fromParts[i];\n\n    if (part === '.') {\n      spliceOne(fromParts, i);\n    } else if (part === '..') {\n      spliceOne(fromParts, i);\n      up++;\n    } else if (up) {\n      spliceOne(fromParts, i);\n      up--;\n    }\n  }\n\n  if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');\n\n  if (\n    mustEndAbs &&\n    fromParts[0] !== '' &&\n    (!fromParts[0] || !isAbsolute(fromParts[0]))\n  )\n    fromParts.unshift('');\n\n  var result = fromParts.join('/');\n\n  if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n  return result;\n}\n\nexport default resolvePathname;\n", "var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n    if (condition) {\n        return;\n    }\n    if (isProduction) {\n        throw new Error(prefix);\n    }\n    var provided = typeof message === 'function' ? message() : message;\n    var value = provided ? \"\".concat(prefix, \": \").concat(provided) : prefix;\n    throw new Error(value);\n}\n\nexport { invariant as default };\n", "import _extends from '@babel/runtime/helpers/esm/extends';\nimport resolvePathname from 'resolve-pathname';\nimport valueEqual from 'value-equal';\nimport warning from 'tiny-warning';\nimport invariant from 'tiny-invariant';\n\nfunction addLeadingSlash(path) {\n  return path.charAt(0) === '/' ? path : '/' + path;\n}\nfunction stripLeadingSlash(path) {\n  return path.charAt(0) === '/' ? path.substr(1) : path;\n}\nfunction hasBasename(path, prefix) {\n  return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;\n}\nfunction stripBasename(path, prefix) {\n  return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\nfunction stripTrailingSlash(path) {\n  return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\nfunction parsePath(path) {\n  var pathname = path || '/';\n  var search = '';\n  var hash = '';\n  var hashIndex = pathname.indexOf('#');\n\n  if (hashIndex !== -1) {\n    hash = pathname.substr(hashIndex);\n    pathname = pathname.substr(0, hashIndex);\n  }\n\n  var searchIndex = pathname.indexOf('?');\n\n  if (searchIndex !== -1) {\n    search = pathname.substr(searchIndex);\n    pathname = pathname.substr(0, searchIndex);\n  }\n\n  return {\n    pathname: pathname,\n    search: search === '?' ? '' : search,\n    hash: hash === '#' ? '' : hash\n  };\n}\nfunction createPath(location) {\n  var pathname = location.pathname,\n      search = location.search,\n      hash = location.hash;\n  var path = pathname || '/';\n  if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n  if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n  return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n  var location;\n\n  if (typeof path === 'string') {\n    // Two-arg form: push(path, state)\n    location = parsePath(path);\n    location.state = state;\n  } else {\n    // One-arg form: push(location)\n    location = _extends({}, path);\n    if (location.pathname === undefined) location.pathname = '';\n\n    if (location.search) {\n      if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n    } else {\n      location.search = '';\n    }\n\n    if (location.hash) {\n      if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n    } else {\n      location.hash = '';\n    }\n\n    if (state !== undefined && location.state === undefined) location.state = state;\n  }\n\n  try {\n    location.pathname = decodeURI(location.pathname);\n  } catch (e) {\n    if (e instanceof URIError) {\n      throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n    } else {\n      throw e;\n    }\n  }\n\n  if (key) location.key = key;\n\n  if (currentLocation) {\n    // Resolve incomplete/relative pathname relative to current location.\n    if (!location.pathname) {\n      location.pathname = currentLocation.pathname;\n    } else if (location.pathname.charAt(0) !== '/') {\n      location.pathname = resolvePathname(location.pathname, currentLocation.pathname);\n    }\n  } else {\n    // When there is no prior location and pathname is empty, set it to /\n    if (!location.pathname) {\n      location.pathname = '/';\n    }\n  }\n\n  return location;\n}\nfunction locationsAreEqual(a, b) {\n  return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n  var prompt = null;\n\n  function setPrompt(nextPrompt) {\n    process.env.NODE_ENV !== \"production\" ? warning(prompt == null, 'A history supports only one prompt at a time') : void 0;\n    prompt = nextPrompt;\n    return function () {\n      if (prompt === nextPrompt) prompt = null;\n    };\n  }\n\n  function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n    // TODO: If another transition starts while we're still confirming\n    // the previous one, we may end up in a weird state. Figure out the\n    // best way to handle this.\n    if (prompt != null) {\n      var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n      if (typeof result === 'string') {\n        if (typeof getUserConfirmation === 'function') {\n          getUserConfirmation(result, callback);\n        } else {\n          process.env.NODE_ENV !== \"production\" ? warning(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : void 0;\n          callback(true);\n        }\n      } else {\n        // Return false from a transition hook to cancel the transition.\n        callback(result !== false);\n      }\n    } else {\n      callback(true);\n    }\n  }\n\n  var listeners = [];\n\n  function appendListener(fn) {\n    var isActive = true;\n\n    function listener() {\n      if (isActive) fn.apply(void 0, arguments);\n    }\n\n    listeners.push(listener);\n    return function () {\n      isActive = false;\n      listeners = listeners.filter(function (item) {\n        return item !== listener;\n      });\n    };\n  }\n\n  function notifyListeners() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    listeners.forEach(function (listener) {\n      return listener.apply(void 0, args);\n    });\n  }\n\n  return {\n    setPrompt: setPrompt,\n    confirmTransitionTo: confirmTransitionTo,\n    appendListener: appendListener,\n    notifyListeners: notifyListeners\n  };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction getConfirmation(message, callback) {\n  callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\nfunction supportsHistory() {\n  var ua = window.navigator.userAgent;\n  if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n  return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\nfunction supportsPopStateOnHashChange() {\n  return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n  return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\nfunction isExtraneousPopstateEvent(event) {\n  return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n  try {\n    return window.history.state || {};\n  } catch (e) {\n    // IE 11 sometimes throws when accessing window.history.state\n    // See https://github.com/ReactTraining/history/pull/289\n    return {};\n  }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Browser history needs a DOM') : invariant(false) : void 0;\n  var globalHistory = window.history;\n  var canUseHistory = supportsHistory();\n  var needsHashChangeListener = !supportsPopStateOnHashChange();\n  var _props = props,\n      _props$forceRefresh = _props.forceRefresh,\n      forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n      _props$getUserConfirm = _props.getUserConfirmation,\n      getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n      _props$keyLength = _props.keyLength,\n      keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n  var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n  function getDOMLocation(historyState) {\n    var _ref = historyState || {},\n        key = _ref.key,\n        state = _ref.state;\n\n    var _window$location = window.location,\n        pathname = _window$location.pathname,\n        search = _window$location.search,\n        hash = _window$location.hash;\n    var path = pathname + search + hash;\n    process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n    if (basename) path = stripBasename(path, basename);\n    return createLocation(path, state, key);\n  }\n\n  function createKey() {\n    return Math.random().toString(36).substr(2, keyLength);\n  }\n\n  var transitionManager = createTransitionManager();\n\n  function setState(nextState) {\n    _extends(history, nextState);\n\n    history.length = globalHistory.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  }\n\n  function handlePopState(event) {\n    // Ignore extraneous popstate events in WebKit.\n    if (isExtraneousPopstateEvent(event)) return;\n    handlePop(getDOMLocation(event.state));\n  }\n\n  function handleHashChange() {\n    handlePop(getDOMLocation(getHistoryState()));\n  }\n\n  var forceNextPop = false;\n\n  function handlePop(location) {\n    if (forceNextPop) {\n      forceNextPop = false;\n      setState();\n    } else {\n      var action = 'POP';\n      transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n        if (ok) {\n          setState({\n            action: action,\n            location: location\n          });\n        } else {\n          revertPop(location);\n        }\n      });\n    }\n  }\n\n  function revertPop(fromLocation) {\n    var toLocation = history.location; // TODO: We could probably make this more reliable by\n    // keeping a list of keys we've seen in sessionStorage.\n    // Instead, we just default to 0 for keys we don't know.\n\n    var toIndex = allKeys.indexOf(toLocation.key);\n    if (toIndex === -1) toIndex = 0;\n    var fromIndex = allKeys.indexOf(fromLocation.key);\n    if (fromIndex === -1) fromIndex = 0;\n    var delta = toIndex - fromIndex;\n\n    if (delta) {\n      forceNextPop = true;\n      go(delta);\n    }\n  }\n\n  var initialLocation = getDOMLocation(getHistoryState());\n  var allKeys = [initialLocation.key]; // Public interface\n\n  function createHref(location) {\n    return basename + createPath(location);\n  }\n\n  function push(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n    var action = 'PUSH';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var href = createHref(location);\n      var key = location.key,\n          state = location.state;\n\n      if (canUseHistory) {\n        globalHistory.pushState({\n          key: key,\n          state: state\n        }, null, href);\n\n        if (forceRefresh) {\n          window.location.href = href;\n        } else {\n          var prevIndex = allKeys.indexOf(history.location.key);\n          var nextKeys = allKeys.slice(0, prevIndex + 1);\n          nextKeys.push(location.key);\n          allKeys = nextKeys;\n          setState({\n            action: action,\n            location: location\n          });\n        }\n      } else {\n        process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : void 0;\n        window.location.href = href;\n      }\n    });\n  }\n\n  function replace(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n    var action = 'REPLACE';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var href = createHref(location);\n      var key = location.key,\n          state = location.state;\n\n      if (canUseHistory) {\n        globalHistory.replaceState({\n          key: key,\n          state: state\n        }, null, href);\n\n        if (forceRefresh) {\n          window.location.replace(href);\n        } else {\n          var prevIndex = allKeys.indexOf(history.location.key);\n          if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n          setState({\n            action: action,\n            location: location\n          });\n        }\n      } else {\n        process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : void 0;\n        window.location.replace(href);\n      }\n    });\n  }\n\n  function go(n) {\n    globalHistory.go(n);\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  var listenerCount = 0;\n\n  function checkDOMListeners(delta) {\n    listenerCount += delta;\n\n    if (listenerCount === 1 && delta === 1) {\n      window.addEventListener(PopStateEvent, handlePopState);\n      if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n    } else if (listenerCount === 0) {\n      window.removeEventListener(PopStateEvent, handlePopState);\n      if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n    }\n  }\n\n  var isBlocked = false;\n\n  function block(prompt) {\n    if (prompt === void 0) {\n      prompt = false;\n    }\n\n    var unblock = transitionManager.setPrompt(prompt);\n\n    if (!isBlocked) {\n      checkDOMListeners(1);\n      isBlocked = true;\n    }\n\n    return function () {\n      if (isBlocked) {\n        isBlocked = false;\n        checkDOMListeners(-1);\n      }\n\n      return unblock();\n    };\n  }\n\n  function listen(listener) {\n    var unlisten = transitionManager.appendListener(listener);\n    checkDOMListeners(1);\n    return function () {\n      checkDOMListeners(-1);\n      unlisten();\n    };\n  }\n\n  var history = {\n    length: globalHistory.length,\n    action: 'POP',\n    location: initialLocation,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    block: block,\n    listen: listen\n  };\n  return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n  hashbang: {\n    encodePath: function encodePath(path) {\n      return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n    },\n    decodePath: function decodePath(path) {\n      return path.charAt(0) === '!' ? path.substr(1) : path;\n    }\n  },\n  noslash: {\n    encodePath: stripLeadingSlash,\n    decodePath: addLeadingSlash\n  },\n  slash: {\n    encodePath: addLeadingSlash,\n    decodePath: addLeadingSlash\n  }\n};\n\nfunction stripHash(url) {\n  var hashIndex = url.indexOf('#');\n  return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction getHashPath() {\n  // We can't use window.location.hash here because it's not\n  // consistent across browsers - Firefox will pre-decode it!\n  var href = window.location.href;\n  var hashIndex = href.indexOf('#');\n  return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n  window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n  window.location.replace(stripHash(window.location.href) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Hash history needs a DOM') : invariant(false) : void 0;\n  var globalHistory = window.history;\n  var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n  var _props = props,\n      _props$getUserConfirm = _props.getUserConfirmation,\n      getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n      _props$hashType = _props.hashType,\n      hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n  var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n  var _HashPathCoders$hashT = HashPathCoders[hashType],\n      encodePath = _HashPathCoders$hashT.encodePath,\n      decodePath = _HashPathCoders$hashT.decodePath;\n\n  function getDOMLocation() {\n    var path = decodePath(getHashPath());\n    process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n    if (basename) path = stripBasename(path, basename);\n    return createLocation(path);\n  }\n\n  var transitionManager = createTransitionManager();\n\n  function setState(nextState) {\n    _extends(history, nextState);\n\n    history.length = globalHistory.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  }\n\n  var forceNextPop = false;\n  var ignorePath = null;\n\n  function locationsAreEqual$$1(a, b) {\n    return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;\n  }\n\n  function handleHashChange() {\n    var path = getHashPath();\n    var encodedPath = encodePath(path);\n\n    if (path !== encodedPath) {\n      // Ensure we always have a properly-encoded hash.\n      replaceHashPath(encodedPath);\n    } else {\n      var location = getDOMLocation();\n      var prevLocation = history.location;\n      if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n      if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n      ignorePath = null;\n      handlePop(location);\n    }\n  }\n\n  function handlePop(location) {\n    if (forceNextPop) {\n      forceNextPop = false;\n      setState();\n    } else {\n      var action = 'POP';\n      transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n        if (ok) {\n          setState({\n            action: action,\n            location: location\n          });\n        } else {\n          revertPop(location);\n        }\n      });\n    }\n  }\n\n  function revertPop(fromLocation) {\n    var toLocation = history.location; // TODO: We could probably make this more reliable by\n    // keeping a list of paths we've seen in sessionStorage.\n    // Instead, we just default to 0 for paths we don't know.\n\n    var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n    if (toIndex === -1) toIndex = 0;\n    var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n    if (fromIndex === -1) fromIndex = 0;\n    var delta = toIndex - fromIndex;\n\n    if (delta) {\n      forceNextPop = true;\n      go(delta);\n    }\n  } // Ensure the hash is encoded properly before doing anything else.\n\n\n  var path = getHashPath();\n  var encodedPath = encodePath(path);\n  if (path !== encodedPath) replaceHashPath(encodedPath);\n  var initialLocation = getDOMLocation();\n  var allPaths = [createPath(initialLocation)]; // Public interface\n\n  function createHref(location) {\n    var baseTag = document.querySelector('base');\n    var href = '';\n\n    if (baseTag && baseTag.getAttribute('href')) {\n      href = stripHash(window.location.href);\n    }\n\n    return href + '#' + encodePath(basename + createPath(location));\n  }\n\n  function push(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot push state; it is ignored') : void 0;\n    var action = 'PUSH';\n    var location = createLocation(path, undefined, undefined, history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var path = createPath(location);\n      var encodedPath = encodePath(basename + path);\n      var hashChanged = getHashPath() !== encodedPath;\n\n      if (hashChanged) {\n        // We cannot tell if a hashchange was caused by a PUSH, so we'd\n        // rather setState here and ignore the hashchange. The caveat here\n        // is that other hash histories in the page will consider it a POP.\n        ignorePath = path;\n        pushHashPath(encodedPath);\n        var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n        var nextPaths = allPaths.slice(0, prevIndex + 1);\n        nextPaths.push(path);\n        allPaths = nextPaths;\n        setState({\n          action: action,\n          location: location\n        });\n      } else {\n        process.env.NODE_ENV !== \"production\" ? warning(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : void 0;\n        setState();\n      }\n    });\n  }\n\n  function replace(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot replace state; it is ignored') : void 0;\n    var action = 'REPLACE';\n    var location = createLocation(path, undefined, undefined, history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var path = createPath(location);\n      var encodedPath = encodePath(basename + path);\n      var hashChanged = getHashPath() !== encodedPath;\n\n      if (hashChanged) {\n        // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n        // rather setState here and ignore the hashchange. The caveat here\n        // is that other hash histories in the page will consider it a POP.\n        ignorePath = path;\n        replaceHashPath(encodedPath);\n      }\n\n      var prevIndex = allPaths.indexOf(createPath(history.location));\n      if (prevIndex !== -1) allPaths[prevIndex] = path;\n      setState({\n        action: action,\n        location: location\n      });\n    });\n  }\n\n  function go(n) {\n    process.env.NODE_ENV !== \"production\" ? warning(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : void 0;\n    globalHistory.go(n);\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  var listenerCount = 0;\n\n  function checkDOMListeners(delta) {\n    listenerCount += delta;\n\n    if (listenerCount === 1 && delta === 1) {\n      window.addEventListener(HashChangeEvent$1, handleHashChange);\n    } else if (listenerCount === 0) {\n      window.removeEventListener(HashChangeEvent$1, handleHashChange);\n    }\n  }\n\n  var isBlocked = false;\n\n  function block(prompt) {\n    if (prompt === void 0) {\n      prompt = false;\n    }\n\n    var unblock = transitionManager.setPrompt(prompt);\n\n    if (!isBlocked) {\n      checkDOMListeners(1);\n      isBlocked = true;\n    }\n\n    return function () {\n      if (isBlocked) {\n        isBlocked = false;\n        checkDOMListeners(-1);\n      }\n\n      return unblock();\n    };\n  }\n\n  function listen(listener) {\n    var unlisten = transitionManager.appendListener(listener);\n    checkDOMListeners(1);\n    return function () {\n      checkDOMListeners(-1);\n      unlisten();\n    };\n  }\n\n  var history = {\n    length: globalHistory.length,\n    action: 'POP',\n    location: initialLocation,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    block: block,\n    listen: listen\n  };\n  return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n  return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  var _props = props,\n      getUserConfirmation = _props.getUserConfirmation,\n      _props$initialEntries = _props.initialEntries,\n      initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n      _props$initialIndex = _props.initialIndex,\n      initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n      _props$keyLength = _props.keyLength,\n      keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n  var transitionManager = createTransitionManager();\n\n  function setState(nextState) {\n    _extends(history, nextState);\n\n    history.length = history.entries.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  }\n\n  function createKey() {\n    return Math.random().toString(36).substr(2, keyLength);\n  }\n\n  var index = clamp(initialIndex, 0, initialEntries.length - 1);\n  var entries = initialEntries.map(function (entry) {\n    return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n  }); // Public interface\n\n  var createHref = createPath;\n\n  function push(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n    var action = 'PUSH';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var prevIndex = history.index;\n      var nextIndex = prevIndex + 1;\n      var nextEntries = history.entries.slice(0);\n\n      if (nextEntries.length > nextIndex) {\n        nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n      } else {\n        nextEntries.push(location);\n      }\n\n      setState({\n        action: action,\n        location: location,\n        index: nextIndex,\n        entries: nextEntries\n      });\n    });\n  }\n\n  function replace(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n    var action = 'REPLACE';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      history.entries[history.index] = location;\n      setState({\n        action: action,\n        location: location\n      });\n    });\n  }\n\n  function go(n) {\n    var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n    var action = 'POP';\n    var location = history.entries[nextIndex];\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (ok) {\n        setState({\n          action: action,\n          location: location,\n          index: nextIndex\n        });\n      } else {\n        // Mimic the behavior of DOM histories by\n        // causing a render after a cancelled POP.\n        setState();\n      }\n    });\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  function canGo(n) {\n    var nextIndex = history.index + n;\n    return nextIndex >= 0 && nextIndex < history.entries.length;\n  }\n\n  function block(prompt) {\n    if (prompt === void 0) {\n      prompt = false;\n    }\n\n    return transitionManager.setPrompt(prompt);\n  }\n\n  function listen(listener) {\n    return transitionManager.appendListener(listener);\n  }\n\n  var history = {\n    length: entries.length,\n    action: 'POP',\n    location: entries[index],\n    index: index,\n    entries: entries,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    canGo: canGo,\n    block: block,\n    listen: listen\n  };\n  return history;\n}\n\nexport { createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath };\n", "function _objectWithoutPropertiesLoose(r, e) {\n  if (null == r) return {};\n  var t = {};\n  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n    if (-1 !== e.indexOf(n)) continue;\n    t[n] = r[n];\n  }\n  return t;\n}\nexport { _objectWithoutPropertiesLoose as default };", "// MIT License\n// Copyright (c) 2019-present StringEpsilon <StringEpsilon@gmail.com>\n// Copyright (c) 2017-2019 James Kyle <me@thejameskyle.com>\n// https://github.com/StringEpsilon/mini-create-react-context\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport warning from \"tiny-warning\";\n\nconst MAX_SIGNED_31_BIT_INT = 1073741823;\n\nconst commonjsGlobal =\n  typeof globalThis !== \"undefined\" // 'global proper'\n    ? // eslint-disable-next-line no-undef\n      globalThis\n    : typeof window !== \"undefined\"\n    ? window // Browser\n    : typeof global !== \"undefined\"\n    ? global // node.js\n    : {};\n\nfunction getUniqueId() {\n  let key = \"__global_unique_id__\";\n  return (commonjsGlobal[key] = (commonjsGlobal[key] || 0) + 1);\n}\n\n// Inlined Object.is polyfill.\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\nfunction objectIs(x, y) {\n  if (x === y) {\n    return x !== 0 || 1 / x === 1 / y;\n  } else {\n    // eslint-disable-next-line no-self-compare\n    return x !== x && y !== y;\n  }\n}\n\nfunction createEventEmitter(value) {\n  let handlers = [];\n  return {\n    on(handler) {\n      handlers.push(handler);\n    },\n\n    off(handler) {\n      handlers = handlers.filter(h => h !== handler);\n    },\n\n    get() {\n      return value;\n    },\n\n    set(newValue, changedBits) {\n      value = newValue;\n      handlers.forEach(handler => handler(value, changedBits));\n    }\n  };\n}\n\nfunction onlyChild(children) {\n  return Array.isArray(children) ? children[0] : children;\n}\n\nexport default function createReactContext(defaultValue, calculateChangedBits) {\n  const contextProp = \"__create-react-context-\" + getUniqueId() + \"__\";\n\n  class Provider extends React.Component {\n    emitter = createEventEmitter(this.props.value);\n\n    static childContextTypes = {\n      [contextProp]: PropTypes.object.isRequired\n    };\n\n    getChildContext() {\n      return {\n        [contextProp]: this.emitter\n      };\n    }\n\n    componentWillReceiveProps(nextProps) {\n      if (this.props.value !== nextProps.value) {\n        let oldValue = this.props.value;\n        let newValue = nextProps.value;\n        let changedBits;\n\n        if (objectIs(oldValue, newValue)) {\n          changedBits = 0; // No change\n        } else {\n          changedBits =\n            typeof calculateChangedBits === \"function\"\n              ? calculateChangedBits(oldValue, newValue)\n              : MAX_SIGNED_31_BIT_INT;\n          if (process.env.NODE_ENV !== \"production\") {\n            warning(\n              (changedBits & MAX_SIGNED_31_BIT_INT) === changedBits,\n              \"calculateChangedBits: Expected the return value to be a \" +\n                \"31-bit integer. Instead received: \" +\n                changedBits\n            );\n          }\n\n          changedBits |= 0;\n\n          if (changedBits !== 0) {\n            this.emitter.set(nextProps.value, changedBits);\n          }\n        }\n      }\n    }\n\n    render() {\n      return this.props.children;\n    }\n  }\n\n  class Consumer extends React.Component {\n    static contextTypes = {\n      [contextProp]: PropTypes.object\n    };\n\n    observedBits;\n\n    state = {\n      value: this.getValue()\n    };\n\n    componentWillReceiveProps(nextProps) {\n      let { observedBits } = nextProps;\n      this.observedBits =\n        observedBits === undefined || observedBits === null\n          ? MAX_SIGNED_31_BIT_INT // Subscribe to all changes by default\n          : observedBits;\n    }\n\n    componentDidMount() {\n      if (this.context[contextProp]) {\n        this.context[contextProp].on(this.onUpdate);\n      }\n      let { observedBits } = this.props;\n      this.observedBits =\n        observedBits === undefined || observedBits === null\n          ? MAX_SIGNED_31_BIT_INT // Subscribe to all changes by default\n          : observedBits;\n    }\n\n    componentWillUnmount() {\n      if (this.context[contextProp]) {\n        this.context[contextProp].off(this.onUpdate);\n      }\n    }\n\n    getValue() {\n      if (this.context[contextProp]) {\n        return this.context[contextProp].get();\n      } else {\n        return defaultValue;\n      }\n    }\n\n    onUpdate = (newValue, changedBits) => {\n      const observedBits = this.observedBits | 0;\n      if ((observedBits & changedBits) !== 0) {\n        this.setState({ value: this.getValue() });\n      }\n    };\n\n    render() {\n      return onlyChild(this.props.children)(this.state.value);\n    }\n  }\n\n  return {\n    Provider,\n    Consumer\n  };\n}\n", "// MIT License\n// Copyright (c) 2019-present StringEpsilon <StringEpsilon@gmail.com>\n// Copyright (c) 2017-2019 James Kyle <me@thejameskyle.com>\n// https://github.com/StringEpsilon/mini-create-react-context\nimport React from \"react\";\nimport createReactContext from \"./miniCreateReactContext\";\n\nexport default React.createContext || createReactContext;\n", "// TODO: Replace with React.createContext once we can assume React 16+\nimport createContext from \"./createContext\";\n\nconst createNamedContext = name => {\n  const context = createContext();\n  context.displayName = name;\n\n  return context;\n};\n\nexport default createNamedContext;\n", "import createNamedContext from \"./createNamedContext\";\n\nconst historyContext = /*#__PURE__*/ createNamedContext(\"Router-History\");\nexport default historyContext;\n", "import createNamedContext from \"./createNamedContext\";\n\nconst context = /*#__PURE__*/ createNamedContext(\"Router\");\nexport default context;\n", "import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport warning from \"tiny-warning\";\n\nimport HistoryContext from \"./HistoryContext.js\";\nimport RouterContext from \"./RouterContext.js\";\n\n/**\n * The public API for putting history on context.\n */\nclass Router extends React.Component {\n  static computeRootMatch(pathname) {\n    return { path: \"/\", url: \"/\", params: {}, isExact: pathname === \"/\" };\n  }\n\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      location: props.history.location\n    };\n\n    // This is a bit of a hack. We have to start listening for location\n    // changes here in the constructor in case there are any <Redirect>s\n    // on the initial render. If there are, they will replace/push when\n    // they mount and since cDM fires in children before parents, we may\n    // get a new location before the <Router> is mounted.\n    this._isMounted = false;\n    this._pendingLocation = null;\n\n    if (!props.staticContext) {\n      this.unlisten = props.history.listen(location => {\n        this._pendingLocation = location;\n      });\n    }\n  }\n\n  componentDidMount() {\n    this._isMounted = true;\n\n    if (this.unlisten) {\n      // Any pre-mount location changes have been captured at\n      // this point, so unregister the listener.\n      this.unlisten();\n    }\n    if (!this.props.staticContext) {\n      this.unlisten = this.props.history.listen(location => {\n        if (this._isMounted) {\n          this.setState({ location });\n        }\n      });\n    }\n    if (this._pendingLocation) {\n      this.setState({ location: this._pendingLocation });\n    }\n  }\n\n  componentWillUnmount() {\n    if (this.unlisten) {\n      this.unlisten();\n      this._isMounted = false;\n      this._pendingLocation = null;\n    }\n  }\n\n  render() {\n    return (\n      <RouterContext.Provider\n        value={{\n          history: this.props.history,\n          location: this.state.location,\n          match: Router.computeRootMatch(this.state.location.pathname),\n          staticContext: this.props.staticContext\n        }}\n      >\n        <HistoryContext.Provider\n          children={this.props.children || null}\n          value={this.props.history}\n        />\n      </RouterContext.Provider>\n    );\n  }\n}\n\nif (__DEV__) {\n  Router.propTypes = {\n    children: PropTypes.node,\n    history: PropTypes.object.isRequired,\n    staticContext: PropTypes.object\n  };\n\n  Router.prototype.componentDidUpdate = function(prevProps) {\n    warning(\n      prevProps.history === this.props.history,\n      \"You cannot change <Router history>\"\n    );\n  };\n}\n\nexport default Router;\n", "import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { createMemoryHistory as createHistory } from \"history\";\nimport warning from \"tiny-warning\";\n\nimport Router from \"./Router.js\";\n\n/**\n * The public API for a <Router> that stores location in memory.\n */\nclass MemoryRouter extends React.Component {\n  history = createHistory(this.props);\n\n  render() {\n    return <Router history={this.history} children={this.props.children} />;\n  }\n}\n\nif (__DEV__) {\n  MemoryRouter.propTypes = {\n    initialEntries: PropTypes.array,\n    initialIndex: PropTypes.number,\n    getUserConfirmation: PropTypes.func,\n    keyLength: PropTypes.number,\n    children: PropTypes.node\n  };\n\n  MemoryRouter.prototype.componentDidMount = function() {\n    warning(\n      !this.props.history,\n      \"<MemoryRouter> ignores the history prop. To use a custom history, \" +\n        \"use `import { Router }` instead of `import { MemoryRouter as Router }`.\"\n    );\n  };\n}\n\nexport default MemoryRouter;\n", "import React from \"react\";\n\nclass Lifecycle extends React.Component {\n  componentDidMount() {\n    if (this.props.onMount) this.props.onMount.call(this, this);\n  }\n\n  componentDidUpdate(prevProps) {\n    if (this.props.onUpdate) this.props.onUpdate.call(this, this, prevProps);\n  }\n\n  componentWillUnmount() {\n    if (this.props.onUnmount) this.props.onUnmount.call(this, this);\n  }\n\n  render() {\n    return null;\n  }\n}\n\nexport default Lifecycle;\n", "import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\n\nimport Lifecycle from \"./Lifecycle.js\";\nimport RouterContext from \"./RouterContext.js\";\n\n/**\n * The public API for prompting the user before navigating away from a screen.\n */\nfunction Prompt({ message, when = true }) {\n  return (\n    <RouterContext.Consumer>\n      {context => {\n        invariant(context, \"You should not use <Prompt> outside a <Router>\");\n\n        if (!when || context.staticContext) return null;\n\n        const method = context.history.block;\n\n        return (\n          <Lifecycle\n            onMount={self => {\n              self.release = method(message);\n            }}\n            onUpdate={(self, prevProps) => {\n              if (prevProps.message !== message) {\n                self.release();\n                self.release = method(message);\n              }\n            }}\n            onUnmount={self => {\n              self.release();\n            }}\n            message={message}\n          />\n        );\n      }}\n    </RouterContext.Consumer>\n  );\n}\n\nif (__DEV__) {\n  const messageType = PropTypes.oneOfType([PropTypes.func, PropTypes.string]);\n\n  Prompt.propTypes = {\n    when: PropTypes.bool,\n    message: messageType.isRequired\n  };\n}\n\nexport default Prompt;\n", "import pathToRegexp from \"path-to-regexp\";\n\nconst cache = {};\nconst cacheLimit = 10000;\nlet cacheCount = 0;\n\nfunction compilePath(path) {\n  if (cache[path]) return cache[path];\n\n  const generator = pathToRegexp.compile(path);\n\n  if (cacheCount < cacheLimit) {\n    cache[path] = generator;\n    cacheCount++;\n  }\n\n  return generator;\n}\n\n/**\n * Public API for generating a URL pathname from a path and parameters.\n */\nfunction generatePath(path = \"/\", params = {}) {\n  return path === \"/\" ? path : compilePath(path)(params, { pretty: true });\n}\n\nexport default generatePath;\n", "import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { createLocation, locationsAreEqual } from \"history\";\nimport invariant from \"tiny-invariant\";\n\nimport Lifecycle from \"./Lifecycle.js\";\nimport RouterContext from \"./RouterContext.js\";\nimport generatePath from \"./generatePath.js\";\n\n/**\n * The public API for navigating programmatically with a component.\n */\nfunction Redirect({ computedMatch, to, push = false }) {\n  return (\n    <RouterContext.Consumer>\n      {context => {\n        invariant(context, \"You should not use <Redirect> outside a <Router>\");\n\n        const { history, staticContext } = context;\n\n        const method = push ? history.push : history.replace;\n        const location = createLocation(\n          computedMatch\n            ? typeof to === \"string\"\n              ? generatePath(to, computedMatch.params)\n              : {\n                  ...to,\n                  pathname: generatePath(to.pathname, computedMatch.params)\n                }\n            : to\n        );\n\n        // When rendering in a static context,\n        // set the new location immediately.\n        if (staticContext) {\n          method(location);\n          return null;\n        }\n\n        return (\n          <Lifecycle\n            onMount={() => {\n              method(location);\n            }}\n            onUpdate={(self, prevProps) => {\n              const prevLocation = createLocation(prevProps.to);\n              if (\n                !locationsAreEqual(prevLocation, {\n                  ...location,\n                  key: prevLocation.key\n                })\n              ) {\n                method(location);\n              }\n            }}\n            to={to}\n          />\n        );\n      }}\n    </RouterContext.Consumer>\n  );\n}\n\nif (__DEV__) {\n  Redirect.propTypes = {\n    push: PropTypes.bool,\n    from: PropTypes.string,\n    to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired\n  };\n}\n\nexport default Redirect;\n", "import pathToRegexp from \"path-to-regexp\";\n\nconst cache = {};\nconst cacheLimit = 10000;\nlet cacheCount = 0;\n\nfunction compilePath(path, options) {\n  const cacheKey = `${options.end}${options.strict}${options.sensitive}`;\n  const pathCache = cache[cacheKey] || (cache[cacheKey] = {});\n\n  if (pathCache[path]) return pathCache[path];\n\n  const keys = [];\n  const regexp = pathToRegexp(path, keys, options);\n  const result = { regexp, keys };\n\n  if (cacheCount < cacheLimit) {\n    pathCache[path] = result;\n    cacheCount++;\n  }\n\n  return result;\n}\n\n/**\n * Public API for matching a URL pathname to a path.\n */\nfunction matchPath(pathname, options = {}) {\n  if (typeof options === \"string\" || Array.isArray(options)) {\n    options = { path: options };\n  }\n\n  const { path, exact = false, strict = false, sensitive = false } = options;\n\n  const paths = [].concat(path);\n\n  return paths.reduce((matched, path) => {\n    if (!path && path !== \"\") return null;\n    if (matched) return matched;\n\n    const { regexp, keys } = compilePath(path, {\n      end: exact,\n      strict,\n      sensitive\n    });\n    const match = regexp.exec(pathname);\n\n    if (!match) return null;\n\n    const [url, ...values] = match;\n    const isExact = pathname === url;\n\n    if (exact && !isExact) return null;\n\n    return {\n      path, // the path used to match\n      url: path === \"/\" && url === \"\" ? \"/\" : url, // the matched portion of the URL\n      isExact, // whether or not we matched exactly\n      params: keys.reduce((memo, key, index) => {\n        memo[key.name] = values[index];\n        return memo;\n      }, {})\n    };\n  }, null);\n}\n\nexport default matchPath;\n", "import React from \"react\";\nimport { isValidElementType } from \"react-is\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport warning from \"tiny-warning\";\n\nimport RouterContext from \"./RouterContext.js\";\nimport matchPath from \"./matchPath.js\";\n\nfunction isEmptyChildren(children) {\n  return React.Children.count(children) === 0;\n}\n\nfunction evalChildrenDev(children, props, path) {\n  const value = children(props);\n\n  warning(\n    value !== undefined,\n    \"You returned `undefined` from the `children` function of \" +\n      `<Route${path ? ` path=\"${path}\"` : \"\"}>, but you ` +\n      \"should have returned a React element or `null`\"\n  );\n\n  return value || null;\n}\n\n/**\n * The public API for matching a single path and rendering.\n */\nclass Route extends React.Component {\n  render() {\n    return (\n      <RouterContext.Consumer>\n        {context => {\n          invariant(context, \"You should not use <Route> outside a <Router>\");\n\n          const location = this.props.location || context.location;\n          const match = this.props.computedMatch\n            ? this.props.computedMatch // <Switch> already computed the match for us\n            : this.props.path\n            ? matchPath(location.pathname, this.props)\n            : context.match;\n\n          const props = { ...context, location, match };\n\n          let { children, component, render } = this.props;\n\n          // Preact uses an empty array as children by\n          // default, so use null if that's the case.\n          if (Array.isArray(children) && isEmptyChildren(children)) {\n            children = null;\n          }\n\n          return (\n            <RouterContext.Provider value={props}>\n              {props.match\n                ? children\n                  ? typeof children === \"function\"\n                    ? __DEV__\n                      ? evalChildrenDev(children, props, this.props.path)\n                      : children(props)\n                    : children\n                  : component\n                  ? React.createElement(component, props)\n                  : render\n                  ? render(props)\n                  : null\n                : typeof children === \"function\"\n                ? __DEV__\n                  ? evalChildrenDev(children, props, this.props.path)\n                  : children(props)\n                : null}\n            </RouterContext.Provider>\n          );\n        }}\n      </RouterContext.Consumer>\n    );\n  }\n}\n\nif (__DEV__) {\n  Route.propTypes = {\n    children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n    component: (props, propName) => {\n      if (props[propName] && !isValidElementType(props[propName])) {\n        return new Error(\n          `Invalid prop 'component' supplied to 'Route': the prop is not a valid React component`\n        );\n      }\n    },\n    exact: PropTypes.bool,\n    location: PropTypes.object,\n    path: PropTypes.oneOfType([\n      PropTypes.string,\n      PropTypes.arrayOf(PropTypes.string)\n    ]),\n    render: PropTypes.func,\n    sensitive: PropTypes.bool,\n    strict: PropTypes.bool\n  };\n\n  Route.prototype.componentDidMount = function() {\n    warning(\n      !(\n        this.props.children &&\n        !isEmptyChildren(this.props.children) &&\n        this.props.component\n      ),\n      \"You should not use <Route component> and <Route children> in the same route; <Route component> will be ignored\"\n    );\n\n    warning(\n      !(\n        this.props.children &&\n        !isEmptyChildren(this.props.children) &&\n        this.props.render\n      ),\n      \"You should not use <Route render> and <Route children> in the same route; <Route render> will be ignored\"\n    );\n\n    warning(\n      !(this.props.component && this.props.render),\n      \"You should not use <Route component> and <Route render> in the same route; <Route render> will be ignored\"\n    );\n  };\n\n  Route.prototype.componentDidUpdate = function(prevProps) {\n    warning(\n      !(this.props.location && !prevProps.location),\n      '<Route> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.'\n    );\n\n    warning(\n      !(!this.props.location && prevProps.location),\n      '<Route> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.'\n    );\n  };\n}\n\nexport default Route;\n", "import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { createLocation, createPath } from \"history\";\nimport invariant from \"tiny-invariant\";\nimport warning from \"tiny-warning\";\n\nimport Router from \"./Router.js\";\n\nfunction addLeadingSlash(path) {\n  return path.charAt(0) === \"/\" ? path : \"/\" + path;\n}\n\nfunction addBasename(basename, location) {\n  if (!basename) return location;\n\n  return {\n    ...location,\n    pathname: addLeadingSlash(basename) + location.pathname\n  };\n}\n\nfunction stripBasename(basename, location) {\n  if (!basename) return location;\n\n  const base = addLeadingSlash(basename);\n\n  if (location.pathname.indexOf(base) !== 0) return location;\n\n  return {\n    ...location,\n    pathname: location.pathname.substr(base.length)\n  };\n}\n\nfunction createURL(location) {\n  return typeof location === \"string\" ? location : createPath(location);\n}\n\nfunction staticHandler(methodName) {\n  return () => {\n    invariant(false, \"You cannot %s with <StaticRouter>\", methodName);\n  };\n}\n\nfunction noop() {}\n\n/**\n * The public top-level API for a \"static\" <Router>, so-called because it\n * can't actually change the current location. Instead, it just records\n * location changes in a context object. Useful mainly in testing and\n * server-rendering scenarios.\n */\nclass StaticRouter extends React.Component {\n  navigateTo(location, action) {\n    const { basename = \"\", context = {} } = this.props;\n    context.action = action;\n    context.location = addBasename(basename, createLocation(location));\n    context.url = createURL(context.location);\n  }\n\n  handlePush = location => this.navigateTo(location, \"PUSH\");\n  handleReplace = location => this.navigateTo(location, \"REPLACE\");\n  handleListen = () => noop;\n  handleBlock = () => noop;\n\n  render() {\n    const { basename = \"\", context = {}, location = \"/\", ...rest } = this.props;\n\n    const history = {\n      createHref: path => addLeadingSlash(basename + createURL(path)),\n      action: \"POP\",\n      location: stripBasename(basename, createLocation(location)),\n      push: this.handlePush,\n      replace: this.handleReplace,\n      go: staticHandler(\"go\"),\n      goBack: staticHandler(\"goBack\"),\n      goForward: staticHandler(\"goForward\"),\n      listen: this.handleListen,\n      block: this.handleBlock\n    };\n\n    return <Router {...rest} history={history} staticContext={context} />;\n  }\n}\n\nif (__DEV__) {\n  StaticRouter.propTypes = {\n    basename: PropTypes.string,\n    context: PropTypes.object,\n    location: PropTypes.oneOfType([PropTypes.string, PropTypes.object])\n  };\n\n  StaticRouter.prototype.componentDidMount = function() {\n    warning(\n      !this.props.history,\n      \"<StaticRouter> ignores the history prop. To use a custom history, \" +\n        \"use `import { Router }` instead of `import { StaticRouter as Router }`.\"\n    );\n  };\n}\n\nexport default StaticRouter;\n", "import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport warning from \"tiny-warning\";\n\nimport RouterContext from \"./RouterContext.js\";\nimport matchPath from \"./matchPath.js\";\n\n/**\n * The public API for rendering the first <Route> that matches.\n */\nclass Switch extends React.Component {\n  render() {\n    return (\n      <RouterContext.Consumer>\n        {context => {\n          invariant(context, \"You should not use <Switch> outside a <Router>\");\n\n          const location = this.props.location || context.location;\n\n          let element, match;\n\n          // We use React.Children.forEach instead of React.Children.toArray().find()\n          // here because toArray adds keys to all child elements and we do not want\n          // to trigger an unmount/remount for two <Route>s that render the same\n          // component at different URLs.\n          React.Children.forEach(this.props.children, child => {\n            if (match == null && React.isValidElement(child)) {\n              element = child;\n\n              const path = child.props.path || child.props.from;\n\n              match = path\n                ? matchPath(location.pathname, { ...child.props, path })\n                : context.match;\n            }\n          });\n\n          return match\n            ? React.cloneElement(element, { location, computedMatch: match })\n            : null;\n        }}\n      </RouterContext.Consumer>\n    );\n  }\n}\n\nif (__DEV__) {\n  Switch.propTypes = {\n    children: PropTypes.node,\n    location: PropTypes.object\n  };\n\n  Switch.prototype.componentDidUpdate = function(prevProps) {\n    warning(\n      !(this.props.location && !prevProps.location),\n      '<Switch> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.'\n    );\n\n    warning(\n      !(!this.props.location && prevProps.location),\n      '<Switch> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.'\n    );\n  };\n}\n\nexport default Switch;\n", "import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport hoistStatics from \"hoist-non-react-statics\";\nimport invariant from \"tiny-invariant\";\n\nimport RouterContext from \"./RouterContext.js\";\n\n/**\n * A public higher-order component to access the imperative API\n */\nfunction withRouter(Component) {\n  const displayName = `withRouter(${Component.displayName || Component.name})`;\n  const C = props => {\n    const { wrappedComponentRef, ...remainingProps } = props;\n\n    return (\n      <RouterContext.Consumer>\n        {context => {\n          invariant(\n            context,\n            `You should not use <${displayName} /> outside a <Router>`\n          );\n          return (\n            <Component\n              {...remainingProps}\n              {...context}\n              ref={wrappedComponentRef}\n            />\n          );\n        }}\n      </RouterContext.Consumer>\n    );\n  };\n\n  C.displayName = displayName;\n  C.WrappedComponent = Component;\n\n  if (__DEV__) {\n    C.propTypes = {\n      wrappedComponentRef: PropTypes.oneOfType([\n        PropTypes.string,\n        PropTypes.func,\n        PropTypes.object\n      ])\n    };\n  }\n\n  return hoistStatics(C, Component);\n}\n\nexport default withRouter;\n", "import React from \"react\";\nimport invariant from \"tiny-invariant\";\n\nimport RouterContext from \"./RouterContext.js\";\nimport HistoryContext from \"./HistoryContext.js\";\nimport matchPath from \"./matchPath.js\";\n\nconst useContext = React.useContext;\n\nexport function useHistory() {\n  if (__DEV__) {\n    invariant(\n      typeof useContext === \"function\",\n      \"You must use React >= 16.8 in order to use useHistory()\"\n    );\n  }\n\n  return useContext(HistoryContext);\n}\n\nexport function useLocation() {\n  if (__DEV__) {\n    invariant(\n      typeof useContext === \"function\",\n      \"You must use React >= 16.8 in order to use useLocation()\"\n    );\n  }\n\n  return useContext(RouterContext).location;\n}\n\nexport function useParams() {\n  if (__DEV__) {\n    invariant(\n      typeof useContext === \"function\",\n      \"You must use React >= 16.8 in order to use useParams()\"\n    );\n  }\n\n  const match = useContext(RouterContext).match;\n  return match ? match.params : {};\n}\n\nexport function useRouteMatch(path) {\n  if (__DEV__) {\n    invariant(\n      typeof useContext === \"function\",\n      \"You must use React >= 16.8 in order to use useRouteMatch()\"\n    );\n  }\n\n  const location = useLocation();\n  const match = useContext(RouterContext).match;\n  return path ? matchPath(location.pathname, path) : match;\n}\n", "if (__DEV__) {\n  if (typeof window !== \"undefined\") {\n    const global = window;\n    const key = \"__react_router_build__\";\n    const buildNames = { cjs: \"CommonJS\", esm: \"ES modules\", umd: \"UMD\" };\n\n    if (global[key] && global[key] !== process.env.BUILD_FORMAT) {\n      const initialBuildName = buildNames[global[key]];\n      const secondaryBuildName = buildNames[process.env.BUILD_FORMAT];\n\n      // TODO: Add link to article that explains in detail how to avoid\n      // loading 2 different builds.\n      throw new Error(\n        `You are loading the ${secondaryBuildName} build of React Router ` +\n          `on a page that is already running the ${initialBuildName} ` +\n          `build, so things won't work right.`\n      );\n    }\n\n    global[key] = process.env.BUILD_FORMAT;\n  }\n}\n\nexport { default as MemoryRouter } from \"./MemoryRouter.js\";\nexport { default as Prompt } from \"./Prompt.js\";\nexport { default as Redirect } from \"./Redirect.js\";\nexport { default as Route } from \"./Route.js\";\nexport { default as Router } from \"./Router.js\";\nexport { default as StaticRouter } from \"./StaticRouter.js\";\nexport { default as Switch } from \"./Switch.js\";\nexport { default as generatePath } from \"./generatePath.js\";\nexport { default as matchPath } from \"./matchPath.js\";\nexport { default as withRouter } from \"./withRouter.js\";\n\nexport { default as __HistoryContext } from \"./HistoryContext.js\";\nexport { default as __RouterContext } from \"./RouterContext.js\";\n\nexport { useHistory, useLocation, useParams, useRouteMatch } from \"./hooks.js\";\n", "import React from \"react\";\nimport { Router } from \"react-router\";\nimport { createBrowserHistory as createHistory } from \"history\";\nimport PropTypes from \"prop-types\";\nimport warning from \"tiny-warning\";\n\n/**\n * The public API for a <Router> that uses HTML5 history.\n */\nclass BrowserRouter extends React.Component {\n  history = createHistory(this.props);\n\n  render() {\n    return <Router history={this.history} children={this.props.children} />;\n  }\n}\n\nif (__DEV__) {\n  BrowserRouter.propTypes = {\n    basename: PropTypes.string,\n    children: PropTypes.node,\n    forceRefresh: PropTypes.bool,\n    getUserConfirmation: PropTypes.func,\n    keyLength: PropTypes.number\n  };\n\n  BrowserRouter.prototype.componentDidMount = function() {\n    warning(\n      !this.props.history,\n      \"<BrowserRouter> ignores the history prop. To use a custom history, \" +\n        \"use `import { Router }` instead of `import { BrowserRouter as Router }`.\"\n    );\n  };\n}\n\nexport default BrowserRouter;\n", "import React from \"react\";\nimport { Router } from \"react-router\";\nimport { createHashHistory as createHistory } from \"history\";\nimport PropTypes from \"prop-types\";\nimport warning from \"tiny-warning\";\n\n/**\n * The public API for a <Router> that uses window.location.hash.\n */\nclass HashRouter extends React.Component {\n  history = createHistory(this.props);\n\n  render() {\n    return <Router history={this.history} children={this.props.children} />;\n  }\n}\n\nif (__DEV__) {\n  HashRouter.propTypes = {\n    basename: PropTypes.string,\n    children: PropTypes.node,\n    getUserConfirmation: PropTypes.func,\n    hashType: PropTypes.oneOf([\"hashbang\", \"noslash\", \"slash\"])\n  };\n\n  HashRouter.prototype.componentDidMount = function() {\n    warning(\n      !this.props.history,\n      \"<HashRouter> ignores the history prop. To use a custom history, \" +\n        \"use `import { Router }` instead of `import { HashRouter as Router }`.\"\n    );\n  };\n}\n\nexport default HashRouter;\n", "import { createLocation } from \"history\";\n\nexport const resolveToLocation = (to, currentLocation) =>\n  typeof to === \"function\" ? to(currentLocation) : to;\n\nexport const normalizeToLocation = (to, currentLocation) => {\n  return typeof to === \"string\"\n    ? createLocation(to, null, null, currentLocation)\n    : to;\n};\n", "import React from \"react\";\nimport { __RouterContext as RouterContext } from \"react-router\";\nimport { createPath } from 'history';\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport {\n  resolveToLocation,\n  normalizeToLocation\n} from \"./utils/locationUtils.js\";\n\n// React 15 compat\nconst forwardRefShim = C => C;\nlet { forwardRef } = React;\nif (typeof forwardRef === \"undefined\") {\n  forwardRef = forwardRefShim;\n}\n\nfunction isModifiedEvent(event) {\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nconst LinkAnchor = forwardRef(\n  (\n    {\n      innerRef, // TODO: deprecate\n      navigate,\n      onClick,\n      ...rest\n    },\n    forwardedRef\n  ) => {\n    const { target } = rest;\n\n    let props = {\n      ...rest,\n      onClick: event => {\n        try {\n          if (onClick) onClick(event);\n        } catch (ex) {\n          event.preventDefault();\n          throw ex;\n        }\n\n        if (\n          !event.defaultPrevented && // onClick prevented default\n          event.button === 0 && // ignore everything but left clicks\n          (!target || target === \"_self\") && // let browser handle \"target=_blank\" etc.\n          !isModifiedEvent(event) // ignore clicks with modifier keys\n        ) {\n          event.preventDefault();\n          navigate();\n        }\n      }\n    };\n\n    // React 15 compat\n    if (forwardRefShim !== forwardRef) {\n      props.ref = forwardedRef || innerRef;\n    } else {\n      props.ref = innerRef;\n    }\n\n    /* eslint-disable-next-line jsx-a11y/anchor-has-content */\n    return <a {...props} />;\n  }\n);\n\nif (__DEV__) {\n  LinkAnchor.displayName = \"LinkAnchor\";\n}\n\n/**\n * The public API for rendering a history-aware <a>.\n */\nconst Link = forwardRef(\n  (\n    {\n      component = LinkAnchor,\n      replace,\n      to,\n      innerRef, // TODO: deprecate\n      ...rest\n    },\n    forwardedRef\n  ) => {\n    return (\n      <RouterContext.Consumer>\n        {context => {\n          invariant(context, \"You should not use <Link> outside a <Router>\");\n\n          const { history } = context;\n\n          const location = normalizeToLocation(\n            resolveToLocation(to, context.location),\n            context.location\n          );\n\n          const href = location ? history.createHref(location) : \"\";\n          const props = {\n            ...rest,\n            href,\n            navigate() {\n              const location = resolveToLocation(to, context.location);\n              const isDuplicateNavigation = createPath(context.location) === createPath(normalizeToLocation(location));\n              const method = (replace || isDuplicateNavigation) ? history.replace : history.push;\n\n              method(location);\n            }\n          };\n\n          // React 15 compat\n          if (forwardRefShim !== forwardRef) {\n            props.ref = forwardedRef || innerRef;\n          } else {\n            props.innerRef = innerRef;\n          }\n\n          return React.createElement(component, props);\n        }}\n      </RouterContext.Consumer>\n    );\n  }\n);\n\nif (__DEV__) {\n  const toType = PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.object,\n    PropTypes.func\n  ]);\n  const refType = PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.func,\n    PropTypes.shape({ current: PropTypes.any })\n  ]);\n\n  Link.displayName = \"Link\";\n\n  Link.propTypes = {\n    innerRef: refType,\n    onClick: PropTypes.func,\n    replace: PropTypes.bool,\n    target: PropTypes.string,\n    to: toType.isRequired\n  };\n}\n\nexport default Link;\n", "import React from \"react\";\nimport { __RouterContext as RouterContext, matchPath } from \"react-router\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport Link from \"./Link.js\";\nimport {\n  resolveToLocation,\n  normalizeToLocation\n} from \"./utils/locationUtils.js\";\n\n// React 15 compat\nconst forwardRefShim = C => C;\nlet { forwardRef } = React;\nif (typeof forwardRef === \"undefined\") {\n  forwardRef = forwardRefShim;\n}\n\nfunction joinClassnames(...classnames) {\n  return classnames.filter(i => i).join(\" \");\n}\n\n/**\n * A <Link> wrapper that knows if it's \"active\" or not.\n */\nconst NavLink = forwardRef(\n  (\n    {\n      \"aria-current\": ariaCurrent = \"page\",\n      activeClassName = \"active\", // TODO: deprecate\n      activeStyle, // TODO: deprecate\n      className: classNameProp,\n      exact,\n      isActive: isActiveProp,\n      location: locationProp,\n      sensitive,\n      strict,\n      style: styleProp,\n      to,\n      innerRef, // TODO: deprecate\n      ...rest\n    },\n    forwardedRef\n  ) => {\n    return (\n      <RouterContext.Consumer>\n        {context => {\n          invariant(context, \"You should not use <NavLink> outside a <Router>\");\n\n          const currentLocation = locationProp || context.location;\n          const toLocation = normalizeToLocation(\n            resolveToLocation(to, currentLocation),\n            currentLocation\n          );\n          const { pathname: path } = toLocation;\n          // Regex taken from: https://github.com/pillarjs/path-to-regexp/blob/master/index.js#L202\n          const escapedPath =\n            path && path.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n\n          const match = escapedPath\n            ? matchPath(currentLocation.pathname, {\n                path: escapedPath,\n                exact,\n                sensitive,\n                strict\n              })\n            : null;\n          const isActive = !!(isActiveProp\n            ? isActiveProp(match, currentLocation)\n            : match);\n\n          let className =\n            typeof classNameProp === \"function\"\n              ? classNameProp(isActive)\n              : classNameProp;\n\n          let style =\n            typeof styleProp === \"function\" ? styleProp(isActive) : styleProp;\n\n          if (isActive) {\n            className = joinClassnames(className, activeClassName);\n            style = { ...style, ...activeStyle };\n          }\n\n          const props = {\n            \"aria-current\": (isActive && ariaCurrent) || null,\n            className,\n            style,\n            to: toLocation,\n            ...rest\n          };\n\n          // React 15 compat\n          if (forwardRefShim !== forwardRef) {\n            props.ref = forwardedRef || innerRef;\n          } else {\n            props.innerRef = innerRef;\n          }\n\n          return <Link {...props} />;\n        }}\n      </RouterContext.Consumer>\n    );\n  }\n);\n\nif (__DEV__) {\n  NavLink.displayName = \"NavLink\";\n\n  const ariaCurrentType = PropTypes.oneOf([\n    \"page\",\n    \"step\",\n    \"location\",\n    \"date\",\n    \"time\",\n    \"true\",\n    \"false\"\n  ]);\n\n  NavLink.propTypes = {\n    ...Link.propTypes,\n    \"aria-current\": ariaCurrentType,\n    activeClassName: PropTypes.string,\n    activeStyle: PropTypes.object,\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n    exact: PropTypes.bool,\n    isActive: PropTypes.func,\n    location: PropTypes.object,\n    sensitive: PropTypes.bool,\n    strict: PropTypes.bool,\n    style: PropTypes.oneOfType([PropTypes.object, PropTypes.func])\n  };\n}\n\nexport default NavLink;\n", "import type { FC, PropsWithChildren } from 'react';\nimport { memo, useContext } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { AppContext } from './AppContext';\n\n// eslint-disable-next-line import/no-unused-modules\nexport const appPortalId = 'mwp-app-portal';\n\n/**\n * Portal for rendering content into the Root of the App (right above the <Footer />).\n *\n * Use as return React.createPortal(<element>, appPortalId)\n */\nexport const AppPortal: FC<{ className?: string }> = memo(props => {\n  const { appPortalRef } = useContext(AppContext);\n\n  return <aside className={props.className} data-testid={appPortalId} ref={appPortalRef} />;\n});\n\n/**\n * Easy insertion point into the AppPortal.\n *\n * Use as <IntoAppPortal>{.. your stuff ..}</IntoAppPortal>\n *\n * NOTE: The contently only gets inserted on the client. Nothing displays on the server.\n */\nexport const IntoAppPortal: FC<PropsWithChildren> = ({ children }) => {\n  const { appPortalRef } = useContext(AppContext);\n\n  return appPortalRef?.current ? createPortal(children, appPortalRef!.current) : null;\n};\n", "import type { AnchorComponent } from '@snapchat/snap-design-system-marketing';\nimport { forwardRef, useContext } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { AppContext } from '../../AppContext';\nimport { getLinkProps } from '../../helpers/getLinkProps';\nimport { isLocalUrl } from '../../helpers/getLocalPath';\n\n/**\n * A custom anchor renderer that does a few usability things:\n *\n * - Use the react router's {@link Link} for local links\n * - Use the {@link getLinkProps} to override the `href`, `target` and `rel` props. This adds url\n *   parameters to outgoing links, and decides whether links open in a new tab or not.\n */\nexport const Anchor: AnchorComponent = forwardRef((props, ref) => {\n  const { currentLocale, getCurrentUrl } = useContext(AppContext);\n\n  // Do nothing if there's no hyperlink reference.\n  if (!props.href) {\n    return <a {...props} ref={ref} />;\n  }\n\n  // Apply updates like path redirects, parameter copying etc.\n  const updatedProps = getLinkProps({\n    destination: props.href,\n    currentUrl: new URL(getCurrentUrl()),\n    locale: currentLocale,\n    isDownload: props.download,\n  });\n\n  const url = new URL(updatedProps.href!, getCurrentUrl());\n\n  if (isLocalUrl(url)) {\n    const { href: _, ...nonHrefProps } = props;\n    return (\n      <Link\n        {...nonHrefProps}\n        // Note: we ignore the updatedProps here not related to the url.\n        ref={ref}\n        to={{\n          // Have to use this syntax instead of just `url` because it breaks\n          // the link.\n          pathname: url.pathname,\n          search: url.search,\n          hash: url.hash,\n        }}\n        target=\"_self\"\n      />\n    );\n  }\n\n  // IMPORTANT NOTE: The order here means that if the `getLinkProps` returns\n  // a `target`, it overrides whatever the user has passed. This is a decision\n  // That's easy to revert and there are use-cases for both ways. However\n  // there isn't a use-case to force a target on an individual link that doesn't\n  // follow the site policy, hense updated propes always override passed-in props.\n  return <a ref={ref} {...props} {...updatedProps} />;\n});\n", "import type { IsUrlCurrent } from '../components/ConsumerContextProvider'; // eslint-disable-line max-len\nimport { Config } from '../config';\n\n/** List of domains that we consider as 'local'. I.e. links to these do not require hard navigations. */\nconst localHosts = [\n  Config.domainName,\n  `www.${Config.domainName}`,\n  'localhost',\n  '127.0.0.1',\n  '[::]',\n  '[::1]',\n  /.*-dot-entapps-web-dev.gae.sc-corp.net/,\n];\n\n/**\n * Returns whether the url is local (on the same domain).\n *\n * Accounts for current domain, domain with www. subdomain and localhost.\n */\nexport const isLocalUrl = (url: URL): boolean => {\n  for (const domain of localHosts) {\n    if (typeof domain === 'string' && url.hostname === domain) {\n      return true;\n    }\n\n    if (typeof domain === 'object' && domain.test(url.hostname)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\n/**\n * Helper function to determine whether or not we should flush logs. We only need to flush logs when\n * navigating to an external URL that is opened in the same tab, which varies based on site config.\n */\nexport const shouldFlushLogs = (url?: string): boolean => {\n  if (!url) return false;\n\n  // if the url is not local, we check if it is in the same tab config, if it is, we flush logs\n  try {\n    const urlObj = new URL(url);\n\n    if (isLocalUrl(urlObj)) {\n      return false;\n    }\n\n    const sameDomains = Config.sameTabDomains ?? [];\n\n    return sameDomains.some((domain: string) => urlObj.hostname === domain);\n  } catch (_e) {\n    // Do nothing return false\n  }\n\n  return false;\n};\n\n/**\n * Function factory for whether a given URL is the one currently being displayed OR is a parent.\n *\n * This is used to highlight breadcrumbs through navigation by highlighting items in the nav bar,\n * side bar etc.\n *\n * TODO: Refactor this. This should be in a separate context, and it needs to CHANGE when the\n * current path changes. Ticket: https://jira.sc-corp.net/browse/ENTWEB-5794\n */\nexport const createIsCurrentUrl: (getRequestUrl: () => string) => IsUrlCurrent =\n  getRequestUrl => (destinationUrlString, options) => {\n    const currentUrl = new URL(getRequestUrl());\n    const destinationUrl = new URL(destinationUrlString, currentUrl);\n\n    // If the target URL is in a different domain, then assume it's external and definitely not current.\n    if (!isLocalUrl(destinationUrl)) {\n      return false;\n    }\n\n    // Special case root dir.\n    if (destinationUrl.pathname === '/') {\n      return currentUrl.pathname === '/';\n    }\n\n    // Normal case\n    if (!options?.ignoredPathPrefix) {\n      return currentUrl.pathname === destinationUrl.pathname;\n    }\n\n    // Edge case: navigation item highlighting\n    // In this case, we need to omit prefixes when comparing the current path to the target url specified by users.\n    const pattern = new RegExp(`^${options.ignoredPathPrefix}`);\n    const currentPathWithoutPrefix = currentUrl.pathname.replace(pattern, '');\n\n    return currentPathWithoutPrefix === destinationUrl.pathname;\n  };\n", "import { Config } from '../config';\nimport { UrlParameter } from '../constants/urlParameters';\nimport { isLocalUrl } from './getLocalPath';\n\n/** Parameters we should always persist when navigating within the same tab */\nexport const persistedQueryParams = [\n  ...(Config.persistentQueryParams ?? []),\n  UrlParameter.GOOGLE_TAG_MANAGER_DEBUG,\n  UrlParameter.USE_ALTERNATE_MOTIF,\n  UrlParameter.MWP_DEBUG,\n];\n\n/** Parameters we should always persist, even for external navigation */\nexport const alwaysPersistQueryParams = ['lang'];\n\nexport const checkIfSameTabDomain = (targetUrl: URL, currentUrl: URL): boolean => {\n  // used for routing path redirects\n  if (isLocalUrl(targetUrl)) return true;\n\n  const sameDomains = [...(Config.sameTabDomains ?? []), currentUrl.hostname];\n  return sameDomains.some((domain: string) => targetUrl.hostname === domain);\n};\n\nexport const checkIfPersistParamsDomain = (url: URL, currentUrl: URL): boolean => {\n  // used for routing path redirects\n  if (isLocalUrl(url)) return true;\n\n  const persistDomains = new Set(Config.persistQueryParamsDomains ?? []);\n  persistDomains.add(currentUrl.hostname);\n  return persistDomains.has(url.hostname);\n};\n", "// Logic is based on:\n// https://github.sc-corp.net/Snapchat/web-self-serve-ads/blob/master/client/src/apps/shared/scripts/l10n/utils/bhc.ts\n//\n// That site is built atop Salesforce and requires special handling.\n// - uses `language` instead of `lang` for tracking locale\n// - uses Salesforce language codes instead of web locale\n// - only supports 2 languages currently\n\nexport const businessHelpHostname = 'businesshelp.snapchat.com';\n\n/**\n * Maps web locale codes to language equivalents for businesshelp.snapchat.com\n *\n * See this page for list of Salesforce supported languages:\n * https://help.salesforce.com/s/articleView?id=sf.faq_getstart_what_languages_does.htm&type=5 Not\n * all of these are supported by businesshelp.snapchat.com, but the site will roll over to en_US for\n * unsupported languages.\n */\nconst localeLanguageMap: Record<string, string | undefined> = {\n  ar: 'ar',\n  'da-DK': 'da',\n  'de-DE': 'de',\n  'el-GR': 'el',\n  'en-GB': 'en_GB',\n  'en-US': 'en_US',\n  'es-ES': 'es',\n  'es-MX': 'es_MX',\n  'fi-FI': 'fi',\n  'fr-CA': 'fr',\n  'fr-FR': 'fr',\n  'id-ID': 'in',\n  'it-IT': 'it',\n  'ja-JP': 'ja',\n  'ko-KR': 'ko',\n  'nb-NO': 'no',\n  'nl-NL': 'nl_NL',\n  'pl-PL': 'pl',\n  'pt-BR': 'pt_BR',\n  'pt-PT': 'pt_PT',\n  'ru-RU': 'ru',\n  'sv-SE': 'sv',\n  'th-TH': 'th',\n  'tr-TR': 'tr',\n  'vi-VN': 'vi',\n  'zh-Hans': 'zh_CN',\n  'zh-Hant': 'zh_TW',\n};\n\n/**\n * Appends the specified url with the `language` query parameter.\n *\n * Includes special logic for the businesshelp.snapchat.com website.\n */\nexport const appendLocaleToBusinessHelpUrl = (url: URL, locale: string): void => {\n  const newLocale = localeLanguageMap[locale];\n\n  if (newLocale && !url.searchParams.has('language')) {\n    url.searchParams.set('language', newLocale);\n  }\n};\n", "import { defaultFeatureFlags } from '../components/FeatureFlags';\nimport { urlParameters } from '../constants/urlParameters';\nimport { appendLocaleToBusinessHelpUrl, businessHelpHostname } from './businessHelpUrl';\n\nconst relativePathPrefix = '/';\nconst httpPrefix = 'http://';\nconst httpPrefixUppercase = httpPrefix.toUpperCase();\nconst httpsPrefix = 'https://';\nconst httpsPrefixUppercase = httpsPrefix.toUpperCase();\n\nexport const isUrl = (str?: string): boolean =>\n  !!str &&\n  (str.startsWith(relativePathPrefix) ||\n    str.startsWith(httpPrefix) ||\n    str.startsWith(httpPrefixUppercase) ||\n    str.startsWith(httpsPrefix) ||\n    str.startsWith(httpsPrefixUppercase));\n\n/**\n * Combine query params of both old and new URL before navigating to new URL. For persistent query\n * params, we preserve them from the old URL. (i.e. if new URL also has a persistent query param, it\n * does not overwrite the old one) For non-persistent params in old URL, we drop them. (This is\n * because we don't want to track any non-UTM query params for now) If new URL contains referrer,\n * apply the persistent query params to referrer URL as well.\n */\nexport const copyUrlSearchParameters = (\n  destinationUrl: URL,\n  currentUrl: URL,\n  persistentQueryParams: string[]\n): void => {\n  const referrerUrlString = destinationUrl.searchParams.get('referrer');\n  const referrerUrl = referrerUrlString ? new URL(referrerUrlString) : null;\n\n  for (const queryParameter of persistentQueryParams) {\n    const value =\n      destinationUrl.searchParams.get(queryParameter) ??\n      currentUrl.searchParams.get(queryParameter) ??\n      referrerUrl?.searchParams.get(queryParameter);\n\n    if (!value) {\n      continue;\n    }\n    destinationUrl.searchParams.set(queryParameter, value);\n    referrerUrl?.searchParams.set(queryParameter, value);\n  }\n\n  if (referrerUrl) {\n    destinationUrl.searchParams.set('referrer', referrerUrl.href);\n  }\n};\n\n/** Returns the destination URL with some query parameters copied over from the current URL. */\nexport const mergeUrlParameters = (\n  destinationUrl: URL,\n  currentUrl: URL,\n  persistentQueryParams: string[] = []\n): void => {\n  copyUrlSearchParameters(destinationUrl, currentUrl, [\n    ...urlParameters,\n    ...Object.keys(defaultFeatureFlags),\n    ...persistentQueryParams,\n  ]);\n};\n\n/** Whether the url is for an internal site that should accept the LANG parameter. */\nconst acceptsLangParameter = (url: URL): boolean => {\n  return (\n    url.hostname.includes('snap.com') ||\n    url.hostname.includes('snapchat.com') ||\n    url.hostname.includes('pixy.com') ||\n    url.hostname.includes('yellowla.com') ||\n    url.hostname.includes('spectacles.com') ||\n    url.hostname.includes('arcadiacreativestudio.com')\n  );\n};\n\n/**\n * Appends the specified url with the `lang` query parameter.\n *\n * Includes special logic for the businesshelp.snapchat.com website.\n */\nexport const appendLocaleParameterToUrl = (url: URL, locale: string): void => {\n  if (!locale || !acceptsLangParameter(url)) return;\n\n  if (url.hostname === businessHelpHostname) {\n    appendLocaleToBusinessHelpUrl(url, locale);\n  } else if (!url.searchParams.has('lang')) {\n    url.searchParams.set('lang', locale);\n  }\n};\n", "import { localeMap } from '@snapchat/mw-common';\nimport type { AnchorHTMLAttributes } from 'react';\n\nimport { isLocalUrl } from './getLocalPath';\nimport {\n  alwaysPersistQueryParams,\n  checkIfPersistParamsDomain,\n  checkIfSameTabDomain,\n  persistedQueryParams,\n} from './redirectTo';\nimport { appendLocaleParameterToUrl, mergeUrlParameters } from './uri';\n\ninterface GetLinkPropsOptions {\n  destination: string | URL | undefined;\n  currentUrl: URL;\n  locale: string;\n  newTab?: boolean;\n  isDownload?: boolean;\n}\n\nconst allLocales = Object.keys(localeMap);\n\n/**\n * Helper function for determining properties on an anchor (`<a ...`) for a given url in certain\n * context.\n *\n * Provides utility behaviors:\n *\n * - Triggers same or different tab navigation based on Site Configuration\n * - Trims and/or retains query params based on Site Configuration\n * - Appends `lang` param to external navigation\n */\nexport function getLinkProps(options: GetLinkPropsOptions): AnchorHTMLAttributes<unknown> {\n  if (!options.destination) return {};\n\n  const targetUrl = new URL(options.destination, options.currentUrl);\n\n  const isSameTabDomain = checkIfSameTabDomain(targetUrl, options.currentUrl);\n  const isPersistParamsDomain = checkIfPersistParamsDomain(targetUrl, options.currentUrl);\n  const openInNewTab = options.newTab !== undefined ? options.newTab : !isSameTabDomain;\n  const isFinalTargetLocal = isLocalUrl(targetUrl);\n\n  // if its a download link, we don't need to do anything special, just return the passed in\n  // href and always open in new tab to preserve current browsing context\n  if (options.isDownload) {\n    return {\n      href: targetUrl.href,\n      rel: isFinalTargetLocal ? 'opener' : 'noopener',\n      target: '_blank',\n    };\n  }\n\n  const queryParamsToPersist = [\n    // only persist these query parameters for local and same tab navigation\n    ...(isPersistParamsDomain ? persistedQueryParams : []),\n    // always persist these query parameters\n    ...alwaysPersistQueryParams,\n  ];\n\n  mergeUrlParameters(targetUrl, options.currentUrl, queryParamsToPersist);\n\n  // We only append lang=.. parameter to external sites.\n  if (!isFinalTargetLocal) {\n    appendLocaleParameterToUrl(targetUrl, options.locale);\n  }\n\n  // Remove all locale prefixes for local links.\n  if (isFinalTargetLocal) {\n    const localePrefix = allLocales.find(locale => targetUrl.pathname.match(`^/${locale}(/|$)`));\n\n    if (localePrefix) {\n      targetUrl.pathname = targetUrl.pathname.replace(`/${localePrefix}`, '');\n    }\n  }\n\n  // Mimic behavior of the stripTrailingSlash middleware:\n  // Used to prevent errors if a content editor includes this when setting a hyperlink target URL, etc.\n  // Purposely does not address behavior for external links\n  if (\n    isFinalTargetLocal &&\n    targetUrl.pathname.length > 1 &&\n    targetUrl.pathname[targetUrl.pathname.length - 1] === '/'\n  ) {\n    targetUrl.pathname = targetUrl.pathname.slice(0, -1);\n  }\n\n  // NOTE: Since 2021, all modern browsers have target=_blank imply rel=noopener\n  // I.e. Chrome: https://chromium-review.googlesource.com/c/chromium/src/+/1630010\n  // but we only want rel=noopener for external (non-local) sites, so we set the\n  // rel=opener|noopener explicitly.\n  return {\n    href: targetUrl.href,\n    rel: isFinalTargetLocal ? 'opener' : 'noopener',\n    target: openInNewTab ? '_blank' : '_self',\n  };\n}\n", "import { cx } from '@emotion/css';\nimport { Button as ButtonSDS, Icon, MessageContext } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { Config } from '../../config';\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logger, logUserEvent } from '../../helpers/logging';\nimport { UserAction } from '../../types/events';\nimport { AddToCart } from '../AddToCart';\nimport { ShopifyContext } from '../ShopifyProvider';\nimport { CartItem } from './CartItem';\nimport { CartContext } from './CartProvider';\nimport { useCheckoutUrl, usePrice } from './hooks';\nimport { Price } from './Price';\nimport {\n  activeWrapperCss,\n  buttonWrapperCss,\n  cartCloseButtonCss,\n  cartCloseCss,\n  cartInternalCss,\n  cartOverlayActiveCss,\n  cartOverlayCss,\n  cartWrapperStyles,\n  checkoutButtonCss,\n  checkoutDisclaimerCss,\n  featuredProductButtonCss,\n  featuredProductImg,\n  featuredProductPriceCss,\n  featuredProductTitleCss,\n  noCartItemsContainerCss,\n  noCartItemsTitleCss,\n  totalCss,\n} from './styles';\n\nexport const Cart: FC = () => {\n  const elementLocation = useContext(ElementLocation).elementLocation;\n  const { formatMessage } = useContext(MessageContext);\n  const { catalog, productOptionById, currencyCode } = useContext(ShopifyContext);\n  const cart = useContext(CartContext);\n  const featuredProductKey = Config.shopify?.options.featuredProduct ?? '';\n  const featuredProduct = catalog[featuredProductKey];\n  const checkoutUrl = useCheckoutUrl();\n\n  const checkoutButtonCopy = formatMessage({\n    id: 'cartCheckoutButton',\n    defaultMessage: 'Checkout',\n  });\n\n  const disclaimer = formatMessage({\n    id: 'cartCheckoutDisclaimer',\n    defaultMessage: 'Shipping calculated at checkout',\n  });\n\n  const noCartItems = formatMessage({\n    id: 'noCartItems',\n    defaultMessage: 'Nothing added to cart yet',\n  });\n\n  const hasItems = cart.lines.length > 0;\n\n  const totalFromCart = cart.lines.reduce((acc, line) => {\n    const entry = productOptionById[line.optionId];\n\n    if (entry) {\n      return acc + entry.option.price * line.quantity;\n    }\n\n    return acc;\n  }, 0);\n\n  // Calculate deposit total: for products with selling plan deposit data, use the deposit amount\n  // for the current currency instead of the full product price.\n  const depositTotalFromCart = cart.lines.reduce((acc, line) => {\n    const entry = productOptionById[line.optionId];\n\n    if (entry) {\n      const product = catalog[entry.productKey];\n      const currencyEntry =\n        product?.sellingPlan?.depositData && currencyCode\n          ? product.sellingPlan.depositData[currencyCode]\n          : undefined;\n      const itemPrice = currencyEntry?.amount ?? entry.option.price;\n\n      return acc + itemPrice * line.quantity;\n    }\n\n    return acc;\n  }, 0);\n\n  const hasDeposits = depositTotalFromCart !== totalFromCart;\n  const total = usePrice(hasDeposits ? depositTotalFromCart : totalFromCart);\n\n  const totalCopy = formatMessage(\n    {\n      id: hasDeposits ? 'cartDepositTotal' : 'cartTotal',\n      defaultMessage: hasDeposits ? 'Due today {total}' : 'Total {total}',\n    },\n    { total }\n  );\n\n  // Log the checkout interaction and take the user to the Shopify site.\n  const onCheckoutClick = (): void => {\n    logUserEvent({\n      eventAction: UserAction.Click,\n      eventCategory: 'CheckoutButton',\n      eventLabel: null,\n      context: { targetUrl: checkoutUrl.href, elementText: checkoutButtonCopy, elementLocation },\n    });\n    void logger.flush();\n  };\n\n  return (\n    <div\n      className={cx(cartWrapperStyles(hasItems), {\n        [activeWrapperCss]: cart?.cartOpen,\n      })}\n    >\n      <div\n        onClick={() => cart.setCartOpen(false)}\n        className={cx(cartOverlayCss, {\n          [cartOverlayActiveCss]: cart?.cartOpen,\n        })}\n      />\n      <div className={buttonWrapperCss}>\n        <button className={cartCloseCss} onClick={() => cart.setCartOpen(false)}>\n          <Icon name=\"cross\" className={cartCloseButtonCss} />\n        </button>\n      </div>\n      <div className={cartInternalCss} />\n      {cart.lines.map(line => {\n        const entry = productOptionById[line.optionId];\n\n        if (!entry) return null;\n\n        const product = catalog[entry.productKey];\n\n        if (!product) return null;\n\n        // TODO Phase 2: title and image come from Shopify only. If Contentful overrides\n        // are needed (localized titles, branded images), add displayTitle/displayImage\n        // to CatalogProduct and prefer them here.\n        return (\n          <CartItem\n            key={line.optionId}\n            productKey={entry.productKey}\n            title={product.title}\n            image={product.featuredImage ?? ''}\n            price={entry.option.price}\n            sku={entry.option.sku}\n            optionId={entry.option.id}\n            optionTitle={entry.option.title}\n            maxQuantity={product.maxQuantity}\n            atpMessage={product.atpMessage}\n            sellingPlanDepositData={product.sellingPlan?.depositData}\n          />\n        );\n      })}\n      {!hasItems && (\n        <div className={noCartItemsContainerCss}>\n          <div className={noCartItemsTitleCss}>{noCartItems}</div>\n          {featuredProduct && (\n            <>\n              <div className={featuredProductImg(featuredProduct.featuredImage ?? '')} />\n              <div className={featuredProductTitleCss}>{featuredProduct.title}</div>\n              <Price\n                className={featuredProductPriceCss}\n                productPrice={featuredProduct.options[0]?.price ?? 0}\n              />\n              <AddToCart className={featuredProductButtonCss} productKey={featuredProductKey} />\n            </>\n          )}\n        </div>\n      )}\n      {hasItems && (\n        <>\n          <div className={totalCss}>{totalCopy}</div>\n          <div className={checkoutButtonCss}>\n            <ButtonSDS link={checkoutUrl.href} type=\"Primary\" onClick={onCheckoutClick}>\n              {checkoutButtonCopy}\n            </ButtonSDS>\n          </div>\n          <div className={checkoutDisclaimerCss}>{disclaimer}</div>\n        </>\n      )}\n    </div>\n  );\n};\n", "import { createContext } from 'react';\n\nexport interface ElementLocationProps {\n  /** The structural region of the page this context scope belongs to. */\n  elementLocation: 'Page' | 'Header' | 'Footer' | 'SideNavigation' | string | undefined;\n}\n\nexport const ElementLocation = createContext<ElementLocationProps>({\n  elementLocation: undefined,\n});\n", "import { cx } from '@emotion/css';\nimport {\n  Button as ButtonSDS,\n  FormattedMessage,\n  MotifScheme,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC, Ref } from 'react';\nimport { createRef, useContext, useEffect, useState } from 'react';\n\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logUserEvent } from '../../helpers/logging';\nimport { UserAction } from '../../types/events';\nimport { CartContext } from '../Cart/CartProvider';\nimport { ShopifyContext } from '../ShopifyProvider';\nimport { addToCartButtonCss, addToCartTooltipCss, disabledButtonCss } from './styles';\nimport type { AddToCartProps } from './types';\n\nconst AddToCartButton: FC<AddToCartProps> = ({ productKey = '', optionId, showTooltip }) => {\n  const cart = useContext(CartContext);\n  const { catalog, currencyCode = '' } = useContext(ShopifyContext);\n  const product = catalog[productKey];\n  const elementLocation = useContext(ElementLocation).elementLocation;\n\n  if (!product) {\n    return null;\n  }\n\n  // Use provided optionId or fall back to first option\n  const resolvedOptionId = optionId || product.options[0]?.id;\n  const line = cart.lines.find(l => l.optionId === (resolvedOptionId ?? ''));\n  const quantityInCart = line?.quantity ?? 0;\n  const disabled = quantityInCart === product.maxQuantity || !product.available;\n\n  const renderTooltip = () => {\n    if (quantityInCart === product.maxQuantity) {\n      return (\n        <FormattedMessage\n          id=\"maxCartQuantity\"\n          values={{ quantity: String(product.maxQuantity) }}\n          defaultMessage=\"Limit {quantity} per customer.\"\n        />\n      );\n    }\n\n    return null;\n  };\n\n  return (\n    <>\n      <ButtonSDS\n        type=\"Primary\"\n        className={disabled ? disabledButtonCss : undefined}\n        onClick={() => {\n          logUserEvent({\n            eventCategory: 'AddToCart',\n            eventAction: UserAction.Click,\n            eventLabel: `add_to_cart: ${productKey}`,\n            context: { elementText: 'Add to Cart', elementLocation },\n          });\n\n          cart.addLine({\n            productKey,\n            optionId: resolvedOptionId ?? '',\n            currencyCode,\n          });\n        }}\n        disabled={disabled}\n      >\n        <FormattedMessage id=\"addToCart\" defaultMessage=\"Add to Cart\" />\n      </ButtonSDS>\n      {showTooltip && disabled && <span className={addToCartTooltipCss}>{renderTooltip()}</span>}\n    </>\n  );\n};\n\nexport const AddToCart: FC<AddToCartProps> = ({ className, productKey = '', optionId }) => {\n  const { store, catalog, isCountrySupported } = useContext(ShopifyContext);\n  const isProductAvailableInCountry = !!store && isCountrySupported !== false;\n  const buttonRef: Ref<HTMLDivElement> = createRef();\n  const [showTooltip, setShowTooltip] = useState<boolean>(false);\n  const product = catalog[productKey];\n\n  useEffect(() => {\n    const button = buttonRef.current;\n\n    if (!button) return;\n\n    const onButtonMouseEnter = () => setShowTooltip(true);\n    const onButtonMouseLeave = () => setShowTooltip(false);\n\n    button.addEventListener('mouseenter', onButtonMouseEnter);\n    button.addEventListener('mouseleave', onButtonMouseLeave);\n\n    return () => {\n      button.removeEventListener('mouseenter', onButtonMouseEnter);\n      button.removeEventListener('mouseleave', onButtonMouseLeave);\n    };\n  }, [buttonRef]);\n\n  return (\n    <div ref={buttonRef} className={cx(className, MotifScheme.DEFAULT, addToCartButtonCss)}>\n      {isProductAvailableInCountry && product?.available ? (\n        <AddToCartButton productKey={productKey} optionId={optionId} showTooltip={showTooltip} />\n      ) : (\n        <>\n          {/* TODO: Add this to localized messages when we have a shop again. */}\n          Product not available in your country\n        </>\n      )}\n    </div>\n  );\n};\n\nAddToCart.displayName = 'AddToCart';\n", "import type { FC, PropsWithChildren } from 'react';\nimport { createContext } from 'react';\n\nimport type { CartState } from './types';\nimport { initialCartState, useCart } from './useCart';\n\nexport const CartContext = createContext<CartState>(initialCartState);\n\nexport const CartProvider: FC<PropsWithChildren> = ({ children }) => {\n  const cart = useCart();\n\n  return <CartContext.Provider value={cart}>{children}</CartContext.Provider>;\n};\n\nCartProvider.displayName = 'CartProvider';\n", "import { getLocalStorageItem, setLocalStorageItem } from '@snapchat/mw-common';\nimport noop from 'lodash-es/noop';\nimport { useCallback, useContext, useEffect, useState } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport { Config } from '../../config';\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logEvent, SubscribedEventType } from '../../helpers/logging';\nimport { UserAction } from '../../types/events';\nimport { ShopifyContext } from '../ShopifyProvider';\nimport type { CartEvent, CartLine, CartState, PersistedCart } from './types';\n\nconst shopifyCartKey = 'mwp-shopify-cart';\n\nexport const initialCartState: CartState = {\n  lines: [],\n  cartOpen: false,\n  addLine: noop,\n  removeLine: noop,\n  clearCart: noop,\n  setCartOpen: noop,\n  discountCode: '',\n  setDiscountCode: noop,\n};\n\n// TODO: Discount code flow is for the waitlist purchase flow (months away).\n// This must remain purely client-side to avoid CDN cache interference.\n// Needs validation logic added later \u2014 currently we pass the code to Shopify\n// checkout without any client-side validation.\nconst getUrlDiscount = (urlString: string) => {\n  try {\n    const url = new URL(urlString);\n    return url.searchParams.get('discount') ?? '';\n  } catch {\n    return '';\n  }\n};\n\n/**\n * Validate that persisted cart data matches the CartLine[] shape.\n * If invalid (e.g. old `Record<string, number>` format), returns null\n * so the caller can clear and start fresh.\n */\nconst validatePersistedCart = (data: unknown): CartLine[] | null => {\n  if (!data || typeof data !== 'object') return null;\n\n  const parsed = data as Record<string, unknown>;\n\n  // Old format: { lineItems: { \"gid://...\": 1 } } \u2014 clear it\n  if ('lineItems' in parsed && !('lines' in parsed)) return null;\n\n  if (!Array.isArray(parsed.lines)) return null;\n\n  const lines = parsed.lines as unknown[];\n\n  for (const line of lines) {\n    if (!line || typeof line !== 'object') return null;\n\n    const entry = line as Record<string, unknown>;\n\n    if (typeof entry.optionId !== 'string' || typeof entry.productKey !== 'string') return null;\n    if (typeof entry.quantity !== 'number' || entry.quantity < 1) return null;\n    if (entry.sellingPlanId !== undefined && typeof entry.sellingPlanId !== 'string') return null;\n  }\n\n  return parsed.lines as CartLine[];\n};\n\n/** Persist only the lines array to localStorage. */\nconst persistCart = (lines: CartLine[]) => {\n  const data: PersistedCart = { lines };\n  setLocalStorageItem(shopifyCartKey, JSON.stringify(data));\n};\n\n/** Find a line by optionId, or return -1. */\nconst findLineIndex = (lines: CartLine[], optionId: string): number =>\n  lines.findIndex(line => line.optionId === optionId);\n\nexport const useCart = (): CartState => {\n  const appContext = useContext(AppContext);\n  const { elementLocation } = useContext(ElementLocation);\n  const { catalog, productOptionById } = useContext(ShopifyContext);\n  const country = appContext.userLocation.country;\n\n  // Seed discount code from URL query param (e.g. ?discount=SAVE10)\n  const urlDiscount = getUrlDiscount(appContext.getCurrentUrl());\n\n  const [lines, setLines] = useState<CartLine[]>([]);\n  const [cartOpen, setCartOpenState] = useState(false);\n  const [discountCode, setDiscountCode] = useState(urlDiscount);\n\n  const setCartOpen = (open: boolean) => {\n    logEvent({\n      eventCategory: 'Cart',\n      eventAction: UserAction.Click,\n      eventLabel: open ? 'Open Cart' : 'Close Cart',\n      subscribedEventType: SubscribedEventType.USER_INTERACTION,\n    });\n\n    setCartOpenState(open);\n  };\n\n  const addLine = useCallback(\n    ({ productKey, optionId, currencyCode }: CartEvent) => {\n      const product = catalog[productKey];\n      const option = productOptionById[optionId]?.option;\n\n      if (!product) return;\n\n      const idx = findLineIndex(lines, optionId);\n      let newLines: CartLine[];\n\n      if (idx >= 0) {\n        newLines = lines.map((line, index) =>\n          index === idx ? { ...line, quantity: line.quantity + 1 } : line\n        );\n      } else {\n        const currencyEntry = product.sellingPlan?.depositData?.[currencyCode];\n\n        newLines = [\n          ...lines,\n          { optionId, productKey, quantity: 1, sellingPlanId: currencyEntry?.sellingPlanId },\n        ];\n      }\n\n      persistCart(newLines);\n      setLines(newLines);\n\n      logEvent({\n        eventCategory: 'Cart',\n        eventAction: 'Add',\n        eventLabel: optionId,\n        numberOfProducts: 1,\n        ecommerce: {\n          currencyCode,\n          add: {\n            products: [\n              {\n                name: product.title,\n                id: option?.sku ?? product.options[0]?.sku ?? '',\n                variant: option?.title ?? product.title,\n                price: (option?.price ?? product.options[0]?.price ?? 0).toString(),\n                shopifyid: optionId,\n                quantity: 1,\n              },\n            ],\n          },\n        },\n        subscribedEventType: SubscribedEventType.ECOMMERCE,\n        context: { elementLocation },\n      });\n\n      setCartOpenState(true);\n    },\n    [catalog, productOptionById, elementLocation, lines]\n  );\n\n  const removeLine = useCallback(\n    ({ productKey, optionId, currencyCode }: CartEvent) => {\n      const product = catalog[productKey];\n      const option = productOptionById[optionId]?.option;\n\n      if (!product) return;\n\n      const idx = findLineIndex(lines, optionId);\n\n      if (idx < 0) return;\n\n      const existing = lines[idx]!;\n      let newLines: CartLine[];\n\n      if (existing.quantity <= 1) {\n        newLines = lines.filter((_, index) => index !== idx);\n      } else {\n        newLines = lines.map((line, index) =>\n          index === idx ? { ...line, quantity: line.quantity - 1 } : line\n        );\n      }\n\n      persistCart(newLines);\n      setLines(newLines);\n\n      logEvent({\n        eventCategory: 'Cart',\n        eventAction: 'Remove',\n        eventLabel: optionId,\n        currencyCode,\n        productIds: optionId,\n        ecommerce: {\n          remove: {\n            products: [\n              {\n                name: product.title,\n                id: option?.sku ?? product.options[0]?.sku ?? '',\n                variant: option?.title ?? product.title,\n                price: (option?.price ?? product.options[0]?.price ?? 0).toString(),\n                shopifyid: optionId,\n                quantity: 1,\n              },\n            ],\n          },\n        },\n        subscribedEventType: SubscribedEventType.ECOMMERCE,\n        context: { elementLocation },\n      });\n    },\n    [catalog, productOptionById, elementLocation, lines]\n  );\n\n  const clearCart = useCallback(() => {\n    persistCart([]);\n    setLines([]);\n  }, []);\n\n  const cartInit = useCallback(() => {\n    const raw = getLocalStorageItem(shopifyCartKey);\n\n    if (raw) {\n      try {\n        const parsed = JSON.parse(raw);\n        const validLines = validatePersistedCart(parsed);\n\n        if (validLines) {\n          setLines(validLines);\n          return;\n        }\n      } catch {\n        // Invalid JSON \u2014 fall through to clear\n      }\n\n      // Old format or invalid data \u2014 clear and start fresh\n      persistCart([]);\n    }\n  }, []);\n\n  useEffect(() => {\n    if (!Config.shopify) return;\n\n    cartInit();\n  }, [country, cartInit]);\n\n  return {\n    lines,\n    cartOpen,\n    addLine,\n    removeLine,\n    clearCart,\n    setCartOpen,\n    discountCode,\n    setDiscountCode,\n  };\n};\n", "import { MessageContext } from '@snapchat/snap-design-system-marketing';\nimport type { FC, PropsWithChildren } from 'react';\nimport { createContext, useCallback, useContext } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport { Config } from '../../config';\nimport type { ShopifyAccess } from '../../configTypes';\nimport type { ProductAvailability, ShopifyProviderProps } from '../Cart/types';\nimport { Feature, useFeatureFlags } from '../FeatureFlags';\nimport type { CatalogProduct, CatalogState } from './catalogTypes';\nimport { normalizeCatalog } from './normalizeCatalog';\n\nconst defaultCatalogState: CatalogState = {\n  catalog: {},\n  productOptionById: {},\n};\n\nexport const ShopifyContext = createContext<CatalogState>(defaultCatalogState);\n\nexport const ShopifyProvider: FC<PropsWithChildren<ShopifyProviderProps>> = ({\n  children,\n  shopifyData,\n}) => {\n  const {\n    userLocation: { country },\n  } = useContext(AppContext);\n  const { formatMessage } = useContext(MessageContext);\n  const featureFlags = useFeatureFlags();\n\n  const calculateAtp = useCallback(\n    ({ available, atp = 0 }: ProductAvailability): string | null => {\n      if (atp === 0 && available) {\n        return formatMessage({\n          id: 'shopifyATPTodayFreeShipping',\n          defaultMessage: 'Ships for free today',\n        });\n      }\n\n      if (atp > 0 && available) {\n        if (atp < 7) {\n          if (atp === 1) {\n            return formatMessage({\n              id: 'shopifyATPDayFreeShipping',\n              defaultMessage: 'Ships for free in 1 day',\n            });\n          }\n\n          return formatMessage(\n            { id: 'shopifyATPDaysFreeShipping', defaultMessage: 'Ships for free in {days} days' },\n            { days: String(atp) }\n          );\n        }\n        const bufferRemainder = atp % 7;\n        const weeks = (atp - bufferRemainder) / 7;\n        const weekRange = `${weeks}-${weeks + 1}`;\n\n        if (weeks === 1) {\n          return formatMessage({\n            id: 'shopifyATPWeekFreeShipping',\n            defaultMessage: 'Ships for free in 1 week',\n          });\n        }\n\n        return formatMessage(\n          {\n            id: 'shopifyATPWeeksFreeShipping',\n            defaultMessage: 'Ships for free in {weeks} weeks',\n          },\n          { weeks: weekRange }\n        );\n      }\n\n      return null;\n    },\n    [formatMessage]\n  );\n\n  if (!Config.shopify) {\n    return <>{children}</>;\n  }\n\n  const { catalog, productOptionById } = normalizeCatalog(shopifyData, calculateAtp);\n\n  // Store selection\n  const singleStoreMode = Config.shopify?.singleStoreMode === true;\n\n  let store: ShopifyAccess | undefined;\n\n  if (singleStoreMode) {\n    // Single store mode: use the one configured store for all countries.\n    // Market-aware pricing is handled server-side via @inContext(country:).\n    const storeKeys = Object.keys(Config.shopify?.stores ?? {});\n    const singleStore = Config.shopify!.stores[storeKeys[0]!];\n    store = singleStore?.[Config.deploymentType];\n  } else {\n    const enableEuropeanStores = featureFlags[Feature.ENABLE_PIXY_EUROPEAN_STORES] === 'true';\n    const isHiddenBehindFeatureFlag =\n      !enableEuropeanStores && (country === 'GB' || country === 'FR');\n    const shopifyStore = Config.shopify?.stores[country];\n\n    store =\n      shopifyStore && !isHiddenBehindFeatureFlag ? shopifyStore[Config.deploymentType] : undefined;\n  }\n\n  // Use the currency from product data (reflects @inContext market pricing)\n  // rather than shop.paymentSettings.currencyCode (always the store's base currency).\n  const firstProduct = Object.values(catalog)[0] as CatalogProduct | undefined;\n  const currencyCode = firstProduct?.currencyCode ?? shopifyData?.shop.paymentSettings.currencyCode;\n\n  // Determine if the store ships to the user's country. In singleStoreMode,\n  // `store` is always set regardless of country, so we also check shipsToCountries.\n  // `undefined` means data isn't available \u2014 consumers should treat this permissively.\n  const shipsToCountries = shopifyData?.shop?.shipsToCountries;\n  const isCountrySupported = shipsToCountries ? shipsToCountries.includes(country) : undefined;\n\n  return (\n    <ShopifyContext.Provider\n      value={{\n        catalog,\n        productOptionById,\n        store,\n        currencyCode,\n        shopData: shopifyData?.shop,\n        rawShopifyResponse: shopifyData,\n        isCountrySupported,\n      }}\n    >\n      {children}\n    </ShopifyContext.Provider>\n  );\n};\n", "import { logWarning } from '../../helpers/logging';\nimport type {\n  ProductAvailability,\n  ShopifyNode,\n  ShopifyResponse,\n  ShopifyVariantNode,\n} from '../Cart/types';\nimport type { CatalogProduct, CatalogProductOption } from './catalogTypes';\n\ninterface NormalizeCatalogResult {\n  catalog: Record<string, CatalogProduct>;\n  productOptionById: Record<string, { productKey: string; option: CatalogProductOption }>;\n}\n\n/** Convert a Shopify variant edge into a CatalogProductOption. */\nconst mapVariantToOption = ({ node: variant }: ShopifyVariantNode): CatalogProductOption => ({\n  id: variant.id,\n  title: variant.title,\n  sku: variant.sku,\n  price: Number(variant.price.amount ?? '0'),\n  available: variant.availableForSale,\n  options: Object.fromEntries(variant.selectedOptions.map(({ name, value }) => [name, value])),\n  compareAtPrice: variant.compareAtPrice ?? null,\n  currencyCode: variant.price.currencyCode,\n  quantityAvailable: variant.quantityAvailable ?? null,\n  quantityRule: variant.quantityRule,\n});\n\n/** Extract selling plan groups from the Shopify node. Diagnostic/display use only. */\nconst extractSellingPlanGroups = (node: ShopifyNode['node']) =>\n  (node.sellingPlanGroups?.edges ?? []).map(({ node: group }) => ({\n    name: group.name,\n    sellingPlans: group.sellingPlans.edges.map(({ node: plan }) => ({\n      id: plan.id,\n      name: plan.name,\n      description: plan.description ?? undefined,\n    })),\n  }));\n\n/**\n * Parse per-currency selling plan deposit data from the `custom.sellingplandata` metafield.\n *\n * Expected shape:\n * ```json\n * { \"USD\": { \"selling_plan_id\": 8532885795, \"amount\": 200.00 },\n *   \"EUR\": { \"selling_plan_id\": 8532885795, \"amount\": 190.00 } }\n * ```\n *\n * Validates each entry and logs warnings for malformed data. Returns undefined\n * (with warnings) if any entry is invalid so the product still renders without\n * deposit pricing rather than crashing.\n */\nconst parseSellingPlanDepositData = (\n  rawValue: string | undefined,\n  productKey: string\n): Record<string, { sellingPlanId: string; amount: number }> | undefined => {\n  if (!rawValue) return undefined;\n\n  const warn = (message: string) =>\n    logWarning({\n      component: 'ShopifyProvider',\n      message: `issue with \"${productKey}.sellingplandata\": ${message}`,\n    });\n\n  let parsed: unknown;\n\n  try {\n    parsed = JSON.parse(rawValue);\n  } catch {\n    warn('invalid JSON \u2014 skipping');\n    return undefined;\n  }\n\n  if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n    warn(\n      `expected an object keyed by currency code, got ${\n        Array.isArray(parsed) ? 'array' : typeof parsed\n      }`\n    );\n\n    return undefined;\n  }\n\n  const entries = Object.entries(parsed as Record<string, unknown>);\n\n  if (entries.length === 0) {\n    warn('object is empty');\n    return undefined;\n  }\n\n  // Single pass: validate and transform each currency entry\n  const result: Record<string, { sellingPlanId: string; amount: number }> = {};\n\n  for (const [currency, entry] of entries) {\n    if (!entry || typeof entry !== 'object') {\n      warn(`currency \"${currency}\" value is not an object`);\n      return undefined;\n    }\n\n    const record = entry as Record<string, unknown>;\n\n    if (typeof record.amount !== 'number' || record.amount <= 0) {\n      warn(`currency \"${currency}\" has invalid amount: ${JSON.stringify(record.amount)}`);\n      return undefined;\n    }\n\n    if (typeof record.selling_plan_id !== 'number') {\n      warn(`currency \"${currency}\" has invalid or missing selling_plan_id`);\n      return undefined;\n    }\n\n    result[currency.toUpperCase()] = {\n      sellingPlanId: `gid://shopify/SellingPlan/${record.selling_plan_id}`,\n      amount: record.amount,\n    };\n  }\n\n  return result;\n};\n\n/** Resolve max quantity from product metafield, falling back to first variant metafield. */\nconst resolveMaxQuantity = (\n  productMetafields: ShopifyNode['node']['metafields'],\n  firstVariant: ShopifyVariantNode | undefined\n): number | undefined => {\n  const productRaw = productMetafields?.find(\n    field => field?.namespace === 'custom' && field?.key === 'maxquantity'\n  );\n\n  if (productRaw?.value) return Number.parseInt(productRaw.value);\n\n  const variantRaw = firstVariant?.node.metafields?.find(field => field?.key === 'maxQuantity');\n\n  return variantRaw ? Number.parseInt(variantRaw.value) : undefined;\n};\n\n/** Compute ATP shipping message from first variant's ATPBufferDays metafield. */\nconst resolveAtpMessage = (\n  firstVariant: ShopifyVariantNode | undefined,\n  available: boolean,\n  calculateAtp: (availability: ProductAvailability) => string | null\n): string | null => {\n  const atpDays = firstVariant?.node.metafields?.find(field => field?.key === 'ATPBufferDays');\n\n  if (!atpDays) return null;\n\n  return calculateAtp({ available, atp: Number.parseInt(atpDays.value) });\n};\n\n/**\n * Normalizes a raw Shopify Storefront API response into the canonical\n * CatalogProduct domain model. This is the single normalization boundary.\n */\nexport const normalizeCatalog = (\n  shopifyData: ShopifyResponse | undefined,\n  calculateAtp: (availability: ProductAvailability) => string | null\n): NormalizeCatalogResult => {\n  const catalog: Record<string, CatalogProduct> = {};\n  const productOptionById: Record<string, { productKey: string; option: CatalogProductOption }> =\n    {};\n\n  if (!shopifyData) {\n    return { catalog, productOptionById };\n  }\n\n  for (const { node } of shopifyData.products.edges) {\n    const productKey = node.handle;\n    const options = node.variants.edges.map(mapVariantToOption);\n    const firstVariant = node.variants.edges[0];\n\n    const sellingPlanDataRaw = node.metafields?.find(\n      field => field?.namespace === 'custom' && field?.key === 'sellingplandata'\n    );\n    const depositData = parseSellingPlanDepositData(sellingPlanDataRaw?.value, productKey);\n\n    const product: CatalogProduct = {\n      productKey,\n      nodeId: node.id,\n      title: node.title,\n      featuredImage: node.featuredImage?.url,\n      images: node.images?.edges.map(edge => edge.node) ?? [],\n      available: node.availableForSale,\n      options,\n      maxQuantity: resolveMaxQuantity(node.metafields, firstVariant),\n      currencyCode: node.priceRange.maxVariantPrice.currencyCode,\n      atpMessage: resolveAtpMessage(firstVariant, node.availableForSale, calculateAtp),\n      ...(depositData\n        ? {\n            sellingPlan: {\n              depositData,\n              requiresPlan: node.requiresSellingPlan ?? false,\n              groups: extractSellingPlanGroups(node),\n            },\n          }\n        : {}),\n    };\n\n    catalog[productKey] = product;\n\n    for (const option of options) {\n      productOptionById[option.id] = { productKey, option };\n    }\n  }\n\n  return { catalog, productOptionById };\n};\n", "export enum ScreenSize {\n  width_320_mobile_small = 320,\n  width_375_mobile_medium = 375,\n  width_425_mobile_large = 425,\n  width_768_desktop_small = 768, // Matches mobile/desktop breakpoint at SDS-M\n  width_1024_desktop_medium = 1024,\n  width_1440_desktop_large = 1440,\n  width_2560_desktop_larger = 2560,\n}\n\nconst assetSizesDesc = [\n  ScreenSize.width_2560_desktop_larger,\n  ScreenSize.width_1440_desktop_large,\n  ScreenSize.width_1024_desktop_medium,\n  ScreenSize.width_768_desktop_small,\n  ScreenSize.width_425_mobile_large,\n  ScreenSize.width_375_mobile_medium,\n  ScreenSize.width_320_mobile_small,\n];\n\nexport const assetSizesAsc = assetSizesDesc.reverse();\n", "import { ScreenSize } from './screenSizes';\n\nconst mediaQueryCss = (width: number) => `@media (min-width: ${width}px)`;\n\n/**\n * Standard breakpoints for screen resolutions.\n *\n * Use like css` font-size: 50%; ${mediaQuery.over768_desktop_small} { font-size: 75%; }\n * ${mediaQuery.over1024_desktop_medium} { font-size: 100%; }`.\n *\n * Note that if you are using multiple they have to be specified in ASC order so that the last one\n * that's true takes precedence.\n */\nexport const mediaQuery = {\n  over320_mobile_small: mediaQueryCss(ScreenSize.width_320_mobile_small),\n  over375_mobile_medium: mediaQueryCss(ScreenSize.width_375_mobile_medium),\n  over425_mobile_large: mediaQueryCss(ScreenSize.width_425_mobile_large),\n  over768_desktop_small: mediaQueryCss(ScreenSize.width_768_desktop_small), // Matches mobile/desktop breakpoint at SDS-M\n  over1024_desktop_medium: mediaQueryCss(ScreenSize.width_1024_desktop_medium),\n  over1440_desktop_large: mediaQueryCss(ScreenSize.width_1440_desktop_large),\n  over2560_desktop_larger: mediaQueryCss(ScreenSize.width_2560_desktop_larger),\n};\n", "import { css } from '@emotion/css';\nimport { m, Spacing } from '@snapchat/snap-design-system-marketing';\n\nimport { mediaQuery } from '../../styles/mediaQueries';\n\nexport const disabledButtonCss = css`\n  color: ${m('--palette-gray-v300')};\n  border: 1px solid ${m('--palette-gray-v300')};\n  background-color: ${m('--palette-gray-v200')};\n`;\n\nexport const addToCartButtonCss = css`\n  position: relative;\n  margin-top: ${Spacing.MD}px;\n`;\n\nexport const addToCartTooltipCss = css`\n  background: ${m('--palette-black-v200')};\n  border-radius: 6px;\n  box-shadow: 0px 6px 12px 4px rgba(0, 0, 0, 0.1);\n  color: ${m('--palette-plain-white')};\n  font-size: 14px;\n  font-weight: 700;\n  position: absolute;\n  bottom: 125%;\n  left: 0;\n  padding: 6px 7px;\n  text-align: center;\n  width: 100%;\n\n  &:after {\n    content: '';\n    position: absolute;\n    top: 100%;\n    left: 50%;\n    margin-left: -5px;\n    border-width: 5px;\n    border-style: solid;\n    border-color: ${m('--palette-black-v200')} transparent transparent transparent;\n  }\n\n  ${mediaQuery.over768_desktop_small} {\n    padding: 6px ${Spacing.XS}px;\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport { Icon, MessageContext } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logUserEvent } from '../../helpers/logging';\nimport { UserAction } from '../../types/events';\nimport { ShopifyContext } from '../ShopifyProvider';\nimport { CartContext } from './CartProvider';\nimport { Price } from './Price';\nimport {\n  atpCss,\n  cartItemImg,\n  cartItemWrapperCss,\n  depositAmountCss,\n  depositInfoCss,\n  depositLabelCss,\n  fullPriceStrikethroughCss,\n  priceCss,\n  quantityCss,\n  quantityModificationCss,\n  quantityModificationDisabledCss,\n  quantityWrapperCss,\n  titleCss,\n} from './styles';\ninterface CartItemProps {\n  productKey: string;\n  title: string;\n  image: string;\n  price: number;\n  sku: string;\n  optionId: string;\n  optionTitle?: string;\n  maxQuantity?: number;\n  atpMessage?: string | null;\n  sellingPlanDepositData?: Record<string, { sellingPlanId: string; amount: number }>;\n}\n\nexport const CartItem: FC<CartItemProps> = ({\n  productKey,\n  title,\n  image,\n  atpMessage,\n  price,\n  optionId,\n  maxQuantity,\n  optionTitle,\n  sellingPlanDepositData,\n}) => {\n  const cart = useContext(CartContext);\n  const { currencyCode = '' } = useContext(ShopifyContext);\n  const { formatMessage } = useContext(MessageContext);\n  const elementLocation = useContext(ElementLocation).elementLocation;\n\n  const line = cart.lines.find(cartLine => cartLine.optionId === optionId);\n  const quantity = line?.quantity ?? 0;\n  const buttonDisabled = maxQuantity === quantity;\n\n  // Deposit amount from product metafield, looked up by current currency.\n  const currencyEntry =\n    sellingPlanDepositData && currencyCode ? sellingPlanDepositData[currencyCode] : null;\n  const depositAmount = currencyEntry?.amount ?? null;\n\n  return (\n    <div className={cartItemWrapperCss}>\n      <div className={cartItemImg(image)} />\n      <div className={titleCss}>\n        {title}\n        {optionTitle && optionTitle !== 'Default Title' ? ` - ${optionTitle}` : ''}\n      </div>\n      {depositAmount ? (\n        <div className={depositInfoCss}>\n          <Price className={fullPriceStrikethroughCss} productPrice={price} />\n          <Price className={depositAmountCss} productPrice={depositAmount} />\n          <div className={depositLabelCss}>\n            {formatMessage({\n              id: 'depositDueToday',\n              defaultMessage: 'Deposit due today',\n            })}\n          </div>\n        </div>\n      ) : (\n        <Price className={priceCss} productPrice={price} />\n      )}\n      <div className={quantityWrapperCss}>\n        <button\n          onClick={() => {\n            logUserEvent({\n              eventCategory: 'CartItem',\n              eventAction: UserAction.ItemRemove,\n              eventLabel: `line_item_remove: ${optionId}`,\n              context: { elementText: title, elementLocation },\n            });\n\n            cart.removeLine({\n              productKey,\n              optionId,\n              currencyCode,\n            });\n          }}\n          className={quantityModificationCss}\n        >\n          <Icon name=\"remove\" />\n        </button>\n        <span className={quantityCss}>{quantity}</span>\n        <button\n          disabled={buttonDisabled}\n          onClick={() => {\n            logUserEvent({\n              eventCategory: 'CartItem',\n              eventAction: UserAction.ItemAdd,\n              eventLabel: `line_item_add: ${optionId}`,\n              context: { elementText: title, elementLocation },\n            });\n\n            cart.addLine({\n              productKey,\n              optionId,\n              currencyCode,\n            });\n          }}\n          className={cx(quantityModificationCss, {\n            [quantityModificationDisabledCss]: buttonDisabled,\n          })}\n        >\n          <Icon name=\"add\" />\n        </button>\n      </div>\n      {atpMessage && <div className={atpCss}>{atpMessage}</div>}\n    </div>\n  );\n};\n", "import { useContext } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport { ShopifyContext } from '../ShopifyProvider';\n\nexport const usePrice = (price: number): string => {\n  const { userLocation } = useContext(AppContext);\n  const { currencyCode } = useContext(ShopifyContext);\n\n  if (price === 0) {\n    return '';\n  }\n\n  return new Intl.NumberFormat(userLocation.country, {\n    style: 'currency',\n    currency: currencyCode ?? 'USD',\n  }).format(price);\n};\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\n\nimport { usePrice } from './usePrice';\n\ninterface PriceProps {\n  className?: string;\n  productPrice: number;\n}\n\nexport const Price: FC<PriceProps> = ({ productPrice, className }) => {\n  const price = usePrice(productPrice);\n  return <div className={cx('mw-price', className)}>{price}</div>;\n};\n", "import { css } from '@emotion/css';\nimport { m, Spacing, White } from '@snapchat/snap-design-system-marketing';\n\nimport { mediaQuery } from '../../styles/mediaQueries';\n\nexport const cartWrapperStyles = (hasItems: boolean): string => css`\n  background-color: ${m('--palette-plain-white')};\n  box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.06);\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: ${hasItems ? 'normal' : 'center'};\n  height: 100%;\n  overflow-y: auto;\n  pointer-events: none;\n  position: fixed;\n  right: -400px;\n  top: 0;\n  transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1);\n  z-index: 100;\n  width: 375px;\n  text-align: center;\n`;\n\nexport const activeWrapperCss = css`\n  opacity: 1;\n  pointer-events: all;\n  right: 0;\n  left: 0;\n  width: 100%;\n\n  ${mediaQuery.over768_desktop_small} {\n    left: unset;\n    width: 400px;\n  }\n`;\n\nexport const cartOverlayCss = css`\n  background-color: ${White}cc;\n  position: fixed;\n  opacity: 0;\n  top: 0;\n  right: 0;\n  width: 100%;\n  height: 100%;\n  transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1);\n  display: none;\n\n  ${mediaQuery.over768_desktop_small} {\n    display: unset;\n  }\n`;\n\nexport const cartOverlayActiveCss = css`\n  opacity: 1;\n  right: 400px;\n`;\n\nexport const cartInternalCss = css`\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n`;\n\nexport const cartCloseCss = css`\n  color: ${m('--palette-black-v200')};\n  cursor: pointer;\n  background: transparent;\n  border-radius: 50px;\n  padding-top: ${Spacing.MD}px;\n  padding-right: ${Spacing.MD}px;\n`;\n\nexport const cartCloseButtonCss = css`\n  font-weight: bold;\n`;\n\nexport const cartItemWrapperCss = css`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  margin: 0 ${Spacing.XS}px;\n`;\n\nexport const cartItemImg = (imageUrl: string): string => css`\n  background: url(${imageUrl}) no-repeat center center;\n  background-size: contain;\n  width: 200px;\n  height: 200px;\n`;\n\nexport const buttonWrapperCss = css`\n  display: flex;\n  justify-content: flex-end;\n  width: 100%;\n  height: ${Spacing['2XL']}px;\n`;\n\nexport const quantityCss = css`\n  color: ${m('--palette-plain-white')};\n  width: ${Spacing['2XL']}px;\n  height: ${Spacing['2XL']}px;\n  background-color: ${m('--palette-black-v200')};\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 20px;\n  margin: 20px 5px;\n`;\n\nexport const allAccessoriesCss = css`\n  width: 100%;\n  max-width: 400px;\n  padding: 0 ${Spacing['2XL']}px;\n`;\n\nexport const accessoryWrapperCss = css`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  border: 1px solid ${m('--palette-gray-v150')};\n  margin: ${Spacing.MD}px 0;\n  padding: 0 ${Spacing.MD}px;\n`;\n\nexport const accessoryQuantityCss = css`\n  width: ${Spacing['2XL']}px;\n  height: ${Spacing['2XL']}px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin: 20px ${Spacing.MD}px;\n`;\n\nexport const quantityWrapperCss = css`\n  display: flex;\n  align-items: center;\n`;\n\nexport const accessoryNameAndPriceCss = css`\n  padding: ${Spacing.SM}px 0;\n  text-align: left;\n`;\n\nexport const accessoryTitleCss = css`\n  margin-bottom: ${Spacing['2XS']}px;\n  font-weight: 500;\n`;\n\nexport const quantityModificationCss = css`\n  background: ${m('--palette-plain-white')};\n  border: 1px solid ${m('--palette-gray-v200')};\n  color: ${m('--palette-black-v200')};\n  cursor: pointer;\n  font-size: 12px;\n  width: ${Spacing.XL}px;\n  height: ${Spacing.XL}px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 20px;\n  margin: 0 ${Spacing['2XS']}px;\n  transition: border 0.05s ease-in-out;\n\n  &:hover {\n    border: 2px solid ${m('--palette-yellow-v100')};\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.14);\n  }\n`;\n\nexport const quantityModificationDisabledCss = css`\n  background: ${m('--palette-gray-v100')};\n  border: unset;\n  color: ${m('--palette-gray-v300')};\n  cursor: default;\n  pointer-events: none;\n`;\n\nexport const accessoryQuantityModificationCss = css`\n  background: ${m('--palette-plain-white')};\n  color: ${m('--palette-black-v200')};\n  cursor: pointer;\n  font-size: 12px;\n`;\n\nexport const accessoryQuantityModificationDisabledCss = css`\n  color: ${m('--palette-gray-v300')};\n  pointer-events: none;\n`;\n\nexport const titleCss = css`\n  margin: ${Spacing.MD}px 0;\n  font-size: 30px;\n`;\n\nexport const atpCss = css`\n  color: ${m('--palette-gray-v300')};\n`;\n\nexport const priceCss = css`\n  font-size: 24px;\n`;\n\nexport const depositInfoCss = css`\n  margin-top: ${Spacing.XS}px;\n  text-align: center;\n`;\n\nexport const depositAmountCss = css`\n  font-size: 16px;\n  font-weight: 600;\n`;\n\nexport const depositLabelCss = css`\n  font-size: 12px;\n  color: ${m('--palette-gray-v300')};\n`;\n\nexport const fullPriceStrikethroughCss = css`\n  font-size: 14px;\n  color: ${m('--palette-gray-v300')};\n  text-decoration: line-through;\n`;\n\nexport const totalCss = css`\n  margin-top: ${Spacing['2XL']}px;\n  font-size: 24px;\n  text-align: center;\n`;\n\nexport const checkoutButtonCss = css`\n  button.sdsm-button {\n    background-color: transparent;\n  }\n\n  margin-top: ${Spacing.MD}px;\n  padding: 0 ${Spacing.MD}px;\n`;\n\nexport const checkoutDisclaimerCss = css`\n  color: ${m('--palette-gray-v300')};\n  margin-top: ${Spacing.XL}px;\n  padding-bottom: ${Spacing['2XL']}px;\n`;\n\nexport const noCartItemsContainerCss = css`\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n`;\n\nexport const noCartItemsTitleCss = css`\n  text-align: center;\n  font-size: 24px;\n`;\n\nexport const featuredProductImg = (imageUrl: string): string => css`\n  background: url(${imageUrl}) no-repeat center center;\n  background-size: contain;\n  width: 200px;\n  height: 200px;\n`;\n\nexport const featuredProductTitleCss = css`\n  text-align: center;\n  font-size: 30px;\n`;\n\nexport const featuredProductPriceCss = css`\n  margin-top: ${Spacing.MD}px;\n  font-size: 24px;\n`;\n\nexport const featuredProductButtonCss = css`\n  margin-top: ${Spacing.MD}px;\n`;\n\nexport const cartIconButtonCss = css`\n  background: transparent;\n  color: ${m('--palette-black-v200')};\n  cursor: pointer;\n  font-size: 22px;\n  display: flex;\n  align-items: center;\n  position: relative;\n  text-decoration: none;\n`;\n\nexport const cartIconQuantityCss = css`\n  background-color: ${m('--palette-yellow-v100')};\n  border-radius: 50%;\n  position: absolute;\n  font-size: 16px;\n  font-weight: 400;\n  top: -14px;\n  left: 13px;\n  text-align: center;\n  padding: ${Spacing.SM}px;\n  width: 8px;\n  height: 8px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n\n  ${mediaQuery.over768_desktop_small} {\n    top: -18px;\n    left: 15px;\n  }\n`;\n\nexport const cartIconCss = css`\n  margin: 0 -2.5px;\n`;\n", "import { useContext } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport { Config } from '../../config';\nimport { mergeUrlParameters } from '../../helpers/uri';\nimport { ShopifyContext } from '../ShopifyProvider';\nimport { CartContext } from './CartProvider';\n\n/**\n * Builds a Shopify checkout URL using the /cart/add?items[] format. This format supports selling\n * plans via items[N][selling_plan]=ID.\n *\n * Phase 2: selling plan IDs now come from cart lines, not the product catalog.\n *\n * @see https://community.shopify.com/t/pre-load-cart-with-subscription-plan-products-using-permalinks/35303/4\n * Note: URL length may become a concern if carts grow large. For now, customers\n * typically purchase 1-2 items, so this is acceptable.\n */\nconst useCheckoutUrl = (): URL => {\n  const { userLocation, getCurrentUrl, currentLocale, cookieManager } = useContext(AppContext);\n  const cart = useContext(CartContext);\n  const { store, currencyCode } = useContext(ShopifyContext);\n  const { options } = Config.shopify ?? {};\n  const gaCookie = cookieManager.getCookie('_ga');\n\n  // Build items[] params from cart lines.\n  const itemParams: string[] = [];\n\n  cart.lines.forEach((line, index) => {\n    const numericId = line.optionId.match(/\\/(\\d+)/)?.[1];\n\n    if (!numericId) return;\n\n    itemParams.push(`items[${index}][id]=${numericId}`);\n    itemParams.push(`items[${index}][quantity]=${line.quantity}`);\n\n    // Selling plan is stored per-line \u2014 no catalog lookup needed.\n    if (line.sellingPlanId) {\n      const sellingPlanNumericId = line.sellingPlanId.match(/\\/(\\d+)/)?.[1];\n\n      if (sellingPlanNumericId) {\n        itemParams.push(`items[${index}][selling_plan]=${sellingPlanNumericId}`);\n      }\n    }\n  });\n\n  let queryParams: Record<string, string | boolean> = {\n    'attributes[locale]': currentLocale,\n    locale: currentLocale,\n    'checkout[shipping_address][country]': userLocation.country,\n    ...(currencyCode ? { currency: currencyCode } : {}),\n    access_token: store?.storefrontAccessToken ?? '',\n  };\n\n  if (options?.checkoutQueryParams) {\n    queryParams = {\n      ...queryParams,\n      ...options.checkoutQueryParams,\n    };\n  }\n\n  if (gaCookie) {\n    queryParams._ga = gaCookie;\n  }\n\n  // Add discount code if set. This supports the waitlist flow: a user receives a link\n  // with a discount code (e.g. ?discount=WAITLIST123) that gets applied at Shopify checkout.\n  // TODO: Needs client-side validation logic later. Currently codes are only validated by\n  // Shopify at checkout \u2014 invalid codes show an error on Shopify's page.\n  if (cart.discountCode) {\n    queryParams.discount = cart.discountCode;\n  }\n\n  const queryString = Object.entries(queryParams)\n    .map(([key, value]) => `${key}=${value}`)\n    .join('&');\n\n  // Build a /cart/clear \u2192 /cart/add \u2192 /checkout chain so every checkout starts\n  // with a fresh Shopify session cart. Without /cart/clear, Shopify's /cart/add\n  // appends items to any existing session cart, causing duplicate items if the\n  // user checks out multiple times.\n  const itemsQuery = itemParams.join('&');\n  const checkoutUrl = new URL(`https://${store?.domain}/checkout?${queryString}`);\n  mergeUrlParameters(checkoutUrl, new URL(getCurrentUrl()), Config.persistentQueryParams);\n  const checkoutPath = checkoutUrl.pathname + checkoutUrl.search;\n  const cartAddPath = `/cart/add?${itemsQuery}&return_to=${encodeURIComponent(checkoutPath)}`;\n  const shopifyUrl = new URL(\n    `https://${store?.domain}/cart/clear?return_to=${encodeURIComponent(cartAddPath)}`\n  );\n\n  return shopifyUrl;\n};\n\nexport { useCheckoutUrl };\n", "import { Icon } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { CartContext } from './CartProvider';\nimport { cartIconButtonCss, cartIconCss, cartIconQuantityCss } from './styles';\n\nexport const CartIcon: FC = () => {\n  const cart = useContext(CartContext);\n\n  const total = cart.lines.reduce((acc, line) => acc + line.quantity, 0);\n\n  return (\n    <button className={cartIconButtonCss} onClick={() => cart.setCartOpen(true)}>\n      {total !== 0 && <span className={cartIconQuantityCss}>{total}</span>}\n      <Icon name=\"cart\" size={27} className={cartIconCss} />\n    </button>\n  );\n};\n", "import type { LocaleOption } from '@snapchat/mw-global-components';\nimport type { MapOf } from '@snapchat/snap-design-system-marketing';\nimport { createContext } from 'react';\n\nimport type { UserAction } from '../../types/events';\nexport interface EventLog {\n  // NOTE: Some of these map to GA actions. See this doc: https://support.google.com/analytics/answer/1033068\n  type: UserAction; // Action being performed // TODO: Rename this to \"action\".\n  url?: string; // URL if this is for a link\n  component?: string; // Roughly maps to GA category like \"Video\", \"Hero\"\n  label?: string; // Label of the item that the event is for\n}\n\nexport type IsUrlCurrent = (\n  url: string,\n  options?: {\n    /**\n     * Strips the specified string from the start of the path for the current location when\n     * comparing to the specified url\n     *\n     * NOTE: noop if `ignoredPathPrefix` is not specified\n     */\n    ignoredPathPrefix?: string;\n  }\n) => boolean;\n\nexport interface ConsumerContextProps {\n  logEvent?: (event: EventLog) => void;\n  isUrlCurrent?: IsUrlCurrent;\n  setUrlParams?: (params: MapOf<string | undefined>) => void;\n  getUrlParams?: () => MapOf<string>;\n  currentLocale: string;\n  supportedLocales: Record<string, LocaleOption>;\n}\n\nexport const ConsumerContext = createContext<ConsumerContextProps>({\n  currentLocale: 'en-US',\n  supportedLocales: {},\n});\n", "import identity from './identity.js';\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n  return typeof value == 'function' ? value : identity;\n}\n\nexport default castFunction;\n", "import arrayEach from './_arrayEach.js';\nimport baseEach from './_baseEach.js';\nimport castFunction from './_castFunction.js';\nimport isArray from './isArray.js';\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n *   console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n  var func = isArray(collection) ? arrayEach : baseEach;\n  return func(collection, castFunction(iteratee));\n}\n\nexport default forEach;\n", "import type { MapOf } from '@snapchat/snap-design-system-marketing';\nimport forEach from 'lodash/forEach.js';\nimport { isNullish } from 'radashi';\n\nexport const filtersToUrlParams = (filters: MapOf<string | undefined>): string => {\n  let urlParams = '';\n\n  forEach(filters, (value, key) => {\n    if (isNullish(value)) {\n      return;\n    }\n\n    if (urlParams.length === 0) {\n      urlParams = `${key}=${value}`;\n    } else {\n      urlParams = `${urlParams}&${key}=${value}`;\n    }\n  });\n\n  return urlParams;\n};\n\nexport const urlParamsToFilters = (params: string): MapOf<string> => {\n  const result: MapOf<string> = {};\n\n  new URLSearchParams(params).forEach((value, key) => {\n    if (value) {\n      result[key] = value;\n    }\n  });\n\n  return result;\n};\n", "import type { InspectorMode } from '@contentful/live-preview/dist/inspectorMode';\nimport { LoggingEventType } from '@snapchat/logging';\nimport type { FC } from 'react';\nimport { useContext, useInsertionEffect } from 'react';\n\nimport { Config } from '../../config';\nimport { logger } from '../../helpers/logging';\nimport { useContentfulContext } from '../useContentfulContext';\nimport { ContentfulLivePreviewContext } from './ContentfulLivePreviewContext';\n\n/** Component used to initialize Contentful Live Preview */\nexport const ContentfulLivePreview: FC = () => {\n  const { locale } = useContentfulContext();\n  const { setHasLivePreview } = useContext(ContentfulLivePreviewContext);\n\n  const shouldSetupLivePreview = !Config.isDeploymentTypeProd;\n\n  useInsertionEffect(() => {\n    async function setupContentfulLivePreview(): Promise<InspectorMode | null | undefined> {\n      const { ContentfulLivePreview: livePreview } = await import('@contentful/live-preview');\n\n      const preview = await livePreview.init({\n        locale,\n        enableInspectorMode: true,\n        enableLiveUpdates: true,\n        experimental: {\n          hideCoveredElementOutlines: true,\n        },\n      });\n\n      // This could be null if we're not in an iframe\n      if (preview) {\n        setHasLivePreview?.(true);\n\n        logger.logEvent({\n          type: LoggingEventType.USER_ACTION,\n          component: 'ContentfulLivePreview',\n          action: 'Open',\n          label: 'Live Preview Panel',\n        });\n      }\n\n      return preview;\n    }\n\n    if (shouldSetupLivePreview) {\n      void setupContentfulLivePreview();\n    }\n  }, [shouldSetupLivePreview, locale]);\n\n  return null;\n};\n", "import { useContext } from 'react';\n\nimport type { ContentfulContextType } from '../utils/contentful/ContentfulContext';\nimport { ContentfulContext } from '../utils/contentful/ContentfulContext';\n\nexport const useContentfulContext = (): ContentfulContextType => {\n  const context = useContext(ContentfulContext);\n\n  if (context === undefined) {\n    throw new Error(\n      'The useContentfulQuery hook can only be used in combination with ContentProvider'\n    );\n  }\n\n  return context;\n};\n", "import type { WatchQueryFetchPolicy } from '@apollo/client';\nimport type { Context } from 'react';\nimport { createContext } from 'react';\n\nimport { Config } from '../../config';\nimport { UrlParameter } from '../../constants/urlParameters';\nimport { defaultLocale } from '../../helpers/locale';\n\n/** Context for the apollo client. */\nexport const ContentfulContext: Context<ContentfulContextType> = createContext({\n  preview: false,\n  locale: defaultLocale,\n} as ContentfulContextType);\nContentfulContext.displayName = 'ContentfulContext';\n\nexport function getContentfulContext(\n  locale: string,\n  params: URLSearchParams\n): ContentfulContextType {\n  // Default policy is to check cache, and if not found, ping network.\n  let fetchPolicy: WatchQueryFetchPolicy = 'cache-first';\n\n  // On the client, for non-prod builds we allow URL overrides.\n  const param = params.get(UrlParameter.CONTENTFUL_FETCH_POLICY) as WatchQueryFetchPolicy;\n\n  if (Config.isClient && !Config.isDeploymentTypeProd && !!param) {\n    fetchPolicy = param;\n  }\n\n  // On the server in preview mode, we force network load, but store data in\n  // cache (using network-only instead of no-cache) so we can write out the cache as SSR output.\n  if (!Config.isClient && Config.isPreview) {\n    fetchPolicy = 'network-only';\n  }\n\n  return {\n    preview: Config.isPreview,\n    locale,\n    fetchPolicy,\n  };\n}\n\nexport interface ContentfulContextType {\n  preview: boolean;\n  locale: string;\n  fetchPolicy?: WatchQueryFetchPolicy;\n}\n", "export const localeCookie = 'sc-language';\n\nexport const defaultLocale = 'en-US';\n", "import type { FC, PropsWithChildren } from 'react';\nimport { createContext, useState } from 'react';\n\ntype ContentfulLivePreviewContext = {\n  hasLivePreview?: boolean;\n  setHasLivePreview?: (value: boolean) => void;\n};\n\nexport const ContentfulLivePreviewContext = createContext<ContentfulLivePreviewContext>({});\n\nexport const ContentfulLivePreviewContextProvider: FC<PropsWithChildren> = ({ children }) => {\n  const [hasLivePreview, setHasLivePreview] = useState(false);\n\n  return (\n    <ContentfulLivePreviewContext.Provider\n      value={{\n        hasLivePreview,\n        setHasLivePreview: (hasLivePreview: boolean) => setHasLivePreview(hasLivePreview),\n      }}\n    >\n      {children}\n    </ContentfulLivePreviewContext.Provider>\n  );\n};\n", "import { Site } from '@snapchat/mw-common';\nimport { snapPersonasDisplayTextMap } from '@snapchat/mw-contentful-schema';\nimport { BackgroundType, CookieModal as CookiePopupGlobal } from '@snapchat/mw-global-components';\nimport { BackgroundColor } from '@snapchat/snap-design-system-marketing';\nimport type React from 'react';\nimport { useContext } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport { Config } from '../../config';\nimport {\n  logError,\n  logEvent,\n  onMarketingTrackingAccepted,\n  onPerformanceTrackingAccepted,\n  SubscribedEventType,\n} from '../../helpers/logging';\nimport { handlePartnerstackQueryParam } from '../../sites/for-business/utils/handlePartnerstackQueryParam';\nimport { getPersonasCookie, setPersonasCookie } from '../../utils/persona/personaUtils';\nimport { ShopifyContext } from '../ShopifyProvider';\nimport { submitShopifyTrackingConsent } from '../ShopifyProvider/submitShopifyTrackingConsent';\n\nexport interface CookiePopupProps {\n  isClient: boolean;\n  backgroundColor?: BackgroundColor;\n  globalPrivacyControl?: boolean;\n}\n\nconst defaultBackgroundColor = BackgroundColor.White;\n\n// TODO: Grab isClient from Config, grab globalPrivacyControl from AppContext,\n// grab backgroundColor from Config.theme.\nexport const CookiePopup: React.FC<CookiePopupProps> = ({\n  isClient,\n  backgroundColor = defaultBackgroundColor,\n  globalPrivacyControl,\n}) => {\n  const { cookieManager, personasRef } = useContext(AppContext);\n  const { store } = useContext(ShopifyContext);\n\n  // Return nothing for SSR\n  if (!isClient) return null;\n\n  const backgroundType =\n    backgroundColor === BackgroundColor.Black ? BackgroundType.DarkMode : BackgroundType.LightMode;\n\n  // For non-production environments (localhost, staging sites) - specify empty string so that cookies will can be set.\n  const cookieDomain =\n    !Config.isDeploymentTypeProd || !Config.isCompilationModeProd ? '' : undefined;\n\n  return (\n    <CookiePopupGlobal\n      cookieDomain={cookieDomain}\n      backgroundType={backgroundType}\n      onComplete={event => {\n        if (event.cookieAcceptance.Marketing) {\n          onMarketingTrackingAccepted().catch(error =>\n            logError({ component: 'CookiePopup', error })\n          );\n        }\n\n        if (event.cookieAcceptance.Performance) {\n          onPerformanceTrackingAccepted().catch(error =>\n            logError({ component: 'CookiePopup', error })\n          );\n        }\n\n        if (event.cookieAcceptance.Preferences) {\n          // Set the cookie with the app state personas if they are available,\n          // If undefined, this is a no-op because the cookie will not be set.\n          setPersonasCookie(cookieManager, personasRef?.current ?? undefined);\n        }\n\n        // Pre-seed Shopify consent cookies so users skip Shopify's own banner at checkout.\n        // Fire-and-forget: Shopify's banner remains as a fallback if this fails.\n        if (store) {\n          void submitShopifyTrackingConsent({\n            cookieAcceptance: event.cookieAcceptance,\n            store,\n            saleOfData: !event.isGlobalPrivacyControlApplied,\n          }).catch(error => logError({ component: 'CookiePopup', error }));\n        }\n\n        // Special Logic for FOR BIZ Only to handle partner stack query params\n        if (Config.site === Site.FOR_BUSINESS) {\n          handlePartnerstackQueryParam?.(cookieManager, !!event.cookieAcceptance.Marketing);\n\n          // Log the snap personas if the user has accepted preferences cookies\n          // We DON'T use the personas from AppContext here because that is only set\n          // when an experiment is run and the personas are updated.\n          if (event.cookieAcceptance.Preferences) {\n            const personasCookieValue = getPersonasCookie(cookieManager);\n            const snapPersonas = personasCookieValue?.snap ?? [];\n\n            for (const snapPersona of snapPersonas) {\n              const snapPersonaDisplayText = snapPersonasDisplayTextMap[snapPersona];\n\n              if (snapPersonaDisplayText) {\n                logEvent({\n                  subscribedEventType: SubscribedEventType.INTERNAL,\n                  eventCategory: 'SnapPersona',\n                  eventAction: 'Get',\n                  eventLabel: snapPersonaDisplayText,\n                });\n              }\n            }\n          }\n        }\n      }}\n      globalPrivacyControl={globalPrivacyControl}\n    />\n  );\n};\n", "export const personasCookieKey = 'sc-persona';\n", "import { CategoryOptInCookie } from '@snapchat/mw-cookie-components';\nimport isEqual from 'lodash-es/isEqual';\n\nimport { Config } from '../../config';\nimport type { Personas } from '../../types/personas';\nimport type { CookieManager } from '../cookies/CookieManager';\nimport { personasCookieKey } from './personaConstants';\n\n/**\n * Gets the personas cookie value as JSON.\n *\n * @param cookieManager - The cookie manager instance used to read cookies\n * @returns - Returns the personas object from the cookie if found and parsed successfully\n */\nexport function getPersonasCookie(cookieManager: CookieManager) {\n  return cookieManager.getCookieJson(personasCookieKey) as Personas | undefined;\n}\n\n/**\n * Sets the personas cookie if the user has accepted preferences cookies.\n *\n * @param cookieManager - The cookie manager instance used to read and set cookies\n * @param personas - The personas data to store, or undefined if no update desired\n * @returns Void - Returns early if preferences cookie is not accepted\n */\nexport function setPersonasCookie(cookieManager: CookieManager, personas: Personas | undefined) {\n  // If a profile has been looked up previously, then 'personas' should be an empty object\n  if (!personas) {\n    return;\n  }\n\n  const preferencesCookieValue = cookieManager.getCookie(CategoryOptInCookie.Preferences);\n\n  // Do nothing if the user has not accepted preferences cookies\n  if (preferencesCookieValue !== 'true') {\n    return;\n  }\n\n  const personasCookieValue = getPersonasCookie(cookieManager);\n\n  // If the existing cookie value is the same as the new value, no need to set the cookie again\n  if (isEqual(personas, personasCookieValue)) {\n    return;\n  }\n\n  // If the user has accepted preferences, set the personas cookie\n  const expires = new Date();\n  expires.setFullYear(expires.getFullYear() + 1); // 1 year from now\n\n  // Use empty string for non-production environments so cookies can be set on localhost\n  const domain =\n    !Config.isDeploymentTypeProd || !Config.isCompilationModeProd\n      ? ''\n      : Config.trackingSettings.cookieDomain;\n\n  cookieManager.setCookieJson(personasCookieKey, personas as any, {\n    secure: true,\n    expires,\n    sameSite: 'strict',\n    domain,\n  });\n}\n", "import { ensureSingleScript } from '@snapchat/mw-common/client';\nimport type { CookieAcceptance } from '@snapchat/mw-cookie-components';\n\nimport type { ShopifyAccess } from '../../configTypes';\n\nexport const shopifyConsentTimeoutMs = 5_000;\n\ntype ShopifyFeatureError = Error | string | null | undefined;\n\ninterface ShopifyTrackingConsentPayload {\n  marketing: boolean;\n  analytics: boolean;\n  preferences: boolean;\n  /**\n   * Shopify's CCPA field: `true` = user allows data sale, `false` = user opts out.\n   * Derived from the Global Privacy Control (GPC) browser signal\n   * (`Sec-GPC` header / `navigator.globalPrivacyControl`). When GPC is active the\n   * user is opting out of data sale per CCPA. This mirrors how our GA4 logging\n   * handles GPC on both MWP (`GoogleEventListener`) and the Shopify pixel\n   * (`shopify-logging` `logger.ts`).\n   */\n  sale_of_data: boolean;\n  headlessStorefront: true;\n  checkoutRootDomain: string;\n  storefrontRootDomain: string;\n  storefrontAccessToken: string;\n}\n\ninterface ShopifyCustomerPrivacyApi {\n  setTrackingConsent: (payload: ShopifyTrackingConsentPayload, callback?: () => void) => void;\n}\n\ninterface ShopifyWindowApi {\n  loadFeatures?: (\n    features: Array<{ name: string; version: string }>,\n    callback: (error: ShopifyFeatureError) => void\n  ) => void;\n  customerPrivacy?: ShopifyCustomerPrivacyApi;\n}\n\ndeclare global {\n  interface Window {\n    Shopify?: ShopifyWindowApi;\n  }\n}\n\nlet consentApiPromise: Promise<ShopifyCustomerPrivacyApi> | undefined;\n\n/**\n * Loads and caches the Shopify customerPrivacy API. On the first call, this loads the consent\n * tracking script, initializes the `consent-tracking-api` feature, and returns the resulting API.\n * Subsequent calls return the cached promise. The cache is cleared on failure so the next call\n * retries from scratch.\n */\nconst ensureConsentApi = (): Promise<ShopifyCustomerPrivacyApi> => {\n  if (consentApiPromise) return consentApiPromise;\n\n  consentApiPromise = (async () => {\n    if (window.Shopify?.customerPrivacy?.setTrackingConsent) {\n      return window.Shopify.customerPrivacy;\n    }\n\n    await new Promise<void>(resolve => {\n      ensureSingleScript(\n        'shopify-consent-tracking-api',\n        'https://cdn.shopify.com/shopifycloud/consent-tracking-api/v0.1/consent-tracking-api.js',\n        resolve\n      );\n    });\n\n    if (window.Shopify?.customerPrivacy?.setTrackingConsent) {\n      return window.Shopify.customerPrivacy;\n    }\n\n    const shopify = window.Shopify;\n\n    if (!shopify?.loadFeatures) {\n      throw new Error('Shopify consent tracking API failed to initialize');\n    }\n\n    await new Promise<void>((resolve, reject) => {\n      shopify.loadFeatures!(\n        [{ name: 'consent-tracking-api', version: '0.1' }],\n        (error: ShopifyFeatureError) => {\n          if (error) {\n            reject(error instanceof Error ? error : new Error(String(error)));\n            return;\n          }\n\n          resolve();\n        }\n      );\n    });\n\n    if (!window.Shopify?.customerPrivacy?.setTrackingConsent) {\n      throw new Error('Shopify customerPrivacy API unavailable after loading consent-tracking-api');\n    }\n\n    return window.Shopify.customerPrivacy;\n  })().catch(error => {\n    consentApiPromise = undefined;\n    throw error;\n  });\n\n  return consentApiPromise;\n};\n\n/** Maps cookie acceptance categories to the payload shape Shopify's consent API expects. */\nconst getShopifyTrackingConsentPayload = (\n  cookieAcceptance: CookieAcceptance,\n  store: ShopifyAccess,\n  saleOfData: boolean\n): ShopifyTrackingConsentPayload => {\n  // Shopify expects both domain fields even though Stinson uses the same\n  // domain for the storefront and checkout today.\n  const rootDomain = store.domain;\n\n  return {\n    marketing: cookieAcceptance.Marketing === true,\n    analytics: cookieAcceptance.Performance === true,\n    preferences: cookieAcceptance.Preferences === true,\n    sale_of_data: saleOfData,\n    headlessStorefront: true,\n    checkoutRootDomain: rootDomain,\n    storefrontRootDomain: rootDomain,\n    storefrontAccessToken: store.storefrontAccessToken,\n  };\n};\n\n/**\n * Submits tracking consent preferences to Shopify for the given store. Loads the Shopify consent\n * API if it hasn't been loaded yet. The entire operation (loading + submission) is bounded by\n * {@link shopifyConsentTimeoutMs} by default.\n *\n * @param cookieAcceptance - The accepted cookie categories from the MWP cookie modal event.\n * @param store - The Shopify store config (domain + storefront access token).\n * @param saleOfData - Whether the user allows sale of their data. Defaults to `true`.\n *   Pass `false` when the GPC signal is active to opt the user out per CCPA.\n * @param timeoutMs - Total timeout budget for loading the API and submitting consent.\n */\nexport const submitShopifyTrackingConsent = async ({\n  cookieAcceptance,\n  store,\n  saleOfData = true,\n  timeoutMs = shopifyConsentTimeoutMs,\n}: {\n  cookieAcceptance: CookieAcceptance;\n  store: ShopifyAccess;\n  saleOfData?: boolean;\n  timeoutMs?: number;\n}): Promise<void> => {\n  await Promise.race([\n    (async () => {\n      const api = await ensureConsentApi();\n      const payload = getShopifyTrackingConsentPayload(cookieAcceptance, store, saleOfData);\n      await new Promise<void>(resolve => api.setTrackingConsent(payload, resolve));\n    })(),\n    new Promise<never>((_, reject) => {\n      window.setTimeout(\n        () => reject(new Error(`Shopify tracking consent timed out after ${timeoutMs}ms`)),\n        timeoutMs\n      );\n    }),\n  ]);\n};\n", "import type { FC } from 'react';\nimport { useContext } from 'react';\nimport { Helmet } from 'react-helmet-async';\n\nimport { AppContext } from '../../AppContext';\nimport { directionFromLocale } from './languageDirection';\n\nexport const DirectionDirective: FC = () => {\n  const appContext = useContext(AppContext);\n  return (\n    <Helmet>\n      {/* biome-ignore lint/a11y/useHtmlLang: This is helment. Not complete. */}\n      <html dir={directionFromLocale(appContext?.currentLocale)} />\n    </Helmet>\n  );\n};\n\nDirectionDirective.displayName = 'DirectionDirective';\n", "import { defaultLocale } from '../../helpers/locale';\n\n// TODO: Import this from SDSM\n// eslint-disable-next-line import/no-unused-modules\nexport type Direction = 'rtl' | 'ltr';\n\n/**\n * Codes that are Right-to-left.\n *\n * Based off of this page: https://lingohub.com/academy/best-practices/rtl-language-list\n */\n// eslint-disable-next-line import/no-unused-modules\nexport const rtlLanguageCodes = new Set([\n  'ar', //\tArabic\n  'arc', //\tAramaic\n  'dv', //\tDivehi\n  'fa', //\tPersian\n  'ha', //\tHausa\n  'he', //\tHebrew\n  'khw', //\tKhowar\n  'ks', //\tKashmiri\n  'ku', //\tKurdish\n  'ps', //\tPashto\n  'ur', //\tUrdu\n  'yi', // Yiddish\n]);\n\nexport const directionFromLocale = (locale?: string): Direction => {\n  const currentLocale = locale ?? defaultLocale;\n  const [languageCode] = currentLocale.split('-');\n  return rtlLanguageCodes.has(languageCode as string) ? 'rtl' : 'ltr';\n};\n", "import type { OperationVariables, QueryHookOptions, QueryResult } from '@apollo/client';\nimport { useQuery } from '@apollo/client';\nimport type { Entity } from '@contentful/live-preview/dist/types';\nimport type { DocumentNode } from 'graphql';\nimport clone from 'lodash/clone.js';\nimport noop from 'lodash/noop.js';\nimport { useContext, useEffect, useState } from 'react';\n\nimport { AppContext } from '../AppContext';\nimport { ContentfulLivePreviewContext } from '../components/ContentfulLivePreview';\nimport { useContentfulContext } from '../components/useContentfulContext';\nimport { Config } from '../config';\nimport { convertNullsToUndefined } from '../utils/contentful/convertNullsToUndefined';\n\n/** Variables common for all contentful queries. */\nexport interface ContentfulQueryVariables {\n  preview?: boolean;\n  locale?: string;\n}\n\n/** Generic interface for queries requiring a sys id. */\nexport interface ContentfulIdVariable {\n  id?: string;\n}\n\n/** Generic interface for queries requiring a collection of sys ids. */\nexport interface ContentfulIdsVariable {\n  ids?: string[];\n}\n\n/** Context common for all contentful queries. */\nexport type ContentfulQueryOptions<TData, TVariables extends OperationVariables> = QueryHookOptions<\n  TData,\n  TVariables\n>;\n\n/**\n * Hook for executing `useQuery` from apollo with some context and variables pulled from the\n * environment.\n *\n * Usage:\n *\n *     const { data } = useContentfulQuery<DataInterface, VariableInterface>(query.all);\n *     return <FooSDS {...data} />;\n */\nexport const useContentfulQuery = <TData extends Entity, TVariables = ContentfulQueryVariables>(\n  query: DocumentNode,\n  options?: ContentfulQueryOptions<TData, TVariables & ContentfulQueryVariables>\n): QueryResult<TData, TVariables & ContentfulQueryVariables> => {\n  const { getCurrentUrl } = useContext(AppContext);\n  const { preview, locale, fetchPolicy } = useContentfulContext();\n  const { hasLivePreview } = useContext(ContentfulLivePreviewContext);\n\n  const queryOptions: QueryHookOptions<TData, ContentfulQueryVariables & TVariables> = {\n    fetchPolicy,\n    ...options,\n    context: { currentUrl: getCurrentUrl(), ...options?.context },\n    variables: {\n      preview,\n      locale,\n      ...options?.variables,\n    } as TVariables & ContentfulQueryVariables,\n    ssr: options?.ssr ?? Config.isSSR,\n  };\n\n  const queryResponse = useQuery<TData, TVariables & ContentfulQueryVariables>(query, queryOptions);\n\n  // Restart trigger for polling data.\n  // The regular behavior for polling is to stop after the first update.\n  // This effect restarts the polling so we can continue to receive updates.\n  useEffect(\n    () => {\n      if (!options?.pollInterval) return;\n      queryResponse.startPolling(options!.pollInterval);\n      return queryResponse.stopPolling;\n    },\n    // Rule of hooks gets this one wrong.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [queryResponse.data, options, queryResponse.startPolling, queryResponse.stopPolling]\n  );\n\n  const [updatedEntries, setUpdatedEntries] = useState<TData | object>({});\n\n  // Enable Live Updates if applicable\n  useEffect(() => {\n    let cleanup = noop;\n\n    async function subscribeToLiveUpdates(): Promise<void> {\n      const { ContentfulLivePreview } = await import('@contentful/live-preview');\n\n      const singleItemKeys = Object.keys(queryResponse.data!).filter(\n        key => queryResponse.data?.[key].sys && queryResponse.data?.[key].__typename\n      );\n\n      const collectionKeys = Object.keys(queryResponse.data!).filter(\n        key => queryResponse.data?.[key].items\n      );\n\n      const singleItemUnsubscribeFns = singleItemKeys.map(key => {\n        return ContentfulLivePreview.subscribe({\n          data: queryResponse.data![key],\n          locale,\n          callback: newData => {\n            setUpdatedEntries(entries => {\n              return { ...entries, [key]: newData };\n            });\n          },\n          query,\n        });\n      });\n\n      // Live Updates only work when you pass an Entry or an array of Entry, so we need to pass the items array directly.\n      const collectionUnsubscribeFns = collectionKeys.map(key => {\n        return ContentfulLivePreview.subscribe({\n          data: queryResponse.data![key].items,\n          locale,\n          callback: newData => {\n            setUpdatedEntries(entries => {\n              return { ...entries, [key]: { items: newData } };\n            });\n          },\n          query,\n        });\n      });\n\n      cleanup = () =>\n        [...singleItemUnsubscribeFns, ...collectionUnsubscribeFns].forEach(fn => fn());\n    }\n\n    if (hasLivePreview && queryResponse.data) {\n      void subscribeToLiveUpdates();\n    }\n\n    return cleanup;\n  }, [queryResponse.data, hasLivePreview, locale, query]);\n\n  let maybeClonedResponse = queryResponse;\n\n  if (queryResponse.data) {\n    // We need to keep queryResponse.data the same to prevent it from triggerring useEffect repeatedly when we\n    // set the query data. A shallow clone works here.\n    maybeClonedResponse = clone(queryResponse);\n    const dataToUse =\n      hasLivePreview && Object.keys(updatedEntries).length ? updatedEntries : queryResponse.data;\n\n    // Per team decision: we remove any values that are 'null'.\n    maybeClonedResponse.data = convertNullsToUndefined(dataToUse) as TData;\n  }\n\n  return maybeClonedResponse;\n\n  // NOTE: Apollo client already captured any errors.\n};\n", "import baseAssignValue from './_baseAssignValue.js';\nimport baseForOwn from './_baseForOwn.js';\nimport baseIteratee from './_baseIteratee.js';\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n *   'fred':    { 'user': 'fred',    'age': 40 },\n *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n  var result = {};\n  iteratee = baseIteratee(iteratee, 3);\n\n  baseForOwn(object, function(value, key, object) {\n    baseAssignValue(result, key, iteratee(value, key, object));\n  });\n  return result;\n}\n\nexport default mapValues;\n", "import clone from 'lodash-es/clone';\nimport mapValues from 'lodash-es/mapValues';\n\n/**\n * Converts null values in an object into undefined values. Goes deep. Clones all.\n *\n * This is for the use in contentful client because apollo doesn't support this as a feature. See:\n * https://github.com/apollographql/apollo-client/issues/2412\n */\nexport function convertNullsToUndefined<T>(object: T): T {\n  if (object === null || object === undefined) return undefined as unknown as T;\n  if (typeof object !== 'object') return object;\n  const cloned = clone(object as T);\n  const mapped = Array.isArray(object)\n    ? (object.map(convertNullsToUndefined) as unknown as T)\n    : (mapValues(cloned as unknown as object, convertNullsToUndefined) as unknown as T);\n\n  return Object.freeze(mapped);\n}\n", "import { gql } from '@apollo/client';\n\nexport const contentfulSysIdFragment = gql`\n  fragment ContentfulSysId on Entry {\n    sys {\n      id\n    }\n    __typename\n  }\n`;\n\nexport type ContentfulSysId = {\n  sys: {\n    id: string;\n  };\n};\n", "import { css } from '@emotion/css';\nimport type { SrcSetSettings } from '@snapchat/mw-contentful-client';\nimport { getDprSrcSetSettingsByHeight, useContentfulImages } from '@snapchat/mw-contentful-client';\nimport { m, Media as MediaSDS } from '@snapchat/snap-design-system-marketing';\nimport type React from 'react';\nimport { type FC, useContext, useState } from 'react';\n\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logUserEvent } from '../../helpers/logging';\nimport type { ContentfulIdVariable } from '../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport { UserAction } from '../../types/events';\nimport { getFileInfo } from '../../utils/getFileInfo';\nimport { getVideoWatchLogger } from '../Video/utils';\nimport { query } from './query';\nimport type { MediaDataHandlerProps, MediaProps } from './types';\n\nconst isImageUrl = (contentType?: string | null): boolean => {\n  if (!contentType) return false;\n  return contentType.startsWith('image');\n};\n\nconst embeddedMediaCss = css`\n  margin-bottom: ${m('--spacing-m')};\n`;\n\n/** Component to render generic media. Currently only used by embeds (see contentfulComponentMap) */\nexport const Media: FC<MediaProps> = props => {\n  const { data } = useContentfulQuery<MediaDataHandlerProps, ContentfulIdVariable>(query, {\n    variables: { id: props.sys.id },\n  });\n  const { getImageSources } = useContentfulImages();\n  const elementLocation = useContext(ElementLocation).elementLocation;\n  const [videoPlayed, setVideoPlayed] = useState(false);\n  let prevWatchEventTime = -1;\n\n  if (!data) return null;\n  const { asset } = data;\n\n  if (!asset) return null;\n\n  const { contentType, url, description } = asset;\n\n  // case that its an image\n  if (isImageUrl(contentType)) {\n    // If the original image can be larger than 600, we allow handling 2x dpr lol\n    const imgSrcSetSettings: SrcSetSettings = getDprSrcSetSettingsByHeight(\n      600,\n      data.asset.height ?? 0\n    );\n\n    const imgSrcs = getImageSources(url, imgSrcSetSettings);\n\n    return (\n      <MediaSDS\n        className={props.isEmbedded ? embeddedMediaCss : undefined}\n        imgSrcs={imgSrcs}\n        altText={description}\n      />\n    );\n  }\n\n  // case that its a video. We default to no autoplay.\n  const onPlay: React.ReactEventHandler<HTMLVideoElement> = _e => {\n    if (url && !videoPlayed) {\n      const { fileName } = getFileInfo(url);\n\n      logUserEvent({\n        eventAction: UserAction.Play,\n        eventCategory: 'Video',\n        eventLabel: fileName,\n        context: { elementLocation },\n      });\n      setVideoPlayed(true);\n    }\n  };\n\n  const onPause: React.ReactEventHandler<HTMLVideoElement> = _e => {\n    if (url) {\n      const { fileName } = getFileInfo(url);\n\n      logUserEvent({\n        eventAction: UserAction.Pause,\n        eventCategory: 'Video',\n        eventLabel: fileName,\n        context: { elementLocation },\n      });\n    }\n  };\n\n  const onTimeUpdate = getVideoWatchLogger({\n    autoPlay: false,\n    eventLabel: asset.sys.id,\n    getPreviousWatchTime: () => {\n      return prevWatchEventTime;\n    },\n    setPreviousWatchTime: value => {\n      prevWatchEventTime = value;\n    },\n    elementLocation,\n  });\n\n  return (\n    <MediaSDS\n      sourceType={contentType}\n      className={props.isEmbedded ? embeddedMediaCss : undefined}\n      videoSource={url}\n      showVideoControls={true}\n      onPlay={onPlay}\n      onPause={onPause}\n      onTimeUpdate={onTimeUpdate}\n      maxHeight={600}\n      altText={description}\n    />\n  );\n};\n\nMedia.displayName = 'Media';\n", "/** Gets file name from url. Must be asset url or it will not work correctly */\ntype FileInfo = {\n  fileName: string;\n  extension: string;\n};\n\nexport const getFileInfo = (url?: string): FileInfo => {\n  if (url) {\n    const nameAndExt = url.split('?')[0]!.split('/').pop();\n\n    if (nameAndExt) {\n      // just in case file name has \".\" in it\n      const nameAndExtArr = nameAndExt.split('.');\n      const extension = nameAndExtArr.slice(-1)[0]!;\n      const fileName = nameAndExtArr\n        .slice(0, nameAndExtArr.length - 1)\n        .join('.')\n        .trim();\n\n      return {\n        fileName,\n        extension,\n      };\n    }\n  }\n\n  return { fileName: '', extension: '' };\n};\n", "export const isElementInViewport = (element: HTMLElement): boolean => {\n  const rect = element.getBoundingClientRect();\n  return (\n    rect.top >= 0 &&\n    rect.left >= 0 &&\n    rect.bottom <= (window.innerHeight ?? document.documentElement.clientHeight) &&\n    rect.right <= (window.innerWidth ?? document.documentElement.clientWidth)\n  );\n};\n", "import { logValue } from '../../helpers/logging';\nimport type { ContentfulSysProps } from '../../types/contentful';\nimport { isElementInViewport } from '../../utils/isElementInViewport';\nimport type { VideoDataProps } from './types';\n\nexport const isVideoDataProps = (props: ContentfulSysProps): props is VideoDataProps => {\n  return (props as VideoDataProps).__typename === 'Video';\n};\n\ninterface GetVideoWatchLoggerParams {\n  eventLabel: string;\n  getPreviousWatchTime: () => number;\n  setPreviousWatchTime: (value: number) => void;\n  /** Defaults to true if not specified */\n  autoPlay?: boolean | null;\n  elementLocation?: string;\n}\n\n/** Helper function that generates an `onTimeUpdate` listener to log video watch times. */\nexport const getVideoWatchLogger: (\n  params: GetVideoWatchLoggerParams\n) => React.ReactEventHandler<HTMLVideoElement> = ({\n  autoPlay = true, //default to true if not specified\n  eventLabel,\n  getPreviousWatchTime,\n  setPreviousWatchTime,\n  elementLocation,\n}) => {\n  const onTimeUpdate: React.ReactEventHandler<HTMLVideoElement> = event => {\n    // don't log watch heartbeats for auto-played videos\n    if (autoPlay) return;\n\n    const video = event.target as HTMLVideoElement;\n\n    //https://docs.w3cub.com/dom/htmlmediaelement/readystate\n    const sufficientDataToPlay = video.readyState > 2;\n    const isVideoPlaying =\n      video.currentTime > 0 && !video.paused && !video.ended && sufficientDataToPlay;\n\n    const watchEventTimeDelta = Math.abs(getPreviousWatchTime() - video.currentTime);\n    const isVideoInViewport = isElementInViewport(video);\n\n    if (isVideoPlaying && isVideoInViewport && !document.hidden && watchEventTimeDelta >= 0.9) {\n      logValue({\n        eventCategory: 'Video',\n        eventLabel,\n        eventVariable: 'video_watch',\n        eventValue: Math.floor(video.currentTime),\n        context: { elementLocation },\n      });\n      setPreviousWatchTime(video.currentTime);\n    }\n  };\n\n  return onTimeUpdate;\n};\n", "import { gql } from '@apollo/client';\n\nexport const assetFragment = gql`\n  fragment AssetAll on Asset {\n    sys {\n      id\n    }\n    contentType\n    width\n    height\n    title\n    description\n    url\n    size\n  }\n`;\n\n// TODO: Delete references to this.\nexport const fragments = {\n  all: assetFragment,\n};\n\nexport const query = gql`\n  query AssetsQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    asset(preview: $preview, locale: $locale, id: $id) {\n      ...AssetAll\n    }\n  }\n  ${assetFragment}\n`;\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { fragments as mediaFragments } from '../Media';\n\nexport const fragments = {\n  all: gql`\n    fragment FaviconAll on Favicon {\n      ...ContentfulSysId\n      asset {\n        ...AssetAll\n      }\n      size\n    }\n    ${mediaFragments.all}\n    ${contentfulSysIdFragment}\n  `,\n};\n\nexport const query = gql`\n  query FaviconCollectionQuery($preview: Boolean!, $locale: String!) {\n    faviconCollection(preview: $preview, locale: $locale, order: sys_publishedAt_ASC) {\n      items {\n        ...FaviconAll\n      }\n    }\n  }\n  ${fragments.all}\n`;\n", "import type { FC } from 'react';\nimport { Helmet } from 'react-helmet-async';\n\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport { query } from './query';\nimport type { FaviconDataHandlerProps } from './types';\n\nexport const Favicon: FC = () => {\n  const { data } = useContentfulQuery<FaviconDataHandlerProps>(query, {});\n\n  if (!data) return null;\n\n  const publishedFavicon = data?.faviconCollection?.items?.some(faviconEntry =>\n    Boolean(faviconEntry.asset)\n  );\n\n  if (!publishedFavicon) {\n    return (\n      <Helmet>\n        <link rel=\"icon\" type=\"image/png\" href=\"/images/favicon.png\" />\n      </Helmet>\n    );\n  }\n\n  return (\n    <Helmet>\n      {data.faviconCollection.items\n        .filter(faviconEntry => Boolean(faviconEntry.asset))\n        .map(faviconEntry => {\n          const { sys, asset, size } = faviconEntry;\n          return (\n            <link\n              key={sys.id}\n              rel=\"icon\"\n              type=\"image/png\"\n              href={`${asset.url}?fm=png`}\n              sizes={size ? `${size}x${size}` : undefined}\n            />\n          );\n        })}\n    </Helmet>\n  );\n};\n", "import { useContentfulImages } from '@snapchat/mw-contentful-client';\nimport type { FooterGroup, FooterGroupItemsItem } from '@snapchat/mw-contentful-schema';\nimport { FooterType, GlobalFooter } from '@snapchat/mw-global-components';\nimport type { BackgroundColor, MotifScheme } from '@snapchat/snap-design-system-marketing';\nimport {\n  FooterSocial,\n  ImageButton,\n  Media,\n  MessageContext,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC, ReactNode } from 'react';\nimport { useCallback, useContext } from 'react';\n\nimport { Config } from '../../config';\nimport { FooterView, PageLayoutContext } from '../../context/PageLayoutContext';\nimport { SitewideConfigurationContext } from '../../context/SitewideConfiguration/SitewideConfigurationContext';\nimport { logUserEvent } from '../../helpers/logging';\nimport { useAlternateBrandPropOverride } from '../../hooks/useAlternateBrandPropOverride';\nimport { useMotifScheme } from '../../hooks/useMotifScheme';\nimport { UserAction } from '../../types/events';\nimport { Anchor } from '../Anchor';\nimport { useExperiment } from '../Experiment';\nimport { logoWrapperCss, socialAnchorCss, socialPictureCss } from './Footer.styles';\nimport { filterCriteria } from './utils';\n\ntype FooterWrapperProps = {\n  cookieSettingsUrl: string;\n};\n\nexport const Footer: FC<FooterWrapperProps> = ({ cookieSettingsUrl }) => {\n  const { footerView, hasSideNav, hasCustomSideNav } = useContext(PageLayoutContext);\n  const { getImageSources } = useContentfulImages();\n\n  const handleGroupToggle = useCallback((groupId: string, groupTitle: string) => {\n    logUserEvent({\n      eventCategory: 'Footer',\n      eventAction: UserAction.Click,\n      eventLabel: `footer_group_toggle: ${groupId}`,\n      context: { elementText: groupTitle, elementLocation: 'Footer' },\n    });\n  }, []);\n\n  // This is only used in sandbox to override the footer props for other brands\n  const alternateBrandPropOverride = useAlternateBrandPropOverride(Config, 'footer');\n\n  const { formatMessage } = useContext(MessageContext);\n\n  const defaultLogoAriaLabel = formatMessage({\n    id: 'navigate-to-snap-com',\n    defaultMessage: 'Navigate to snap.com',\n  });\n\n  const finalFooterProps = {\n    ...Config.theme?.footerPropsOverride,\n    ...alternateBrandPropOverride,\n  };\n\n  const { sitewideValues } = useContext(SitewideConfigurationContext);\n  const motifScheme = useMotifScheme(\n    sitewideValues?.customFooter?.brandBackgroundColor as MotifScheme | null | undefined\n  );\n\n  const { checkCriteria } = useExperiment();\n\n  const showSimpleFooter = footerView === FooterView.SIMPLE_FOOTER;\n  const noFooter = footerView === FooterView.NO_FOOTER;\n\n  let footerType: FooterType = FooterType.FULL_FOOTER;\n\n  if (noFooter) {\n    footerType = FooterType.NO_FOOTER;\n  } else if (showSimpleFooter) {\n    footerType = FooterType.SIMPLE_FOOTER;\n  }\n\n  if (noFooter) {\n    return null;\n  }\n\n  const isVisible = (item: FooterGroup | FooterGroupItemsItem) => checkCriteria(item.criteria);\n\n  const customFooter = sitewideValues?.customFooter;\n\n  const filteredFooterColumnsCollection = filterCriteria(\n    isVisible,\n    cookieSettingsUrl,\n    customFooter?.columnsCollection?.items\n  );\n  const filteredFooterBarCollection = filterCriteria(\n    isVisible,\n    cookieSettingsUrl,\n    customFooter?.barCollection?.items\n  );\n\n  const footerSocial = customFooter?.socialCollection?.items?.length ? (\n    <FooterSocial\n      title={customFooter?.socialLabel ?? undefined}\n      hasSideNav={hasSideNav || hasCustomSideNav}\n    >\n      {customFooter?.socialCollection?.items?.map((footerSocialItem, i) => {\n        const { image, height, sys, url, width } = footerSocialItem;\n        return (\n          <ImageButton\n            key={`${sys.id}-${i}`}\n            url={url}\n            height={height}\n            imgSrcs={getImageSources(image?.url)}\n            altText={image?.description}\n            width={width}\n            pictureClassName={socialPictureCss}\n            className={socialAnchorCss}\n          />\n        );\n      })}\n    </FooterSocial>\n  ) : null;\n\n  const customLogo = customFooter?.logo;\n  let footerLogo: ReactNode | undefined;\n\n  if (customLogo) {\n    const imgSrcs = getImageSources(customLogo.media?.url, {\n      image: { height: 24 },\n    });\n    const logoUrl = customFooter?.url;\n    const logo = (\n      <Media\n        sourceType={customLogo.media?.contentType}\n        marginBottom={false}\n        imgSrcs={imgSrcs}\n        altText={customLogo.media?.description}\n      />\n    );\n\n    if (logoUrl) {\n      const logoAriaLabel = customFooter?.logoAriaLabel || defaultLogoAriaLabel;\n\n      footerLogo = (\n        <Anchor href={logoUrl} className={logoWrapperCss} aria-label={logoAriaLabel}>\n          {logo}\n        </Anchor>\n      );\n    } else {\n      footerLogo = logo;\n    }\n  }\n\n  return (\n    <GlobalFooter\n      customColumns={filteredFooterColumnsCollection}\n      customFooterBar={filteredFooterBarCollection}\n      cookieSettingsUrl={cookieSettingsUrl}\n      motifScheme={motifScheme}\n      backgroundColor={customFooter?.backgroundColor as BackgroundColor | undefined}\n      logo={footerLogo}\n      socialBar={footerSocial}\n      footerType={footerType}\n      hasSideNav={hasSideNav || hasCustomSideNav}\n      onGroupToggle={handleGroupToggle}\n      {...finalFooterProps}\n    />\n  );\n};\n", "import type { BackgroundColor } from '@snapchat/snap-design-system-marketing';\nimport { createContext } from 'react';\n\nexport enum HeaderView {\n  FULL_HEADER = 'Full Header',\n  /**\n   * Minimized header hides all the navigation items, keeping just the snap logo and the call to\n   * action buttons\n   */\n  MINIMIZED_HEADER = 'Minimized Header',\n  NO_HEADER = 'No Header',\n  /**\n   * Reduced Header renders the following:\n   *\n   * - Global Navigation\n   * - Site logo and title\n   * - CTAs and Site Search\n   *\n   * It does NOT render the following:\n   *\n   * - Local navigation items.\n   */\n  REDUCED_HEADER = 'Reduced Header',\n  /**\n   * Simple header hides all the navigation items, keeping just the snap logo and name of the\n   * website\n   */\n  SIMPLE_HEADER = 'Simple Header',\n}\n\n/**\n * Simple footer allows to show a narrow basic footer bar with only essential links.\n *\n * NOTE: These values must match validation in contentful.\n */\nexport enum FooterView {\n  FULL_FOOTER = 'Full Footer',\n  NO_FOOTER = 'No Footer',\n  SIMPLE_FOOTER = 'Simple Footer',\n}\n\nexport interface PageLayoutContextProps {\n  footerView: FooterView;\n  headerView: HeaderView;\n  headerBackgroundColorOverride?: BackgroundColor;\n  hasSideNav: boolean;\n  hasSubNav: boolean;\n  /* This covers the case where a page uses a custom side nav that is not created in Contentful\n   * using the 'SideNavigation' content type and rendered at the slug level.\n   *\n   * An example of this is the snap.com home page where the side nav is part of a custom block.\n   *\n   * We cannot use the 'hasSideNav' property as that will also lead to other changes that are not\n   * appropriate for this use case, such as a different max-width for the page container.\n   */\n  hasCustomSideNav: boolean;\n  setFooterView?: (footerView: FooterView) => void;\n  setHeaderView?: (headerView: HeaderView) => void;\n  setHeaderBackgroundColorOverride?: (color?: BackgroundColor) => void;\n  setHasSideNav?: (hasSideNav: boolean) => void;\n  setHasSubNav?: (hasSubNav: boolean) => void;\n  setHasCustomSideNav?: (hasCustomSideNav: boolean) => void;\n}\n\nexport const PageLayoutContext = createContext<PageLayoutContextProps>({\n  footerView: FooterView.FULL_FOOTER,\n  headerView: HeaderView.FULL_HEADER,\n  hasSideNav: false,\n  hasSubNav: false,\n  hasCustomSideNav: false,\n});\n", "import type { Brand } from '@snapchat/mw-common';\nimport { useContext } from 'react';\n\nimport { AppContext } from '../AppContext';\nimport { Config } from '../config';\nimport type { BrandPropOverrides, SiteConfiguration } from '../configTypes';\nimport { UrlParameter } from '../constants/urlParameters';\n\ntype BrandPropOverrideKey = keyof BrandPropOverrides;\n\ntype BrandPropOverrideValue<K extends BrandPropOverrideKey> = BrandPropOverrides[K];\n\n/**\n * Hook to get alternate brand prop overrides based on URL query parameters.\n *\n * Checks if the `alternateMotif` query parameter has a truthy value that matches a brand key in the\n * site configuration's `alternateBrandPropOverrides`. If found, returns the override value for the\n * specified key.\n *\n * @param siteConfig - The site configuration object\n * @param overrideKey - The key from BrandPropOverrides to retrieve (e.g., 'globalNavProps',\n *   'footerPropsOverride')\n * @returns The override value if found, otherwise undefined\n */\nexport function useAlternateBrandPropOverride<K extends BrandPropOverrideKey>(\n  siteConfig: SiteConfiguration,\n  overrideKey: K\n): BrandPropOverrideValue<K> | undefined {\n  const { getCurrentUrl } = useContext(AppContext);\n\n  if (Config.isDeploymentTypeProd) {\n    return undefined;\n  }\n\n  const url = new URL(getCurrentUrl());\n  const alternateMotifValue = url.searchParams.get(UrlParameter.USE_ALTERNATE_MOTIF);\n\n  if (!alternateMotifValue) {\n    return undefined;\n  }\n\n  const alternateBrandOverrides = siteConfig.alternateBrandPropOverrides;\n\n  if (!alternateBrandOverrides) {\n    return undefined;\n  }\n\n  // Check if the query param value matches a Brand key in alternateBrandPropOverrides\n  const brandOverrides = alternateBrandOverrides[alternateMotifValue as Brand];\n\n  if (!brandOverrides) {\n    return undefined;\n  }\n\n  return brandOverrides[overrideKey];\n}\n", "import type { Brand } from '@snapchat/mw-common';\nimport { allBrands, Site, SitesToBrands } from '@snapchat/mw-common';\nimport { useContext } from 'react';\n\nimport { AppContext } from '../AppContext';\nimport { Config } from '../config';\nimport { UrlParameter } from '../constants/urlParameters';\n\n/**\n * Resolves the current brand for the site.\n *\n * On sandbox, the `alternateMotif` query param can override the brand. If the param contains a\n * valid brand, it takes precedence over the static site brand from `SitesToBrands`.\n */\nexport function useBrand(): Brand | undefined {\n  const { getCurrentUrl } = useContext(AppContext);\n\n  let brand = SitesToBrands[Config.site];\n\n  if (Config.site === Site.SANDBOX) {\n    const url = new URL(getCurrentUrl());\n    const alternateMotif = url.searchParams.get(UrlParameter.USE_ALTERNATE_MOTIF);\n\n    const isValidBrand = alternateMotif && allBrands.includes(alternateMotif as Brand);\n\n    if (isValidBrand) {\n      brand = alternateMotif as Brand;\n    }\n  }\n\n  return brand;\n}\n", "import { Brand } from '@snapchat/mw-common';\nimport type { MotifScheme } from '@snapchat/snap-design-system-marketing';\nimport { MotifScheme as MotifSchemeEnum } from '@snapchat/snap-design-system-marketing';\n\nimport { useBrand } from './useBrand';\n\n/**\n * Resolves the `motifScheme` prop value based on the current site's brand.\n *\n * For sites with the `snap` brand, provides a `MotifScheme.DEFAULT` fallback to prevent SDS-M\n * components from applying their own internal fallback behavior.\n */\nexport function useMotifScheme(\n  brandValue: MotifScheme | null | undefined\n): MotifScheme | undefined {\n  const brand = useBrand();\n\n  if (brand === Brand.SNAP) {\n    return brandValue ?? MotifSchemeEnum.DEFAULT;\n  }\n\n  return brandValue ?? undefined;\n}\n", "import type { Button as ButtonType } from '@snapchat/mw-contentful-schema';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logUserEvent } from '../../helpers/logging/loggingInstance';\nimport type { ContentfulIdVariable } from '../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport { UserAction } from '../../types/events';\nimport { isContentfulSysNotShallow } from '../../utils/contentful';\nimport { getContentfulInspectorProps } from '../../utils/contentful/getContentfulInspectorProps';\nimport type { ButtonData } from '../Button';\nimport { Button } from '../Button';\nimport { query } from './query';\nimport type {\n  CallToActionDataHandlerProps,\n  CallToActionDataProps,\n  CallToActionProps,\n} from './types';\n\nexport const CallToAction: FC<CallToActionProps> = props => {\n  const elementLocation = useContext(ElementLocation).elementLocation;\n  const { data: rawData } = useContentfulQuery<CallToActionDataHandlerProps, ContentfulIdVariable>(\n    query,\n    {\n      skip: isContentfulSysNotShallow(props),\n      variables: { id: props.sys.id },\n    }\n  );\n\n  const data = rawData ? rawData?.callToAction : (props as CallToActionDataProps);\n\n  // Sanity check for when content is archived or isn't published.\n  if (!data || !data.sys || !data.presentation) {\n    return null;\n  }\n\n  const { presentation, analytics, url, className } = data;\n  const label = analytics?.label;\n\n  // NOTE: This is legacy record; the `url` is null in all new CTAs so the logEvent doesn't\n  // have enough information to log anything. Loggin happens inside the presentation component.\n  // logEvent?.({ type: UserAction.Click, component: 'CTA', label, url });\n  const onClick = (): void => {\n    if (!(label || url)) return;\n\n    logUserEvent({\n      eventCategory: 'CTA',\n      eventAction: UserAction.Click,\n      eventLabel: label ?? (url ? `to: ${url}` : null),\n      context: {\n        elementText: label,\n        targetUrl: url,\n        elementLocation,\n      },\n    });\n  };\n\n  if (presentation.__typename === 'Button') {\n    // TODO: Remove this cast. Requires making MediaProps work w/ Asset.\n    const buttonData = presentation as ButtonData;\n\n    const { titleDataset } = getContentfulInspectorProps<ButtonType>({\n      entryId: buttonData.sys.id,\n      fieldIds: ['title'],\n    });\n\n    return (\n      <Button\n        onClick={onClick}\n        {...buttonData}\n        className={className}\n        buttonTextDataset={titleDataset}\n      />\n    );\n  }\n\n  // TODO: Throw an error here.\n  return null;\n};\n\nCallToAction.displayName = 'CallToAction';\n", "import type {\n  ContentfulIdProps,\n  ContentfulIdsProps,\n  ContentfulSysProps,\n} from '../types/contentful';\n\nexport const isContentfulIdProps = <T>(\n  props: T | ContentfulIdProps\n): props is ContentfulIdProps => {\n  return !!(props as ContentfulIdProps).id;\n};\n\nexport const isContentfulSysProps = <T>(\n  props: T | ContentfulSysProps\n): props is ContentfulSysProps => {\n  return (props as ContentfulSysProps).sys !== undefined;\n};\n\nexport const isContentfulIdsProps = <T>(\n  props: T | ContentfulIdsProps\n): props is ContentfulIdsProps => {\n  const propsAs = props as ContentfulIdsProps;\n  return Array.isArray(propsAs.ids);\n};\n\n/** Returns whether the props contains any keys besides the shallow copy ones. */\nexport const isContentfulShallow = (\n  props: ContentfulIdProps | ContentfulSysProps | ContentfulIdsProps\n): boolean => {\n  const allKeys = new Set(Object.keys(props));\n  ['__typename', 'id', 'ids', 'sys'].forEach(key => allKeys.delete(key));\n  return allKeys.size === 0;\n};\n\n/** Returns whether props are not shallow. */\nexport const isContentfulSysNotShallow = <D extends ContentfulSysProps>(\n  props: ContentfulSysProps\n): props is D => {\n  const allKeys = new Set(Object.keys(props));\n  ['__typename', 'sys'].forEach(key => allKeys.delete(key));\n  return allKeys.size > 0;\n};\n", "import type { Entry } from '@snapchat/mw-contentful-schema';\n\nimport { Config } from '../../config';\n\ntype GetContentfulInspectorPropsArgs<T> = {\n  entryId: string;\n  locale?: string;\n  fieldIds: (keyof T)[];\n};\n\n// These correspond to data-* attributes for inspector mode\ntype InspectorProps<T> = {\n  contentfulFieldId: T;\n  contentfulEntryId: string;\n  contentfulLocale?: string;\n};\n\n/**\n * Field ids are generally 1:1 with the graphql schema types except for collections. The graphql\n * schema has a 'Collection' suffix, while the Content Model's fieldId does not. e.g.\n * \"callsToActionCollection\" vs 'callsToAction'. Collections refer to a collection of other\n * entries.\n *\n * We have a practice of not tagging reference fields with inspector tags, but sometimes it may make\n * sense to edit them as a group, e.g. a collection of small icons where the inspector box for each\n * icon would get too clumped together. But that's a rare case.\n */\ntype RemoveCollectionSuffix<T> = T extends `${infer Field}Collection` ? Field : T;\n\ntype WithDatasetSuffix<T extends string> = `${T}Dataset`;\n\ntype StringKeys<T> = Extract<keyof T, string>;\n\n// This removes the 'Collection' suffix\ntype RekeyedContentType<ContentType> = {\n  [Fields in StringKeys<ContentType> as RemoveCollectionSuffix<Fields>]: ContentType[Fields];\n};\n\n// This adds the 'Dataset' suffix\ntype InspectorDataset<RemappedContentType> = {\n  [Fields in StringKeys<RemappedContentType> as WithDatasetSuffix<Fields>]: RemappedContentType[Fields];\n};\n\ntype InspectorPropsMap<SuffixedT extends string, T> = Partial<Record<SuffixedT, InspectorProps<T>>>;\n\ntype InspectorPropsReturnType<T extends Entry> = InspectorPropsMap<\n  keyof InspectorDataset<RekeyedContentType<T>>,\n  keyof RekeyedContentType<T>\n>;\n\n/**\n * Helper function to generate Contentful inspector props.\n *\n * If you are getting type errors in fieldIds, make sure you are passing in a Contentful type as a\n * type parameter.\n *\n * @param entryId: The Contentful entry id that these fields belong to\n * @param fieldIds: A list of field ids corresponding those in the entry Content Model.\n * @param locale: The locale to preview in. Use it to override the initial locale if needed.\n * @returns\n */\nexport function getContentfulInspectorProps<T extends Entry>({\n  entryId,\n  fieldIds,\n  locale,\n}: GetContentfulInspectorPropsArgs<RekeyedContentType<T>>): InspectorPropsReturnType<T> {\n  if (Config.isDeploymentTypeProd) {\n    return {};\n  }\n\n  const map: InspectorPropsReturnType<T> = {};\n\n  fieldIds.forEach(id => {\n    const mapId = `${String(id)}Dataset` as keyof InspectorDataset<RekeyedContentType<T>>;\n\n    map[mapId] = {\n      contentfulEntryId: entryId,\n      contentfulFieldId: id,\n      contentfulLocale: locale,\n    };\n  });\n\n  return map;\n}\n", "import { documentToPlainTextString } from '@contentful/rich-text-plain-text-renderer';\nimport { useContentfulImages } from '@snapchat/mw-contentful-client';\nimport { Button as ButtonSDS, ButtonType } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { shouldFlushLogs } from '../../helpers/getLocalPath';\nimport { logger, logUserEvent } from '../../helpers/logging';\nimport { UserAction } from '../../types/events';\nimport { renderRichTextMarkingsOnly } from '../../utils/renderText/renderRichText';\nimport type { ButtonData } from './query';\nimport type { ButtonComponentProps } from './types';\n\nexport const Button: FC<ButtonData & ButtonComponentProps> = props => {\n  const {\n    url,\n    onClick,\n    buttonType,\n    title,\n    size,\n    image,\n    iconName,\n    targetAsset,\n    className,\n    buttonTextDataset,\n  } = props;\n  const elementLocation = useContext(ElementLocation).elementLocation;\n  const { getImageSources } = useContentfulImages();\n\n  const onClickHandler = (): void => {\n    onClick?.(); // Used by CallToAction to log a click on CTA. Kept for legacy reasons.\n\n    logUserEvent({\n      eventCategory: 'Button',\n      eventAction: UserAction.Click,\n      eventLabel: url ? `to: ${url}` : null,\n      context: {\n        elementText: documentToPlainTextString(title.json),\n        targetUrl: targetAsset?.url ?? url,\n        elementLocation,\n      },\n    });\n\n    if (shouldFlushLogs(url)) {\n      void logger.flush();\n    }\n  };\n\n  const type = buttonType ?? ButtonType.Primary;\n  const imgSrcs = getImageSources(image?.media?.url);\n  return (\n    <ButtonSDS\n      className={className}\n      link={targetAsset?.url ?? url}\n      type={type}\n      onClick={onClickHandler}\n      size={size}\n      iconName={iconName ?? undefined}\n      imgSrcs={imgSrcs}\n      imgAltText={image?.media?.title}\n      buttonTextDataset={buttonTextDataset}\n    >\n      {renderRichTextMarkingsOnly(title)}\n    </ButtonSDS>\n  );\n};\n\nButton.displayName = 'Button';\n", "import { documentToReactComponents } from '@contentful/rich-text-react-renderer';\nimport {\n  Bold,\n  CollapseTableMobile,\n  H1,\n  H2,\n  H3,\n  H4,\n  H5,\n  H6,\n  HorizontalRule,\n  Italics,\n  ListItem,\n  NoCollapseTableMobile,\n  OrderedList,\n  Paragraph,\n  PrimitiveTableCell as TableCell,\n  PrimitiveTableHeader as TableHeader,\n  PrimitiveTableRow as TableRow,\n  Quote as BlockQuote,\n  Underline,\n  UnorderedList,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC, ReactNode } from 'react';\n\nimport { Hyperlink } from '../../components/Hyperlink';\nimport type { RichText } from '../../types/RichText';\nimport {\n  NoHeadingH1,\n  NoHeadingH2,\n  NoHeadingH3,\n  NoHeadingH4,\n  NoHeadingH5,\n  NoHeadingH6,\n} from './NoHeadingRichTextComponents';\nimport { createRichTextRenderer } from './renderText';\nimport { RichTextDocument, RichTextNoPaddingParagraph } from './RichTextComponents';\nimport { renderMultiLineText } from './textUtils';\n\nexport const RichTextWithElementsComponents = {\n  Document: RichTextDocument,\n  Text: renderMultiLineText,\n  Bold,\n  Italics,\n  Underline,\n\n  H1,\n  H2,\n  H3,\n  H4,\n  H5,\n  H6,\n\n  Paragraph,\n  Hyperlink,\n  ListItem,\n  UnorderedList,\n  OrderedList,\n  Table: NoCollapseTableMobile,\n  TableCell,\n  TableHeader,\n  TableRow,\n  HorizontalRule,\n  BlockQuote: BlockQuote as FC,\n};\n\n/**\n * Renders wich text that has NO EMBEDDED ASSETS or ENTRIES.\n *\n * If you need to render embedded entries, see 'renderText.ts'.\n *\n * This uses standard HTML elements like <b>, <hr>, <sup> etc.\n *\n * Going forward, we should be using this for most RichText needs.\n */\nexport const renderRichText = (data?: RichText | string): ReactNode => {\n  if (!data) {\n    return undefined;\n  }\n\n  if (typeof data === 'string') {\n    return data;\n  }\n\n  return documentToReactComponents(data.json /* useDefaultOptions */);\n};\n\n/**\n * Renders rich text as plain text only wrapping around markings like underline / italics and bold.\n *\n * This is useful when we want to render rich text but not honor the <p> tag to avoid extra spacing.\n */\nexport const renderRichTextMarkingsOnly = createRichTextRenderer({\n  components: {\n    Bold,\n    Italics,\n    Underline,\n  },\n});\n\n/**\n * Same as {@link renderRichTextMarkingsOnly} except that it inserts <br /> where new-line characters\n * are so whitespaces ends up being rendered.\n */\nexport const renderRichTextMultiLineWithMarkings = createRichTextRenderer({\n  components: {\n    // To insert <br /> between new lines\n    Text: renderMultiLineText,\n    Bold,\n    Italics,\n    Underline,\n    // To wrap each node in <p>, but without margins since we don't expect\n    // these lines of text to actually be paragraphs but rather multi-line titles/subtitles\n    Paragraph: RichTextNoPaddingParagraph,\n  },\n});\n\n/**\n * Render RichText components using basic SDSM primitives.\n *\n * This one is probably worse when it comes to rendering basic tags but includes the embedded\n * entries like CTAs and Media.\n */\nexport const renderRichTextWithElements = createRichTextRenderer({\n  components: RichTextWithElementsComponents,\n});\n\n/**\n * RichText renderer that uses SDSM primives but does not use h1-h6 tags.\n *\n * These exist to not interfere with screenreaders and SEO where the order of h1-h6 and their\n * position matters.\n */\nexport const renderRichTextWithElementsNoHeadings = createRichTextRenderer({\n  components: {\n    ...RichTextWithElementsComponents,\n    H1: NoHeadingH1,\n    H2: NoHeadingH2,\n    H3: NoHeadingH3,\n    H4: NoHeadingH4,\n    H5: NoHeadingH5,\n    H6: NoHeadingH6,\n  },\n});\n\n/**\n * RichText renderer that uses SDSM primives, useHeadingTagsForBody is used to conditionally use or\n * not h1-h6 tags, collapseMobileTable is used to render the primitive table with a set prop\n */\nexport const getRichTextWithEmbeddingsRenderer = (\n  useHeadingTagsForBody = false,\n  collapseMobileTable = false\n  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n) => {\n  const headings = useHeadingTagsForBody\n    ? {\n        H1,\n        H2,\n        H3,\n        H4,\n        H5,\n        H6,\n      }\n    : {\n        H1: NoHeadingH1,\n        H2: NoHeadingH2,\n        H3: NoHeadingH3,\n        H4: NoHeadingH4,\n        H5: NoHeadingH5,\n        H6: NoHeadingH6,\n      };\n\n  const Table = collapseMobileTable ? CollapseTableMobile : NoCollapseTableMobile;\n\n  return createRichTextRenderer({\n    components: {\n      ...RichTextWithElementsComponents,\n      ...headings,\n      Table,\n    },\n  });\n};\n", "import { Hyperlink as HyperlinkSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC, PropsWithChildren } from 'react';\nimport { useContext } from 'react';\n\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { shouldFlushLogs } from '../../helpers/getLocalPath';\nimport { logger, logUserEvent } from '../../helpers/logging';\nimport { UserAction } from '../../types/events';\nimport type { HyperlinkProps } from './types';\n\nexport const Hyperlink: FC<PropsWithChildren<HyperlinkProps>> = ({ uri, children }) => {\n  const elementLocation = useContext(ElementLocation).elementLocation;\n\n  const onClick = (): void => {\n    logUserEvent({\n      eventAction: UserAction.Click,\n      eventCategory: 'Hyperlink',\n      eventLabel: `Hyperlink: ${uri}`,\n      context: {\n        targetUrl: uri,\n        elementLocation,\n        elementText: typeof children === 'string' ? children : undefined,\n      },\n    });\n\n    if (shouldFlushLogs(uri)) {\n      void logger.flush();\n    }\n  };\n\n  return (\n    <HyperlinkSDS link={uri} onClick={onClick}>\n      {children}\n    </HyperlinkSDS>\n  );\n};\n\nHyperlink.displayName = 'Hyperlink';\n\n// TODO: does this need a figma code connect?\n", "import { css, cx } from '@emotion/css';\nimport {\n  h4Css,\n  h5Css,\n  p1Css,\n  p2Css,\n  p3Css,\n  p4Css,\n  primitiveElementClassNames,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC, PropsWithChildren } from 'react';\n\n/** Standard header sizing. Namely higher line height. */\nconst headerCss = css`\n  && {\n    line-height: 160%;\n  }\n`;\n\nexport const NoHeadingH1: FC<PropsWithChildren> = ({ children }) => (\n  <div className={cx(primitiveElementClassNames.h1, h4Css, headerCss)}>{children}</div>\n);\nNoHeadingH1.displayName = 'H1';\n\nexport const NoHeadingH2: FC<PropsWithChildren> = ({ children }) => (\n  <div className={cx(primitiveElementClassNames.h2, h5Css, headerCss)}>{children}</div>\n);\nNoHeadingH2.displayName = 'H2';\n\nexport const NoHeadingH3: FC<PropsWithChildren> = ({ children }) => (\n  <div className={cx(primitiveElementClassNames.h3, p1Css, headerCss)}>{children}</div>\n);\nNoHeadingH3.displayName = 'H3';\n\nexport const NoHeadingH4: FC<PropsWithChildren> = ({ children }) => (\n  <div className={cx(primitiveElementClassNames.h4, p2Css, headerCss)}>{children}</div>\n);\nNoHeadingH4.displayName = 'H4';\n\nexport const NoHeadingH5: FC<PropsWithChildren> = ({ children }) => (\n  <div className={cx(primitiveElementClassNames.h5, p3Css, headerCss)}>{children}</div>\n);\nNoHeadingH5.displayName = 'H5';\n\nexport const NoHeadingH6: FC<PropsWithChildren> = ({ children }) => (\n  <div className={cx(primitiveElementClassNames.h6, p4Css, headerCss)}>{children}</div>\n);\nNoHeadingH6.displayName = 'H6';\n", "import type { NodeRenderer, Options } from '@contentful/rich-text-react-renderer';\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\nimport { BLOCKS, INLINES, MARKS } from '@contentful/rich-text-types';\nimport type { Asset, Entry } from '@snapchat/mw-contentful-schema';\nimport get from 'lodash-es/get';\nimport keyBy from 'lodash-es/keyBy';\nimport type { FC, PropsWithChildren, ReactNode } from 'react';\nimport type React from 'react';\n\nimport { AssetEntryHyperlink } from '../../components/Hyperlink/AssetEntryHyperlink';\nimport type { VideoDataProps } from '../../components/Video';\nimport { logError } from '../../helpers/logging';\nimport type { ContentfulSysProps } from '../../types/contentful';\nimport type { RenderData, RichText } from '../../types/RichText';\nimport type { ContentfulComponentMap } from '../contentfulComponentMap';\nimport { contentfulComponentMap } from '../contentfulComponentMap';\nimport { embeddedVideoCss } from './embeddedEntryStyles';\nimport type { GetRichTextOptionsProps, MarkRenderer, RenderTextProps } from './types';\n\nconst defaultMarkRenderer: MarkRenderer = text => text;\n\nconst defaultNodeRenderer: NodeRenderer = (node, children) => {\n  if (!children) {\n    logError({\n      component: 'RenderText',\n      message: 'Default node renderer cannot render this node.',\n      context: {\n        node: JSON.stringify(node),\n      },\n    });\n\n    return null;\n  }\n\n  return <>{children}</>;\n};\n\nconst getRichTextMarkRenderer = (Component?: FC<PropsWithChildren>): MarkRenderer =>\n  Component ? (text): ReactNode => <Component>{text}</Component> : defaultMarkRenderer;\n\nconst getRichTextNodeRenderer = (Component?: FC<PropsWithChildren>): NodeRenderer =>\n  Component\n    ? (node, children): ReactNode => <Component {...node.data}>{children}</Component>\n    : defaultNodeRenderer;\n\nconst getEmbeddedEntryNodeRenderer = (\n  contentfulComponentMap: ContentfulComponentMap,\n  entries?: ContentfulSysProps[]\n): NodeRenderer => {\n  // eslint-disable-next-line react/display-name\n  return (node): ReactNode => {\n    const entriesById = keyBy(entries, entry => entry.sys.id);\n\n    const entryId = node.data.target.sys.id;\n    const entry = entriesById[entryId];\n    const typename = entry?.__typename;\n\n    if (!typename) {\n      // If the typename wasn't requested in the query. Default render node.\n      logError({\n        component: 'RenderText',\n        message: `Node typename wasn't in the query response`,\n        context: {\n          entryId,\n        },\n      });\n\n      return defaultNodeRenderer(node, null);\n    }\n\n    if (typename === 'Asset') {\n      logError({\n        component: 'RenderText',\n        message: `Attempted to render embedded asset: ${entryId} but this is no longer supported.`,\n        context: {\n          entryId,\n        },\n      });\n\n      // Not using defaultNodeRenderer to avoid unnecessary logs.\n      return null;\n    }\n\n    if (typename in contentfulComponentMap) {\n      // if the entry is a video, we need to apply the embedded inline entry styles to the video\n      // otherwise the poster image may render larger than the video itself\n      if (typename === 'Video') {\n        const VideoComponent = contentfulComponentMap[typename];\n        return <VideoComponent {...(entry as VideoDataProps)} mediaClassName={embeddedVideoCss} />;\n      }\n\n      // @ts-ignore: typename guaranteed to be in the component map.\n      const Component = contentfulComponentMap[typename];\n      return <Component {...entry} />;\n    }\n\n    // If no component is specified, then default render.\n    logError({\n      component: 'RenderText',\n      message: 'No rich text renderer found',\n      context: {\n        typename,\n      },\n    });\n\n    return defaultNodeRenderer(node, null);\n  };\n};\n\nconst isRichText = (data: RenderData): data is RichText => {\n  return (data as unknown as RichText).json !== undefined;\n};\n\ninterface GetEmbeddedProps {\n  data: RenderData;\n  contentfulComponentMap: ContentfulComponentMap;\n  accessPath: string;\n}\n\nconst getEmbeddedNodeRenderer = (props: GetEmbeddedProps): NodeRenderer => {\n  const { data, contentfulComponentMap, accessPath } = props;\n  let nodeRenderer: NodeRenderer;\n\n  if (!data || !isRichText(data)) {\n    nodeRenderer = defaultNodeRenderer;\n  } else {\n    const linkedEntries = get(data, accessPath);\n    nodeRenderer = getEmbeddedEntryNodeRenderer(contentfulComponentMap, linkedEntries);\n  }\n\n  return nodeRenderer;\n};\n\nconst getHyperlinkedNodeRenderer = (props: {\n  data: RenderData;\n  accessPath: string;\n}): NodeRenderer => {\n  const { data, accessPath } = props;\n\n  if (!data || !isRichText(data)) {\n    return defaultNodeRenderer;\n  }\n\n  // eslint-disable-next-line react/display-name\n  return (node, children): ReactNode => {\n    const linkedItems = get(data, accessPath) as Array<Asset> | Array<Entry>;\n    const itemsById = keyBy(linkedItems, item => item.sys.id);\n    const item = itemsById[node.data.target.sys.id]!;\n\n    return <AssetEntryHyperlink item={item}>{children}</AssetEntryHyperlink>;\n  };\n};\n\nconst getRichTextOptions = (props: GetRichTextOptionsProps): Options => {\n  const { data, components } = props;\n\n  const blockEmbeddedAssetNodeRenderer = getEmbeddedNodeRenderer({\n    data,\n    contentfulComponentMap,\n    accessPath: 'links.assets.block',\n  });\n  const inlineEmbeddedEntryNodeRenderer = getEmbeddedNodeRenderer({\n    data,\n    contentfulComponentMap,\n    accessPath: 'links.entries.inline',\n  });\n  const blockEmbeddedEntryNodeRenderer = getEmbeddedNodeRenderer({\n    data,\n    contentfulComponentMap,\n    accessPath: 'links.entries.block',\n  });\n  const hyperlinkedAssetNodeRenderer = getHyperlinkedNodeRenderer({\n    data,\n    accessPath: 'links.assets.hyperlink',\n  });\n  const hyperlinkedEntryNodeRenderer = getHyperlinkedNodeRenderer({\n    data,\n    accessPath: 'links.entries.hyperlink',\n  });\n\n  return {\n    renderText: components.Text ?? defaultMarkRenderer,\n    renderMark: {\n      [MARKS.BOLD]: getRichTextMarkRenderer(components.Bold),\n      // TODO: This should be using the code component.\n      [MARKS.CODE]: defaultMarkRenderer,\n      [MARKS.ITALIC]: getRichTextMarkRenderer(components.Italics),\n      [MARKS.UNDERLINE]: getRichTextMarkRenderer(components.Underline),\n    },\n    renderNode: {\n      [BLOCKS.DOCUMENT]: getRichTextNodeRenderer(components.Document),\n      [BLOCKS.EMBEDDED_ASSET]: blockEmbeddedAssetNodeRenderer,\n      [BLOCKS.EMBEDDED_ENTRY]: blockEmbeddedEntryNodeRenderer,\n      [BLOCKS.HEADING_1]: getRichTextNodeRenderer(components.H1),\n      [BLOCKS.HEADING_2]: getRichTextNodeRenderer(components.H2),\n      [BLOCKS.HEADING_3]: getRichTextNodeRenderer(components.H3),\n      [BLOCKS.HEADING_4]: getRichTextNodeRenderer(components.H4),\n      [BLOCKS.HEADING_5]: getRichTextNodeRenderer(components.H5),\n      [BLOCKS.HEADING_6]: getRichTextNodeRenderer(components.H6),\n      [BLOCKS.HR]: getRichTextNodeRenderer(components.HorizontalRule),\n      [BLOCKS.LIST_ITEM]: getRichTextNodeRenderer(components.ListItem),\n      [BLOCKS.PARAGRAPH]: getRichTextNodeRenderer(components.Paragraph),\n      // TODO: This should be using the Quote component.\n      [BLOCKS.QUOTE]: getRichTextNodeRenderer(components.BlockQuote),\n      [BLOCKS.UL_LIST]: getRichTextNodeRenderer(components.UnorderedList),\n      [BLOCKS.OL_LIST]: getRichTextNodeRenderer(components.OrderedList),\n      [INLINES.ASSET_HYPERLINK]: hyperlinkedAssetNodeRenderer,\n      [INLINES.ENTRY_HYPERLINK]: hyperlinkedEntryNodeRenderer,\n      [INLINES.EMBEDDED_ENTRY]: inlineEmbeddedEntryNodeRenderer,\n      [INLINES.HYPERLINK]: getRichTextNodeRenderer(components.Hyperlink),\n      // TODO: Upgrade to Contentful v16 to enable \"table\" enums\n      table: getRichTextNodeRenderer(components.Table),\n      'table-cell': getRichTextNodeRenderer(components.TableCell),\n      'table-header-cell': getRichTextNodeRenderer(components.TableHeader),\n      'table-row': getRichTextNodeRenderer(components.TableRow),\n    },\n  };\n};\n\n/**\n * Creater a render for rich text.\n *\n * TODO: We shouldn't support \"string\" as input type here. This only happens when we haven't updated\n * the interfaces to reflect the type of data that is coming from contentful.\n */\nexport const createRichTextRenderer =\n  (props: RenderTextProps) =>\n  (data: RenderData): React.ReactNode => {\n    const { components = {} } = props;\n\n    if (!data) {\n      return undefined;\n    }\n\n    if (typeof data === 'string') {\n      return data;\n    }\n\n    const options = getRichTextOptions({\n      data,\n      components,\n    });\n\n    return documentToReactComponents(data.json, options);\n  };\n", "/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    var value = array[index];\n    setter(accumulator, value, iteratee(value), array);\n  }\n  return accumulator;\n}\n\nexport default arrayAggregator;\n", "import baseEach from './_baseEach.js';\n\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n  baseEach(collection, function(value, key, collection) {\n    setter(accumulator, value, iteratee(value), collection);\n  });\n  return accumulator;\n}\n\nexport default baseAggregator;\n", "import arrayAggregator from './_arrayAggregator.js';\nimport baseAggregator from './_baseAggregator.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\nfunction createAggregator(setter, initializer) {\n  return function(collection, iteratee) {\n    var func = isArray(collection) ? arrayAggregator : baseAggregator,\n        accumulator = initializer ? initializer() : {};\n\n    return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n  };\n}\n\nexport default createAggregator;\n", "import baseAssignValue from './_baseAssignValue.js';\nimport createAggregator from './_createAggregator.js';\n\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n *   { 'dir': 'left', 'code': 97 },\n *   { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n *   return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\nvar keyBy = createAggregator(function(result, value, key) {\n  baseAssignValue(result, key, value);\n});\n\nexport default keyBy;\n", "import type { Asset, Slug } from '@snapchat/mw-contentful-schema';\nimport type { FC, PropsWithChildren } from 'react';\n\nimport { Config } from '../../config';\nimport { logError } from '../../helpers/logging';\nimport { Hyperlink } from './Hyperlink';\n\ntype AssetEntryHyperlink = {\n  item: Asset | Slug;\n};\n\nexport const AssetEntryHyperlink: FC<PropsWithChildren<AssetEntryHyperlink>> = props => {\n  const { item, children } = props;\n\n  const typename = item.__typename;\n\n  // We should only get Asset and Slugs, but not all spaces/models have that validation\n  const notAcceptedTypes = typename !== 'Slug' && typename !== 'Asset';\n  const slugNoUrl = typename === 'Slug' && !item.slug;\n  const assetNoUrl = typename === 'Asset' && !item.url;\n\n  if (!typename || notAcceptedTypes || slugNoUrl || assetNoUrl) {\n    logError({\n      component: 'AssetEntryLink',\n      message: 'Invalid data for hyperlink',\n      context: {\n        sysId: item.sys.id,\n      },\n    });\n\n    return null;\n  }\n\n  let url = '';\n\n  if (item.__typename === 'Slug') {\n    url = `https://${Config.domainName}/${item.slug}`;\n  }\n\n  if (item.__typename === 'Asset' && item.url) {\n    url = item.url;\n  }\n\n  return <Hyperlink uri={url}>{children}</Hyperlink>;\n};\n\nAssetEntryHyperlink.displayName = 'AssetEntryHyperlink';\n", "import type { FC, PropsWithChildren, ReactElement } from 'react';\nimport { Suspense, useEffect, useState } from 'react';\n\nexport const SuspenseWrapper: FC<PropsWithChildren<{ fallbackElement?: ReactElement }>> = ({\n  children,\n  fallbackElement = null,\n}) => {\n  const [isServer, setIsServer] = useState(true);\n\n  useEffect(() => {\n    setIsServer(false);\n  }, []);\n\n  if (isServer) {\n    return fallbackElement;\n  }\n\n  return <Suspense fallback={fallbackElement}>{children}</Suspense>;\n};\n", "import { lazyComponent } from '@snapchat/mw-common/client';\nimport type { CodeProps } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport { SuspenseWrapper } from '../SuspenseWrapper';\n\nconst LazyCode = lazyComponent(() =>\n  import('./LazyCode').then(module => ({ default: module.Code }))\n);\n\nexport const Code: FC<CodeProps> = props => (\n  <SuspenseWrapper>\n    <LazyCode {...props} />\n  </SuspenseWrapper>\n);\n\nCode.displayName = 'Code';\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\n\nexport const fragments = {\n  all: gql`\n    fragment CodeAll on Code {\n      ...ContentfulSysId\n      code\n      language\n    }\n    ${contentfulSysIdFragment}\n  `,\n};\n", "import { Definition as DefinitionSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useCallback, useContext, useEffect, useMemo, useRef } from 'react';\n\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logUserEvent } from '../../helpers/logging';\nimport { UserAction } from '../../types/events';\nimport { renderRichTextWithElements } from '../../utils/renderText/renderRichText';\nimport { DefinitionContext } from './DefinitionContext';\nimport type { DefinitionProps } from './types';\n\nexport const Definition: FC<DefinitionProps> = ({\n  displayText,\n  fullText,\n  anchorId,\n  overlayTitle,\n  overlayBody,\n  className,\n}) => {\n  const { open, close, triggerRef } = useContext(DefinitionContext);\n  const elementLocation = useContext(ElementLocation).elementLocation;\n  const ref = useRef<HTMLButtonElement>(null);\n  const isActive = ref === triggerRef;\n\n  const content = useMemo(\n    () => ({\n      title: overlayTitle ?? displayText,\n      body: overlayBody ?? renderRichTextWithElements(fullText),\n    }),\n    [displayText, fullText, overlayTitle, overlayBody]\n  );\n\n  useEffect(() => {\n    if (anchorId && window.location.hash === `#${anchorId}`) {\n      open(content, ref);\n    }\n\n    // We only want to fire this once\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  const handleClick = useCallback(() => {\n    if (isActive) {\n      // Skipping elementText: displayText is typically '*' which gets dynamically\n      // referenced as footnote numbers (1, 2, 3), so it provides no useful info.\n      logUserEvent({\n        eventCategory: 'Definition',\n        eventAction: UserAction.Close,\n        eventLabel: null,\n        context: { elementLocation },\n      });\n\n      close();\n\n      // Remove hash from url\n      const url = new URL(window.location.href);\n      url.hash = '';\n      window.history.replaceState(null, '', url);\n    } else {\n      // Skipping elementText: displayText is typically '*' which gets dynamically\n      // referenced as footnote numbers (1, 2, 3), so it provides no useful info.\n      logUserEvent({\n        eventCategory: 'Definition',\n        eventAction: UserAction.Open,\n        eventLabel: null,\n        context: { elementLocation },\n      });\n\n      open(content, ref);\n\n      // Add hash to url\n      const url = new URL(window.location.href);\n      url.hash = anchorId ? `#${anchorId}` : ''; // If no anchor id, remove hash\n      window.history.replaceState(null, '', url);\n    }\n  }, [isActive, anchorId, content, ref, open, close, elementLocation]);\n\n  // If no display text then do not render anything, as nothing to show\n  if (!displayText) return null;\n\n  // If no full text then just render the display text\n  if (!fullText) return <>{displayText}</>;\n\n  return (\n    <DefinitionSDS\n      ref={ref}\n      anchorId={anchorId}\n      isActive={isActive}\n      onClick={handleClick}\n      className={className}\n    >\n      {displayText}\n    </DefinitionSDS>\n  );\n};\n\nDefinition.displayName = 'Definition';\n", "import type { FC, PropsWithChildren, ReactNode, RefObject } from 'react';\nimport { createContext, useState } from 'react';\n\ninterface DefinitionContent {\n  title: ReactNode;\n  body: ReactNode;\n}\n\ninterface DefinitionContextProps {\n  isOpen: boolean;\n  open: ({ title, body }: DefinitionContent, ref: RefObject<HTMLElement>) => void;\n  close: () => void;\n  content?: DefinitionContent;\n  triggerRef?: RefObject<HTMLElement>;\n}\n\nconst defaultContext: DefinitionContextProps = {\n  isOpen: false,\n  open: () => {},\n  close: () => {},\n};\n\nexport const DefinitionContext = createContext(defaultContext);\n\nexport const DefinitionProvider: FC<PropsWithChildren> = ({ children }) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [content, setContent] = useState<DefinitionContent | undefined>();\n  const [triggerRef, setTriggerRef] = useState<RefObject<HTMLElement> | undefined>();\n\n  const open = ({ title, body }: DefinitionContent, ref: RefObject<HTMLElement>) => {\n    setContent({ title, body });\n    setTriggerRef(ref);\n    setIsOpen(true);\n  };\n\n  const close = () => {\n    setContent(undefined);\n    setTriggerRef(undefined);\n    setIsOpen(false);\n  };\n\n  return (\n    <DefinitionContext.Provider value={{ isOpen, open, close, content, triggerRef }}>\n      {children}\n    </DefinitionContext.Provider>\n  );\n};\n", "import { SideOverlay as SideOverlaySDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC, KeyboardEvent, MouseEvent } from 'react';\nimport { useContext } from 'react';\n\nimport { PageLayoutContext } from '../../context/PageLayoutContext';\nimport { DefinitionContext } from './DefinitionContext';\nimport type { DefinitionOverlayProps } from './types';\n\nexport const DefinitionOverlay: FC<DefinitionOverlayProps> = ({ className }) => {\n  const { hasSideNav } = useContext(PageLayoutContext);\n  const { isOpen, close, content, triggerRef } = useContext(DefinitionContext);\n\n  const handleClose = (e: MouseEvent | KeyboardEvent) => {\n    // Return focus to the trigger element only if using keyboard navigation\n    // Do before before calling 'close()', which removes the trigger element from state\n    if (['Enter', ' '].includes((e as KeyboardEvent)?.key)) {\n      e.preventDefault(); // Prevent browser page-down action on spacebar press\n      triggerRef?.current?.focus();\n    }\n\n    close();\n\n    // Note: using `useHistory` causes a re-render so the element loses focus\n    // so using `window.history` directly instead to remove hash from url\n    const url = new URL(window.location.href);\n    url.hash = '';\n    window.history.replaceState(null, '', url);\n  };\n\n  return (\n    <SideOverlaySDS\n      isOpen={isOpen}\n      title={content?.title}\n      body={content?.body}\n      onClose={handleClose}\n      className={className}\n      hasSideNav={hasSideNav}\n    />\n  );\n};\n\nDefinitionOverlay.displayName = 'DefinitionOverlay';\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\n\nexport const fragments = {\n  all: gql`\n    fragment DownloadableAssetAll on DownloadableAsset {\n      ...ContentfulSysId\n      linkText\n      file {\n        url\n      }\n    }\n    ${contentfulSysIdFragment}\n  `,\n};\n\nexport const query = gql`\n  query DownloadableAssetQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    downloadableAsset(preview: $preview, locale: $locale, id: $id) {\n      ...DownloadableAssetAll\n    }\n  }\n  ${fragments.all}\n`;\n", "import type { FC } from 'react';\n\nimport type { ContentfulIdVariable } from '../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport { isContentfulIdProps } from '../../utils/contentful';\nimport { Hyperlink } from '../Hyperlink';\nimport { query } from './query';\nimport type { DownloadableAssetDataHandlerProps, DownloadableAssetProps } from './types';\n\nexport const DownloadableAsset: FC<DownloadableAssetProps> = props => {\n  const hasData = !!props?.linkText && !!props?.file?.url;\n  const { data } = useContentfulQuery<DownloadableAssetDataHandlerProps, ContentfulIdVariable>(\n    query,\n    {\n      variables: { id: isContentfulIdProps(props) ? props.id : props.sys.id },\n      skip: hasData,\n    }\n  );\n\n  const result = hasData ? props : data?.downloadableAsset;\n  if (!result) return null;\n\n  return <Hyperlink uri={result?.file?.url}>{result?.linkText}</Hyperlink>;\n};\n\nDownloadableAsset.displayName = 'DownloadableAsset';\n", "import type { EmphasizedText as EmphasizedTextType } from '@snapchat/mw-contentful-schema';\nimport { EmphasizedText as EmphasizedTextSDS } from '@snapchat/snap-design-system-marketing';\n\nexport const EmphasizedText: React.FC<EmphasizedTextType> = props => {\n  const { text = '' } = props;\n\n  return <EmphasizedTextSDS text={text} />;\n};\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\n\n// ================================================================================================\n// Emphasized Text Fragment\n// ================================================================================================\n\nexport const emphasizedTextFragment = gql`\n  fragment EmphasizedTextAll on EmphasizedText {\n    ...ContentfulSysId\n    text\n  }\n  ${contentfulSysIdFragment}\n`;\n", "import { css } from '@emotion/css';\n\nexport const footnoteInlineNoDisplayTextCss = css`\n  padding-bottom: 0;\n`;\n\nexport const footnoteInlineSuperscriptCss = css`\n  font-size: 10px;\n  line-height: 18px;\n`;\n\nexport const footnoteInlineSuperscriptOverlayCss = css`\n  font-size: 10px;\n  line-height: 20px;\n  margin-inline-end: 0.125em;\n`;\n\nexport const footnoteOverlayBodyCss = css`\n  display: flex;\n`;\n", "import { Superscript } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport { renderRichTextWithElements } from '../../utils/renderText/renderRichText';\nimport { Definition } from '../Definition';\nimport {\n  footnoteInlineNoDisplayTextCss,\n  footnoteInlineSuperscriptCss,\n  footnoteInlineSuperscriptOverlayCss,\n  footnoteOverlayBodyCss,\n} from './FootnoteInline.styles';\nimport type { FootnoteInlineProps } from './types';\n\nexport const FootnoteInline: FC<FootnoteInlineProps> = ({\n  number,\n  displayText,\n  fullText,\n  ...props\n}) => {\n  const footnoteDisplayText = (\n    <>\n      {displayText}\n      {/* Note: The whitespace before \"index\" is important. It ensures that the browser never considers\n      the footnote index as a part of the footnote content (i.e. \"children\"). This can happen if\n      the footnote content ends with a roman numeral (i.e. 1, 2, 3 etc...) and causes problems\n      in RTL locales */}\n      <span className={footnoteInlineSuperscriptCss}>\n        <Superscript> {number}</Superscript>\n      </span>\n    </>\n  );\n\n  const overlayBody = (\n    <div className={footnoteOverlayBodyCss}>\n      {/* Note: The whitespace after \"index\" is important. It ensures that the browser never considers\n      the footnote index as a part of the footnote content (i.e. \"children\"). This can happen if\n      the footnote content begins with a roman numeral (i.e. 1, 2, 3 etc...) and causes problems\n      in RTL locales */}\n      <span className={footnoteInlineSuperscriptOverlayCss}>\n        <Superscript>{number} </Superscript>\n      </span>\n      {renderRichTextWithElements(fullText)}\n    </div>\n  );\n\n  return (\n    <Definition\n      {...props}\n      displayText={footnoteDisplayText}\n      fullText={fullText}\n      overlayTitle=\"\"\n      overlayBody={overlayBody}\n      className={!displayText ? footnoteInlineNoDisplayTextCss : undefined}\n    />\n  );\n};\n\nFootnoteInline.displayName = 'FootnoteInline';\n", "import type { ImageSources } from '@snapchat/mw-contentful-client';\n\nimport { ScreenSize } from '../styles/screenSizes';\n\n/** Combines mobile and desktop sources so they can be used together in one <picture> element. */\nexport function combineImageSources(sources: {\n  desktop?: ImageSources;\n  mobile?: ImageSources;\n}): ImageSources | undefined {\n  if (!sources.mobile) return sources.desktop;\n\n  if (!sources.desktop) return undefined;\n\n  return {\n    sources: [\n      // List mobile sources first, but set the media query.\n      ...sources.mobile.sources.map(source => ({\n        ...source,\n        media: source.media ?? `(max-width: ${ScreenSize.width_768_desktop_small}px)`,\n      })),\n      ...sources.desktop.sources,\n    ],\n    // TODO: Pass-in isMobile flag to choose between desktop or mobile for the default.\n    // Defaults are reading from desktop.\n    default: sources.desktop.default,\n    defaultSrcSet: sources.desktop.defaultSrcSet,\n    defaultSizes: sources.desktop.defaultSizes,\n  };\n}\n", "import type { MediaDataProps } from '../components/Media';\nimport type { MediaSds } from '../types/Media';\n\n/** Given a MediaDataProps object, return image related MediaSds properties. */\nexport const parseImageMedia = (imageMedia: MediaDataProps): MediaSds => {\n  return {\n    imageSource: imageMedia.url,\n    imageAltText: imageMedia.description,\n    imageSize: {\n      height: imageMedia.height,\n      width: imageMedia.width,\n    },\n    contentType: imageMedia.contentType,\n  };\n};\n\n/** Given a MediaDataProps object, return video related MediaSds properties. */\nexport const parseVideoMedia = (videoMedia: MediaDataProps): MediaSds => {\n  return {\n    videoSource: videoMedia.url,\n    contentType: videoMedia.contentType,\n  };\n};\n\n/**\n * @deprecated Use parseMediaContainer instead. Media should always be wrapped by a Video or Image\n *   content type. There are still exceptions and tech debt that need to be resolved before that is\n *   the case across the board, but going forward, image/video media should always be wrapped by a\n *   Image or Video content type.\n *\n *   TODO Remove this function (https://jira.sc-corp.net/browse/WEBP-11399)\n */\nexport const parseMedia = (media?: MediaDataProps | null): MediaSds => {\n  if (!media || !media.url) {\n    return {};\n  }\n\n  if (media.contentType?.startsWith('video')) {\n    return parseVideoMedia(media);\n  }\n\n  if (media.contentType?.startsWith('image')) {\n    return parseImageMedia(media);\n  }\n\n  return {};\n};\n", "import { type SrcSetSettings, getDprSrcSetSettingsByHeight } from '@snapchat/mw-contentful-client';\n\nimport type { ContentfulSysProps } from '../../types/contentful';\nimport { imageQuality } from './Image';\nimport type { ImageDataProps, ImageQuality } from './types';\n\nexport const isImageDataProps = (props: ContentfulSysProps): props is ImageDataProps => {\n  return props.__typename === 'Image';\n};\n\nexport const getImageSourceSettings = ({\n  desktopHeight,\n  mobileHeight,\n  desktopDefaultHeight = 800,\n  mobileDefaultHeight = 800,\n  enableHighDpi = false,\n  quality: qualityKey = 'Standard',\n}: {\n  desktopHeight: number;\n  mobileHeight: number;\n  desktopDefaultHeight?: number;\n  mobileDefaultHeight?: number;\n  enableHighDpi?: boolean;\n  quality?: ImageQuality;\n}): {\n  desktopSettings: SrcSetSettings;\n  mobileSettings: SrcSetSettings;\n} => {\n  // Use the quality value if provided, otherwise default to standard quality\n  const quality = imageQuality[qualityKey];\n\n  // Settings to use if high DPI has not been enabled\n  const desktopStandardSettings: SrcSetSettings = {\n    image: { height: desktopDefaultHeight, quality },\n  };\n  const mobileStandardSettings: SrcSetSettings = {\n    image: { height: mobileDefaultHeight, quality },\n  };\n\n  // Generate high DPI settings for desktop, if enabled\n  const desktopSettings = enableHighDpi\n    ? getDprSrcSetSettingsByHeight(desktopDefaultHeight, desktopHeight, quality)\n    : desktopStandardSettings;\n\n  // Generate high DPI settings for mobile, if enabled\n  const mobileSettings = enableHighDpi\n    ? getDprSrcSetSettingsByHeight(mobileDefaultHeight, mobileHeight, quality)\n    : mobileStandardSettings;\n\n  return {\n    desktopSettings: { ...desktopSettings, quality },\n    mobileSettings: { ...mobileSettings, quality },\n  };\n};\n", "import { useContentfulImages } from '@snapchat/mw-contentful-client';\nimport { MediaWithStickers as MediaSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport { combineImageSources } from '../../utils/combineImageSources';\nimport { parseMedia } from '../../utils/media';\nimport type { ImageProps, ImageQuality } from './types';\nimport { getImageSourceSettings } from './utils';\n\nexport const imageQuality: Record<ImageQuality, number> = {\n  Standard: 40,\n  High: 65,\n  'Very High': 85,\n};\n\n// TODO: Rename to Image and the other to ImageShallow\nexport const Image: FC<ImageProps> = props => {\n  const { enableHighDpi, quality, dataset } = props;\n  const { imageSource, imageAltText } = parseMedia(props.media);\n  const { imageSource: mobileImageSource } = parseMedia(props.mobileMedia);\n  const { getImageSources } = useContentfulImages();\n\n  const { desktopSettings, mobileSettings } = getImageSourceSettings({\n    desktopHeight: props.media?.height ?? 0,\n    mobileHeight: props.mobileMedia?.height ?? 0,\n    enableHighDpi,\n    quality,\n  });\n\n  const imgSrcs = combineImageSources({\n    desktop: getImageSources(imageSource, desktopSettings),\n    mobile: getImageSources(mobileImageSource ?? imageSource, mobileSettings),\n  });\n\n  return (\n    <MediaSDS\n      altText={imageAltText}\n      imgSrcs={imgSrcs}\n      wrap={props.wrap ?? undefined}\n      dataset={dataset}\n    />\n  );\n};\n\nImage.displayName = 'Image';\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { fragments as mediaFragments } from '../Media';\n\nexport const stickerFragment = gql`\n  fragment StickerAll on Sticker {\n    ...ContentfulSysId\n    asset {\n      ...AssetAll\n    }\n    position\n    rotation\n  }\n  ${contentfulSysIdFragment}\n  ${mediaFragments.all}\n`;\n\nexport const stickerQuery = gql`\n  query StickerQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    sticker(preview: $preview, locale: $locale, id: $id) {\n      ...StickerAll\n    }\n  }\n  ${stickerFragment}\n`;\n", "import { gql } from '@apollo/client';\n\nimport { fragments as mediaFragments } from '../Media';\nimport { stickerFragment } from '../Sticker';\n\nexport const fragments = {\n  all: gql`\n    fragment ImageAll on Image {\n      sys {\n        id\n      }\n      media {\n        ...AssetAll\n      }\n      mobileMedia {\n        ...AssetAll\n      }\n      wrap\n      enableHighDpi\n      quality\n      stickersCollection {\n        items {\n          ...StickerAll\n        }\n      }\n    }\n    ${mediaFragments.all}\n    ${stickerFragment}\n  `,\n};\n\nexport const query = gql`\n  query ImageQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    image(preview: $preview, locale: $locale, id: $id) {\n      ...ImageAll\n    }\n  }\n  ${fragments.all}\n`;\n", "import { gql } from '@apollo/client';\nimport type { Image } from '@snapchat/mw-contentful-schema';\n\nimport type { ContentfulTypedSysProps } from '../../types/contentful';\nimport type { RichText } from '../../types/RichText';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { fragments as imageFragments } from '../Image/query';\nimport type { ImageDataProps } from '../Image/types';\nimport type { VideoDataProps } from '../Video/types';\n\nexport const fragments = {\n  all: gql`\n    fragment CustomerQuoteAll on CustomerQuote {\n      ...ContentfulSysId\n      author {\n        json\n      }\n      authorName\n      body {\n        json\n      }\n      media {\n        __typename\n        ... on Video {\n          ...VideoAll\n        }\n        ... on Image {\n          ...ImageAll\n        }\n      }\n      logo {\n        ...ImageAll\n      }\n      isLongQuote\n    }\n    ${contentfulSysIdFragment}\n    ${imageFragments.all}\n  `,\n};\n\nexport interface CustomerQuoteProps extends ContentfulTypedSysProps<'CustomerQuote'> {\n  author: RichText;\n  authorName: string; // DEPRECATED: use author instead\n  body: RichText;\n  logo?: Image;\n  isLongQuote?: boolean;\n  media?: VideoDataProps | ImageDataProps;\n}\n\nexport const query = gql`\n  query CustomerQuotesQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    customerQuote(preview: $preview, locale: $locale, id: $id) {\n      ...CustomerQuoteAll\n    }\n  }\n  ${fragments.all}\n`;\n\nexport interface CustomerQuoteDataProps extends ContentfulTypedSysProps<'CustomerQuote'> {\n  customerQuote: CustomerQuoteProps;\n}\n", "import { useContentfulImages } from '@snapchat/mw-contentful-client';\nimport { QuoteV2 } from '@snapchat/snap-design-system-marketing';\nimport { isNullish } from 'radashi';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport type { ContentfulIdVariable } from '../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport { isContentfulShallow } from '../../utils/contentful';\nimport { renderRichTextWithElementsNoHeadings } from '../../utils/renderText/renderRichText';\nimport type { CustomerQuoteDataProps, CustomerQuoteProps } from './query';\nimport { query } from './query';\n\nexport const Quote: FC<CustomerQuoteProps> = props => {\n  const needsLoading = isContentfulShallow(props);\n  const { getImageSources } = useContentfulImages();\n  const { isRTL } = useContext(AppContext);\n\n  const { data } = useContentfulQuery<CustomerQuoteDataProps, ContentfulIdVariable>(query, {\n    variables: { id: props.sys.id },\n    skip: !needsLoading,\n  });\n\n  if (needsLoading && !data) return null;\n\n  const { author, authorName, body, logo, isLongQuote, media } = data?.customerQuote ?? props;\n\n  // Get logo image source\n  const logoImageSrc = logo?.media?.url ? getImageSources(logo.media.url) : undefined;\n\n  // Get media sources\n  const imgSrcs = media?.__typename === 'Image' ? getImageSources(media.media.url) : undefined;\n  const videoSrc = media?.__typename === 'Video' ? media.media.url : undefined;\n  const mobileVideoSrc = media?.__typename === 'Video' ? media.mobileMedia?.url : undefined;\n\n  // Still fetching authorName from the older authorName field for backwards compatibility / fallback\n  const authorText = isNullish(author) ? authorName : renderRichTextWithElementsNoHeadings(author);\n\n  return (\n    <QuoteV2\n      author={authorText}\n      logoImageSrc={logoImageSrc}\n      isRtl={isRTL}\n      isLongQuote={isLongQuote ?? false}\n      imgSrcs={imgSrcs}\n      videoSrc={videoSrc}\n      mobileVideoSrc={mobileVideoSrc}\n    >\n      {renderRichTextWithElementsNoHeadings(body)}\n    </QuoteV2>\n  );\n};\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\n\nexport const snapchatEmbedFragment = gql`\n  fragment SnapchatEmbedAll on SnapchatEmbed {\n    ...ContentfulSysId\n    url\n  }\n  ${contentfulSysIdFragment}\n`;\n\nexport const query = gql`\n  query SnapchatEmbedQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    snapchatEmbed(preview: $preview, locale: $locale, id: $id) {\n      ...SnapchatEmbedAll\n    }\n  }\n  ${snapchatEmbedFragment}\n`;\n", "import { SnapchatEmbed as SnapchatEmbedSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport type { ContentfulIdVariable } from '../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport type { ContentfulSysProps } from '../../types/contentful';\nimport { isContentfulSysProps } from '../../utils/contentful';\nimport { query } from './SnapchatEmbed.query';\n\nexport interface SnapchatEmbedDataProps extends ContentfulSysProps {\n  url: string;\n}\n\nexport const SnapchatEmbedShallow: FC<ContentfulSysProps> = props => {\n  const id = isContentfulSysProps(props) ? props.sys.id : undefined;\n  const { data } = useContentfulQuery<\n    { snapchatEmbed: SnapchatEmbedDataProps },\n    ContentfulIdVariable\n  >(query, {\n    skip: !id,\n    variables: { id },\n  });\n\n  if (!data) return null;\n\n  return <SnapchatEmbedSDS {...data.snapchatEmbed} />;\n};\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { fragments as mediaFragments } from '../Media';\nimport { stickerFragment } from '../Sticker';\n\nexport const fragments = {\n  all: gql`\n    fragment VideoAll on Video {\n      ...ContentfulSysId\n      media {\n        ...AssetAll\n      }\n      streamUrl\n      mobileMedia {\n        ...AssetAll\n      }\n      thumbnailMedia {\n        ...AssetAll\n      }\n      captions {\n        ...AssetAll\n      }\n      autoPlay\n      wrap\n      externalId\n      stickersCollection {\n        items {\n          ...StickerAll\n        }\n      }\n    }\n    ${mediaFragments.all}\n    ${stickerFragment}\n    ${contentfulSysIdFragment}\n  `,\n};\n\nexport const query = gql`\n  query VideoQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    video(preview: $preview, locale: $locale, id: $id) {\n      ...VideoAll\n    }\n  }\n  ${fragments.all}\n`;\n", "import type { GetBestImgSrc } from '@snapchat/mw-contentful-client';\nimport { useContentfulImages } from '@snapchat/mw-contentful-client';\nimport type { MediaProps as MediaSDSProps } from '@snapchat/snap-design-system-marketing';\nimport { MediaWithStickers as MediaSDS } from '@snapchat/snap-design-system-marketing';\nimport { isNullish } from 'radashi';\nimport type React from 'react';\nimport type { FC } from 'react';\nimport { useContext, useState } from 'react';\n\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logUserEvent } from '../../helpers/logging';\nimport type { ContentfulIdVariable } from '../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport { useParseMediaContainer } from '../../hooks/useParseMediaContainer';\nimport { UserAction } from '../../types/events';\nimport { isContentfulSysProps } from '../../utils/contentful';\nimport { getFileInfo } from '../../utils/getFileInfo';\nimport { parseMedia } from '../../utils/media';\nimport { query } from './query';\nimport type { VideoDataHandlerProps, VideoDataProps, VideoProps } from './types';\nimport { getVideoWatchLogger } from './utils';\n\n/**\n * @deprecated Use useParseMediaContainer instead\n *\n *   TODO Remove this function (https://jira.sc-corp.net/browse/WEBP-11399)\n */\nexport const getMediaProps = (\n  video: VideoDataProps,\n  getBestImgSrc: GetBestImgSrc\n): MediaSDSProps => {\n  const { media, mobileMedia, thumbnailMedia, autoPlay = true, wrap, captions } = video;\n  const { videoSource } = parseMedia(media);\n  const { videoSource: mobileVideoSource } = parseMedia(mobileMedia);\n  const posterSource = getBestImgSrc(video.thumbnailMedia?.url, { width: 728 });\n  return {\n    videoSource,\n    mobileVideoSource,\n    posterSource,\n    showVideoControls: isNullish(autoPlay) ? false : !autoPlay,\n    wrap: isNullish(wrap) ? undefined : wrap,\n    captionsSource: captions?.url,\n    // if user sets alt text for the thumbnail, use it.  Otherwise use the video description.\n    altText: thumbnailMedia?.description ?? media?.description,\n  };\n};\n\nexport const Video: FC<VideoProps> = props => {\n  const id = isContentfulSysProps(props) ? props.sys.id : undefined;\n  const { data } = useContentfulQuery<VideoDataHandlerProps, ContentfulIdVariable>(query, {\n    skip: !id,\n    variables: { id },\n  });\n  const [videoPlayed, setVideoPlayed] = useState(false);\n  const { getBestBgImgSrc } = useContentfulImages();\n  const elementLocation = useContext(ElementLocation).elementLocation;\n\n  let prevWatchEventTime = -1;\n\n  const {\n    media: { videoSource },\n    thumbnailSource,\n  } = useParseMediaContainer(data?.video);\n\n  if (!data) return null;\n  const mediaProps = getMediaProps(data.video, getBestBgImgSrc);\n\n  const onPlay: React.ReactEventHandler<HTMLVideoElement> = _e => {\n    if (videoSource && !videoPlayed) {\n      if (data.video.autoPlay) return; // Skip for auto play videos\n      const { fileName } = getFileInfo(videoSource);\n\n      logUserEvent({\n        eventAction: UserAction.Play,\n        eventCategory: 'Video',\n        eventLabel: fileName,\n        context: { elementLocation },\n      });\n      setVideoPlayed(true);\n    }\n  };\n\n  const onPause: React.ReactEventHandler<HTMLVideoElement> = _e => {\n    if (videoSource && !data.video.autoPlay) {\n      const { fileName } = getFileInfo(videoSource);\n\n      logUserEvent({\n        eventAction: UserAction.Pause,\n        eventCategory: 'Video',\n        eventLabel: fileName,\n        context: { elementLocation },\n      });\n    }\n  };\n\n  const onTimeUpdate = getVideoWatchLogger({\n    autoPlay: data.video.autoPlay,\n    // Note: should never resolve to 'unknown', implemented to resolve type error\n    eventLabel: data.video.externalId ?? id ?? 'unknown',\n    getPreviousWatchTime: () => {\n      return prevWatchEventTime;\n    },\n    setPreviousWatchTime: value => {\n      prevWatchEventTime = value;\n    },\n    elementLocation,\n  });\n\n  return (\n    <MediaSDS\n      mediaClassName={props.mediaClassName}\n      onPlay={onPlay}\n      onPause={onPause}\n      onTimeUpdate={onTimeUpdate}\n      dataset={props.dataset}\n      {...mediaProps}\n      videoSource={videoSource}\n      posterSource={thumbnailSource}\n    />\n  );\n};\n\nVideo.displayName = 'Video';\n", "import { getTokensFromAssetUrl, getTokensFromVodUrl } from '@snapchat/mw-common';\nimport { type GetBestImgSrc, useContentfulImages } from '@snapchat/mw-contentful-client';\nimport { useContext } from 'react';\n\nimport { AppContext } from '../AppContext';\nimport { Feature, useFeatureFlags } from '../components/FeatureFlags';\nimport type { ImageDataProps } from '../components/Image';\nimport type { VideoDataProps } from '../components/Video';\nimport { Config } from '../config';\nimport type { MediaSds } from '../types/Media';\nimport { parseImageMedia, parseVideoMedia } from '../utils/media';\n\ninterface MediaContainerProperties {\n  media: MediaSds;\n  mobileMedia: MediaSds;\n  thumbnailSource?: string;\n}\n\nconst parseImage = (image: ImageDataProps): MediaContainerProperties => {\n  return {\n    media: parseImageMedia(image.media),\n    mobileMedia: image.mobileMedia ? parseImageMedia(image.mobileMedia) : {},\n  };\n};\n\nconst parseVideo = (\n  videoContainer: VideoDataProps,\n  getBestBgImgSrc: GetBestImgSrc,\n  allowHls = false\n): MediaContainerProperties => {\n  const videoMedia = videoContainer.media;\n  const mobileVideoMedia = videoContainer.mobileMedia;\n  const thumbnailSource = getBestBgImgSrc(videoContainer.thumbnailMedia?.url);\n\n  const defaultContainerProps = {\n    media: parseVideoMedia(videoMedia),\n    mobileMedia: mobileVideoMedia ? parseVideoMedia(mobileVideoMedia) : {},\n    thumbnailSource,\n  };\n\n  // If HLS playback is explicitly disabled (i.e. feature flag is off), we fallback to raw asset\n  if (!allowHls) {\n    return defaultContainerProps;\n  }\n\n  // If mobileMedia is provided, hls.js won't be able to switch between the two sources, so we fallback to raw asset\n  if (videoContainer.mobileMedia) {\n    return defaultContainerProps;\n  }\n\n  // We need to check if streaming is possible for this media. The streamURL is formed in a way that we can use it\n  // to determine if the available VOD matches up with the current asset. It includes a concatenation of space, assetId,\n  // file name, and file size (we refer to this concatenation as a \"file key\"). If all these data points match up with the\n  // current asset, that means the streamUrl is an accurate and up to date transcoding of the asset. Otherwise we have to\n  // fallback to the raw asset.\n\n  const streamUrl = (videoContainer as VideoDataProps).streamUrl;\n\n  // If streamUrl is not present, fallback to raw asset\n  if (!streamUrl) {\n    return defaultContainerProps;\n  }\n\n  const { assetHash: vodAssetHash } = getTokensFromVodUrl(streamUrl);\n  const { assetHash: contentfulAssetHash } = getTokensFromAssetUrl(videoMedia.url);\n\n  // if the asset hashes match, we can use the streamUrl\n  if (vodAssetHash === contentfulAssetHash) {\n    const media = {\n      ...parseVideoMedia(videoMedia),\n      // Override video source with stream URL\n      videoSource: streamUrl,\n    };\n\n    return {\n      ...defaultContainerProps,\n      media,\n    };\n  }\n\n  // Otherwise, fallback to raw asset\n  return defaultContainerProps;\n};\n\n/**\n * Takes a VideoDataProps or ImageDataProps and returns an object containing all available metadata\n * needed to render both the primary and mobile version the media. in the most optimal way.\n */\nexport const useParseMediaContainer = (\n  mediaContainer?: VideoDataProps | ImageDataProps\n): MediaContainerProperties => {\n  const features = useFeatureFlags();\n  const appContext = useContext(AppContext);\n  const { getBestBgImgSrc } = useContentfulImages();\n\n  const isVideo =\n    mediaContainer?.__typename === 'Video' && mediaContainer.media.contentType?.startsWith('video');\n\n  const isImage =\n    mediaContainer?.__typename === 'Image' && mediaContainer.media.contentType?.startsWith('image');\n\n  const isHlsVideo = isVideo && mediaContainer?.streamUrl?.endsWith('.m3u8');\n\n  const hlsFeatureEnabled = features[Feature.ENABLE_HLS_PLAYBACK] === 'true';\n\n  // In order to load hls.js as early as possible, in SSR we can set a flag when we detect an HLS video. This flag will\n  // used to ensure that an hls.js script is added to the <head /> of the document before the SSR returns (see index.ejs)\n  // enabling the client to load hls.js ASAP.\n  if (!Config.isClient && isHlsVideo && hlsFeatureEnabled) {\n    appContext.onHlsVideo();\n  }\n\n  if (!mediaContainer) {\n    return {\n      media: {},\n      mobileMedia: {},\n    };\n  }\n\n  if (isVideo) {\n    const allowHls = hlsFeatureEnabled && isHlsVideo;\n    return parseVideo(mediaContainer, getBestBgImgSrc, allowHls);\n  }\n\n  if (isImage) {\n    return parseImage(mediaContainer);\n  }\n\n  return {\n    media: {},\n    mobileMedia: {},\n  };\n};\n", "import { getImageUrl } from '@snapchat/mw-contentful-client';\nimport { useIsMobile } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport { CallToAction } from '../components/CallToAction/CallToAction';\nimport type { CallToActionDataProps } from '../components/CallToAction/types';\nimport { Code } from '../components/Code';\nimport { Definition } from '../components/Definition';\nimport { DownloadableAsset } from '../components/DownloadableAsset';\nimport { EmphasizedText } from '../components/EmphasizedText';\nimport { FootnoteInline } from '../components/FootnoteInline/FootnoteInline';\nimport { Image } from '../components/Image';\nimport type { MediaProps } from '../components/Media';\nimport { Media } from '../components/Media';\nimport { Quote } from '../components/Quote';\nimport { SnapchatEmbedShallow } from '../components/SnapchatEmbed';\nimport { Video } from '../components/Video';\n\nexport const richTextCtaClassName = 'mwp-cta';\n\n/**\n * @deprecated - We no longer allow users to embed media assets directly. However we need to keep\n *   this in place until we have migrated all existing cases to use Image or Video entries instead.\n */\nconst EmbeddedMedia: FC<MediaProps> = props => {\n  const isMobile = useIsMobile();\n  const heightPx = isMobile ? 400 : 600;\n  if (!props.url) return null;\n  return (\n    <Media\n      {...props}\n      url={\n        getImageUrl({\n          imageUrl: props.url,\n          settings: {\n            height: heightPx,\n            // TODO: Do the other optimizations here.\n          },\n        })!\n      }\n      isEmbedded\n    />\n  );\n};\n\n// NOTE: There are some props that make this return an invalid ReactNode, so only registering\n// the properties from CallToActionDataProps makes it work.\n//\n// For reference, this is the error that happens on CitizenSnap \"/diversity\" page:\n//     react-jsx-runtime.development.js:124 Warning: React.jsx: type is invalid\n//     -- expected a string (for built-in components) or a class/function (for composite components)\n//     but got: undefined. You likely forgot to export your component from the file it's defined in,\n//      or you might have mixed up default and named imports.\n//\n// This only seems to happen when there's a reference to a CallToAction from a rich text body.\nconst CallToActionWrapper: FC<CallToActionDataProps> = props => {\n  // adding className here so we can target this component via css\n  return <CallToAction {...props} className={richTextCtaClassName} />;\n};\n\n/**\n * Note: All of these components CANNOT reference back to renderText or this file in order to avoid\n * circular dependencies.\n *\n * They should use 'renderRichText' instead which does not allow embedded assets/entries.\n */\nexport const contentfulComponentMap = {\n  FootNotes: FootnoteInline,\n  CustomerQuote: Quote,\n  Asset: EmbeddedMedia,\n  CallToAction: CallToActionWrapper,\n  SnapchatEmbed: SnapchatEmbedShallow,\n  Image,\n  Video,\n  Code,\n  Definition,\n  DownloadableAsset,\n  EmphasizedText,\n};\n\nexport type ContentfulComponentMap = typeof contentfulComponentMap;\n", "import { css } from '@emotion/css';\n\nexport const embeddedVideoCss = css`\n  width: 100%;\n`;\n", "import { css } from '@emotion/css';\nimport type { FC, PropsWithChildren } from 'react';\nimport { Children } from 'react';\n\nconst maxWidthCss = css`\n  max-width: 100%;\n`;\n\n/**\n * Wrapper for the rich text rendering.\n *\n * This is required so that we have a block component that has a static position so that the\n * vertical margins can collapse in its children.\n *\n * TODO: Revisit if we want this behavior. It's possible we can replace this implementation with a\n * <Fragment> instead of a <div> and in flex contexts margins won't collapse.\n */\nexport const RichTextDocument: FC<PropsWithChildren> = ({ children }) => (\n  <div data-testid=\"mwp-rich-text\" className={maxWidthCss}>\n    {Children.toArray(children)}\n  </div>\n);\n\nconst noMarginCss = css`\n  margin: 0;\n`;\n\nexport const RichTextNoPaddingParagraph: FC<PropsWithChildren> = ({ children }) => {\n  return <p className={noMarginCss}>{Children.toArray(children)}</p>;\n};\n", "import baseFlatten from './_baseFlatten.js';\nimport map from './map.js';\n\n/**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n *   return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\nfunction flatMap(collection, iteratee) {\n  return baseFlatten(map(collection, iteratee), 1);\n}\n\nexport default flatMap;\n", "/* eslint-disable react/jsx-key */\n// biome-ignore lint/suspicious/noShadowRestrictedNames: TODO: See if this is necessary.\nimport flatMap from 'lodash-es/flatMap';\nimport unescape from 'lodash-es/unescape';\nimport type { ReactElement, ReactNode } from 'react';\n\nexport const convertNewLineToBr = (text: string): (string | ReactElement)[] => {\n  return flatMap(text.split('\\n'), (text, i) =>\n    i > 0\n      ? // biome-ignore lint/correctness/useJsxKeyInIterable: key makes it render more newlines than necessary.\n        [<br />, text]\n      : [text]\n  );\n};\n\n// TODO: Remove this hack.\nexport const retainLtrText = (text: string | ReactElement): ReactNode => {\n  if (typeof text === 'string' && text.includes('Snap Inc.')) {\n    return text.split('Snap Inc.').flatMap((textSegment: string, index: number) => {\n      if (index === 0) return [unescape(textSegment)];\n      return [\n        <span dir=\"ltr\" key={textSegment}>\n          Snap Inc.\n        </span>,\n        unescape(textSegment),\n      ];\n    });\n  }\n\n  const textToReturn = typeof text === 'string' ? unescape(text) : text;\n  return [textToReturn];\n};\n\n/**\n * Inserts line breaks where new lines exist and other shananagans.\n *\n * TODO: Remove the ltr hack for snap inc. This code is horrible and should probably be fixed w/\n * non-break word markers instead (i.e. regex replace).\n */\nexport const renderMultiLineText: (text?: string) => ReactNode = (text = '') => {\n  const textWithLineBreaks = convertNewLineToBr(text);\n  const preservedLtrText = flatMap(textWithLineBreaks, retainLtrText);\n  return preservedLtrText;\n};\n", "import { gql } from '@apollo/client';\nimport type { ButtonSize, ButtonType, IconName } from '@snapchat/snap-design-system-marketing';\n\nimport type { ContentfulTypedSysProps } from '../../types/contentful';\nimport type { RichText } from '../../types/RichText';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { fragments as imageFragments } from '../Image/query';\nimport type { MediaDataProps } from '../Media';\nimport { fragments as mediaFragments } from '../Media';\n\n// =================================================================================================\n// Button Fragment\n// =================================================================================================\n\nexport const buttonFragment = gql`\n  fragment ButtonAll on Button {\n    ...ContentfulSysId\n    title {\n      json\n    }\n    url\n    targetAsset {\n      ...AssetAll\n    }\n    size\n    buttonType\n    image {\n      ... on Image {\n        ...ImageAll\n      }\n    }\n    iconName\n  }\n  ${mediaFragments.all}\n  ${imageFragments.all}\n  ${contentfulSysIdFragment}\n`;\n\nexport interface ButtonData extends ContentfulTypedSysProps<'Button'> {\n  url?: string;\n  targetAsset?: MediaDataProps;\n  buttonType?: ButtonType;\n  size: ButtonSize;\n  title: RichText;\n  // TODO: Update type to match ImageData.\n  image?: {\n    media: MediaDataProps & {\n      width: number;\n      height: number;\n    };\n  };\n  iconName?: IconName;\n}\n\n// NOTE: No query to load a button separately because when we had it we ended up in a button-loading\n// hell with dozen of separate queries to load individual buttons.\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\n\nexport const fragments = {\n  all: gql`\n    fragment AnalyticsAll on Analytics {\n      ...ContentfulSysId\n      label\n    }\n    ${contentfulSysIdFragment}\n  `,\n};\n\nexport const query = gql`\n  query AnalyticsQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    analytics(preview: $preview, locale: $locale, id: $id) {\n      ...AnalyticsAll\n    }\n  }\n  ${fragments.all}\n`;\n", "import { gql } from '@apollo/client';\n\nimport type { ContentfulSysProps, ContentfulTypedSysProps } from '../../types/contentful';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { fragments as analyticsFragments } from '../Analytics/query';\nimport type { AnalyticsDataProps } from '../Analytics/types';\nimport type { ButtonData } from '../Button';\nimport { buttonFragment } from '../Button';\n\n// ================================================================================================\n// CTA Fragment\n// ================================================================================================\n\nexport const ctaFragment = gql`\n  fragment CallToActionAll on CallToAction {\n    ...ContentfulSysId\n    analytics {\n      ...AnalyticsAll\n    }\n    presentation {\n      ... on Entry {\n        ...ContentfulSysId\n      }\n      ... on Button {\n        ...ButtonAll\n      }\n    }\n    url\n  }\n  ${buttonFragment}\n  ${contentfulSysIdFragment}\n  ${analyticsFragments.all}\n`;\n\nexport interface CtaData extends ContentfulTypedSysProps<'CallToAction'> {\n  analytics: AnalyticsDataProps;\n  presentation: ContentfulSysProps | ButtonData;\n  url?: string;\n}\n\nexport const query = gql`\n  query CallToActionQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    callToAction(preview: $preview, locale: $locale, id: $id) {\n      ...CallToActionAll\n    }\n  }\n  ${ctaFragment}\n`;\n", "import { cx } from '@emotion/css';\nimport { Brand } from '@snapchat/mw-common';\nimport { useContentfulImages } from '@snapchat/mw-contentful-client';\nimport type { Content as ContentType } from '@snapchat/mw-contentful-schema';\nimport type { Buttons, ImageSources } from '@snapchat/snap-design-system-marketing';\nimport {\n  Content as ContentSDS,\n  MediaWithStickers as MediaWithStickersSDS,\n  SnapchatEmbed as SnapchatEmbedSDS,\n  Stats as StatsSDS,\n} from '@snapchat/snap-design-system-marketing';\nimport { isNullish } from 'radashi';\nimport type { FC, ReactEventHandler, ReactNode } from 'react';\nimport { useContext, useState } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logUserEvent } from '../../helpers/logging';\nimport { useBrand } from '../../hooks/useBrand';\nimport { useMotifScheme } from '../../hooks/useMotifScheme';\nimport { useParseMediaContainer } from '../../hooks/useParseMediaContainer';\nimport { UserAction } from '../../types/events';\nimport { combineImageSources } from '../../utils/combineImageSources';\nimport { getContentfulInspectorProps } from '../../utils/contentful/getContentfulInspectorProps';\nimport { getFileInfo } from '../../utils/getFileInfo';\nimport {\n  getRichTextWithEmbeddingsRenderer,\n  renderRichTextMultiLineWithMarkings,\n} from '../../utils/renderText/renderRichText';\nimport { useEntranceAnimation } from '../Animations/useEntranceAnimation';\nimport { CallToAction } from '../CallToAction';\nimport { getImageSourceSettings } from '../Image';\nimport type { ImageDataProps } from '../Image/types';\nimport { LazyImageButton } from '../ImageButton/LazyImageButton';\nimport type { SnapchatEmbedDataProps } from '../SnapchatEmbed';\nimport type { StatsDataProps } from '../Stats/types';\nimport type { VideoDataProps } from '../Video/types';\nimport { getVideoWatchLogger } from '../Video/utils';\nimport { bodyEmbeddedMediaCss, mediaOnlyCss, mediaStylesCss, videoCss } from './Content.styles';\nimport type { ContentDataProps } from './types';\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO: Refactor to reduce complexity.\nexport const Content: FC<ContentDataProps> = props => {\n  const [videoPlayed, setVideoPlayed] = useState(false);\n  const { getImageSources } = useContentfulImages();\n  const elementLocation = useContext(ElementLocation).elementLocation;\n  const { isRTL } = useContext(AppContext);\n\n  const brand = useBrand();\n  const isSnapBrand = brand === Brand.SNAP;\n\n  const {\n    sys,\n    mediaWrap,\n    showVideoControls,\n    layout,\n    mediaDirection,\n    mediaDirectionMobile,\n    displayOn,\n    asset,\n    title,\n    subtitle,\n    titleAlignment,\n    titleAlignmentMobile,\n    showFullResolutionMedia,\n    body,\n    bodyAlignment,\n    bodyAlignmentMobile,\n    callsToActionCollection,\n    theme,\n    brandBackgroundColor,\n    backgroundColor,\n    brandBorderColor,\n    borderColor,\n    anchorId,\n    useHeadingTagsForBody,\n    collapseMobileTable,\n    listIcon,\n    entranceAnimation,\n  } = props;\n\n  const motifScheme = useMotifScheme(brandBackgroundColor);\n\n  const hasText = title || subtitle || body;\n  const isMediaOnly = asset && !hasText;\n\n  const { getBestBgImgSrc } = useContentfulImages();\n\n  const iconUrl = getBestBgImgSrc(listIcon?.media?.url, {\n    width: 72,\n    height: 72,\n    resizeFocus: 'center',\n    fit: 'fill',\n  });\n\n  const renderBody = getRichTextWithEmbeddingsRenderer(useHeadingTagsForBody, collapseMobileTable);\n\n  const {\n    media: { imageSource, imageAltText, imageSize, videoSource },\n    mobileMedia: {\n      imageSource: mobileImageSource,\n      imageSize: mobileImageSize,\n      videoSource: mobileVideoSource,\n    },\n    thumbnailSource,\n  } = useParseMediaContainer(asset as ImageDataProps | VideoDataProps);\n\n  const inspectorDataset = getContentfulInspectorProps<ContentType>({\n    entryId: sys.id,\n    fieldIds: ['body', 'title', 'subtitle', 'asset'],\n  });\n\n  const { animation, styles } = useEntranceAnimation(entranceAnimation);\n\n  const callsToAction: Buttons = [];\n\n  if (callsToActionCollection?.items) {\n    for (const callToAction of callsToActionCollection.items) {\n      if (callToAction.__typename === 'ImageButton') {\n        callsToAction.push(<LazyImageButton key={callToAction.sys.id} {...callToAction} />);\n      } else if (callToAction.__typename === 'CallToAction') {\n        callsToAction.push(<CallToAction key={callToAction.sys.id} {...callToAction} />);\n      }\n    }\n  }\n\n  const defaultHeight =\n    showFullResolutionMedia && imageSize?.height ? imageSize.height : isMediaOnly ? 600 : 400;\n\n  const { desktopSettings, mobileSettings } = getImageSourceSettings({\n    desktopHeight: imageSize?.height ?? 0,\n    mobileHeight: mobileImageSize?.height ?? 0,\n    desktopDefaultHeight: defaultHeight,\n    mobileDefaultHeight: defaultHeight,\n    enableHighDpi: (asset as ImageDataProps)?.enableHighDpi,\n    quality: (asset as ImageDataProps)?.quality,\n  });\n\n  const imgSrcs = combineImageSources({\n    desktop: getImageSources(imageSource, desktopSettings),\n    mobile: getImageSources(mobileImageSource, mobileSettings),\n  });\n\n  let prevWatchEventTime = -1;\n\n  const onPlay: ReactEventHandler<HTMLVideoElement> = () => {\n    if (videoSource && !videoPlayed) {\n      if ((asset as VideoDataProps).autoPlay) return; // Skip for auto play videos\n      const { fileName } = getFileInfo(videoSource);\n\n      logUserEvent({\n        eventAction: UserAction.Play,\n        eventCategory: 'Content',\n        eventLabel: fileName,\n        context: { elementLocation },\n      });\n      setVideoPlayed(true);\n    }\n  };\n\n  const onPause: ReactEventHandler<HTMLVideoElement> = () => {\n    if (videoSource && !(asset as VideoDataProps).autoPlay) {\n      const { fileName } = getFileInfo(videoSource);\n\n      logUserEvent({\n        eventAction: UserAction.Pause,\n        eventCategory: 'Content',\n        eventLabel: fileName,\n        context: { elementLocation },\n      });\n    }\n  };\n\n  let assetChild: ReactNode = undefined;\n\n  if (asset) {\n    const typeName = asset.__typename;\n\n    const onTimeUpdate = getVideoWatchLogger({\n      autoPlay: (asset as VideoDataProps).autoPlay,\n      eventLabel: (asset as VideoDataProps).externalId ?? asset?.sys.id,\n      getPreviousWatchTime: () => {\n        return prevWatchEventTime;\n      },\n      setPreviousWatchTime: value => {\n        prevWatchEventTime = value;\n      },\n      elementLocation,\n    });\n\n    if (typeName === 'Video' || typeName === 'Image') {\n      const assetMediaWrap = (asset as ImageDataProps | VideoDataProps).wrap;\n      const { thumbnailMedia, captions, autoPlay, media } = asset as VideoDataProps;\n      const videoAltText = thumbnailMedia?.description ?? media.description;\n\n      const showVideoControlsFinal = showVideoControls ?? (isNullish(autoPlay) ? false : !autoPlay);\n\n      // we only want strict height for images that are taller than they are wide, as the opposite\n      // needs to dynamically set its height based on its dynamic width.\n      const isStrictHeight =\n        typeName === 'Image' && (imageSize?.height ?? 0) > (imageSize?.width ?? 0);\n      const mediaClassName = cx({\n        [mediaOnlyCss]: !showFullResolutionMedia && isMediaOnly,\n        [mediaStylesCss]: !showFullResolutionMedia && !isMediaOnly,\n        'strict-height': !showFullResolutionMedia && isStrictHeight,\n        [videoCss]: typeName === 'Video',\n      });\n\n      const stickers = (asset as ImageDataProps | VideoDataProps)?.stickersCollection?.items?.map(\n        sticker => ({\n          imgSrcs: getImageSources(sticker?.asset?.url) as ImageSources,\n          position: sticker?.position,\n          rotation: sticker?.rotation,\n        })\n      );\n\n      assetChild = (\n        <MediaWithStickersSDS\n          mediaClassName={mediaClassName}\n          altText={imageAltText ?? videoAltText}\n          imgSrcs={imgSrcs}\n          posterSource={thumbnailSource}\n          // TODO: Deprecate `mediaWrap` in Content and remove its references.\n          wrap={assetMediaWrap ?? mediaWrap}\n          dataset={inspectorDataset.assetDataset}\n          imageSource={imageSource}\n          showVideoControls={showVideoControlsFinal}\n          videoSource={videoSource}\n          mobileVideoSource={mobileVideoSource}\n          onPlay={onPlay}\n          onPause={onPause}\n          onTimeUpdate={onTimeUpdate}\n          captionsSource={captions?.url}\n          stickers={stickers}\n        />\n      );\n    } else if (typeName === 'SnapchatEmbed') {\n      assetChild = (\n        <SnapchatEmbedSDS\n          {...(asset as SnapchatEmbedDataProps)}\n          dataset={inspectorDataset.assetDataset}\n        />\n      );\n    } else if (typeName === 'Stats') {\n      const statsAsset = asset as StatsDataProps;\n\n      assetChild = (\n        <StatsSDS\n          stat={statsAsset.stat}\n          optionalSupplementaryText={statsAsset.optionalSupplementaryText}\n          animation={animation}\n          style={styles}\n        />\n      );\n    }\n  }\n\n  // NOTE: The underlying component can only handle 'undefined' but not 'null', so we coerce the values here.\n  return (\n    <ContentSDS\n      title={renderRichTextMultiLineWithMarkings(title)}\n      subtitle={renderRichTextMultiLineWithMarkings(subtitle)}\n      titleAlignment={titleAlignment ?? undefined}\n      titleAlignmentMobile={titleAlignmentMobile}\n      body={renderBody(body)}\n      layout={layout}\n      mediaDirection={mediaDirection}\n      mediaDirectionMobile={mediaDirectionMobile}\n      bodyAlignment={bodyAlignment ?? undefined}\n      bodyAlignmentMobile={bodyAlignmentMobile}\n      className={bodyEmbeddedMediaCss}\n      callsToAction={callsToAction}\n      displayOn={displayOn ?? undefined}\n      motifScheme={motifScheme}\n      backgroundColor={backgroundColor ?? theme}\n      borderColor={brandBorderColor ?? (isSnapBrand ? undefined : borderColor)}\n      anchorId={anchorId}\n      animation={animation}\n      isRTL={isRTL}\n      asset={assetChild}\n      style={styles}\n      listIconUrl={iconUrl}\n      {...inspectorDataset}\n    />\n  );\n};\n\nContent.displayName = 'Content';\n", "import { keyframes } from '@emotion/css';\nimport type { Animation, CssProperties } from '@snapchat/snap-design-system-marketing';\nimport type { CSSProperties } from 'react';\n\nimport type { EntranceAnimation } from '../../../../contentful-schema/src';\n\n/**\n * Converts a semicolon-separated string of CSS styles into an object with camelCase keys.\n *\n * This function takes a string of CSS styles, processes it by splitting the string into individual\n * style declarations, and then returns an object where each key is the camelCase version of the CSS\n * property name, and the corresponding value is the style value.\n *\n * @example Const styles = \"background-color: red; font-size: 16px;\";\n *\n * Const result = applyStyles(styles);\n *\n * Output: { backgroundColor: \"red\", fontSize: \"16px\" }\n *\n * @param {string} styleString - A semicolon-separated string of CSS styles (e.g.,\n *   \"background-color: red; font-size: 16px;\").\n * @returns {CssProperties} An object with the camelCased CSS properties as keys and their values as\n *   string values.\n */\nconst applyStyles = (styleString: string): CssProperties => {\n  return styleString\n    .split(';')\n    .filter(Boolean)\n    .reduce((acc, style) => {\n      const [property, value] = style.split(':').map(s => s.trim());\n\n      if (property && value) {\n        const camelCaseProperty = property.replace(/-([a-z])/g, (_, letter) =>\n          letter.toUpperCase()\n        );\n\n        acc[camelCaseProperty] = value;\n      }\n\n      return acc;\n    }, {} as CssProperties);\n};\n\nconst animationKeyframes: Record<string, string> = {\n  'Fade in left': keyframes`from {opacity: 0; transform: translateX(-50px);} to {opacity: 1; transform: translateX(0);}`,\n  'Fade in right': keyframes`from {opacity: 0; transform: translateX(50px);} to {opacity: 1; transform: translateX(0);}`,\n  'Fade in top': keyframes`from {opacity: 0; transform: translateY(-50px);} to {opacity: 1; transform: translateY(0);}`,\n  'Fade in bottom': keyframes`from {opacity: 0; transform: translateY(50px);} to {opacity: 1; transform: translateY(0);}`,\n};\n\nexport const useEntranceAnimation = (\n  entranceAnimation: EntranceAnimation | undefined\n): { animation: Animation | undefined; styles: CSSProperties | undefined } => {\n  if (!entranceAnimation) {\n    return { animation: undefined, styles: undefined };\n  }\n\n  let styles: CSSProperties = {};\n  let animationName = '';\n\n  if (entranceAnimation?.advancedKeyframes?.keyframes) {\n    animationName = keyframes(entranceAnimation.advancedKeyframes.keyframes);\n\n    if (entranceAnimation.advancedKeyframes.startingCss) {\n      styles = applyStyles(entranceAnimation.advancedKeyframes.startingCss) as CSSProperties;\n    }\n  } else {\n    styles.opacity = 0;\n\n    animationName = entranceAnimation.animation\n      ? animationKeyframes[entranceAnimation.animation] ?? ''\n      : '';\n  }\n\n  const animation: Animation = {\n    animationName,\n    delay: entranceAnimation?.delay,\n    direction: entranceAnimation?.direction,\n    duration: entranceAnimation?.duration,\n    iterationCount: entranceAnimation?.iterationCount,\n    timingFunction: entranceAnimation?.advancedKeyframes?.timingFunction,\n    transformOrigin: entranceAnimation?.advancedKeyframes?.transformOrigin,\n  };\n\n  return { animation, styles };\n};\n", "import { useContentfulImages } from '@snapchat/mw-contentful-client';\nimport { ImageButton as ImageButtonSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { shouldFlushLogs } from '../../helpers/getLocalPath';\nimport { logger, logUserEvent } from '../../helpers/logging';\nimport type { ContentfulIdVariable } from '../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport { UserAction } from '../../types/events';\nimport type { ContentfulSysId } from '../../utils/contentful/contentfulQuery';\nimport { parseMedia } from '../../utils/media';\nimport type { ImageButtonData } from './imageButtonQuery';\nimport { query } from './imageButtonQuery';\n\nexport const LazyImageButton: FC<ContentfulSysId> = props => {\n  const { data } = useContentfulQuery<ImageButtonData, ContentfulIdVariable>(query, {\n    variables: { id: props.sys.id },\n  });\n  const { getImageSources } = useContentfulImages();\n  const elementLocation = useContext(ElementLocation).elementLocation;\n\n  if (!data?.imageButton) return null;\n\n  const { url, image, ...rest } = data.imageButton;\n\n  const { imageSource, imageAltText } = parseMedia(image);\n  const imgSrcs = getImageSources(imageSource);\n\n  const onClickHandler = (): void => {\n    logUserEvent({\n      eventAction: UserAction.Click,\n      eventCategory: 'ImageButton',\n      eventLabel: null,\n      context: {\n        targetUrl: url,\n        elementLocation,\n        // image button, no element text\n      },\n    });\n\n    if (shouldFlushLogs(url)) {\n      void logger.flush();\n    }\n  };\n\n  return (\n    <ImageButtonSDS\n      {...rest}\n      url={url}\n      onClick={onClickHandler}\n      imgSrcs={imgSrcs}\n      altText={imageAltText}\n    />\n  );\n};\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport type { MediaDataProps } from '../Media';\nimport { fragments as mediaFragments } from '../Media';\n\nexport const imageButtonFragment = gql`\n  fragment ImageButtonAll on ImageButton {\n    ...ContentfulSysId\n    url\n    height\n    width\n    image {\n      ...AssetAll\n    }\n  }\n\n  ${contentfulSysIdFragment}\n  ${mediaFragments.all}\n`;\n\nexport const query = gql`\n  query ImageButtonQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    imageButton(preview: $preview, locale: $locale, id: $id) {\n      ...ImageButtonAll\n    }\n  }\n\n  ${imageButtonFragment}\n`;\n\nexport interface ImageButtonData {\n  imageButton: {\n    url: string;\n    image: MediaDataProps;\n    height: number;\n    width: number;\n  };\n}\n", "import { css } from '@emotion/css';\nimport {\n  ContentElementClass,\n  m,\n  mediaWrapperClassName,\n  mobileMediaQuery,\n} from '@snapchat/snap-design-system-marketing';\n\nexport const mediaStylesCss = css`\n  max-width: 100%;\n  max-height: 400px;\n`;\n\nexport const mediaOnlyCss = css`\n  margin-bottom: inherit;\n  max-height: 600px;\n\n  ${mobileMediaQuery} {\n    max-width: 100%;\n    height: inherit;\n  }\n`;\n\n/**\n * Ensures there is spacing after media embedded in the richtext body (maintains prior behavior from\n * the `EmbeddedMedia` component). Also sets max video height per TDD.\n *\n * TODO: determine whether the `display: block` style is something we can generalize in the SDS-M\n * Picture component or if this will have unexpected repercussions.\n */\nexport const bodyEmbeddedMediaCss = css`\n  .${ContentElementClass.BODY} {\n    .${mediaWrapperClassName} {\n      margin-block-end: ${m('--spacing-m')};\n    }\n\n    video {\n      max-height: 800px;\n    }\n  }\n\n  /* Unset margin for media wrapper inside quote component */\n  /* For quote component, the asset should cover the entire container */\n  .sdsm-quote-container .${mediaWrapperClassName} {\n    margin-block-end: unset;\n  }\n`;\n\nexport const videoCss = css`\n  /* Unlike images, videos will always expand to the width of their container. The benefits are two fold...\n\n   1. We don't have to worry about the poster image being a different size than the video.\n   2. We don't have to worry about different video resolutions (but same aspect ratio) rendering as different sizes.\n\n  */\n  width: 100%;\n`;\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\n\n// TODO: delete after merging animation improvements work https://jira.sc-corp.net/browse/WEBP-9618\nexport const fragments = {\n  contentAll: gql`\n    fragment ContentAnimationAll on ContentAnimation {\n      keyframes {\n        ...ContentfulSysId\n        timingFunction\n        transformOrigin\n      }\n      target\n    }\n    ${contentfulSysIdFragment}\n  `,\n};\n\n// TODO: delete after merging animation improvements work https://jira.sc-corp.net/browse/WEBP-9618\nexport const query = gql`\n  query AnimationCollectionQuery($preview: Boolean!, $locale: String!) {\n    animationKeyframesCollection(\n      preview: $preview\n      locale: $locale\n      limit: 20\n      order: sys_publishedAt_ASC\n    ) {\n      items {\n        ...ContentfulSysId\n        timingFunction\n        transformOrigin\n        keyframes\n      }\n    }\n  }\n  ${contentfulSysIdFragment}\n`;\n\nexport const animationKeyframesFragment = gql`\n  fragment AnimationKeyframesAll on AnimationKeyframes {\n    ...ContentfulSysId\n    timingFunction\n    transformOrigin\n    startingCss\n    keyframes\n  }\n  ${contentfulSysIdFragment}\n`;\n\nexport const entranceAnimationFragment = gql`\n  fragment EntranceAnimationAll on EntranceAnimation {\n    ...ContentfulSysId\n    delay\n    direction\n    duration\n    iterationCount\n    animation\n    advancedKeyframes {\n      ...ContentfulSysId\n      ...AnimationKeyframesAll\n    }\n  }\n  ${contentfulSysIdFragment}\n  ${animationKeyframesFragment}\n`;\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\n\n// ================================================================================================\n// Definition Fragment\n// ================================================================================================\n\nexport const definitionFragment = gql`\n  fragment DefinitionAll on Definition {\n    ...ContentfulSysId\n    displayText\n    fullText {\n      json\n    }\n    anchorId\n  }\n  ${contentfulSysIdFragment}\n`;\n\nexport const query = gql`\n  query DefinitionQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    Definition(preview: $preview, locale: $locale, id: $id) {\n      ...DefinitionAll\n    }\n  }\n  ${definitionFragment}\n`;\n", "import { Footnote as FootnoteSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport { renderRichTextWithElements } from '../../utils/renderText/renderRichText';\nimport type { FootnoteProps } from './types';\n\nexport const Footnote: FC<FootnoteProps> = props => {\n  const { number, fullText } = props;\n\n  if (!fullText) return null;\n\n  return <FootnoteSDS index={String(number)}>{renderRichTextWithElements(fullText)}</FootnoteSDS>;\n};\n\nFootnote.displayName = 'Footnote';\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\n\nexport const fragments = {\n  all: gql`\n    fragment FootNotesAll on FootNotes {\n      ...ContentfulSysId\n      number\n      displayText\n      fullText {\n        json\n      }\n      anchorId\n    }\n    ${contentfulSysIdFragment}\n  `,\n};\n\nexport const query = gql`\n  query FootNotesQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    footNotes(preview: $preview, locale: $locale, id: $id) {\n      ...FootNotesAll\n    }\n  }\n  ${fragments.all}\n`;\n", "import { gql } from '@apollo/client';\n\nimport { entranceAnimationFragment } from '../Animations/query';\n\nexport const statsFragment = gql`\n  fragment StatsAll on Stats {\n    __typename\n    sys {\n      id\n    }\n    stat\n    optionalSupplementaryText\n    entranceAnimation {\n      ...EntranceAnimationAll\n    }\n  }\n  ${entranceAnimationFragment}\n`;\n\nexport const query = gql`\n  query StatsQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    stats(preview: $preview, locale: $locale, id: $id) {\n      ...StatsAll\n    }\n  }\n  ${statsFragment}\n`;\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { entranceAnimationFragment } from '../Animations/query';\nimport { ctaFragment } from '../CallToAction/query';\nimport { fragments as codeFragments } from '../Code';\nimport { definitionFragment } from '../Definition/query';\nimport { fragments as footnoteFragments } from '../Footnote';\nimport { fragments as imageFragments } from '../Image';\nimport { assetFragment } from '../Media';\nimport { fragments as quoteFragments } from '../Quote';\nimport { snapchatEmbedFragment } from '../SnapchatEmbed';\nimport { statsFragment } from '../Stats';\nimport { fragments as videoFragments } from '../Video';\n\nexport const contentAssetFragment = gql`\n  fragment ContentAssetAll on ContentAsset {\n    ...ContentfulSysId\n    ... on Video {\n      ...VideoAll\n    }\n    ... on Image {\n      ...ImageAll\n    }\n    ... on SnapchatEmbed {\n      ...SnapchatEmbedAll\n    }\n    ... on Stats {\n      ...StatsAll\n    }\n  }\n  ${contentfulSysIdFragment}\n  ${imageFragments.all}\n  ${videoFragments.all}\n  ${snapchatEmbedFragment}\n  ${statsFragment}\n`;\n\nexport const fragments = {\n  all: gql`\n    fragment ContentAll on Content {\n      ...ContentfulSysId\n      title {\n        json\n      }\n      subtitle {\n        json\n      }\n      # CTA Collection limit has to be 3 or less for GraphQL query complexity issues.\n      callsToActionCollection(limit: 3) {\n        items {\n          ... on CallToAction {\n            ...CallToActionAll\n          }\n          ... on ImageButton {\n            ...ContentfulSysId\n          }\n        }\n      }\n      showVideoControls\n      mediaWrap\n      layout\n      mediaDirection\n      mediaDirectionMobile\n      titleAlignment\n      titleAlignmentMobile\n      bodyAlignment\n      bodyAlignmentMobile\n      listIcon {\n        ...ContentfulSysId\n        media {\n          url\n        }\n      }\n      useHeadingTagsForBody\n      collapseMobileTable\n      showFullResolutionMedia\n      displayOn\n      theme\n      brandBackgroundColor\n      backgroundColor\n      brandBorderColor\n      borderColor\n      anchorId\n      asset {\n        ...ContentAssetAll\n      }\n      entranceAnimation {\n        ...EntranceAnimationAll\n      }\n      body {\n        json\n        # TODO: There's an inline expansion into embedded content. Consider lazy-loading this\n        # to reduce the query complexity for the typical use-case.\n        links {\n          entries {\n            block {\n              ...ContentfulSysId\n              ... on CustomerQuote {\n                ...CustomerQuoteAll\n              }\n              ... on CallToAction {\n                ...CallToActionAll\n              }\n              ... on Code {\n                ...CodeAll\n              }\n              ... on Image {\n                ...ImageAll\n              }\n            }\n            inline {\n              ...ContentfulSysId\n              ... on FootNotes {\n                ...FootNotesAll\n              }\n              ... on CustomerQuote {\n                ...CustomerQuoteAll\n              }\n              ... on CallToAction {\n                ...CallToActionAll\n              }\n              ... on Definition {\n                ...DefinitionAll\n              }\n            }\n            hyperlink {\n              ...ContentfulSysId\n              ... on Slug {\n                slug\n              }\n            }\n          }\n          assets {\n            block {\n              ...AssetAll\n            }\n            hyperlink {\n              ...AssetAll\n            }\n          }\n        }\n      }\n    }\n    ${assetFragment}\n    ${ctaFragment}\n    ${footnoteFragments.all}\n    ${definitionFragment}\n    ${quoteFragments.all}\n    ${videoFragments.all}\n    ${imageFragments.all}\n    ${codeFragments.all}\n    ${contentAssetFragment}\n    ${entranceAnimationFragment}\n  `,\n\n  media: gql`\n    fragment ContentMedia on Content {\n      ...ContentfulSysId\n      title {\n        json\n      }\n      asset {\n        ...ContentAssetAll\n      }\n    }\n    ${contentfulSysIdFragment}\n    ${contentAssetFragment}\n  `,\n};\n\nexport const queries = {\n  all: gql`\n    query ContentQuery($preview: Boolean!, $locale: String!, $id: String!) {\n      content(preview: $preview, locale: $locale, id: $id) {\n        ...ContentAll\n      }\n    }\n    ${fragments.all}\n  `,\n};\n", "import { gql } from '@apollo/client';\nimport type {\n  Alignment,\n  BackgroundColor,\n  MotifScheme,\n} from '@snapchat/snap-design-system-marketing';\n\nimport type { ContentfulSysProps, ContentfulTypedSysProps } from '../../types/contentful';\nimport type { Items } from '../../types/Items';\nimport type { RichText } from '../../types/RichText';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { ctaFragment } from '../CallToAction';\nimport type { CallToActionDataProps } from '../CallToAction/types';\nimport type { CarouselV3DataProps } from '../CarouselV3';\nimport type { ContentDataProps } from '../Content';\nimport { fragments as contentFragments } from '../Content';\nimport { emphasizedTextFragment } from '../EmphasizedText/query';\nimport type { FormDataProps } from '../Form';\nimport type { LazyGalleryProps } from '../Gallery';\nimport type { ImageDataProps } from '../Image';\nimport { fragments as imageFragments } from '../Image';\nimport { fragments as assetsFragments } from '../Media';\nimport type { MosaicProps } from '../Mosaic';\nimport type { TabsDataProps } from '../Tabs';\nimport { fragments as videoFragments } from '../Video';\nimport type { VideoDataProps } from '../Video/types';\nimport type { BarChartDataProps } from '../visualizations/BarChart';\nimport type { GeoMapDataProps } from '../visualizations/GeoMap';\nimport type { LineChartDataProps } from '../visualizations/LineChart';\nimport type { MultiVisualizationDataProps } from '../visualizations/MultiVisualization';\nimport type { TableVisualizationDataProps } from '../visualizations/Table';\n\n/**\n * This is the maximum number of blocks that can be loaded in a single query. We should NOT be\n * making exceptions to this limit just because a customer wants more blocks on the page. Most\n * likely they can refactor their content to fit within this limit.\n */\nexport const blockQueryLimit = 25;\n\n// =================================================================================================\n// Block All Fragment\n// =================================================================================================\n\nexport const blockAllFragment = gql`\n  fragment BlockAll on Block {\n    ...ContentfulSysId\n    anchorId\n    theme\n    brandBackgroundColor\n    backgroundColor\n    backgroundMediaV2 {\n      __typename\n      ... on Video {\n        ...VideoAll\n      }\n      ... on Image {\n        ...ImageAll\n      }\n    }\n    showCurtain\n    eyebrow\n    title {\n      json\n      links {\n        entries {\n          inline {\n            ...ContentfulSysId\n            ... on EmphasizedText {\n              ...EmphasizedTextAll\n            }\n          }\n        }\n      }\n    }\n    subtitle {\n      json\n    }\n    titleAlignment\n    titleAlignmentMobile\n    maxColumns\n    isNarrow\n    widthStyle\n    fullHeight\n    contentsCollection(limit: 15) {\n      items {\n        ...ContentfulSysId\n      }\n    }\n    callsToActionCollection(limit: 9) {\n      items {\n        ... on CallToAction {\n          ...CallToActionAll\n        }\n      }\n    }\n  }\n  ${contentfulSysIdFragment}\n  ${ctaFragment}\n  ${assetsFragments.all}\n  ${videoFragments.all}\n  ${imageFragments.all}\n  ${emphasizedTextFragment}\n`;\n\n// TODO: Convert all of these to shallow.\nexport type BlockContentType =\n  | ContentDataProps\n  | LazyGalleryProps\n  | CarouselV3DataProps\n  | FormDataProps\n  | TabsDataProps\n  | BarChartDataProps\n  | LineChartDataProps\n  | GeoMapDataProps\n  | MosaicProps\n  | MultiVisualizationDataProps\n  | TableVisualizationDataProps;\n\nexport type ShallowContent = ContentfulSysProps;\n\nexport interface BlockDataProps extends ContentfulTypedSysProps<'Block'> {\n  eyebrow?: string;\n  title?: RichText | string; // TODO: This should be just richText\n  subtitle?: RichText | string; // TODO: This should be just richText\n  titleAlignment?: Alignment;\n  titleAlignmentMobile?: Alignment;\n  maxColumns?: 1 | 2 | 3;\n  theme?: BackgroundColor;\n  brandBackgroundColor?: MotifScheme;\n  backgroundColor?: BackgroundColor;\n  backgroundMediaV2?: VideoDataProps | ImageDataProps;\n  showCurtain?: boolean;\n  callsToActionCollection: Items<CallToActionDataProps>;\n  contentsCollection?: Items<ShallowContent>;\n  anchorId?: string;\n  isNarrow?: boolean;\n  widthStyle?: string;\n  fullHeight?: boolean;\n  isPreviousSameBackgroundColor?: boolean;\n  isNextSameBackgroundColor?: boolean;\n  className?: string;\n  denseLayout?: boolean;\n  // TODO expose in Contentful\n  skipBreakTemplate?: boolean;\n}\n\n// =================================================================================================\n// Block Preview Fragment\n// =================================================================================================\n\nexport const blockPreviewFragment = gql`\n  fragment BlockPreview on Block {\n    ...ContentfulSysId\n    title {\n      json\n    }\n    contentsCollection(limit: 5) {\n      items {\n        ... on Content {\n          ...ContentMedia\n        }\n      }\n    }\n  }\n  ${contentfulSysIdFragment}\n  ${contentFragments.media}\n`;\n\n// =================================================================================================\n// Block Shallow Fragment\n// =================================================================================================\n\n/** This shallow fragment does load ids of it's children so that we can preload them. */\nexport const blockFragmentShallow = gql`\n  fragment BlockShallow on Block {\n    ...ContentfulSysId\n    contentsCollection(limit: 15) {\n      items {\n        ...ContentfulSysId\n      }\n    }\n  }\n  ${contentfulSysIdFragment}\n`;\n\nexport interface BlockShallowWithContentIds extends ContentfulTypedSysProps<'Block'> {\n  contentsCollection: Items<ContentfulSysProps>;\n}\n\nexport type BlockShallowDataProps = ContentfulSysProps | BlockShallowWithContentIds;\n\n// =================================================================================================\n// Block All Query\n// =================================================================================================\n\nexport const query = gql`\n  query BlockQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    block(preview: $preview, locale: $locale, id: $id) {\n      ...BlockAll\n    }\n  }\n  ${blockAllFragment}\n`;\n\nexport interface BlockDataHandlerProps {\n  block: BlockDataProps;\n}\n", "import type { DocumentNode } from '@apollo/client';\nimport { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { blockFragmentShallow, blockQueryLimit } from '../Block/query';\nimport type { PageSitemapData } from '../Page/pageQuery';\n\n// =================================================================================================\n// Experiment Filter Fragment\n// =================================================================================================\n\nexport type ExperimentFilterAction = 'Allow' | 'Deny';\n\nexport const criteriaFragment = gql`\n  fragment CriteriaAll on Criteria {\n    ...ContentfulSysId\n    trafficRangeStart\n    trafficRangeEnd\n    countryAction\n    countries\n    languageAction\n    languages\n    deviceAction\n    devices\n    platformAction\n    platforms\n    utmParams\n    utmParamsAction\n    businessPersonaAction\n    businessPersonasMatchAll\n    businessPersonas\n    snapPersonaAction\n    snapPersonas\n  }\n  ${contentfulSysIdFragment}\n`;\n\n// =================================================================================================\n// Experiment Sitemap Fragment\n// =================================================================================================\n\n/**\n * Experiment Query optimized for generating site map data.\n *\n * NOTE: we do not apply any expiriment logic when generating site maps. Intead we only reference\n * the default page content.\n */\nexport const experimentSitemapFragment = gql`\n  fragment SiteMapExperiment on Experiment {\n    sys {\n      id\n    }\n    defaultReference {\n      ...SiteMapPage\n    }\n  }\n`;\n\n/** Experiment content model optimized for generating site map data. */\nexport type ExperimentSitemapData = {\n  __typename?: 'Experiment';\n  sys: {\n    id: string;\n  };\n  defaultReference?: PageSitemapData;\n};\n\n// =================================================================================================\n// Create Experiment Fragment function.\n// =================================================================================================\n\n/**\n * I will probably regret this one day, but this helper function generates a fragment for getting\n * experiment data for a given fragment on a particular data type.\n *\n * Sample usage:\n *\n *     const fooQuery = gql`\n *         fragment FooShallow on Foo {\n *           bar {\n *             ...ExperimentOn[Bar]Loading[BarFragment]\n *           }\n *         }\n *         ${createExperimentFragment('Bar', 'BarFragment', someBarFragment)}\n *       `;\n */\nexport function createExperimentFragmentWithAbReplacements(\n  entryType: string,\n  fragmentName: string,\n  fragment: DocumentNode,\n  armLimit = 10\n): DocumentNode {\n  return gql`\n    fragment ExperimentOn${entryType}Loading${fragmentName} on Entry {\n      ... on ${entryType} {\n        ...${fragmentName}\n      }\n      ... on Experiment {\n        ...ContentfulSysId\n        defaultReference {\n          ...${fragmentName}\n        }\n        experimentArmsCollection(limit: ${armLimit}) {\n          items {\n            ...ContentfulSysId\n            reference {\n              ...${fragmentName}\n            }\n            criteria {\n              ...CriteriaAll\n            }\n            abExperimentsCollection(limit: ${armLimit}) {\n              items {\n                ...ContentfulSysId\n                analyticsId\n                seed\n                reference {\n                  ...ContentfulSysId\n                }\n                abVariantsCollection(limit: 5) {\n                  items {\n                    ...ContentfulSysId\n                    replacement {\n                      ...ContentfulSysId\n                      ... on Page {\n                        # The standard page level block query has a set limit, which, at the time of writing this comment\n                        # is 25. However, this particular query, due to its nested nature, requires a lower limit, otherwise\n                        # it will break our query complexity cap. Therefore, we drastically lower the limit for this particular\n                        # query to be much smaller than the established \"blockQueryLimit\".\n                        #\n                        # Rather than hardcoding this limit, we use the existing blockQueryLimit constant, and scale it down\n                        # to 40% of its original value. This should ensure that this query stays sufficiently within the complexity\n                        # cap.\n                        blocksCollection(limit: ${Math.floor(blockQueryLimit * (2 / 5))}) {\n                          items {\n                            ...ContentfulSysId\n                            ... on Block {\n                              ...BlockShallow\n                            }\n                          }\n                        }\n                      }\n                      ... on Block {\n                        ...ContentfulSysId\n                        contentsCollection(limit: 10) {\n                          items {\n                            ...ContentfulSysId\n                          }\n                        }\n                      }\n                    }\n                    trafficStartRange\n                    trafficEndRange\n                    analyticsId\n                  }\n                }\n              }\n            }\n            analyticsId\n          }\n        }\n        analyticsId\n      }\n    }\n    ${blockFragmentShallow}\n    ${contentfulSysIdFragment}\n    ${criteriaFragment}\n    ${fragment}\n  `;\n}\n\nexport function createExperimentFragmentNoAb(\n  entryType: string,\n  fragmentName: string,\n  fragment: DocumentNode,\n  armLimit = 10\n): DocumentNode {\n  return gql`\n    fragment ExperimentOn${entryType}Loading${fragmentName} on Entry {\n      ... on ${entryType} {\n        ...${fragmentName}\n      }\n      ... on Experiment {\n        ...ContentfulSysId\n        defaultReference {\n          ...${fragmentName}\n        }\n        experimentArmsCollection(limit: ${armLimit}) {\n          items {\n            ...ContentfulSysId\n            reference {\n              ...${fragmentName}\n            }\n            criteria {\n              ...CriteriaAll\n            }\n            analyticsId\n          }\n        }\n        analyticsId\n      }\n    }\n    ${contentfulSysIdFragment}\n    ${criteriaFragment}\n    ${fragment}\n  `;\n}\n", "import type { AbVariant, Criteria, Experiment } from '@snapchat/mw-contentful-schema';\nimport { BrowserFeaturesContext } from '@snapchat/snap-design-system-marketing';\nimport kebabCase from 'lodash-es/kebabCase';\nimport type { RefObject } from 'react';\nimport { useCallback, useContext } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport { logEvent, logInfo, SubscribedEventType } from '../../helpers/logging';\nimport type { AbExperimentDecider } from '../../hooks/useAbExperiments';\nimport { useAbExperiments } from '../../hooks/useAbExperiments';\nimport { type SingleCallbackFn, useSingleCallback } from '../../hooks/useSingleCallback';\nimport type { UserBusinessProfileDecider } from '../../hooks/useUserBusinessProfile';\nimport { useUserBusinessProfile } from '../../hooks/useUserBusinessProfile';\nimport type { UserSnapProfileDecider } from '../../hooks/useUserSnapProfile';\nimport { useUserSnapProfile } from '../../hooks/useUserSnapProfile';\nimport type { ContentfulSysProps } from '../../types/contentful';\nimport type { Personas } from '../../types/personas';\nimport type { CookieManager } from '../../utils/cookies/CookieManager';\nimport { getPersonasCookie, setPersonasCookie } from '../../utils/persona/personaUtils';\nimport type { BlockShallowWithContentIds } from '../Block';\nimport type { PageShallowDataProps } from '../Page';\nimport { extractUtmParameters } from './utils';\n\n// =================================================================================================\n// Controls\n// =================================================================================================\nconst printDebugStatements = false;\n\nfunction printDebugSkip(\n  analyticsId: string | undefined,\n  what: string | number,\n  where: Array<string> | Array<number> | undefined,\n  action: string | undefined\n) {\n  if (!printDebugStatements) return;\n  analyticsId ??= 'synthetic';\n  action ??= 'Allow';\n\n  console.debug(\n    `Criteria not applicable for arm '${analyticsId}' because of check ` +\n      `'${what}' in '${where}' has action '${action}'.`\n  );\n}\n\n// =================================================================================================\n// Interfaces\n// =================================================================================================\n\nexport interface CriteriaDecisionProps {\n  /**\n   * Snap standard locale code in format language-COUNTRY Where langauge is one of the\n   * https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes And country is one of the alpha-2\n   * https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes codes\n   */\n  language: string;\n\n  /** 2-digit country code as in https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes */\n  country: string;\n\n  /**\n   * One of \"Android\", \"Chrome OS\", \"Fuchsia\", \"iOS\", \"Linux\", \"macOS\", \"Windows\", or \"Unknown\". See\n   * spec: https://wicg.github.io/ua-client-hints/#sec-ch-ua-platform\n   */\n  platform: 'Android' | 'Chrome OS' | 'Fuchsia' | 'iOS' | 'Linux' | 'macOS' | 'Windows' | 'Unknown';\n\n  /**\n   * Whether the device is mobile or not. Based on \"mobile\" user hints header. See spec:\n   * https://wicg.github.io/ua-client-hints/#sec-ch-ua-mobile\n   */\n  deviceType: 'Mobile' | 'Non-Mobile' | 'Unknown';\n\n  /**\n   * UTM Parameters that are present in the URL. Currently we only check for utm_source, utm_medium,\n   * utm_campaign, utm_content\n   */\n  utmParams: Record<string, string>;\n}\n\n// TODO: This shouldn't extend CriteriaDecisionProps at all.\nexport interface ExperimentDecisionProps extends CriteriaDecisionProps {\n  cookieManager: CookieManager;\n  getCurrentUrl: () => string;\n  singleCallback: SingleCallbackFn;\n  decideAbExperiment: AbExperimentDecider;\n  getUserSnapProfile: UserSnapProfileDecider;\n  getUserBusinessProfile: UserBusinessProfileDecider;\n  personasRef?: RefObject<Personas | undefined>;\n  updatePersonas?: (personas: Personas) => void;\n}\n\nexport type ReplacementData =\n  | ContentfulSysProps\n  | BlockShallowWithContentIds\n  | PageShallowDataProps;\n\nexport type ReplacementMap = Partial<Record<string, ReplacementData>>;\n\ninterface ExperimentResult<T> {\n  decision: T;\n  experimentId?: string;\n  variantId?: string;\n  replacements?: ReplacementMap;\n}\n\n/**\n * Finds the first experiment arm that matches its criteria, and if all fail returns the default.\n *\n * In absence of an experiment, returns value.\n */\nexport type ExperimentDecider = <T extends ContentfulSysProps>(\n  value: T | Experiment,\n  options: {\n    logImpression: boolean;\n  }\n) => ExperimentResult<T>;\n\n/** Returns TRUE if the passed-in value MATCHES the criteria. */\nexport type CriteriaChecker = (criteria: Criteria | null | undefined) => boolean;\n\n// =================================================================================================\n// Public Experiment API\n// =================================================================================================\n\nexport interface UseExperiment {\n  decideExperiment: ExperimentDecider;\n  // TODO: Move CriteriaChecker into a different hook (useCriteria).\n  /** Does NOT check business personas or snap personas. Only checks the other criteria. */\n  checkCriteria: CriteriaChecker;\n}\n\nexport function useExperiment(): UseExperiment {\n  const { cookieManager, currentLocale, userLocation, getCurrentUrl, personasRef, updatePersonas } =\n    useContext(AppContext);\n  const browserFeatures = useContext(BrowserFeaturesContext);\n  const singleCallback = useSingleCallback();\n  const decideAbExperiment = useAbExperiments();\n  const getUserSnapProfile = useUserSnapProfile();\n  const getUserBusinessProfile = useUserBusinessProfile();\n\n  const language = currentLocale ?? 'Unknown';\n  const country = userLocation.country ?? 'Unknown';\n  const platform = browserFeatures.getLowEntropyHints().platform ?? 'Unknown';\n  const deviceType = browserFeatures.getLowEntropyHints().isMobile ? 'Mobile' : 'Non-Mobile';\n  const utmParams = extractUtmParameters(getCurrentUrl());\n\n  const checkCriteria = useCallback(\n    (value: Criteria | null | undefined) => {\n      return doesPassCriteria(value, { language, country, platform, deviceType, utmParams });\n    },\n    [language, country, platform, deviceType, utmParams]\n  );\n\n  const decideExperiment = useCallback<ExperimentDecider>(\n    (value, options) => {\n      const context: ExperimentDecisionProps = {\n        language,\n        country,\n        platform,\n        deviceType,\n        singleCallback,\n        getCurrentUrl,\n        decideAbExperiment,\n        utmParams,\n        getUserSnapProfile,\n        getUserBusinessProfile,\n        personasRef,\n        updatePersonas,\n        cookieManager,\n      };\n\n      return decideExperimentImpl(value, context, options);\n    },\n    [\n      language,\n      country,\n      platform,\n      deviceType,\n      singleCallback,\n      decideAbExperiment,\n      getCurrentUrl,\n      utmParams,\n      getUserSnapProfile,\n      getUserBusinessProfile,\n      personasRef,\n      updatePersonas,\n      cookieManager,\n    ]\n  );\n\n  return {\n    decideExperiment,\n    checkCriteria,\n  };\n}\n\n/**\n * Returns the default value of an experiment or the only value without the experiment wrapper.\n *\n * NOTE: Use this very sparingly. This is only applicable in situations where nothing sensitive can\n * be shown to the user. I.e. If an experiment has a filter to not show sensitive material in Saudi\n * Arabia, we cannot use this method if it can show bad material to our users.\n *\n * Otherwise use the {@link decideExperimentImpl} and provide the correct context.\n */\nexport function getExperimentDefault<T extends ContentfulSysProps>(value: T | Experiment): T {\n  // If not an experiment, return.\n  if (value.__typename !== 'Experiment') {\n    return value as T;\n  }\n  const experiment = value as Experiment;\n  return experiment.defaultReference as unknown as T;\n}\n\n/**\n * Returns whether the action check fails.\n *\n * Usage:\n *\n * If (doesFailCheck(check)) { fail condition here }\n */\nconst doesFailCheck = (array: string[] | undefined, value: string, action?: string): boolean => {\n  action ??= 'Allow'; // Works for nulls.\n\n  // Fail if we have an allow-list, and current value isn't on it.\n  if (action === 'Allow' && array && !array.includes(value)) return true;\n\n  // Fail if we have a block-list and the current value is on it.\n  if (action === 'Deny' && array?.includes(value)) return true;\n  // Otherwise return 'false' as in 'check did not fail'.\n  return false;\n};\n\nexport function doesPassCriteria(\n  criteria: Criteria | null | undefined,\n  props: CriteriaDecisionProps,\n  analyticsId?: string\n): boolean {\n  if (!criteria) return true;\n\n  // Check countries.\n  if (doesFailCheck(criteria.countries, props.country, criteria.countryAction)) {\n    printDebugSkip(analyticsId, props.country, criteria.countries, criteria.countryAction);\n    return false;\n  }\n\n  // Check languages.\n  if (doesFailCheck(criteria.languages, props.language, criteria.languageAction)) {\n    printDebugSkip(analyticsId, props.language, criteria.languages, criteria.languageAction);\n    return false;\n  }\n\n  // Check platforms.\n  if (doesFailCheck(criteria.platforms, props.platform, criteria.platformAction)) {\n    printDebugSkip(analyticsId, props.platform, criteria.platforms, criteria.platformAction);\n    return false;\n  }\n\n  // Check devices.\n  if (doesFailCheck(criteria.devices, props.deviceType, criteria.deviceAction)) {\n    printDebugSkip(analyticsId, props.deviceType, criteria.devices, criteria.deviceAction);\n    return false;\n  }\n\n  // Check UTM parameters.\n  // Every query param in the criteria must have at least one match (for allow-list) or none in deny-list\n  if (criteria.utmParams) {\n    // iterate over each criteria's utm parameter and check if it passes the criteria\n    for (const [utmParam, value] of Object.entries(criteria.utmParams)) {\n      if (doesFailCheck(value, props.utmParams[utmParam] ?? '', criteria.utmParamsAction)) {\n        printDebugSkip(\n          analyticsId,\n          props.utmParams[utmParam] ?? '',\n          // need to cast to Record<string, string[]> becaues its unknown in contentful-types.ts\n          (criteria.utmParams as Record<string, string[]>)[utmParam],\n          criteria.utmParamsAction\n        );\n\n        return false;\n      }\n    }\n  }\n\n  // If none of the checks failed, then the criteria has passed.\n  return true;\n}\n\n/**\n * Evaluates the experiment and finds the first arm for which criteria passes. If no arms pass, uses\n * the default reference.\n */\nexport function decideExperimentImpl<T extends ContentfulSysProps>(\n  value: T | Experiment,\n  props: ExperimentDecisionProps,\n  options: Parameters<ExperimentDecider>[1]\n): ExperimentResult<T> {\n  // If not an experiment, return.\n  if (value.__typename !== 'Experiment') {\n    // we fire this log event to show that there was no experiment on this page\n    // this is useful for clearing experiment data on certain listeners (like Blizzard)\n    // Google and GoogleCloud listeners ignore this event\n    options.logImpression &&\n      logEvent({\n        subscribedEventType: SubscribedEventType.EXPERIMENT_IMPRESSION,\n        experimentId: undefined,\n        variantId: undefined,\n        // TODO: Normally, the locale is automatically added to all log events by a logging context provider\n        // set in App.tsx. Unfortunately, this context provider is not attached yet by the time this runs due\n        // to a bug with the way the context provider is attached. We can remove this once the bug is fixed.\n        // https://jira.sc-corp.net/browse/WEBP-11200\n        context: { locale: props.language },\n      });\n\n    return { decision: value as T };\n  }\n  const experiment = value as Experiment;\n\n  let chosenArmAnalyticsId = 'default';\n  let reference = experiment.defaultReference;\n  const replacements: ReplacementMap = {};\n  const singleCallback = props.singleCallback;\n  // use this to prevent logging an exposure for the default (control) if business personas are being fetched\n  let isThinking = false;\n\n  for (const arm of experiment.experimentArmsCollection?.items ?? []) {\n    if (!arm.criteria) continue;\n\n    // Check other criteria (not including business personas or snap personas)\n    const passCriteria = doesPassCriteria(arm.criteria, props, arm.analyticsId);\n\n    // Check snap personas criteria\n    const snapPersonasCriteria = arm.criteria?.snapPersonas;\n\n    // Check business personas criteria\n    const businessPersonasCriteria = arm.criteria?.businessPersonas;\n    const businessPersonasMatchAll = arm.criteria?.businessPersonasMatchAll;\n\n    const hasBusinessPersonasCriteria =\n      !!businessPersonasCriteria?.length || businessPersonasMatchAll;\n\n    const hasSnapPersonasCriteria = !!snapPersonasCriteria?.length;\n\n    // If no personas criteria and no other criteria pass, skip this arm\n    if (!passCriteria && !hasBusinessPersonasCriteria && !hasSnapPersonasCriteria) continue;\n\n    // If business personas criteria exist on this arm, check if the user's business persona matches the criteria\n    // This block of code only looks at the business personas criteria and not the other criteria.\n    // The purpose of this block is to short circuit if the user's business personas do not match the criteria.\n    if (hasBusinessPersonasCriteria) {\n      // If still no user profile found, fetch it\n      const userBusinessProfile = props.getUserBusinessProfile();\n\n      if (userBusinessProfile.isThinking) {\n        // if the user's business profile is still being fetched, we set isThinking to true\n        // so that we can prevent logging an exposure for the default (control) if business personas are being fetched\n        isThinking = true;\n        break;\n      }\n\n      const userBusinessProfileDecision = userBusinessProfile.decision;\n\n      // Get the existing personas values from the cookie or the app state\n      const existingPersonasValues =\n        getPersonasCookie(props.cookieManager) || props.personasRef?.current;\n\n      // Pass the updated personas back to the caller so that the server can use it to set the initial APP_STATE\n      // We only want to update the biz personas, so we merge the existing personas with the new biz personas\n      const updatedPersonas = {\n        ...existingPersonasValues,\n        biz: userBusinessProfileDecision,\n      } as Personas;\n\n      props.updatePersonas?.(updatedPersonas);\n      setPersonasCookie(props.cookieManager, updatedPersonas);\n\n      // If a business profile was NOT found, i.e. `undefined` or `null`, skip this arm\n      if (!userBusinessProfileDecision || userBusinessProfileDecision.length === 0) {\n        continue;\n      }\n\n      // The action field can be undefined in the criteria, so we default to 'Allow'\n      const businessPersonaAction = arm.criteria?.businessPersonaAction ?? 'Allow';\n\n      // If matching ALL business personas\n      if (businessPersonasMatchAll) {\n        // If the action is to deny, skip this arm\n        if (businessPersonaAction === 'Deny') {\n          continue;\n        }\n        // otherwise, continue down this code and check the AB Experiments\n      }\n      // If matching ONLY selected business personas\n      else {\n        // Check if the user's business personas match any of the criteria\n        const doesMatchCriteria = userBusinessProfileDecision.some(decision =>\n          businessPersonasCriteria?.includes(decision)\n        );\n\n        let doesFailCheck = false;\n\n        // Fail if we have an allow-list, and current value isn't on it\n        if (businessPersonaAction === 'Allow' && !doesMatchCriteria) {\n          doesFailCheck = true;\n        }\n\n        // Fail if we have a block-list and the current value is on it\n        if (businessPersonaAction === 'Deny' && doesMatchCriteria) {\n          doesFailCheck = true;\n        }\n\n        // If the user's business personas do not match the criteria, skip this arm\n        if (doesFailCheck) {\n          userBusinessProfileDecision.forEach(decision => {\n            printDebugSkip(\n              arm.analyticsId,\n              decision,\n              businessPersonasCriteria,\n              businessPersonaAction\n            );\n          });\n          continue;\n        }\n      }\n      // If we made it this far, the user's business personas match the criteria\n      // so we can continue down this code and check the AB Experiments.\n      // The reference and chosenArmAnalyticsId will be set in the next block of code.\n    }\n\n    // If snap personas criteria exist on this arm, check if the user's snap persona matches the criteria\n    // This block of code only looks at the snap personas criteria and not the other criteria.\n    // The purpose of this block is to short circuit if the user's snap personas do not match the criteria.\n    if (hasSnapPersonasCriteria) {\n      const snapPersonasDecision = props.getUserSnapProfile();\n\n      // The action field can be undefined in the criteria, so we default to 'Allow'\n      const snapPersonaAction = arm.criteria?.snapPersonaAction ?? 'Allow';\n\n      // Check if the user's snap personas match any of the criteria\n      const doesMatchCriteria = snapPersonasDecision.some(decision =>\n        snapPersonasCriteria?.includes(decision)\n      );\n\n      let doesFailCheck = false;\n\n      // Fail if we have an allow-list, and current value isn't on it\n      if (snapPersonaAction === 'Allow' && !doesMatchCriteria) {\n        doesFailCheck = true;\n      }\n\n      // Fail if we have a block-list and the current value is on it\n      if (snapPersonaAction === 'Deny' && doesMatchCriteria) {\n        doesFailCheck = true;\n      }\n\n      // If the user's snap personas do not match the criteria, skip this arm\n      if (doesFailCheck) {\n        snapPersonasDecision.forEach(decision => {\n          printDebugSkip(arm.analyticsId, decision, snapPersonasCriteria, snapPersonaAction);\n        });\n        continue;\n      }\n\n      // If we made it this far, the user's snap personas match the criteria\n      // so we can continue down this code and check the business personas and AB Experiments.\n      // The reference and chosenArmAnalyticsId will be set further down in this code.\n    }\n\n    // If the other criteria pass, use this arm's reference and continue to check AB Experiments\n    reference = arm.reference;\n    chosenArmAnalyticsId = arm.analyticsId ?? chosenArmAnalyticsId;\n\n    const armHasAbExperiment = (arm.abExperimentsCollection?.items.length ?? 0) > 0;\n\n    if (armHasAbExperiment && arm.abExperimentsCollection?.items.length) {\n      const abExperiments = arm.abExperimentsCollection.items;\n\n      // for every experiment on the page\n      for (const abExperiment of abExperiments) {\n        const entryToReplace = abExperiment.reference?.sys.id;\n        let madeReplacement = false;\n        if (!entryToReplace) continue;\n        const { isThinking, decision: experimentArm } = props.decideAbExperiment<AbVariant>({\n          seed: abExperiment.seed ?? abExperiment.sys.id,\n          variants: abExperiment.abVariantsCollection?.items,\n        });\n\n        if (experimentArm) {\n          // If replacement is a Page, this is a page swap so just change the reference to the replacement\n          if (experimentArm.replacement?.__typename === 'Page') {\n            reference = experimentArm.replacement;\n            // The replacement is at the entry level, and the replacement entry exists\n          } else if (experimentArm.replacement) {\n            replacements[entryToReplace] = {\n              ...experimentArm.replacement,\n            };\n            // The replacement is at the entry level, but the replacement entry does not exist so we set it to undefined\n            // this will let the components know to not render the entryToReplace\n          } else {\n            replacements[entryToReplace] = undefined;\n          }\n\n          // Log Exposure for the variant swap\n          singleCallback({\n            key: 'useExperimentVariantSwap',\n            callback: () =>\n              logInfo({\n                eventCategory: 'Experiment',\n                eventAction: 'experimentExposure',\n                eventLabel: `${chosenArmAnalyticsId}:${abExperiment.analyticsId}:${experimentArm.analyticsId}`,\n                context: { locale: props.language },\n              }),\n            dependencies: [\n              chosenArmAnalyticsId,\n              abExperiment.analyticsId,\n              experimentArm.analyticsId,\n            ],\n          });\n\n          madeReplacement = true;\n        }\n\n        // no replacements were made, so we log an exposure for the default (control)\n        if (!isThinking && !madeReplacement) {\n          // Log event into GA to record that experiment decisions happen. This also goes to Blizard.\n          singleCallback({\n            key: 'useExperimentDefault',\n            callback: () =>\n              logInfo({\n                eventCategory: 'Experiment',\n                eventAction: 'experimentExposure',\n                eventLabel: `${chosenArmAnalyticsId}:${abExperiment.analyticsId}:default`,\n                context: { locale: props.language },\n              }),\n            dependencies: [chosenArmAnalyticsId, abExperiment.analyticsId],\n          });\n        }\n      }\n    }\n    break;\n  }\n\n  // if the user's business profile is still being fetched, we do not log an exposure for the default (control)\n  if (isThinking) {\n    return { decision: reference as unknown as T };\n  }\n\n  // Log event into GA to record that experiment decisions happen. This also goes to Blizard.\n  singleCallback({\n    key: 'useExperiment',\n    callback: () =>\n      logInfo({\n        eventCategory: 'Experiment',\n        eventAction: 'useExperiment',\n        eventLabel: `${kebabCase(experiment.analyticsId ?? '')}:${kebabCase(chosenArmAnalyticsId)}`,\n        context: { locale: props.language },\n      }),\n    dependencies: [experiment.analyticsId, chosenArmAnalyticsId],\n  });\n\n  // Log event through GTag into Google Optimize for report generation.\n  options.logImpression &&\n    singleCallback({\n      key: 'experimentImpression',\n      callback: () =>\n        logEvent({\n          subscribedEventType: SubscribedEventType.EXPERIMENT_IMPRESSION,\n          experimentId: experiment.analyticsId ?? 'Unknown',\n          variantId: chosenArmAnalyticsId,\n          context: { locale: props.language },\n        }),\n      dependencies: [experiment.analyticsId, chosenArmAnalyticsId],\n    });\n\n  return {\n    decision: reference as unknown as T,\n    experimentId: experiment.analyticsId,\n    variantId: chosenArmAnalyticsId,\n    replacements,\n  };\n}\n", "import { useAsyncData } from '@snapchat/async-data-browser';\nimport { isNullish } from 'radashi';\nimport { useCallback, useContext, useState } from 'react';\n\nimport type { UserInfo } from '../AppContext';\nimport { AppContext } from '../AppContext';\nimport { Config } from '../config';\nimport { userBucketCount } from '../constants/experiments';\nimport { UrlParameter } from '../constants/urlParameters';\nimport { logger } from '../helpers/logging';\nimport { adler32 } from '../utils/adler32';\n\nconst component = 'useAbExperiments';\n\nexport interface AbExperiment<V extends AbVariant> {\n  seed: string;\n  default?: V;\n  variants?: V[];\n}\n\nexport interface AbVariant {\n  trafficStartRange?: number;\n  trafficEndRange?: number;\n}\n\nexport type AbExperimentDecider = <V extends AbVariant>(\n  ab: AbExperiment<V>\n) => {\n  isThinking: boolean;\n  decision: V | undefined;\n};\n\n/**\n * Hook that returns helper functions for working with AB Experiments.\n *\n * The ab experiment functions, when triggerred have side-effects like reading/setting cookies or\n * making RPC requets, so they should be called conditionally on them being needed.\n */\nexport function useAbExperiments(): AbExperimentDecider {\n  const { getUserInfo, getCurrentUrl } = useContext(AppContext);\n\n  const [needsDecision, setNeedsDecision] = useState(false);\n\n  // NOTE: Calling getUserFactory reads and writes cookies, which means that it makes the\n  // render ineligible for server-side rendering. This is why it's called very-very conditionally.\n\n  const { data: userInfo } = useAsyncData({\n    skip: !needsDecision, // Skip loading if we don't need the decision.\n    dataId: 'userInfo', // Has to be the same as in other places to hit cache.\n    dataAsync: getUserInfo,\n    onError: error => logger.logError({ component, error }),\n  });\n\n  const decideAbExperiment = useCallback<AbExperimentDecider>(\n    ab => {\n      // Signals to load the userInfo.\n      !needsDecision && setNeedsDecision(true);\n      return decideAbExperimentImpl(ab, { userInfo, getCurrentUrl });\n    },\n    [needsDecision, getCurrentUrl, userInfo]\n  );\n\n  return decideAbExperiment;\n}\n\n/**\n * Internal helper function with the business logic.\n *\n * Extracted for testing purposes.\n */\nexport const decideAbExperimentImpl = <V extends AbVariant>(\n  ab: AbExperiment<V>,\n  context: { userInfo?: UserInfo; getCurrentUrl: () => string }\n): { isThinking: boolean; decision: V | undefined } => {\n  const { userInfo, getCurrentUrl } = context;\n\n  // User info not loaded yet. Don't make a decision yet.\n  if (!userInfo) {\n    return { isThinking: true, decision: undefined };\n  }\n\n  const seededBucket = userInfo.experimentBucket.id + ab.seed;\n  const userBucket = adler32(seededBucket) % userBucketCount;\n  let userTrafficPercentile = (userBucket / userBucketCount) * 100;\n\n  // Override userBucket via URL parameter for testing purposes.\n  if (!Config.isDeploymentTypeProd) {\n    const url = new URL(getCurrentUrl());\n    const userBucketParameter = url.searchParams.get(UrlParameter.EXPERIMENTS_USER_BUCKET);\n    const userBucket = userBucketParameter ? Number.parseInt(userBucketParameter) : undefined;\n\n    if (userBucket !== undefined && userBucket >= 0 && userBucket <= 100) {\n      userTrafficPercentile = userBucket;\n    }\n  }\n\n  if (!ab.variants) return { isThinking: false, decision: ab.default };\n\n  for (const variant of ab.variants) {\n    // Skip variants without limits.\n    if (isNullish(variant.trafficStartRange) || isNullish(variant.trafficEndRange)) continue;\n\n    // If variant matches population criteria,\n    if (\n      variant.trafficStartRange <= userTrafficPercentile &&\n      variant.trafficEndRange >= userTrafficPercentile\n    ) {\n      return { isThinking: false, decision: variant };\n    }\n  }\n\n  return { isThinking: false, decision: ab.default };\n};\n", "import { userBucketCount } from '../constants/experiments';\n\n/**\n * Simple hash function that turns a string into a number. Roughly based on\n * https://en.wikipedia.org/wiki/Adler-32\n */\nexport const adler32 = (source: string): number => {\n  let alpha = 0;\n  let beta = 0;\n\n  for (let i = 0; i < source.length; i++) {\n    alpha = (alpha + source.charCodeAt(i)) % userBucketCount;\n    beta = (beta + i * source.charCodeAt(i)) % userBucketCount;\n  }\n\n  return alpha + beta;\n};\n", "import { createContext, useCallback, useContext } from 'react';\n\nimport type { SingleCallbackArgs, SingleCallbackCache } from '../utils/singleCallback';\nimport { singleCallback } from '../utils/singleCallback';\n\nexport const SingleCallbackCacheContext = createContext<SingleCallbackCache>(new Map());\n\nexport type SingleCallbackFn = (args: Omit<SingleCallbackArgs, 'cache'>) => void;\n\n/** A hook wrapper around `singleCallback` that allows scoped calling history. */\nexport function useSingleCallback(): SingleCallbackFn {\n  const cache = useContext(SingleCallbackCacheContext);\n  const singleCallbackInternal = useCallback<SingleCallbackFn>(\n    args => singleCallback({ ...args, cache }),\n    [cache]\n  );\n\n  return singleCallbackInternal;\n}\n", "/** Type of a dependency that shouldn't occupy too much room in RAM. */\ntype Dep = WeakRef<object> | string | number | boolean | undefined;\n\nexport type SingleCallbackCache = Map<string, Dep[][]>;\n\n/**\n * A BAD polyfill for the WeakRef class that never lets go of it's references which causes a memory\n * leak, but it's better than crashing the page.\n */\nclass WeakRefPolyfill<T extends object> implements WeakRef<T> {\n  private static readonly tag = 'WeakRef' as const;\n\n  private readonly ref: T;\n\n  constructor(ref: T) {\n    this.ref = ref;\n  }\n\n  deref = (): T => this.ref;\n\n  get [Symbol.toStringTag]() {\n    return WeakRefPolyfill.tag;\n  }\n}\n\nexport interface SingleCallbackArgs {\n  key: string;\n  callback: () => void;\n  dependencies: unknown[];\n  cache: SingleCallbackCache;\n}\n\n/** How many items to store key invocation key. */\nconst maxHistory = 50;\n\nfunction areEqual(deps: unknown[], previousDeps: Dep[]): boolean {\n  if (deps.length !== previousDeps.length) {\n    return false;\n  }\n\n  return deps.every((dep, i) => {\n    const previousDep = previousDeps[i];\n\n    if (typeof previousDep === 'object' && previousDep !== null && 'deref' in previousDep) {\n      return dep === previousDep.deref();\n    }\n\n    return dep === previousDep;\n  });\n}\n\nfunction mapDep(dep: unknown): Dep {\n  if (typeof dep === 'object' && dep !== null) {\n    return WeakRef ? new WeakRef(dep) : new WeakRefPolyfill(dep);\n  }\n\n  if (typeof dep === 'string' || typeof dep === 'number' || typeof dep === 'boolean') {\n    return dep;\n  }\n\n  return String(dep);\n}\n\n/**\n * Runs a function only once for a given set of dependencies.\n *\n * This is similar to `useImperativeEffect` but for use in places where hooks are disallowed or are\n * not practical.\n */\nexport function singleCallback({ key, callback, dependencies, cache }: SingleCallbackArgs): void {\n  if (!cache.has(key)) {\n    cache.set(key, []);\n  }\n\n  const previousCalls = cache.get(key)!;\n\n  if (previousCalls.some(previous => areEqual(dependencies, previous))) {\n    return;\n  }\n\n  if (previousCalls.length >= maxHistory) {\n    previousCalls.shift();\n  }\n\n  previousCalls.push(dependencies.map(mapDep));\n\n  callback();\n}\n", "import { useAsyncData } from '@snapchat/async-data-browser';\nimport { useCallback, useContext, useState } from 'react';\n\nimport { AppContext } from '../AppContext';\nimport { logger } from '../helpers/logging';\nimport type { PersonaResponse } from '../utils/persona/personaTypes';\nimport { getPersonasCookie } from '../utils/persona/personaUtils';\n\nconst component = 'useUserBusinessProfile';\n\ntype UserBusinessProfileDecision = {\n  isThinking: boolean;\n  /**\n   * The decision of the user's business profile.\n   *\n   * - `undefined` if profile has not been fetched yet\n   * - `null` if profile has been fetched but did not match (no revoptimal id)\n   * - Empty array if profile has been fetched and matched (has revoptimal id) but no personas\n   * - Array of strings if profile has been fetched and matched (has revoptimal id) and there are\n   *   personas\n   */\n  decision: string[] | null | undefined;\n};\n\nexport type UserBusinessProfileDecider = (targetCriteria?: string[]) => UserBusinessProfileDecision;\n\n/**\n * Hook that returns helper functions for working with a user's business profile.\n *\n * The user business profile functions, when triggerred have side-effects like reading/setting\n * cookies or making RPC requets, so they should be called conditionally on them being needed.\n */\nexport function useUserBusinessProfile(): UserBusinessProfileDecider {\n  const { cookieManager, getPersona, personasRef } = useContext(AppContext);\n\n  const [needsDecision, setNeedsDecision] = useState(false);\n\n  const { data: personaResponse } = useAsyncData({\n    skip: !needsDecision, // Skip loading if we don't need the decision.\n    dataId: 'persona', // Has to be the same as in other places to hit cache.\n    dataAsync: getPersona,\n    onError: error => logger.logError({ component, error }),\n  });\n\n  const getUserBusinessProfile = useCallback<UserBusinessProfileDecider>(() => {\n    const personas = personasRef?.current;\n\n    // Check for business personas in app state first\n    if (personas?.biz !== undefined) {\n      return { isThinking: false, decision: personas.biz };\n    }\n\n    const personasCookieValue = getPersonasCookie(cookieManager);\n\n    // If there are business personas in the cookie, return them\n    if (personasCookieValue?.biz !== undefined) {\n      return { isThinking: false, decision: personasCookieValue.biz };\n    }\n\n    // Signals to load the user's business profile - only activate if not found in app state or cookie\n    if (!needsDecision) {\n      setNeedsDecision(true);\n    }\n\n    return getUserBusinessProfileImpl(personaResponse);\n  }, [cookieManager, needsDecision, personaResponse, personasRef]);\n\n  return getUserBusinessProfile;\n}\n\n/**\n * Internal helper function with the business logic.\n *\n * Extracted for testing purposes.\n */\nexport const getUserBusinessProfileImpl = (\n  personaResponse: PersonaResponse | undefined\n): UserBusinessProfileDecision => {\n  // Profile not loaded yet. Don't make a decision yet\n  if (!personaResponse) {\n    return { isThinking: true, decision: undefined };\n  }\n\n  // If the profile has been retrieved, but there is no matches\n  if (!personaResponse?.matches?.length) {\n    return { isThinking: false, decision: null };\n  }\n\n  // If the profile has been retrieved, return the business personas\n  const decision = [...personaResponse.matches];\n\n  return { isThinking: false, decision };\n};\n", "import { useCallback, useContext } from 'react';\n\nimport { AppContext } from '../AppContext';\nimport { getPersonasCookie } from '../utils/persona/personaUtils';\n\nexport type UserSnapProfileDecider = (targetCriteria?: string[]) => string[];\n\n/**\n * Hook that returns helper functions for working with a user's snap profile.\n *\n * When triggered have side-effects like reading/setting cookies.\n */\nexport function useUserSnapProfile(): UserSnapProfileDecider {\n  const { cookieManager, personasRef } = useContext(AppContext);\n\n  const getUserSnapProfile = useCallback<UserSnapProfileDecider>(() => {\n    // Check for snap personas in app state first\n    if (personasRef?.current?.snap !== undefined) {\n      return personasRef.current.snap ?? [];\n    }\n\n    const personasCookieValue = getPersonasCookie(cookieManager);\n\n    // If there are snap personas in the cookie, return them\n    if (personasCookieValue?.snap !== undefined) {\n      return personasCookieValue.snap ?? [];\n    }\n\n    return [];\n  }, [cookieManager, personasRef]);\n\n  return getUserSnapProfile;\n}\n", "import type { AbVariant } from '@snapchat/mw-contentful-schema';\n\n// Same code as used in contentful-app package for AbExperimentEntryEditor utils\n// but modified to work with MWP data structure\nexport const getLeftoverPopulation = (variantEntries: AbVariant[]): number => {\n  const variantPopulations = variantEntries.map(entry => {\n    return (entry.trafficEndRange ?? 0) - (entry.trafficStartRange ?? 0);\n  });\n  const totalPopulation = variantPopulations.reduce((acc, population) => acc + population, 0);\n  const leftoverPopulation = 100 - totalPopulation;\n\n  return leftoverPopulation;\n};\n\n// Exact all utm parameters from the url\n// Example: https://forbusiness.snapchat.com/advertising/start-snapchat-ads?_sid=PAID&utm_source=GoogleSEM&utm_medium=PAIDB2B&utm_campaign=US_G_Search_Brand_MKAG-snapchatbusiness&utm_term=US&utm_content=startsnapchatads&gad_source=1&gad_campaignid=17476413091&gbraid=0AAAAADJr79hgZXZoOxb0sxoJcKqAImxfC&gclid=CjwKCAiAlfvIBhA6EiwAcErpyXyxlGr_BKaXJMa3O6O8nxURYkWdQMG30tQs7dtZoIBMXvWz5TCnIxoCjjIQAvD_BwE\n// => {utm_source: 'GoogleSEM', utm_medium: 'PAIDB2B', utm_campaign: 'US_G_Search_Brand_MKAG-snapchatbusiness', utm_term: 'US', utm_content: 'startsnapchatads'}\nexport const extractUtmParameters = (url: string): Record<string, string> => {\n  const urlObj = new URL(url);\n  const utmParameters: Record<string, string> = {};\n\n  for (const [key, value] of urlObj.searchParams.entries()) {\n    if (key.startsWith('utm_')) {\n      utmParameters[key] = value;\n    }\n  }\n\n  return utmParameters;\n};\n", "import { css } from '@emotion/css';\nimport { m, nonMobileMediaQuery } from '@snapchat/snap-design-system-marketing';\n\n/**\n * Helps center logos vertically by ensuring wrapping <picture/> element is the same height as the\n * rendered image\n */\nexport const socialPictureCss = css`\n  display: flex;\n`;\n\nexport const socialAnchorCss = css`\n  display: flex;\n  align-items: center;\n`;\n\nexport const logoWrapperCss = css`\n  padding-block-end: ${m('--spacing-xs')};\n\n  ${nonMobileMediaQuery} {\n    padding-block-end: 0;\n  }\n`;\n", "import type {\n  FooterGroup as CustomFooterGroup,\n  FooterGroupItemsItem as CustomFooterGroupItems,\n} from '@snapchat/mw-contentful-schema';\nimport type {\n  CustomFooterGroupProps as GlobalCustomFooterGroupProps,\n  FooterGroupItem as GlobalFooterGroupItemProp,\n} from '@snapchat/mw-global-components';\n\nconst convertToGenericProps = (\n  item: CustomFooterGroupItems,\n  cookieSettingsUrl: string\n): GlobalFooterGroupItemProp | undefined => {\n  if (item.__typename === 'FooterCookiesSettingsLink') {\n    return {\n      id: item.sys.id,\n      title: item.title ?? '',\n      url: cookieSettingsUrl,\n    };\n  }\n\n  if (item.__typename === 'FooterLocaleDropdown') {\n    return undefined;\n  }\n\n  if (item.__typename === 'FooterItem') {\n    if (!item.url || !item.title) {\n      return undefined;\n    }\n\n    return {\n      analyticsLabel: item?.analytics?.label,\n      id: item.sys.id,\n      title: item.title,\n      url: item.url,\n    };\n  }\n\n  return undefined;\n};\n\nexport const filterCriteria = (\n  filterFunc: (item: CustomFooterGroupItems | CustomFooterGroup) => boolean,\n  cookieSettingsUrl: string,\n  collection?: CustomFooterGroup[]\n): GlobalCustomFooterGroupProps[] => {\n  if (!collection || !collection.length) {\n    return [];\n  }\n\n  const filterAndMapItems = (items: CustomFooterGroupItems[]): GlobalFooterGroupItemProp[] => {\n    return items.reduce((outputItems, inputItem) => {\n      if (filterFunc(inputItem)) {\n        const genericItem = convertToGenericProps(inputItem, cookieSettingsUrl);\n\n        if (genericItem) {\n          outputItems.push(genericItem);\n        }\n      }\n\n      return outputItems;\n    }, [] as GlobalFooterGroupItemProp[]);\n  };\n\n  const filterAndMapGroups = (groups: CustomFooterGroup[]): GlobalCustomFooterGroupProps[] => {\n    return groups.reduce((outputGroups, inputGroup) => {\n      if (filterFunc(inputGroup)) {\n        // if missing any key data, skip this group\n        if (!inputGroup.groupKey || !inputGroup.itemsCollection?.items) {\n          return outputGroups;\n        }\n\n        outputGroups.push({\n          items: filterAndMapItems(inputGroup.itemsCollection.items),\n          title: inputGroup.title ?? '',\n          groupKey: inputGroup.groupKey,\n        });\n      }\n\n      return outputGroups;\n    }, [] as GlobalCustomFooterGroupProps[]);\n  };\n\n  return filterAndMapGroups(collection);\n};\n", "import type { FC } from 'react';\n\nimport { Config } from '../../config';\nimport { AvalonChatWidget } from '../../sites/avalon/components/AvalonChatWidget/AvalonChatWidget';\n\n/**\n * Global components hard-coded to a specific site.\n *\n * This was build for the omnipresent chat widget for the avalon site.\n *\n * Only add similar use-cases here.\n */\nexport const HardcodedComponents: FC = () => {\n  switch (Config.site) {\n    case 'avalon': {\n      return <AvalonChatWidget />;\n    }\n    default:\n      return null;\n  }\n};\n", "import { cx } from '@emotion/css';\nimport { useContentfulImages } from '@snapchat/mw-contentful-client';\nimport { type GlobalHeaderProps, GlobalHeader } from '@snapchat/mw-global-components';\nimport type {\n  BackgroundColor,\n  GlobalHeaderNavItemAlignment,\n  MotifScheme,\n} from '@snapchat/snap-design-system-marketing';\nimport { globalHeaderHeight } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport { Config } from '../../config';\nimport type { MarketingWebConfiguration } from '../../configTypes';\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { HeaderView, PageLayoutContext } from '../../context/PageLayoutContext';\nimport { SitewideConfigurationContext } from '../../context/SitewideConfiguration/SitewideConfigurationContext';\nimport { logUserEvent } from '../../helpers/logging';\nimport { useAlternateBrandPropOverride } from '../../hooks/useAlternateBrandPropOverride';\nimport { useMotifScheme } from '../../hooks/useMotifScheme';\nimport { UserAction } from '../../types/events';\nimport { Anchor } from '../Anchor';\nimport { CartIcon } from '../Cart';\nimport { useExperiment } from '../Experiment';\nimport { Feature, useFeatureFlags } from '../FeatureFlags';\nimport { DisplayRegion, GlobalHeaderCta } from '../GlobalHeaderCta/GlobalHeaderCta';\nimport { GlobalHeaderLogo } from '../GlobalHeaderLogo';\nimport { GlobalHeaderSearch } from '../GlobalHeaderSearch';\nimport { LocalNavDesktop } from '../LocalNavDesktop/LocalNavDesktop';\nimport { LocalNavMobile } from '../LocalNavMobile/LocalNavMobile';\nimport { useConsumerContext } from '../useConsumerContext';\nimport {\n  globalHeaderSearchContainerDesktopOpenCss,\n  globalHeaderSearchContainerMobileCss,\n  headerContainerCss,\n  noMarginCss,\n  searchOpenCss,\n  siteNameCss,\n} from './Header.styles';\nimport { convertToPathAwareNavigatorGroups } from './headerNavGroupUtils';\nimport { HeaderPortal } from './HeaderPortal';\nimport { setHeaderHeight, totalHeaderHeightCssVar } from './headerSizeUtils';\n\ntype Props = {\n  config: MarketingWebConfiguration;\n};\n\nexport const Header: FC<Props> = ({ config }) => {\n  const [searchOpen, setSearchOpen] = useState(false);\n  const location = useLocation();\n  const { checkCriteria } = useExperiment();\n  const { headerView, headerBackgroundColorOverride } = useContext(PageLayoutContext);\n  const { sitewideValues } = useContext(SitewideConfigurationContext);\n  const { getImageSources } = useContentfulImages();\n\n  // This is only used in sandbox to override the global nav props for other brands\n  const alternateBrandPropOverride = useAlternateBrandPropOverride(Config, 'header');\n  const featureFlags = useFeatureFlags();\n  const enableSearchFeature = featureFlags[Feature.ENABLE_SITE_SEARCH] === 'true';\n\n  const { isUrlCurrent } = useConsumerContext();\n\n  const localNavProps = sitewideValues?.navigationBar;\n  const motifScheme = useMotifScheme(localNavProps?.brandBackgroundColor as MotifScheme);\n\n  const callsToActionCollection = localNavProps?.callsToActionCollection;\n\n  const headerMenuItemGroups = convertToPathAwareNavigatorGroups(\n    localNavProps?.headerMenuItemGroupsCollection?.items,\n    isUrlCurrent,\n    checkCriteria,\n    getImageSources\n  );\n\n  const headerContainerRef = useRef<HTMLDivElement>(null);\n\n  const resizeObserver = useMemo(() => {\n    // attach resize observer on client\n    if (typeof window !== 'undefined') {\n      let lastSize = globalHeaderHeight;\n      return new ResizeObserver(entries => {\n        const { height } = entries[0]!.contentRect;\n\n        if (lastSize !== height) {\n          lastSize = height;\n\n          document.documentElement.style.setProperty(totalHeaderHeightCssVar, `${height}px`);\n        }\n      });\n    }\n    // sets value for the variable being used in renderHtml to put that value on the root element during SSR\n    setHeaderHeight(globalHeaderHeight);\n\n    return undefined;\n    // we disable here because we only want it to run once on mount (on ssr and on client)\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  useEffect(() => {\n    if (headerContainerRef.current && resizeObserver) {\n      resizeObserver.observe(headerContainerRef.current, { box: 'border-box' });\n\n      return () => {\n        resizeObserver.disconnect();\n      };\n    }\n\n    return;\n  }, [resizeObserver]);\n\n  const elementLocation = useContext(ElementLocation).elementLocation;\n\n  if (headerView === HeaderView.NO_HEADER) {\n    return null;\n  }\n\n  // In Order: value from Contentful > value from site Config > default value\n  const siteName = localNavProps?.title ?? config.theme?.globalNavProps?.siteName ?? '';\n\n  const handleToggleExpanded = (isExpanded: boolean): void => {\n    logUserEvent({\n      eventCategory: 'Header',\n      eventAction: isExpanded ? UserAction.Open : UserAction.Close,\n      eventLabel: null,\n      context: { elementLocation },\n    });\n  };\n\n  // Construct the props for the GlobalHeader component in stages, starting with default values to use for all layouts\n  const globalHeaderProps: GlobalHeaderProps = {\n    ...config.theme?.globalNavProps,\n    motifScheme,\n    backgroundColor:\n      headerBackgroundColorOverride ??\n      (localNavProps?.backgroundColor as BackgroundColor) ??\n      undefined,\n    logo: <GlobalHeaderLogo />,\n    pathname: location.pathname,\n    siteName,\n    onToggleExpanded: handleToggleExpanded,\n  };\n\n  // Construct the props for the GlobalHeader component in stages, add props for rendering CTAs for relevant layouts\n  if (\n    headerView === HeaderView.MINIMIZED_HEADER ||\n    headerView === HeaderView.REDUCED_HEADER ||\n    headerView === HeaderView.FULL_HEADER\n  ) {\n    globalHeaderProps.cta = (\n      <>\n        <GlobalHeaderCta callsToAction={callsToActionCollection?.items} />\n        <HeaderPortal className={noMarginCss} />\n        {Config.shopify && <CartIcon />}\n      </>\n    );\n\n    globalHeaderProps.endChildrenDesktopClassName = cx(\n      config.theme?.globalNavProps?.endChildrenDesktopClassName,\n      globalHeaderSearchContainerDesktopOpenCss\n    );\n\n    globalHeaderProps.endChildrenMobileClassName = cx(\n      config.theme?.globalNavProps?.endChildrenMobileClassName,\n      globalHeaderSearchContainerMobileCss\n    );\n  }\n\n  // Construct the props for the GlobalHeader component in stages, add remaining props except local navigation\n  if (headerView === HeaderView.REDUCED_HEADER || headerView === HeaderView.FULL_HEADER) {\n    const shouldRenderSearch = location?.pathname !== '/search' && enableSearchFeature;\n\n    const siteNameLink = (\n      <Anchor href={localNavProps?.url} className={siteNameCss}>\n        {siteName}\n      </Anchor>\n    );\n\n    globalHeaderProps.className = cx(\n      config.theme?.globalNavProps?.className,\n      searchOpen ? searchOpenCss : undefined\n    );\n\n    globalHeaderProps.search = shouldRenderSearch && (\n      <GlobalHeaderSearch key=\"search\" setSearchOpen={setSearchOpen} />\n    );\n    globalHeaderProps.searchOpen = searchOpen;\n    globalHeaderProps.siteName = siteNameLink;\n  }\n\n  // Construct the props for the GlobalHeader component in stages, add local navigation\n  if (headerView === HeaderView.FULL_HEADER) {\n    // Use new item groups if using new mega-menu design, otherwise use old items\n    const renderLocalNavDesktop: FC = () => <LocalNavDesktop items={headerMenuItemGroups} />;\n\n    // Use new item groups if using new mega-menu design, otherwise use old items\n    const renderLocalNavMobile: FC = () => <LocalNavMobile items={headerMenuItemGroups} />;\n    const hasCtas = callsToActionCollection?.items.length;\n\n    globalHeaderProps.localNavDesktop = !searchOpen ? renderLocalNavDesktop({}) : null;\n    globalHeaderProps.localNavMobile = renderLocalNavMobile({});\n\n    globalHeaderProps.localNavMobileFooter = hasCtas ? (\n      <GlobalHeaderCta\n        callsToAction={callsToActionCollection?.items}\n        displayRegion={DisplayRegion.Screen}\n      />\n    ) : null;\n\n    globalHeaderProps.navItemAlignment = featureFlags[\n      Feature.GLOBAL_NAV_ITEMS_POSITION\n    ] as GlobalHeaderNavItemAlignment;\n  }\n\n  // allow for brand specific overrides for sandbox (alternateBrandPropOverride is only used on sandbox)\n  const finalGlobalHeaderProps: GlobalHeaderProps = {\n    ...globalHeaderProps,\n    ...alternateBrandPropOverride,\n  };\n\n  // Render GlobalHeader component (edge case: no wrapping element for these layouts)\n  if (headerView === HeaderView.SIMPLE_HEADER || headerView === HeaderView.MINIMIZED_HEADER) {\n    return (\n      <GlobalHeader {...finalGlobalHeaderProps} showGlobalLinks={false} showNavScreen={false} />\n    );\n  }\n\n  // Render GlobalHeader component (normal case)\n  return (\n    <div\n      data-testid=\"mwp-header\"\n      ref={headerContainerRef}\n      className={cx(headerContainerCss, config.headerProps?.className)}\n    >\n      <GlobalHeader {...finalGlobalHeaderProps} />\n    </div>\n  );\n};\n", "import type { NavigationCallToAction } from '@snapchat/mw-contentful-schema';\nimport type React from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport { CallToAction } from '../CallToAction';\nimport { DisplayMode } from '../CallToAction/types';\nimport { useExperiment } from '../Experiment';\n\ninterface Props extends NavigationCallToAction {\n  displayMode?: DisplayMode;\n}\n\nexport const NavigationCta: React.FC<Props> = props => {\n  const { checkCriteria } = useExperiment();\n  const location = useLocation();\n  const { displayMode = DisplayMode.DesktopHeader } = props;\n\n  // Get current slug from pathname (remove leading slash)\n  const currentSlug = location.pathname.substring(1) || 'home';\n\n  // Only render if the displayMode prop matches the Contentful settings\n  const matchesDisplayMode = props.displayModes?.includes(displayMode);\n  // This is mis-named, and the model should be \"showCriteria\". :facepalm:.\n  const shouldShow = !props.hideCriteria || checkCriteria(props.hideCriteria);\n  // Check if current slug matches any of the hideForSlugs\n  const isHiddenForCurrentSlug = props.hideForSlugs?.some((slug: string) => currentSlug === slug);\n\n  if (!matchesDisplayMode || !shouldShow || isHiddenForCurrentSlug) return null;\n  return props.callToAction ? <CallToAction {...props.callToAction} /> : null;\n};\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { ctaFragment } from '../CallToAction/query';\nimport { criteriaFragment } from '../Experiment';\n\n// Uses import { NavigationCallToAction } from '@snapchat/mw-contentful-schema';\nexport const navigationCtaFragment = gql`\n  fragment NavigationCta on NavigationCallToAction {\n    ...ContentfulSysId\n    callToAction {\n      ...CallToActionAll\n    }\n    displayModes\n    hideCriteria {\n      ...CriteriaAll\n    }\n    hideForSlugs\n  }\n  ${criteriaFragment}\n  ${contentfulSysIdFragment}\n  ${ctaFragment}\n`;\n\nexport const query = gql`\n  query NavigationCtaQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    cavigationCta(preview: $preview, locale: $locale, id: $id) {\n      ...NavigationCta\n    }\n  }\n  ${navigationCtaFragment}\n`;\n", "import type { NavigatorCallsToActionItem } from '@snapchat/mw-contentful-schema';\nimport { ButtonType, Size, useIsMobile } from '@snapchat/snap-design-system-marketing';\nimport cloneDeep from 'lodash-es/cloneDeep';\nimport type { FC } from 'react';\n\nimport { CallToAction } from '../CallToAction';\nimport { DisplayMode } from '../CallToAction/types';\nimport { NavigationCta } from '../NavigationCta';\n\nexport enum DisplayRegion {\n  Header = 'Header',\n  Screen = 'Screen',\n}\n\ninterface GlobalHeaderCtaProps {\n  // TODO: This should be passed in through the context.\n  displayRegion?: DisplayRegion;\n  callsToAction?: Array<NavigatorCallsToActionItem>;\n}\n\nexport const GlobalHeaderCta: FC<GlobalHeaderCtaProps> = ({\n  displayRegion = DisplayRegion.Header,\n  callsToAction,\n}) => {\n  const isMobile = useIsMobile();\n\n  if (!callsToAction) {\n    return null;\n  }\n\n  let displayMode = DisplayMode.DesktopHeader;\n\n  if (isMobile && displayRegion === DisplayRegion.Header) {\n    displayMode = DisplayMode.MobileHeader;\n  }\n\n  if (isMobile && displayRegion === DisplayRegion.Screen) {\n    displayMode = DisplayMode.MobileScreen;\n  }\n\n  const navigationCta = callsToAction.map(cta => {\n    switch (cta.__typename) {\n      // Are there any setups that dont use this NavCta?\n      case 'NavigationCallToAction': {\n        const ctaProps = cloneDeep(cta);\n        const buttonProps = ctaProps.callToAction?.presentation;\n\n        // if desktop or mobile screeen, use compact buttons\n        if (!isMobile || displayRegion === DisplayRegion.Screen) {\n          buttonProps && (buttonProps.size = Size.Compact);\n        } else {\n          // for mobile header still use flat\n          buttonProps && (buttonProps.buttonType = ButtonType.Flat);\n        }\n\n        return <NavigationCta key={cta.sys.id} {...ctaProps} displayMode={displayMode} />;\n      }\n\n      case 'CallToAction': {\n        const ctaProps = cloneDeep(cta);\n        const buttonProps = ctaProps.presentation;\n\n        // if desktop or mobile screeen, use compact buttons\n        if (!isMobile || displayRegion === DisplayRegion.Screen) {\n          buttonProps && (buttonProps.size = Size.Compact);\n        } else {\n          // for mobile header still use flat\n          buttonProps && (buttonProps.buttonType = ButtonType.Flat);\n        }\n\n        return <CallToAction key={cta.sys.id} {...ctaProps} />;\n      }\n\n      default: {\n        throw new Error(`Unknown navigation CTA ${cta.__typename}`);\n      }\n    }\n  });\n\n  return <>{navigationCta}</>;\n};\n", "import { useContentfulImages } from '@snapchat/mw-contentful-client';\nimport { Logo as LogoSDS, MessageContext } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { SitewideConfigurationContext } from '../../context/SitewideConfiguration/SitewideConfigurationContext';\nimport { combineImageSources } from '../../utils/combineImageSources';\n\nexport const GlobalHeaderLogo: FC = () => {\n  const { sitewideValues } = useContext(SitewideConfigurationContext);\n  const { formatMessage } = useContext(MessageContext);\n\n  const logoAriaLabel = formatMessage({\n    id: 'navigate-to-home',\n    defaultMessage: 'Navigate to home page',\n  });\n\n  const localNavProps = sitewideValues?.navigationBar;\n  const { getImageSources } = useContentfulImages();\n\n  if (!localNavProps) {\n    return null;\n  }\n\n  const { url, logoV2: logo } = localNavProps;\n\n  const imgSrcs = combineImageSources({\n    mobile: getImageSources(logo?.mobileMedia?.url),\n    desktop: getImageSources(logo?.media?.url),\n  });\n\n  const logoElement = (\n    <LogoSDS imgSrcs={imgSrcs} url={url} logoType={'Ghost'} ariaLabel={logoAriaLabel} />\n  );\n\n  return <>{logoElement}</>;\n};\n", "import {\n  AutoComplete as AutoCompleteSDS,\n  MessageContext,\n} from '@snapchat/snap-design-system-marketing';\nimport { noop } from 'radashi';\nimport type { ComponentProps, FC } from 'react';\nimport { useContext } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport { AppContext } from '../../AppContext';\nimport type { SearchResult } from '../Search';\n\ntype GlobalHeaderSearchProps = {\n  setSearchOpen: (open: boolean) => void;\n  autocompleteProps?: Pick<\n    ComponentProps<typeof AutoCompleteSDS>,\n    'collapsible' | 'onSeeResults' | 'initialText' | 'hideSuggestions'\n  >;\n};\n\nexport const GlobalHeaderSearch: FC<GlobalHeaderSearchProps> = ({\n  setSearchOpen,\n  autocompleteProps,\n}) => {\n  const { formatMessage } = useContext(MessageContext);\n\n  const { pathname } = useLocation();\n  const { onRedirect } = useContext(AppContext);\n\n  const onSeeResults = (term: string) => {\n    onRedirect?.(`/search?q=${encodeURIComponent(term)}`);\n  };\n\n  return (\n    <AutoCompleteSDS<SearchResult>\n      autocompleteResults={[]}\n      cancelMessage={formatMessage({\n        id: 'globalHeaderSearchCancel',\n        defaultMessage: 'Cancel',\n      })}\n      collapsible\n      disabled={pathname === '/search'}\n      hideSuggestions\n      loadingAutocompleteTerms={false}\n      onChange={noop}\n      onCollapseChange={open => setSearchOpen(open)}\n      onSeeResults={onSeeResults}\n      onSelect={noop}\n      placeholder={formatMessage({\n        id: 'placeholderSearchPageInput',\n        defaultMessage: 'Search...',\n      })}\n      shortBar={pathname !== '/search'}\n      {...autocompleteProps}\n    />\n  );\n};\n", "import type { HeaderMenuItemGroup } from '@snapchat/mw-contentful-schema';\nimport { NavigatorItemDesktop as NavigatorItemDesktopSDS } from '@snapchat/snap-design-system-marketing';\nimport { type FC, useContext } from 'react';\n\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { shouldFlushLogs } from '../../helpers/getLocalPath';\nimport { logger, logUserEvent } from '../../helpers/logging';\nimport { UserAction } from '../../types/events';\nimport { getContentfulInspectorProps } from '../../utils/contentful/getContentfulInspectorProps';\nimport type { NavigatorGroupProps } from '../Header/headerNavGroupUtils';\n\ninterface LocalNavDesktopProps {\n  items?: NavigatorGroupProps[];\n}\n\nexport const LocalNavDesktop: FC<LocalNavDesktopProps> = ({ items }) => {\n  const elementLocation = useContext(ElementLocation).elementLocation;\n\n  if (!items || !items.length) {\n    return null;\n  }\n\n  const getItemDataset = (id: string) => {\n    const { contentfulDescriptionDataset } = getContentfulInspectorProps<HeaderMenuItemGroup>({\n      entryId: id,\n      fieldIds: ['contentfulDescription'],\n    });\n\n    return contentfulDescriptionDataset;\n  };\n\n  return (\n    <>\n      {items.map(item => {\n        const {\n          sys,\n          url,\n          title,\n          isSelected,\n          analytics,\n          column1Label,\n          column1Items,\n          column2Label,\n          column2Items,\n          column3Label,\n          column3Items,\n          featuredMenuItem,\n        } = item;\n        const id = sys.id;\n\n        const handleClick = (clickUrl: string, analyticsId?: string): void => {\n          logUserEvent({\n            eventCategory: 'NavigatorItem',\n            eventAction: UserAction.Click,\n            eventLabel: analyticsId ?? clickUrl,\n            context: { targetUrl: clickUrl, elementText: title, elementLocation },\n          });\n\n          if (shouldFlushLogs(clickUrl)) {\n            void logger.flush();\n          }\n        };\n\n        return (\n          <NavigatorItemDesktopSDS\n            key={id}\n            dataset={getItemDataset(id)}\n            id={id}\n            url={url ?? ''}\n            isSelected={isSelected}\n            title={title ?? ''}\n            analytics={analytics?.label ? { label: analytics.label } : undefined}\n            col1Label={column1Label}\n            col1Items={column1Items}\n            col2Label={column2Label}\n            col2Items={column2Items}\n            col3Label={column3Label}\n            col3Items={column3Items}\n            featuredItem={featuredMenuItem}\n            onClick={handleClick}\n          />\n        );\n      })}\n    </>\n  );\n};\n", "import {\n  defaultGlobalNavMobileGroupKey,\n  GlobalHeaderContext,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext, useEffect } from 'react';\n\nimport type { NavigatorGroupProps } from '../Header/headerNavGroupUtils';\nimport { LocalNavItemMobile } from './LocalNavItemMobile';\n\ninterface LocalNavMobileProps {\n  items?: NavigatorGroupProps[];\n}\n\n/**\n * Local nav links styled to look like the global nav, but only for mobile.\n *\n * It is only on mobile that we style the local nav in the same fashion as global nav.\n */\nexport const LocalNavMobile: FC<LocalNavMobileProps> = ({ items }) => {\n  const { setGroupKey } = useContext(GlobalHeaderContext);\n\n  useEffect(() => {\n    setGroupKey?.(defaultGlobalNavMobileGroupKey);\n  }, [setGroupKey]);\n\n  if (!items || !items.length) {\n    return null;\n  }\n\n  return (\n    <>\n      {items.map((props, i) => {\n        return <LocalNavItemMobile key={`${props.sys.id}-${i}`} {...props} />;\n      })}\n    </>\n  );\n};\n", "import type { HeaderMenuItemGroup } from '@snapchat/mw-contentful-schema';\nimport {\n  GlobalNavItem as GlobalNavItemSDS,\n  NavigatorItemMobile as NavigatorItemMobileSDS,\n} from '@snapchat/snap-design-system-marketing';\nimport { type FC, useContext } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { isLocalUrl, shouldFlushLogs } from '../../helpers/getLocalPath';\nimport { logger, logUserEvent } from '../../helpers/logging';\nimport { UserAction } from '../../types/events';\nimport { getContentfulInspectorProps } from '../../utils/contentful/getContentfulInspectorProps';\nimport type { NavigatorGroupProps } from '../Header/headerNavGroupUtils';\n\nexport const LocalNavItemMobile: FC<NavigatorGroupProps> = ({\n  sys,\n  url,\n  title,\n  isSelected,\n  analytics,\n  column1Label,\n  column1Items,\n  column2Label,\n  column2Items,\n  column3Label,\n  column3Items,\n  featuredMenuItem,\n}) => {\n  const elementLocation = useContext(ElementLocation).elementLocation;\n  const { getCurrentUrl } = useContext(AppContext);\n  const { contentfulDescriptionDataset } = getContentfulInspectorProps<HeaderMenuItemGroup>({\n    entryId: sys.id,\n    fieldIds: ['contentfulDescription'],\n  });\n\n  if (!title) {\n    // Do nothing if there's no title.\n    return null;\n  }\n\n  const handleClick = (url: string, analyticsId?: string): void => {\n    logUserEvent({\n      eventAction: UserAction.Click,\n      eventCategory: 'LocalNavItemMobile',\n      eventLabel: analyticsId ?? null,\n      context: {\n        elementText: title,\n        targetUrl: url,\n        elementLocation,\n      },\n    });\n\n    if (shouldFlushLogs(url)) {\n      void logger.flush();\n    }\n  };\n\n  // this should return true for relative paths too. Prevent adding tracking para\n  const absoluteUrl = new URL(url ?? '', getCurrentUrl());\n  const isLocal = isLocalUrl(absoluteUrl);\n\n  const hasChildren = !!(\n    column1Items?.length ||\n    column2Items?.length ||\n    column3Items?.length ||\n    featuredMenuItem\n  );\n\n  return (\n    <GlobalNavItemSDS\n      showExternalIcon={!isLocal}\n      href={url}\n      title={title}\n      onClick={() => handleClick(url ?? '', analytics?.label)}\n      isSelected={isSelected}\n      dataset={contentfulDescriptionDataset}\n      addTrackingParams={!isLocal}\n      onToggle={(navTitle: string) => {\n        logUserEvent({\n          eventAction: UserAction.Click,\n          eventCategory: 'LocalNavMobile',\n          eventLabel: analytics?.label ?? null,\n          context: {\n            elementText: navTitle,\n            elementLocation,\n          },\n        });\n      }}\n    >\n      {hasChildren && (\n        <NavigatorItemMobileSDS\n          col1Label={column1Label}\n          col1Items={column1Items}\n          col2Label={column2Label}\n          col2Items={column2Items}\n          col3Label={column3Label}\n          col3Items={column3Items}\n          featuredItem={featuredMenuItem}\n          onClick={handleClick}\n        />\n      )}\n    </GlobalNavItemSDS>\n  );\n};\n", "import { useContext } from 'react';\n\nimport type { ConsumerContextProps } from './ConsumerContextProvider';\nimport { ConsumerContext } from './ConsumerContextProvider';\n\nexport const useConsumerContext = (): ConsumerContextProps => {\n  const context = useContext(ConsumerContext);\n\n  if (context === undefined) {\n    throw new Error('ConsumerContext can only be used in combination with ConsumerProvider');\n  }\n\n  return context;\n};\n", "import { css } from '@emotion/css';\nimport { m, ZIndex } from '@snapchat/snap-design-system-marketing';\n\nexport const globalHeaderSearchContainerDesktopOpenCss = css`\n  width: 500px;\n  &&& {\n    margin-left: auto;\n  }\n`;\n\nexport const globalHeaderSearchContainerMobileCss = css`\n  width: 100%;\n  &&& {\n    margin-left: auto;\n  }\n`;\n\nexport const searchOpenCss = css`\n  & > *:first-child {\n    width: 100%;\n  }\n`;\n\nexport const siteNameCss = css`\n  display: inline-block;\n  cursor: pointer;\n  color: ${m('--fg-color')};\n  text-decoration: none;\n`;\n\nexport const headerContainerCss = css`\n  position: sticky;\n  top: 0;\n  left: 0;\n  right: 0;\n  z-index: ${ZIndex.NAVIGATOR};\n`;\n\nexport const noMarginCss = css`\n  margin: 0;\n`;\n", "import type { GetImageSources } from '@snapchat/mw-contentful-client';\nimport type {\n  FeaturedHeaderMenuItem,\n  HeaderMenuItem,\n  HeaderMenuItemGroup,\n} from '@snapchat/mw-contentful-schema';\nimport type {\n  NavigatorFeaturedItemProps,\n  NavigatorItemProps,\n} from '@snapchat/snap-design-system-marketing';\n\nimport { combineImageSources } from '../../utils/combineImageSources';\nimport { getContentfulInspectorProps } from '../../utils/contentful/getContentfulInspectorProps';\nimport type { IsUrlCurrent } from '../ConsumerContextProvider';\nimport type { CriteriaChecker } from '../Experiment';\n\n/**\n * Helper Type that overrides the model from Contentful with the following:\n *\n * - Adds an `isSelected` prop to easily mark the Navigator Group as currently selected\n * - Replaces child collections to SDS-M Component Prop types\n *\n * Reasoning: We need to traverse all children to determine whether they reference the current page\n * url in order to set the `isSelected` property. We also need to transform each child for rendering\n * the relevant SDS-M component (flatten the icon/media information, transform analytics field,\n * etc.) We'll do this within the Header component to minimize React render cycles and consolidate\n * this logic for use for both Desktop and Mobile UX.\n */\nexport interface NavigatorGroupProps\n  extends Omit<\n    HeaderMenuItemGroup,\n    | '_id'\n    | 'column1MenuItemsCollection'\n    | 'column2MenuItemsCollection'\n    | 'column3MenuItemsCollection'\n    | 'featuredHeaderMenuItem'\n  > {\n  isSelected?: boolean;\n  column1Items?: NavigatorItemProps[];\n  column2Items?: NavigatorItemProps[];\n  column3Items?: NavigatorItemProps[];\n  featuredMenuItem?: NavigatorFeaturedItemProps;\n}\n\n/**\n * Processes input from Contentful to a a format that can be easily rendered:\n *\n * - Removes nav items that should be hidden based on criteria\n * - Flags top level nav items that should be marked active based on current url\n * - Converts child navigator Items to SDS-M Prop types so we can consolidate logic between Desktop\n *   and Mobile UX\n */\nexport function convertToPathAwareNavigatorGroups(\n  items?: HeaderMenuItemGroup[],\n  isUrlCurrent?: IsUrlCurrent,\n  checkCriteria?: CriteriaChecker,\n  getImageSources?: GetImageSources\n): NavigatorGroupProps[] {\n  const output: NavigatorGroupProps[] = [];\n\n  for (const item of items ?? []) {\n    const node = convertToPathAwareNavGroup(item, isUrlCurrent, checkCriteria, getImageSources);\n    node && output.push(node);\n  }\n\n  return output;\n}\n\nconst convertToPathAwareNavGroup = (\n  group: HeaderMenuItemGroup,\n  isUrlCurrent?: (url: string) => boolean,\n  checkCriteria?: CriteriaChecker,\n  getImageSources?: GetImageSources\n): NavigatorGroupProps | null => {\n  // don't render if hidden criteria is met\n  const isVisible = checkCriteria?.(group.hideCriteria) ?? true;\n\n  if (!isVisible) return null;\n\n  // default isSelected to top level nav item, but this may be overridden by child menu items\n  let isSelected = (!!group.url && isUrlCurrent?.(group.url)) ?? false;\n\n  // filters out hidden menu items and updates `isSelected` if a child menu item is the current url\n  const menuItemsReducer = (accumulator: NavigatorItemProps[], item: HeaderMenuItem) => {\n    const isVisible = checkCriteria?.(item.hideCriteria) ?? true;\n\n    // hidden, don't add to collection\n    if (!isVisible) return accumulator;\n\n    // updated parent isSelected if appropriate\n    const isItemCurrent = (!!item.url && isUrlCurrent?.(item.url)) ?? false;\n    isSelected ||= isItemCurrent;\n\n    accumulator.push({\n      title: item.title ?? '',\n      url: item.url ?? '',\n      description: item.description,\n      analytics: getAnalyticsForNavigatorItem(item),\n      icon: getIconForNavigatorItem(item),\n      media: getMediaForNavigatorItem(item, getImageSources),\n      dataset: getContentfulInspectorProps<HeaderMenuItem>({\n        entryId: item.sys.id,\n        fieldIds: ['contentfulDescription'],\n      }).contentfulDescriptionDataset,\n    });\n\n    return accumulator;\n  };\n\n  const {\n    column1MenuItemsCollection,\n    column2MenuItemsCollection,\n    column3MenuItemsCollection,\n    featuredHeaderMenuItem,\n    ...otherProps\n  } = group;\n\n  const column1Items = column1MenuItemsCollection?.items.reduce(menuItemsReducer, []);\n  const column2Items = column2MenuItemsCollection?.items.reduce(menuItemsReducer, []);\n  const column3Items = column3MenuItemsCollection?.items.reduce(menuItemsReducer, []);\n  const featuredMenuItem = getFeaturedItemForNavigatorGroup(group, getImageSources);\n\n  // updated parent isSelected if appropriate\n  const isFeaturedItemVisible = checkCriteria?.(group.featuredHeaderMenuItem?.hideCriteria) ?? true;\n\n  if (group.featuredHeaderMenuItem && isFeaturedItemVisible) {\n    const isItemCurrent =\n      (!!group.featuredHeaderMenuItem.url && isUrlCurrent?.(group.featuredHeaderMenuItem.url)) ??\n      false;\n    isSelected ||= isItemCurrent;\n  }\n\n  const output: NavigatorGroupProps = {\n    ...otherProps,\n    isSelected,\n    column1Items,\n    column2Items,\n    column3Items,\n    featuredMenuItem,\n  };\n\n  return output;\n};\n\nconst getAnalyticsForNavigatorItem = (\n  item: HeaderMenuItem | FeaturedHeaderMenuItem\n): NavigatorItemProps['analytics'] | undefined => {\n  const label = item.analytics?.label;\n\n  if (!label) return;\n\n  return {\n    label,\n  };\n};\n\nconst getIconForNavigatorItem = (\n  item: HeaderMenuItem | FeaturedHeaderMenuItem\n): NavigatorItemProps['icon'] | undefined => {\n  const iconName = item.icon?.icon;\n\n  if (!iconName) return;\n\n  return {\n    name: iconName,\n  };\n};\n\n/**\n * This helper function enforces a Business Requirement that we only render SVG images.\n *\n * This isn't enforcible within Contentful, so we do it here.\n */\nconst getMediaForNavigatorItem = (\n  item: HeaderMenuItem | FeaturedHeaderMenuItem,\n  getImageSources?: GetImageSources\n): NavigatorItemProps['media'] | undefined => {\n  // Helper function to validate if icon format is valid (must be SVG)\n  const isMediaSvg = item.icon?.media?.contentType === 'image/svg+xml';\n  const media = item.icon?.media;\n\n  if (!isMediaSvg || !media) {\n    return;\n  }\n\n  if (!getImageSources) {\n    return;\n  }\n\n  const imgSrcs = combineImageSources({\n    desktop: getImageSources(media.url),\n  });\n\n  return {\n    altText: media.description,\n    imgSrcs,\n  };\n};\n\nconst getFeaturedItemForNavigatorGroup = (\n  group: HeaderMenuItemGroup,\n  getImageSources?: GetImageSources\n): NavigatorFeaturedItemProps | undefined => {\n  if (!group.featuredHeaderMenuItem) return undefined;\n\n  const { title, url, description, ctaLabel } = group.featuredHeaderMenuItem;\n\n  return {\n    title: title ?? '',\n    url: url ?? '',\n    description,\n    ctaLabel,\n    analytics: getAnalyticsForNavigatorItem(group.featuredHeaderMenuItem),\n    icon: getIconForNavigatorItem(group.featuredHeaderMenuItem),\n    media: getMediaForNavigatorItem(group.featuredHeaderMenuItem, getImageSources),\n    dataset: getContentfulInspectorProps<FeaturedHeaderMenuItem>({\n      entryId: group.featuredHeaderMenuItem.sys.id,\n      fieldIds: ['contentfulDescription'],\n    }).contentfulDescriptionDataset,\n  };\n};\n", "import type { FC, PropsWithChildren } from 'react';\nimport { memo, useContext } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { AppContext } from '../../AppContext';\n\n// eslint-disable-next-line import/no-unused-modules\nexport const headerPortalId = 'mwp-header-portal';\n\n/**\n * Portal for rendering content directly into the header.\n *\n * Use as return React.createPortal(<element>, headerPortalId)\n */\nexport const HeaderPortal: FC<{ className?: string }> = memo(props => {\n  const { headerPortalRef } = useContext(AppContext);\n\n  return <aside className={props.className} data-testid={headerPortalId} ref={headerPortalRef} />;\n});\n\nHeaderPortal.displayName = 'HeaderPortal';\n\n/**\n * Easy insertion point into the HeaderPortal.\n *\n * Use as <IntoHeaderPortal>{.. your stuff ..}</IntoHeaderPortal>\n *\n * NOTE: The contently only gets inserted on the client. Nothing displays on the server.\n */\nexport const IntoHeaderPortal: FC<PropsWithChildren> = ({ children }) => {\n  const { headerPortalRef } = useContext(AppContext);\n\n  return headerPortalRef?.current ? createPortal(children, headerPortalRef!.current) : null;\n};\nIntoHeaderPortal.displayName = 'IntoHeaderPortal';\n", "import { globalHeaderHeight } from '@snapchat/snap-design-system-marketing';\n\n// Variable to keep track of the initial value we want to set the\n// css variable to during SSR in index.ejs.\n// ONLY to be used during SSR in the renderHtml file\nlet headerHeight = globalHeaderHeight;\n\n/** Used only for SSR to set the initial value of the css variable */\nexport const setHeaderHeight = (height: number): void => {\n  headerHeight = height;\n};\n\n/** Used only for SSR to set the initial value of the css variable */\nexport const getHeaderHeight = (): number => headerHeight;\n\n/** Css variable that keeps track of total header height */\nexport const totalHeaderHeightCssVar = '--total-header-height';\n\n/** Gets height of header from css variable. */\nexport const getHeaderHeightFromCssVar = (): number =>\n  Number.parseInt(\n    getComputedStyle(document.documentElement).getPropertyValue(totalHeaderHeightCssVar),\n    10\n  );\n", "import { GlobalComponentsContext } from '@snapchat/mw-global-components';\nimport { useGlobalComponentsContentfulQuery } from '@snapchat/mw-global-components-schema';\nimport type { MessageFormatter } from '@snapchat/snap-design-system-marketing';\nimport { defaultFormatMessage, MessageContext } from '@snapchat/snap-design-system-marketing';\nimport type { FC, PropsWithChildren } from 'react';\nimport { useContext } from 'react';\n\nimport { Config } from '../../config';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport type { Items } from '../../types/Items';\nimport { useContentfulContext } from '../useContentfulContext';\nimport { intlProviderQuery, localIntlProviderQuery } from './query';\n\ninterface Message {\n  key: string;\n  value: string;\n}\n\ninterface MessageResponse {\n  messageCollection: Items<Message>;\n}\n\nexport const IntlProvider: FC<PropsWithChildren> = ({ children }) => {\n  const context = useContentfulContext();\n  const { globalApolloClient } = useContext(GlobalComponentsContext);\n\n  const { data: localData } = useContentfulQuery<MessageResponse>(localIntlProviderQuery);\n\n  const { data: globalData } = useGlobalComponentsContentfulQuery<MessageResponse>(\n    intlProviderQuery,\n    { currentLocale: context.locale, isPreview: context.preview, isSSR: Config.isSSR },\n    { client: globalApolloClient }\n  );\n\n  const globalMessages = !globalData\n    ? null\n    : Object.fromEntries(globalData.messageCollection.items.map(m => [m.key, m.value]));\n\n  const localMessages = !localData\n    ? null\n    : Object.fromEntries(localData.messageCollection.items.map(m => [m.key, m.value]));\n\n  // Early bail until both of the message packs have been loaded.\n  // This is done to avoid an extra full-app re-render when only one of them is loaded.\n  if (!globalMessages || !localMessages) {\n    return (\n      <MessageContext.Provider value={{ formatMessage: defaultFormatMessage }}>\n        {children}\n      </MessageContext.Provider>\n    );\n  }\n\n  const messages = {\n    ...localMessages,\n    ...globalMessages, // Global message keys will override any duplicate local message key\n  };\n\n  const formatMessage: MessageFormatter = (message, vars): string => {\n    let formattedValue = messages[message.id] ?? message.defaultMessage;\n\n    if (!vars) return formattedValue;\n\n    for (const [key, value] of Object.entries(vars)) {\n      formattedValue = formattedValue.replace(`{${key}}`, value);\n    }\n\n    return formattedValue;\n  };\n\n  return <MessageContext.Provider value={{ formatMessage }}>{children}</MessageContext.Provider>;\n};\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\n\nconst messageFragment = gql`\n  fragment MessageAll on Message {\n    ...ContentfulSysId\n    key\n    value\n  }\n  ${contentfulSysIdFragment}\n`;\n\nexport const intlProviderQuery = gql`\n  query IntlMessages($preview: Boolean!, $locale: String!) {\n    messageCollection(preview: $preview, locale: $locale) {\n      items {\n        ...MessageAll\n      }\n    }\n  }\n  ${messageFragment}\n`;\n\n/** Local messages query with a different operation name to avoid cache key conflicts. */\nexport const localIntlProviderQuery = gql`\n  query LocalIntlMessages($preview: Boolean!, $locale: String!) {\n    messageCollection(preview: $preview, locale: $locale, limit: 100) {\n      items {\n        ...MessageAll\n      }\n    }\n  }\n  ${messageFragment}\n`;\n", "import type { FC } from 'react';\nimport { useContext } from 'react';\nimport { Helmet } from 'react-helmet-async';\n\nimport { AppContext } from '../../AppContext';\nimport { languageFromLocale } from './language';\n\nexport const LanguageDirective: FC = () => {\n  const appContext = useContext(AppContext);\n\n  return (\n    <Helmet>\n      <html lang={languageFromLocale(appContext?.currentLocale)} />\n    </Helmet>\n  );\n};\n\nLanguageDirective.displayName = 'LanguageDirective';\n", "import { defaultLocale } from '../../helpers/locale';\n\nexport const languageFromLocale = (locale?: string): string => {\n  const currentLocale = !locale ? defaultLocale : locale;\n  const [languageCode] = currentLocale.split('-');\n  return languageCode as string;\n};\n", "import { requestIdleCallback } from '@snapchat/polyfills';\nimport { LoadingBar as LoadingBarSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { memo, useEffect, useState } from 'react';\n\nimport { endFetchEventListeners, startFetchEventListeners } from '../../utils/fetch/customFetch';\n\n/** Loading Bar component that listens for fetch requests and handles rendering in the client */\nexport const LoadingBar: FC = memo(() => {\n  const [loadingCount, setLoadingCount] = useState(0);\n\n  useEffect(() => {\n    const startCallBack = () => {\n      setTimeout(() => {\n        setLoadingCount(loadingCount => {\n          return loadingCount + 1;\n        });\n        // Defer executing this after the current loop so we don't trigger\n        // a state change during another component's render.\n        // This fixes a react warning.\n      }, 0);\n    };\n\n    const endCallBack = () => {\n      requestIdleCallback(\n        () =>\n          setLoadingCount(loadingCount => {\n            return Math.max(0, loadingCount - 1);\n          }),\n        // Call the callback eventually.\n        { timeout: 5e3 }\n      );\n    };\n    startFetchEventListeners.add(startCallBack);\n    endFetchEventListeners.add(endCallBack);\n\n    return () => {\n      startFetchEventListeners.delete(startCallBack);\n      endFetchEventListeners.delete(endCallBack);\n    };\n  }, []);\n\n  if (loadingCount === 0) {\n    return null;\n  }\n\n  return <LoadingBarSDS className=\"react-loading-bar\" />;\n});\n\nLoadingBar.displayName = 'LoadingBar';\n", "import { connectionTimeoutMs, contentfulRequestTimeoutMs } from '@snapchat/mw-common';\nimport fetch from 'cross-fetch';\n\nimport { Config } from '../../config';\nimport { getTracer } from '../tracing/tracer';\n\n/** Event listeners that handle the start and end of a fetch request */\nexport const startFetchEventListeners = new Set<() => void>();\nexport const endFetchEventListeners = new Set<() => void>();\n\n/**\n * Wrapper around fetch which adds some bells and whistles:\n *\n * - Adds a tracing span so that we can see all fetch requests in google cloud tracing.\n * - Adds a timeout to all requests equal to the externally configured timeout to early kill\n *   long-running requests.\n */\n\nexport const customFetch: typeof fetch = (input, init) =>\n  new Promise((resolve, reject) => {\n    startFetchEventListeners.forEach(listener => listener());\n    // Starts timing this fetch. Works on both cliend and server.\n    const trace = getTracer().startSpan(`Fetch: ${input}`);\n\n    // Only using AbortController on the server (which 100% supports it).\n    // Do not use if consumer already provided an abort signal.\n    // Do not use it on the client to allow slow request to complete (or be aborted by the browser).\n    // Also AbortController is only supported by 96% of browsers, so we need to be defensive here.\n    // See: https://caniuse.com/?search=abort%20controller\n    const controller = !Config.isClient && !init?.signal ? new AbortController() : undefined;\n    let isRejected = false;\n\n    // Custom listener to report the abort error.\n    // For some reason, during testing the fetch(..).catch() didn't always fire when the abort\n    // signal is sent, which leaves the middleware forever waiting for the fetch to reply.\n    // There's no natural timeout, so it would be a memory leak.\n    controller?.signal.addEventListener('abort', () => {\n      if (!isRejected) {\n        reject(\n          new Error(\n            `Connection timed out after ${(contentfulRequestTimeoutMs / 1e3).toFixed(1)} seconds.`\n          )\n        );\n        isRejected = true;\n      }\n    });\n\n    // Setups up a timeout to abort if the request doesn't return before that.\n    const timeoutMs = String(input).includes('contentful')\n      ? contentfulRequestTimeoutMs\n      : connectionTimeoutMs;\n    const abortTimeout = setTimeout(() => {\n      controller?.abort();\n    }, timeoutMs);\n\n    // Passing the abort signal to fetch. This only works for Node 15+.\n    // But this is what allows us to release the resources and promises.\n    const initWithAbort = { ...init, signal: init?.signal ?? controller?.signal };\n\n    fetch(input, initWithAbort)\n      .then(value => {\n        resolve(value);\n      })\n      .catch(error => {\n        // Note that we avoid rejecting here if we already rejected in the abort controller event.\n        // Non-abort errors get rejected here.\n        if (!isRejected) {\n          reject(error);\n          isRejected = true;\n        }\n      })\n      .finally(() => {\n        endFetchEventListeners.forEach(listener => listener());\n        trace.endSpan();\n        clearTimeout(abortTimeout);\n      });\n  });\n\n/**\n * Helper function to retrieve the request url from the parameters for the `customFetch` function.\n * Useful when writing to logs since there are multiple ways to specify the API endpoint.\n */\nexport const getRequestUrl: (...base: Parameters<typeof customFetch>) => string = input => {\n  if (typeof input === 'string') return input;\n\n  return (input as URL).href ?? (input as Request).url;\n};\n", "import { noop } from 'radashi';\n\nimport type {\n  RunningTrace,\n  Tracer,\n  TracerEventListener,\n  TracerListenerRemover,\n} from './tracingTypes';\n\nexport class NoOpTracer implements Tracer {\n  startSpan: (name: string) => RunningTrace = _name => ({ endSpan: noop });\n  addEventListener: (callback: TracerEventListener) => TracerListenerRemover = _callback => {\n    return noop;\n  };\n}\n", "import { NoOpTracer } from './noopTracer';\nimport type { Tracer } from './tracingTypes';\n\n// This is a writeable variable because we can't import both browser and server-side implementations here.\n// eslint-disable-next-line prefer-const\nlet tracer: Tracer = new NoOpTracer();\n\nexport function getTracer(): Tracer {\n  return tracer;\n}\n\nexport function setTracer(tracerImpl: Tracer): void {\n  tracer = tracerImpl;\n}\n", "import isEqual from 'lodash/isEqual.js';\nimport type { EffectCallback } from 'react';\nimport { useEffect, useRef } from 'react';\n\n/**\n * The useEffect wrapper that ensures that the imperative callback only fires once even if the\n * component re-renders.\n *\n * This is especially important to account for this for things like logging or registering dom\n * attachment.\n *\n * This is a requirement since React 18 in strict mode.\n *\n * Using a useRef is the suggested solution by the React team.\n *\n * See: https://github.com/reactwg/react-18/discussions/18 See:\n * https://github.com/reactwg/react-18/discussions/17\n */\nexport function useImperativeEffect(callback: EffectCallback, dependencies: unknown[]): void {\n  const lastExecutionDependencies = useRef<unknown[] | null>(null);\n\n  useEffect(() => {\n    if (isEqual(lastExecutionDependencies.current, dependencies)) {\n      return;\n    }\n    lastExecutionDependencies.current = dependencies;\n    return callback();\n    // We don't need to check dependencies here because we check them at the caller side (see eslintrc)\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, dependencies);\n}\n", "import { useImperativeEffect } from '@snapchat/core-browser';\nimport { ensureSingleScript } from '@snapchat/mw-common/client';\nimport { isNullish, noop } from 'radashi';\nimport type { FC } from 'react';\n\nimport { logInfo } from '../../helpers/logging';\n\n/**\n * Component used to detect and report AdBlocker Usage.\n *\n * Imports a javascript resource that matches a naming convention that will be flagged by Ad\n * Blockers that reference the popular [EasyList\n * repository](https://github.com/easylist/easylist/tree/master), such as uBlock Origin, AdBlock,\n * AdGuard, etc.\n */\nexport const LogAdBlockUsage: FC = () => {\n  useImperativeEffect(() => {\n    // Note: cannot rely on the `onLoaded` callback as it will not fire if an AdBlocker exists\n    ensureSingleScript('detect-ad-blocker', '/openad.js', noop);\n\n    // checks whether the script was successfully imported and logs the result\n    setTimeout(() => {\n      const hasAdBlocker = isNullish(window.snapMarketingWeb?.hasAdBlocker);\n\n      logInfo({\n        eventAction: 'Exists',\n        eventCategory: 'AdBlocker',\n        eventLabel: `${hasAdBlocker}`,\n      });\n    }, 500);\n  }, []);\n\n  return null;\n};\n", "import type { FC } from 'react';\nimport { useEffect } from 'react';\n\nimport { Config } from '../../config';\nimport { logError } from '../../helpers/logging';\nimport { sanitizeCspResource } from '../../utils/url/sanitizeCspResource';\n\nconst ignoredBlockedUriBySourcePrefix: Record<string, Set<string>> = {\n  // Per discussion w/ Alex, we will not log these specific violations as they are known issues w/ gtm\n  'https://www.googletagmanager.com/gtm.js': new Set(['eval']),\n  // Per team discussion, we will not log these as they are noops\n  [`https://${Config.domainName}/mwp-chunks/`]: new Set(['eval', 'properties']),\n  // Per team discussion, we will not log these as they are noops\n  Unknown: new Set(['eval', 'inline']),\n};\n\n/** Component used to report CSP Security Violations. */\nexport const LogCspViolation: FC = () => {\n  useEffect(() => {\n    // The `securitypolicyviolation` event fires multiple times for a single violation,\n    // this way we don't log the violation more than once per app load.\n    const reported = new Set<string>();\n\n    const listener = (e: SecurityPolicyViolationEvent) => {\n      // NOTE: blockedURI and sourceFile may contain URLs with query parameters\n      const { blockedURI, violatedDirective, sourceFile } = e;\n      const key = `${blockedURI}|${violatedDirective}|${sourceFile}`;\n\n      if (reported.has(key)) return; // already reported, noop\n\n      for (const sourceFilePrefix in ignoredBlockedUriBySourcePrefix) {\n        const blockedUriValues = ignoredBlockedUriBySourcePrefix[sourceFilePrefix];\n\n        if (blockedUriValues?.has(blockedURI) && sourceFile.startsWith(sourceFilePrefix)) {\n          reported.add(key); // Add to set to bypass this check on subsequent fires\n          return; // known scenario that we don't want to log, noop\n        }\n      }\n\n      logError({\n        component: 'Csp',\n        error: 'CspViolationError',\n        message: `Blocked ${blockedURI}, ${sourceFile}, ${violatedDirective}`,\n        context: {\n          blockedUri: sanitizeCspResource(blockedURI),\n          sourceFile,\n          violatedDirective: sanitizeCspResource(violatedDirective),\n        },\n      });\n\n      reported.add(key);\n    };\n\n    document.addEventListener('securitypolicyviolation', listener);\n\n    return () => {\n      document.removeEventListener('securitypolicyviolation', listener);\n    };\n  }, []);\n\n  return null;\n};\n", "/**\n * CSP Errors may reference resources with query string parameters, etc. We'll reduce cardinality by\n * ommitting these when logging to graphene.\n */\nexport function sanitizeCspResource(resource?: string): string | undefined {\n  if (!resource) return undefined;\n\n  try {\n    const url = new URL(resource);\n    return `${url.origin}${url.pathname}`;\n  } catch {\n    return resource; // If not parseable as a URL (e.g. `eval`), return the original string\n  }\n}\n", "import basePickBy from './_basePickBy.js';\nimport hasIn from './hasIn.js';\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n  return basePickBy(object, paths, function(value, path) {\n    return hasIn(object, path);\n  });\n}\n\nexport default basePick;\n", "import basePick from './_basePick.js';\nimport flatRest from './_flatRest.js';\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n  return object == null ? {} : basePick(object, paths);\n});\n\nexport default pick;\n", "import { useImperativeEffect } from '@snapchat/core-browser';\nimport pick from 'lodash-es/pick';\nimport type { FC } from 'react';\n\nimport { logEvent, logTiming, logValue, SubscribedEventType } from '../../helpers/logging';\nimport { customFetch } from '../../utils/fetch/customFetch';\nimport type { ProfileResponse } from '../../utils/profile/profileTypes';\n\n/**\n * Logs internal timing events that have to do with the page navigation timing.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming\n */\nfunction logTimingEvents() {\n  const windowTimingEntries = performance.getEntriesByType(\n    'navigation'\n  ) as PerformanceNavigationTiming[];\n  const [timing] = windowTimingEntries;\n  // The field descriptions are in the spec: https://www.w3.org/TR/navigation-timing-2/\n  const keysToLog: Array<keyof PerformanceNavigationTiming> = [\n    'connectEnd', // DNS, proxy etc.\n    'domComplete', // Dom is laid out.\n    'domContentLoadedEventEnd', // Resources loaded.\n    'domInteractive', // Scrolling is unlocked.\n    'duration', // Total navigation duration.\n    'loadEventEnd', // Time of the load event fire.\n    'responseEnd', // Time of the server response end.\n    'transferSize', // Total data transfered for load request.\n  ];\n\n  for (const [eventVariable, eventValue] of Object.entries(pick(timing, keysToLog))) {\n    if (typeof eventValue !== 'number') continue;\n\n    if (eventVariable === 'transferSize') {\n      logValue({\n        eventCategory: 'NavigationTiming',\n        // TODO: consider dropping pathname from the label - we have other ways to track this now...\n        eventLabel: `${timing!.type} ${window.location.pathname}`,\n        eventVariable, // TODO: Find out if we need to have a sperate metric due to histogram bucketing.\n        eventValue,\n      });\n    } else {\n      logTiming({\n        eventCategory: 'NavigationTiming',\n        // TODO: consider dropping pathname from the label - we have other ways to track this now...\n        eventLabel: `${timing!.type} ${window.location.pathname}`,\n        // NOTE: We choose to not rename these fields, so that we conform\n        // to the existing web standards.\n        eventVariable,\n        eventValue,\n      });\n    }\n  }\n}\n\n/**\n * Retrieve the company profile for the user if known (otherwise returns 404). If a profile is\n * retrieved, log the id to Blizzard.\n */\nasync function logProfile() {\n  const response = await customFetch('/api/profile');\n\n  if (!response.ok) return;\n\n  const responseBody = (await response.json()) as ProfileResponse;\n\n  // if profile is part of the response body, log it\n  if (responseBody?.profiles?.length) {\n    for (const profile of responseBody.profiles) {\n      logEvent({\n        subscribedEventType: SubscribedEventType.INTERNAL,\n        eventCategory: 'PersonaMatch',\n        eventAction: 'Fetch',\n        eventLabel: `${profile.id}:${profile.tp}`,\n      });\n    }\n  }\n\n  // if internal is part of the response body, log it\n  if (responseBody.internal) {\n    logEvent({\n      subscribedEventType: SubscribedEventType.INTERNAL,\n      eventCategory: 'InternalTrafficDetection',\n      eventAction: 'Fetch',\n      eventLabel: responseBody.internal ? 'true' : 'false',\n    });\n  }\n}\n\n/**\n * Component used to ensure consistent logging of Page Load events. This should be located as close\n * to the top level App and Router components as possible.\n *\n * This avoids issues where a change to a Context value causes a parent component to rerender and\n * fire the page load events multiple times for the same location.\n */\nexport const LogPageLoad: FC = () => {\n  useImperativeEffect(() => {\n    // LEGACY: Log first page load.\n    // This is a very bad marker of when the page is loaded, because it only indicates that\n    // React has been initialized and has begun rendering. DO NOT USE THIS for analysis.\n    // This is only kept around to avoid breaking changes.\n    logEvent({\n      subscribedEventType: SubscribedEventType.FIRST_PAGE_LOAD,\n    });\n\n    void logProfile();\n  }, []);\n\n  /*\n   * Logging of the web performance based on the Performance Timing API.\n   * This is the main way in which we track page load speeds.\n   */\n  useImperativeEffect(() => {\n    if (document.readyState === 'complete') {\n      logTimingEvents();\n      return;\n    }\n\n    const listener = () => {\n      // Running the function below in a setTimeout to let 'loadEventEnd' value populate.\n      setTimeout(logTimingEvents, 0);\n    };\n\n    window.addEventListener('load', listener);\n\n    return () => {\n      window.removeEventListener('load', listener);\n    };\n  }, []);\n\n  return null;\n};\n", "import { useImperativeEffect } from '@snapchat/core-browser';\nimport { throttle } from 'radashi';\nimport { type FC, useEffect, useRef, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport { logValue } from '../../helpers/logging';\n\n/** Scroll Depth breakpoints to log (% of page height) */\nconst logScrollDepthBreakPoints = [25, 50, 75, 90, 100];\n\n/**\n * Component used to ensure consistent logging of Scroll Depth for a page. Purposely does not\n * distinguish between automated and user-driven scrolling.\n *\n * Only fires scroll depth events once per page - does not retrigger if the user scrolls up and\n * down.\n */\nexport const LogScrollDepth: FC = () => {\n  const { pathname } = useLocation();\n  const maxScrollDepth = useRef(0);\n  const [currScrollDepth, setCurrScrollDepth] = useState(0);\n\n  // Add throttled event listener to scroll event\n  useEffect(() => {\n    const listener = throttle({ interval: 500 }, () => {\n      const scrollY = window.scrollY;\n      const scrollHeight = document.documentElement.scrollHeight - window.innerHeight;\n      const scrollDepth = scrollY / scrollHeight;\n      const roundedScrollDepth = Math.round(scrollDepth * 100);\n      setCurrScrollDepth(roundedScrollDepth);\n    });\n\n    window.addEventListener('scroll', listener, { passive: true });\n\n    return () => {\n      window.removeEventListener('scroll', listener);\n    };\n  }, [setCurrScrollDepth]);\n\n  // reset maxScrollDepth on location change\n  useImperativeEffect(() => {\n    maxScrollDepth.current = 0;\n  }, [pathname]);\n\n  // log scrollDepth\n  useImperativeEffect(() => {\n    if (currScrollDepth <= maxScrollDepth.current) return;\n\n    for (let i = 0; i < logScrollDepthBreakPoints.length; i++) {\n      const breakpoint = logScrollDepthBreakPoints[i]!;\n      const nextBreakpoint = logScrollDepthBreakPoints[i + 1];\n      const isLastBreakpoint = !nextBreakpoint;\n\n      if (\n        maxScrollDepth.current >= breakpoint || // already logged current breakpoint\n        currScrollDepth < breakpoint || // does not satisfy current breakpoint\n        (!isLastBreakpoint && currScrollDepth >= nextBreakpoint) // satisfies later breakpoint\n      )\n        continue;\n\n      logValue({\n        eventCategory: 'LogScrollDepth',\n        eventLabel: `scroll breakpoint: ${breakpoint}%`,\n        eventVariable: 'scroll_percentage',\n        eventValue: currScrollDepth,\n      });\n      // early exit - no need to check for other logging scenarios\n      break;\n    }\n\n    maxScrollDepth.current = currScrollDepth;\n  }, [currScrollDepth]);\n\n  // Component has no UI, return null\n  return null;\n};\n", "import { Site } from '@snapchat/mw-common';\nimport { lazyComponent } from '@snapchat/mw-common/client';\nimport type { MotifRootProps } from '@snapchat/snap-design-system-marketing';\nimport { MotifRoot } from '@snapchat/snap-design-system-marketing';\nimport { type FC, type PropsWithChildren, useContext } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport { snapMotif } from '../../brands/snap/snapMotif';\nimport { Config } from '../../config';\nimport { UrlParameter } from '../../constants/urlParameters';\nimport { ghostMotif } from '../../sites/for-business/ghostMotif';\nimport { customBlueMotif } from '../../styles/customBlueMotif';\nimport { customGreenMotif } from '../../styles/customGreenMotif';\nimport { Feature, useFeatureFlags } from '../FeatureFlags';\nimport { SuspenseWrapper } from '../SuspenseWrapper';\n\nconst LazyCustomMotifHandler = lazyComponent(async () =>\n  import('./LazyCustomMotifHandler').then(module => ({\n    default: module.LazyCustomMotifHandler,\n  }))\n);\n\n/**\n * Wrapper for motif root that lets us run feature flags for motifs. Currently no experiments being\n * run, but keeping the wrapper for future use.\n */\nexport const MotifRootWrapper: FC<PropsWithChildren<MotifRootProps>> = ({\n  children,\n  motif,\n  ...passThroughProps\n}) => {\n  const { getCurrentUrl } = useContext(AppContext);\n  const featureFlags = useFeatureFlags();\n\n  let finalMotif = motif;\n\n  const url = new URL(getCurrentUrl());\n  const useAlternateMotif = url.searchParams.get(UrlParameter.USE_ALTERNATE_MOTIF);\n\n  if (\n    featureFlags[Feature.USE_GHOST_MOTIF] === 'true' &&\n    // lock to only for business site\n    Config.site === Site.FOR_BUSINESS\n  ) {\n    finalMotif = ghostMotif;\n  }\n\n  if (Config.isDeploymentTypeProd) {\n    // Do nothing. The theme is cached, so we can't turn on the easter egg.\n  } else if (useAlternateMotif === 'true' || useAlternateMotif === 'green') {\n    finalMotif = customGreenMotif;\n  } else if (useAlternateMotif === 'blue') {\n    finalMotif = customBlueMotif;\n    // this only works for sandbox site because it's the only site that can toggle motifs\n  } else if (useAlternateMotif === 'snap' && Config.site === Site.SANDBOX) {\n    finalMotif = snapMotif;\n  } else if (useAlternateMotif === 'figma-upload') {\n    return (\n      <SuspenseWrapper fallbackElement={<p>...Loading</p>}>\n        <LazyCustomMotifHandler motif={motif} {...passThroughProps}>\n          {children}\n        </LazyCustomMotifHandler>\n      </SuspenseWrapper>\n    );\n  }\n\n  return (\n    <MotifRoot motif={finalMotif} {...passThroughProps}>\n      {children}\n    </MotifRoot>\n  );\n};\n", "import { snapMotif as snapMotifSdsm } from '@snapchat/snap-design-system-marketing';\n/**\n * Reference to the snap motif from SDS-M. We re-export it here so it can be excluded by the bundler\n * on the client side for non-snap sites.\n */\nexport const snapMotif = snapMotifSdsm;\n", "import {\n  type Motif,\n  defaultMotif,\n  FontFamily,\n  m,\n  mergeMotifs,\n  MotifComponent,\n  MotifScheme,\n} from '@snapchat/snap-design-system-marketing';\n\n/** Generated by figmaTokensImport on 2023-11-18T04:39:42.862Z. */\nexport const customBlueMotif: Motif = mergeMotifs(defaultMotif, {\n  name: 'Blue',\n  fontFamily: [FontFamily.GHOST_SANS],\n  [MotifScheme.DEFAULT]: {\n    name: 'Imported Deafult',\n    legacyName: 'Yellow',\n    [MotifComponent.HYPERLINK]: {\n      '--hyperlink-desktop-font-text-decoration': 'underline',\n      '--hyperlink-mobile-font-text-decoration': 'underline',\n      '--hyperlink-mobile-font-weight': 'Medium',\n      '--hyperlink-desktop-font-weight': 'Medium',\n      '--hyperlink-color': `${m('--action-text-hover-color')}`,\n    },\n    [MotifComponent.ROOT]: {\n      '--border-radius-l': '12px',\n      '--border-radius-xl': '16px',\n      '--box-shadow-l': '0px 16px 32px 0 #000 12%',\n      '--bg-color': m('--palette-blue-v100'),\n      '--action-text-default-color': m('--neutral-v500'),\n      '--action-text-hover-color': m('--neutral-v600'),\n    },\n    [MotifComponent.BUTTON]: {\n      '--button-primary-fg-color': m('--palette-blue-v50'),\n      '--button-secondary-bg-color': m('--palette-blue-v50'),\n      '--button-secondary-hover-bg-color': m('--palette-blue-v50'),\n      '--button-secondary-border-color': m('--palette-blue-v50'),\n      '--button-secondary-hover-border-color': m('--palette-blue-v50'),\n      '--button-flat-fg-color': `${m('--fg-color')}`,\n      '--button-border-radius': `${m('--border-radius-s')}`,\n      '--button-hover-shadow': `${m('--box-shadow-l')}`,\n      '--button-regular-padding': 'var(--spacing-s) var(--spacing-m)',\n      '--button-compact-padding': 'var(--spacing-xs) var(--spacing-m)',\n    },\n    [MotifComponent.HEADER]: {\n      '--global-header-nav-screen-fg-color': m('--neutral-v650'),\n    },\n    [MotifComponent.BLOCK]: {\n      '--block-eyebrow-color': m('--neutral-v700'),\n      '--block-title-color': m('--neutral-v700'),\n      '--block-subtitle-color': m('--neutral-v700'),\n    },\n    [MotifComponent.TABS]: {},\n    [MotifComponent.BREAK]: {},\n    [MotifComponent.ACCORDION]: {\n      '--accordion-header-color': `${m('--fg-color')}`,\n      '--accordion-divider-border-color': `${m('--fg-color')}`,\n    },\n    [MotifComponent.QUOTE]: {\n      '--quote-bg-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.FOOTER]: {\n      '--footer-bg-color': `${m('--bg-color')}`,\n      '--footer-divider-border-color': `${m('--fg-color')}`,\n      '--footer-bar-bg-color': `${m('--bg-color')}`,\n    },\n    [MotifComponent.SUMMARY_CARD]: {\n      '--summary-card-title-color': m('--neutral-v700'),\n      '--summary-card-description-color': m('--neutral-v600'),\n      '--summary-card-bg-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.FORM]: {\n      '--form-input-bg-color': m('--palette-blue-v50'),\n      '--form-input-border-radius': `${m('--border-radius-xl')}`,\n      '--form-input-padding': 'var(--spacing-m) var(--spacing-l)',\n      '--form-grid-gap': `${m('--spacing-m')}`,\n    },\n    [MotifComponent.FOOTNOTE]: {\n      '--footnote-fg-color': m('--neutral-v500'),\n      '--footnote-bg-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.DROPDOWN_MENU]: {\n      '--dropdown-menu-bg-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.BANNER]: {\n      '--banner-bg-color': `${m('--bg-color')}`,\n      '--banner-fg-color': `${m('--fg-color')}`,\n    },\n    [MotifComponent.CONTENT]: {\n      '--content-mobile-grid-gap': `${m('--spacing-l')}`,\n    },\n    [MotifComponent.MOSAIC]: {\n      '--mosaic-border-radius': '24px',\n      '--mosaic-grid-gap': '32px',\n      '--mosaic-highlight-color': m('--palette-blue-v100'),\n      '--mosaic-title-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.MEDIA]: {},\n    [MotifComponent.SEARCH]: {},\n    [MotifComponent.PAGINATION]: {},\n    [MotifComponent.SIDE_NAVIGATION]: {},\n    [MotifComponent.SPINNER]: {\n      '--spinner-fg-color': `${m('--button-primary-fg-color')}`,\n    },\n    [MotifComponent.MODAL]: {\n      '--modal-bg-color': 'rgba(0,0,0,0.7)',\n      '--modal-close-fg-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.ICON_BUTTON]: {\n      '--icon-button-bg-color': m('--neutral-v700'),\n      '--icon-button-hover-bg-color': m('--neutral-v600'),\n      '--icon-button-disabled-bg-color': 'rgba(0,0,0,0)',\n    },\n  },\n  [MotifScheme.SECONDARY]: {\n    name: 'Imported secondary',\n    legacyName: 'Black',\n    [MotifComponent.HYPERLINK]: {\n      '--hyperlink-desktop-font-text-decoration': 'underline',\n      '--hyperlink-mobile-font-text-decoration': 'underline',\n      '--hyperlink-mobile-font-weight': 'Medium',\n      '--hyperlink-desktop-font-weight': 'Medium',\n      '--hyperlink-color': `${m('--action-text-hover-color')}`,\n    },\n    [MotifComponent.ROOT]: {\n      '--box-shadow-s': '0px 4px 8px 0 rgba(0, 0, 0, 0.12)',\n      '--box-shadow-m': '0px 8px 16px 0 rgba(0, 0, 0, 0.12)',\n      '--border-radius-xs': '1px',\n      '--border-radius-s': '4px',\n      '--border-radius-m': '8px',\n      '--border-radius-l': '12px',\n      '--border-radius-xl': '16px',\n      '--spacing-xxxs': '2px',\n      '--spacing-xxs': '4px',\n      '--spacing-xs': '8px',\n      '--spacing-s': '12px',\n      '--spacing-m': '16px',\n      '--spacing-l': '24px',\n      '--spacing-xl': '32px',\n      '--spacing-xxl': '40px',\n      '--spacing-xxxxl': '64px',\n      '--box-shadow-l': '0px 16px 32px 0 #000 12%',\n      '--fg-color': m('--palette-blue-v50'),\n      '--action-text-default-color': m('--neutral-v500'),\n      '--action-text-hover-color': m('--neutral-v600'),\n      '--action-text-active-color': m('--neutral-v700'),\n    },\n    [MotifComponent.BUTTON]: {\n      '--button-primary-bg-color': m('--palette-blue-v100'),\n      '--button-primary-hover-bg-color': m('--palette-blue-v100'),\n      '--button-primary-border-color': m('--palette-blue-v100'),\n      '--button-primary-hover-border-color': m('--palette-blue-v100'),\n      '--button-secondary-bg-color': m('--palette-blue-v50'),\n      '--button-secondary-hover-bg-color': m('--palette-blue-v50'),\n      '--button-secondary-border-color': m('--palette-blue-v50'),\n      '--button-secondary-hover-border-color': m('--palette-blue-v50'),\n      '--button-flat-fg-color': m('--palette-blue-v50'),\n      '--button-border-radius': `${m('--border-radius-s')}`,\n      '--button-hover-shadow': `${m('--box-shadow-l')}`,\n      '--button-regular-padding': 'var(--spacing-s) var(--spacing-m)',\n      '--button-compact-padding': 'var(--spacing-xs) var(--spacing-m)',\n    },\n    [MotifComponent.HEADER]: {\n      '--global-header-nav-screen-fg-color': m('--neutral-v650'),\n      '--global-header-fg-color': m('--neutral-v200'),\n    },\n    [MotifComponent.BLOCK]: {\n      '--block-eyebrow-color': m('--palette-blue-v50'),\n      '--block-title-color': m('--palette-blue-v50'),\n      '--block-subtitle-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.TABS]: {\n      '--tabs-underline-color': m('--neutral-v600'),\n    },\n    [MotifComponent.BREAK]: {},\n    [MotifComponent.ACCORDION]: {\n      '--accordion-header-color': `${m('--fg-color')}`,\n      '--accordion-divider-border-color': `${m('--fg-color')}`,\n    },\n    [MotifComponent.QUOTE]: {\n      '--quote-bg-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.FOOTER]: {\n      '--footer-bg-color': `${m('--bg-color')}`,\n      '--footer-divider-border-color': `${m('--fg-color')}`,\n      '--footer-bar-bg-color': `${m('--bg-color')}`,\n    },\n    [MotifComponent.SUMMARY_CARD]: {\n      '--summary-card-title-color': m('--neutral-v700'),\n      '--summary-card-description-color': m('--neutral-v600'),\n      '--summary-card-bg-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.FORM]: {\n      '--form-input-bg-color': m('--palette-blue-v50'),\n      '--form-input-border-radius': `${m('--border-radius-xl')}`,\n      '--form-input-padding': 'var(--spacing-m) var(--spacing-l)',\n      '--form-grid-gap': `${m('--spacing-m')}`,\n    },\n    [MotifComponent.FOOTNOTE]: {\n      '--footnote-fg-color': m('--neutral-v500'),\n      '--footnote-bg-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.DROPDOWN_MENU]: {\n      '--dropdown-menu-bg-color': m('--neutral-v600'),\n    },\n    [MotifComponent.BANNER]: {\n      '--banner-bg-color': `${m('--bg-color')}`,\n      '--banner-fg-color': `${m('--fg-color')}`,\n    },\n    [MotifComponent.CONTENT]: {\n      '--content-mobile-grid-gap': `${m('--spacing-l')}`,\n    },\n    [MotifComponent.MOSAIC]: {\n      '--mosaic-border-radius': '24px',\n      '--mosaic-grid-gap': '32px',\n      '--mosaic-highlight-color': m('--palette-blue-v100'),\n      '--mosaic-title-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.MEDIA]: {},\n    [MotifComponent.SEARCH]: {\n      '--search-no-results-bg-color': m('--neutral-v150'),\n      '--search-no-results-fg-color': m('--neutral-v650'),\n    },\n    [MotifComponent.PAGINATION]: {\n      '--pagination-item-color': m('--neutral-v400'),\n      '--pagination-item-hover-color': m('--neutral-v300'),\n      '--pagination-item-active-color': m('--palette-blue-v50'),\n      '--pagination-indicator-hover-color': m('--neutral-v300'),\n    },\n    [MotifComponent.SPINNER]: {\n      '--spinner-fg-color': `${m('--button-primary-fg-color')}`,\n    },\n    [MotifComponent.MODAL]: {\n      '--modal-bg-color': 'rgba(0,0,0,0.7)',\n      '--modal-close-bg-color': m('--neutral-v700'),\n      '--modal-close-fg-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.ICON_BUTTON]: {\n      '--icon-button-hover-bg-color': m('--neutral-v200'),\n      '--icon-button-disabled-bg-color': m('--neutral-v500'),\n      '--icon-button-border-color': m('--neutral-v0'),\n      '--icon-button-fg-color': m('--neutral-v700'),\n      '--icon-button-disabled-fg-color': m('--neutral-v400'),\n    },\n  },\n  [MotifScheme.TERTIARY]: {\n    name: 'Imported tertiary',\n    legacyName: 'White',\n    [MotifComponent.HYPERLINK]: {\n      '--hyperlink-desktop-font-text-decoration': 'underline',\n      '--hyperlink-mobile-font-text-decoration': 'underline',\n      '--hyperlink-mobile-font-weight': 'Medium',\n      '--hyperlink-desktop-font-weight': 'Medium',\n      '--hyperlink-color': `${m('--action-text-hover-color')}`,\n    },\n    [MotifComponent.ROOT]: {\n      '--box-shadow-s': '0px 4px 8px 0 rgba(0, 0, 0, 0.12)',\n      '--box-shadow-m': '0px 8px 16px 0 rgba(0, 0, 0, 0.12)',\n      '--border-radius-xs': '1px',\n      '--border-radius-s': '4px',\n      '--border-radius-m': '8px',\n      '--border-radius-l': '12px',\n      '--border-radius-xl': '16px',\n      '--spacing-xxxs': '2px',\n      '--spacing-xxs': '4px',\n      '--spacing-xs': '8px',\n      '--spacing-s': '12px',\n      '--spacing-m': '16px',\n      '--spacing-l': '24px',\n      '--spacing-xl': '32px',\n      '--spacing-xxl': '40px',\n      '--spacing-xxxxl': '64px',\n      '--box-shadow-l': '0px 16px 32px 0 #000 12%',\n      '--bg-color': m('--palette-blue-v50'),\n      '--action-text-default-color': m('--neutral-v500'),\n      '--action-text-hover-color': m('--neutral-v600'),\n    },\n    [MotifComponent.BUTTON]: {\n      '--button-primary-bg-color': m('--palette-blue-v100'),\n      '--button-primary-hover-bg-color': m('--palette-blue-v100'),\n      '--button-primary-border-color': m('--palette-blue-v100'),\n      '--button-primary-hover-border-color': m('--palette-blue-v100'),\n      '--button-secondary-fg-color': m('--palette-blue-v50'),\n      '--button-border-radius': `${m('--border-radius-s')}`,\n      '--button-hover-shadow': `${m('--box-shadow-l')}`,\n      '--button-regular-padding': 'var(--spacing-s) var(--spacing-m)',\n      '--button-compact-padding': 'var(--spacing-xs) var(--spacing-m)',\n    },\n    [MotifComponent.HEADER]: {\n      '--global-header-nav-screen-bg-color': m('--palette-blue-v50'),\n      '--global-header-nav-screen-fg-color': m('--neutral-v650'),\n      '--global-header-nav-screen-global-links-bg-color': m('--palette-blue-v50'),\n      '--global-header-fg-color': m('--neutral-v650'),\n    },\n    [MotifComponent.BLOCK]: {\n      '--block-eyebrow-color': m('--neutral-v700'),\n      '--block-title-color': m('--neutral-v700'),\n      '--block-subtitle-color': m('--neutral-v700'),\n    },\n    [MotifComponent.TABS]: {},\n    [MotifComponent.BREAK]: {},\n    [MotifComponent.ACCORDION]: {\n      '--accordion-header-color': `${m('--fg-color')}`,\n      '--accordion-divider-border-color': `${m('--fg-color')}`,\n    },\n    [MotifComponent.QUOTE]: {\n      '--quote-bg-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.FOOTER]: {\n      '--footer-bg-color': `${m('--bg-color')}`,\n    },\n    [MotifComponent.SUMMARY_CARD]: {\n      '--summary-card-title-color': m('--neutral-v700'),\n      '--summary-card-description-color': m('--neutral-v600'),\n      '--summary-card-bg-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.FORM]: {\n      '--form-input-bg-color': m('--palette-blue-v50'),\n      '--form-input-border-radius': `${m('--border-radius-xl')}`,\n      '--form-input-padding': 'var(--spacing-m) var(--spacing-l)',\n      '--form-grid-gap': `${m('--spacing-m')}`,\n    },\n    [MotifComponent.FOOTNOTE]: {\n      '--footnote-fg-color': m('--neutral-v500'),\n      '--footnote-bg-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.DROPDOWN_MENU]: {\n      '--dropdown-menu-bg-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.BANNER]: {\n      '--banner-bg-color': `${m('--bg-color')}`,\n      '--banner-fg-color': `${m('--fg-color')}`,\n    },\n    [MotifComponent.CONTENT]: {\n      '--content-mobile-grid-gap': `${m('--spacing-l')}`,\n    },\n    [MotifComponent.MOSAIC]: {\n      '--mosaic-border-radius': '24px',\n      '--mosaic-grid-gap': '32px',\n      '--mosaic-highlight-color': m('--palette-blue-v100'),\n      '--mosaic-title-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.MEDIA]: {},\n    [MotifComponent.SEARCH]: {\n      '--search-no-results-bg-color': m('--neutral-v150'),\n      '--search-no-results-fg-color': m('--neutral-v650'),\n    },\n    [MotifComponent.PAGINATION]: {},\n    [MotifComponent.SPINNER]: {\n      '--spinner-fg-color': `${m('--button-primary-fg-color')}`,\n    },\n    [MotifComponent.MODAL]: {\n      '--modal-bg-color': 'rgba(0,0,0,0.7)',\n      '--modal-close-bg-color': m('--neutral-v700'),\n      '--modal-close-fg-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.ICON_BUTTON]: {\n      '--icon-button-bg-color': m('--neutral-v700'),\n      '--icon-button-hover-bg-color': m('--neutral-v600'),\n      '--icon-button-disabled-bg-color': 'rgba(0,0,0,0)',\n    },\n  },\n  [MotifScheme.QUATERNARY]: {\n    name: 'Imported quaternary',\n    legacyName: 'Gray',\n    [MotifComponent.HYPERLINK]: {\n      '--hyperlink-desktop-font-text-decoration': 'underline',\n      '--hyperlink-mobile-font-text-decoration': 'underline',\n      '--hyperlink-mobile-font-weight': 'Medium',\n      '--hyperlink-desktop-font-weight': 'Medium',\n      '--hyperlink-color': `${m('--action-text-hover-color')}`,\n    },\n    [MotifComponent.ROOT]: {\n      '--box-shadow-s': '0px 4px 8px 0 rgba(0, 0, 0, 0.12)',\n      '--box-shadow-m': '0px 8px 16px 0 rgba(0, 0, 0, 0.12)',\n      '--border-radius-xs': '1px',\n      '--border-radius-s': '4px',\n      '--border-radius-m': '8px',\n      '--border-radius-l': '12px',\n      '--border-radius-xl': '16px',\n      '--spacing-xxxs': '2px',\n      '--spacing-xxs': '4px',\n      '--spacing-xs': '8px',\n      '--spacing-s': '12px',\n      '--spacing-m': '16px',\n      '--spacing-l': '24px',\n      '--spacing-xl': '32px',\n      '--spacing-xxl': '40px',\n      '--spacing-xxxxl': '64px',\n      '--box-shadow-l': '0px 16px 32px 0 #000 12%',\n      '--action-text-default-color': m('--neutral-v500'),\n      '--action-text-hover-color': m('--neutral-v600'),\n    },\n    [MotifComponent.BUTTON]: {\n      '--button-primary-bg-color': m('--palette-blue-v100'),\n      '--button-primary-hover-bg-color': m('--palette-blue-v100'),\n      '--button-primary-border-color': m('--palette-blue-v100'),\n      '--button-primary-hover-border-color': m('--palette-blue-v100'),\n      '--button-secondary-bg-color': m('--palette-blue-v50'),\n      '--button-secondary-hover-bg-color': m('--palette-blue-v50'),\n      '--button-secondary-border-color': m('--palette-blue-v50'),\n      '--button-secondary-hover-border-color': m('--palette-blue-v50'),\n      '--button-border-radius': `${m('--border-radius-s')}`,\n      '--button-hover-shadow': `${m('--box-shadow-l')}`,\n      '--button-regular-padding': 'var(--spacing-s) var(--spacing-m)',\n      '--button-compact-padding': 'var(--spacing-xs) var(--spacing-m)',\n    },\n    [MotifComponent.HEADER]: {\n      '--global-header-nav-screen-bg-color': m('--palette-blue-v50'),\n      '--global-header-nav-screen-fg-color': m('--neutral-v650'),\n      '--global-header-nav-screen-global-links-bg-color': m('--palette-blue-v50'),\n      '--global-header-fg-color': m('--neutral-v650'),\n    },\n    [MotifComponent.BLOCK]: {\n      '--block-eyebrow-color': m('--palette-blue-v200'),\n      '--block-title-color': m('--palette-blue-v200'),\n      '--block-subtitle-color': m('--neutral-v700'),\n    },\n    [MotifComponent.TABS]: {},\n    [MotifComponent.BREAK]: {},\n    [MotifComponent.ACCORDION]: {\n      '--accordion-header-color': `${m('--fg-color')}`,\n      '--accordion-divider-border-color': `${m('--fg-color')}`,\n    },\n    [MotifComponent.QUOTE]: {\n      '--quote-bg-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.FOOTER]: {\n      '--footer-bg-color': `${m('--bg-color')}`,\n      '--footer-bar-bg-color': `${m('--bg-color')}`,\n    },\n    [MotifComponent.SUMMARY_CARD]: {\n      '--summary-card-title-color': m('--neutral-v700'),\n      '--summary-card-description-color': m('--neutral-v600'),\n      '--summary-card-bg-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.FORM]: {\n      '--form-input-bg-color': m('--palette-blue-v50'),\n      '--form-input-border-radius': `${m('--border-radius-xl')}`,\n      '--form-input-padding': 'var(--spacing-m) var(--spacing-l)',\n      '--form-grid-gap': `${m('--spacing-m')}`,\n    },\n    [MotifComponent.FOOTNOTE]: {\n      '--footnote-fg-color': m('--neutral-v500'),\n      '--footnote-bg-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.DROPDOWN_MENU]: {\n      '--dropdown-menu-bg-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.BANNER]: {\n      '--banner-bg-color': `${m('--bg-color')}`,\n      '--banner-fg-color': `${m('--fg-color')}`,\n    },\n    [MotifComponent.CONTENT]: {\n      '--content-mobile-grid-gap': `${m('--spacing-l')}`,\n    },\n    [MotifComponent.MOSAIC]: {\n      '--mosaic-border-radius': '24px',\n      '--mosaic-grid-gap': '32px',\n      '--mosaic-highlight-color': m('--palette-blue-v100'),\n      '--mosaic-title-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.MEDIA]: {},\n    [MotifComponent.SEARCH]: {\n      '--search-no-results-bg-color': m('--neutral-v150'),\n      '--search-no-results-fg-color': m('--neutral-v650'),\n    },\n    [MotifComponent.PAGINATION]: {},\n    [MotifComponent.SPINNER]: {\n      '--spinner-fg-color': `${m('--button-primary-fg-color')}`,\n    },\n    [MotifComponent.MODAL]: {\n      '--modal-bg-color': 'rgba(0,0,0,0.7)',\n      '--modal-close-bg-color': m('--neutral-v700'),\n      '--modal-close-fg-color': m('--palette-blue-v50'),\n    },\n    [MotifComponent.ICON_BUTTON]: {\n      '--icon-button-bg-color': m('--neutral-v700'),\n      '--icon-button-hover-bg-color': m('--neutral-v600'),\n      '--icon-button-disabled-bg-color': 'rgba(0,0,0,0)',\n    },\n  },\n});\n", "import {\n  type Motif,\n  defaultMotif,\n  FontFamily,\n  Green,\n  m,\n  mergeMotifs,\n  MotifComponent,\n  MotifScheme,\n} from '@snapchat/snap-design-system-marketing';\n\n/** Generated by figmaTokensImport on 2023-10-30T22:41:44.824Z. */\nexport const customGreenMotif: Motif = mergeMotifs(defaultMotif, {\n  name: 'Green',\n  fontFamily: [FontFamily.GHOST_SANS],\n  [MotifScheme.DEFAULT]: {\n    name: 'Imported Deafult',\n    legacyName: 'Yellow',\n    [MotifComponent.ROOT]: {\n      '--border-radius-l': '12px',\n      '--border-radius-xl': '16px',\n      '--bg-color': Green.V100,\n      '--fg-color': '#042500',\n    },\n    [MotifComponent.BUTTON]: {\n      '--button-primary-bg-color': '#042500',\n      '--button-primary-hover-bg-color': '#042500',\n      '--button-primary-border-color': '#042500',\n      '--button-primary-hover-border-color': '#042500',\n      '--button-primary-fg-color': '#f0fff0',\n      '--button-secondary-bg-color': '#f0fff0',\n      '--button-secondary-hover-bg-color': '#f0fff0',\n      '--button-secondary-border-color': '#f0fff0',\n      '--button-secondary-hover-border-color': '#f0fff0',\n      '--button-secondary-fg-color': '#042500',\n      '--button-flat-fg-color': `${m('--fg-color')}`,\n      '--button-border-radius': `${m('--border-radius-m')}`,\n      '--button-hover-shadow': `${m('--box-shadow-l')}`,\n      '--button-regular-padding': 'var(--spacing-s) var(--spacing-xl)',\n      '--button-compact-padding': 'var(--spacing-xs) var(--spacing-m)',\n    },\n    [MotifComponent.HEADER]: {},\n    [MotifComponent.BLOCK]: {\n      '--block-eyebrow-color': '#042500',\n      '--block-title-color': '#042500',\n      '--block-subtitle-color': '#042500',\n    },\n    [MotifComponent.BREAK]: {},\n    [MotifComponent.ACCORDION]: {\n      '--accordion-header-color': `${m('--fg-color')}`,\n    },\n    [MotifComponent.QUOTE]: {\n      '--quote-bg-color': '#f0fff0',\n      '--quote-fg-color': '#042500',\n    },\n    [MotifComponent.FOOTER]: {\n      '--footer-bg-color': `${m('--bg-color')}`,\n      '--footer-bar-bg-color': `${m('--bg-color')}`,\n    },\n    [MotifComponent.FORM]: {\n      '--form-grid-gap': `${m('--spacing-m')}`,\n    },\n    [MotifComponent.FOOTNOTE]: {},\n    [MotifComponent.DROPDOWN_MENU]: {\n      '--dropdown-menu-bg-color': '#f0fff0',\n      '--dropdown-item-fg-color': m('--neutral-v500'),\n      '--dropdown-item-fg-active-color': '#042500',\n      '--dropdown-item-bg-hover-color': '#c6dfc6',\n    },\n    [MotifComponent.BANNER]: {\n      '--banner-bg-color': `${m('--bg-color')}`,\n      '--banner-fg-color': `${m('--fg-color')}`,\n    },\n    [MotifComponent.HYPERLINK]: {\n      '--hyperlink-color': m('--neutral-v600'),\n    },\n    [MotifComponent.MOSAIC]: {\n      '--mosaic-border-radius': '24px',\n      '--mosaic-grid-gap': '32px',\n      '--mosaic-highlight-color': Green.V100,\n      '--mosaic-title-color': '#f0fff0',\n    },\n    [MotifComponent.SEARCH]: {\n      '--search-no-results-bg-color': '#c6dfc6',\n    },\n    [MotifComponent.PAGINATION]: {\n      '--pagination-item-active-color': '#042500',\n    },\n    [MotifComponent.SPINNER]: {\n      '--spinner-fg-color': `${m('--button-primary-fg-color')}`,\n    },\n    [MotifComponent.MODAL]: {\n      '--modal-bg-color': 'rgba(0,0,0,0.7)',\n      '--modal-close-bg-color': '#042500',\n      '--modal-close-fg-color': '#f0fff0',\n    },\n    [MotifComponent.ICON_BUTTON]: {\n      '--icon-button-bg-color': m('--neutral-v700'),\n      '--icon-button-hover-bg-color': m('--neutral-v600'),\n      '--icon-button-disabled-bg-color': 'rgba(0,0,0,0)',\n    },\n  },\n  [MotifScheme.SECONDARY]: {\n    name: 'Imported secondary',\n    legacyName: 'Black',\n    [MotifComponent.ROOT]: {\n      '--box-shadow-s': '0px 4px 8px 0 rgba(0, 0, 0, 0.12)',\n      '--box-shadow-m': '0px 8px 16px 0 rgba(0, 0, 0, 0.12)',\n      '--border-radius-xs': '1px',\n      '--border-radius-s': '4px',\n      '--border-radius-m': '8px',\n      '--border-radius-l': '12px',\n      '--border-radius-xl': '16px',\n      '--spacing-xxxs': '2px',\n      '--spacing-xxs': '4px',\n      '--spacing-xs': '8px',\n      '--spacing-s': '12px',\n      '--spacing-m': '16px',\n      '--spacing-l': '24px',\n      '--spacing-xl': '32px',\n      '--spacing-xxl': '40px',\n      '--spacing-xxxxl': '64px',\n      '--bg-color': '#042500',\n      '--fg-color': '#f0fff0',\n    },\n    [MotifComponent.BUTTON]: {\n      '--button-primary-bg-color': Green.V100,\n      '--button-primary-hover-bg-color': Green.V100,\n      '--button-primary-border-color': Green.V100,\n      '--button-primary-hover-border-color': Green.V100,\n      '--button-primary-fg-color': '#042500',\n      '--button-secondary-bg-color': '#f0fff0',\n      '--button-secondary-hover-bg-color': '#f0fff0',\n      '--button-secondary-border-color': '#f0fff0',\n      '--button-secondary-hover-border-color': '#f0fff0',\n      '--button-secondary-fg-color': '#042500',\n      '--button-flat-fg-color': '#f0fff0',\n      '--button-border-radius': `${m('--border-radius-m')}`,\n      '--button-hover-shadow': `${m('--box-shadow-l')}`,\n      '--button-regular-padding': 'var(--spacing-s) var(--spacing-xl)',\n      '--button-compact-padding': 'var(--spacing-xs) var(--spacing-m)',\n    },\n    [MotifComponent.HEADER]: {\n      '--global-header-fg-color': m('--neutral-v200'),\n    },\n    [MotifComponent.BLOCK]: {\n      '--block-eyebrow-color': '#f0fff0',\n      '--block-title-color': '#f0fff0',\n      '--block-subtitle-color': '#f0fff0',\n    },\n    [MotifComponent.BREAK]: {},\n    [MotifComponent.ACCORDION]: {\n      '--accordion-header-color': `${m('--fg-color')}`,\n    },\n    [MotifComponent.QUOTE]: {\n      '--quote-bg-color': '#f0fff0',\n      '--quote-fg-color': '#042500',\n    },\n    [MotifComponent.FOOTER]: {\n      '--footer-bg-color': `${m('--bg-color')}`,\n      '--footer-bar-bg-color': `${m('--bg-color')}`,\n      '--footer-divider-border-color': `${m('--fg-color')}`,\n    },\n    [MotifComponent.FORM]: {\n      '--form-grid-gap': `${m('--spacing-m')}`,\n    },\n    [MotifComponent.FOOTNOTE]: {\n      '--footnote-fg-color': m('--neutral-v400'),\n      '--footnote-bg-color': m('--neutral-v0'),\n    },\n    [MotifComponent.DROPDOWN_MENU]: {\n      '--dropdown-menu-bg-color': m('--neutral-v600'),\n      '--dropdown-item-fg-color': m('--neutral-v300'),\n      '--dropdown-item-fg-active-color': '#f0fff0',\n    },\n    [MotifComponent.BANNER]: {\n      '--banner-bg-color': `${m('--bg-color')}`,\n      '--banner-fg-color': `${m('--fg-color')}`,\n    },\n    [MotifComponent.HYPERLINK]: {\n      '--hyperlink-color': m('--neutral-v250'),\n    },\n    [MotifComponent.MOSAIC]: {\n      '--mosaic-border-radius': '24px',\n      '--mosaic-grid-gap': '32px',\n      '--mosaic-highlight-color': Green.V100,\n      '--mosaic-title-color': '#f0fff0',\n    },\n    [MotifComponent.SEARCH]: {\n      '--search-no-results-bg-color': '#c6dfc6',\n      '--search-no-results-fg-color': m('--neutral-v650'),\n    },\n    [MotifComponent.PAGINATION]: {\n      '--pagination-item-color': m('--neutral-v400'),\n      '--pagination-item-hover-color': m('--neutral-v300'),\n      '--pagination-item-active-color': '#f0fff0',\n      '--pagination-indicator-hover-color': m('--neutral-v300'),\n    },\n    [MotifComponent.SPINNER]: {\n      '--spinner-fg-color': `${m('--button-primary-fg-color')}`,\n    },\n    [MotifComponent.MODAL]: {\n      '--modal-bg-color': 'rgba(0,0,0,0.7)',\n      '--modal-close-bg-color': '#042500',\n      '--modal-close-fg-color': '#f0fff0',\n    },\n    [MotifComponent.ICON_BUTTON]: {\n      '--icon-button-hover-bg-color': m('--neutral-v200'),\n      '--icon-button-disabled-bg-color': m('--neutral-v500'),\n      '--icon-button-border-color': m('--neutral-v0'),\n      '--icon-button-fg-color': m('--neutral-v700'),\n      '--icon-button-disabled-fg-color': m('--neutral-v400'),\n    },\n  },\n  [MotifScheme.TERTIARY]: {\n    name: 'Imported tertiary',\n    legacyName: 'White',\n    [MotifComponent.ROOT]: {\n      '--box-shadow-s': '0px 4px 8px 0 rgba(0, 0, 0, 0.12)',\n      '--box-shadow-m': '0px 8px 16px 0 rgba(0, 0, 0, 0.12)',\n      '--border-radius-xs': '1px',\n      '--border-radius-s': '4px',\n      '--border-radius-m': '8px',\n      '--border-radius-l': '12px',\n      '--border-radius-xl': '16px',\n      '--spacing-xxxs': '2px',\n      '--spacing-xxs': '4px',\n      '--spacing-xs': '8px',\n      '--spacing-s': '12px',\n      '--spacing-m': '16px',\n      '--spacing-l': '24px',\n      '--spacing-xl': '32px',\n      '--spacing-xxl': '40px',\n      '--spacing-xxxxl': '64px',\n      '--bg-color': '#f0fff0',\n      '--fg-color': '#042500',\n    },\n    [MotifComponent.BUTTON]: {\n      '--button-primary-bg-color': Green.V100,\n      '--button-primary-hover-bg-color': Green.V100,\n      '--button-primary-border-color': Green.V100,\n      '--button-primary-hover-border-color': Green.V100,\n      '--button-primary-fg-color': '#042500',\n      '--button-secondary-bg-color': '#042500',\n      '--button-secondary-hover-bg-color': '#042500',\n      '--button-secondary-border-color': '#042500',\n      '--button-secondary-hover-border-color': '#042500',\n      '--button-secondary-fg-color': '#f0fff0',\n      '--button-flat-fg-color': '#042500',\n      '--button-border-radius': `${m('--border-radius-m')}`,\n      '--button-hover-shadow': `${m('--box-shadow-l')}`,\n      '--button-regular-padding': 'var(--spacing-s) var(--spacing-xl)',\n      '--button-compact-padding': 'var(--spacing-xs) var(--spacing-m)',\n    },\n    [MotifComponent.HEADER]: {\n      '--global-header-nav-screen-bg-color': '#f0fff0',\n      '--global-header-nav-screen-global-links-bg-color': '#f0fff0',\n      '--global-header-fg-color': m('--neutral-v650'),\n    },\n    [MotifComponent.BLOCK]: {\n      '--block-eyebrow-color': '#042500',\n      '--block-title-color': '#042500',\n      '--block-subtitle-color': '#042500',\n    },\n    [MotifComponent.ACCORDION]: {\n      '--accordion-header-color': `${m('--fg-color')}`,\n    },\n    [MotifComponent.QUOTE]: {\n      '--quote-bg-color': '#f0fff0',\n      '--quote-fg-color': '#042500',\n    },\n    [MotifComponent.FOOTER]: {\n      '--footer-bg-color': `${m('--bg-color')}`,\n      '--footer-bar-bg-color': '#c6dfc6',\n    },\n    [MotifComponent.FORM]: {\n      '--form-grid-gap': `${m('--spacing-m')}`,\n    },\n    [MotifComponent.FOOTNOTE]: {\n      '--footnote-fg-color': m('--neutral-v400'),\n      '--footnote-bg-color': m('--neutral-v0'),\n    },\n    [MotifComponent.DROPDOWN_MENU]: {\n      '--dropdown-menu-bg-color': '#f0fff0',\n      '--dropdown-item-fg-color': m('--neutral-v500'),\n      '--dropdown-item-fg-active-color': '#042500',\n      '--dropdown-item-bg-hover-color': '#c6dfc6',\n    },\n    [MotifComponent.BANNER]: {\n      '--banner-bg-color': `${m('--bg-color')}`,\n      '--banner-fg-color': `${m('--fg-color')}`,\n    },\n    [MotifComponent.HYPERLINK]: {\n      '--hyperlink-color': m('--neutral-v600'),\n    },\n    [MotifComponent.MOSAIC]: {\n      '--mosaic-border-radius': '24px',\n      '--mosaic-grid-gap': '32px',\n      '--mosaic-highlight-color': Green.V100,\n      '--mosaic-title-color': '#f0fff0',\n    },\n    [MotifComponent.SEARCH]: {\n      '--search-no-results-bg-color': '#c6dfc6',\n      '--search-no-results-fg-color': m('--neutral-v650'),\n    },\n    [MotifComponent.PAGINATION]: {\n      '--pagination-item-active-color': '#042500',\n    },\n    [MotifComponent.SPINNER]: {\n      '--spinner-fg-color': `${m('--button-primary-fg-color')}`,\n    },\n    [MotifComponent.MODAL]: {\n      '--modal-bg-color': 'rgba(0,0,0,0.7)',\n      '--modal-close-bg-color': '#042500',\n      '--modal-close-fg-color': '#f0fff0',\n    },\n    [MotifComponent.ICON_BUTTON]: {\n      '--icon-button-bg-color': m('--neutral-v700'),\n      '--icon-button-hover-bg-color': m('--neutral-v600'),\n      '--icon-button-disabled-bg-color': 'rgba(0,0,0,0)',\n    },\n  },\n  [MotifScheme.QUATERNARY]: {\n    name: 'Imported quaternary',\n    legacyName: 'Gray',\n    [MotifComponent.ROOT]: {\n      '--box-shadow-s': '0px 4px 8px 0 rgba(0, 0, 0, 0.12)',\n      '--box-shadow-m': '0px 8px 16px 0 rgba(0, 0, 0, 0.12)',\n      '--border-radius-xs': '1px',\n      '--border-radius-s': '4px',\n      '--border-radius-m': '8px',\n      '--border-radius-l': '12px',\n      '--border-radius-xl': '16px',\n      '--spacing-xxxs': '2px',\n      '--spacing-xxs': '4px',\n      '--spacing-xs': '8px',\n      '--spacing-s': '12px',\n      '--spacing-m': '16px',\n      '--spacing-l': '24px',\n      '--spacing-xl': '32px',\n      '--spacing-xxl': '40px',\n      '--spacing-xxxxl': '64px',\n      '--bg-color': '#c6dfc6',\n      '--fg-color': '#042500',\n    },\n    [MotifComponent.BUTTON]: {\n      '--button-primary-bg-color': Green.V100,\n      '--button-primary-hover-bg-color': Green.V100,\n      '--button-primary-border-color': Green.V100,\n      '--button-primary-hover-border-color': Green.V100,\n      '--button-primary-fg-color': '#042500',\n      '--button-secondary-bg-color': '#f0fff0',\n      '--button-secondary-hover-bg-color': '#f0fff0',\n      '--button-secondary-border-color': '#f0fff0',\n      '--button-secondary-hover-border-color': '#f0fff0',\n      '--button-secondary-fg-color': '#042500',\n      '--button-flat-fg-color': '#042500',\n      '--button-border-radius': `${m('--border-radius-m')}`,\n      '--button-hover-shadow': `${m('--box-shadow-l')}`,\n      '--button-regular-padding': 'var(--spacing-s) var(--spacing-xl)',\n      '--button-compact-padding': 'var(--spacing-xs) var(--spacing-m)',\n    },\n    [MotifComponent.HEADER]: {\n      '--global-header-nav-screen-bg-color': '#f0fff0',\n      '--global-header-nav-screen-global-links-bg-color': '#f0fff0',\n      '--global-header-fg-color': m('--neutral-v650'),\n    },\n    [MotifComponent.BLOCK]: {\n      '--block-eyebrow-color': '#042500',\n      '--block-title-color': '#042500',\n      '--block-subtitle-color': '#042500',\n    },\n    [MotifComponent.BREAK]: {},\n    [MotifComponent.ACCORDION]: {\n      '--accordion-header-color': `${m('--fg-color')}`,\n    },\n    [MotifComponent.QUOTE]: {\n      '--quote-bg-color': '#f0fff0',\n      '--quote-fg-color': '#042500',\n    },\n    [MotifComponent.FOOTER]: {\n      '--footer-bg-color': `${m('--bg-color')}`,\n      '--footer-bar-bg-color': `${m('--bg-color')}`,\n    },\n    [MotifComponent.FORM]: {\n      '--form-grid-gap': `${m('--spacing-m')}`,\n    },\n    [MotifComponent.FOOTNOTE]: {\n      '--footnote-fg-color': m('--neutral-v400'),\n      '--footnote-bg-color': m('--neutral-v0'),\n    },\n    [MotifComponent.DROPDOWN_MENU]: {\n      '--dropdown-menu-bg-color': '#f0fff0',\n      '--dropdown-item-fg-color': m('--neutral-v500'),\n      '--dropdown-item-fg-active-color': '#042500',\n      '--dropdown-item-bg-hover-color': '#c6dfc6',\n    },\n    [MotifComponent.BANNER]: {\n      '--banner-bg-color': `${m('--bg-color')}`,\n      '--banner-fg-color': `${m('--fg-color')}`,\n    },\n    [MotifComponent.HYPERLINK]: {\n      '--hyperlink-color': m('--neutral-v600'),\n    },\n    [MotifComponent.MOSAIC]: {\n      '--mosaic-border-radius': '24px',\n      '--mosaic-grid-gap': '32px',\n      '--mosaic-highlight-color': Green.V100,\n      '--mosaic-title-color': '#f0fff0',\n    },\n    [MotifComponent.SEARCH]: {\n      '--search-no-results-bg-color': '#c6dfc6',\n      '--search-no-results-fg-color': m('--neutral-v650'),\n    },\n    [MotifComponent.PAGINATION]: {\n      '--pagination-item-active-color': '#042500',\n    },\n    [MotifComponent.SPINNER]: {\n      '--spinner-fg-color': `${m('--button-primary-fg-color')}`,\n    },\n    [MotifComponent.MODAL]: {\n      '--modal-bg-color': 'rgba(0,0,0,0.7)',\n      '--modal-close-bg-color': '#042500',\n      '--modal-close-fg-color': '#f0fff0',\n    },\n    [MotifComponent.ICON_BUTTON]: {\n      '--icon-button-bg-color': m('--neutral-v700'),\n      '--icon-button-hover-bg-color': m('--neutral-v600'),\n      '--icon-button-disabled-bg-color': 'rgba(0,0,0,0)',\n    },\n  },\n});\n", "import { BrowserFeaturesContext } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\nimport { Helmet } from 'react-helmet-async';\n\nexport const Viewport: FC = () => {\n  const features = useContext(BrowserFeaturesContext);\n  let viewport = 'width=device-width, initial-scale=1';\n\n  const isIphone = features.getLowEntropyHints().platform === 'iOS';\n\n  if (isIphone) {\n    viewport += ', viewport-fit=cover';\n  }\n\n  return (\n    <Helmet>\n      <meta name=\"viewport\" content={viewport} />\n    </Helmet>\n  );\n};\n", "import type { BackgroundColor } from '@snapchat/snap-design-system-marketing';\nimport type { FC, PropsWithChildren } from 'react';\nimport { useState } from 'react';\n\nimport type { PageLayoutContextProps } from './PageLayoutContext';\nimport { FooterView, HeaderView, PageLayoutContext } from './PageLayoutContext';\n\nexport class SessionPageLayoutContextProps implements PageLayoutContextProps {\n  public footerView: FooterView = FooterView.FULL_FOOTER;\n  public headerView: HeaderView = HeaderView.FULL_HEADER;\n  public headerBackgroundColorOverride?: BackgroundColor;\n  public hasSideNav = false;\n  public hasSubNav = false;\n  public hasCustomSideNav = false;\n\n  /** @override */\n  setFooterView = (footerView: FooterView): void => {\n    this.footerView = footerView;\n  };\n\n  /** @override */\n  setHeaderView = (headerView: HeaderView): void => {\n    this.headerView = headerView;\n  };\n\n  /** @override */\n  setHeaderBackgroundColorOverride = (color?: BackgroundColor): void => {\n    this.headerBackgroundColorOverride = color;\n  };\n}\n\n/**\n * Provider for the context that holds Layout settings that are stored in the `Page` object.\n *\n * This setup where a page (a sibling of header and footer) needs to affect header and footer is why\n * we have to bend through a context.\n *\n * What complicates matters, is that you cannot affect a sibling component when rendering, so it has\n * to be done via other means, like doing an update inside of a `useEffect`. However this doesn't\n * work on the server-side. The quick and dirty solution is to pass the `sessionProps` from a\n * previous render to the provider, so that it can be used to set the initial state.\n */\nexport const PageLayoutProvider: FC<\n  { sessionValue: PageLayoutContextProps } & PropsWithChildren\n> = ({ sessionValue, children }) => {\n  const [footerView, setFooterView] = useState(sessionValue.footerView ?? FooterView.FULL_FOOTER);\n  const [headerView, setHeaderView] = useState(sessionValue.headerView ?? HeaderView.FULL_HEADER);\n  const [headerBackgroundColorOverride, setHeaderBackgroundColorOverride] = useState<\n    BackgroundColor | undefined\n  >(sessionValue.headerBackgroundColorOverride);\n  const [hasSideNav, setHasSideNav] = useState(false);\n  const [hasSubNav, setHasSubNav] = useState(false);\n  const [hasCustomSideNav, setHasCustomSideNav] = useState(false);\n\n  const pageContext: PageLayoutContextProps = {\n    footerView,\n    headerView,\n    headerBackgroundColorOverride,\n    hasSideNav,\n    hasSubNav,\n    hasCustomSideNav,\n    setFooterView: (footerView: FooterView) => {\n      setFooterView(footerView);\n      sessionValue.setFooterView?.(footerView);\n    },\n    setHeaderView: (headerView: HeaderView) => {\n      setHeaderView(headerView);\n      sessionValue.setHeaderView?.(headerView);\n    },\n    setHeaderBackgroundColorOverride: (bgColor?: BackgroundColor) => {\n      setHeaderBackgroundColorOverride(bgColor);\n      sessionValue.setHeaderBackgroundColorOverride?.(bgColor);\n    },\n    setHasSideNav: (hasSubNav: boolean) => setHasSideNav(hasSubNav),\n    setHasSubNav: (hasSubNav: boolean) => setHasSubNav(hasSubNav),\n    setHasCustomSideNav: (hasCustomSideNav: boolean) => setHasCustomSideNav(hasCustomSideNav),\n  };\n\n  return <PageLayoutContext.Provider value={pageContext}>{children}</PageLayoutContext.Provider>;\n};\n", "import type { Entry, EntryCollection, SitewideVariant } from '@snapchat/mw-contentful-schema';\nimport clone from 'lodash/clone.js';\nimport cloneDeep from 'lodash/cloneDeep.js';\nimport { first } from 'radashi';\nimport { type FC, type PropsWithChildren, useContext } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport { logInfo } from '../../helpers/logging';\nimport { useAbExperiments } from '../../hooks/useAbExperiments';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport { useSingleCallback } from '../../hooks/useSingleCallback';\nimport type { SitewideConfigurationContextProps } from './SitewideConfigurationContext';\nimport { SitewideConfigurationContext } from './SitewideConfigurationContext';\nimport type { SitewideConfigurationData } from './SitewideConfigurationQuery';\nimport { sitewideConfigurationQuery } from './SitewideConfigurationQuery';\n\nconst isEntry = (value: unknown): value is Entry => {\n  return typeof value === 'object' && (value as Entry).sys?.id !== undefined;\n};\n\nconst isCollection = (value: unknown): value is EntryCollection => {\n  return typeof value === 'object' && Array.isArray((value as EntryCollection).items);\n};\n\n/**\n * Max depth to prevent infinite recursion. Chose 30 since during testing, we only hit 7 levels\n * deep, so 50 way more than enough.\n */\nconst maxDepth = 50;\n\nfunction replaceEntries<T extends Entry>(\n  entry: T,\n  replacementMap: Record<string, unknown>,\n  depth = 0\n): T | undefined {\n  // We have to clone here because the original entry may be frozen\n  let returnVal: T | undefined = clone(entry);\n\n  if (depth > maxDepth) {\n    console.error('Max depth reached in replaceEntries');\n    return returnVal;\n  }\n\n  // If entry is in the replacement map, replace itself with the replacement\n  if (entry.sys.id in replacementMap) {\n    // If undefined, that means the item was removed\n    if (replacementMap[entry.sys.id] === undefined) {\n      return undefined;\n    }\n    returnVal = replacementMap[entry.sys.id] as T;\n    // Entry replaced, now run replaceEntries on the new entry in case it has things that also need to be replaced\n    return replaceEntries(returnVal, replacementMap, depth + 1);\n  }\n\n  // Entry does not need to be replaced, check if it has any nested entries that need to be replaced\n  for (const key in returnVal) {\n    const value = returnVal[key];\n\n    if (key.endsWith('Collection') && isCollection(value)) {\n      // Call replace entries on all the items in the collection, and then filter out undefineds\n      const newItems = value.items\n        .map(item => replaceEntries(item as T, replacementMap, depth + 1))\n        .filter(entry => !!entry);\n      returnVal[key] = { ...value, items: newItems };\n    } else if (isEntry(value)) {\n      // casting this here because we know it's an entry, and undefined is a valid value\n      returnVal[key] = replaceEntries(\n        value,\n        replacementMap,\n        depth + 1\n      ) as (typeof returnVal)[typeof key];\n    }\n  }\n\n  return returnVal;\n}\n\n/**\n * Provider for the sitewide configuration context. Queries contentful and sets its own value. Holds\n * the values for Navigation Bar, Footer, and Feature Flags.\n */\nexport const SitewideConfigurationProvider: FC<PropsWithChildren> = ({ children }) => {\n  const decideAbExperiment = useAbExperiments();\n  const { currentLocale } = useContext(AppContext);\n  const { data } = useContentfulQuery<SitewideConfigurationData>(sitewideConfigurationQuery);\n  const singleCallback = useSingleCallback();\n\n  const getSitewideValues = (\n    data?: SitewideConfigurationData\n  ): SitewideConfigurationContextProps | undefined => {\n    if (!data) return;\n\n    if (!data?.sitewideConfigurationCollection?.items) return;\n\n    const reference = first(data.sitewideConfigurationCollection.items)?.reference;\n\n    if (!reference) return;\n\n    if (reference.__typename === 'SitewideValues') {\n      return { sitewideValues: reference };\n    }\n\n    if (reference.__typename === 'SitewideExperiment') {\n      if (!reference.default) {\n        return;\n      }\n\n      let finalValues = reference.default;\n\n      const replacementMap: Record<string, Entry | undefined> = {};\n\n      if (!reference.variantsCollection?.items) {\n        return { sitewideValues: finalValues };\n      }\n\n      // used to only pick the first variant selected for cases\n      // where the user is bucketed into multiple variants (e.g. bucket is exactly 50)\n      const { isThinking, decision: variant } = decideAbExperiment<SitewideVariant>({\n        seed: reference.seed ?? reference.sys.id,\n        variants: reference.variantsCollection.items,\n      });\n\n      // If there are replacements defined\n      if (variant?.replacementsCollection?.items) {\n        // For each replacement\n        for (const replacement of variant.replacementsCollection.items) {\n          // If both the replacement target and is set\n          if (replacement?.replacementTarget?.sys.id) {\n            // If somehow replacement has no typename... skip it\n            if (!replacement.replacementTarget.__typename) {\n              continue;\n            }\n\n            if (replacement?.replacement === undefined) {\n              replacementMap[replacement.replacementTarget.sys.id] = undefined;\n              continue;\n            }\n\n            // Add the replacement to the map\n            replacementMap[replacement.replacementTarget.sys.id] = {\n              ...replacement.replacement,\n            };\n          }\n        }\n\n        singleCallback({\n          key: 'sitewideExperimentExposure',\n          callback: () =>\n            logInfo({\n              eventCategory: 'Experiment',\n              eventAction: 'sitewideExperimentExposure',\n              eventLabel: `${reference.analyticsId ?? 'Unknown'}:${\n                variant.analyticsId ?? 'Unknown'\n              }`,\n              // TODO: Normally, the locale is automatically added to all log events by a logging context provider\n              // set in App.tsx. Unfortunately, this context provider is not attached yet by the time this runs due\n              // to a bug with the way the context provider is attached. We can remove this once the bug is fixed.\n              // https://jira.sc-corp.net/browse/WEBP-11200\n              context: { locale: currentLocale },\n            }),\n          dependencies: [reference.analyticsId, variant.analyticsId],\n        });\n      }\n\n      if (!isThinking && !variant) {\n        singleCallback({\n          key: 'sitewideExperimentExposure',\n          callback: () =>\n            logInfo({\n              eventCategory: 'Experiment',\n              eventAction: 'sitewideExperimentExposure',\n              eventLabel: `${reference.analyticsId ?? 'Unknown'}:default`,\n              context: { locale: currentLocale },\n            }),\n          dependencies: [reference.analyticsId],\n        });\n      }\n\n      if (Object.entries(replacementMap).length > 0) {\n        finalValues = cloneDeep(reference.default);\n\n        const processedFinalValues = replaceEntries(finalValues, replacementMap);\n\n        if (processedFinalValues) {\n          finalValues = processedFinalValues;\n        }\n      }\n\n      return { sitewideValues: finalValues };\n    }\n\n    return;\n  };\n\n  const value: SitewideConfigurationContextProps = getSitewideValues(data) || {};\n\n  return (\n    <SitewideConfigurationContext.Provider value={value}>\n      {children}\n    </SitewideConfigurationContext.Provider>\n  );\n};\n", "import { gql } from '@apollo/client';\nimport type { Criteria, CustomFooterSocialCollection } from '@snapchat/mw-contentful-schema';\nimport type { BackgroundColor, MotifScheme } from '@snapchat/snap-design-system-marketing';\nimport type { ContentfulSysProps, ContentfulTypedSysProps } from 'src/types/contentful';\nimport type { Items } from 'src/types/Items';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { criteriaFragment } from '../Experiment/experimentQuery';\nimport { fragments as imageFragments } from '../Image';\nimport type { ImageDataProps } from '../Image/types';\nimport { imageButtonFragment } from '../ImageButton/imageButtonQuery';\n\n// =================================================================================================\n// Footer Item Fragment\n// =================================================================================================\nexport const footerItemFragment = gql`\n  fragment FooterItemAll on FooterItem {\n    ...ContentfulSysId\n    title\n    url\n    analytics {\n      ...ContentfulSysId\n      label\n    }\n    criteria {\n      ...CriteriaAll\n    }\n  }\n  ${contentfulSysIdFragment}\n  ${criteriaFragment}\n`;\n\nexport type CustomFooterItemProps = ContentfulTypedSysProps<'FooterItem'> & {\n  title: string;\n  url: string;\n  analytics?: { label: string; sys: { id: string } };\n  criteria?: Criteria;\n};\n\n// =================================================================================================\n// Footer Local Dropdown Fragment\n// =================================================================================================\nexport const footerLocaleDropdownFragment = gql`\n  fragment FooterLocaleDropdownAll on FooterLocaleDropdown {\n    ...ContentfulSysId\n    title\n    criteria {\n      ...CriteriaAll\n    }\n  }\n  ${contentfulSysIdFragment}\n  ${criteriaFragment}\n`;\n\nexport type CustomFooterLocaleDropdownProps = ContentfulSysProps & {\n  __typename: 'FooterLocaleDropdown';\n  title: string;\n  criteria?: Criteria;\n};\n\n// =================================================================================================\n// Footer Cookie Settings Link Fragment\n// =================================================================================================\nexport const footerCookiesSettingsLinkFragment = gql`\n  fragment FooterCookiesSettingsLinkAll on FooterCookiesSettingsLink {\n    ...ContentfulSysId\n    title\n    criteria {\n      ...CriteriaAll\n    }\n  }\n  ${contentfulSysIdFragment}\n  ${criteriaFragment}\n`;\n\nexport type CustomFooterCookiesSettingsLinkProps = ContentfulSysProps & {\n  __typename: 'FooterCookiesSettingsLink';\n  title: string;\n  criteria?: Criteria;\n};\n\n// =================================================================================================\n// Footer Group Link Fragment\n// =================================================================================================\nexport const footerGroupFragment = gql`\n  fragment FooterGroupAll on FooterGroup {\n    ...ContentfulSysId\n    __typename\n    title\n    groupKey\n    itemsCollection(limit: 10) {\n      items {\n        __typename\n        ... on FooterItem {\n          ...FooterItemAll\n        }\n\n        ... on FooterLocaleDropdown {\n          ...FooterLocaleDropdownAll\n        }\n\n        ... on FooterCookiesSettingsLink {\n          ...FooterCookiesSettingsLinkAll\n        }\n      }\n    }\n    analytics {\n      ...ContentfulSysId\n      label\n    }\n    criteria {\n      ...CriteriaAll\n    }\n  }\n  ${contentfulSysIdFragment}\n  ${footerItemFragment}\n  ${footerLocaleDropdownFragment}\n  ${footerCookiesSettingsLinkFragment}\n  ${criteriaFragment}\n`;\n\ntype CustomFooterGroupItemsCollectionProps = {\n  items: Array<\n    CustomFooterItemProps | CustomFooterLocaleDropdownProps | CustomFooterCookiesSettingsLinkProps\n  >;\n};\n\nexport type CustomFooterGroupProps = {\n  sys: { id: string };\n  title: string;\n  groupKey: string;\n  itemsCollection: CustomFooterGroupItemsCollectionProps;\n  analytics?: { label: string };\n  criteria?: Criteria;\n};\n\n// =================================================================================================\n// Custom FooterFragment\n// =================================================================================================\nexport const customFooterFragment = gql`\n  fragment CustomFooterAll on CustomFooter {\n    ...ContentfulSysId\n    columnsCollection(limit: 10) {\n      items {\n        ... on FooterGroup {\n          ...FooterGroupAll\n        }\n      }\n    }\n    barCollection(limit: 10) {\n      items {\n        ... on FooterGroup {\n          ...FooterGroupAll\n        }\n      }\n    }\n    brandBackgroundColor\n    backgroundColor\n    logo {\n      ...ImageAll\n    }\n    logoAriaLabel\n    url\n    socialLabel\n    socialCollection(limit: 10) {\n      items {\n        ... on ImageButton {\n          ...ImageButtonAll\n        }\n      }\n    }\n  }\n  ${contentfulSysIdFragment}\n  ${imageButtonFragment}\n  ${imageFragments.all}\n  ${footerGroupFragment}\n`;\n\n// =================================================================================================\n// Footer Query\n// =================================================================================================\nexport const customFooterQuery = gql`\n  query FooterQuery($preview: Boolean!, $locale: String!) {\n    customFooterCollection(preview: $preview, locale: $locale, limit: 1) {\n      items {\n        ...CustomFooterAll\n      }\n    }\n  }\n\n  ${customFooterFragment}\n`;\n\nexport type FooterLogoItemProps = ImageDataProps & {\n  url?: string;\n};\n\nexport type FooterQueryResponse = {\n  customFooterCollection: ContentfulSysProps & {\n    items: Array<{\n      columnsCollection: Items<CustomFooterGroupProps>;\n      barCollection: Items<CustomFooterGroupProps>;\n      socialCollection: CustomFooterSocialCollection;\n      brandBackgroundColor?: MotifScheme;\n      backgroundColor?: BackgroundColor;\n      logo: FooterLogoItemProps | null;\n      logoAriaLabel: string | null;\n      url: string | null;\n      socialLabel: string | null | undefined;\n    }>;\n  };\n};\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { fragments as analyticsFragments } from '../Analytics';\nimport { ctaFragment } from '../CallToAction';\nimport { criteriaFragment } from '../Experiment';\nimport { assetFragment, fragments as mediaFragments } from '../Media';\nimport { navigationCtaFragment } from '../NavigationCta';\n\n// =================================================================================================\n// Header Menu Item Group Fragment\n// =================================================================================================\n\nexport const headerMenuItemGroupFragment = gql`\n  fragment HeaderMenuItemGroupFieldsOnly on HeaderMenuItemGroup {\n    ...ContentfulSysId\n    title\n    url\n    column1Label\n    column1MenuItemsCollection {\n      items {\n        ...HeaderMenuItemFieldsOnly\n      }\n    }\n    column2Label\n    column2MenuItemsCollection {\n      items {\n        ...HeaderMenuItemFieldsOnly\n      }\n    }\n    column3Label\n    column3MenuItemsCollection {\n      items {\n        ...HeaderMenuItemFieldsOnly\n      }\n    }\n    featuredHeaderMenuItem {\n      ...FeaturedHeaderMenuItemFieldsOnly\n    }\n  }\n  ${contentfulSysIdFragment}\n`;\n\n// =================================================================================================\n// Header Menu Item Fragment\n// =================================================================================================\n\nexport const headerMenuItemFragment = gql`\n  fragment HeaderMenuItemFieldsOnly on HeaderMenuItem {\n    ...ContentfulSysId\n    title\n    url\n    description\n    icon {\n      ...ContentfulSysId\n      icon\n      media {\n        ...AssetAll\n      }\n    }\n    analytics {\n      ...AnalyticsAll\n    }\n    hideCriteria {\n      ...CriteriaAll\n    }\n  }\n  ${contentfulSysIdFragment}\n  ${analyticsFragments.all}\n  ${criteriaFragment}\n  ${assetFragment}\n`;\n\n// =================================================================================================\n// Featured Header Menu Item Fragment\n// =================================================================================================\n\nexport const featuredHeaderMenuItemFragment = gql`\n  fragment FeaturedHeaderMenuItemFieldsOnly on FeaturedHeaderMenuItem {\n    ...ContentfulSysId\n    title\n    url\n    description\n    icon {\n      ...ContentfulSysId\n      icon\n      media {\n        ...AssetAll\n      }\n    }\n    ctaLabel\n    analytics {\n      ...AnalyticsAll\n    }\n    hideCriteria {\n      ...CriteriaAll\n    }\n  }\n  ${contentfulSysIdFragment}\n  ${analyticsFragments.all}\n  ${criteriaFragment}\n  ${assetFragment}\n`;\n\n// =================================================================================================\n// Navigator Fragment\n// =================================================================================================\n\nexport const navigatorFragment = gql`\n  fragment NavigatorLocal on Navigator {\n    ...ContentfulSysId\n    title\n    logoV2 {\n      ... on Image {\n        ...ImageAll\n      }\n    }\n    theme\n    brandBackgroundColor\n    backgroundColor\n    headerMenuItemGroupsCollection(limit: 7) {\n      items {\n        ...HeaderMenuItemGroupFieldsOnly\n      }\n      total\n    }\n    callsToActionCollection(limit: 10) {\n      items {\n        ... on CallToAction {\n          ...CallToActionAll\n        }\n        ... on NavigationCallToAction {\n          ...NavigationCta\n        }\n      }\n    }\n    url\n    analytics {\n      ...AnalyticsAll\n    }\n  }\n  ${contentfulSysIdFragment}\n  ${analyticsFragments.all}\n  ${headerMenuItemGroupFragment}\n  ${headerMenuItemFragment}\n  ${featuredHeaderMenuItemFragment}\n  ${ctaFragment}\n  ${navigationCtaFragment}\n  ${mediaFragments.all}\n`;\n", "import { gql } from '@apollo/client';\nimport type { SitewideConfigurationCollection } from '@snapchat/mw-contentful-schema';\n\nimport { ctaFragment } from '../../components/CallToAction';\nimport {\n  customFooterFragment,\n  footerCookiesSettingsLinkFragment,\n  footerGroupFragment,\n  footerItemFragment,\n  footerLocaleDropdownFragment,\n} from '../../components/FooterWrapper/query';\nimport {\n  featuredHeaderMenuItemFragment,\n  headerMenuItemFragment,\n  headerMenuItemGroupFragment,\n  navigatorFragment,\n} from '../../components/Header/headerQuery';\nimport { navigationCtaFragment } from '../../components/NavigationCta';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\n\nconst sitewideValuesFragment = gql`\n  fragment SitewideValuesAll on SitewideValues {\n    ...ContentfulSysId\n    navigationBar {\n      ...NavigatorLocal\n    }\n    customFooter {\n      ...CustomFooterAll\n    }\n    featureFlags {\n      ...ContentfulSysId\n      featureFlags\n    }\n  }\n  ${contentfulSysIdFragment}\n`;\n\nconst sitewideConfigurationFragment = gql`\n  fragment SitewideConfiguration on SitewideConfiguration {\n    ...ContentfulSysId\n    reference {\n      ... on SitewideValues {\n        ...SitewideValuesAll\n      }\n      ... on SitewideExperiment {\n        ...ContentfulSysId\n        default {\n          ...SitewideValuesAll\n        }\n        seed\n        variantsCollection(limit: 5) {\n          items {\n            ...ContentfulSysId\n            trafficStartRange\n            trafficEndRange\n            analyticsId\n            replacementsCollection(limit: 10) {\n              items {\n                ...ContentfulSysId\n                replacementTarget {\n                  ...ContentfulSysId\n                }\n                replacement {\n                  ... on Navigator {\n                    ...NavigatorLocal\n                  }\n                  ... on HeaderMenuItemGroup {\n                    ...HeaderMenuItemGroupFieldsOnly\n                  }\n                  ... on HeaderMenuItem {\n                    ...HeaderMenuItemFieldsOnly\n                  }\n                  ... on FeaturedHeaderMenuItem {\n                    ...FeaturedHeaderMenuItemFieldsOnly\n                  }\n                  ... on NavigationCallToAction {\n                    ...NavigationCta\n                  }\n                  ... on CallToAction {\n                    ...CallToActionAll\n                  }\n                  ... on FeatureFlags {\n                    ...ContentfulSysId\n                    featureFlags\n                  }\n                  ... on CustomFooter {\n                    ...CustomFooterAll\n                  }\n                  ... on FooterCookiesSettingsLink {\n                    ...FooterCookiesSettingsLinkAll\n                  }\n                  ... on FooterGroup {\n                    ...FooterGroupAll\n                  }\n                  ... on FooterItem {\n                    ...FooterItemAll\n                  }\n                  ... on FooterLocaleDropdown {\n                    ...FooterLocaleDropdownAll\n                  }\n                }\n              }\n            }\n          }\n        }\n        analyticsId\n      }\n    }\n  }\n  ${contentfulSysIdFragment}\n  ${navigatorFragment}\n  ${customFooterFragment}\n  ${sitewideValuesFragment}\n  ${navigationCtaFragment}\n  ${headerMenuItemGroupFragment}\n  ${headerMenuItemFragment}\n  ${featuredHeaderMenuItemFragment}\n  ${ctaFragment}\n  ${footerGroupFragment}\n  ${footerCookiesSettingsLinkFragment}\n  ${footerLocaleDropdownFragment}\n  ${footerItemFragment}\n  ${customFooterFragment}\n`;\n\nexport const sitewideConfigurationQuery = gql`\n  query SitewideConfigurationQuery($preview: Boolean!, $locale: String!) {\n    sitewideConfigurationCollection(preview: $preview, locale: $locale, limit: 1) {\n      items {\n        ...SitewideConfiguration\n      }\n    }\n  }\n  ${sitewideConfigurationFragment}\n`;\n\nexport interface SitewideConfigurationData {\n  sitewideConfigurationCollection: SitewideConfigurationCollection;\n}\n", "import type { ErrorInfo, ReactNode } from 'react';\nimport type React from 'react';\nimport { Component } from 'react';\n\nimport { logError } from './helpers/logging';\nimport { Error500 } from './pages/Error500/Error500';\nimport { customFetch } from './utils/fetch/customFetch';\nimport type { Tracer } from './utils/tracing';\n\ninterface ErrorProps {\n  tracer?: Tracer;\n  children?: ReactNode;\n}\n\ninterface ErrorState {\n  hasError: boolean;\n}\n\nexport class ErrorBoundary extends Component<ErrorProps, ErrorState> {\n  constructor(props: ErrorProps) {\n    super(props);\n\n    this.state = {\n      hasError: false,\n    };\n  }\n\n  componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n    this.setState({\n      hasError: true,\n    });\n\n    // This returns a 599 response which lets us see volume of uncaught errors as 599 responses.\n    const trace = this.props.tracer?.startSpan('fetchError');\n    void customFetch('/error').then(_ => trace?.endSpan());\n\n    // This logs to sentry, graphene, console etc.\n    logError({\n      component: 'UncaughtError',\n      error: error ?? undefined,\n      context: {\n        componentStack: errorInfo?.componentStack,\n      },\n    });\n  }\n\n  render(): React.ReactNode {\n    const { children } = this.props;\n    const { hasError } = this.state;\n\n    if (hasError) {\n      return <Error500 />;\n    }\n\n    return children;\n  }\n}\n", "import { css } from '@emotion/css';\nimport type { FC } from 'react';\n\nconst error500Css = css`\n  display: flex;\n  align-items: center;\n  flex-direction: column;\n  justify-content: center;\n  overflow-x: hidden;\n  position: relative;\n  width: 100%;\n  height: 100vh;\n  text-align: center;\n  background-color: #fffc00;\n\n  h1 {\n    font-size: 7em;\n    font-weight: 600;\n    margin-bottom: 40px;\n  }\n\n  p {\n    margin-top: 0.5em;\n  }\n\n  a {\n    text-decoration: none;\n  }\n`;\n\nexport const Error500: FC = () => {\n  return (\n    <div className={error500Css}>\n      <h1>500</h1>\n      <h2>Oops! Something went wrong</h2>\n\n      <p>\n        <a href=\"/\">Go to home</a>\n      </p>\n    </div>\n  );\n};\n", "import { parseError } from '@snapchat/core';\nimport { useImperativeEffect } from '@snapchat/core-browser';\nimport type { FC } from 'react';\n\n/** Our standard location for font files. */\nconst fontLinkToCheck = 'https://web-platform.snap.com/fonts/font.graphik.css';\n\n/** This location reads the same file, but without CDN, so is slower. */\nconst fontLinkAlternative =\n  'https://snap-design-system.storage.googleapis.com/fonts/font.graphik.css';\n\n/**\n * Returns whether we're able to load a file from the CDN.\n *\n * If this fails, we assume that it's blocked by an adblock (i.e. uBlock Origin).\n */\nconst canLoadFonts = () =>\n  fetch(fontLinkToCheck)\n    .then(() => true)\n    .catch(error => {\n      const message = parseError(error).message;\n\n      if (message === 'Failed to fetch') {\n        console.warn(\n          `Your browser is blocking \"${\n            new URL(fontLinkToCheck).hostname\n          }\" which hosts our fonts. Allow this domain through your content blocker to see this website the way it was meant to be seen.`\n        );\n      } else {\n        console.error('Failed to fetch fonts', error);\n      }\n\n      return false;\n    });\n\n/**\n * Checks that we are able to load a file from the CDN where we serve our fonts from. If that fails,\n * we try to add a font link to the alternative location (a slower one).\n *\n * TODO: Convert to a hook.\n */\nexport const FontChecker: FC = () => {\n  useImperativeEffect(() => {\n    void canLoadFonts().then(canLoad => {\n      if (canLoad) return;\n\n      const newLink = document.createElement('link');\n      newLink.type = 'text/css';\n      newLink.rel = 'stylesheet';\n      newLink.href = fontLinkAlternative;\n\n      document.head.appendChild(newLink);\n    });\n  }, []);\n\n  return null;\n};\n", "import type { initBlizzard, logEvent as logEventType } from '@snapchat/blizzard-lite';\nimport type { AnyEventBase, UserTrackedEvent, WebPlatformEvent } from '@snapchat/blizzard-schema';\nimport { parseError } from '@snapchat/core';\nimport type {\n  BaseEventListenerProps,\n  EmptyObject,\n  LoggedEvent,\n  WebTrackingPermission,\n} from '@snapchat/logging';\nimport { AbstractEventListener, LoggingEventType } from '@snapchat/logging';\n\n/** Base interface for any Web-driven event logs. */\nexport type BlizzardBaseEvent = UserTrackedEvent &\n  AnyEventBase & {\n    event_name: string;\n  };\n\ntype BlizzardInitArgs = Parameters<typeof initBlizzard>[0];\n\nexport type BlizzardClientEventListenerProps<\n  LoggingContext extends EmptyObject = EmptyObject,\n  CustomEvents extends EmptyObject = EmptyObject\n> = {\n  isProd: boolean;\n  cookieDomain: string;\n\n  /**\n   * Transforms from an event type on the event bus to a typed Blizzad Event.\n   *\n   * Because all blizzard event are custom, there's nothing generic that this listener can set\n   * except pass the data from the formatter directly to the blizzard collector.\n   */\n  eventFormatter: (\n    event: LoggedEvent<CustomEvents>,\n    context: Partial<LoggingContext>\n  ) => BlizzardBaseEvent[] | BlizzardBaseEvent | undefined;\n} & BaseEventListenerProps<LoggingContext, CustomEvents> &\n  Omit<BlizzardInitArgs, 'appEnvironment' | 'cookieArgs' | 'debugLoggingEnabled' | 'mode'>;\n\nexport class BlizzardClientEventListener<\n  LoggingContext extends EmptyObject = EmptyObject,\n  CustomEvents extends EmptyObject = EmptyObject,\n  LoggingPermission extends WebTrackingPermission = WebTrackingPermission\n> extends AbstractEventListener<LoggingContext, CustomEvents, LoggingPermission> {\n  protected readonly props: BlizzardClientEventListenerProps<LoggingContext, CustomEvents>;\n\n  protected logBlizzardEvent?: typeof logEventType;\n\n  constructor(props: BlizzardClientEventListenerProps<LoggingContext, CustomEvents>) {\n    super({\n      ...props,\n      requiredPermissions: ['logging', 'performance'],\n    });\n    this.props = props;\n    this.init = this.init.bind(this); // So this is usable when inherited.\n    this.logEventInternal = this.logEventInternal.bind(this);\n  }\n\n  /**\n   * Written as a member instead of a const so it can be called by inherited fns.\n   *\n   * @override\n   */\n  protected async init(): Promise<void> {\n    // NOTE: We import the blizzad dynamically here because it depends on some\n    // packages like uuid that do not import well\n    // and break Rollup and Jest and it allows the package to be put into\n    // a splitpoint when loading.\n    const { initBlizzard, logEvent, CollectionMode } = await import('@snapchat/blizzard-lite');\n\n    await initBlizzard({\n      ...this.props,\n      appEnvironment: {\n        appType: 'WEB_DESKTOP', // For web logging this is always WEB_DESKTOP.\n        appBuild: 'PROD', // For web logging the Snapchat App is always PROD.\n      },\n      cookiesArgs: {\n        customDomain: this.props.isProd ? this.props.cookieDomain : undefined,\n      },\n      debugLoggingEnabled: false, // Use console logger.\n      mode: this.props.isProd ? CollectionMode.PROD : CollectionMode.STAGE,\n    });\n\n    this.logBlizzardEvent = logEvent;\n  }\n\n  /** @override */\n  protected logEventInternal(\n    event: LoggedEvent<CustomEvents>,\n    context: Partial<LoggingContext>\n  ): void {\n    const formattedEvents = this.props.eventFormatter(event, context);\n\n    if (!formattedEvents) return;\n\n    const formattedEventsArray = Array.isArray(formattedEvents)\n      ? formattedEvents\n      : [formattedEvents];\n\n    for (const formattedEvent of formattedEventsArray) {\n      // We do not catch any errors here. Blizzard should have their own logging.\n      void this.logBlizzardEvent!(formattedEvent);\n    }\n  }\n\n  /** @override */\n  protected flushInternal: () => Promise<unknown> = () => Promise.resolve();\n}\n\nexport const formatWebPlatformEvent = (\n  event: LoggedEvent<EmptyObject>,\n  _context: EmptyObject\n): BlizzardBaseEvent | undefined => {\n  const uri = new URL(window.location.href);\n\n  const data: WebPlatformEvent = {\n    event_name: 'WEB_PLATFORM_EVENT',\n    host: uri.host,\n    path: uri.pathname,\n    query: JSON.stringify(Object.fromEntries(uri.searchParams.entries())),\n  };\n\n  switch (event.type) {\n    case LoggingEventType.DEBUG: {\n      return {\n        ...data,\n        type: LoggingEventType.DEBUG,\n        component: event.component,\n        message: event.message,\n      };\n    }\n\n    case LoggingEventType.ERROR: {\n      const error = parseError(event.error);\n\n      return {\n        ...data,\n        type: LoggingEventType.ERROR,\n        component: event.component,\n        message: error.message,\n        action: event.action,\n      };\n    }\n\n    case LoggingEventType.INFO: {\n      return {\n        ...data,\n        type: LoggingEventType.INFO,\n        component: event.component,\n        action: event.action,\n        label: event.label,\n      };\n    }\n\n    case LoggingEventType.TIMING: {\n      return {\n        ...data,\n        type: LoggingEventType.TIMING,\n        component: event.component,\n        variable: event.variable,\n        value: event.valueMs.toString(),\n        label: event.label,\n      };\n    }\n\n    case LoggingEventType.VALUE: {\n      return {\n        ...data,\n        type: LoggingEventType.VALUE,\n        component: event.component,\n        variable: event.variable,\n        value: event.value.toString(),\n        label: event.label,\n      };\n    }\n\n    case LoggingEventType.WARNING: {\n      return {\n        ...data,\n        type: LoggingEventType.WARNING,\n        component: event.component,\n        message: event.message,\n        action: event.action,\n      };\n    }\n  }\n\n  return undefined;\n};\n\n/**\n * This table needs sensible privacy filters.\n *\n * Per blizzard privacy policy, you cannot store any personal information in the logs.\n *\n * See http://go.sc-corp.net/blizzard-privacy\n */\nexport function getCommonBlizzardClientEventListener<\n  LoggingContext extends EmptyObject = EmptyObject,\n  CustomEvents extends EmptyObject = EmptyObject,\n  LoggingPermission extends WebTrackingPermission = WebTrackingPermission\n>(\n  props: BlizzardClientEventListenerProps\n): BlizzardClientEventListener<LoggingContext, CustomEvents, LoggingPermission> {\n  return new BlizzardClientEventListener<LoggingContext, CustomEvents, LoggingPermission>({\n    isProd: props.isProd,\n    cookieDomain: props.cookieDomain,\n    eventFormatter: formatWebPlatformEvent,\n  });\n}\n", "import type { BasePermission, ConsoleEventListenerProps, EmptyObject } from '@snapchat/logging';\nimport { ConsoleEventListener, LoggingEventType } from '@snapchat/logging';\n\ntype Props<LoggingContext, OtherEvents> = Omit<\n  ConsoleEventListenerProps<LoggingContext, OtherEvents>,\n  'messageTransform'\n>;\n\nexport class ConsoleClientEventListener<\n  LoggingContext extends EmptyObject = EmptyObject,\n  OtherEvents extends EmptyObject = EmptyObject,\n  Permission extends BasePermission = BasePermission\n> extends ConsoleEventListener<LoggingContext, OtherEvents, Permission> {\n  private readonly clientProps: Props<LoggingContext, OtherEvents>;\n\n  constructor(props: Props<LoggingContext, OtherEvents> = {}) {\n    super({\n      ...props,\n      messageTransform: ConsoleClientEventListener.messageTransform,\n    });\n    this.clientProps = props;\n  }\n\n  /** Adds colors See https://www.w3docs.com/snippets/javascript/colors-in-javascript-console.html */\n  protected static messageTransform = (type: LoggingEventType, message: unknown[]): unknown[] => {\n    if (message.length < 1) return message;\n\n    const firstMessage = message.shift();\n    const firstMessageWithColor = `%c${firstMessage}`;\n\n    switch (type) {\n      case LoggingEventType.ERROR:\n        return [firstMessageWithColor, 'color: bloodOrange;', ...message];\n      case LoggingEventType.WARNING:\n        return [firstMessageWithColor, 'color: yellow;', ...message];\n      case LoggingEventType.TIMING:\n        return [firstMessageWithColor, 'color: dodgerblue;', ...message];\n      case LoggingEventType.VALUE:\n        return [firstMessageWithColor, 'color: dodgerblue;', ...message];\n      case LoggingEventType.DEBUG:\n        return [firstMessageWithColor, 'color: gray;', ...message];\n      case LoggingEventType.CUSTOM:\n        return [firstMessageWithColor, 'font-weight: bold;', ...message];\n      default:\n        return [firstMessage, ...message];\n    }\n  };\n}\n", "import type {\n  DataLayerEventListenerProps,\n  DataLayerLoggingPermissions,\n  DataLayerPrivacyConfig,\n  EmptyObject,\n} from '@snapchat/logging';\nimport { AbstractDataLayerEventListener } from '@snapchat/logging';\n\ndeclare global {\n  interface Window {\n    dataLayer?: unknown[];\n  }\n}\n\n/**\n * Interface for the dataLayer events in Google Analytics 4.\n *\n * NOTE: This is purposely kept vague to make it easier to send custom events.\n */\nexport type GtagEvent =\n  | ['js', Date, Record<string, unknown>?]\n  // See https://developers.google.com/tag-platform/gtagjs/reference#get\n  | ['get', string, string, (value: string) => void]\n  // See https://developers.google.com/tag-platform/gtagjs/reference#set\n  | ['set', Record<string, unknown>?]\n  // See https://developers.google.com/tag-platform/gtagjs/reference#config\n  | ['config', string, Record<string, unknown>?]\n  // See https://developers.google.com/tag-platform/gtagjs/reference#consent\n  | ['consent', string, Record<string, unknown>?]\n  // See https://developers.google.com/tag-platform/gtagjs/reference#event\n  | ['event', string, Record<string, unknown>?];\n\nexport interface GoogleAnalytics4ClientEventListenerProps<\n  LoggingContext extends EmptyObject = EmptyObject,\n  CustomEvents extends EmptyObject = EmptyObject\n> extends Omit<DataLayerEventListenerProps<LoggingContext, CustomEvents, GtagEvent>, 'dataLayer'> {\n  gaId: string;\n  nonce?: string;\n  /**\n   * See\n   * https://developers.google.com/analytics/devguides/collection/ga4/set-up-ecommerce#verify-data\n   */\n  debugMode?: boolean;\n  /** See https://developers.google.com/analytics/devguides/collection/ga4/views?client_type=gtag */\n  sendPageView?: boolean;\n  /** See https://developers.google.com/analytics/devguides/collection/ga4/user-id?client_type=gtag */\n  userId?: string;\n  /** Clock (for testing). */\n  clock?: () => number;\n}\n\n/**\n * Adds a callback to a GA4 event.\n *\n * Appends to the array if there aren't any param objects. If there is a param object, sets the\n * callback on it.\n */\nexport function addGa4EventCallback(event: GtagEvent, callback: () => void): boolean {\n  switch (event[0]) {\n    case 'get':\n    // falls through\n    case 'set':\n      // No callback required.\n      return false;\n  }\n  // API documentation: https://developers.google.com/tag-platform/gtagjs/reference/parameters\n\n  // If the event already has an object param,\n  // l.e. event = ['event', 'foo', { bar: 'buzz' }],\n  // Then we need to append the callback params to it.\n  if (!event[2]) event[2] = {};\n  event[2].event_callback = callback;\n  event[2].event_timeout = 2_000; /* ms */\n\n  // TODO: Merge event_callback if there's one already specified in the event.\n\n  return true;\n}\n\n/**\n * Note that even though gtag() just adds arguments to window.dataLayer, However in GA44, events\n * HAVE to be wrapped in an Arguments constructor. This is not a requirement in GTM, but seems to be\n * one for GA4.\n */\nfunction gtag(..._args: unknown[]) {\n  // biome-ignore lint/style/noArguments: Doesn't seem to work w/ rest args because the types expects instance of \"Arguments\".\n  // biome-ignore lint/correctness/noUndeclaredVariables: Every function technically has \"arguments\" in scope.\n  window.dataLayer!.push(arguments);\n}\n\n/**\n * Event listener that sends events to Google Analytics 4.\n *\n * Requires the caller to format their own events (sadly) since GA can be configured with any\n * object.\n */\nexport class GoogleAnalytics4ClientEventListener<\n  LoggingContext extends EmptyObject = EmptyObject,\n  CustomEvents extends EmptyObject = EmptyObject,\n  LoggingPermission extends DataLayerLoggingPermissions = DataLayerLoggingPermissions\n> extends AbstractDataLayerEventListener<\n  LoggingContext,\n  CustomEvents,\n  LoggingPermission,\n  GtagEvent\n> {\n  private readonly gaProps: GoogleAnalytics4ClientEventListenerProps<LoggingContext, CustomEvents>;\n\n  constructor(props: GoogleAnalytics4ClientEventListenerProps<LoggingContext, CustomEvents>) {\n    super(props);\n    this.gaProps = props;\n  }\n\n  /** @override addEventToDataLayer */\n  protected addEventToDataLayer(event: unknown): void {\n    if (!Array.isArray(event)) {\n      throw new Error('Unexpected event for GA4. GA4 events are arrays.');\n    }\n\n    // TODO: The first argument in the array has to be either 'js' | 'config' | 'set' | 'get' | 'event'\n    // So we can validate events here.\n\n    gtag(...(event as unknown[]));\n  }\n\n  /** @override init */\n  protected init(): Promise<void> {\n    window.dataLayer = window.dataLayer || [];\n    // Uses the GTAG Api\n    const ga4Script = document.createElement('script');\n    ga4Script.async = true;\n    ga4Script.src = `https://www.googletagmanager.com/gtag/js?id=${this.gaProps.gaId}`;\n\n    if (this.gaProps.nonce) ga4Script.nonce = this.gaProps.nonce;\n\n    document.head.appendChild(ga4Script);\n\n    // Push consent default and other privacy config BEFORE js/config so gtag.js sees them first\n    // and updates its internal consent state (visible in the Consent tab).\n    if (this.gaProps.privacyConfig) {\n      this.applyPrivacyConfig(this.gaProps.privacyConfig);\n    }\n\n    this.addEventToDataLayer([\n      'js',\n      this.gaProps.clock ? new Date(this.gaProps.clock()) : new Date(),\n    ]);\n\n    this.addEventToDataLayer([\n      'config',\n      this.gaProps.gaId,\n      {\n        debug_mode: this.gaProps.debugMode ?? false,\n        send_page_view: this.gaProps.sendPageView ?? true,\n        user_id: this.gaProps.userId,\n      },\n    ]);\n\n    return Promise.resolve();\n  }\n\n  /** @override */\n  protected addEventCallback = addGa4EventCallback;\n\n  /** @override applyPrivacyConfig */\n  protected applyPrivacyConfig(config: DataLayerPrivacyConfig): void {\n    // Set Consent Mode default state so gtag.js updates its internal consent state (Consent tab).\n    this.addEventToDataLayer([\n      'consent',\n      'default',\n      {\n        ad_storage: 'granted',\n        analytics_storage: 'granted',\n        ad_user_data: 'granted',\n        ad_personalization: 'granted',\n        wait_for_update: 500,\n      },\n    ]);\n\n    // Enable Restricted Data Processing if requested\n    if (config.restrictDataProcessing) {\n      this.addEventToDataLayer(['set', 'restricted_data_processing', true]);\n    }\n\n    // Set Consent Mode default state so gtag.js updates its internal consent state (Consent tab).\n    // Must use 'default' for the initial state before the tag runs; use 'update' only when user\n    // changes consent. See https://developers.google.com/tag-platform/security/guides/consent\n    if (config.configureConsent) {\n      this.addEventToDataLayer([\n        'consent',\n        'update',\n        {\n          ad_storage: 'denied',\n          analytics_storage: 'granted',\n          ad_user_data: 'denied',\n          ad_personalization: 'denied',\n          wait_for_update: 500,\n        },\n      ]);\n    }\n\n    // Enable ads data redaction if requested\n    if (config.redactAdsData) {\n      this.addEventToDataLayer(['set', 'ads_data_redaction', true]);\n    }\n  }\n}\n", "import type {\n  DataLayerEventListenerProps,\n  DataLayerLoggingPermissions,\n  DataLayerPrivacyConfig,\n  EmptyObject,\n} from '@snapchat/logging';\nimport { AbstractDataLayerEventListener } from '@snapchat/logging';\n\ndeclare global {\n  interface Window {\n    dataLayer?: unknown[];\n  }\n}\n\nconst gtmScriptId = 'gtm-script';\n\n/**\n * Type for events that are OK to send through GTM. These can be any object type.\n *\n * See: https://developers.google.com/tag-platform/tag-manager/datalayer\n *\n * TODO: Change the type to accept actual event params. However it's hard to make the generic work\n * with the existing GTM definitions in the web package.\n */\n// biome-ignore lint/suspicious/noExplicitAny: TODO write reason\nexport type GtmEvent = Partial<Record<string, any>>;\n\nexport interface GoogleTagManagerClientEventListenerProps<\n  LoggingContext extends EmptyObject = EmptyObject,\n  CustomEvents extends EmptyObject = EmptyObject\n> extends Omit<DataLayerEventListenerProps<LoggingContext, CustomEvents, GtmEvent>, 'dataLayer'> {\n  gtmId: string;\n  nonce?: string;\n}\n\n/**\n * Adds the {eventCallback} and {eventTimeout} contol parameters to a GTM event.\n *\n * See https://developers.google.com/analytics/devguides/migration/ecommerce/gtm-ga4-to-ua\n */\nexport function addGtmEventCallback(event: GtmEvent, callback: () => void): boolean {\n  if (typeof event !== 'object') {\n    throw new Error('Unexpected event for GTM. GTM events are objects.');\n  }\n\n  // TODO: Merge eventCallback if there's one already specified in the event.\n\n  event.eventCallback = callback;\n  event.eventTimeout = 2_000 /* ms */;\n  return true;\n}\n\n/**\n * Note that even though gtag() just adds arguments to window.dataLayer, events HAVE to be wrapped\n * in an Arguments constructor.\n */\nfunction gtag(..._args: unknown[]) {\n  // biome-ignore lint/style/noArguments: Doesn't seem to work w/ rest args because the types expects instance of \"Arguments\".\n  // biome-ignore lint/correctness/noUndeclaredVariables: Every function technically has \"arguments\" in scope.\n  window.dataLayer!.push(arguments);\n}\n\n/**\n * Event listener that sends events to Google Tag Manager.\n *\n * Requires the caller to format their own events (sadly) since GTM can be configured with any\n * object.\n *\n * TODO: find out why child container nonce isn't set properly\n * https://jira.sc-corp.net/browse/ENTWEB-8257\n */\nexport class GoogleTagManagerClientEventListener<\n  LoggingContext extends EmptyObject = EmptyObject,\n  CustomEvents extends EmptyObject = EmptyObject,\n  LoggingPermission extends DataLayerLoggingPermissions = DataLayerLoggingPermissions\n> extends AbstractDataLayerEventListener<\n  LoggingContext,\n  CustomEvents,\n  LoggingPermission,\n  GtmEvent\n> {\n  private readonly gtmProps: GoogleTagManagerClientEventListenerProps<LoggingContext, CustomEvents>;\n\n  constructor(props: GoogleTagManagerClientEventListenerProps<LoggingContext, CustomEvents>) {\n    super(props);\n    this.gtmProps = props;\n  }\n\n  /** @override addEventToDataLayer */\n  protected addEventToDataLayer(event: GtmEvent | unknown[]): void {\n    if (typeof event === 'object' && event !== null && !Array.isArray(event)) {\n      window.dataLayer!.push(event);\n    } else {\n      gtag(...(event as unknown[]));\n    }\n  }\n\n  /** @override init */\n  protected init(): Promise<void> {\n    window.dataLayer = window.dataLayer || [];\n\n    const gtmScript = document.createElement('script');\n    gtmScript.async = true;\n    gtmScript.src = `https://www.googletagmanager.com/gtm.js?id=${this.gtmProps.gtmId}`;\n    gtmScript.id = gtmScriptId;\n\n    if (this.gtmProps.nonce) gtmScript.nonce = this.gtmProps.nonce;\n\n    document.head.appendChild(gtmScript);\n\n    // Push privacy events BEFORE gtm.js so they are in the queue when GTM runs.\n    if (this.gtmProps.privacyConfig) {\n      this.applyPrivacyConfig(this.gtmProps.privacyConfig);\n    }\n\n    // We need to configure datalayer with a custom record due to GTM requiring gtm.start\n    // https://developers.google.com/tag-platform/tag-manager/web/datalayer\n    this.addEventToDataLayer({ 'gtm.start': Date.now(), event: 'gtm.js' });\n\n    return Promise.resolve();\n  }\n\n  /** @override */\n  protected addEventCallback = addGtmEventCallback;\n\n  /** @override applyPrivacyConfig */\n  protected applyPrivacyConfig(config: DataLayerPrivacyConfig): void {\n    // Set Consent Mode default state so GTM updates its internal consent state (Consent tab).\n    this.addEventToDataLayer([\n      'consent',\n      'default',\n      {\n        ad_storage: 'granted',\n        analytics_storage: 'granted',\n        ad_user_data: 'granted',\n        ad_personalization: 'granted',\n        wait_for_update: 500,\n      },\n    ]);\n    if (config.restrictDataProcessing) {\n      this.addEventToDataLayer(['set', 'restricted_data_processing', true]);\n    }\n\n    // Set Consent Mode default state so GTM updates its internal consent state (Consent tab).\n    // Use 'default' for the initial state before the tag runs; use 'update' when user changes consent.\n    // See https://developers.google.com/tag-platform/security/guides/consent\n    if (config.configureConsent) {\n      this.addEventToDataLayer([\n        'consent',\n        'update',\n        {\n          ad_storage: 'denied',\n          analytics_storage: 'granted',\n          ad_user_data: 'denied',\n          ad_personalization: 'denied',\n          wait_for_update: 500,\n        },\n      ]);\n    }\n\n    // Enable ads data redaction if requested\n    if (config.redactAdsData) {\n      this.addEventToDataLayer(['set', 'ads_data_redaction', true]);\n    }\n  }\n}\n", "import type { BaseNetworkHandler, Config } from '@snapchat/graphene';\nimport { Graphene, FetchNetworkHandler } from '@snapchat/graphene';\nimport type { BasePermission, EmptyObject, GrapheneLoggingContext } from '@snapchat/logging';\nimport { AbstractGrapheneEventListener } from '@snapchat/logging';\n\n/**\n * Graphene EventListener suitable for usage on the client.\n *\n * TODO: This uses 'fetch' for network which works in Node since Node18. Wonder if this and the\n * server implementation can be consolidated.\n */\nexport class GrapheneClientEventListener<\n  LoggingContext extends GrapheneLoggingContext = GrapheneLoggingContext,\n  CustomEvents extends EmptyObject = EmptyObject,\n  LoggingPermission extends BasePermission = BasePermission\n> extends AbstractGrapheneEventListener<LoggingContext, CustomEvents, LoggingPermission> {\n  /** @override istanbul ignore next */\n  protected getNetworkHandler = (options: Config): BaseNetworkHandler => {\n    return new FetchNetworkHandler(options);\n  };\n\n  /** @override istanbul ignore next */\n  protected getClient = (): Graphene => {\n    return new Graphene();\n  };\n}\n", "import type { BrowserOptions } from '@sentry/browser';\nimport type {\n  BasePermission,\n  EmptyObject,\n  SentryEventCapturer,\n  SentryErrorCapturer,\n  SentryEventListenerProps,\n} from '@snapchat/logging';\nimport { AbstractSentryEventListener } from '@snapchat/logging';\n\ninterface Props<LoggingContext extends EmptyObject, CustomEvents extends EmptyObject>\n  extends BrowserOptions,\n    SentryEventListenerProps<LoggingContext, CustomEvents> {}\n\n// generic pattern for matching all requests.  Used as a fallback if props does not define the requred `allowUrls` prop.\nconst matchAllRequests = /.*/;\n\n/**\n * Error capture event listener that goes into go/sentry.\n *\n * - See https://docs.sentry.io/clients/javascript/ for public API\n * - See https://wiki.sc-corp.net/display/TOOL/Sentry+User+Guide for the overall guide\n * - See https://github.sc-corp.net/Snapchat/web-common/tree/master/packages/sentry-browser for code\n *   samples\n */\nexport class SentryClientEventListener<\n  LoggingContext extends EmptyObject = EmptyObject,\n  CustomEvents extends EmptyObject = EmptyObject,\n  LoggingPermission extends BasePermission = BasePermission\n> extends AbstractSentryEventListener<LoggingContext, CustomEvents, LoggingPermission> {\n  private readonly browserProps: Props<LoggingContext, CustomEvents>;\n  private isInitCalled = false;\n  private clientCaptureEvent: SentryEventCapturer | undefined;\n  private clientCaptureException: SentryErrorCapturer | undefined;\n\n  constructor(props: Props<LoggingContext, CustomEvents>) {\n    super(props);\n    this.browserProps = props;\n  }\n\n  private loadSentryAndInit = async (): Promise<void> => {\n    if (this.isInitCalled) {\n      return;\n    }\n    this.isInitCalled = true;\n    // NOTE: Lazy-loading the sentry libraries because sentry is a big library.\n    const { init, captureException, captureEvent } = await import('@snapchat/sentry-browser');\n    this.clientCaptureException = captureException;\n    this.clientCaptureEvent = captureEvent;\n    // specify a wildcard parameter for the `allowUrls` prop if not specified via constructor\n    init({ allowUrls: [matchAllRequests], ...this.browserProps });\n  };\n\n  /** @override */\n  protected getExceptionCapturer = async (): Promise<SentryErrorCapturer> => {\n    await this.loadSentryAndInit();\n    return this.clientCaptureException!;\n  };\n\n  /** @override */\n  protected getEventCapturer = async (): Promise<SentryEventCapturer> => {\n    await this.loadSentryAndInit();\n    return this.clientCaptureEvent!;\n  };\n}\n", "import { parseError } from '@snapchat/core';\nimport type { LoggedEvent, MultipleDataLayerEvents } from '@snapchat/logging';\nimport { LoggingEventType } from '@snapchat/logging';\nimport { GoogleTagManagerClientEventListener } from '@snapchat/logging-browser';\nimport type { GoogleTagManagerClientEventListenerProps } from '@snapchat/logging-browser/dist/types/GoogleTagManagerClientEventListener';\n\nimport { UrlParameter } from '../../../constants/urlParameters';\nimport type {\n  GoogleEvent,\n  GoogleNonInteractionEvent,\n  GoogleTimingEvent,\n  GoogleUserEvent,\n  GoogleValueEvent,\n} from '../../../types/gtm';\nimport { SubscribedEventType } from '../eventListenerTypes';\nimport type { LoggingContext, LoggingCustomEvents, LoggingPermissions } from '../loggingTypes';\n\n/**\n * Name of the event that we can pass to the GTM to trigger the universal analytics event record (GA\n * Event).\n */\nexport const googleAnalyticsEventName = 'analyticsEvent';\n\nconst googleAnalyticsValueEventName = 'analyticsValueEvent';\n\nconst googleAnalyticsTimingEventName = 'analyticsTimingEvent';\n\n/**\n * Context values needed for GoogleEventListener intialization. NOTE: We need to minimize this list\n * as much as possible so we don't have to delay logging.\n */\nexport type InitialLoggingContext = Required<Pick<LoggingContext, 'locale'>> &\n  Partial<Pick<LoggingContext, 'globalPrivacyControl'>>;\n\ntype Props = Pick<GoogleTagManagerClientEventListenerProps, 'gtmId' | 'nonce' | 'useAsync'> & {\n  initialContext: InitialLoggingContext;\n};\n\n/** Custom event listener for GTM events. */\nexport class GoogleEventListener extends GoogleTagManagerClientEventListener<\n  LoggingContext,\n  LoggingCustomEvents,\n  LoggingPermissions\n> {\n  protected isOutsideCalifornia = false;\n  protected userLocation = 'Unknown';\n  /** When true, user has sent Global Privacy Control signal; we restrict tracking per CCPA. */\n  protected globalPrivacyControl = false;\n  // We don't always preserve the gtmDebug query parameter (examples: gallery, search page)\n  // so storing in internal state instead.\n  protected isGtmDebug = false;\n\n  protected initialContext: Partial<LoggingContext>;\n\n  public constructor(props: Props) {\n    const { initialContext, ...otherProps } = props;\n\n    super({ ...otherProps, eventFormatter: GoogleEventListener.eventFormat });\n    this.initialContext = initialContext;\n  }\n\n  /** @override init */\n  protected async init(): Promise<void> {\n    // NOTE: we need to seed the dataLayer BEFORE we add the GTM Script tag so we ensure these variables exist.\n    // TODO: consider adding optional beforeInit and afterInit event hooks to the GoogleTagManagerClientEventListener class\n    window.dataLayer = window.dataLayer || [];\n\n    await this.checkRegion();\n    window.dataLayer.push({ userLocation: this.userLocation });\n\n    const inCalifornia = !this.isOutsideCalifornia;\n    const enableConsentConfigs = inCalifornia && this.initialContext.globalPrivacyControl;\n\n    /**\n     * We want the CCPA privacy configs in the dataLayer before the parent's event objects and\n     * gtm.js. There are 3 cases:\n     *\n     * 1. If we're in California with no GPC signal, enable RDP only.\n     * 2. If we're in California with a GPC signal, enable RDP, consent, and ads data redaction.\n     * 3. If we're not in California, just set the default consent configurations and nothing else\n     *    regardless of GPC.\n     */\n    this.applyPrivacyConfig({\n      restrictDataProcessing: inCalifornia,\n      configureConsent: enableConsentConfigs,\n      redactAdsData: enableConsentConfigs,\n    });\n\n    // Enable this listener only after CCPA privacy config is in the dataLayer, so no events are sent before restrictions apply.\n    if (this.permissions.has('logging')) {\n      void this.allow('logging');\n    }\n\n    // Add initial event context (for now, just the `page_locale` custom parameter) so that all subsequent events can reference it.\n    this.addEventToDataLayer({\n      pageLocale: this.initialContext.locale,\n    });\n\n    return await super.init();\n  }\n\n  /**\n   * These fields need to be populated on all page view and site-wide experiment events since we may\n   * be logging asynchronously. We need to rely on our internal event context rather than what is\n   * implementedin in GTM / GA4 as those assume synchronous logging.\n   *\n   * The dataLayer will preserve these values for subsequent events, but we need to always populate\n   * these fields on events where the values may change (page views) or where a race condition may\n   * cause the wrong value to be logged (sitewide experiments).\n   */\n  static getFieldsFromContext = (context: Partial<LoggingContext>) => ({\n    pagePath: context?.path,\n    pageLocation: context?.url?.toString(),\n    pageLocale: context?.locale,\n  });\n\n  /**\n   * Custom permission handler. GTM logging is allowed for all regions; California users get CCPA\n   * privacy config applied in init() before logging is enabled.\n   *\n   * @override\n   */\n  protected hasAllPermissions: () => boolean = () => {\n    // Absolute override. When running in GTM debug mode, need to ensure that\n    // this listener is turned on.\n    const isGtmDebug = new URL(window.location.href).searchParams.has(\n      UrlParameter.GOOGLE_TAG_MANAGER_DEBUG\n    );\n\n    if (isGtmDebug) {\n      this.isGtmDebug = isGtmDebug;\n      return true;\n    }\n\n    if (this.isGtmDebug) {\n      return true;\n    }\n\n    // TODO: Figure out why we can't call super.hasAllPermissions() here.\n    let superHasAllPermissions = true;\n\n    for (const permission of this.baseProps.requiredPermissions) {\n      if (!this.permissions.has(permission)) {\n        superHasAllPermissions = false;\n        break;\n      }\n    }\n\n    if (!superHasAllPermissions) return false;\n\n    return true;\n  };\n\n  /**\n   * Determines user region (California vs not). Used to apply CCPA privacy config for CA users\n   * before enabling GTM logging; init() enables logging for all regions after this runs.\n   *\n   * TODO: Wait for legal's response on whether we need to continue doing this. If they reaffirm,\n   * then we should move this into some sort of a helper function. See\n   * https://groups.google.com/a/snapchat.com/g/webeng/c/-a43qV45er4 And the current decision here:\n   * https://wiki.sc-corp.net/pages/viewpage.action?pageId=255171537\n   */\n  public checkRegion = async (): Promise<void> => {\n    if (this.isOutsideCalifornia) return;\n\n    try {\n      const response = await fetch('https://web-platform.snap.com/cookies/user_location');\n      const data = (await response.json()) as { country: string; region: string };\n      this.userLocation = `${data.country}-${data.region}`;\n      this.isOutsideCalifornia = data.country !== 'US' || data.region !== 'ca';\n    } catch (error) {\n      // Default to unknown location (ZZ-na); allow logging.\n      console.warn('Unable to determine user location:', parseError(error).message);\n      this.isOutsideCalifornia = true;\n    }\n  };\n\n  /**\n   * Event Formatter for the GTM events. Note that this isn't generic and only works because MWP's\n   * GTM container accepts these fields.\n   */\n  static eventFormat(\n    event: LoggedEvent<LoggingCustomEvents>,\n    context: Partial<LoggingContext>\n  ): GoogleEvent | MultipleDataLayerEvents<GoogleEvent> | null {\n    switch (event.type) {\n      case LoggingEventType.USER_ACTION: {\n        return {\n          event: googleAnalyticsEventName,\n          eventAction: event.action,\n          eventLabel: event.label || null,\n          eventCategory: event.component,\n          elementLocation: context.elementLocation ?? null,\n          elementText: context.elementText ?? null,\n          targetUrl: context.targetUrl ?? null,\n          eventNonInt: false,\n        } as GoogleUserEvent;\n      }\n\n      case LoggingEventType.INFO: {\n        return {\n          event: googleAnalyticsEventName,\n          eventAction: event.action,\n          eventLabel: event.label ?? null,\n          eventCategory: event.component,\n          elementLocation: context.elementLocation ?? null,\n          elementText: context.elementText ?? null,\n          targetUrl: context.targetUrl ?? null,\n          eventNonInt: true,\n        } as GoogleNonInteractionEvent;\n      }\n\n      case LoggingEventType.VALUE: {\n        return {\n          event: googleAnalyticsValueEventName,\n          eventCategory: event.component,\n          eventVariable: event.variable,\n          eventLabel: event.label ?? null,\n          eventValue: event.value,\n          elementLocation: context.elementLocation ?? null,\n          elementText: context.elementText ?? null,\n          targetUrl: context.targetUrl ?? null,\n          eventNonInt: true,\n        } as GoogleValueEvent;\n      }\n\n      case LoggingEventType.TIMING: {\n        return {\n          event: googleAnalyticsTimingEventName,\n          eventCategory: event.component,\n          eventVariable: event.variable,\n          eventLabel: event.label ?? null,\n          eventValue: event.valueMs,\n          elementLocation: context.elementLocation ?? null,\n          elementText: context.elementText ?? null,\n          targetUrl: context.targetUrl ?? null,\n          eventNonInt: true,\n        } as GoogleTimingEvent;\n      }\n\n      case LoggingEventType.CUSTOM: {\n        switch (event.subscribedEventType) {\n          case SubscribedEventType.PHONE_NUMBER_EVENT: {\n            return {\n              ...event,\n              event: event.event ?? googleAnalyticsEventName,\n              eventAction: event.event ?? 'PhoneNumberInteraction',\n              eventCategory: 'PhoneNumberForm',\n              eventNonInt: false,\n            };\n          }\n\n          case SubscribedEventType.PAGE_LOAD: {\n            const requiredFields = GoogleEventListener.getFieldsFromContext(context);\n\n            return {\n              type: 'multiple',\n              events: [\n                // Fires 'Virtual Pageview' Trigger in GTM, used for Legacy GA UA integration\n                // TODO: remove this once the GTM configuration no longer references this.\n                {\n                  ...requiredFields,\n                  event: 'virtualPageview',\n                  eventNonInt: true,\n                  eventAction: 'View',\n                  eventCategory: 'Page',\n                  virtualPageviewPath: window.location.pathname,\n                },\n                {\n                  ...requiredFields,\n                  event: googleAnalyticsEventName,\n                  eventNonInt: true,\n                  eventAction: 'Load',\n                  eventCategory: 'Page',\n                  eventLabel: window.location.pathname,\n                },\n              ],\n            };\n          }\n\n          /**\n           * Ecommerce specific event. One event needs to be pushed with {ecommerce: null} The next\n           * event will be sent with the usual event fields (eventLabel, eventCategory, etc.)\n           *\n           * - An ecommerce object Reference:\n           *   https://developers.google.com/analytics/devguides/collection/ua/gtm/enhanced-ecommerce\n           */\n          case SubscribedEventType.ECOMMERCE: {\n            return {\n              type: 'multiple',\n              // For now, we log these using GA UA ecommerce format (does not utilize GA4 ecommerce integrations)\n              // TODO: reimplement using GA 4 ecommerce format: https://jira.sc-corp.net/browse/ENTWEB-8181\n              events: [\n                { ecommerce: null },\n                {\n                  ...event,\n                  event: 'analyticsEvent',\n                  elementLocation: context.elementLocation ?? null,\n                  elementText: context.elementText ?? null,\n                  targetUrl: context.targetUrl ?? null,\n                },\n              ],\n            };\n          }\n\n          case SubscribedEventType.EXPERIMENT_IMPRESSION: {\n            if (!event.experimentId && !event.variantId) {\n              return null;\n            }\n\n            const requiredFields = GoogleEventListener.getFieldsFromContext(context);\n            return {\n              ...requiredFields,\n              event: 'experiment_impression',\n              experiment_id: event.experimentId,\n              variant_id: `${event.experimentId}.${event.variantId}`,\n              elementLocation: context.elementLocation ?? null,\n              elementText: context.elementText ?? null,\n              targetUrl: context.targetUrl ?? null,\n            };\n          }\n        }\n\n        // Default custom events is to skip them.\n        return null;\n      }\n    }\n\n    // Default for other events is to skip them.\n    return null;\n  }\n\n  /** @override */\n  protected flushInternal: () => Promise<unknown> = () => {\n    return Promise.resolve();\n  };\n}\n", "import { Site } from '@snapchat/mw-common';\nimport type { FC } from 'react';\nimport { useEffect } from 'react';\nimport { Route, Switch, useHistory, useLocation } from 'react-router-dom';\n\nimport { Feature, useFeatureFlags } from './components/FeatureFlags';\nimport { Slug } from './components/Slug';\nimport { Config } from './config';\nimport { cookieSettingsPath } from './helpers/trackingCookies';\nimport { CookieSettings } from './pages/CookieSettings';\nimport { NoMatch } from './pages/NoMatch';\nimport { Search } from './pages/Search';\nimport { PoliticalAdAsset } from './sites/snap/components/PoliticalAdAsset/PoliticalAdAsset';\nimport { ShopTestPage } from './sites/stinson/pages/ShopTestPage';\n\nexport const Routes: FC = () => {\n  const location = useLocation();\n  const history = useHistory();\n  const featureFlags = useFeatureFlags();\n\n  const enableSearchFeature = featureFlags[Feature.ENABLE_SITE_SEARCH] === 'true';\n\n  /**\n   * Handle SSR - animate scroll on first client render (uses timeout to allow child nodes to\n   * render)\n   */\n  // biome-ignore lint/correctness/useExhaustiveDependencies: this should only run once.\n  useEffect(() => {\n    if (!location.hash) return;\n\n    const timeout = setTimeout(() => {\n      const element = document.getElementById(location.hash.slice(1));\n      element?.scrollIntoView({ behavior: 'smooth' });\n    }, 1000);\n\n    return () => {\n      clearTimeout(timeout);\n    };\n  }, []);\n\n  /** Listener for client-side same page anchor navigation. Ensures page scrolls to target element. */\n  // TODO: switch to useNavigate hook when we upgrade to react-router v6\n  // https://reactrouter.com/api/hooks/useNavigate\n  useEffect(() => {\n    const listenerCleanup = history.listen(location => {\n      if (!location.hash) return;\n\n      const element = document.getElementById(location.hash.slice(1));\n      element?.scrollIntoView({ behavior: 'smooth' });\n    });\n\n    return listenerCleanup;\n  }, [history.listen]);\n\n  const renderedRoute = (\n    <Switch>\n      <Route\n        exact\n        path={cookieSettingsPath}\n        render={() => (\n          <CookieSettings\n            backgroundColor={Config.theme?.defaultPageBackgroundColor}\n            cookieDomain={Config.trackingSettings.cookieDomain}\n            deploymentType={Config.deploymentType}\n            domainName={Config.domainName}\n            isClient={Config.isClient}\n          />\n        )}\n      />\n      {enableSearchFeature && <Route exact path=\"/search\" component={Search} />}\n      {Config.site === Site.SNAP && (\n        <Route path=\"/political-ads/asset/:assetId\" component={PoliticalAdAsset} />\n      )}\n      {/**\n       * TODO: Remove this later when we implement a real shopping page.\n       *\n       * NOTE: This is treeshaken becuase other sites will ignore imports of site components. (see\n       * esbuild.client.ts ignore plugin)\n       */}\n      {Config.site === Site.STINSON && <Route exact path=\"/shop-test\" component={ShopTestPage} />}\n      <Route path=\"/404\" component={NoMatch} />\n      {/* Needs to match all paths, including '' (default path after prefix, i.e. /fr-FR) */}\n      <Route path=\"*\" component={Slug} />\n    </Switch>\n  );\n\n  return renderedRoute;\n};\n", "import { useContentfulImages } from '@snapchat/mw-contentful-client';\nimport type { BlockContentsItem, Block as BlockType } from '@snapchat/mw-contentful-schema';\nimport type { ImageSources, WidthType } from '@snapchat/snap-design-system-marketing';\nimport { Block as BlockSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC, ReactElement } from 'react';\nimport { useContext } from 'react';\n\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logError } from '../../helpers/logging';\nimport { useMotifScheme } from '../../hooks/useMotifScheme';\nimport { useParseMediaContainer } from '../../hooks/useParseMediaContainer';\nimport { combineImageSources } from '../../utils/combineImageSources';\nimport { getContentfulInspectorProps } from '../../utils/contentful/getContentfulInspectorProps';\nimport {\n  renderRichText,\n  renderRichTextMultiLineWithMarkings,\n} from '../../utils/renderText/renderRichText';\nimport { Accordion } from '../Accordion';\nimport { AnimatedAccordion } from '../AnimatedAccordion/AnimatedAccordion';\nimport { CallToAction } from '../CallToAction';\nimport { CarouselV3 } from '../CarouselV3';\nimport { ContentShallow } from '../Content/ContentShallow';\nimport { FormShallow } from '../Form';\nimport { LazyGallery } from '../Gallery/LazyGallery';\nimport { type ImageDataProps, getImageSourceSettings } from '../Image';\nimport { MosaicShallow } from '../Mosaic/MosaicShallow';\nimport { RelatedContent } from '../RelatedContent';\nimport { SlugContext } from '../Slug/SlugContext';\nimport { Tabs } from '../Tabs';\nimport type { VideoDataProps } from '../Video/types';\nimport { BarChartShallow } from '../visualizations/BarChart';\nimport { ChartToggleWrapper } from '../visualizations/ChartToggle';\nimport { GeoMapShallow } from '../visualizations/GeoMap';\nimport { LineChartShallow } from '../visualizations/LineChart';\nimport { MultiVisualizationShallow } from '../visualizations/MultiVisualization';\nimport { TableShallow } from '../visualizations/Table';\nimport type { BlockProps } from './types';\n\ntype BlockContentProps = Pick<BlockContentsItem, 'sys' | '__typename'>;\n\nexport const BlockContent: FC<BlockContentProps> = (props: BlockContentProps): ReactElement => {\n  switch (props.__typename) {\n    case 'Gallery': {\n      return <LazyGallery {...props} />;\n    }\n\n    case 'CarouselV3': {\n      return <CarouselV3 {...props} />;\n    }\n\n    case 'Tabs': {\n      return <Tabs {...props} />;\n    }\n\n    case 'Mosaic': {\n      return <MosaicShallow {...props} __typename=\"Mosaic\" />;\n    }\n\n    case 'Form': {\n      return <FormShallow {...props} />;\n    }\n\n    case 'ChartToggle': {\n      return <ChartToggleWrapper {...props} />;\n    }\n\n    case 'BarChart': {\n      return <BarChartShallow {...props} />;\n    }\n\n    case 'LineChart': {\n      return <LineChartShallow {...props} />;\n    }\n\n    case 'GeoVisualization': {\n      return <GeoMapShallow {...props} />;\n    }\n\n    case 'VisualizationSelector': {\n      return <MultiVisualizationShallow {...props} />;\n    }\n\n    case 'TableVisualization': {\n      return <TableShallow {...props} />;\n    }\n\n    case 'Content': {\n      return <ContentShallow {...props} />;\n    }\n\n    case 'Accordion': {\n      return <Accordion {...props} />;\n    }\n\n    case 'AnimatedAccordion': {\n      return <AnimatedAccordion {...props} />;\n    }\n\n    case 'RelatedContent': {\n      return <RelatedContent {...props} />;\n    }\n\n    default: {\n      logError({\n        component: 'Block',\n        message: `Unknown content type: ${props.__typename} with id: ${props.sys.id}`,\n      });\n\n      return <>\uD83D\uDC7F</>;\n    }\n  }\n};\nBlockContent.displayName = 'BlockContent';\n\nexport const Block: FC<BlockProps> = props => {\n  const {\n    maxColumns,\n    eyebrow,\n    title,\n    subtitle,\n    titleAlignment,\n    titleAlignmentMobile,\n    contentsCollection,\n    callsToActionCollection,\n    anchorId,\n    isNarrow,\n    widthStyle,\n    fullHeight,\n    brandBackgroundColor,\n    backgroundColor,\n    backgroundMediaV2,\n    theme,\n    isNextSameBackgroundColor,\n    isPreviousSameBackgroundColor,\n    className,\n    sys,\n    preChildren,\n    postChildren,\n    showCurtain: givenShowCurtain,\n    denseLayout,\n  } = props;\n\n  const motifScheme = useMotifScheme(brandBackgroundColor);\n\n  const { replacements } = useContext(SlugContext);\n  let finalContentsCollection = contentsCollection;\n\n  if (contentsCollection?.items.length && replacements) {\n    const contentsCollectionCopy = [...contentsCollection.items];\n\n    for (let i = 0; i < contentsCollectionCopy.length; i++) {\n      const contentId = contentsCollectionCopy[i]?.sys?.id;\n      const contentType = contentsCollectionCopy[i]?.__typename;\n\n      if (contentId && replacements && contentId in replacements) {\n        const replacement = replacements[contentId];\n\n        if (replacement === undefined) {\n          contentsCollectionCopy.splice(i, 1);\n        } else if (replacement && replacement.__typename === contentType) {\n          contentsCollectionCopy[i] = {\n            sys: { id: replacement.sys.id },\n            __typename: replacement.__typename,\n          };\n        }\n      }\n    }\n\n    finalContentsCollection = { items: contentsCollectionCopy };\n  }\n\n  const {\n    media: {\n      imageSource: backgroundImageSource,\n      imageAltText: backgroundImageAltText,\n      videoSource: backgroundVideoSource,\n    },\n    mobileMedia: {\n      imageSource: mobileBackgroundImageSource,\n      imageAltText: mobileBackgroundImageAltText,\n      videoSource: mobileBackgroundVideoSource,\n    },\n    thumbnailSource,\n  } = useParseMediaContainer(backgroundMediaV2 as ImageDataProps | VideoDataProps);\n\n  const blockChildren = (finalContentsCollection?.items ?? []).map(item => (\n    <BlockContent key={item.sys.id} {...(item as BlockContentProps)} />\n  ));\n\n  const callsToAction = callsToActionCollection.items.map(item => (\n    <CallToAction key={item.sys.id} {...item} />\n  ));\n\n  const { getImageSources } = useContentfulImages();\n\n  let bgImgSrc: ImageSources | undefined;\n\n  if (backgroundMediaV2?.__typename === 'Image') {\n    const { desktopSettings, mobileSettings } = getImageSourceSettings({\n      desktopHeight: backgroundMediaV2.media?.height ?? 0,\n      mobileHeight: backgroundMediaV2.mobileMedia?.height ?? 0,\n      enableHighDpi: backgroundMediaV2.enableHighDpi,\n      quality: backgroundMediaV2.quality,\n    });\n\n    bgImgSrc = combineImageSources({\n      desktop: getImageSources(backgroundImageSource, desktopSettings),\n      mobile: getImageSources(mobileBackgroundImageSource, mobileSettings),\n    });\n  }\n\n  const backgroundMediaStickers = backgroundMediaV2?.stickersCollection?.items?.map(sticker => ({\n    imgSrcs: getImageSources(sticker?.asset?.url) as ImageSources,\n    position: sticker?.position,\n    rotation: sticker?.rotation,\n  }));\n\n  const inspectorDatasets = getContentfulInspectorProps<BlockType>({\n    entryId: sys.id,\n    fieldIds: ['eyebrow', 'title', 'subtitle'],\n  });\n\n  // We are checking if showCurtain is different from false\n  // because we need to take in consideration the undefined value,\n  // if its undefined and there is a background image or video, the curtain should be shown too.\n  const showCurtain = (!!bgImgSrc || !!backgroundVideoSource) && givenShowCurtain !== false;\n\n  const block = (\n    // TODO: Think about adding a number for block index when anchorId is not present\n    // Relevant thread: https://snap.enterprise.slack.com/archives/G01LFA59Y3U/p1774022344155969\n    <BlockSDS\n      callsToAction={callsToAction}\n      anchorId={anchorId}\n      maxColumns={maxColumns ?? undefined}\n      subtitle={renderRichText(subtitle)}\n      eyebrow={eyebrow}\n      title={renderRichTextMultiLineWithMarkings(title)}\n      titleAlignment={titleAlignment}\n      titleAlignmentMobile={titleAlignmentMobile}\n      widthStyle={(widthStyle as WidthType) ?? (isNarrow ? 'narrow' : undefined)}\n      motifScheme={motifScheme}\n      backgroundColor={backgroundColor ?? theme}\n      isNextSameBackgroundColor={isNextSameBackgroundColor}\n      isPreviousSameBackgroundColor={isPreviousSameBackgroundColor}\n      fullHeight={fullHeight}\n      className={className}\n      {...inspectorDatasets}\n      preChildren={preChildren}\n      postChildren={postChildren}\n      backgroundVideoSource={backgroundVideoSource}\n      backgroundPosterSource={thumbnailSource}\n      mobileBackgroundVideoSource={mobileBackgroundVideoSource}\n      backgroundImageSources={bgImgSrc}\n      backgroundImageAltText={backgroundImageAltText ?? mobileBackgroundImageAltText}\n      showCurtain={showCurtain}\n      backgroundMediaStickers={backgroundMediaStickers}\n      denseLayout={denseLayout}\n    >\n      {blockChildren}\n    </BlockSDS>\n  );\n\n  if (anchorId) {\n    return (\n      <ElementLocation.Provider value={{ elementLocation: `block#${anchorId}` }}>\n        {block}\n      </ElementLocation.Provider>\n    );\n  }\n\n  return block;\n};\n\nBlock.displayName = 'Block';\n", "import type {\n  Accordion as AccordionType,\n  Content as ContentType,\n} from '@snapchat/mw-contentful-schema';\nimport {\n  AccordionItem as AccordionItemSDS,\n  Accordion as AccordionSDS,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\nimport type { ContentfulSysProps } from 'src/types/contentful';\n\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logUserEvent } from '../../helpers/logging';\nimport type { ContentfulIdVariable } from '../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport { UserAction } from '../../types/events';\nimport type { RichText } from '../../types/RichText';\nimport { isContentfulSysProps } from '../../utils/contentful';\nimport { getContentfulInspectorProps } from '../../utils/contentful/getContentfulInspectorProps';\nimport { renderRichTextMarkingsOnly } from '../../utils/renderText/renderRichText';\nimport { Content } from '../Content';\nimport { queries } from './query';\nimport type { AccordionDataHandlerProps } from './types';\n\nexport const Accordion: FC<ContentfulSysProps> = (props: ContentfulSysProps) => {\n  const id = isContentfulSysProps(props) ? props.sys.id : undefined;\n  const elementLocation = useContext(ElementLocation).elementLocation;\n\n  const { data } = useContentfulQuery<AccordionDataHandlerProps, ContentfulIdVariable>(\n    queries.all,\n    {\n      skip: !id,\n      variables: { id },\n    }\n  );\n\n  if (!data) return null;\n\n  const { titleDataset } = getContentfulInspectorProps<AccordionType>({\n    entryId: id!,\n    fieldIds: ['title'],\n  });\n\n  const accordionItems = data?.accordion.itemsCollection.items;\n\n  return (\n    <AccordionSDS\n      data-testid=\"accordion\"\n      multipleOpen={data?.accordion.multipleOpen}\n      title={data?.accordion.title}\n      titleDataset={titleDataset}\n    >\n      {accordionItems.map(item => {\n        const { titleDataset } = getContentfulInspectorProps<ContentType>({\n          entryId: item.sys.id,\n          fieldIds: ['title'],\n        });\n\n        const plainTitle = item.title ? item.title : item.sys.id;\n\n        return (\n          <AccordionItemSDS\n            id={item.sys.id}\n            key={item.sys.id}\n            title={renderRichTextMarkingsOnly(item.title)}\n            titleDataset={titleDataset}\n            onToggle={(isExpanding: boolean) => {\n              logUserEvent({\n                eventCategory: 'Accordion',\n                eventAction: isExpanding ? UserAction.Open : UserAction.Close,\n                eventLabel: null,\n                context: { elementText: plainTitle, elementLocation },\n              });\n            }}\n          >\n            <Content\n              body={item.body as RichText}\n              callsToActionCollection={item.callsToActionCollection ?? { items: [] }}\n              hasLinks={false}\n              sys={item.sys}\n            />\n          </AccordionItemSDS>\n        );\n      })}\n    </AccordionSDS>\n  );\n};\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { ctaFragment } from '../CallToAction';\n\nexport const fragments = {\n  /** Note: Requires calling query set the `$accordionItemsLimit` gql variable. */\n  all: gql`\n    fragment AccordionAll on Accordion {\n      ...ContentfulSysId\n      title\n      multipleOpen\n      itemsCollection(limit: 30) {\n        items {\n          ...ContentfulSysId\n          ... on AccordionItem {\n            title\n            body {\n              json\n            }\n            callsToActionCollection(limit: 2) {\n              items {\n                ... on CallToAction {\n                  ...CallToActionAll\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n    ${contentfulSysIdFragment}\n    ${ctaFragment}\n  `,\n};\n\nexport const queries = {\n  all: gql`\n    query accordionQuery($preview: Boolean!, $locale: String!, $id: String!) {\n      accordion(preview: $preview, locale: $locale, id: $id) {\n        ...AccordionAll\n      }\n    }\n    ${fragments.all}\n  `,\n};\n", "import { css } from '@emotion/css';\nimport { useContentfulImages } from '@snapchat/mw-contentful-client';\nimport {\n  Alignment,\n  AnimatedAccordionMediaDirection,\n  AnimatedAccordion as AnimatedAccordionSDS,\n  nonMobileMediaQuery,\n  Spacing,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logUserEvent } from '../../helpers/logging';\nimport type { ContentfulIdVariable } from '../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport type { ContentfulSysProps } from '../../types/contentful';\nimport { UserAction } from '../../types/events';\nimport { combineImageSources } from '../../utils/combineImageSources';\nimport { parseMedia } from '../../utils/media';\nimport {\n  renderRichTextMarkingsOnly,\n  renderRichTextWithElements,\n} from '../../utils/renderText/renderRichText';\nimport { getImageSourceSettings } from '../Image';\nimport type { AnimatedAccordionContentData, AnimatedAccordionData } from './query';\nimport { query } from './query';\n\nexport const verticalPaddingCss = css`\n  ${nonMobileMediaQuery} {\n    padding-top: ${Spacing.XL}px;\n  }\n`;\n\nexport const AnimatedAccordion: FC<ContentfulSysProps> = props => {\n  const elementLocation = useContext(ElementLocation).elementLocation;\n\n  const { data } = useContentfulQuery<AnimatedAccordionData, ContentfulIdVariable>(query, {\n    variables: { id: props.sys.id },\n  });\n\n  const {\n    accordionContentsCollection,\n    mediaDirection = AnimatedAccordionMediaDirection.End,\n    autoPlaySpeed: autoPlaySpeedSecs = 10,\n    textAlignmentMobile = Alignment.Start,\n  } = data?.animatedAccordion ?? {};\n\n  const { getImageSources } = useContentfulImages();\n\n  const items = (accordionContentsCollection?.items ?? []).map(\n    (item: AnimatedAccordionContentData) => {\n      const { imageSource, imageAltText } = parseMedia(item.image?.media);\n      const { imageSource: mobileImageSource } = parseMedia(item.image?.mobileMedia);\n\n      const { desktopSettings, mobileSettings } = getImageSourceSettings({\n        desktopHeight: item.image?.media?.height ?? 0,\n        mobileHeight: item.image?.mobileMedia?.height ?? 0,\n        enableHighDpi: item.image?.enableHighDpi,\n        quality: item.image?.quality,\n      });\n\n      const imgSrcs = combineImageSources({\n        desktop: getImageSources(imageSource, desktopSettings),\n        mobile: getImageSources(mobileImageSource, mobileSettings),\n      });\n\n      return {\n        title: renderRichTextMarkingsOnly(item.title),\n        body: renderRichTextWithElements(item.body),\n        imgSrcs,\n        imageAltText,\n      };\n    }\n  );\n\n  return (\n    <AnimatedAccordionSDS\n      items={items}\n      mediaDirection={mediaDirection}\n      autoPlaySpeed={autoPlaySpeedSecs}\n      textAlignmentMobile={textAlignmentMobile}\n      onItemSelect={(index: number) => {\n        logUserEvent({\n          eventCategory: 'AnimatedAccordion',\n          eventAction: UserAction.Click,\n          eventLabel: `section: ${index}`,\n          context: { elementLocation },\n        });\n      }}\n    />\n  );\n};\n", "import { gql } from '@apollo/client';\nimport type {\n  Alignment,\n  AnimatedAccordionMediaDirection,\n} from '@snapchat/snap-design-system-marketing';\n\nimport type { ContentfulTypedSysProps } from '../../types/contentful';\nimport type { RichText } from '../../types/RichText';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { type ImageDataProps, fragments as imageFragments } from '../Image';\n\nexport const fragments = {\n  all: gql`\n    fragment AnimatedAccordionAll on AnimatedAccordion {\n      ...ContentfulSysId\n      accordionContentsCollection {\n        items {\n          ...ContentfulSysId\n          image {\n            ...ImageAll\n          }\n          title\n          body {\n            json\n          }\n        }\n      }\n      mediaDirection\n      autoPlaySpeed\n      textAlignmentMobile\n    }\n    ${imageFragments.all}\n    ${contentfulSysIdFragment}\n  `,\n};\n\nexport const query = gql`\n  query AnimatedAccordionQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    animatedAccordion(preview: $preview, locale: $locale, id: $id) {\n      ...AnimatedAccordionAll\n    }\n  }\n  ${fragments.all}\n`;\n\nexport interface AnimatedAccordionContentData {\n  image?: ImageDataProps;\n  title?: string;\n  body?: RichText;\n}\nexport interface AnimatedAccordionData extends ContentfulTypedSysProps<'AnimatedAccordion'> {\n  animatedAccordion?: {\n    accordionContentsCollection?: {\n      items?: AnimatedAccordionContentData[];\n    };\n    mediaDirection?: AnimatedAccordionMediaDirection;\n    textAlignmentMobile?: Alignment;\n    autoPlaySpeed?: number;\n  };\n}\n", "import { css } from '@emotion/css';\nimport { DeploymentType } from '@snapchat/mw-common';\nimport { CarouselV3 as CarouselV3SDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport { Config } from '../../config';\nimport { UrlParameter } from '../../constants/urlParameters';\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logUserEvent } from '../../helpers/logging';\nimport { useAlternateBrandPropOverride } from '../../hooks/useAlternateBrandPropOverride';\nimport type { ContentfulIdVariable } from '../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport { UserAction } from '../../types/events';\nimport type { VideoDataProps } from '../Video/types';\nimport { CarouselV3ImageItem } from './CarouselV3ImageItem';\nimport { CarouselV3TextItem } from './CarouselV3TextItem';\nimport { CarouselV3VideoItem } from './CarouselV3VideoItem';\nimport { carouselV3Query } from './queries';\nimport {\n  type CarouselV3CardItemProps,\n  type CarouselV3DataHandlerProps,\n  type CarouselV3Props,\n  type CarouselV3TextItemProps,\n  type CarouselV3Types,\n  CarouselV3Layout,\n} from './types';\n\nconst noShadowCss = css`\n  box-shadow: unset;\n`;\n\nexport const CarouselV3: FC<CarouselV3Props> = props => {\n  const { isRTL } = useContext(AppContext);\n  const { getCurrentUrl } = useContext(AppContext);\n  const elementLocation = useContext(ElementLocation).elementLocation;\n  const url = new URL(getCurrentUrl());\n  const pauseAnimations =\n    Config.deploymentType !== DeploymentType.PRODUCTION &&\n    url.searchParams.get(UrlParameter.PAUSE_ANIMATIONS) === 'true';\n\n  const alternateBrandPropOverride = useAlternateBrandPropOverride(Config, 'carousel');\n\n  const { data } = useContentfulQuery<CarouselV3DataHandlerProps, ContentfulIdVariable>(\n    carouselV3Query,\n    {\n      variables: { id: props.sys.id },\n    }\n  );\n\n  const carouselItemsType = data?.carouselV3?.contentsCollection?.items?.[0]\n    ?.__typename as CarouselV3Types;\n\n  if (!data?.carouselV3) {\n    return null;\n  }\n\n  const { contentsCollection, mediaAspectRatio } = data.carouselV3;\n  const items = contentsCollection.items;\n\n  const singleView =\n    carouselItemsType === 'CarouselText' ||\n    data?.carouselV3?.layout === CarouselV3Layout.SingleSlideView;\n\n  const enableOverflowDecoration =\n    data?.carouselV3.enableOverflowDecoration ??\n    alternateBrandPropOverride?.defaultCarouselOverflowDecoration ??\n    Config.theme?.defaultCarouselOverflowDecoration;\n\n  return (\n    <CarouselV3SDS\n      isSingleView={singleView}\n      autoPlay={!pauseAnimations}\n      isRtl={isRTL}\n      enableOverflowDecoration={enableOverflowDecoration}\n      onSlideChange={(index: number, trigger: string) => {\n        logUserEvent({\n          eventCategory: 'Carousel',\n          eventAction: trigger === 'drag' ? UserAction.Scroll : UserAction.Click,\n          eventLabel: `slide_change: ${index}`,\n          context: { elementLocation },\n        });\n      }}\n    >\n      {items.map(item => {\n        if (item.__typename === 'CarouselCard') {\n          const cardItem = item as CarouselV3CardItemProps;\n          const hasVideo = cardItem.media.__typename === 'Video';\n          const autoPlay = (cardItem.media as VideoDataProps).autoPlay ?? true;\n          const enableVideoControls = hasVideo && !autoPlay;\n\n          const shadowCss = cardItem.showShadow ?? true ? undefined : noShadowCss;\n\n          return hasVideo ? (\n            <CarouselV3VideoItem\n              key={cardItem.sys.id}\n              cardItem={cardItem}\n              mediaAspectRatio={mediaAspectRatio}\n              enableVideoControls={enableVideoControls}\n              className={shadowCss}\n            />\n          ) : (\n            <CarouselV3ImageItem\n              key={cardItem.sys.id}\n              cardItem={cardItem}\n              mediaAspectRatio={mediaAspectRatio}\n              className={shadowCss}\n            />\n          );\n        }\n\n        if (item.__typename === 'CarouselText') {\n          const textItem = item as CarouselV3TextItemProps;\n          return <CarouselV3TextItem key={textItem.sys.id} textItem={textItem} />;\n        }\n\n        return null;\n      })}\n    </CarouselV3SDS>\n  );\n};\n\nCarouselV3.displayName = 'CarouselV3';\n", "import type { ImageSources, SrcSetSizes } from '@snapchat/mw-contentful-client';\nimport { useContentfulImages } from '@snapchat/mw-contentful-client';\nimport type { CarouselV3AspectRatios } from '@snapchat/snap-design-system-marketing';\nimport {\n  CarouselCardItem as CarouselCardItemSDS,\n  mobileMaxWidth,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { shouldFlushLogs } from '../../helpers/getLocalPath';\nimport { logger, logUserEvent } from '../../helpers/logging';\nimport { UserAction } from '../../types/events';\nimport { combineImageSources } from '../../utils/combineImageSources';\nimport { parseMedia } from '../../utils/media';\nimport { imageQuality } from '../Image';\nimport type { ImageDataProps } from '../Image/types';\nimport type { CarouselV3CardItemProps } from './types';\n\nexport const getPortraitCardImgSrcSetSizes = (quality: number): SrcSetSizes => ({\n  sizeToUrl: [\n    {\n      size: '600w',\n      settings: { width: 600, quality },\n    },\n  ],\n  sizes: '600px',\n});\n\nconst cardWidths = [622, 728];\nconst cardWidthsStr = cardWidths.map(cw => `${cw}px`).join(', ');\n\nexport const getLandscapeCardImgSrcSetSizes = (quality: number): SrcSetSizes => ({\n  sizeToUrl: cardWidths.map(width => ({\n    size: `${width}w`,\n    settings: { width, quality },\n  })),\n  sizes: `(max-width: ${mobileMaxWidth}px) ${cardWidthsStr}`,\n});\n\nexport const CarouselV3ImageItem: FC<{\n  cardItem: CarouselV3CardItemProps;\n  mediaAspectRatio: CarouselV3AspectRatios;\n  isVisible?: boolean;\n  shouldLoad?: boolean;\n  isResponsiveWidth?: boolean;\n  hideLinkArrow?: boolean;\n  className?: string;\n}> = ({\n  cardItem,\n  mediaAspectRatio,\n  isVisible,\n  shouldLoad,\n  isResponsiveWidth,\n  hideLinkArrow,\n  ...otherProps\n}) => {\n  const imageMedia = cardItem.media as ImageDataProps;\n\n  const { imageSource, imageAltText } = parseMedia(imageMedia.media);\n  const { imageSource: mobileImageSource } = parseMedia(imageMedia.mobileMedia);\n  const { getImageSources } = useContentfulImages();\n\n  const elementLocation = useContext(ElementLocation).elementLocation;\n\n  const quality = imageQuality[imageMedia.quality ?? 'Standard'];\n  const imgSettings =\n    mediaAspectRatio === '9:16'\n      ? getPortraitCardImgSrcSetSizes(quality)\n      : getLandscapeCardImgSrcSetSizes(quality);\n\n  const imageSrcSettings = { size: imgSettings, quality };\n\n  const imgSrcs = combineImageSources({\n    desktop: getImageSources(imageSource, imageSrcSettings),\n    /* TODO(kpan2): These aren't good for mobile images. */\n    mobile: getImageSources(mobileImageSource, imageSrcSettings),\n  });\n\n  // Logo settings\n  const logoMedia = cardItem.logo as ImageDataProps | undefined;\n  let logoImgSrcs: ImageSources | undefined = undefined;\n  let logoAltText: string | undefined = undefined;\n\n  if (logoMedia) {\n    const { imageSource, imageAltText } = parseMedia(logoMedia.media);\n    const { imageSource: mobileImageSource } = parseMedia(logoMedia.mobileMedia);\n    const quality = imageQuality[logoMedia.quality ?? 'Standard'];\n    const size =\n      mediaAspectRatio === '9:16'\n        ? getPortraitCardImgSrcSetSizes(quality)\n        : getLandscapeCardImgSrcSetSizes(quality);\n\n    logoImgSrcs = combineImageSources({\n      desktop: getImageSources(imageSource, { size, quality }),\n      mobile: getImageSources(mobileImageSource, { size, quality }),\n    });\n\n    logoAltText = imageAltText;\n  }\n\n  const slug = cardItem.slugReference?.slug;\n  const url = slug ? `/${slug}` : cardItem.url;\n\n  const onClick = (): void => {\n    if (!url) {\n      return;\n    }\n\n    logUserEvent({\n      eventAction: UserAction.Click,\n      eventCategory: 'CarouselV3',\n      eventLabel: `CarouselV3.ImageItem - ${url}`,\n      context: { targetUrl: url, elementLocation },\n    });\n\n    if (shouldFlushLogs(url)) {\n      void logger.flush();\n    }\n  };\n\n  return (\n    <CarouselCardItemSDS\n      aspectRatio={mediaAspectRatio}\n      body={cardItem.body}\n      key={cardItem.sys.id}\n      subtitle={cardItem.subtitle}\n      title={cardItem.title}\n      url={url}\n      imgSrcs={imgSrcs}\n      imgAltText={imageAltText}\n      isVisible={isVisible}\n      shouldLoad={shouldLoad}\n      onClick={onClick}\n      isResponsiveWidth={isResponsiveWidth}\n      hideLinkArrow={hideLinkArrow}\n      logoSrcs={logoImgSrcs}\n      logoAltText={logoAltText}\n      {...otherProps}\n    />\n  );\n};\n\nCarouselV3ImageItem.displayName = 'CarouselV3ImageItem';\n", "import { documentToPlainTextString } from '@contentful/rich-text-plain-text-renderer';\nimport { CarouselTextItem as CarouselTextItemSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logUserEvent } from '../../helpers/logging';\nimport { UserAction } from '../../types/events';\nimport { renderRichText } from '../../utils/renderText/renderRichText';\nimport type { CarouselV3TextItemProps } from './types';\n\nexport const CarouselV3TextItem: FC<{\n  textItem: CarouselV3TextItemProps;\n}> = ({ textItem }) => {\n  const description = renderRichText(textItem?.description);\n  const subtext = renderRichText(textItem?.subtext);\n\n  const slug = textItem.slugReference?.slug;\n  const url = slug ? `/${slug}` : textItem.url;\n\n  const elementLocation = useContext(ElementLocation).elementLocation;\n  const elementText = textItem.description?.json\n    ? documentToPlainTextString(textItem.description.json)\n    : undefined;\n\n  const onClick = (): void => {\n    if (!url) {\n      return;\n    }\n\n    logUserEvent({\n      eventAction: UserAction.Click,\n      eventCategory: 'CarouselV3',\n      eventLabel: `CarouselV3.TextItem - ${url}`,\n      context: {\n        targetUrl: url,\n        elementLocation,\n        elementText,\n      },\n    });\n  };\n\n  return (\n    <CarouselTextItemSDS\n      key={textItem.sys.id}\n      description={description}\n      subText={subtext}\n      url={url}\n      onClick={onClick}\n    />\n  );\n};\n\nCarouselV3TextItem.displayName = 'CarouselV3TextItem';\n", "import type { ImageSources } from '@snapchat/mw-contentful-client';\nimport { useContentfulImages } from '@snapchat/mw-contentful-client';\nimport type { CarouselV3AspectRatios } from '@snapchat/snap-design-system-marketing';\nimport { CarouselCardItem as CarouselCardItemSDS } from '@snapchat/snap-design-system-marketing';\nimport type React from 'react';\nimport type { FC } from 'react';\nimport { useContext, useState } from 'react';\n\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { shouldFlushLogs } from '../../helpers/getLocalPath';\nimport { logger, logUserEvent } from '../../helpers/logging';\nimport { useParseMediaContainer } from '../../hooks/useParseMediaContainer';\nimport { UserAction } from '../../types/events';\nimport { combineImageSources } from '../../utils/combineImageSources';\nimport { getFileInfo } from '../../utils/getFileInfo';\nimport { parseMedia } from '../../utils/media';\nimport { imageQuality } from '../Image';\nimport type { ImageDataProps } from '../Image/types';\nimport type { VideoDataProps } from '../Video/types';\nimport { getVideoWatchLogger } from '../Video/utils';\nimport {\n  getLandscapeCardImgSrcSetSizes,\n  getPortraitCardImgSrcSetSizes,\n} from './CarouselV3ImageItem';\nimport type { CarouselV3CardItemProps } from './types';\n\nexport const CarouselV3VideoItem: FC<{\n  cardItem: CarouselV3CardItemProps;\n  mediaAspectRatio: CarouselV3AspectRatios;\n  enableVideoControls: boolean;\n  isVisible?: boolean;\n  shouldLoad?: boolean;\n  isResponsiveWidth?: boolean;\n  hideLinkArrow?: boolean;\n  className?: string;\n}> = ({\n  cardItem,\n  mediaAspectRatio,\n  enableVideoControls,\n  isVisible,\n  shouldLoad,\n  isResponsiveWidth,\n  hideLinkArrow,\n  ...otherProps\n}) => {\n  const [videoPlayed, setVideoPlayed] = useState(false);\n  let prevWatchEventTime = -1;\n  const elementLocation = useContext(ElementLocation).elementLocation;\n\n  const videoMedia = cardItem.media as VideoDataProps;\n\n  const { getBestBgImgSrc, getImageSources } = useContentfulImages();\n  const posterSource = getBestBgImgSrc(videoMedia.thumbnailMedia?.url, {\n    // Double max width for the image.\n    width: 728,\n  });\n\n  const {\n    media: { videoSource },\n    mobileMedia: { videoSource: mobileVideoSource },\n  } = useParseMediaContainer(cardItem.media);\n\n  // Logo settings\n  const logoMedia = cardItem.logo as ImageDataProps | undefined;\n  let logoImgSrcs: ImageSources | undefined = undefined;\n  let logoAltText: string | undefined = undefined;\n\n  if (logoMedia) {\n    const { imageSource, imageAltText } = parseMedia(logoMedia.media);\n    const { imageSource: mobileImageSource } = parseMedia(logoMedia.mobileMedia);\n    const quality = imageQuality[logoMedia.quality ?? 'Standard'];\n    const size =\n      mediaAspectRatio === '9:16'\n        ? getPortraitCardImgSrcSetSizes(quality)\n        : getLandscapeCardImgSrcSetSizes(quality);\n\n    logoImgSrcs = combineImageSources({\n      desktop: getImageSources(imageSource, { size, quality }),\n      mobile: getImageSources(mobileImageSource, { size, quality }),\n    });\n\n    logoAltText = imageAltText;\n  }\n\n  // The CarouselV3VideoItem mimics the content metrics from the Video component\n  const onPlay: React.ReactEventHandler<HTMLVideoElement> = _e => {\n    if (videoSource && !videoPlayed) {\n      if (videoMedia.autoPlay) return; // Skip for auto play videos\n      const { fileName } = getFileInfo(videoSource);\n\n      logUserEvent({\n        eventAction: UserAction.Play,\n        eventCategory: 'Video',\n        eventLabel: fileName,\n        context: { elementLocation },\n      });\n      setVideoPlayed(true);\n    }\n  };\n\n  const onPause: React.ReactEventHandler<HTMLVideoElement> = _e => {\n    if (videoSource && !videoMedia.autoPlay) {\n      const { fileName } = getFileInfo(videoSource);\n\n      logUserEvent({\n        eventAction: UserAction.Pause,\n        eventCategory: 'Video',\n        eventLabel: fileName,\n        context: { elementLocation },\n      });\n    }\n  };\n\n  const onTimeUpdate = getVideoWatchLogger({\n    autoPlay: videoMedia.autoPlay,\n    eventLabel: videoMedia.externalId ?? cardItem.sys.id,\n    getPreviousWatchTime: () => {\n      return prevWatchEventTime;\n    },\n    setPreviousWatchTime: value => {\n      prevWatchEventTime = value;\n    },\n    elementLocation,\n  });\n\n  const slug = cardItem.slugReference?.slug;\n  const url = slug ? `/${slug}` : cardItem.url;\n\n  const onClick = (): void => {\n    if (!url) {\n      return;\n    }\n\n    logUserEvent({\n      eventAction: UserAction.Click,\n      eventCategory: 'CarouselV3',\n      eventLabel: `CarouselV3.VideoItem - ${url}`,\n      context: { targetUrl: url, elementLocation },\n    });\n\n    if (shouldFlushLogs(url)) {\n      void logger.flush();\n    }\n  };\n\n  return (\n    <CarouselCardItemSDS\n      aspectRatio={mediaAspectRatio}\n      body={cardItem.body}\n      showVideoControls={enableVideoControls}\n      key={cardItem.sys.id}\n      subtitle={cardItem.subtitle}\n      title={cardItem.title}\n      url={url}\n      videoSource={videoSource}\n      mobileVideoSource={mobileVideoSource}\n      onPlay={onPlay}\n      onPause={onPause}\n      onTimeUpdate={onTimeUpdate}\n      isVisible={isVisible}\n      shouldLoad={shouldLoad}\n      onClick={onClick}\n      posterSource={posterSource}\n      isResponsiveWidth={isResponsiveWidth}\n      hideLinkArrow={hideLinkArrow}\n      logoSrcs={logoImgSrcs}\n      logoAltText={logoAltText}\n      {...otherProps}\n    />\n  );\n};\n\nCarouselV3VideoItem.displayName = 'CarouselV3VideoItem';\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { fragments as imageFragments } from '../Image';\nimport { fragments as videoFragments } from '../Video';\n\nexport const carouselItemFragments = {\n  text: gql`\n    fragment CarouselTextAll on CarouselText {\n      ...ContentfulSysId\n      description {\n        json\n      }\n      subtext {\n        json\n      }\n      slugReference {\n        ...ContentfulSysId\n        slug\n      }\n      url\n    }\n    ${contentfulSysIdFragment}\n  `,\n  card: gql`\n    fragment CarouselCardAll on CarouselCard {\n      ...ContentfulSysId\n      title\n      subtitle\n      body\n      media {\n        __typename\n        ... on Video {\n          ...VideoAll\n        }\n        ... on Image {\n          ...ImageAll\n        }\n      }\n      slugReference {\n        ...ContentfulSysId\n        slug\n      }\n      url\n      showShadow\n    }\n    ${imageFragments.all}\n    ${videoFragments.all}\n    ${contentfulSysIdFragment}\n  `,\n};\n\nexport const fragments = {\n  all: gql`\n    fragment CarouselV3All on CarouselV3 {\n      ...ContentfulSysId\n      layout\n      enableOverflowDecoration\n      mediaAspectRatio\n      contentsCollection {\n        items {\n          ... on CarouselText {\n            ...CarouselTextAll\n          }\n          ... on CarouselCard {\n            ...CarouselCardAll\n          }\n        }\n      }\n    }\n    ${carouselItemFragments.text}\n    ${carouselItemFragments.card}\n  `,\n};\n\nexport const carouselV3Query = gql`\n  query CarouselV3Query($preview: Boolean!, $locale: String!, $id: String!) {\n    carouselV3(preview: $preview, locale: $locale, id: $id) {\n      ...CarouselV3All\n    }\n  }\n  ${fragments.all}\n`;\n", "import type { FC } from 'react';\n\nimport type { ContentfulIdVariable } from '../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport type { ContentfulSysProps } from '../../types/contentful';\nimport { Content } from './Content';\nimport { queries } from './queries';\nimport type { ContentDataHandlerProps } from './types';\n\nexport const ContentShallow: FC<ContentfulSysProps> = props => {\n  const { data } = useContentfulQuery<ContentDataHandlerProps, ContentfulIdVariable>(queries.all, {\n    variables: { id: props.sys.id },\n  });\n\n  if (!data?.content) return null;\n  return <Content {...data.content} />;\n};\n\nContentShallow.displayName = 'ContentShallow';\n", "import { css } from '@emotion/css';\nimport { getLocalStorageItem, setLocalStorageItem } from '@snapchat/mw-common';\nimport type {\n  Form as FormType,\n  FormRow as FormRowType,\n  FormRowFieldsItem,\n} from '@snapchat/mw-contentful-schema';\nimport type { FormBody, SubmitProps } from '@snapchat/snap-design-system-marketing';\nimport {\n  Form as FormSDS,\n  FormRow as FormRowSDS,\n  MessageContext,\n} from '@snapchat/snap-design-system-marketing';\nimport merge from 'lodash/merge.js';\nimport { debounce } from 'radashi';\nimport type { FC, ReactNode } from 'react';\nimport { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport { Config } from '../../config';\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logError, logUserEvent } from '../../helpers/logging';\nimport type { CustomArkoseClient } from '../../hooks/useArkose';\nimport { useArkose } from '../../hooks/useArkose';\nimport { UserAction } from '../../types/events';\nimport type { Items } from '../../types/Items';\nimport { getContentfulInspectorProps } from '../../utils/contentful/getContentfulInspectorProps';\nimport { renderRichTextWithElementsNoHeadings } from '../../utils/renderText/renderRichText';\nimport { FieldByType } from './FieldByType';\nimport type {\n  ContentfulFormRow,\n  ContentfulInputField,\n  FormDataProps,\n  FormResponseWithUrl,\n} from './types';\nimport { FormResponseType } from './types';\nimport { getFormExtraParameters, getFormField, getFormQueryParams } from './utils';\n\nconst hiddenCss = css`\n  opacity: 0;\n  visibility: hidden;\n`;\n\nconst defaultRedirectTimeout = 4000;\n\nconst formKey = 'mwp-form-data';\n\nconst FormRow: FC<\n  ContentfulFormRow & { fieldRender: (item: ContentfulInputField) => ReactNode }\n> = ({ rowAsText, sys, fieldsCollection, fieldRender }) => {\n  const { rowAsTextDataset } = getContentfulInspectorProps<FormRowType>({\n    entryId: sys.id,\n    fieldIds: ['rowAsText'],\n  });\n\n  if (rowAsText) {\n    return (\n      <FormRowSDS key={sys.id} dataset={rowAsTextDataset}>\n        {renderRichTextWithElementsNoHeadings(rowAsText)}\n      </FormRowSDS>\n    );\n  }\n\n  return <FormRowSDS key={sys.id}>{fieldsCollection.items.map(fieldRender)}</FormRowSDS>;\n};\n\nconst makeFormChildrenRenderer = (\n  rowsCollection: Items<ContentfulFormRow>,\n  submitText: string,\n  submitSuccessText?: string,\n  submitTextDataset?: DOMStringMap,\n  formInitialOverrides?: FormBody\n): FC<SubmitProps> => {\n  const RowRenderer: FC<SubmitProps> = submitProps => (\n    <>\n      {rowsCollection.items.map((item: ContentfulFormRow) => (\n        <FormRow\n          {...item}\n          key={item.sys.id}\n          fieldRender={(item: ContentfulInputField) => (\n            <FieldByType\n              key={item.sys.id}\n              contentfulInputField={item}\n              submitProps={submitProps}\n              submitText={submitText}\n              submitSuccessText={submitSuccessText}\n              submitTextDataset={submitTextDataset}\n              initialValue={formInitialOverrides?.[item.name!]}\n            />\n          )}\n        />\n      ))}\n    </>\n  );\n\n  return RowRenderer;\n};\n\nexport const Form: FC<FormDataProps> = ({\n  rowsCollection,\n  additionalFeaturesCollection,\n  analytics,\n  redirectUrl,\n  submitText,\n  submitSuccessText,\n  endpoint,\n  responseType,\n  redirectTimeout = defaultRedirectTimeout,\n  extraParams,\n  callback,\n  enableArkose = Config.enableArkoseOnForms,\n  arkosePublicDevKey,\n  arkosePublicProdKey,\n  sys,\n  persistFieldEdits,\n  prepopulatePerQueryParams,\n  onFormInit,\n  onValueChange,\n  renderErrorMessage,\n  ...rest\n}) => {\n  // local storage state. We are using a ref to avoid re-rendering on form updates.\n  const [initalFormValues, setInitialFormValues] = useState<FormBody>({});\n  const allFormLocalStorageRef = useRef<Record<string, FormBody>>({});\n\n  const { userLocation, currentLocale, getCurrentUrl } = useContext(AppContext);\n  const country = userLocation.country;\n\n  useEffect(() => {\n    const initialFormBody: FormBody = {};\n\n    // form field controls if we should use local storage to store form state.\n    if (persistFieldEdits) {\n      const allLocalStorageForms = JSON.parse(getLocalStorageItem(formKey) ?? '{}');\n\n      if (allLocalStorageForms[sys.id]) {\n        merge(initialFormBody, allLocalStorageForms[sys.id]);\n      }\n\n      allFormLocalStorageRef.current[sys.id] = initialFormBody;\n    }\n\n    // override local storage values with query params if they exist\n    if (prepopulatePerQueryParams) {\n      const currentUrl = getCurrentUrl();\n      const queryParamsValues = getFormQueryParams(currentUrl, (fieldName: string) =>\n        getFormField({ rowsCollection }, fieldName)\n      );\n\n      for (const [key, value] of queryParamsValues) {\n        initialFormBody[key] = value;\n      }\n    }\n\n    setInitialFormValues(initialFormBody);\n\n    // trigger the onFormInit handler if it exists\n    onFormInit?.(initialFormBody);\n  }, [\n    persistFieldEdits,\n    sys.id,\n    getCurrentUrl,\n    rowsCollection,\n    prepopulatePerQueryParams,\n    onFormInit,\n  ]);\n\n  const elementLocation = useContext(ElementLocation).elementLocation;\n\n  const arkoseRef = useRef<CustomArkoseClient>();\n\n  const arkosePromiseResolveRef = useRef<(value: FormBody) => void>();\n  const arkosePromiseRejectRef = useRef<(reason: string) => void>();\n\n  useArkose({\n    arkoseClientRef: arkoseRef,\n    enableArkose,\n    arkoseDevKey: arkosePublicDevKey,\n    arkoseProdKey: arkosePublicProdKey,\n\n    onCompleted: token => {\n      arkosePromiseResolveRef.current?.({ arkoseToken: token });\n    },\n    onError: error => {\n      logError({\n        component: 'Form',\n        error,\n        message: 'Arkose error',\n        action: 'Validate',\n        context: { elementLocation },\n      });\n      arkosePromiseRejectRef.current?.(error ?? 'Arkose error');\n    },\n  });\n\n  // Retrieve localized messages\n  const { formatMessage } = useContext(MessageContext);\n  const on400ResponseMessage = formatMessage({\n    id: 'formApiResponse400ErrorMessage',\n    defaultMessage: '400 Bad Request',\n  });\n  const on500ResponseMessage = formatMessage({\n    id: 'formApiResponse500ErrorMessage',\n    defaultMessage: '500 Internal Server',\n  });\n  const onInvalidClientSideSubmissionMessage = formatMessage({\n    id: 'formInvalidErrorMessage',\n    defaultMessage: 'Please updates required fields',\n  });\n  const formRequiredFieldsMessage = formatMessage({\n    id: 'formRequiredFieldsMessage',\n    defaultMessage: 'Fields marked with * are required.',\n  });\n\n  // If no renderErrorMessage is provided, use as default a function that returns a preset message based on the status code\n  renderErrorMessage =\n    renderErrorMessage ??\n    ((statusCode: number) => {\n      if (statusCode === 400) {\n        return on400ResponseMessage;\n      }\n\n      return on500ResponseMessage;\n    });\n\n  const [formDownloadUrl, setDownloadUrl] = useState<string | undefined>(undefined);\n  const anchorTag = useRef<HTMLAnchorElement>(null);\n\n  const { submitTextDataset } = getContentfulInspectorProps<FormType>({\n    entryId: sys.id,\n    fieldIds: ['submitText'],\n  });\n\n  useEffect(() => {\n    if (formDownloadUrl && anchorTag.current) {\n      anchorTag.current.click();\n    }\n  }, [formDownloadUrl]);\n\n  const onSubmitSuccess = useCallback(\n    async (response: Response, formBody: FormBody): Promise<void> => {\n      try {\n        if (analytics) {\n          logUserEvent({\n            eventCategory: 'Form',\n            eventAction: UserAction.FormSubmit,\n            eventLabel: analytics.label,\n            context: {\n              elementLocation,\n            },\n          });\n        }\n\n        if (callback) {\n          callback(formBody, response);\n        }\n\n        let formRedirectUrl = redirectUrl;\n\n        try {\n          if (responseType === FormResponseType.DownloadableResourceUrl) {\n            const data = (await response.json()) as FormResponseWithUrl;\n            setDownloadUrl(data.url);\n          } else if (responseType === FormResponseType.RedirectUrl && !redirectUrl) {\n            const data = (await response.json()) as FormResponseWithUrl;\n            formRedirectUrl = data.url ?? '';\n          }\n        } catch (_err) {\n          // reset to default\n          setDownloadUrl(undefined);\n        }\n\n        if (formRedirectUrl) {\n          setTimeout(() => {\n            window.location.assign(formRedirectUrl as string);\n          }, redirectTimeout);\n        }\n\n        if (persistFieldEdits) {\n          // remove the whole form from local storage\n          delete allFormLocalStorageRef.current[sys.id];\n          setLocalStorageItem(formKey, JSON.stringify(allFormLocalStorageRef.current));\n        }\n      } catch (error) {\n        logError({\n          component: 'Form',\n          error,\n          context: { elementLocation },\n        });\n      }\n    },\n    [\n      analytics,\n      elementLocation,\n      callback,\n      redirectUrl,\n      persistFieldEdits,\n      responseType,\n      redirectTimeout,\n      sys.id,\n    ]\n  );\n\n  const onSubmitFailure = useCallback(\n    (error: Error, formBody: FormBody, response?: Response) => {\n      if (callback) {\n        callback(formBody, response);\n      }\n\n      logError({\n        component: 'Form',\n        error,\n        message: 'Form submit failed',\n        action: 'Submit',\n        context: { elementLocation, elementText: submitText, targetUrl: endpoint },\n      });\n    },\n    [callback, elementLocation, endpoint, submitText]\n  );\n\n  const hasSubmitButton = useMemo(() => {\n    return rowsCollection.items\n      .flatMap((item: ContentfulFormRow) => item.fieldsCollection.items)\n      .some(({ __typename: typename }: FormRowFieldsItem) => typename === 'SubmitButton');\n  }, [rowsCollection]);\n\n  const persistentFormFields = initalFormValues;\n\n  // \"rowsCollection\", \"submitTextDataset\", and \"persistentFormFields\" are each reference types, therefore React will use\n  // shallow comparison to determine if the memoized value should be updated. Unfortunately, this means that every re-render\n  // of the Form component will cause the memoized value to be updated as the reference to the each of these fields will\n  // change even if the value of the objects is the same. We SHOULD get rid of this FormChildRenderer (the only reason\n  // we need it is to support the \"SubmitButton\" field via Contentful), but the quick and dirty fix for this is to stringify\n  // these particular properties before using them in the dependency array.\n  // TODO: Get rid of the \"formChildrenRenderer\" and find another way to support the \"SubmitButton\" field via Contentful.\n  const rowsAsJson = JSON.stringify(rowsCollection);\n  const submitTextDatasetAsJson = JSON.stringify(submitTextDataset);\n  const persistFormFieldsAsJson = JSON.stringify(persistentFormFields);\n\n  const FormChildrenRenderer = useMemo(() => {\n    if (hasSubmitButton) {\n      return makeFormChildrenRenderer(\n        rowsCollection,\n        submitText,\n        submitSuccessText,\n        submitTextDataset,\n        persistentFormFields\n      );\n    }\n\n    return undefined;\n    // See comment above for full explanation. TLDR: we can't use submitTextDataset or persistentFormFields in the dependency\n    // array because they are reference types and will cause the creation of a new FormChildRenderer every time the Form\n    // component re-renders.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n    hasSubmitButton,\n    rowsAsJson,\n    submitText,\n    submitSuccessText,\n    submitTextDatasetAsJson,\n    persistFormFieldsAsJson,\n  ]);\n\n  const formRows = useMemo(() => {\n    return rowsCollection.items.map((item: ContentfulFormRow) => (\n      <FormRow\n        {...item}\n        key={item.sys.id}\n        fieldRender={(item: ContentfulInputField) => {\n          return (\n            <FieldByType\n              key={item.sys.id}\n              contentfulInputField={item}\n              submitText={submitText}\n              submitSuccessText={submitSuccessText}\n              initialValue={persistentFormFields?.[item.name!]}\n            />\n          );\n        }}\n      />\n    ));\n  }, [persistentFormFields, rowsCollection.items, submitSuccessText, submitText]);\n\n  const getArkoseToken = useCallback(async () => {\n    arkoseRef.current?.run();\n\n    if (!arkoseRef.current) {\n      // Handle edge case: Arkose initialization never completed.\n      // Log an error and return a resolved promise to not block user submission.\n      const missingArkoseError = new Error('Arkose enforcement does not exist');\n\n      logError({\n        component: 'Form',\n        message: missingArkoseError.message,\n        action: 'Submit',\n        error: missingArkoseError,\n        context: { elementLocation },\n      });\n\n      // Return a resolved promise so the form payload can be sent to the server without the arkose token.\n      // NOTE: there is logic on the server to handle submissions without a valid arkose token\n      //       we just don't want to leave the user in a pending state due to not being able to resolve the promise.\n      return Promise.resolve<FormBody>({});\n    }\n\n    return new Promise<FormBody>((resolve, reject) => {\n      arkosePromiseResolveRef.current = resolve;\n      arkosePromiseRejectRef.current = reject;\n    });\n  }, [elementLocation]);\n\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  const onFormValueChange = useCallback(\n    // Debounced to not do too many writes to local storage or send too many events\n    debounce({ delay: 1e3 }, (formBody, lastChangedFieldName, isInit) => {\n      lastChangedFieldName &&\n        logUserEvent({\n          eventCategory: 'FormField',\n          eventAction: 'Change',\n          eventLabel: lastChangedFieldName,\n          context: {\n            // it does not make sense to have an element text for a form field change\n            elementLocation,\n          },\n        });\n\n      // trigger the onValueChange handler if it exists\n      onValueChange?.(formBody, lastChangedFieldName, isInit);\n\n      // If the form is in its initial \"blank\" state, we don't want to save the form body to local storage\n      // otherwise we risk overwriting previously saved form data.\n      if (!persistFieldEdits || isInit) return;\n\n      allFormLocalStorageRef.current[sys.id] = formBody;\n      setLocalStorageItem(formKey, JSON.stringify({ ...allFormLocalStorageRef.current }));\n    }),\n    [sys.id]\n  );\n\n  const finalExtraParams = useMemo(() => {\n    const currentUrl = getCurrentUrl();\n    const formExtraParameters = getFormExtraParameters(additionalFeaturesCollection, currentUrl);\n\n    return { ...formExtraParameters, ...extraParams, locale: currentLocale, country };\n  }, [additionalFeaturesCollection, extraParams, getCurrentUrl, currentLocale, country]);\n\n  return (\n    <>\n      <FormSDS\n        // eslint-disable-next-line @typescript-eslint/no-misused-promises\n        onSubmitSuccess={onSubmitSuccess}\n        onSubmitFailure={onSubmitFailure}\n        submitText={submitText}\n        submitSuccessText={submitSuccessText}\n        submitTextDataset={submitTextDataset}\n        endpoint={endpoint}\n        formChildrenRenderer={FormChildrenRenderer}\n        extraParams={finalExtraParams}\n        extraParamsAsync={enableArkose ? getArkoseToken : undefined}\n        onFormBodyChange={onFormValueChange}\n        renderErrorMessage={renderErrorMessage}\n        onInvalidClientSideSubmissionMessage={onInvalidClientSideSubmissionMessage}\n        renderErrorDetails={Config.isLocal}\n        formRequiredFieldsMessage={formRequiredFieldsMessage}\n        {...rest}\n      >\n        {formRows}\n      </FormSDS>\n      {responseType === FormResponseType.DownloadableResourceUrl && (\n        <a\n          data-testid=\"test-anchor-download\"\n          ref={anchorTag}\n          href={formDownloadUrl}\n          download\n          className={hiddenCss}\n        >\n          Hidden trigger anchor\n        </a>\n      )}\n    </>\n  );\n};\n", "import { ensureSingleScript } from '@snapchat/mw-common/client';\nimport { type MutableRefObject, useEffect } from 'react';\n\nimport { Config } from '../config';\nimport { arkosePublicDevKey, arkosePublicProdKey } from '../constants/arkose';\nimport type { ArkoseMyEnforcement } from '../types/arkose';\n\n/*\n=== Initialization Workflow =====\n1. Calling object calls the `useArkose` hook\n2. ensureSingleScript called to add Arkose script tag to dom\n3. arkose script is loaded, and calls the window function registered via the `data-callback` attribute\n   - this is pointed to: `window.setupArkoseEnforcement`\n   - window.setupArkoseEnforcement is a pointer to the `setupEnforcementViaDataCallback` function\n   - this calls the `setMyEnforcementRef` function to map the enforcement object to the form ref\n   - it also calls `setMyEnforcementConfig` to set initial configuration\n\n=== Validation Workflow =====\n1. Calling object maintains pointer to `CustomArkoseClient` (see `UseArkoseProps.arkoseClientRef`)\n2. Calling object calls the CustomArkoseClient.run() function\n3. `CustomArkoseClient.run()` calls `setMyEnforcementConfig()` to ensure validation configuration (including Public Key) matches the calling object\n4. `CustomArkoseClient.run()` function calls `ArkoseMyEnforcement.run()` to fetch the validation token to add to the form payload\n*/\n\nexport interface CustomArkoseClient {\n  run: () => void;\n}\n\ninterface UseArkoseProps {\n  /** The nonce to use for the Arkose script tag if needed for CSP. */\n  nonce?: string;\n  /**\n   * Callback for when the Arkose client is ready to be used. This will only be called for the first\n   * instance of arkose being used. This means that if you have two forms on one page both using\n   * arkose, only one of the onReadys will fire\n   */\n  onReady?: () => void;\n  /** Callback for when the Arkose get token call has completed. */\n  onCompleted?: (token: string) => void;\n  /** Callback for when the Arkose get token call has errored. */\n  onError?: (error?: string) => void;\n  /**\n   * Callback for when the Arkose client has been reset, which happens after a successful get token\n   * call.\n   */\n  onReset?: () => void;\n  /** A ref to the Arkose client that can be used to call the run method to get the token */\n  arkoseClientRef: MutableRefObject<CustomArkoseClient | undefined>;\n  /** Boolean to disable/enable arkose since not all sites will use it initially */\n  enableArkose?: boolean;\n  /**\n   * The keys allow for separation of Arkose integrations for better tracking and monitoring. A\n   * public dev key for Arkose integration\n   */\n  arkoseDevKey?: string;\n  /** A public prod key for Arkose integration */\n  arkoseProdKey?: string;\n}\n\nlet globalMyEnforcement: ArkoseMyEnforcement | undefined;\n\n/**\n * Hook that exposes the global arkose client to the consumer. This is used to get the token from\n * arkose and attach callbacks to ready, completed, error, and reset events.\n *\n * This can also be enabled/disabled via the enableArkose config prop since some sites might not\n * want to use arkose initially.\n */\nexport const useArkose = ({\n  nonce,\n  onReady,\n  onCompleted,\n  onError,\n  onReset,\n  arkoseClientRef: myEnforcementRef,\n  enableArkose,\n  arkoseDevKey = arkosePublicDevKey,\n  arkoseProdKey = arkosePublicProdKey,\n}: UseArkoseProps): void => {\n  const publicKey = Config.isDeploymentTypeProd ? arkoseProdKey : arkoseDevKey;\n\n  const setMyEnforcementConfig = (myEnforcement: ArkoseMyEnforcement): void => {\n    myEnforcement.setConfig({\n      publicKey,\n      onReady: () => {\n        onReady?.();\n      },\n      onCompleted: response => {\n        onCompleted?.(response.token);\n      },\n      onError: response => {\n        onError?.(response?.error);\n      },\n      onReset: () => {\n        onReset?.();\n      },\n    });\n  };\n\n  // Helper function to help set the enforcement config before running\n  // We have to have a custom run method that sets the config\n  // before we get the token because if we have multiple forms\n  // on the same page, they will all override each others configs.\n  // This way, we just set the config before we request the token so\n  // only the correct forms will call onCompleted\n  const setMyEnforcementRef = () => {\n    if (myEnforcementRef.current) return;\n\n    myEnforcementRef.current = {\n      run: () => {\n        if (globalMyEnforcement) {\n          setMyEnforcementConfig(globalMyEnforcement);\n          globalMyEnforcement.run();\n        }\n      },\n    };\n  };\n\n  /* Helper function added to window object in case enforcement is triggered via callback from async script loaded */\n  const setupEnforcementViaDataCallback = (myEnforcement: ArkoseMyEnforcement): void => {\n    globalMyEnforcement = myEnforcement;\n\n    setMyEnforcementRef();\n\n    // set initial config in case there's an onReady callback\n    setMyEnforcementConfig(myEnforcement);\n  };\n\n  useEffect(\n    () => {\n      // allow disabling arkose since not all sites will have it initially\n      if (!enableArkose) {\n        return;\n      }\n\n      const attributes: Record<string, string> = {\n        type: 'text/javascript',\n        // function called when the arkose script is loaded\n        'data-callback': 'setupArkoseEnforcement',\n        async: 'true',\n        defer: 'true',\n      };\n\n      if (nonce) {\n        attributes.nonce = nonce;\n      }\n\n      // if myEnforcement has already been set, just set the ref\n      if (globalMyEnforcement) {\n        // same reasons as above in setupEnforcement\n        setMyEnforcementRef();\n      } else {\n        // if the global setupEnforcement is not set, set it.\n        // the ref will be set when setupEnforcment is called by the arkose script\n        // NOTE: need to do this BEFORE calling ensureSingleScript to avoid a race condition.\n        if (!window.setupArkoseEnforcement) {\n          window.setupArkoseEnforcement = setupEnforcementViaDataCallback;\n        }\n\n        ensureSingleScript(\n          // Using a static value so we only load a single Arkose script.\n          // We use the same validation object for all arkose integrations.\n          // On form submit, we call the `setConfig` function to apply the relevant PublicKey and validation settings for that form.\n          'snap-api.arkoselabs.com/v2/api',\n          `https://snap-api.arkoselabs.com/v2/${publicKey}/api.js`,\n          () => {\n            // if the global setupEnforcement is not set, set it.\n            // the ref will be set when setupEnforcment is called by the arkose script\n            if (window.setupArkoseEnforcement) {\n              // we handle this case because two forms could fire at the same time,\n              // and setupEnforcment might be set at the time for the second form\n              setMyEnforcementRef();\n            }\n          },\n          attributes\n        );\n      }\n    },\n    // We only want to run once mount\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    []\n  );\n};\n", "export const arkoseVerifyEndpoint = 'https://snap-verify.arkoselabs.com/api/v4/verify/';\nexport const arkosePublicDevKey = '1A7AAF5C-0F05-4719-BFD4-2A7C94BE53AE';\nexport const arkosePublicProdKey = '664578B2-FE27-4BE6-952F-E1023A4BA422';\n", "import { documentToReactComponents } from '@contentful/rich-text-react-renderer';\nimport type { Document } from '@contentful/rich-text-types';\nimport { css } from '@emotion/css';\nimport type {\n  DropdownField as DropdownFieldType,\n  InputField as ContentfulInputType,\n} from '@snapchat/mw-contentful-schema';\nimport type {\n  InputType,\n  MultiSelectOption,\n  ValidationKey,\n} from '@snapchat/snap-design-system-marketing';\nimport {\n  Button,\n  Input,\n  MultiSelectDropdown,\n  RadioSelectField,\n  Select,\n} from '@snapchat/snap-design-system-marketing';\nimport omit from 'lodash-es/omit';\nimport type { FC } from 'react';\n\nimport { mediaQuery } from '../../styles/mediaQueries';\nimport { getContentfulInspectorProps } from '../../utils/contentful/getContentfulInspectorProps';\nimport type { DropdownOption, FieldByTypeProps } from './types';\nimport { presetDropdowns } from './utils';\n\nconst buttonContainerCss = css`\n  width: 100%;\n  display: inline-flex;\n  justify-content: center;\n\n  ${mediaQuery.over768_desktop_small} {\n    width: auto;\n  }\n`;\n\nexport const FieldByType: FC<FieldByTypeProps> = ({\n  contentfulInputField: field,\n  submitText,\n  submitSuccessText,\n  submitTextDataset,\n  submitProps,\n  initialValue: fieldInitialValue,\n}) => {\n  const typename = field.__typename;\n\n  if (typename === 'InputField') {\n    const inputInspectorProps = getContentfulInspectorProps<ContentfulInputType>({\n      entryId: field.sys.id,\n      fieldIds: ['richLabel', 'label', 'error', 'helpText', 'contentfulDescription'],\n    });\n    const error = field.error ? documentToReactComponents(field.error.json as Document) : null;\n    const richLabel = field.richLabel\n      ? documentToReactComponents(field.richLabel.json as Document)\n      : null;\n\n    // NOTE: do not touch this logic - it is needed for setting the Hidden fields on the Custom AR Download form.\n    // https://github.sc-corp.net/Snapchat/marketing-web/pull/3561/files#r5823670\n    const initialValue =\n      (field.type !== 'Hidden' ? fieldInitialValue : undefined) ?? field.initialValue;\n\n    return (\n      <Input\n        id={field.name!}\n        key={field.sys.id}\n        name={field.name!}\n        // @ts-ignore: The types are correct. Typecheck is failing here.\n        type={field.type as InputType | undefined}\n        validation={field.validation as ValidationKey}\n        label={field.label}\n        required={field.required}\n        placeholder={field.placeholder}\n        // @ts-ignore: There's no 'readOnly' prop in the Input component, but we set it synthetically for SPS.\n        readOnly={field.readOnly}\n        maxLength={field.maxLength}\n        shouldResetToInitial={field.shouldResetToInitial}\n        helpText={field.helpText}\n        minValue={field.minValue}\n        maxValue={field.maxValue}\n        dataset={inputInspectorProps.contentfulDescriptionDataset}\n        {...inputInspectorProps}\n        error={error}\n        richLabel={richLabel}\n        initialValue={initialValue}\n      />\n    );\n  }\n\n  const dropdownDatasets = getContentfulInspectorProps<DropdownFieldType>({\n    entryId: field.sys.id,\n    fieldIds: ['label', 'error', 'helpText', 'contentfulDescription'],\n  });\n\n  if (typename === 'DropdownField') {\n    const optionCollectionItems = field.optionsCollection?.items ?? [];\n    const contentfulInitialValue = field.initialOption?.value;\n    const initialValue = fieldInitialValue ?? contentfulInitialValue;\n    const allValues = optionCollectionItems.map(({ value }) => value ?? '');\n    const initialSelectValue =\n      typeof initialValue === 'string' && allValues.includes(initialValue)\n        ? initialValue\n        : contentfulInitialValue;\n    const error = field.error ? documentToReactComponents(field.error.json as Document) : null;\n    // TODO: Add richLabel to the dropdown field.\n\n    return (\n      <Select\n        key={field.sys.id}\n        id={field.name!}\n        name={field.name!}\n        label={field.label}\n        initialValue={initialSelectValue}\n        allValues={allValues}\n        error={error}\n        shouldResetToInitial={field.shouldResetToInitial}\n        helpText={field.helpText}\n        required={field.required}\n        placeholder={field.placeholder}\n        {...omit(dropdownDatasets, 'contentfulDescriptionDataset')}\n        fieldDataset={dropdownDatasets.contentfulDescriptionDataset}\n      >\n        {optionCollectionItems.map(({ key, value }) => (\n          <option key={key} value={value || key}>\n            {key}\n          </option>\n        ))}\n      </Select>\n    );\n  }\n\n  if (typename === 'MultiselectDropdownField') {\n    const optionCollectionItems = field.optionsCollection?.items ?? [];\n    const error = field.error ? documentToReactComponents(field.error.json as Document) : null;\n    // TODO: Add richLabel to the multiselect field.\n\n    const initialValue =\n      Array.isArray(fieldInitialValue) && fieldInitialValue.every(item => typeof item === 'object')\n        ? (fieldInitialValue as MultiSelectOption[])\n        : undefined;\n    const options = optionCollectionItems\n      .map(({ key, value }) => {\n        if (!value || !key) return null;\n        return { name: value, id: key };\n      })\n      .filter(Boolean);\n\n    return (\n      <MultiSelectDropdown\n        name={field.name!}\n        label={field.label}\n        showCheckbox\n        options={options as MultiSelectOption[]}\n        required={field.required}\n        placeholder={field.placeholder}\n        error={error}\n        {...omit(dropdownDatasets, 'contentfulDescriptionDataset')}\n        dataset={dropdownDatasets.contentfulDescriptionDataset}\n        initialValues={initialValue}\n      />\n    );\n  }\n\n  if (typename === 'PresetDropdownField') {\n    const presetOptions = field.preset ? presetDropdowns[field.preset] : undefined;\n    if (!presetOptions) return null;\n    const allValues = presetOptions.data.map(({ value }) => value);\n    const error = field.error ? documentToReactComponents(field.error.json as Document) : null;\n    // TODO: Add richLabel to the select field.\n\n    return (\n      <Select\n        key={field.sys.id}\n        id={field.name!}\n        error={error}\n        placeholder={field.placeholder ?? presetOptions.defaultPlaceholder}\n        {...omit(dropdownDatasets, 'contentfulDescriptionDataset')}\n        name={field.name!}\n        label={field.label}\n        fieldDataset={dropdownDatasets.contentfulDescriptionDataset}\n        allValues={allValues}\n        initialValue={fieldInitialValue ?? field.initialValue}\n        required={field.required}\n      >\n        {presetOptions.data.map(({ key, value }: DropdownOption) => (\n          <option key={key} value={value}>\n            {key}\n          </option>\n        ))}\n      </Select>\n    );\n  }\n\n  if (typename === 'RadioSelectField') {\n    const optionCollectionItems =\n      field.optionsCollection?.items?.map(({ key, value }) => ({ key: key!, value })) ?? [];\n    const contentfulInitialValue = field.initialOption?.value;\n    const allValues = optionCollectionItems.map(({ value }) => value ?? '');\n    const initialSelectValue =\n      typeof contentfulInitialValue === 'string' && allValues.includes(contentfulInitialValue)\n        ? contentfulInitialValue\n        : undefined;\n    const error = field.error ? documentToReactComponents(field.error.json as Document) : null;\n\n    return (\n      <RadioSelectField\n        key={field.sys.id}\n        error={error}\n        helpText={field.helpText}\n        initialValue={initialSelectValue}\n        label={field.label}\n        name={field.name!}\n        options={optionCollectionItems}\n        required={field.required}\n        shouldResetToInitial={field.shouldResetToInitial}\n      />\n    );\n  }\n\n  if (typename === 'SubmitButton' && submitProps) {\n    const { handleSubmit, disabled, loading, submitSuccess } = submitProps;\n    return (\n      <div className={buttonContainerCss}>\n        <Button\n          type=\"Primary\"\n          size=\"Large\"\n          onClick={handleSubmit}\n          disabled={disabled}\n          loading={loading}\n          buttonTextDataset={submitTextDataset}\n        >\n          {submitSuccess ? submitSuccessText ?? submitText : submitText}\n        </Button>\n      </div>\n    );\n  }\n\n  return null;\n};\n", "import type {\n  FieldValue,\n  InputType,\n  MultiSelectOption,\n} from '@snapchat/snap-design-system-marketing';\n\nimport type { ContentfulSysProps } from '../../types/contentful';\nimport type { ContentfulInputField, DropdownOption, FormDataProps } from './types';\n\nexport const isFormDataProps = (props: ContentfulSysProps): props is FormDataProps =>\n  (props as FormDataProps).__typename === 'Form';\n\nexport interface PresetDropdown {\n  data: DropdownOption[];\n  defaultPlaceholder?: string;\n}\n\n// Adapted from https://help.salesforce.com/s/articleView?id=sf.admin_state_country_picklists_standard_countries.htm\nconst countryCodeToName: Record<string, string> = {\n  US: 'United States',\n  AD: 'Andorra',\n  AE: 'United Arab Emirates',\n  AF: 'Afghanistan',\n  AG: 'Antigua and Barbuda',\n  AI: 'Anguilla',\n  AL: 'Albania',\n  AM: 'Armenia',\n  AO: 'Angola',\n  AQ: 'Antarctica',\n  AR: 'Argentina',\n  AT: 'Austria',\n  AU: 'Australia',\n  AW: 'Aruba',\n  AX: 'Aland Islands',\n  AZ: 'Azerbaijan',\n  BA: 'Bosnia and Herzegovina',\n  BB: 'Barbados',\n  BD: 'Bangladesh',\n  BE: 'Belgium',\n  BF: 'Burkina Faso',\n  BG: 'Bulgaria',\n  BH: 'Bahrain',\n  BI: 'Burundi',\n  BJ: 'Benin',\n  BL: 'Saint Barth\u00E9lemy',\n  BM: 'Bermuda',\n  BN: 'Brunei',\n  BO: 'Bolivia',\n  BQ: 'Bonaire, Sint Eustatius and Saba',\n  BR: 'Brazil',\n  BS: 'Bahamas',\n  BT: 'Bhutan',\n  BV: 'Bouvet Island',\n  BW: 'Botswana',\n  BY: 'Belarus',\n  BZ: 'Belize',\n  CA: 'Canada',\n  CC: 'Cocos (Keeling) Islands',\n  CD: 'Congo, the Democratic Republic of the',\n  CF: 'Central African Republic',\n  CG: 'Congo',\n  CH: 'Switzerland',\n  CI: \"Cote d'Ivoire\",\n  CK: 'Cook Islands',\n  CL: 'Chile',\n  CM: 'Cameroon',\n  CN: 'China',\n  CO: 'Colombia',\n  CR: 'Costa Rica',\n  CU: 'Cuba',\n  CV: 'Cape Verde',\n  CW: 'Cura\u00E7ao',\n  CX: 'Christmas Island',\n  CY: 'Cyprus',\n  CZ: 'Czech Republic',\n  DE: 'Germany',\n  DJ: 'Djibouti',\n  DK: 'Denmark',\n  DM: 'Dominica',\n  DO: 'Dominican Republic',\n  DZ: 'Algeria',\n  EC: 'Ecuador',\n  EE: 'Estonia',\n  EG: 'Egypt',\n  EH: 'Western Sahara',\n  ER: 'Eritrea',\n  ES: 'Spain',\n  ET: 'Ethiopia',\n  FI: 'Finland',\n  FJ: 'Fiji',\n  FK: 'Falkland Islands (Malvinas)',\n  FO: 'Faroe Islands',\n  FR: 'France',\n  GA: 'Gabon',\n  GB: 'United Kingdom',\n  GD: 'Grenada',\n  GE: 'Georgia',\n  GF: 'French Guiana',\n  GG: 'Guernsey',\n  GH: 'Ghana',\n  GI: 'Gibraltar',\n  GL: 'Greenland',\n  GM: 'Gambia',\n  GN: 'Guinea',\n  GP: 'Guadeloupe',\n  GQ: 'Equatorial Guinea',\n  GR: 'Greece',\n  GS: 'South Georgia and the South Sandwich Islands',\n  GT: 'Guatemala',\n  GW: 'Guinea-Bissau',\n  GY: 'Guyana',\n  HK: 'Hong Kong',\n  HM: 'Heard Island and McDonald Islands',\n  HN: 'Honduras',\n  HR: 'Croatia',\n  HT: 'Haiti',\n  HU: 'Hungary',\n  ID: 'Indonesia',\n  IE: 'Ireland',\n  IL: 'Israel',\n  IM: 'Isle of Man',\n  IN: 'India',\n  IO: 'British Indian Ocean Territory',\n  IQ: 'Iraq',\n  IR: 'Iran',\n  IS: 'Iceland',\n  IT: 'Italy',\n  JE: 'Jersey',\n  JM: 'Jamaica',\n  JO: 'Jordan',\n  JP: 'Japan',\n  KE: 'Kenya',\n  KG: 'Kyrgyzstan',\n  KH: 'Cambodia',\n  KI: 'Kiribati',\n  KM: 'Comoros',\n  KN: 'Saint Kitts and Nevis',\n  KP: \"Korea, Democratic People's Republic of\",\n  KR: 'South Korea',\n  KW: 'Kuwait',\n  KY: 'Cayman Islands',\n  KZ: 'Kazakhstan',\n  LA: 'Laos',\n  LB: 'Lebanon',\n  LC: 'Saint Lucia',\n  LI: 'Liechtenstein',\n  LK: 'Sri Lanka',\n  LR: 'Liberia',\n  LS: 'Lesotho',\n  LT: 'Lithuania',\n  LU: 'Luxembourg',\n  LV: 'Latvia',\n  LY: 'Libya',\n  MA: 'Morocco',\n  MC: 'Monaco',\n  MD: 'Moldova',\n  ME: 'Montenegro',\n  MF: 'Saint Martin',\n  MG: 'Madagascar',\n  MK: 'Macedonia',\n  ML: 'Mali',\n  MM: 'Myanmar',\n  MN: 'Mongolia',\n  MO: 'Macao',\n  MQ: 'Martinique',\n  MR: 'Mauritania',\n  MS: 'Montserrat',\n  MT: 'Malta',\n  MU: 'Mauritius',\n  MV: 'Maldives',\n  MW: 'Malawi',\n  MX: 'Mexico',\n  MY: 'Malaysia',\n  MZ: 'Mozambique',\n  NA: 'Namibia',\n  NC: 'New Caledonia',\n  NE: 'Niger',\n  NF: 'Norfolk Island',\n  NG: 'Nigeria',\n  NI: 'Nicaragua',\n  NL: 'Netherlands',\n  NO: 'Norway',\n  NP: 'Nepal',\n  NR: 'Nauru',\n  NU: 'Niue',\n  NZ: 'New Zealand',\n  OM: 'Oman',\n  PA: 'Panama',\n  PE: 'Peru',\n  PF: 'French Polynesia',\n  PG: 'Papua New Guinea',\n  PH: 'Philippines',\n  PK: 'Pakistan',\n  PL: 'Poland',\n  PM: 'Saint Pierre and Miquelon',\n  PN: 'Pitcairn',\n  PS: 'Palestine',\n  PT: 'Portugal',\n  PY: 'Paraguay',\n  QA: 'Qatar',\n  RE: 'Reunion',\n  RO: 'Romania',\n  RS: 'Serbia',\n  RU: 'Russia',\n  RW: 'Rwanda',\n  SA: 'Saudi Arabia',\n  SB: 'Solomon Islands',\n  SC: 'Seychelles',\n  SD: 'Sudan',\n  SE: 'Sweden',\n  SG: 'Singapore',\n  SH: 'Saint Helena, Ascension and Tristan da Cunha',\n  SI: 'Slovenia',\n  SJ: 'Svalbard and Jan Mayen',\n  SK: 'Slovakia',\n  SL: 'Sierra Leone',\n  SM: 'San Marino',\n  SN: 'Senegal',\n  SO: 'Somalia',\n  SR: 'Suriname',\n  SS: 'South Sudan',\n  ST: 'Sao Tome and Principe',\n  SV: 'El Salvador',\n  SX: 'Sint Maarten (Dutch part)',\n  SY: 'Syrian Arab Republic',\n  SZ: 'Swaziland',\n  TC: 'Turks and Caicos Islands',\n  TD: 'Chad',\n  TF: 'French Southern Territories',\n  TG: 'Togo',\n  TH: 'Thailand',\n  TJ: 'Tajikistan',\n  TK: 'Tokelau',\n  TL: 'Timor-Leste',\n  TM: 'Turkmenistan',\n  TN: 'Tunisia',\n  TO: 'Tonga',\n  TR: 'Turkey',\n  TT: 'Trinidad and Tobago',\n  TV: 'Tuvalu',\n  TW: 'Taiwan',\n  TZ: 'Tanzania',\n  UA: 'Ukraine',\n  UG: 'Uganda',\n  UY: 'Uruguay',\n  UZ: 'Uzbekistan',\n  VA: 'Holy See (Vatican City State)',\n  VC: 'Saint Vincent and the Grenadines',\n  VE: 'Venezuela',\n  VG: 'Virgin Islands, British',\n  VN: 'Vietnam',\n  VU: 'Vanuatu',\n  WF: 'Wallis and Futuna',\n  WS: 'Samoa',\n  YE: 'Yemen',\n  YT: 'Mayotte',\n  ZA: 'South Africa',\n  ZM: 'Zambia',\n  ZW: 'Zimbabwe',\n};\n\n// want to have sorted versions of countries\nconst sortedEntries = Object.entries(countryCodeToName).sort((a, b) =>\n  // Making sure US is at the top first before sorting by country name\n  a[0] === 'US' ? -1 : b[0] === 'US' ? 1 : a[1].localeCompare(b[1])\n);\n\nconst sortedCountries: Record<string, string> = Object.fromEntries(sortedEntries);\n\nexport const presetDropdowns: Record<string, PresetDropdown> = {\n  Countries: {\n    defaultPlaceholder: 'Country',\n    data: Object.values(sortedCountries).map(name => ({ key: name, value: name })),\n  },\n  'Countries (submit country code)': {\n    defaultPlaceholder: 'Country/Region',\n    data: Object.keys(sortedCountries).map(code => ({\n      key: countryCodeToName[code]!,\n      value: code,\n    })),\n  },\n};\n\n/** Returns a field for a given name from within form props. */\nexport function getFormField(\n  form: Pick<FormDataProps, 'rowsCollection'>,\n  fieldName: string\n): ContentfulInputField | undefined {\n  for (const row of form.rowsCollection.items) {\n    for (const field of row.fieldsCollection.items) {\n      if (field.name === fieldName) {\n        return field;\n      }\n    }\n  }\n\n  return undefined;\n}\n\n/** Map for matching contentful data to query parameters */\nconst utmParameterFieldMap = new Map(\n  Object.entries({\n    utmSourceFieldName: 'utm_source',\n    utmMediumFieldName: 'utm_medium',\n    utmCampaignFieldName: 'utm_campaign',\n    utmContentFieldName: 'utm_content',\n    utmTermFieldName: 'utm_term',\n  })\n);\n\n/**\n * Parses Form Features configuration from Contentful for extra parameters to append to form payload\n *\n * @param input Form Features collection from Contentful\n * @param currentUrl String containing the current url used to retrieve query parameters\n * @returns Object containing extra parameters to append to form data\n */\nexport const getFormExtraParameters = (\n  input: FormDataProps['additionalFeaturesCollection'],\n  currentUrl: string\n): Record<string, string> | undefined => {\n  // only process the first matching entry\n  const config = input?.items.find(item => item.__typename === 'ExtraParametersFormFeature');\n\n  if (!config) return undefined;\n\n  const searchParams = new URL(currentUrl).searchParams;\n\n  const output: Record<string, string> = {};\n\n  for (const [key, fieldName] of Object.entries(config)) {\n    const parameter = utmParameterFieldMap.get(key);\n    if (!fieldName || !parameter) continue; // if fieldname not defined or is missing from map, skip it\n\n    output[fieldName] = searchParams.get(parameter) ?? '';\n  }\n\n  // Placeholder for future extra parameter logic (blizzard Identifier, etc)\n\n  return output;\n};\n\n/**\n * Retrieves the form query parameters from the current URL checked against a form field\n * configuration.\n *\n * @returns A Map containing the form query parameters.\n */\nexport const getFormQueryParams = (\n  currentUrl: string,\n  getFormField: (fieldName: string) => ContentfulInputField | undefined\n): Map<string, FieldValue> => {\n  const params = new Map<string, string | string[]>();\n  const url = new URL(currentUrl);\n  const rawParams = new URLSearchParams(url.search);\n\n  rawParams.forEach((_value, key) => {\n    if (key.startsWith('form_')) {\n      const updatedKey = key.replace('form_', '');\n      const value = rawParams.getAll(key);\n      params.set(updatedKey, value.length > 1 ? value : value[0]!);\n    }\n  });\n\n  // Now parse the params based on the field settings.\n\n  const formBody = new Map<string, FieldValue>();\n\n  for (const [key, value] of params) {\n    const field = getFormField(key);\n    if (!field || !field.name) continue;\n\n    switch (field.__typename) {\n      case 'DropdownField':\n        formBody.set(field.name, value);\n        break;\n\n      case 'MultiselectDropdownField': {\n        const values = Array.isArray(value) ? value : [value];\n        const multiValues = values\n          .map(val => {\n            const optionName = field.optionsCollection?.items.find(item => item.key === val)?.value;\n            if (!optionName) return undefined;\n            return { id: val, name: optionName };\n          })\n          .filter(Boolean) as MultiSelectOption[];\n        formBody.set(field.name!, multiValues);\n        break;\n      }\n\n      case 'InputField': {\n        const singleValue = Array.isArray(value) ? value[0] : value;\n\n        switch (field.type as InputType) {\n          case 'Checkbox': {\n            formBody.set(field.name, singleValue === 'true');\n            break;\n          }\n\n          case 'Number': {\n            // TODO: Fix the types so that we can pass in numbers.\n            formBody.set(field.name, singleValue);\n            break;\n          }\n\n          // Works for Date, Hidden, Text and TextArea.\n          default: {\n            formBody.set(field.name, singleValue);\n            break;\n          }\n        }\n        break;\n      }\n\n      case 'PresetDropdownField': {\n        formBody.set(field.name, value);\n        break;\n      }\n\n      default: {\n        console.warn(`Unsupported field type: ${field.__typename} for url form parsing.`);\n        break;\n      }\n    }\n  }\n\n  return formBody;\n};\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { fragments as analyticsFragments } from '../Analytics/query';\n\nexport const formRowFragment = gql`\n  fragment FormRowAll on FormRow {\n    ...ContentfulSysId\n    rowAsText {\n      json\n    }\n    fieldsCollection(limit: 3) {\n      items {\n        __typename\n        ... on InputField {\n          ...ContentfulSysId\n          name\n          type\n          label\n          richLabel {\n            json\n          }\n          initialValue\n          shouldResetToInitial\n          placeholder\n          required\n          validation\n          helpText\n          error {\n            json\n          }\n          maxLength\n          minValue\n          maxValue\n        }\n        ... on SubmitButton {\n          ...ContentfulSysId\n          name\n        }\n        ... on PresetDropdownField {\n          ...ContentfulSysId\n          name\n          label\n          preset\n          placeholder\n          required\n          helpText\n          error {\n            json\n          }\n        }\n        ... on DropdownField {\n          ...ContentfulSysId\n          name\n          label\n          placeholder\n          required\n          helpText\n          optionsCollection {\n            items {\n              ... on DropdownFieldOption {\n                ...ContentfulSysId\n                key\n                value\n              }\n            }\n          }\n          initialOption {\n            ... on DropdownFieldOption {\n              ...ContentfulSysId\n              key\n              value\n            }\n          }\n          shouldResetToInitial\n          error {\n            json\n          }\n        }\n        ... on MultiselectDropdownField {\n          ...ContentfulSysId\n          name\n          label\n          placeholder\n          required\n          helpText\n          optionsCollection {\n            items {\n              ... on DropdownFieldOption {\n                ...ContentfulSysId\n                key\n                value\n              }\n            }\n          }\n          error {\n            json\n          }\n        }\n        ... on RadioSelectField {\n          ...ContentfulSysId\n          name\n          helpText\n          label\n          required\n          error {\n            json\n          }\n          optionsCollection {\n            items {\n              ... on DropdownFieldOption {\n                ...ContentfulSysId\n                key\n                value\n              }\n            }\n          }\n          initialOption {\n            ... on DropdownFieldOption {\n              ...ContentfulSysId\n              key\n              value\n            }\n          }\n          shouldResetToInitial\n        }\n      }\n    }\n  }\n  ${contentfulSysIdFragment}\n`;\n\nexport const extraParametersFormFeatureFragment = gql`\n  fragment ExtraParametersFormFeatureAll on ExtraParametersFormFeature {\n    ...ContentfulSysId\n    utmCampaignFieldName\n    utmContentFieldName\n    utmMediumFieldName\n    utmSourceFieldName\n    utmTermFieldName\n  }\n  ${contentfulSysIdFragment}\n`;\n\nexport const formFragments = {\n  all: gql`\n    fragment FormAll on Form {\n      ...ContentfulSysId\n      endpoint\n      redirectUrl\n      responseType\n      redirectTimeout\n      submitText\n      submitSuccessText\n      analytics {\n        ...AnalyticsAll\n      }\n      persistFieldEdits\n      prepopulatePerQueryParams\n      # limit raised to 20 for avalon form use case\n      rowsCollection(limit: 20) {\n        items {\n          ...FormRowAll\n        }\n      }\n      # current expected case is a 0-1 features, but this way we can accommodate future cases w/ minimal effort\n      additionalFeaturesCollection(limit: 5) {\n        items {\n          ... on ExtraParametersFormFeature {\n            ...ExtraParametersFormFeatureAll\n          }\n        }\n      }\n    }\n    ${formRowFragment}\n    ${extraParametersFormFeatureFragment}\n    ${contentfulSysIdFragment}\n    ${analyticsFragments.all}\n  `,\n};\n\nexport const queries = {\n  shallow: gql`\n    query FormQuery($preview: Boolean!, $locale: String!, $id: String!) {\n      form(preview: $preview, locale: $locale, id: $id) {\n        ...ContentfulSysId\n      }\n    }\n    ${contentfulSysIdFragment}\n  `,\n  all: gql`\n    query FormQuery($preview: Boolean!, $locale: String!, $id: String!) {\n      form(preview: $preview, locale: $locale, id: $id) {\n        ...FormAll\n      }\n    }\n    ${formFragments.all}\n  `,\n};\n", "import type { FC } from 'react';\n\nimport type { ContentfulIdVariable } from '../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport type { ContentfulSysProps } from '../../types/contentful';\nimport { Form } from './Form';\nimport { queries } from './queries';\nimport type { FormDataHandlerProps } from './types';\n\nexport const FormShallow: FC<ContentfulSysProps> = props => {\n  const { data } = useContentfulQuery<FormDataHandlerProps, ContentfulIdVariable>(queries.all, {\n    variables: { id: props.sys.id },\n  });\n\n  if (!data?.form) return null;\n  return <Form {...data.form} />;\n};\n\nFormShallow.displayName = 'Form';\n", "import { cx } from '@emotion/css';\nimport type { Gallery as GalleryType } from '@snapchat/mw-contentful-schema';\nimport {\n  editorialGalleryCardsContainerCss,\n  GalleryFiltersV2 as GalleryFiltersV2SDS,\n  Pagination,\n} from '@snapchat/snap-design-system-marketing';\nimport cloneDeep from 'lodash-es/cloneDeep';\nimport omit from 'lodash-es/omit';\nimport pick from 'lodash-es/pick';\nimport type { FC } from 'react';\nimport { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport { Config } from '../../config';\nimport { getContentfulInspectorProps } from '../../utils/contentful/getContentfulInspectorProps';\nimport { ConsumerContext } from '../ConsumerContextProvider';\nimport { defaultEditorialTilesPerPage, galleryTagsPrefix } from './constants';\nimport { EditorialGalleryLazyTiles } from './EditorialGalleryLazyTiles';\nimport { type GalleryProps, handleScroll } from './Gallery';\nimport { editorialGalleryPaginationCss, editorialGalleryWrapperCss } from './styles';\nimport { useGalleryTiles } from './useGalleryTiles';\nimport { buildSearchMenus } from './utils';\n\nexport const EditorialGallery: FC<GalleryProps> = props => {\n  const { gallery } = props;\n  const galleryId = gallery.sys.id;\n\n  const { getUrlParams, setUrlParams } = useContext(ConsumerContext);\n  const { onRedirect, getCurrentUrl } = useContext(AppContext);\n\n  const query = getUrlParams?.() ?? {};\n  const [page, setPage] = useState(gallery.hidePagination ? 1 : Number(query?.page ?? 1));\n\n  const dropdownFilters = useMemo(() => {\n    if (gallery?.dropdownsCollection) {\n      return buildSearchMenus(gallery.dropdownsCollection.items, true);\n    }\n\n    return undefined;\n  }, [gallery]);\n\n  const dropdownFiltersIds = useMemo(() => {\n    if (!dropdownFilters) {\n      return [];\n    }\n\n    return dropdownFilters.map(dropdown => dropdown.id);\n  }, [dropdownFilters]);\n\n  const [tilesTags, setTilesTags] = useState(pick(query, dropdownFiltersIds));\n\n  // Handle back button click\n  useEffect(() => {\n    const searchParams = getUrlParams?.() ?? {};\n    const newFilters = pick(searchParams, dropdownFiltersIds);\n    const newPage = Number(searchParams?.page ?? 1);\n    setTilesTags(newFilters);\n    setPage(newPage);\n  }, [dropdownFiltersIds, getUrlParams]);\n\n  const { paginationData, isLoading } = useGalleryTiles({\n    galleryId,\n    page,\n    pageSize: gallery?.itemsPerPage || defaultEditorialTilesPerPage,\n    tags: Object.values(tilesTags),\n    sortBy: gallery?.sortBy,\n  });\n\n  const galleryRef = useRef<HTMLDivElement>(null);\n\n  const onChangeFilter = useCallback(\n    (filterKey: string, filterValue: string | undefined) => {\n      if (!setUrlParams) {\n        return;\n      }\n\n      let newFilters = cloneDeep(tilesTags);\n      const currentQuery = getUrlParams?.() ?? {};\n      const otherParams = omit(currentQuery, dropdownFiltersIds);\n\n      if (filterValue) {\n        newFilters[filterKey] = filterValue;\n      } else {\n        newFilters = omit(newFilters, filterKey);\n      }\n      setTilesTags(newFilters);\n      setPage(1);\n      setUrlParams({ ...otherParams, ...newFilters, page: '1' });\n    },\n    [dropdownFiltersIds, getUrlParams, setUrlParams, tilesTags]\n  );\n\n  const onChangePage = useCallback(\n    (newPage: number) => {\n      if (!setUrlParams) {\n        return;\n      }\n\n      const currentQuery = getUrlParams?.() ?? {};\n      const newUrlParams = cloneDeep(currentQuery);\n      newUrlParams.page = `${newPage}`;\n      setPage(newPage);\n      setUrlParams(newUrlParams);\n      handleScroll(galleryRef.current);\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [getUrlParams, setUrlParams, galleryRef.current]\n    /*\n     * TODO: Take a look to this again.\n     * This won't work as intended because the component won't re-render when the ref is assigned.\n     * The proper fix could be to pass the ref itself into the handleScroll as oppossed to the .current\n     */\n  );\n\n  const clearFilters = useCallback(() => {\n    if (!setUrlParams) {\n      return;\n    }\n\n    const currentQuery = getUrlParams?.() ?? {};\n    const otherParams = omit(currentQuery, dropdownFiltersIds);\n    setPage(1);\n    setTilesTags({});\n    setUrlParams({ ...otherParams, page: '1' });\n  }, [dropdownFiltersIds, getUrlParams, setUrlParams]);\n\n  const { mobileFiltersWrapperTextDataset, clearFiltersCtaCopyDataset, emptyPlaceholderDataset } =\n    getContentfulInspectorProps<GalleryType>({\n      entryId: galleryId,\n      fieldIds: [\n        'emptyPlaceholder',\n        'loadMoreCtaCopy',\n        'mobileFiltersWrapperText',\n        'clearFiltersCtaCopy',\n      ],\n    });\n\n  if (onRedirect && Config?.redirects?.queryRedirects) {\n    const queryRedirectsKeys = new Set(Object.keys(Config.redirects.queryRedirects));\n    const queryKeys = Object.keys(query);\n    const hasMatch = queryKeys.some(key => queryRedirectsKeys.has(key));\n\n    if (hasMatch) {\n      const requestUrl = new URL(getCurrentUrl());\n      const url = new URL(`${requestUrl.protocol}//${requestUrl.host}${requestUrl.pathname}`);\n\n      for (const [key, value] of Object.entries(query)) {\n        if (queryRedirectsKeys.has(key)) {\n          url.searchParams.set(`${galleryTagsPrefix}${key}`, String(value));\n          continue;\n        }\n\n        url.searchParams.set(key, String(value));\n      }\n\n      // Copy the hash/fragment (thing after #)\n      url.hash = requestUrl.hash;\n\n      onRedirect(`${url.pathname}${url.search}${url.hash}`, { newTab: false });\n      return null;\n    }\n  }\n\n  return (\n    <div\n      data-testid=\"mwp-lazy-editorial-gallery\"\n      ref={galleryRef}\n      className={editorialGalleryWrapperCss}\n    >\n      {dropdownFilters && !gallery.hideFilters ? (\n        <GalleryFiltersV2SDS\n          searchMenus={dropdownFilters}\n          selectedFilters={tilesTags}\n          onChangeFilter={(filterKey, filterValue) => onChangeFilter(filterKey, filterValue)}\n          onClearFilters={clearFilters}\n          clearButtonLabel={gallery?.clearFiltersCtaCopy}\n          mobileFiltersToggleLabel={gallery?.mobileFiltersWrapperText}\n          mobileFiltersWrapperTextDataset={mobileFiltersWrapperTextDataset}\n          clearFiltersCtaCopyDataset={clearFiltersCtaCopyDataset}\n        />\n      ) : null}\n      <div\n        className={cx({\n          [editorialGalleryCardsContainerCss]:\n            !isLoading && paginationData && paginationData?.tiles?.length > 0,\n        })}\n      >\n        <EditorialGalleryLazyTiles\n          emptyPlaceholder={gallery.emptyPlaceholder}\n          tiles={paginationData?.tiles}\n          emptyPlaceholderDataset={emptyPlaceholderDataset}\n          isGalleryLoading={isLoading}\n          defaultTileImage={gallery.defaultImage ?? undefined}\n          numberOfTiles={gallery?.itemsPerPage ?? defaultEditorialTilesPerPage}\n        />\n      </div>\n      {paginationData?.total && !gallery.hidePagination ? (\n        <Pagination\n          totalPages={\n            Math.floor(\n              (paginationData.total - 1) / (gallery?.itemsPerPage ?? defaultEditorialTilesPerPage)\n            ) + 1\n          }\n          currentPage={page}\n          onChange={onChangePage}\n          className={editorialGalleryPaginationCss}\n        />\n      ) : null}\n    </div>\n  );\n};\n\nEditorialGallery.displayName = 'EditorialGallery';\n", "export const galleryTagsPrefix = 'select_';\nexport const defaultTilesPerPage = 12;\nexport const defaultEditorialTilesPerPage = 6;\n\nexport const GalleryTilesSorting = {\n  ByDate: 'By Date',\n  Unsorted: 'Unsorted',\n} as const;\n\nexport const defaultTileSorting = GalleryTilesSorting.ByDate;\n", "import { useContentfulImages } from '@snapchat/mw-contentful-client';\nimport type { Tile } from '@snapchat/mw-contentful-schema';\nimport {\n  EditorialGalleryCard as EditorialGalleryCardSDS,\n  MessageContext,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport {\n  defaultImageAltText,\n  editorialGalleryDateOptions,\n  getGalleryImgSrcSetSizes,\n  globalDefaultImage,\n} from '../../constants/gallery';\nimport { useFormatDate } from '../../hooks/useFormatDate';\nimport { UserAction } from '../../types/events';\nimport { combineImageSources } from '../../utils/combineImageSources';\nimport { getContentfulInspectorProps } from '../../utils/contentful/getContentfulInspectorProps';\nimport { parseMedia } from '../../utils/media';\nimport { renderRichTextMarkingsOnly } from '../../utils/renderText/renderRichText';\nimport { ConsumerContext } from '../ConsumerContextProvider';\nimport { imageQuality } from '../Image';\nimport type { GalleryTileProps } from '../Tile/query';\n\nexport const EditorialGalleryCard: FC<Omit<GalleryTileProps, 'linkedFrom'>> = ({\n  analytics,\n  date,\n  label,\n  media,\n  slugReference,\n  sys,\n  title,\n  url,\n  brand,\n}) => {\n  const { formatDate } = useFormatDate();\n  const { logEvent } = useContext(ConsumerContext);\n  const { getImageSources } = useContentfulImages();\n  const { isRTL } = useContext(AppContext);\n  const { formatMessage } = useContext(MessageContext);\n\n  const validUrl = url ?? (slugReference?.slug ? `/${slugReference.slug}` : undefined);\n\n  const logEventAction = () => {\n    validUrl &&\n      logEvent?.({\n        component: 'Editorial Gallery Card',\n        type: UserAction.Click,\n        label: analytics?.label ? `${analytics.label} - ${validUrl}` : validUrl,\n        url: validUrl,\n      });\n  };\n\n  let { imageSource, imageAltText } = parseMedia(media?.media);\n  const { imageSource: mobileImageSource } = parseMedia(media?.mobileMedia);\n\n  if (!imageSource) {\n    imageSource = globalDefaultImage;\n    imageAltText = defaultImageAltText;\n  }\n\n  const quality = imageQuality[media?.quality ?? 'Standard'];\n  const imageSrcSettings = { size: getGalleryImgSrcSetSizes(quality) };\n  const imgSrcs = combineImageSources({\n    desktop: getImageSources(imageSource, imageSrcSettings),\n    mobile: getImageSources(mobileImageSource, imageSrcSettings),\n  });\n\n  const {\n    contentfulDescriptionDataset,\n    brandDataset,\n    titleDataset,\n    labelDataset,\n    mediaDataset,\n    dateDataset,\n  } = getContentfulInspectorProps<Tile>({\n    entryId: sys.id,\n    fieldIds: ['title', 'brand', 'label', 'date', 'media', 'contentfulDescription'],\n  });\n\n  return (\n    <EditorialGalleryCardSDS\n      key={sys.id}\n      brand={brand}\n      title={renderRichTextMarkingsOnly(title)}\n      description={renderRichTextMarkingsOnly(label)}\n      dateTime={date ? new Date(date) : undefined}\n      date={formatDate(date, editorialGalleryDateOptions).replaceAll('/', '.')}\n      onClick={logEventAction}\n      imgSrcs={imgSrcs}\n      imgAltText={imageAltText}\n      link={validUrl}\n      ctaLabel={formatMessage({ id: 'editorial-gallery-cta-label', defaultMessage: 'Read More' })}\n      isRtl={isRTL}\n      dataset={contentfulDescriptionDataset}\n      brandDataset={brandDataset}\n      titleDataset={titleDataset}\n      descriptionDataset={labelDataset}\n      mediaDataset={mediaDataset}\n      dateDataset={dateDataset}\n    />\n  );\n};\n\nEditorialGalleryCard.displayName = 'EditorialGalleryCard';\n", "import type { SrcSetSizes } from '@snapchat/mw-contentful-client';\nimport { mobileMaxWidth } from '@snapchat/snap-design-system-marketing';\n\n/*\nThis is a global fallback image to display on summary card when the user doesn't provide an image for the gallery or tile.\nThis image is in the global-components contentful space\n*/\nexport const globalDefaultImage =\n  'https://images.ctfassets.net/kp51zybwznx4/120IJvdruE5HeC9XBYjFiU/879b8f63bde0d27c0750ade94c4b1a39/Default_Gallery_Image.png';\n\nexport const defaultImageAltText = 'Snap Inc.';\n\nexport const defaultDateOptions: Intl.DateTimeFormatOptions = {\n  day: '2-digit',\n  month: 'short',\n  year: 'numeric',\n  // NOTE: Always render these dates assuming UTC timezone to ensure consistent rendering between server and client.\n  //       Otherwise we would need to determine the client's timezone whenever we process the initial render on the server.\n  //       By using UTC for all cases we ensure consistent behavior, though we may be off by 1 day depending on the user's\n  //       location.\n  timeZone: 'UTC',\n};\n\nexport const editorialGalleryDateOptions: Intl.DateTimeFormatOptions = {\n  day: '2-digit',\n  month: '2-digit',\n  year: '2-digit',\n  timeZone: 'UTC',\n};\n\n// 450 height on desktop, 360 height on mobile.\nexport const imageHeights = [360, 450];\nexport const imageHeightsStr = imageHeights.map(ih => `${ih}px`).join(', ');\n\nexport const getGalleryImgSrcSetSizes = (quality: number): SrcSetSizes => ({\n  sizeToUrl: imageHeights.map(height => ({\n    // We can only use width descriptor so... even though it says 'w' it's not really its width.\n    // This way the browser will still use the correct one since we are telling it at mobile\n    // to use 360w and on desktop to use 450w.\n    size: `${height}w`,\n    settings: { height, quality },\n  })),\n  sizes: `(max-width: ${mobileMaxWidth}px) ${imageHeightsStr}`,\n});\n", "import { useCallback, useContext } from 'react';\n\nimport { AppContext } from '../AppContext';\n\nconst forcedArabicLocale = 'ar-EG-u-nu-latn';\n\ntype FormatDate = {\n  formatDate: (date?: Date | string, dateFormatOptions?: Intl.DateTimeFormatOptions) => string;\n};\n\n/** Formats a date, forcing its locale to be ar-EG-u-nu-latn if active lang is Arabic. */\nexport function useFormatDate(): FormatDate {\n  const { currentLocale } = useContext(AppContext);\n\n  const formatDate = useCallback(\n    (date: Date | string | undefined, dateFormatOptions?: Intl.DateTimeFormatOptions): string => {\n      if (!date) return '';\n\n      const effectiveLocale = currentLocale.startsWith('ar') ? forcedArabicLocale : currentLocale;\n\n      const formatter = new Intl.DateTimeFormat(effectiveLocale, dateFormatOptions);\n      return formatter.format(new Date(date));\n    },\n    [currentLocale]\n  );\n\n  return { formatDate };\n}\n", "import { gql } from '@apollo/client';\nimport type { ContentfulMetadata, Criteria } from '@snapchat/mw-contentful-schema';\nimport type {\n  EditorialGalleryBrand as TileBrand,\n  TileImageFit,\n  TileImageSize,\n} from '@snapchat/snap-design-system-marketing';\nimport type { ContentfulSysProps } from 'src/types/contentful';\nimport type { Items } from 'src/types/Items';\nimport type { RichText } from 'src/types/RichText';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { fragments as analyticsFragments } from '../Analytics/query';\nimport type { AnalyticsDataProps } from '../Analytics/types';\nimport { criteriaFragment } from '../Experiment';\nimport { fragments as imageFragments } from '../Image';\nimport type { ImageDataProps } from '../Image/types';\nimport { fragments as videoFragments } from '../Video';\n\nexport const fragments = {\n  immersiveScrollBlockTile: gql`\n    fragment ImmersiveScrollBlockTile on Tile {\n      ...ContentfulSysId\n      title {\n        json\n      }\n      label {\n        json\n      }\n      media {\n        __typename\n        ... on Video {\n          ...VideoAll\n        }\n        ... on Image {\n          ...ImageAll\n        }\n      }\n      slugReference {\n        ...ContentfulSysId\n        slug\n        unlistedCriteria {\n          ...CriteriaAll\n        }\n      }\n    }\n    ${imageFragments.all}\n    ${videoFragments.all}\n    ${criteriaFragment}\n    ${contentfulSysIdFragment}\n  `,\n  all: gql`\n    fragment TileAll on Tile {\n      ...ContentfulSysId\n      title {\n        json\n      }\n      label {\n        json\n      }\n      media {\n        __typename\n        ... on Video {\n          ...VideoAll\n        }\n        ... on Image {\n          ...ImageAll\n        }\n      }\n      date\n      secondaryMedia {\n        ...ImageAll\n      }\n      imageSize\n      imageFit\n      url\n      contentfulMetadata {\n        tags {\n          id\n        }\n      }\n      analytics {\n        ...AnalyticsAll\n      }\n      slugReference {\n        ...ContentfulSysId\n        slug\n        unlistedCriteria {\n          ...CriteriaAll\n        }\n      }\n      brand\n    }\n    ${analyticsFragments.all}\n    ${imageFragments.all}\n    ${videoFragments.all}\n    ${criteriaFragment}\n    ${contentfulSysIdFragment}\n  `,\n};\n\nexport type GalleryTileProps = ContentfulSysProps & {\n  contentfulMetadata: ContentfulMetadata;\n  title?: RichText;\n  label?: RichText;\n  url?: string;\n  media?: ImageDataProps | null;\n  date?: string;\n  secondaryMedia?: ImageDataProps | null;\n  imageSize?: TileImageSize;\n  imageFit?: TileImageFit;\n  analytics?: AnalyticsDataProps;\n  slugReference?: {\n    slug: string;\n    unlistedCriteria?: Criteria;\n  } & ContentfulSysProps;\n  linkedFrom?: {\n    galleryCollection: Items<ContentfulSysProps>;\n  };\n  brand?: TileBrand;\n};\n\nexport const queries = {\n  shallow: gql`\n    query TileQuery($preview: Boolean!, $locale: String!, $id: String!) {\n      tile(preview: $preview, locale: $locale, id: $id) {\n        ...ContentfulSysId\n      }\n    }\n    ${contentfulSysIdFragment}\n  `,\n  all: gql`\n    query TileQuery($preview: Boolean!, $locale: String!, $id: String!) {\n      tile(preview: $preview, locale: $locale, id: $id) {\n        ...TileAll\n      }\n    }\n    ${fragments.all}\n  `,\n};\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\n\nexport const topicFragment = gql`\n  fragment TopicAll on Topic {\n    ...ContentfulSysId\n    topicId\n    displayText\n    linksTo\n  }\n  ${contentfulSysIdFragment}\n`;\n", "import { gql } from '@apollo/client';\n\nimport type { ContentfulSysProps } from '../../types/contentful';\nimport type { Items } from '../../types/Items';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { fragments as imageFragments } from '../Image';\nimport type { ImageDataProps } from '../Image/types';\nimport type { GalleryTileProps } from '../Tile/query';\nimport { fragments } from '../Tile/query';\nimport { topicFragment } from '../Topic/Topic.query';\nimport type { GalleryTilesSortingType, GalleryType } from './types';\n\nexport const skipDelta = 12;\n\n// =================================================================================================\n// Gallery Dropdown Fragment\n// =================================================================================================\n\nexport type DropdownItem = ContentfulSysProps & {\n  topicId: string;\n  displayText: string;\n};\n\nexport type Dropdown = ContentfulSysProps & {\n  title: string;\n  matchAllOptionsTitle: string;\n  dropdownItemsCollection: Items<DropdownItem>;\n  queryParamKey: string;\n};\nconst galleryDropdownFragment = gql`\n  fragment GalleryDropdownAll on GalleryDropdown {\n    ...ContentfulSysId\n    title\n    matchAllOptionsTitle\n    dropdownItemsCollection {\n      items {\n        ... on Topic {\n          ...TopicAll\n        }\n      }\n    }\n    queryParamKey\n  }\n  ${contentfulSysIdFragment}\n  ${topicFragment}\n`;\n\n// =================================================================================================\n// Gallery Fragment\n// =================================================================================================\nexport const galleryFragment = gql`\n  fragment GalleryFragment on Gallery {\n    ...ContentfulSysId\n    dropdownsCollection(limit: 5) {\n      total\n      items {\n        ... on GalleryDropdown {\n          ...GalleryDropdownAll\n        }\n      }\n    }\n    sortBy\n    showDates\n    showMedia\n    showDescriptions\n    defaultImage {\n      ...ImageAll\n    }\n    emptyPlaceholder\n    loadMoreCtaCopy\n    mobileFiltersWrapperText\n    clearFiltersCtaCopy\n    itemsPerPage\n    hidePagination\n    hideFilters\n    galleryType\n  }\n  ${contentfulSysIdFragment}\n  ${galleryDropdownFragment}\n  ${imageFragments.all}\n`;\n\nexport type GalleryDataProps = ContentfulSysProps & {\n  dropdownsCollection: Items<Dropdown>;\n  tilesCollection: Items<Omit<GalleryTileProps, 'linkedFrom'>>;\n  sortBy?: GalleryTilesSortingType;\n  showDates?: boolean;\n  showMedia?: boolean;\n  showDescriptions?: boolean;\n  defaultImage?: ImageDataProps | null;\n  emptyPlaceholder?: string;\n  loadMoreCtaCopy?: string;\n  mobileFiltersWrapperText?: string;\n  clearFiltersCtaCopy?: string;\n  itemsPerPage?: number;\n  hidePagination?: boolean;\n  hideFilters?: boolean;\n  galleryType?: GalleryType;\n};\n\n// =================================================================================================\n// Gallery Query\n// =================================================================================================\n\nexport const lazyGalleryQuery = gql`\n  query GalleryQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    gallery(preview: $preview, locale: $locale, id: $id) {\n      ...GalleryFragment\n    }\n  }\n  ${galleryFragment}\n`;\n\nexport type LazyGalleryQueryResponse = {\n  gallery: Omit<GalleryDataProps, 'tilesCollection'>;\n};\n\n// =================================================================================================\n// Tiles Query\n// =================================================================================================\n\nexport const tileCollectionQuery = gql`\n  query TileQuery($preview: Boolean!, $locale: String!, $ids: [String]!) {\n    tileCollection(preview: $preview, locale: $locale, where: { sys: { id_in: $ids } }) {\n      total\n      items {\n        ...TileAll\n      }\n    }\n  }\n  ${fragments.all}\n`;\n\nexport type TileQueryResponse = {\n  tileCollection: Items<GalleryTileProps>;\n};\n", "import { css } from '@emotion/css';\nimport { h3Css, m, nonMobileMediaQuery } from '@snapchat/snap-design-system-marketing';\n\nimport { totalHeaderHeightCssVar } from '../Header/headerSizeUtils';\n\nexport const galleryWrapperCss = css`\n  margin-left: auto;\n  margin-right: auto;\n  margin-top: ${m('--spacing-m')};\n  margin-bottom: ${m('--spacing-m')};\n  scroll-margin-top: var(${totalHeaderHeightCssVar});\n  width: 100%;\n`;\n\nexport const galleryPlaceholderCss = css`\n  text-align: center;\n  margin-top: ${m('--spacing-xl')};\n  margin-bottom: ${m('--spacing-xl')};\n\n  ${h3Css}\n`;\n\nexport const buttonWrapperCss = css`\n  padding-top: ${m('--spacing-xl')};\n  display: flex;\n  justify-content: center;\n`;\n\nexport const editorialGalleryWrapperCss = css`\n  display: flex;\n  flex-direction: column;\n`;\n\nexport const editorialGalleryPaginationCss = css`\n  padding-block-end: ${m('--spacing-xl')};\n  padding-block-start: ${m('--spacing-m')};\n  padding-inline: ${m('--spacing-xl')};\n\n  ${nonMobileMediaQuery} {\n    align-self: flex-end;\n    padding-block: unset;\n    padding-inline: ${m('--spacing-xxxl')};\n  }\n`;\n", "import {\n  dataSetToAttributes,\n  SkeletonEditorialGalleryCard,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport { EditorialGalleryCard } from '../EditorialGalleryCard';\nimport { defaultEditorialTilesPerPage } from './constants';\nimport type { TileQueryResponse } from './query';\nimport { tileCollectionQuery } from './query';\nimport { galleryPlaceholderCss } from './styles';\nimport type { LazyTilesProps } from './types';\n\nexport const EditorialGalleryLazyTiles: FC<LazyTilesProps> = ({\n  emptyPlaceholder,\n  tiles,\n  emptyPlaceholderDataset,\n  isGalleryLoading,\n  defaultTileImage,\n  numberOfTiles,\n}) => {\n  const tileIds = tiles?.map(tile => tile.tileSysId) ?? [];\n\n  const { data, loading } = useContentfulQuery<TileQueryResponse, { ids: string[] }>(\n    tileCollectionQuery,\n    {\n      variables: { ids: tileIds },\n      skip: tileIds.length === 0 || isGalleryLoading,\n    }\n  );\n\n  const sortedItems = data?.tileCollection?.items\n    .slice()\n    .sort((a, b) => tileIds.indexOf(a.sys.id) - tileIds.indexOf(b.sys.id));\n\n  if (isGalleryLoading || loading) {\n    return (\n      <>\n        {Array.from({ length: numberOfTiles ?? defaultEditorialTilesPerPage }).map((_, index) => (\n          <SkeletonEditorialGalleryCard key={`skeleton-editorial-gallery-card-${index}`} />\n        ))}\n      </>\n    );\n  }\n\n  return (\n    <>\n      {sortedItems?.length ? (\n        sortedItems.map(tile => {\n          return (\n            <EditorialGalleryCard\n              key={tile.sys.id}\n              {...tile}\n              media={tile.media ?? defaultTileImage}\n            />\n          );\n        })\n      ) : (\n        <div data-testid=\"mwp-editorial-gallery-placeholder\" className={galleryPlaceholderCss}>\n          <p {...dataSetToAttributes(emptyPlaceholderDataset)}>{emptyPlaceholder}</p>\n        </div>\n      )}\n    </>\n  );\n};\n\nEditorialGalleryLazyTiles.displayName = 'EditorialGalleryLazyTiles';\n", "import type { Gallery as GalleryType } from '@snapchat/mw-contentful-schema';\nimport {\n  GalleryFiltersV2 as GalleryFiltersV2SDS,\n  Pagination,\n} from '@snapchat/snap-design-system-marketing';\nimport cloneDeep from 'lodash-es/cloneDeep';\nimport omit from 'lodash-es/omit';\nimport pick from 'lodash-es/pick';\nimport type { FC } from 'react';\nimport { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport { Config } from '../../config';\nimport { getContentfulInspectorProps } from '../../utils/contentful/getContentfulInspectorProps';\nimport { ConsumerContext } from '../ConsumerContextProvider';\nimport { totalHeaderHeightCssVar } from '../Header/headerSizeUtils';\nimport { defaultTilesPerPage, galleryTagsPrefix } from './constants';\nimport { LazyTiles } from './LazyTiles';\nimport type { GalleryDataProps } from './query';\nimport { galleryWrapperCss } from './styles';\nimport { useGalleryTiles } from './useGalleryTiles';\nimport { buildSearchMenus } from './utils';\n\nexport type GalleryProps = {\n  gallery: Omit<GalleryDataProps, 'tilesCollection'>;\n};\n\nexport const handleScroll = (gallery: HTMLDivElement | null) => {\n  // Using requestAnimationFrame to avoid forced reflow  and solve inconsistencies with smooth scroll.\n  window.requestAnimationFrame(() => {\n    const totalHeaderHeight = Number.parseInt(\n      getComputedStyle(document.documentElement).getPropertyValue(totalHeaderHeightCssVar),\n      10\n    );\n\n    const galleryTop = gallery?.getBoundingClientRect().top ?? 0;\n    const scrollY = window.scrollY;\n\n    // Adding totalHeaderHeight to account the height of the header when sticky,\n    // plus 20px to make some white space between the top of the element and the header.\n    window.scrollTo({ top: galleryTop + scrollY - (totalHeaderHeight + 20), behavior: 'smooth' });\n  });\n};\n\nexport const Gallery: FC<GalleryProps> = props => {\n  const { gallery } = props;\n  const galleryId = gallery.sys.id;\n\n  const { getUrlParams, setUrlParams } = useContext(ConsumerContext);\n  const { onRedirect, getCurrentUrl } = useContext(AppContext);\n\n  const query = getUrlParams?.() ?? {};\n  const [page, setPage] = useState(gallery.hidePagination ? 1 : Number(query?.page ?? 1));\n\n  const dropdownFilters = useMemo(() => {\n    if (gallery?.dropdownsCollection) {\n      return buildSearchMenus(gallery.dropdownsCollection.items, true);\n    }\n\n    return undefined;\n  }, [gallery]);\n\n  const dropdownFiltersIds = useMemo(() => {\n    if (!dropdownFilters) {\n      return [];\n    }\n\n    return dropdownFilters.map(dropdown => dropdown.id);\n  }, [dropdownFilters]);\n\n  const [tilesTags, setTilesTags] = useState(pick(query, dropdownFiltersIds));\n\n  // Handle back button click\n  useEffect(() => {\n    const searchParams = getUrlParams?.() ?? {};\n    const newFilters = pick(searchParams, dropdownFiltersIds);\n    const newPage = Number(searchParams?.page ?? 1);\n    setTilesTags(newFilters);\n    setPage(newPage);\n  }, [dropdownFiltersIds, getUrlParams]);\n\n  const { paginationData, isLoading } = useGalleryTiles({\n    galleryId,\n    page,\n    pageSize: gallery?.itemsPerPage,\n    tags: Object.values(tilesTags),\n    sortBy: gallery?.sortBy,\n  });\n\n  const galleryRef = useRef<HTMLDivElement>(null);\n\n  const onChangeFilter = useCallback(\n    (filterKey: string, filterValue: string | undefined) => {\n      if (!setUrlParams) {\n        return;\n      }\n\n      let newFilters = cloneDeep(tilesTags);\n      const currentQuery = getUrlParams?.() ?? {};\n      const otherParams = omit(currentQuery, dropdownFiltersIds);\n\n      if (filterValue) {\n        newFilters[filterKey] = filterValue;\n      } else {\n        newFilters = omit(newFilters, filterKey);\n      }\n      setTilesTags(newFilters);\n      setPage(1);\n      setUrlParams({ ...otherParams, ...newFilters, page: '1' });\n    },\n    [dropdownFiltersIds, getUrlParams, setUrlParams, tilesTags]\n  );\n\n  const onChangePage = useCallback(\n    (newPage: number) => {\n      if (!setUrlParams) {\n        return;\n      }\n\n      const currentQuery = getUrlParams?.() ?? {};\n      const newUrlParams = cloneDeep(currentQuery);\n      newUrlParams.page = `${newPage}`;\n      setPage(newPage);\n      setUrlParams(newUrlParams);\n      handleScroll(galleryRef.current);\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [getUrlParams, setUrlParams, galleryRef.current] // We need the rebuild onChangePage when galleryRef.current gets assigned\n  );\n\n  const clearFilters = useCallback(() => {\n    if (!setUrlParams) {\n      return;\n    }\n\n    const currentQuery = getUrlParams?.() ?? {};\n    const otherParams = omit(currentQuery, dropdownFiltersIds);\n    setPage(1);\n    setTilesTags({});\n    setUrlParams({ ...otherParams, page: '1' });\n  }, [dropdownFiltersIds, getUrlParams, setUrlParams]);\n\n  const { mobileFiltersWrapperTextDataset, clearFiltersCtaCopyDataset, emptyPlaceholderDataset } =\n    getContentfulInspectorProps<GalleryType>({\n      entryId: galleryId,\n      fieldIds: [\n        'emptyPlaceholder',\n        'loadMoreCtaCopy',\n        'mobileFiltersWrapperText',\n        'clearFiltersCtaCopy',\n      ],\n    });\n\n  if (onRedirect && Config?.redirects?.queryRedirects) {\n    const queryRedirectsKeys = new Set(Object.keys(Config.redirects.queryRedirects));\n    const queryKeys = Object.keys(query);\n    const hasMatch = queryKeys.some(key => queryRedirectsKeys.has(key));\n\n    if (hasMatch) {\n      const requestUrl = new URL(getCurrentUrl());\n      const url = new URL(`${requestUrl.protocol}//${requestUrl.host}${requestUrl.pathname}`);\n\n      for (const [key, value] of Object.entries(query)) {\n        if (queryRedirectsKeys.has(key)) {\n          url.searchParams.set(`${galleryTagsPrefix}${key}`, String(value));\n          continue;\n        }\n\n        url.searchParams.set(key, String(value));\n      }\n\n      // Copy the hash/fragment (thing after #)\n      url.hash = requestUrl.hash;\n\n      onRedirect(`${url.pathname}${url.search}${url.hash}`, { newTab: false });\n      return null;\n    }\n  }\n\n  return (\n    <div data-testid=\"mwp-lazy-gallery\" ref={galleryRef} className={galleryWrapperCss}>\n      {dropdownFilters && !gallery.hideFilters ? (\n        <GalleryFiltersV2SDS\n          searchMenus={dropdownFilters}\n          selectedFilters={tilesTags}\n          onChangeFilter={(filterKey, filterValue) => onChangeFilter(filterKey, filterValue)}\n          onClearFilters={clearFilters}\n          clearButtonLabel={gallery?.clearFiltersCtaCopy}\n          mobileFiltersToggleLabel={gallery?.mobileFiltersWrapperText}\n          mobileFiltersWrapperTextDataset={mobileFiltersWrapperTextDataset}\n          clearFiltersCtaCopyDataset={clearFiltersCtaCopyDataset}\n        />\n      ) : null}\n      <LazyTiles\n        emptyPlaceholder={gallery.emptyPlaceholder}\n        tiles={paginationData?.tiles}\n        showDates={gallery.showDates}\n        showDescriptions={gallery.showDescriptions}\n        showMedia={gallery.showMedia}\n        emptyPlaceholderDataset={emptyPlaceholderDataset}\n        isGalleryLoading={isLoading}\n        defaultTileImage={gallery.defaultImage ?? undefined}\n        numberOfTiles={gallery?.itemsPerPage ?? defaultTilesPerPage}\n      />\n      {paginationData?.total && !gallery.hidePagination ? (\n        <Pagination\n          totalPages={\n            Math.floor(\n              (paginationData.total - 1) / (gallery?.itemsPerPage ?? defaultTilesPerPage)\n            ) + 1\n          }\n          currentPage={page}\n          onChange={onChangePage}\n        />\n      ) : null}\n    </div>\n  );\n};\n\nGallery.displayName = 'Gallery';\n", "import { documentToPlainTextString } from '@contentful/rich-text-plain-text-renderer';\nimport { cx } from '@emotion/css';\nimport { useContentfulImages } from '@snapchat/mw-contentful-client';\nimport type { Tile } from '@snapchat/mw-contentful-schema';\nimport {\n  type ImageSources,\n  SummaryCard as SummaryCardSDS,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport {\n  defaultDateOptions,\n  defaultImageAltText,\n  getGalleryImgSrcSetSizes,\n  globalDefaultImage,\n} from '../../constants/gallery';\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logUserEvent } from '../../helpers/logging';\nimport { useFormatDate } from '../../hooks/useFormatDate';\nimport { UserAction } from '../../types/events';\nimport { combineImageSources } from '../../utils/combineImageSources';\nimport { getContentfulInspectorProps } from '../../utils/contentful/getContentfulInspectorProps';\nimport { parseMedia } from '../../utils/media';\nimport { renderRichText, renderRichTextMarkingsOnly } from '../../utils/renderText/renderRichText';\nimport { imageQuality } from '../Image';\nimport { summaryCardHeroCss } from './SummaryCard.styled';\nimport type { SummaryCardProps } from './types';\n\nexport const SummaryCard: FC<Omit<SummaryCardProps, 'linkedFrom'>> = ({\n  analytics,\n  date,\n  label,\n  media,\n  showDates,\n  showDescriptions,\n  showMedia = true,\n  slugReference,\n  sys,\n  title,\n  url,\n  isHeroTile = false,\n  eyebrowText,\n}) => {\n  const { formatDate } = useFormatDate();\n  const elementLocation = useContext(ElementLocation).elementLocation;\n  const { getImageSources } = useContentfulImages();\n\n  const validUrl = url ?? (slugReference?.slug ? `/${slugReference.slug}` : undefined);\n\n  const logEventAction = () => {\n    validUrl &&\n      logUserEvent({\n        eventAction: UserAction.Click,\n        eventCategory: 'Summary Card',\n        eventLabel: analytics?.label ? `${analytics.label} - ${validUrl}` : validUrl,\n        context: {\n          elementText: title?.json ? documentToPlainTextString(title.json) : undefined,\n          targetUrl: validUrl,\n          elementLocation,\n        },\n      });\n  };\n\n  let { imageSource, imageAltText } = parseMedia(media?.media);\n  const { imageSource: mobileImageSource } = parseMedia(media?.mobileMedia);\n\n  if (!imageSource) {\n    imageSource = globalDefaultImage;\n    imageAltText = defaultImageAltText;\n  }\n\n  const quality = imageQuality[media?.quality ?? 'Standard'];\n  const imageSrcSettings = { size: getGalleryImgSrcSetSizes(quality) };\n  const imgSrcs = combineImageSources({\n    desktop: getImageSources(imageSource, imageSrcSettings),\n    mobile: getImageSources(mobileImageSource, imageSrcSettings),\n  });\n\n  const { contentfulDescriptionDataset, titleDataset, labelDataset, mediaDataset, dateDataset } =\n    getContentfulInspectorProps<Tile>({\n      entryId: sys.id,\n      fieldIds: ['title', 'label', 'date', 'media', 'contentfulDescription'],\n    });\n\n  const stickers = media?.stickersCollection?.items?.map(sticker => ({\n    imgSrcs: getImageSources(sticker?.asset?.url) as ImageSources,\n    position: sticker?.position,\n    rotation: sticker?.rotation,\n  }));\n\n  return (\n    <SummaryCardSDS\n      onClick={logEventAction}\n      key={sys.id}\n      title={renderRichTextMarkingsOnly(title)}\n      description={renderRichText(label)}\n      imgSrcs={imgSrcs}\n      imgAltText={imageAltText}\n      link={validUrl}\n      showDate={showDates}\n      showDescription={showDescriptions}\n      showMedia={showMedia}\n      date={formatDate(date, defaultDateOptions)}\n      dateTime={date ? new Date(date) : undefined}\n      dataset={contentfulDescriptionDataset} // take the user to the tile entry\n      titleDataset={titleDataset}\n      descriptionDataset={labelDataset}\n      mediaDataset={mediaDataset}\n      dateDataset={dateDataset}\n      className={cx({ [summaryCardHeroCss]: isHeroTile })}\n      eyebrowText={eyebrowText}\n      stickers={stickers}\n    />\n  );\n};\n\nSummaryCard.displayName = 'SummaryCard';\n", "import { css } from '@emotion/css';\nimport { nonMobileMediaQuery } from '@snapchat/snap-design-system-marketing';\n\nconst mobileSummaryCardHeight = 180;\n\nconst summaryCardHeroHeight = 280;\n\nexport const summaryCardHeroCss = css`\n  height: ${mobileSummaryCardHeight}px;\n\n  ${nonMobileMediaQuery} {\n    height: ${summaryCardHeroHeight}px;\n  }\n`;\n", "import {\n  dataSetToAttributes,\n  GalleryGridV2 as GalleryGridV2SDS,\n  SkeletonSummaryCard,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport { SummaryCard } from '../SummaryCard';\nimport { defaultTilesPerPage } from './constants';\nimport type { TileQueryResponse } from './query';\nimport { tileCollectionQuery } from './query';\nimport { galleryPlaceholderCss } from './styles';\nimport type { LazyTilesProps } from './types';\n\nexport const LazyTiles: FC<LazyTilesProps> = ({\n  emptyPlaceholder,\n  tiles,\n  emptyPlaceholderDataset,\n  showDates,\n  showDescriptions,\n  showMedia,\n  isGalleryLoading,\n  defaultTileImage,\n  numberOfTiles,\n}) => {\n  const tileIds = tiles?.map(tile => tile.tileSysId) ?? [];\n\n  const { data, loading } = useContentfulQuery<TileQueryResponse, { ids: string[] }>(\n    tileCollectionQuery,\n    {\n      variables: { ids: tileIds },\n    }\n  );\n\n  const sortedItems = data?.tileCollection?.items\n    .slice()\n    .sort((a, b) => tileIds.indexOf(a.sys.id) - tileIds.indexOf(b.sys.id));\n\n  if (isGalleryLoading || loading) {\n    return (\n      <GalleryGridV2SDS>\n        {Array.from({ length: numberOfTiles ?? defaultTilesPerPage }).map((_, index) => (\n          <SkeletonSummaryCard key={`skeleton-summary-card-${index}`} />\n        ))}\n      </GalleryGridV2SDS>\n    );\n  }\n\n  return (\n    <>\n      {sortedItems?.length ? (\n        <GalleryGridV2SDS>\n          {sortedItems.map(tile => {\n            return (\n              <SummaryCard\n                key={tile.sys.id}\n                showDates={showDates}\n                showDescriptions={showDescriptions}\n                showMedia={showMedia}\n                {...tile}\n                media={tile.media ?? defaultTileImage}\n              />\n            );\n          })}\n        </GalleryGridV2SDS>\n      ) : (\n        <div data-testid=\"mwp-gallery-placeholder\" className={galleryPlaceholderCss}>\n          <p {...dataSetToAttributes(emptyPlaceholderDataset)}>{emptyPlaceholder}</p>\n        </div>\n      )}\n    </>\n  );\n};\n\nLazyTiles.displayName = 'LazyTiles';\n", "import { useAsyncData } from '@snapchat/async-data-browser';\nimport { BrowserFeaturesContext } from '@snapchat/snap-design-system-marketing';\nimport { useContext, useMemo, useRef } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport { Config } from '../../config';\nimport { logger } from '../../helpers/logging';\nimport { defaultTileSorting, defaultTilesPerPage } from './constants';\nimport type { GalleryTilesSortingType, PaginationDataProps } from './types';\n\ntype GalleryData = {\n  paginationData: PaginationDataProps | undefined;\n  isLoading: boolean;\n};\n\ntype GalleryTilesProps = {\n  galleryId: string;\n  page: number;\n  pageSize?: number;\n  tags: string[];\n  sortBy?: GalleryTilesSortingType;\n};\n\n/**\n * Returns the data needed to render the pagination and tiles components\n *\n * @param galleryId Id of the gallery we want to query\n * @param page Page number to use in the query\n * @param tags List of values from dropdown filters\n */\nexport function useGalleryTiles({\n  galleryId,\n  page,\n  tags,\n  pageSize = defaultTilesPerPage,\n  sortBy = defaultTileSorting,\n}: GalleryTilesProps): GalleryData {\n  const appContext = useContext(AppContext);\n  const browserFeatures = useContext(BrowserFeaturesContext);\n  const previousTotal = useRef(0);\n\n  const params = useMemo(() => {\n    const params = new URLSearchParams();\n\n    params.append('galleryId', galleryId);\n    params.append('pageSize', `${pageSize}`);\n    params.append('sortBy', sortBy);\n\n    if (tags.length) {\n      params.append('tags', tags.join(','));\n    }\n\n    params.append('page', `${page - 1}`);\n\n    if (appContext.currentLocale) {\n      params.append('locale', appContext.currentLocale);\n    }\n\n    if (appContext.userLocation.country) {\n      params.append('country', appContext.userLocation.country);\n    }\n\n    const platform = browserFeatures.getLowEntropyHints().platform;\n\n    if (platform) {\n      params.append('platform', platform);\n    }\n\n    const device = browserFeatures.getLowEntropyHints().isMobile ? 'Mobile' : 'Non-Mobile';\n\n    if (device) {\n      params.append('device', device);\n    }\n\n    return params;\n  }, [\n    galleryId,\n    tags,\n    page,\n    pageSize,\n    appContext.currentLocale,\n    appContext.userLocation.country,\n    browserFeatures,\n    sortBy,\n  ]);\n\n  const host = Config.isClient ? '' : `http://localhost:${process.env.PORT ?? 3000}`;\n  const url = `${host}/api/gallery?${params}`;\n\n  const { data, isLoading } = useAsyncData({\n    dataId: `/api/gallery?${params}`,\n    dataAsync: async () => {\n      try {\n        const response = await fetch(url);\n        const data = await response.json();\n        return data;\n      } catch (error) {\n        logger.logError({\n          component: 'UseGalleryTiles',\n          message: 'Error loading gallery tiles',\n          error,\n        });\n      }\n    },\n  });\n\n  if (data?.total) {\n    previousTotal.current = data?.total;\n  }\n\n  return {\n    paginationData: isLoading ? { tiles: [], total: previousTotal.current } : data,\n    isLoading,\n  };\n}\n", "import type { GalleryDropdown } from '@snapchat/mw-contentful-schema';\nimport kebabCase from 'lodash-es/kebabCase';\n\nimport { getContentfulInspectorProps } from '../../utils/contentful/getContentfulInspectorProps';\nimport { galleryTagsPrefix } from './constants';\nimport type { Dropdown } from './query';\nimport type { SearchMenuProps } from './types';\n\nexport const buildSearchMenus = (\n  dropdowns: Array<Dropdown> | undefined,\n  galleryPaginationEnabled = false\n): SearchMenuProps => {\n  if (!dropdowns) {\n    return undefined;\n  }\n\n  return dropdowns.map(\n    ({ matchAllOptionsTitle, dropdownItemsCollection, queryParamKey, title, sys }) => {\n      const { contentfulDescriptionDataset } = getContentfulInspectorProps<GalleryDropdown>({\n        entryId: sys.id,\n        // Direct users to the entry rather than a specific field, the text is different depending on the dropdown option\n        fieldIds: ['contentfulDescription'],\n      });\n\n      return {\n        title,\n        id: galleryPaginationEnabled\n          ? `${galleryTagsPrefix}${kebabCase(queryParamKey)}`\n          : `${kebabCase(queryParamKey)}`,\n        allItemTitle: matchAllOptionsTitle,\n        items: dropdownItemsCollection.items\n          .map(({ displayText, topicId }) => {\n            return { title: displayText, id: topicId };\n          })\n          .sort((a, b) => a.title.localeCompare(b.title)),\n        dataset: contentfulDescriptionDataset,\n      };\n    }\n  );\n};\n", "import type { FC } from 'react';\n\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport { EditorialGallery } from './EditorialGallery';\nimport { Gallery } from './Gallery';\nimport type { LazyGalleryQueryResponse } from './query';\nimport { lazyGalleryQuery } from './query';\nimport { type LazyGalleryProps, GalleryType } from './types';\n\nexport const LazyGallery: FC<LazyGalleryProps> = props => {\n  const galleryId = props.sys.id;\n\n  const { data: galleryData } = useContentfulQuery<\n    LazyGalleryQueryResponse,\n    {\n      id: string;\n    }\n  >(lazyGalleryQuery, {\n    variables: { id: galleryId },\n  });\n\n  const gallery = galleryData?.gallery;\n  const isEditorialGallery = gallery?.galleryType === GalleryType.EDITORIAL;\n\n  if (!gallery) {\n    return null;\n  }\n\n  return isEditorialGallery ? (\n    <EditorialGallery gallery={gallery} />\n  ) : (\n    <Gallery gallery={gallery} />\n  );\n};\n\nLazyGallery.displayName = 'LazyGallery';\n", "import { useContentfulImages } from '@snapchat/mw-contentful-client';\nimport type { MosaicFilterProps, MosaicTileProps } from '@snapchat/snap-design-system-marketing';\nimport { Mosaic as MosaicSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logUserEvent } from '../../helpers/logging';\nimport { UserAction } from '../../types/events';\nimport { getMediaProps } from '../Video/Video';\nimport type { MosaicTilesDataProps } from './types';\n\nexport const Mosaic: FC<MosaicTilesDataProps> = props => {\n  const elementLocation = useContext(ElementLocation).elementLocation;\n  const { getBestBgImgSrc, getImageSources } = useContentfulImages();\n\n  const { tilesCollection, columns, mobileColumns, filtersCollection } = props;\n\n  const tiles = tilesCollection.items.map(\n    ({ video, preview, thumbnail, filtersCollection, analytics, ...item }) => {\n      const poster = getImageSources(thumbnail.url, { image: { width: 768 } });\n      const label = analytics?.label ?? item.sys.id;\n      const component = 'MosaicTile';\n\n      return {\n        ...item,\n        onClose: () =>\n          logUserEvent({\n            eventAction: UserAction.Close,\n            eventCategory: component,\n            eventLabel: label,\n            context: { elementText: label, elementLocation },\n          }),\n        onOpen: () =>\n          logUserEvent({\n            eventAction: UserAction.Open,\n            eventCategory: component,\n            eventLabel: label,\n            context: { elementText: label, elementLocation },\n          }),\n        onEnter: () =>\n          logUserEvent({\n            eventAction: UserAction.Enter,\n            eventCategory: component,\n            eventLabel: label,\n            context: { elementText: label, elementLocation },\n          }),\n        onLeave: () =>\n          logUserEvent({\n            eventAction: UserAction.Leave,\n            eventCategory: component,\n            eventLabel: label,\n            context: { elementText: label, elementLocation },\n          }),\n        filters: filtersCollection?.items?.map(i => i.sys.id),\n        poster: {\n          src: poster?.default,\n          srcSet: poster?.defaultSrcSet,\n        },\n        video: video ? getMediaProps(video, getBestBgImgSrc) : undefined,\n        preview: preview ? getMediaProps(preview, getBestBgImgSrc) : undefined,\n      } as MosaicTileProps;\n    }\n  );\n\n  const filters = filtersCollection.items?.map(\n    ({ sys, isAll, ...filter }) => ({ id: isAll ? '' : sys.id, ...filter } as MosaicFilterProps)\n  );\n\n  return (\n    <MosaicSDS tiles={tiles} columns={columns} mobileColumns={mobileColumns} filters={filters} />\n  );\n};\nMosaic.displayName = 'Mosaic';\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { fragments as analyticsFragments } from '../Analytics/query';\nimport { fragments as videoFragments } from '../Video';\n\nexport const fragments = {\n  all: gql`\n    fragment MosaicAll on Mosaic {\n      ...ContentfulSysId\n      columns\n      mobileColumns\n      filtersCollection(limit: 20) {\n        items {\n          ...ContentfulSysId\n          ... on MosaicFilters {\n            ...ContentfulSysId\n            text\n            icon\n            isAll\n          }\n        }\n      }\n      tilesCollection(limit: 100) {\n        items {\n          ...ContentfulSysId\n          ... on MosaicTile {\n            ...ContentfulSysId\n            analytics {\n              ...AnalyticsAll\n            }\n            title\n            highlight\n            showOverlay\n            duration\n            columns\n            mobileColumns\n            rows\n            mobileRows\n            preview {\n              ...VideoAll\n            }\n            video {\n              ...VideoAll\n            }\n            thumbnail {\n              url\n              contentType\n            }\n            filtersCollection(limit: 50) {\n              items {\n                ...ContentfulSysId\n              }\n            }\n          }\n        }\n      }\n    }\n    ${analyticsFragments.all}\n    ${videoFragments.all}\n    ${contentfulSysIdFragment}\n  `,\n};\n\nexport const query = {\n  shallow: gql`\n    query MosaicQuery($preview: Boolean!, $locale: String!, $id: String!) {\n      mosaic(preview: $preview, locale: $locale, id: $id) {\n        ...ContentfulSysId\n      }\n    }\n    ${contentfulSysIdFragment}\n  `,\n  all: gql`\n    query MosaicQuery($preview: Boolean!, $locale: String!, $id: String!) {\n      mosaic(preview: $preview, locale: $locale, id: $id) {\n        ...MosaicAll\n      }\n    }\n    ${fragments.all}\n  `,\n};\n", "import type { FC } from 'react';\n\nimport type { ContentfulIdVariable } from '../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport type { ContentfulTypedSysProps } from '../../types/contentful';\nimport { Mosaic } from './Mosaic';\nimport { query } from './query';\nimport type { MosaicDataHandlerProps } from './types';\n\nexport const MosaicShallow: FC<ContentfulTypedSysProps<'Mosaic'>> = props => {\n  const { data } = useContentfulQuery<MosaicDataHandlerProps, ContentfulIdVariable>(query.all, {\n    variables: { id: props.sys.id },\n  });\n\n  if (!data?.mosaic) return null;\n  return <Mosaic {...data.mosaic} __typename=\"Mosaic\" />;\n};\nMosaicShallow.displayName = 'Mosaic';\n", "import { documentToPlainTextString } from '@contentful/rich-text-plain-text-renderer';\nimport type { Block, Inline } from '@contentful/rich-text-types';\nimport { Brand, SitesToBrands } from '@snapchat/mw-common';\nimport { useContentfulImages } from '@snapchat/mw-contentful-client';\nimport { CarouselCardItem, CarouselV3 } from '@snapchat/snap-design-system-marketing';\nimport { type FC, useContext } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport { Config } from '../../config';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport { useFormatDate } from '../../hooks/useFormatDate';\nimport { useParseMediaContainer } from '../../hooks/useParseMediaContainer';\nimport type { ContentfulSysProps } from '../../types/contentful';\nimport { combineImageSources } from '../../utils/combineImageSources';\nimport { SlugContext } from '../Slug/SlugContext';\nimport { type TileQueryResponse, tileCollectionAndRelatedContentQuery } from './query';\nimport { useRelatedContent } from './useRelatedContent';\n\n// Limit the number of tiles displayed in the Related Content section\nconst tilesLimit = 10;\n\nconst defaultDateOptions: Intl.DateTimeFormatOptions = {\n  day: '2-digit',\n  month: '2-digit',\n  year: '2-digit',\n  timeZone: 'UTC',\n};\n\nexport const RelatedContent: FC<ContentfulSysProps> = props => {\n  const { topics, slugId = '' } = useContext(SlugContext);\n  const { getImageSources } = useContentfulImages();\n  const { isRTL } = useContext(AppContext);\n  const { formatDate } = useFormatDate();\n\n  const topicsIds = topics?.map(topic => topic.topicId || '') ?? [];\n\n  const { paginationData, isLoading } = useRelatedContent({\n    page: 1,\n    pageSize: tilesLimit,\n    tags: topicsIds,\n  });\n\n  const { data: tilesData, loading: loadingTiles } = useContentfulQuery<\n    TileQueryResponse,\n    { ids: string[]; relatedContentId: string; slugId?: string }\n  >(tileCollectionAndRelatedContentQuery, {\n    variables: {\n      ids: paginationData?.tiles?.map(tile => tile?.tileSysId) ?? [],\n      relatedContentId: props.sys.id,\n      slugId, // TODO: Revisit and skip this if slugId is indexed on elastic Tiles\n    },\n  });\n\n  /*\n  This is a global fallback image to display on a tile when the user doesn't provide an image for the gallery or tile.\n  This image is in the global-components contentful space\n  */\n  const globalDefaultImage =\n    'https://images.ctfassets.net/kp51zybwznx4/120IJvdruE5HeC9XBYjFiU/879b8f63bde0d27c0750ade94c4b1a39/Default_Gallery_Image.png';\n\n  // this will always be a default image or undefined, so we can ignore video data\n  const {\n    media: { imageSource: defaultImageSource, imageAltText: defaultImageAltText },\n    mobileMedia: { imageSource: defaultMobileImageSource },\n  } = useParseMediaContainer(tilesData?.relatedContent?.defaultImage);\n\n  const tilesCount = tilesData?.tileCollection?.items.length || 0;\n\n  if (!isLoading && !loadingTiles && tilesCount > 0) {\n    return (\n      <CarouselV3 isRtl={isRTL}>\n        {tilesData?.tileCollection?.items.map(tile => {\n          const tileMediaType = tile.media?.media?.contentType;\n          const tileHasVideo = tileMediaType?.startsWith('video/');\n          const tileHasMedia = !!tileMediaType;\n\n          // only use the default image if the tile does not have media\n          const imgSrcs = combineImageSources({\n            desktop: getImageSources(\n              tileHasMedia ? tile.media?.media.url : defaultImageSource || globalDefaultImage\n            ),\n            mobile: getImageSources(\n              tileHasMedia ? tile.media?.mobileMedia?.url : defaultMobileImageSource\n            ),\n          });\n\n          const tileSlug = tile.slugReference?.slug || '';\n          const tileTitle = tile.title?.json ? tile.title.json : '';\n          const titleBody = tile.label?.json ? tile.label?.json : '';\n          const tileDate = tile.date\n            ? formatDate(tile.date, defaultDateOptions).replaceAll('/', '.')\n            : ''; // Result example: 09.09.25\n\n          return (\n            <CarouselCardItem\n              key={`${tile.__typename}-${tile.sys.id}`}\n              title={documentToPlainTextString(tileTitle as Block | Inline)}\n              body={documentToPlainTextString(titleBody as Block | Inline)}\n              date={tileDate}\n              brand={tile?.brand}\n              url={tileSlug ? `/${tileSlug}` : undefined}\n              imgSrcs={!tileHasVideo ? imgSrcs : undefined}\n              imgAltText={tile.media?.media?.description || defaultImageAltText}\n              videoSource={tileHasVideo ? tile.media?.media?.url : undefined}\n              mobileVideoSource={tileHasVideo ? tile.media?.mobileMedia?.url : undefined}\n              aspectRatio=\"9:16\" // This value is set by design\n              // Hide the link arrow for Snap-branded tiles\n              hideLinkArrow={SitesToBrands[Config.site]?.includes(Brand.SNAP)}\n              // CarouselCardItem relatedContent prop is used to apply the correct line clamp to the body text\n              relatedContent\n            />\n          );\n        })}\n      </CarouselV3>\n    );\n  }\n\n  return null;\n};\n", "import type { Topic } from '@snapchat/mw-contentful-schema';\nimport { createContext } from 'react';\n\nimport type { BreadcrumbsDataProps } from '../Breadcrumbs';\nimport type { ReplacementMap } from '../Experiment';\n\ninterface SlugContextProps {\n  isShareable: boolean;\n  publishedAt?: Date;\n  postedDate?: Date;\n  replacements?: ReplacementMap;\n  breadcrumbData?: BreadcrumbsDataProps;\n  topics?: Topic[];\n  slugId?: string;\n}\n\nexport const SlugContext = createContext<SlugContextProps>({\n  isShareable: false,\n});\n", "import { gql } from '@apollo/client';\n\nimport type { Items } from '../../types/Items';\nimport { type ImageDataProps, fragments as imageFragments } from '../Image';\nimport type { GalleryTileProps } from '../Tile/query';\nimport { fragments } from '../Tile/query';\n\n// =================================================================================================\n// Related Content Tiles Query\n// =================================================================================================\n\nexport const tileCollectionAndRelatedContentQuery = gql`\n  query TileAndRelatedContentQuery(\n    $preview: Boolean!\n    $locale: String!\n    $ids: [String]!\n    $relatedContentId: String!\n    $slugId: String\n  ) {\n    tileCollection(\n      preview: $preview\n      locale: $locale\n      where: { sys: { id_in: $ids }, slugReference: { sys: { id_not: $slugId } } }\n    ) {\n      total\n      items {\n        ...TileAll\n      }\n    }\n    relatedContent(preview: $preview, locale: $locale, id: $relatedContentId) {\n      defaultImage {\n        ...ImageAll\n      }\n    }\n  }\n  ${fragments.all}\n  ${imageFragments.all}\n`;\n\nexport type TileQueryResponse = {\n  tileCollection: Items<GalleryTileProps>;\n  relatedContent?: {\n    defaultImage?: ImageDataProps;\n  };\n};\n", "import { useAsyncData } from '@snapchat/async-data-browser';\nimport { BrowserFeaturesContext } from '@snapchat/snap-design-system-marketing';\nimport { useContext, useMemo, useRef } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport { Config } from '../../config';\nimport { logger } from '../../helpers/logging';\nimport {\n  type GalleryTilesSortingType,\n  type PaginationDataProps,\n  defaultTileSorting,\n  defaultTilesPerPage,\n} from '../Gallery';\n\ntype RelatedContentData = {\n  paginationData: PaginationDataProps | undefined;\n  isLoading: boolean;\n};\n\ntype RelatedContentTilesProps = {\n  page: number;\n  pageSize?: number;\n  tags: string[];\n  sortBy?: GalleryTilesSortingType;\n};\n\n/**\n * Returns the data needed to render tiles by querying the related content API.\n *\n * @param page Page number to use in the query\n * @param tags List of values from Topics\n */\nexport function useRelatedContent({\n  page,\n  tags,\n  pageSize = defaultTilesPerPage,\n  sortBy = defaultTileSorting,\n}: RelatedContentTilesProps): RelatedContentData {\n  const appContext = useContext(AppContext);\n  const browserFeatures = useContext(BrowserFeaturesContext);\n  const previousTotal = useRef(0);\n\n  const params = useMemo(() => {\n    const params = new URLSearchParams();\n\n    params.append('pageSize', `${pageSize}`);\n    params.append('sortBy', sortBy);\n\n    if (tags.length) {\n      params.append('tags', tags.join(','));\n    }\n\n    params.append('page', `${page - 1}`);\n\n    if (appContext.currentLocale) {\n      params.append('locale', appContext.currentLocale);\n    }\n\n    if (appContext.userLocation.country) {\n      params.append('country', appContext.userLocation.country);\n    }\n\n    const platform = browserFeatures.getLowEntropyHints().platform;\n\n    if (platform) {\n      params.append('platform', platform);\n    }\n\n    const device = browserFeatures.getLowEntropyHints().isMobile ? 'Mobile' : 'Non-Mobile';\n\n    if (device) {\n      params.append('device', device);\n    }\n\n    return params;\n  }, [\n    tags,\n    page,\n    pageSize,\n    appContext.currentLocale,\n    appContext.userLocation.country,\n    browserFeatures,\n    sortBy,\n  ]);\n\n  const host = Config.isClient ? '' : `http://localhost:${process.env.PORT ?? 3000}`;\n  const url = `${host}/api/related-content?${params}`;\n\n  const { data, isLoading } = useAsyncData({\n    dataId: `/api/related-content?${params}`,\n    dataAsync: async () => {\n      try {\n        const response = await fetch(url);\n        const data = await response.json();\n        return data;\n      } catch (error) {\n        logger.logError({\n          component: 'UseRelatedContent',\n          message: 'Error loading related content tiles',\n          error,\n        });\n      }\n    },\n  });\n\n  if (data?.total) {\n    previousTotal.current = data?.total;\n  }\n\n  return {\n    paginationData: isLoading ? { tiles: [], total: previousTotal.current } : data,\n    isLoading,\n  };\n}\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\n\nexport const fragments = {\n  all: gql`\n    fragment TabsAll on Tabs {\n      ...ContentfulSysId\n      itemsCollection(limit: 10) {\n        items {\n          ...ContentfulSysId\n          title\n          contentsCollection(limit: 10) {\n            items {\n              ...ContentfulSysId\n            }\n          }\n          maxColumns\n        }\n      }\n    }\n    ${contentfulSysIdFragment}\n  `,\n};\n\nexport const queries = {\n  shallow: gql`\n    query TabsShallowQuery($preview: Boolean!, $locale: String!, $id: String!) {\n      tabs(preview: $preview, locale: $locale, id: $id) {\n        ...ContentfulSysId\n      }\n    }\n    ${contentfulSysIdFragment}\n  `,\n  all: gql`\n    query TabsQuery($preview: Boolean!, $locale: String!, $id: String!) {\n      tabs(preview: $preview, locale: $locale, id: $id) {\n        ...TabsAll\n      }\n    }\n    ${fragments.all}\n  `,\n};\n", "import {\n  type TabsNavigationItemProps,\n  Tabs as TabsSDS,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logUserEvent } from '../../helpers/logging';\nimport type { ContentfulIdVariable } from '../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport type { ContentfulSysProps } from '../../types/contentful';\nimport { UserAction } from '../../types/events';\nimport { ContentShallow } from '../Content/ContentShallow';\nimport { FormShallow } from '../Form';\nimport { queries } from './queries';\nimport type { TabsDataHandlerProps } from './types';\n\nexport const Tabs: FC<ContentfulSysProps> = props => {\n  const { data } = useContentfulQuery<TabsDataHandlerProps, ContentfulIdVariable>(queries.all, {\n    variables: { id: props.sys.id },\n  });\n\n  const elementLocation = useContext(ElementLocation).elementLocation;\n\n  if (!data || !data.tabs) return null;\n\n  const { itemsCollection } = data.tabs;\n\n  const onSelectTab = (index: number) => {\n    logUserEvent({\n      eventAction: UserAction.Click,\n      eventCategory: 'Tab',\n      eventLabel: `tab:${index}`,\n      context: {\n        elementLocation,\n        elementText: itemsCollection?.items[index]?.title,\n      },\n    });\n  };\n\n  const items = itemsCollection.items.map(item => {\n    const content = item.contentsCollection\n      ? item.contentsCollection.items.map(contentDataProps => {\n          const key = contentDataProps.sys.id;\n\n          if (contentDataProps.__typename === 'Form') {\n            return <FormShallow key={key} {...contentDataProps} />;\n          }\n\n          return <ContentShallow key={key} {...contentDataProps} />;\n        })\n      : [];\n\n    const output: TabsNavigationItemProps = {\n      text: item.title,\n      content,\n      maxColumns: item.maxColumns,\n    };\n\n    return output;\n  });\n\n  return <TabsSDS items={items} onSelectTab={onSelectTab} />;\n};\n\nTabs.displayName = 'Tabs';\n", "import { lazyComponent } from '@snapchat/mw-common/client';\nimport { getRawData } from '@snapchat/mw-contentful-schema';\nimport { ChartSkeleton } from '@snapchat/snap-design-system-marketing';\nimport { type FC, useContext } from 'react';\n\nimport { AppContext } from '../../../AppContext';\nimport { SuspenseWrapper } from '../../SuspenseWrapper';\nimport type { BarChartRenderProps } from './types';\n\nconst LazyBarChart = lazyComponent(() =>\n  import('./LazyBarChart').then(module => ({ default: module.BarChart }))\n);\n\nexport const BarChart: FC<BarChartRenderProps> = props => {\n  const {\n    chartData,\n    yAxis,\n    xAxes,\n    stackKey,\n    filters,\n    width,\n    height,\n    hideXAxisLabels,\n    hideYAxisLabels,\n    hideXPercentLabels,\n    hideLegend,\n    chartTitle,\n    dataColors,\n    showAsPercent,\n    numberOfDecimalPlaces,\n  } = props;\n\n  const { isRTL } = useContext(AppContext);\n\n  if (!chartData) return null;\n\n  const rawData = getRawData(chartData);\n\n  return (\n    <SuspenseWrapper fallbackElement={<ChartSkeleton />}>\n      <LazyBarChart\n        chartTitle={chartTitle}\n        width={width}\n        height={height ?? 0}\n        yAxis={yAxis}\n        xAxes={xAxes}\n        stackKey={stackKey}\n        filters={filters}\n        hideXAxisLabels={hideXAxisLabels}\n        hideYAxisLabels={hideYAxisLabels}\n        hideXPercentLabels={hideXPercentLabels}\n        showAsPercent={showAsPercent ?? true}\n        numberOfDecimalPlaces={numberOfDecimalPlaces ?? 1}\n        hideLegend={hideLegend ?? true}\n        // Cast because rawData can have `Date` but bar chart doesn't support it...\n        data={rawData as unknown as Record<string, string | number>[]}\n        dataColors={dataColors || ['#A05CCC', '#FEFC01', '#3EDB9A', '#3BB2F7']}\n        isRTL={isRTL}\n      />\n    </SuspenseWrapper>\n  );\n};\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\n\nexport const seriesFragment = gql`\n  fragment SeriesAll on Series {\n    ...ContentfulSysId\n    schema\n    headerNames\n    localizableProperties\n  }\n`;\n\nexport const chartDataFragment = gql`\n  fragment ChartDataAll on ChartData {\n    ...ContentfulSysId\n    seriesName {\n      ...SeriesAll\n    }\n    label\n    data\n    localizedData\n  }\n  ${contentfulSysIdFragment}\n  ${seriesFragment}\n`;\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../../utils/contentful/contentfulQuery';\nimport { chartDataFragment } from '../query';\n\nexport const fragments = {\n  all: gql`\n    fragment BarChartAll on BarChart {\n      ...ContentfulSysId\n      chartTitle\n      chartData {\n        ...ChartDataAll\n      }\n      yAxis\n      xAxes\n      stackKey\n      filters\n      width\n      height\n      hideXAxisLabels\n      hideYAxisLabels\n      hideXPercentLabels\n      showAsPercent\n      numberOfDecimalPlaces\n      hideLegend\n      dataColors\n    }\n    ${contentfulSysIdFragment}\n    ${chartDataFragment}\n  `,\n  withTitle: gql`\n    fragment BarChartWithTitle on BarChart {\n      ...ContentfulSysId\n      chartTitle\n    }\n    ${contentfulSysIdFragment}\n  `,\n};\n\nexport const queries = {\n  shallow: gql`\n    query barChartEntryQuery($preview: Boolean!, $locale: String!, $id: String!) {\n      barChart(preview: $preview, locale: $locale, id: $id) {\n        ...ContentfulSysId\n      }\n    }\n    ${contentfulSysIdFragment}\n  `,\n  all: gql`\n    query barChartEntryQuery($preview: Boolean!, $locale: String!, $id: String!) {\n      barChart(preview: $preview, locale: $locale, id: $id) {\n        ...BarChartAll\n      }\n    }\n    ${fragments.all}\n  `,\n};\n", "import { ChartSkeleton } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport type { ContentfulIdVariable } from '../../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../../hooks/useContentfulQuery';\nimport { isContentfulSysProps } from '../../../utils/contentful';\nimport { BarChart } from './BarChart';\nimport { queries } from './query';\nimport type { BarChartDataHandlerProps, BarChartProps } from './types';\n\nexport const BarChartShallow: FC<BarChartProps> = props => {\n  const id = isContentfulSysProps(props) ? props.sys.id : undefined;\n\n  const { data, loading } = useContentfulQuery<BarChartDataHandlerProps, ContentfulIdVariable>(\n    queries.all,\n    {\n      skip: !id,\n      variables: { id },\n    }\n  );\n\n  if (loading) return <ChartSkeleton />;\n  if (!data) return null;\n\n  // If chart data or x axes was passed directly to this bar chart, use those instead of whatever is on the\n  // visualization (this will be the case if this is a child of a Multi Visualization)\n  const chartData = props.chartDataOverride ?? data.barChart.chartData;\n  const xAxes = props.xAxesOverride ?? data.barChart.xAxes;\n\n  return <BarChart {...data.barChart} chartData={chartData} xAxes={xAxes} />;\n};\n", "import type { ChartToggleItemProps } from '@snapchat/snap-design-system-marketing';\nimport {\n  ChartToggle as ChartToggleSDS,\n  ChartToggleV2 as ChartToggleV2SDS,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { ElementLocation } from '../../../context/ElementLocationContext/ElementLocationContext';\nimport { logUserEvent } from '../../../helpers/logging';\nimport type { ContentfulIdVariable } from '../../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../../hooks/useContentfulQuery';\nimport type { ContentfulSysProps } from '../../../types/contentful';\nimport { UserAction } from '../../../types/events';\nimport { Feature, useFeatureFlags } from '../../FeatureFlags';\nimport { BarChartShallow } from '../BarChart';\nimport { GeoMapShallow } from '../GeoMap';\nimport { LineChartShallow } from '../LineChart';\nimport { TableShallow } from '../Table';\nimport type { ChartToggleItemDataProps } from './query';\nimport { chartToggleQuery } from './query';\nimport type { ChartToggleProps } from './types';\n\nexport const Chart: FC<ContentfulSysProps> = props => {\n  switch (props.__typename) {\n    case 'ChartToggle': {\n      return <ChartToggle {...props} />;\n    }\n\n    case 'BarChart': {\n      return <BarChartShallow {...props} />;\n    }\n\n    case 'LineChart': {\n      return <LineChartShallow {...props} />;\n    }\n\n    case 'GeoVisualization': {\n      return <GeoMapShallow {...props} />;\n    }\n\n    case 'TableVisualization': {\n      return <TableShallow {...props} />;\n    }\n\n    default: {\n      console.error(`\uD83D\uDCD9 Unknown chart type: ${props.__typename} with id: ${props.sys.id}`);\n      return <>\uD83D\uDCD9</>;\n    }\n  }\n};\nChart.displayName = 'Chart';\n\nexport const ChartToggle: FC<ContentfulSysProps> = props => {\n  const featureFlags = useFeatureFlags();\n  const useDropdowns = featureFlags[Feature.USE_CHART_DROPDOWN_TOGGLE] === 'true';\n\n  const { data, loading } = useContentfulQuery<ChartToggleProps, ContentfulIdVariable>(\n    chartToggleQuery,\n    {\n      variables: { id: props.sys.id },\n    }\n  );\n  const elementLocation = useContext(ElementLocation).elementLocation;\n\n  if (!data && !useDropdowns) return null;\n\n  const itemsProps = data?.chartToggle.itemsCollection.items.map(\n    ({ analytics, title, contentsCollection, sys: { id } }: ChartToggleItemDataProps) => {\n      const label = analytics?.label ?? id;\n      const onToggle = () =>\n        logUserEvent({\n          eventAction: UserAction.Open,\n          eventCategory: 'ChartToggle',\n          eventLabel: label,\n          context: { elementLocation },\n        });\n\n      return {\n        onToggle,\n        title,\n        content: contentsCollection.items.map(contents => (\n          <Chart key={contents.sys.id} {...contents} />\n        )),\n      } as ChartToggleItemProps;\n    }\n  );\n\n  if (useDropdowns) {\n    return (\n      <ChartToggleV2SDS\n        items={itemsProps ?? []}\n        label={data?.chartToggle.label ?? ''}\n        isLoading={loading}\n      />\n    );\n  }\n\n  return <ChartToggleSDS items={itemsProps ?? []} />;\n};\n\nChartToggle.displayName = 'ChartToggle';\n", "import { lazyComponent } from '@snapchat/mw-common/client';\nimport { getRawData } from '@snapchat/mw-contentful-schema';\nimport { ChartSkeleton } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext, useEffect, useState } from 'react';\n\nimport { AppContext } from '../../../AppContext';\nimport { logError } from '../../../helpers/logging';\nimport { customFetch } from '../../../utils/fetch/customFetch';\nimport { SuspenseWrapper } from '../../SuspenseWrapper';\nimport type { GeoMapRenderProps } from './types';\n\nconst LazyGeoMap = lazyComponent(async () =>\n  import('./LazyGeoMap.js').then(module => ({ default: module.GeoMap }))\n);\n\nconst topographyDataEndpoint =\n  'https://storage.googleapis.com/snap-design-system-marketing/world-topo.json';\n\nexport const GeoMap: FC<GeoMapRenderProps> = props => {\n  const { chartTitle, chartData, width, countryCodeKey, valueKey, dataScalingMethod } = props;\n\n  const [topographyData, setTopographyData] = useState<unknown | undefined>();\n  const { currentLocale } = useContext(AppContext);\n\n  // Underlying library requires external topography data\n  useEffect(() => {\n    async function fetchTopographyData() {\n      const res = await customFetch(topographyDataEndpoint);\n      const data = await res.json();\n      setTopographyData(data);\n    }\n\n    fetchTopographyData().catch(error =>\n      logError({\n        component: 'GeoVisualization',\n        error,\n      })\n    );\n  }, []);\n\n  if (!topographyData || !chartData || !valueKey) return null;\n\n  const rawData = getRawData(chartData);\n\n  return (\n    <SuspenseWrapper fallbackElement={<ChartSkeleton />}>\n      <LazyGeoMap\n        width={width}\n        data={rawData}\n        fieldMetadata={{\n          key: valueKey,\n          title: chartData.seriesName.headerNames?.[valueKey] ?? valueKey,\n        }}\n        countryFieldKey={countryCodeKey}\n        chartTitle={chartTitle}\n        topoData={topographyData}\n        locale={currentLocale}\n        scaleMode={dataScalingMethod}\n      />\n    </SuspenseWrapper>\n  );\n};\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../../utils/contentful/contentfulQuery';\nimport { chartDataFragment } from '../query';\n\nexport const fragments = {\n  all: gql`\n    fragment GeoMapAll on GeoVisualization {\n      ...ContentfulSysId\n      chartTitle\n      chartData {\n        ...ChartDataAll\n      }\n      dataScalingMethod\n      countryCodeKey\n      valueKey\n    }\n    ${contentfulSysIdFragment}\n    ${chartDataFragment}\n  `,\n  subset: gql`\n    fragment GeoMapSubset on GeoVisualization {\n      ...ContentfulSysId\n      countrySelectorFields\n    }\n    ${contentfulSysIdFragment}\n  `,\n  withTitle: gql`\n    fragment GeoMapWithTitle on GeoVisualization {\n      ...ContentfulSysId\n      chartTitle\n    }\n    ${contentfulSysIdFragment}\n  `,\n};\n\nexport const queries = {\n  shallow: gql`\n    query geoMapEntryQuery($preview: Boolean!, $locale: String!, $id: String!) {\n      geoVisualization(preview: $preview, locale: $locale, id: $id) {\n        ...ContentfulSysId\n      }\n    }\n    ${contentfulSysIdFragment}\n  `,\n  all: gql`\n    query geoMapEntryQuery($preview: Boolean!, $locale: String!, $id: String!) {\n      geoVisualization(preview: $preview, locale: $locale, id: $id) {\n        ...GeoMapAll\n      }\n    }\n    ${fragments.all}\n  `,\n  subset: gql`\n    query geoMapEntryQuery($preview: Boolean!, $id: String!) {\n      geoVisualization(preview: $preview, id: $id) {\n        ...GeoMapSubset\n      }\n    }\n    ${fragments.subset}\n  `,\n};\n", "import { ChartSkeleton } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport type { ContentfulIdVariable } from '../../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../../hooks/useContentfulQuery';\nimport { isContentfulSysProps } from '../../../utils/contentful';\nimport { GeoMap } from './GeoMap';\nimport { queries } from './query';\nimport type { GeoMapDataHandlerProps, GeoMapProps } from './types';\n\nexport const GeoMapShallow: FC<GeoMapProps> = props => {\n  const id = isContentfulSysProps(props) ? props.sys.id : undefined;\n\n  const { data, loading } = useContentfulQuery<GeoMapDataHandlerProps, ContentfulIdVariable>(\n    queries.all,\n    {\n      skip: !id,\n      variables: { id },\n    }\n  );\n\n  if (loading) return <ChartSkeleton />;\n  if (!data) return null;\n\n  // If chart data or value key was passed directly to this chart, use those instead of whatever is on the\n  // visualization (this will be the case if this is a child of a Multi Visualization)\n  const chartData = props.chartDataOverride ?? data.geoVisualization.chartData;\n  const valueKey = props.valueKeyOverride ?? data.geoVisualization.valueKey;\n\n  return (\n    <GeoMap\n      {...data.geoVisualization}\n      width={props.width}\n      chartTitle={props.chartTitle}\n      chartData={chartData}\n      valueKey={valueKey}\n    />\n  );\n};\n", "import { lazyComponent } from '@snapchat/mw-common/client';\nimport type { ChartDataRow } from '@snapchat/mw-contentful-schema';\nimport { getRawData } from '@snapchat/mw-contentful-schema';\nimport {\n  type LineChartAccessors,\n  type ValueOf,\n  ChartSkeleton,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport { SuspenseWrapper } from '../../SuspenseWrapper';\nimport type { LineChartRenderProps } from './types';\n\nconst LazyLineChart = lazyComponent(() =>\n  import('./LazyLineChart').then(module => ({ default: module.LineChart }))\n);\n\n// Accessors will tell the chart how to draw the line given y axis key, x axis key, and row\nconst getAccessors = (yAxisKeys: string[], xAxisKey: string) => {\n  const accessors: LineChartAccessors<\n    ChartDataRow,\n    ValueOf<ChartDataRow>,\n    ValueOf<ChartDataRow>\n  > = { x: {}, y: {} };\n\n  for (const yKey of yAxisKeys) {\n    // X accessor will always look at the same specified column no matter what the y value is\n    accessors.x[yKey] = row => row[xAxisKey]!;\n    // Y accessor will look for the value of the column which matches the given y value\n    accessors.y[yKey] = row => row[yKey]!;\n  }\n\n  return accessors;\n};\n\nexport const LineChart: FC<LineChartRenderProps> = props => {\n  const { chartData, curve, xKey, yKeys, chartTitle } = props;\n\n  if (!chartData) return null;\n\n  const rawData = getRawData(chartData);\n\n  return (\n    <SuspenseWrapper fallbackElement={<ChartSkeleton />}>\n      <LazyLineChart\n        data={rawData}\n        accessors={getAccessors(yKeys, xKey)}\n        chartTitle={chartTitle}\n        curve={curve}\n        yKeys={yKeys}\n      />\n    </SuspenseWrapper>\n  );\n};\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../../utils/contentful/contentfulQuery';\nimport { chartDataFragment } from '../query';\n\nexport const fragments = {\n  all: gql`\n    fragment LineChartAll on LineChart {\n      ...ContentfulSysId\n      chartTitle\n      chartData {\n        ...ChartDataAll\n      }\n      xKey\n      yKeys\n      curve\n    }\n    ${contentfulSysIdFragment}\n    ${chartDataFragment}\n  `,\n  withTitle: gql`\n    fragment LineChartWithTitle on LineChart {\n      ...ContentfulSysId\n      chartTitle\n    }\n    ${contentfulSysIdFragment}\n  `,\n};\n\nexport const queries = {\n  shallow: gql`\n    query lineChartEntryQuery($preview: Boolean!, $locale: String!, $id: String!) {\n      lineChart(preview: $preview, locale: $locale, id: $id) {\n        ...ContentfulSysId\n      }\n    }\n    ${contentfulSysIdFragment}\n  `,\n  all: gql`\n    query lineChartEntryQuery($preview: Boolean!, $locale: String!, $id: String!) {\n      lineChart(preview: $preview, locale: $locale, id: $id) {\n        ...LineChartAll\n      }\n    }\n    ${fragments.all}\n  `,\n};\n", "import { ChartSkeleton } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport type { ContentfulIdVariable } from '../../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../../hooks/useContentfulQuery';\nimport { isContentfulSysProps } from '../../../utils/contentful';\nimport { LineChart } from './LineChart';\nimport { queries } from './query';\nimport type { LineChartDataHandlerProps, LineChartProps } from './types';\n\nexport const LineChartShallow: FC<LineChartProps> = props => {\n  const id = isContentfulSysProps(props) ? props.sys.id : undefined;\n\n  const { data, loading } = useContentfulQuery<LineChartDataHandlerProps, ContentfulIdVariable>(\n    queries.all,\n    {\n      skip: !id,\n      variables: { id },\n    }\n  );\n\n  if (loading) return <ChartSkeleton />;\n  if (!data) return null;\n\n  // If chart data or y keys were passed directly to this chart, use those instead of whatever is on the\n  // visualization (this will be the case if this is a child of a Multi Visualization).\n  const chartData = props.chartDataOverride ?? data.lineChart.chartData;\n  const yKeys = props.yKeysOverride ?? data.lineChart.yKeys;\n\n  return <LineChart {...data.lineChart} chartData={chartData} yKeys={yKeys} />;\n};\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../../utils/contentful/contentfulQuery';\nimport { chartDataFragment } from '../query';\n\nexport const fragments = {\n  all: gql`\n    fragment TableVisualizationAll on TableVisualization {\n      ...ContentfulSysId\n      chartTitle\n      chartData {\n        ...ChartDataAll\n      }\n      tableColumns\n      enableSearch\n      initialRowCount\n    }\n    ${contentfulSysIdFragment}\n    ${chartDataFragment}\n  `,\n  withTitle: gql`\n    fragment TableVisualizationWithTitle on TableVisualization {\n      ...ContentfulSysId\n      chartTitle\n    }\n    ${contentfulSysIdFragment}\n  `,\n};\n\nexport const queries = {\n  shallow: gql`\n    query tableVisualizationEntryQuery($preview: Boolean!, $locale: String!, $id: String!) {\n      tableVisualization(preview: $preview, locale: $locale, id: $id) {\n        ...ContentfulSysId\n      }\n    }\n    ${contentfulSysIdFragment}\n  `,\n  all: gql`\n    query tableVisualizationEntryQuery($preview: Boolean!, $locale: String!, $id: String!) {\n      tableVisualization(preview: $preview, locale: $locale, id: $id) {\n        ...TableVisualizationAll\n      }\n    }\n    ${fragments.all}\n  `,\n};\n", "import { DeploymentType } from '@snapchat/mw-common';\nimport { lazyComponent } from '@snapchat/mw-common/client';\nimport type { AdjustedSeries, ChartDataRow } from '@snapchat/mw-contentful-schema';\nimport { getRawData } from '@snapchat/mw-contentful-schema';\nimport { ChartSkeleton } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext, useState } from 'react';\n\nimport { AppContext } from '../../../AppContext';\nimport { Config } from '../../../config';\nimport { logger } from '../../../helpers/logging';\nimport { SuspenseWrapper } from '../../SuspenseWrapper';\nimport { JSONTypes } from '../types';\nimport type { TableVisualizationRenderProps } from './types';\n\nconst dataFormatDate = 'date';\n\nconst LazyTableVisualization = lazyComponent(() =>\n  import('./LazyTable').then(module => ({ default: module.Table }))\n);\n\nconst getRowDataForKey = (\n  series: AdjustedSeries,\n  row: ChartDataRow,\n  key: string,\n  locale: string\n) => {\n  const properties = series.schema.items.properties;\n\n  if (!properties) {\n    throw new Error('Series schema is malformed!');\n  }\n\n  const data = row[key];\n  const dataType = properties[key]!.type;\n  const dataFormat = properties[key]!.format;\n\n  // Numbers should be localized on the fly\n  if (dataType === JSONTypes.integer || dataType === JSONTypes.number) {\n    return (data as number).toLocaleString(locale);\n  }\n\n  // Dates should be localized on the fly\n  if (dataFormat === dataFormatDate) {\n    return (data as Date).toLocaleDateString(locale);\n  }\n\n  // Otherwise, data is a string and localization will have been\n  // handled by Contentful\n  return data as string;\n};\n\nconst getColumns = (columns: string[], series: AdjustedSeries, locale: string) => {\n  // We rely on Table Columns to determine the display order of headers;\n  // therefore, we must validate that the provided table columns match our schema\n  // Step 1: Number of keys should match number of columns\n  const properties = series.schema.items.properties!;\n  const propertyKeys = Object.keys(properties);\n\n  if (propertyKeys.length !== columns?.length) {\n    throw new Error(\n      'The number of table columns must equal the number of properties on the schema!'\n    );\n  }\n\n  // Step 2: Each key should exist in provided table columns\n  const allKeysExist = propertyKeys.every(key => columns.includes(key));\n\n  if (!allKeysExist) {\n    throw new Error('Table columns and schema properties do not match!');\n  }\n\n  return columns.map(column => {\n    // Try to use the (localizable) \"Header Names\" field for our column headers.\n    // If that field is not available (maybe a user manually edited the\n    // schema after uploading data) then fallback to the key name\n    let headerName = column;\n\n    if (series.headerNames?.[column]) {\n      headerName = series.headerNames[column]!;\n    }\n\n    return {\n      Header: headerName,\n      accessor: (row: object) => getRowDataForKey(series, row as ChartDataRow, column, locale),\n    };\n  });\n};\n\nexport const Table: FC<TableVisualizationRenderProps> = props => {\n  const { chartData, tableColumns, enableSearch, initialRowCount } = props;\n  const { currentLocale } = useContext(AppContext);\n\n  const [error, setError] = useState<Error>();\n\n  if (!chartData) return null;\n\n  let rawData;\n  let columns;\n\n  try {\n    rawData = getRawData(chartData);\n    columns = getColumns(tableColumns, chartData.seriesName, currentLocale);\n  } catch (err) {\n    if (!error) {\n      setError(err as Error);\n\n      logger.logError({\n        component: 'Table',\n        error: err,\n      });\n    }\n  }\n\n  if (error && Config.deploymentType !== DeploymentType.PRODUCTION) {\n    return (\n      <section>\n        <h5>Table Visualization Error</h5>\n        <p>{`Error: ${error.message}`}</p>\n        <p>{`Entry id: ${props.id}`}</p>\n      </section>\n    );\n  }\n\n  return (\n    <SuspenseWrapper fallbackElement={<ChartSkeleton />}>\n      <LazyTableVisualization\n        data={rawData}\n        columns={columns}\n        searchable={enableSearch}\n        initialRowCount={initialRowCount}\n      />\n    </SuspenseWrapper>\n  );\n};\n", "import { ChartSkeleton } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport type { ContentfulIdVariable } from '../../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../../hooks/useContentfulQuery';\nimport { isContentfulSysProps } from '../../../utils/contentful';\nimport { queries } from './query';\nimport { Table } from './Table';\nimport type { TableVisualizationDataHandlerProps, TableVisualizationProps } from './types';\n\nexport const TableShallow: FC<TableVisualizationProps> = props => {\n  const id = isContentfulSysProps(props) ? props.sys.id : undefined;\n\n  const { data, loading } = useContentfulQuery<\n    TableVisualizationDataHandlerProps,\n    ContentfulIdVariable\n  >(queries.all, {\n    skip: !id,\n    variables: { id },\n  });\n\n  if (loading) return <ChartSkeleton />;\n  if (!data) return null;\n\n  // If chart data was passed directly to this chart, use that instead of whatever is on the\n  // visualization (this will be the case if this is a child of a Multi Visualization)\n  const chartData = props.chartDataOverride ?? data.tableVisualization.chartData;\n\n  return <Table {...data.tableVisualization} chartData={chartData} id={id} />;\n};\n", "import { gql } from '@apollo/client';\n\nimport type { ContentfulSysProps } from '../../../types/contentful';\nimport type { Items } from '../../../types/Items';\nimport { contentfulSysIdFragment } from '../../../utils/contentful/contentfulQuery';\nimport { fragments as analyticsFragments } from '../../Analytics/query';\nimport type { AnalyticsDataProps } from '../../Analytics/types';\nimport type { ContentDataProps } from '../../Content';\n\nexport const ChartToggleSize = {\n  Large: 'Large',\n  Small: 'Small',\n} as const;\n\nexport interface ChartToggleDataHandlerProps {\n  chartToggle: ChartToggleDataProps;\n}\n\nexport interface ChartToggleItemDataProps extends ContentfulSysProps {\n  analytics?: AnalyticsDataProps;\n  title: string;\n  contentsCollection: Items<ContentDataProps>;\n}\n\nexport interface ChartToggleDataProps extends ContentfulSysProps {\n  hasLinks: boolean;\n  itemsCollection: Items<ChartToggleItemDataProps>;\n  label: string;\n}\n\nexport const chartToggleQuery = gql`\n  query ChartToggleQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    chartToggle(preview: $preview, locale: $locale, id: $id) {\n      ...ContentfulSysId\n      label\n      itemsCollection(limit: 10) {\n        items {\n          ...ContentfulSysId\n          analytics {\n            ...AnalyticsAll\n          }\n          title\n          contentsCollection(limit: 10) {\n            items {\n              ... on Entry {\n                ...ContentfulSysId\n              }\n            }\n            total\n          }\n        }\n      }\n    }\n  }\n  ${contentfulSysIdFragment}\n  ${analyticsFragments.all}\n`;\n", "import { ChartToggleWrapper as ChartToggleWrapperSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport type { ContentfulSysProps } from '../../../types/contentful';\nimport { Feature, useFeatureFlags } from '../../FeatureFlags';\nimport { ChartToggle } from './ChartToggle';\n\nexport const ChartToggleWrapper: FC<ContentfulSysProps> = props => {\n  const featureFlags = useFeatureFlags();\n  const useDropdowns = featureFlags[Feature.USE_CHART_DROPDOWN_TOGGLE] === 'true';\n\n  if (useDropdowns) {\n    return (\n      <ChartToggleWrapperSDS>\n        <ChartToggle {...props} />\n      </ChartToggleWrapperSDS>\n    );\n  }\n\n  return <ChartToggle {...props} />;\n};\n\nChartToggleWrapper.displayName = 'ChartToggleWrapper';\n", "import { lazyComponent } from '@snapchat/mw-common/client';\nimport type { AdjustedChartData, AdjustedSeries } from '@snapchat/mw-contentful-schema';\nimport type {\n  ChartMetadata,\n  FieldMetadata,\n  VisualizationMeta,\n} from '@snapchat/snap-design-system-marketing';\nimport { VisualizationKey } from '@snapchat/snap-design-system-marketing';\nimport type { FC, ReactNode } from 'react';\nimport { useContext, useState } from 'react';\n\nimport type { ContentfulIdVariable } from '../../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../../hooks/useContentfulQuery';\nimport { isContentfulSysProps } from '../../../utils/contentful';\nimport { ContentfulContext } from '../../../utils/contentful/ContentfulContext';\nimport { SuspenseWrapper } from '../../SuspenseWrapper';\nimport { BarChartShallow } from '../BarChart';\nimport { GeoMapShallow } from '../GeoMap';\nimport { LineChartShallow } from '../LineChart';\nimport { TableShallow } from '../Table';\nimport { queries } from './query';\nimport type {\n  MultiVisualizationDataHandlerProps,\n  MultiVisualizationProps,\n  MultiVisualizationRenderProps,\n  ShallowVisualization,\n} from './types';\n\nconst LazyMultiVisualization = lazyComponent(() =>\n  import('./LazyMultiviz').then(module => ({ default: module.MultiVisualization }))\n);\n\nconst generateChartMeta = (chartData: AdjustedChartData) => ({\n  id: chartData.sys.id,\n  label: chartData.label ?? '',\n});\n\nconst generateVisualizationMeta = (visualization: ShallowVisualization): VisualizationMeta => ({\n  id: visualization.sys.id,\n  title: visualization.chartTitle,\n  key: visualization.__typename as VisualizationKey,\n});\n\nconst getProcessedChartData = (\n  chartDataItems: AdjustedChartData[],\n  series: AdjustedSeries\n): AdjustedChartData[] => {\n  const filteredChartData = chartDataItems.filter(\n    chartData => chartData.seriesName.sys.id === series.sys.id\n  );\n\n  let unnamedChartDataCount = 0;\n  return filteredChartData.map((chartData: AdjustedChartData) => {\n    if (!chartData.label) {\n      unnamedChartDataCount++;\n      return { ...chartData, label: `Unnamed Data ${unnamedChartDataCount}` };\n    }\n\n    return { ...chartData, label: chartData.label };\n  });\n};\n\nconst MultiVisualization: FC<MultiVisualizationRenderProps> = ({\n  chartTitle,\n  seriesName,\n  chartDataCollection,\n  visualizationsCollection,\n  selectableFields,\n}) => {\n  const { locale } = useContext(ContentfulContext);\n\n  // getProcessedChartData will filter out any chart data that does not share series given to the Multi Visualization.\n  // It will also add placeholder labels to chart data entries that don't have them (as those labels)\n  // are needed to populate the data selector)\n  const chartDataItems = getProcessedChartData(chartDataCollection.items, seriesName);\n\n  const visualizationMetadataItems: VisualizationMeta[] =\n    visualizationsCollection.items.map(generateVisualizationMeta);\n\n  const chartMetadataItems: ChartMetadata[] = chartDataItems.map(generateChartMeta);\n\n  const fieldMetadataItems: FieldMetadata[] | undefined = selectableFields?.map(field => ({\n    key: field,\n    // Fallback on key as title in case somehow headerNames was not populated in the Series\n    title: seriesName?.headerNames?.[field] ?? field,\n  }));\n\n  // State\n\n  const [selectedChartData, setSelectedChartData] = useState<AdjustedChartData | undefined>(\n    chartDataItems[0]\n  );\n\n  const [selectedVisualization, setSelectedVisualization] = useState<\n    ShallowVisualization | undefined\n  >(visualizationsCollection.items[0]);\n\n  const [selectedField, setSelectedField] = useState<string | undefined>(\n    selectableFields?.[0] ?? undefined\n  );\n\n  // Callbacks\n\n  const onChartDataSelected = (item: ChartMetadata) =>\n    setSelectedChartData(chartDataItems.find(chartData => chartData.sys.id === item.id));\n\n  const onVisualizationSelected = (item: VisualizationMeta) =>\n    setSelectedVisualization(visualizationsCollection.items.find(viz => viz.sys.id === item.id));\n\n  const renderVisualization = (visualization: VisualizationMeta): ReactNode => {\n    if (!selectedVisualization || !selectedChartData) return null;\n\n    // Renderer will return a visualization with a few adjustments...\n    //\n    // 1) Override chart data (normally chart data is attached to Visualization itself)\n    // 2) Override the \"visualized field\" if a field has been selected in Mutli Visualization (i.e. for Bar Chart, we override xAxes)\n\n    switch (visualization.key) {\n      case VisualizationKey.TABLE:\n        return <TableShallow {...selectedVisualization} chartDataOverride={selectedChartData} />;\n      case VisualizationKey.BAR_CHART:\n        return (\n          <BarChartShallow\n            {...selectedVisualization}\n            chartDataOverride={selectedChartData}\n            xAxesOverride={selectedField ? [selectedField] : undefined}\n          />\n        );\n      case VisualizationKey.LINE_CHART:\n        return (\n          <LineChartShallow\n            {...selectedVisualization}\n            chartDataOverride={selectedChartData}\n            yKeysOverride={selectedField ? [selectedField] : undefined}\n          />\n        );\n      case VisualizationKey.GEO_MAP:\n        return (\n          <GeoMapShallow\n            {...selectedVisualization}\n            chartDataOverride={selectedChartData}\n            valueKeyOverride={selectedField}\n          />\n        );\n      default:\n        return null;\n    }\n  };\n\n  // Validation should prevent a scenario where there is no selected visualization or chart data,\n  // but just in case, we'll gracefully fail here if we lack one or the other\n  if (!selectedChartData || !selectedVisualization) return null;\n\n  return (\n    <SuspenseWrapper>\n      <LazyMultiVisualization\n        chartMetadataItems={chartMetadataItems}\n        selectedChartMetadata={generateChartMeta(selectedChartData)}\n        visualizationMetadataItems={visualizationMetadataItems}\n        selectedVisualizationMetadata={generateVisualizationMeta(selectedVisualization)}\n        visualizationTitle={chartTitle}\n        fieldMetadataItems={fieldMetadataItems}\n        locale={locale}\n        onDataSelected={onChartDataSelected}\n        onVisualizationSelected={onVisualizationSelected}\n        onFieldSelected={(field: FieldMetadata) => setSelectedField(field.key)}\n        renderVisualization={renderVisualization}\n      />\n    </SuspenseWrapper>\n  );\n};\n\nexport const MultiVisualizationShallow: FC<MultiVisualizationProps> = props => {\n  const id = isContentfulSysProps(props) ? props.sys.id : undefined;\n  const { data } = useContentfulQuery<MultiVisualizationDataHandlerProps, ContentfulIdVariable>(\n    queries.all,\n    {\n      skip: !id,\n      variables: { id },\n    }\n  );\n\n  if (!data) return null;\n\n  return <MultiVisualization {...data.visualizationSelector} />;\n};\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../../utils/contentful/contentfulQuery';\nimport { fragments as barChartFragments } from '../BarChart/query';\nimport { fragments as geoMapFragments } from '../GeoMap/query';\nimport { fragments as lineChartFragments } from '../LineChart/query';\nimport { chartDataFragment, seriesFragment } from '../query';\nimport { fragments as tableFragments } from '../Table/query';\n\nexport const fragments = {\n  all: gql`\n    fragment VisualizationSelectorAll on VisualizationSelector {\n      ...ContentfulSysId\n      chartTitle\n      visualizationsCollection {\n        items {\n          ... on BarChart {\n            ...BarChartWithTitle\n          }\n          ... on LineChart {\n            ...LineChartWithTitle\n          }\n          ... on GeoVisualization {\n            ...GeoMapWithTitle\n          }\n          ... on TableVisualization {\n            ...TableVisualizationWithTitle\n          }\n        }\n      }\n      seriesName {\n        ...SeriesAll\n      }\n      chartDataCollection {\n        items {\n          ...ChartDataAll\n        }\n      }\n      selectableFields\n    }\n    ${barChartFragments.withTitle}\n    ${lineChartFragments.withTitle}\n    ${geoMapFragments.withTitle}\n    ${tableFragments.withTitle}\n    ${seriesFragment}\n    ${chartDataFragment}\n    ${contentfulSysIdFragment}\n  `,\n};\n\nexport const queries = {\n  shallow: gql`\n    query visualizationSelectorEntryQuery($preview: Boolean!, $locale: String!, $id: String!) {\n      visualizationSelector(preview: $preview, locale: $locale, id: $id) {\n        ...ContentfulSysId\n      }\n    }\n    ${contentfulSysIdFragment}\n  `,\n  all: gql`\n    query visualizationSelectorEntryQuery($preview: Boolean!, $locale: String!, $id: String!) {\n      visualizationSelector(preview: $preview, locale: $locale, id: $id) {\n        ...VisualizationSelectorAll\n      }\n    }\n    ${fragments.all}\n  `,\n};\n", "import {\n  BackgroundColor,\n  Block as BlockSDS,\n  TabItems as TabItemsSDS,\n} from '@snapchat/snap-design-system-marketing';\nimport { type FC, useCallback, useContext, useState } from 'react';\n\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logUserEvent } from '../../helpers/logging';\nimport { useMotifScheme } from '../../hooks/useMotifScheme';\nimport { UserAction } from '../../types/events';\nimport { renderRichTextMultiLineWithMarkings } from '../../utils/renderText/renderRichText';\nimport { MultiValuePropBlock } from '../MultiValuePropBlock';\nimport type { BlockTabsDataProps } from './types';\n\nexport const BlockTabs: FC<BlockTabsDataProps> = props => {\n  const {\n    title,\n    subtitle,\n    titleAlignment,\n    titleAlignmentMobile,\n    brandBackgroundColor,\n    backgroundColor = BackgroundColor.White,\n    fullHeight = false,\n    tabsCollection,\n    anchorId,\n  } = props;\n\n  const motifScheme = useMotifScheme(brandBackgroundColor);\n  const elementLocation = useContext(ElementLocation).elementLocation;\n  const [selectedTab, setSelectedTab] = useState(0);\n\n  // Merged onSelectTab into handleSelectTab to avoid an unstable inline function\n  // as a useCallback dependency. logUserEvent and setSelectedTab are omitted from\n  // deps because both are referentially stable across renders.\n  const handleSelectTab = useCallback(\n    (index: number) => {\n      const tabText = tabsCollection?.items?.[index]?.tabText;\n      setSelectedTab(index);\n\n      logUserEvent({\n        eventAction: UserAction.Click,\n        eventCategory: 'Block Tab',\n        eventLabel: `tab:${index}`,\n        context: {\n          elementLocation,\n          elementText: tabText,\n        },\n      });\n    },\n    [tabsCollection, elementLocation]\n  );\n\n  // Only MultiValuePropBlock is supported at the time\n  const tabItems = tabsCollection?.items\n    ? tabsCollection.items\n        .filter(blockTab => blockTab.block.__typename === 'MultiValuePropBlock')\n        .map((blockTab, index) => {\n          return {\n            text: blockTab.tabText,\n            content: [\n              <MultiValuePropBlock\n                key={blockTab.sys.id}\n                {...blockTab.block}\n                fullHeight={fullHeight}\n                autoplayCarousel={selectedTab === index ? blockTab.block.autoplayCarousel : false}\n                brandBackgroundColor={brandBackgroundColor}\n                backgroundColor={backgroundColor}\n                style={{\n                  display: selectedTab !== index ? 'none' : 'flex',\n                }}\n              />,\n            ],\n            maxColumns: 1,\n          };\n        })\n    : [];\n\n  return (\n    <>\n      <BlockSDS\n        motifScheme={motifScheme}\n        backgroundColor={backgroundColor}\n        title={renderRichTextMultiLineWithMarkings(title)}\n        subtitle={renderRichTextMultiLineWithMarkings(subtitle)}\n        titleAlignment={titleAlignment}\n        titleAlignmentMobile={titleAlignmentMobile}\n        anchorId={anchorId}\n      >\n        {tabItems.length >= 2 && (\n          <TabItemsSDS items={tabItems} selectTab={handleSelectTab} selectedTab={selectedTab} />\n        )}\n      </BlockSDS>\n      {tabItems.map(tabItem => tabItem.content)}\n    </>\n  );\n};\n", "import {\n  type ImageSources,\n  MultiValuePropBlock as MultiValuePropBlockSDS,\n} from '@snapchat/snap-design-system-marketing';\nimport { type FC, useContext } from 'react';\n\nimport { useContentfulImages } from '../../../../contentful-client/src';\nimport { AppContext } from '../../AppContext';\nimport { useMotifScheme } from '../../hooks/useMotifScheme';\nimport { combineImageSources } from '../../utils/combineImageSources';\nimport {\n  renderRichTextMultiLineWithMarkings,\n  renderRichTextWithElementsNoHeadings,\n} from '../../utils/renderText/renderRichText';\nimport { CallToAction } from '../CallToAction';\nimport { getImageSourceSettings } from '../Image';\nimport { ImageSubtopic } from './ImageSubtopic';\nimport { StatSubtopic } from './StatSubtopic';\nimport { TextSubtopic } from './TextSubtopic';\nimport type { MultiValuePropBlockProps } from './types';\n\n// Default Image height values for each available Aspect Ratio\nconst DefaultImageHeights = {\n  '3:2': 315,\n  '9:16': 656,\n  '1:1': 472,\n  '16:9': 265,\n};\n\nconst DefaultMobileImageHeights = {\n  '3:2': 180,\n  '9:16': 400,\n  '1:1': 271,\n  '16:9': 152,\n};\n\nexport const MultiValuePropBlock: FC<MultiValuePropBlockProps> = props => {\n  const { getImageSources } = useContentfulImages();\n  const { isRTL } = useContext(AppContext);\n\n  const {\n    anchor,\n    brandBackgroundColor,\n    backgroundColor,\n    title,\n    multiValuePropBlockSubtitle,\n    body,\n    subtopicsCollection,\n    callsToActionCollection,\n    mediaCollection,\n    desktopMediaAspectRatio,\n    mobileMediaAspectRatio,\n    mediaDirection,\n    autoplayCarousel,\n    fullHeight,\n    style,\n  } = props;\n\n  const motifScheme = useMotifScheme(brandBackgroundColor);\n\n  const callsToAction = callsToActionCollection?.items?.map(item => (\n    <CallToAction key={item.sys.id} {...item} />\n  ));\n\n  const mediaSources = mediaCollection?.items?.map(item => {\n    if (item.__typename === 'Image') {\n      const { desktopSettings, mobileSettings } = getImageSourceSettings({\n        desktopHeight: item.media?.height ?? 0,\n        mobileHeight: item.mobileMedia?.height ?? 0,\n        desktopDefaultHeight: DefaultImageHeights[desktopMediaAspectRatio],\n        mobileDefaultHeight: DefaultMobileImageHeights[mobileMediaAspectRatio],\n        enableHighDpi: item.enableHighDpi,\n        quality: item.quality,\n      });\n\n      return {\n        type: item.__typename,\n        altText: item.media.description,\n        sources: combineImageSources({\n          desktop: getImageSources(item.media.url, desktopSettings),\n          mobile: getImageSources(item.mobileMedia?.url, mobileSettings),\n        }),\n      };\n    }\n\n    if (item.__typename === 'Video') {\n      return {\n        type: item.__typename,\n        autoPlay: !!item.autoPlay,\n        videoSource: item.media.url,\n        mobileVideoSource: item?.mobileMedia?.url,\n        sourceType: item.media.contentType,\n      };\n    }\n\n    return;\n  });\n\n  const subtopics = subtopicsCollection.items;\n\n  let stickers;\n\n  if (mediaCollection?.items?.length === 1) {\n    const firstMediaItem = mediaCollection.items[0];\n\n    stickers = firstMediaItem?.stickersCollection?.items?.map(sticker => ({\n      imgSrcs: getImageSources(sticker?.asset?.url) as ImageSources,\n      position: sticker?.position,\n      rotation: sticker?.rotation,\n    }));\n  }\n\n  return (\n    <MultiValuePropBlockSDS\n      anchor={anchor}\n      motifScheme={motifScheme}\n      backgroundColor={backgroundColor}\n      title={renderRichTextMultiLineWithMarkings(title)}\n      subtitle={multiValuePropBlockSubtitle}\n      body={renderRichTextWithElementsNoHeadings(body)}\n      autoplayCarousel={autoplayCarousel}\n      callsToAction={callsToAction?.length ? callsToAction : undefined}\n      mediaSources={mediaSources}\n      desktopMediaAspectRatio={desktopMediaAspectRatio}\n      mobileMediaAspectRatio={mobileMediaAspectRatio}\n      mediaDirection={mediaDirection}\n      fullHeight={fullHeight}\n      style={style}\n      stickers={stickers}\n      isRtl={isRTL}\n    >\n      {subtopics.map(subtopic => {\n        if (subtopic.__typename === 'ImageSubtopic') {\n          return <ImageSubtopic key={subtopic.sys.id} {...subtopic} />;\n        }\n\n        if (subtopic.__typename === 'StatSubtopic') {\n          return <StatSubtopic key={subtopic.sys.id} {...subtopic} />;\n        }\n\n        if (subtopic.__typename === 'TextSubtopic') {\n          return <TextSubtopic key={subtopic.sys.id} {...subtopic} />;\n        }\n\n        return null;\n      })}\n    </MultiValuePropBlockSDS>\n  );\n};\n", "import type { ImageSubtopic as ImageSubtopicType } from '@snapchat/mw-contentful-schema';\nimport { ImageSubtopic as ImageSubtopicSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport { useContentfulImages } from '../../../../contentful-client/src';\nimport { combineImageSources } from '../../utils/combineImageSources';\nimport { type ImageQuality, getImageSourceSettings } from '../Image';\n\nexport const ImageSubtopic: FC<ImageSubtopicType> = props => {\n  const { getImageSources } = useContentfulImages();\n\n  const { title, image } = props;\n\n  const { desktopSettings, mobileSettings } = getImageSourceSettings({\n    desktopHeight: image?.media?.height ?? 0,\n    mobileHeight: image?.mobileMedia?.height ?? 0,\n    desktopDefaultHeight: 120,\n    mobileDefaultHeight: 120,\n    enableHighDpi: image?.enableHighDpi,\n    quality: image?.quality as ImageQuality | undefined,\n  });\n\n  const imgSrcs = combineImageSources({\n    desktop: getImageSources(image?.media?.url, desktopSettings),\n    mobile: getImageSources(image?.mobileMedia?.url, mobileSettings),\n  });\n\n  return <ImageSubtopicSDS title={title} imgSrcs={imgSrcs} />;\n};\n", "import type { StatSubtopic as StatSubtopicType } from '@snapchat/mw-contentful-schema';\nimport { StatSubtopic as StatSubtopicSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport type { RichText } from '../../types/RichText';\nimport { renderRichTextMultiLineWithMarkings } from '../../utils/renderText/renderRichText';\n\nexport const StatSubtopic: FC<StatSubtopicType> = ({ stat = '', subtitle }) => {\n  return (\n    <StatSubtopicSDS\n      stat={stat}\n      subtitle={renderRichTextMultiLineWithMarkings(subtitle as RichText)}\n    />\n  );\n};\n", "import type { TextSubtopic as TextSubtopicType } from '@snapchat/mw-contentful-schema';\nimport { TextSubtopic as TextSubtopicSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport { useContentfulImages } from '../../../../contentful-client/src';\nimport type { RichText } from '../../types/RichText';\nimport { combineImageSources } from '../../utils/combineImageSources';\nimport { renderRichTextMultiLineWithMarkings } from '../../utils/renderText/renderRichText';\n\nexport const TextSubtopic: FC<TextSubtopicType> = props => {\n  const { getImageSources } = useContentfulImages();\n\n  const { title = '', icon, body } = props;\n\n  let imgSrcs;\n\n  if (icon?.media) {\n    imgSrcs = combineImageSources({\n      desktop: getImageSources(icon?.media?.url),\n    });\n  }\n\n  return (\n    <TextSubtopicSDS\n      title={title}\n      body={renderRichTextMultiLineWithMarkings(body as RichText)}\n      imgSrcs={imgSrcs}\n      icon={icon?.icon}\n    />\n  );\n};\n", "import gql from 'graphql-tag';\n\nimport { fragments as imageFragments } from '../../components/Image';\nimport { fragments as videoFragments } from '../../components/Video';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { ctaFragment } from '../CallToAction';\n\nexport const textSubtopicFragment = gql`\n  fragment TextSubtopicAll on TextSubtopic {\n    ...ContentfulSysId\n    icon {\n      ...ContentfulSysId\n      icon\n      media {\n        ...AssetAll\n      }\n    }\n    title\n    body {\n      json\n    }\n  }\n`;\n\nexport const imageSubtopicFragment = gql`\n  fragment ImageSubtopicAll on ImageSubtopic {\n    ...ContentfulSysId\n    image {\n      ... on Image {\n        ...ImageAll\n      }\n    }\n    title\n  }\n`;\n\nexport const statSubtopicFragment = gql`\n  fragment StatSubtopicAll on StatSubtopic {\n    ...ContentfulSysId\n    stat\n    subtitle {\n      json\n    }\n  }\n`;\n\nexport const multiValuePropBlockFragment = gql`\n  fragment MultiValuePropBlockAll on MultiValuePropBlock {\n    ...ContentfulSysId\n    mediaCollection {\n      items {\n        ... on Video {\n          ...VideoAll\n        }\n        ... on Image {\n          ...ImageAll\n        }\n      }\n    }\n    anchor\n    desktopMediaAspectRatio\n    mobileMediaAspectRatio\n    mediaDirection\n    autoplayCarousel\n    title {\n      json\n    }\n    multiValuePropBlockSubtitle: subtitle\n    body {\n      json\n    }\n    subtopicsCollection {\n      items {\n        __typename\n        ... on ImageSubtopic {\n          ...ImageSubtopicAll\n        }\n        ... on StatSubtopic {\n          ...StatSubtopicAll\n        }\n        ... on TextSubtopic {\n          ...TextSubtopicAll\n        }\n      }\n    }\n    callsToActionCollection(limit: 2) {\n      items {\n        ... on CallToAction {\n          ...CallToActionAll\n        }\n      }\n    }\n    brandBackgroundColor\n    backgroundColor\n    fullHeight\n  }\n  ${contentfulSysIdFragment}\n  ${ctaFragment}\n  ${imageFragments.all}\n  ${videoFragments.all}\n  ${imageSubtopicFragment}\n  ${statSubtopicFragment}\n  ${textSubtopicFragment}\n`;\n\nexport const multiValuePropBlockQuery = gql`\n  query MultiValuePropBlockQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    multiValuePropBlock(preview: $preview, locale: $locale, id: $id) {\n      ...MultiValuePropBlockAll\n    }\n  }\n  ${multiValuePropBlockFragment}\n`;\n", "import gql from 'graphql-tag';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { multiValuePropBlockFragment } from '../MultiValuePropBlock/query';\n\nexport const blockTabsFragment = gql`\n  fragment BlockTabsAll on BlockTabs {\n    ...ContentfulSysId\n    tabsCollection {\n      items {\n        ...ContentfulSysId\n        tabText\n        block {\n          ... on MultiValuePropBlock {\n            ...MultiValuePropBlockAll\n          }\n        }\n      }\n    }\n    title {\n      json\n    }\n    subtitle {\n      json\n    }\n    titleAlignment\n    titleAlignmentMobile\n    brandBackgroundColor\n    backgroundColor\n    fullHeight\n    anchorId\n  }\n  ${contentfulSysIdFragment}\n  ${multiValuePropBlockFragment}\n`;\n\nexport const blockTabsQuery = gql`\n  query BlockTabs($preview: Boolean!, $locale: String!, $id: String!) {\n    blockTabs(preview: $preview, locale: $locale, id: $id) {\n      ...BlockTabsAll\n    }\n  }\n  ${blockTabsFragment}\n`;\n", "import { gql } from '@apollo/client';\nimport type {\n  BackgroundColor,\n  MotifScheme,\n  Template,\n} from '@snapchat/snap-design-system-marketing';\n\nimport type { ContentfulTypedSysProps } from '../../types/contentful';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { type ImageDataProps, fragments as imageFragments } from '../Image';\n\nexport const breakFragment = gql`\n  fragment BreakAll on Break {\n    ...ContentfulSysId\n    brandType\n    type\n    media {\n      ...ImageAll\n    }\n    brandTopColor\n    topColor\n    brandBottomColor\n    bottomColor\n    isOverlaid\n  }\n  ${imageFragments.all}\n  ${contentfulSysIdFragment}\n`;\n\nexport const breakQuery = gql`\n  query BreakQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    break(preview: $preview, locale: $locale, id: $id) {\n      ...BreakAll\n    }\n  }\n  ${breakFragment}\n`;\n\nexport type BreakType = Template | 'None';\n\nexport type BreakBackgroundColor = BackgroundColor | 'Transparent';\n\nexport type BreakBrandColor = MotifScheme | 'Transparent';\n\nexport interface BreakDataProps extends ContentfulTypedSysProps<'Break'> {\n  brandType?: BreakType;\n  type?: BreakType;\n  media?: ImageDataProps;\n  brandTopColor?: BreakBrandColor;\n  topColor?: BreakBackgroundColor;\n  brandBottomColor?: BreakBrandColor;\n  bottomColor?: BreakBackgroundColor;\n  isOverlaid?: boolean;\n}\n", "import { supportsAvif } from '@snapchat/client-hints';\nimport type { GetImageSources, SrcSetSizes } from '@snapchat/mw-contentful-client';\nimport {\n  getDprDataByHeight,\n  getSrcSetUrl,\n  useContentfulImages,\n} from '@snapchat/mw-contentful-client';\nimport type { BlockHero as BlockHeroType } from '@snapchat/mw-contentful-schema';\nimport { globalNavHighlightSizes } from '@snapchat/mw-global-components';\nimport type { ImageSources } from '@snapchat/snap-design-system-marketing';\nimport {\n  BackgroundMediaLayout,\n  BrowserFeaturesContext,\n  Hero as HeroSDS,\n  HeroSize,\n  MediaWithStickers as MediaWithStickersSDS,\n  SnapchatEmbed as SnapchatEmbedSDS,\n  Topic as TopicSDS,\n} from '@snapchat/snap-design-system-marketing';\nimport omit from 'lodash/omit.js';\nimport { isNullish } from 'radashi';\nimport type { FC } from 'react';\nimport { useContext, useRef } from 'react';\nimport { Helmet } from 'react-helmet-async';\n\nimport { Config } from '../../config';\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logUserEvent } from '../../helpers/logging';\nimport { useMotifScheme } from '../../hooks/useMotifScheme';\nimport { useParseMediaContainer } from '../../hooks/useParseMediaContainer';\nimport type { ContentfulSysProps } from '../../types/contentful';\nimport { UserAction } from '../../types/events';\nimport { combineImageSources } from '../../utils/combineImageSources';\nimport { getContentfulInspectorProps } from '../../utils/contentful/getContentfulInspectorProps';\nimport { parseMedia } from '../../utils/media';\nimport {\n  renderRichTextMultiLineWithMarkings,\n  renderRichTextWithElementsNoHeadings,\n} from '../../utils/renderText/renderRichText';\nimport { structureBreadcrumbs } from '../Breadcrumbs';\nimport { CallToAction } from '../CallToAction/CallToAction';\nimport { CarouselV3 } from '../CarouselV3';\nimport { getHeaderHeightFromCssVar } from '../Header/headerSizeUtils';\nimport type { ImageDataProps } from '../Image';\nimport { getImageSourceSettings, isImageDataProps } from '../Image';\nimport { SlugContext } from '../Slug/SlugContext';\nimport type { SnapchatEmbedDataProps } from '../SnapchatEmbed';\nimport { isVideoDataProps } from '../Video';\nimport { getHeroHeaderComponent } from './getHeroHeaderComponent';\nimport type { Foreground, HeroRenderProps } from './types';\nimport { isCarouselV3 } from './utils';\n\n// Header image is always 84px so we just handle the different DPRs.\nconst headerImgSrcSetSizes: SrcSetSizes = {\n  sizeToUrl: [84, 168, 252].map((width, i) => ({\n    size: `${i + 1}x`,\n    settings: { width },\n  })),\n  sizes: globalNavHighlightSizes,\n};\n\nconst getForegroundMedia = (\n  foreground: Foreground,\n  getImageSources: GetImageSources,\n  dataset?: DOMStringMap,\n  videoSource?: string,\n  posterSource?: string\n) => {\n  let foregroundMediaStickers;\n\n  // Only use stickers if foreground is an image or video, not for carousel\n  if (isVideoDataProps(foreground) || isImageDataProps(foreground)) {\n    foregroundMediaStickers = foreground?.stickersCollection?.items?.map(sticker => ({\n      imgSrcs: getImageSources(sticker?.asset?.url) as ImageSources,\n      position: sticker?.position,\n      rotation: sticker?.rotation,\n    }));\n  }\n\n  if (isVideoDataProps(foreground)) {\n    const mobileVideoSource = parseMedia(foreground.mobileMedia).videoSource;\n    return (\n      <MediaWithStickersSDS\n        mobileVideoSource={mobileVideoSource}\n        videoSource={videoSource}\n        posterSource={posterSource}\n        dataset={dataset}\n        stickers={foregroundMediaStickers}\n      />\n    );\n  }\n\n  if (isImageDataProps(foreground)) {\n    const { imageSource, imageAltText } = parseMedia(foreground.media);\n    const { imageSource: mobileImageSource } = parseMedia(foreground.mobileMedia);\n\n    const { desktopSettings, mobileSettings } = getImageSourceSettings({\n      desktopHeight: foreground.media?.height ?? 0,\n      mobileHeight: foreground.mobileMedia?.height ?? 0,\n      desktopDefaultHeight: 650,\n      mobileDefaultHeight: 650,\n      enableHighDpi: foreground.enableHighDpi,\n      quality: foreground.quality,\n    });\n\n    const imgSrcs = combineImageSources({\n      desktop: getImageSources(imageSource, desktopSettings),\n      mobile: getImageSources(mobileImageSource ?? imageSource, mobileSettings),\n    });\n\n    return (\n      <MediaWithStickersSDS\n        imgSrcs={imgSrcs}\n        altText={imageAltText}\n        dataset={dataset}\n        stickers={foregroundMediaStickers}\n      />\n    );\n  }\n\n  // TODO: Update CarouselV3 to handle datasets\n  if (isCarouselV3(foreground)) {\n    return <CarouselV3 {...foreground} />;\n  }\n\n  if ((foreground as ContentfulSysProps).__typename === 'SnapchatEmbed') {\n    return <SnapchatEmbedSDS {...(foreground as SnapchatEmbedDataProps)} dataset={dataset} />;\n  }\n\n  return undefined;\n};\n\nexport const Hero: FC<HeroRenderProps> = props => {\n  const {\n    eyebrow,\n    title,\n    subTitle,\n    body,\n    backgroundMediaLayout = BackgroundMediaLayout.FullScreen,\n    backgroundMediaV2,\n    callsToActionCollection,\n    isHeaderDate = false,\n    header,\n    headerMediaV2,\n    brandBackgroundColor,\n    backgroundColor,\n    theme,\n    textAlign,\n    textAlignMobile,\n    verticalTextAlign,\n    fitWindow = false,\n    curtainOpacityPercentage,\n    foreground,\n    mediaWrap,\n    className,\n    footer,\n    showMediaMobile,\n    anchorId,\n    sys,\n    postChildren,\n    size,\n    showScrollButton,\n    topics = [],\n    displayTopics,\n    increaseTitleFontSize,\n  } = props;\n\n  const motifScheme = useMotifScheme(brandBackgroundColor);\n\n  const browserFeatures = useContext(BrowserFeaturesContext);\n  const elementLocation = useContext(ElementLocation).elementLocation;\n  const { breadcrumbData } = useContext(SlugContext);\n\n  const breadcrumbs = structureBreadcrumbs(breadcrumbData);\n\n  const containerRef = useRef<HTMLElement>(null);\n\n  const { fallbackDate, shareable = false } = props;\n\n  // New background media\n  const {\n    media: {\n      imageSource: backgroundImageSource,\n      imageAltText: backgroundImageAltText,\n      videoSource: backgroundVideoSource,\n      imageSize: backgroundImageSize,\n    },\n    mobileMedia: {\n      imageSource: mobileBackgroundImageSource,\n      imageAltText: mobileBackgroundImageAltText,\n      videoSource: mobileBackgroundVideoSource,\n      imageSize: mobileBackgroundImageSize,\n    },\n    thumbnailSource: backgroundVideoThumbnailSource,\n  } = useParseMediaContainer(backgroundMediaV2);\n\n  // New header media\n  const headerMediaSource = (headerMediaV2 as ImageDataProps)?.media;\n  const { imageSource: headerImageSource, imageAltText: headerImageAltText } =\n    parseMedia(headerMediaSource);\n\n  // New header mobile media\n  const mobileHeaderMediaSource = (headerMediaV2 as ImageDataProps)?.mobileMedia;\n  const { imageSource: mobileHeaderImageSource } = parseMedia(mobileHeaderMediaSource);\n\n  const callsToAction = callsToActionCollection?.items?.map(item => (\n    <CallToAction key={item.sys.id} {...item} />\n  ));\n  const inspectorDataset = getContentfulInspectorProps<BlockHeroType>({\n    entryId: sys.id,\n    fieldIds: ['eyebrow', 'title', 'subTitle', 'body', 'header', 'foreground'],\n  });\n\n  const { getImageSources } = useContentfulImages();\n\n  // If foreground media is a video, we have to get the videoSource and pass it to `getForegroundMedia` because the videoSource\n  // has to come from the useParseMediaContainer hook (to support hls streaming) and hooks can only\n  // be called at the top level of a component (not in a helper function).\n  //\n  // TODO: Explore ways to refactor this so we can either get rid of the getForegroundMedia helper function or widen the\n  // scope of the useParseMediaContainer hook to handle all possible forms of foreground media.\n  const {\n    media: { videoSource: foregroundMediaVideoSource },\n    thumbnailSource: foregroundVideoThumbnailSource,\n  } = useParseMediaContainer(foreground && isVideoDataProps(foreground) ? foreground : undefined);\n\n  const foregroundMedia = foreground\n    ? getForegroundMedia(\n        foreground,\n        getImageSources,\n        inspectorDataset.foregroundDataset,\n        foregroundMediaVideoSource,\n        foregroundVideoThumbnailSource\n      )\n    : undefined;\n  const bg = isNullish(backgroundColor) ? undefined : backgroundColor;\n  const alternativeBackground = isNullish(theme) ? undefined : theme;\n\n  const HeroHeader = getHeroHeaderComponent({\n    header,\n    isExpectingDate: isHeaderDate,\n    fallbackDate,\n  });\n\n  const headerSettings = { size: headerImgSrcSetSizes };\n  const headerImgSrcs = combineImageSources({\n    desktop: getImageSources(headerImageSource, headerSettings),\n    mobile: getImageSources(mobileHeaderImageSource, headerSettings),\n  });\n\n  const bgImgDprData = getDprDataByHeight(800, backgroundImageSize?.height ?? 0);\n\n  let bgImgSrcs: ImageSources | undefined;\n\n  if (backgroundMediaV2?.__typename === 'Image') {\n    const { desktopSettings: bgDesktopSettings, mobileSettings: bgMobileSettings } =\n      getImageSourceSettings({\n        desktopHeight: backgroundImageSize?.height ?? 0,\n        mobileHeight: mobileBackgroundImageSize?.height ?? 0,\n        enableHighDpi: backgroundMediaV2.enableHighDpi,\n        quality: backgroundMediaV2.quality,\n      });\n\n    bgImgSrcs = combineImageSources({\n      desktop: getImageSources(backgroundImageSource, bgDesktopSettings),\n      mobile: getImageSources(mobileBackgroundImageSource, bgMobileSettings),\n    });\n  }\n\n  // Placeholder for 1x dpr avif src if exists\n  let baseAvifSrc:\n    | {\n        url: string;\n        // not defined when not using dpr src set\n        dpr?: number;\n      }\n    | undefined;\n\n  // Placeholder for high dpr avif src if exists\n  let additionalAvifSrcWithDpr:\n    | {\n        url: string;\n        dpr: number;\n      }\n    | undefined;\n\n  if (supportsAvif(browserFeatures.getLowEntropyHints()) && backgroundImageSource && bgImgSrcs) {\n    const avifSrc = bgImgSrcs.sources?.find(src => src.type === 'image/avif')?.url;\n\n    // if we have multiple DPRs being handled, generate the urls individually\n    if (bgImgDprData.additionalDpr) {\n      baseAvifSrc = {\n        url: getSrcSetUrl(backgroundImageSource, {\n          image: { format: 'avif', ...bgImgDprData.baseDprSettings },\n        }),\n        dpr: bgImgDprData.additionalDpr.dpr - 0.0001,\n      };\n\n      additionalAvifSrcWithDpr = {\n        url: getSrcSetUrl(backgroundImageSource, {\n          image: { ...bgImgDprData.additionalDpr.settings, format: 'avif' },\n        }),\n        dpr: bgImgDprData.additionalDpr.dpr,\n      };\n    } else if (avifSrc) {\n      baseAvifSrc = { url: avifSrc };\n    }\n  }\n\n  let heroSize: HeroSize = size ?? HeroSize.Regular;\n\n  if (foreground && isCarouselV3(foreground)) {\n    heroSize = HeroSize.Regular;\n  }\n\n  const handleScrollDownButtonClick = () => {\n    if (!containerRef.current) return;\n\n    logUserEvent({\n      eventCategory: 'Hero',\n      eventAction: UserAction.Click,\n      eventLabel: null,\n      context: { elementLocation },\n    });\n\n    const headerHeight = getHeaderHeightFromCssVar() ?? 0;\n\n    // Scroll to next block (end of this block)\n    const rect = containerRef.current.getBoundingClientRect();\n    const scrollPos = rect.bottom + window.scrollY - headerHeight;\n    window.scrollTo({ top: scrollPos, left: 0, behavior: 'smooth' });\n  };\n\n  const topicsToRender =\n    displayTopics &&\n    topics.map(topic => (\n      <TopicSDS key={topic.sys.id} displayText={topic.displayText || ''} url={topic.linksTo} />\n    ));\n\n  const backgroundMediaStickers = backgroundMediaV2?.stickersCollection?.items?.map(sticker => ({\n    imgSrcs: getImageSources(sticker?.asset?.url) as ImageSources,\n    position: sticker?.position,\n    rotation: sticker?.rotation,\n  }));\n\n  return (\n    <>\n      {/*\n        if SSR and we know for sure the browser supports avif, we will preload the hero bg img\n        unfortunately for macs, we can't know for sure if it supports avif.\n\n        We use the webkit prefixed media query because resolution is not as well supported\n        https://developer.mozilla.org/en-US/docs/Web/CSS/@media/-webkit-device-pixel-ratio\n      */}\n      {!Config.isClient && baseAvifSrc && (\n        <Helmet>\n          <link\n            rel=\"preload\"\n            href={baseAvifSrc.url}\n            as=\"image\"\n            // @ts-ignore this attribute is chrome only and doesn't exist on typings yet because its so new\n            // eslint-disable-next-line react/no-unknown-property\n            fetchpriority=\"high\"\n            // only add media if multiple dprs handled\n            media={\n              additionalAvifSrcWithDpr ? `(-webkit-max-device-pixel-ratio: ${baseAvifSrc.dpr})` : ''\n            }\n          />\n          {additionalAvifSrcWithDpr && (\n            <link\n              rel=\"preload\"\n              href={additionalAvifSrcWithDpr.url}\n              as=\"image\"\n              // @ts-ignore this attribute is chrome only and doesn't exist on typings yet because its so new\n              // eslint-disable-next-line react/no-unknown-property\n              fetchpriority=\"high\"\n              media={`(-webkit-min-device-pixel-ratio: ${additionalAvifSrcWithDpr.dpr})`}\n            />\n          )}\n        </Helmet>\n      )}\n      <HeroSDS\n        ref={containerRef}\n        eyebrow={eyebrow}\n        title={renderRichTextMultiLineWithMarkings(title)}\n        subTitle={renderRichTextWithElementsNoHeadings(subTitle)}\n        body={renderRichTextWithElementsNoHeadings(body)}\n        backgroundMediaLayout={backgroundMediaLayout}\n        backgroundVideoSource={backgroundVideoSource}\n        backgroundPosterSource={backgroundVideoThumbnailSource}\n        mobileBackgroundVideoSource={mobileBackgroundVideoSource}\n        callsToAction={callsToAction?.length ? callsToAction : undefined}\n        header={HeroHeader ? <HeroHeader /> : undefined}\n        foregroundMedia={foregroundMedia}\n        motifScheme={motifScheme}\n        backgroundColor={bg || alternativeBackground}\n        bgImgSrcs={bgImgSrcs}\n        bgImgAltText={backgroundImageAltText ?? mobileBackgroundImageAltText}\n        headerImgSrcs={headerImgSrcs}\n        headerImgAltText={headerImageAltText}\n        textAlign={textAlign}\n        textAlignMobile={textAlignMobile}\n        verticalTextAlign={verticalTextAlign}\n        fitWindow={isNullish(fitWindow) ? false : fitWindow}\n        curtainOpacityPercentage={curtainOpacityPercentage ?? undefined}\n        wrapMedia={mediaWrap}\n        shareable={shareable}\n        className={className}\n        footer={footer}\n        showMediaMobile={showMediaMobile}\n        anchorId={anchorId}\n        {...omit(inspectorDataset, 'foregroundDataset')}\n        postChildren={postChildren}\n        size={heroSize}\n        showScrollButton={showScrollButton}\n        onScrollDownButtonClick={handleScrollDownButtonClick}\n        breadcrumbs={breadcrumbs}\n        topics={topicsToRender}\n        backgroundMediaStickers={backgroundMediaStickers}\n        increaseTitleFontSize={increaseTitleFontSize}\n      />\n    </>\n  );\n};\n\nHero.displayName = 'Hero';\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\n\nexport const breadcrumbsFragment = gql`\n  fragment BreadcrumbsAll on Slug {\n    breadcrumbText\n    slugParent {\n      ...ContentfulSysId\n      slug\n      breadcrumbText\n      slugParent {\n        ...ContentfulSysId\n        slug\n        breadcrumbText\n        slugParent {\n          ...ContentfulSysId\n          slug\n          breadcrumbText\n        }\n      }\n    }\n  }\n  ${contentfulSysIdFragment}\n`;\n\nexport const breadcrumbsQuery = gql`\n  query BreadcrumbsQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    slug(preview: $preview, locale: $locale, id: $id) {\n      ...ContentfulSysId\n      slug\n      ...BreadcrumbsAll\n    }\n  }\n  ${contentfulSysIdFragment}\n  ${breadcrumbsFragment}\n`;\n", "import type { BreadcrumbProps } from '@snapchat/snap-design-system-marketing/src/components/Breadcrumbs/Breadcrumb';\n\nimport type { BreadcrumbsDataProps } from './types';\n\n/**\n * Transforms breadcrumb data into a structured array of `BreadcrumbProps`.\n *\n * @param {BreadcrumbsDataProps | undefined} slugData - The breadcrumb data from Contentful.\n * @returns {BreadcrumbProps[] | undefined} An array of structured breadcrumbs or undefined if no\n *   valid data is provided.\n */\nexport const structureBreadcrumbs = (slugData?: BreadcrumbsDataProps) => {\n  if (!slugData) return undefined;\n\n  // Do not create breadcrumbs if there is only one breadcrumb or if the text is missing\n  const parent = slugData.slugParent;\n  const currentBreadcrumbText = slugData.breadcrumbText;\n  if (!parent || !currentBreadcrumbText) return undefined;\n\n  const result: BreadcrumbProps[] = [];\n\n  if (slugData.slugParent?.slugParent?.breadcrumbText) {\n    result.push({\n      slug: slugData.slugParent.slugParent?.slug\n        ? `/${slugData.slugParent.slugParent.slug}`\n        : undefined,\n      breadcrumbText: slugData.slugParent.slugParent.breadcrumbText,\n    });\n  }\n\n  if (slugData?.slugParent?.breadcrumbText) {\n    result.push({\n      slug: slugData.slugParent?.slug ? `/${slugData.slugParent.slug}` : undefined,\n      breadcrumbText: slugData.slugParent.breadcrumbText,\n    });\n  }\n\n  if (slugData.breadcrumbText) {\n    result.push({\n      slug: slugData?.slug ? `/${slugData.slug}` : undefined,\n      breadcrumbText: slugData.breadcrumbText,\n    });\n  }\n\n  return result.length > 1 ? result : undefined;\n};\n\n/**\n * Generates a JSON-LD schema for breadcrumbs based on the provided breadcrumb data.\n *\n * @param {BreadcrumbsDataProps | undefined} slugData - The breadcrumb data from Contentful.\n * @returns {object | undefined} A JSON-LD schema object for breadcrumbs or undefined if no valid\n *   data is provided.\n */\nexport const createBreadcrumbSchema = (slugData?: BreadcrumbsDataProps) => {\n  if (typeof window === 'undefined') return;\n\n  const breadcrumbs = structureBreadcrumbs(slugData);\n  if (!breadcrumbs?.length) return;\n\n  return {\n    '@context': 'https://schema.org',\n    '@type': 'BreadcrumbList',\n    itemListElement: breadcrumbs.map((breadcrumb, index) => ({\n      '@type': 'ListItem',\n      position: index + 1,\n      name: breadcrumb.breadcrumbText,\n      item: breadcrumb.slug ? `${window.location.origin}${breadcrumb.slug}` : undefined,\n    })),\n  };\n};\n", "import { documentToPlainTextString } from '@contentful/rich-text-plain-text-renderer';\n\nimport type { RenderData } from '../types/RichText';\n\nexport const renderString = (data: RenderData): string | undefined => {\n  if (!data) {\n    return undefined;\n  }\n\n  if (typeof data === 'string') {\n    return data;\n  }\n\n  return documentToPlainTextString(data.json);\n};\n", "import type { FC } from 'react';\n\nimport { useFormatDate } from '../../hooks/useFormatDate';\nimport type { RichText } from '../../types/RichText';\nimport { renderString } from '../../utils/renderString';\nimport { renderRichTextMarkingsOnly } from '../../utils/renderText/renderRichText';\n\ninterface HeroHeaderProps {\n  header?: RichText | string;\n  isExpectingDate?: boolean;\n  fallbackDate?: Date;\n}\n\nconst dateFormatOptions: Intl.DateTimeFormatOptions = {\n  month: 'long',\n  day: '2-digit',\n  year: 'numeric',\n  // NOTE: Always render these dates assuming UTC timezone to ensure consistent rendering between server and client.\n  //       Otherwise we would need to determine the client's timezone whenever we process the initial render on the server.\n  //       By using UTC for all cases we ensure consistent behavior, though we may be off by 1 day depending on the user's\n  //       location.\n  timeZone: 'UTC',\n};\n\n/**\n * Helper function that parses the props for rendering a the Hero Header and returns a React\n * Component or null. Returning null here enables us to conditionally render downstream components\n * by checking whether the output component exists.\n */\nexport const getHeroHeaderComponent = ({\n  fallbackDate,\n  header,\n  isExpectingDate,\n}: HeroHeaderProps): FC | null => {\n  // Normal case: render specified header text\n  if (!isExpectingDate && header) {\n    return () => <>{renderRichTextMarkingsOnly(header)}</>;\n  }\n\n  const headerText = typeof header === 'string' ? header : renderString(header) ?? '';\n  const parsedDate: Date | undefined = new Date(headerText);\n  const isParsedDateValid = !Number.isNaN(parsedDate.getTime());\n\n  // Normal case: User specified date\n  if (isExpectingDate && isParsedDateValid) {\n    return () => {\n      const { formatDate } = useFormatDate();\n      return <>{formatDate(parsedDate, dateFormatOptions)}</>;\n    };\n  }\n\n  // Normal case: User wants date to render using system generated date\n  // Edge case: User specified a malformed date string\n  if (isExpectingDate && fallbackDate) {\n    return () => {\n      const { formatDate } = useFormatDate();\n      return <>{formatDate(fallbackDate, dateFormatOptions)}</>;\n    };\n  }\n\n  // Normal case: No header text or date specified, don't render\n  return null;\n};\n", "import type { ContentfulSysProps } from '../../types/contentful';\nimport type { CarouselV3DataProps } from '../CarouselV3';\n\nexport const isCarouselV3 = (props?: ContentfulSysProps): props is CarouselV3DataProps => {\n  return (props as CarouselV3DataProps)?.__typename === 'CarouselV3';\n};\n", "import { gql } from '@apollo/client';\n\nimport { ctaFragment } from '../CallToAction';\nimport { emphasizedTextFragment } from '../EmphasizedText/query';\nimport { fragments as imageFragments } from '../Image';\nimport { fragments as mediaFragments } from '../Media';\nimport { snapchatEmbedFragment } from '../SnapchatEmbed';\nimport { fragments as videoFragments } from '../Video';\n\nexport const fragments = {\n  all: gql`\n    fragment BlockHeroAll on BlockHero {\n      ...ContentfulSysId\n      header {\n        json\n      }\n      eyebrow\n      title {\n        json\n        links {\n          entries {\n            inline {\n              ...ContentfulSysId\n              ... on EmphasizedText {\n                ...EmphasizedTextAll\n              }\n            }\n          }\n        }\n      }\n      subTitle {\n        json\n      }\n      body {\n        json\n      }\n      callsToActionCollection(limit: 3) {\n        items {\n          ... on CallToAction {\n            ...CallToActionAll\n          }\n        }\n      }\n      foreground {\n        __typename\n        ... on Image {\n          ...ImageAll\n        }\n        ... on Video {\n          ...VideoAll\n        }\n        ... on CarouselV3 {\n          ...ContentfulSysId\n        }\n        ... on SnapchatEmbed {\n          ...SnapchatEmbedAll\n        }\n      }\n      backgroundMediaLayout\n      backgroundMediaV2 {\n        __typename\n        ... on Video {\n          ...VideoAll\n        }\n        ... on Image {\n          ...ImageAll\n        }\n      }\n      headerMediaV2 {\n        __typename\n        ... on Image {\n          ...ImageAll\n        }\n      }\n      mediaWrap\n      isHeaderDate\n      theme\n      brandBackgroundColor\n      backgroundColor\n      textAlign\n      textAlignMobile\n      verticalTextAlign\n      fitWindow\n      curtainOpacityPercentage\n      useLatestPost\n      showMediaMobile\n      anchorId\n      size\n      showScrollButton\n      displayTopics\n      increaseTitleFontSize\n    }\n    ${ctaFragment}\n    ${videoFragments.all}\n    ${imageFragments.all}\n    ${mediaFragments.all}\n    ${snapchatEmbedFragment}\n    ${emphasizedTextFragment}\n  `,\n};\n\nexport const blockHeroQuery = gql`\n  query BlockHeroQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    blockHero(preview: $preview, locale: $locale, id: $id) {\n      ...BlockHeroAll\n    }\n  }\n  ${fragments.all}\n`;\n", "import { documentToPlainTextString } from '@contentful/rich-text-plain-text-renderer';\nimport type { Block, Inline } from '@contentful/rich-text-types';\nimport {\n  type ImageSources,\n  type VideoProps,\n  CarouselCardItem,\n} from '@snapchat/snap-design-system-marketing';\n\nimport { useContentfulImages } from '../../../../contentful-client/src';\nimport { useParseMediaContainer } from '../../hooks/useParseMediaContainer';\nimport { combineImageSources } from '../../utils/combineImageSources';\nimport { getImageSourceSettings } from '../Image';\nimport type { ImmersiveScrollBlockTileProps } from './types';\n\nexport const ImmersiveScrollBlockCard = (tile: ImmersiveScrollBlockTileProps) => {\n  const { getImageSources } = useContentfulImages();\n\n  const {\n    media: { imageSource, videoSource, contentType },\n    mobileMedia: {\n      imageSource: mobileImageSource,\n      videoSource: mobileVideoSource,\n      contentType: mobileContentType,\n    },\n    thumbnailSource,\n  } = useParseMediaContainer(tile.media);\n\n  let imgSrcs: ImageSources | undefined;\n  let videoProps: VideoProps | undefined;\n\n  if (tile.media?.__typename === 'Image') {\n    const { desktopSettings, mobileSettings } = getImageSourceSettings({\n      desktopHeight: tile.media.media?.height ?? 0,\n      mobileHeight: tile.media.mobileMedia?.height ?? 0,\n      enableHighDpi: tile.media.enableHighDpi,\n      quality: tile.media.quality,\n    });\n\n    imgSrcs = combineImageSources({\n      desktop: getImageSources(imageSource, desktopSettings),\n      mobile: getImageSources(mobileImageSource, mobileSettings),\n    });\n  }\n\n  if (tile.media?.__typename === 'Video') {\n    videoProps = {\n      source: videoSource ?? '',\n      mobileSource: mobileVideoSource,\n      sourceType: contentType,\n      mobileSourceType: mobileContentType,\n      posterSource: thumbnailSource,\n    };\n  }\n\n  const tileSlug = tile.slugReference?.slug || '';\n  const tileTitle = tile.title?.json ? tile.title.json : '';\n  const titleBody = tile.label?.json ? tile.label?.json : '';\n\n  return (\n    <CarouselCardItem\n      key={`${tile.__typename}-${tile.sys.id}`}\n      title={documentToPlainTextString(tileTitle as Block | Inline)}\n      body={documentToPlainTextString(titleBody as Block | Inline)}\n      url={tileSlug ? `/${tileSlug}` : undefined}\n      imgSrcs={imgSrcs}\n      imgAltText={tile.media?.media?.description}\n      videoSource={videoProps?.source}\n      mobileVideoSource={videoProps?.mobileSource}\n      posterSource={videoProps?.posterSource}\n      aspectRatio=\"9:16\"\n      shouldLoad\n    />\n  );\n};\n", "import { ImmersiveScrollBlock as ImmersiveScrollBlockSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport { useMotifScheme } from '../../hooks/useMotifScheme';\nimport { renderRichTextMultiLineWithMarkings } from '../../utils/renderText/renderRichText';\nimport { ImmersiveScrollBlockCard } from './ImmersiveScrollBlockCard';\nimport type { ImmersiveScrollBlockDataProps } from './types';\n\nexport const ImmersiveScrollBlock: FC<ImmersiveScrollBlockDataProps> = props => {\n  const {\n    title,\n    tilesDirection,\n    text,\n    textAlignmentMobile,\n    eyebrow,\n    brandBackgroundColor,\n    backgroundColor,\n    anchor,\n    tilesCollection,\n  } = props;\n\n  const motifScheme = useMotifScheme(brandBackgroundColor);\n\n  return (\n    <ImmersiveScrollBlockSDS\n      title={renderRichTextMultiLineWithMarkings(title)}\n      eyebrow={eyebrow}\n      tilesDirection={tilesDirection}\n      text={text}\n      textAlignmentMobile={textAlignmentMobile}\n      motifScheme={motifScheme}\n      backgroundColor={backgroundColor}\n      anchor={anchor}\n    >\n      {tilesCollection.items.map(tile => ImmersiveScrollBlockCard(tile))}\n    </ImmersiveScrollBlockSDS>\n  );\n};\n\nImmersiveScrollBlock.displayName = 'ImmersiveScrollBlock';\n", "import { useContentfulImages } from '@snapchat/mw-contentful-client';\nimport {\n  imageHeightForImageSize,\n  TileImageFit,\n  TileImageSize,\n  Tile as TileSDS,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logUserEvent } from '../../helpers/logging';\nimport type { ContentfulIdVariable } from '../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport { UserAction } from '../../types/events';\nimport { isContentfulSysNotShallow } from '../../utils/contentful';\nimport { parseMedia } from '../../utils/media';\nimport { renderRichTextMarkingsOnly } from '../../utils/renderText/renderRichText';\nimport { queries } from './query';\nimport type { TileDataHandlerProps, TileDataProps, TileProps } from './types';\n\n/**\n * Tile. Unused.\n *\n * TODO: Delete this. Unless we want to refactor this out to be used as a child of Hero Media.\n */\nexport const Tile: FC<TileProps> = props => {\n  const { isRTL } = useContext(AppContext);\n  const { getImageSources } = useContentfulImages();\n  const elementLocation = useContext(ElementLocation).elementLocation;\n\n  const { data: rawData } = useContentfulQuery<TileDataHandlerProps, ContentfulIdVariable>(\n    queries.all,\n    {\n      skip: isContentfulSysNotShallow(props),\n      variables: { id: props.sys.id },\n    }\n  );\n\n  const data = rawData?.tile ?? (props as TileDataProps);\n\n  if (!data) {\n    return null;\n  }\n\n  const { url: urlFromProps } = props;\n\n  const {\n    title,\n    label,\n    media,\n    imageSize: queryImageSize,\n    imageFit: queryImageFit,\n    url: urlFromData,\n  } = data;\n  const {\n    afterClick,\n    beforeClick,\n    onClick,\n    imageSize: propsImageSize,\n    imageFit: propsImageFit,\n  } = props;\n\n  const { imageSource, imageAltText } = parseMedia(media?.media);\n\n  const onClickWrapped = (): void => {\n    beforeClick?.();\n    onClick?.();\n\n    logUserEvent({\n      eventCategory: 'Tile',\n      eventAction: UserAction.Click,\n      eventLabel: null,\n      context: {\n        targetUrl: url,\n        elementLocation,\n      },\n    });\n\n    afterClick?.();\n  };\n\n  const imageSize = queryImageSize ?? propsImageSize;\n  const imageFit = queryImageFit ?? propsImageFit;\n  const url = urlFromData ?? urlFromProps;\n\n  // we do x 2 to handle higher DPI screens (e.g. iPhones) and also if we match height exactly\n  // some uploaded images are too narrow and end up looking bad\n  const imgSrcs = getImageSources(imageSource, {\n    image: {\n      height: imageHeightForImageSize[imageSize ?? TileImageSize.Large] * 2,\n    },\n  });\n\n  return (\n    <TileSDS\n      title={renderRichTextMarkingsOnly(title)}\n      label={renderRichTextMarkingsOnly(label)}\n      onClick={onClickWrapped}\n      imageSize={imageSize}\n      imageFit={imageFit}\n      imgSrcs={imgSrcs}\n      imgAltText={imageAltText}\n      imagePadding={imageSize === TileImageSize.Small && imageFit === TileImageFit.Contain}\n      link={url}\n      isRTL={isRTL}\n    />\n  );\n};\n\nTile.displayName = 'Tile';\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { emphasizedTextFragment } from '../EmphasizedText';\nimport { fragments as tileFragments } from '../Tile';\n\nexport const immersiveScrollBlockFragment = gql`\n  fragment ImmersiveScrollBlockAll on ImmersiveScrollBlock {\n    ...ContentfulSysId\n    eyebrow\n    title {\n      json\n      links {\n        entries {\n          inline {\n            ...ContentfulSysId\n            ... on EmphasizedText {\n              ...EmphasizedTextAll\n            }\n          }\n        }\n      }\n    }\n    text\n    tilesCollection(limit: 4) {\n      items {\n        ...ContentfulSysId\n        ...ImmersiveScrollBlockTile\n      }\n    }\n    tilesDirection\n    textAlignmentMobile\n    brandBackgroundColor\n    backgroundColor\n    anchor\n  }\n  ${contentfulSysIdFragment}\n  ${emphasizedTextFragment}\n  ${tileFragments.immersiveScrollBlockTile}\n`;\n\nexport const immersiveScrollBlockQuery = gql`\n  query ImmersiveScrollBlockQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    immersiveScrollBlock(preview: $preview, locale: $locale, id: $id) {\n      ...ImmersiveScrollBlockAll\n    }\n  }\n  ${immersiveScrollBlockFragment}\n`;\n", "import { getImageUrl } from '@snapchat/mw-contentful-client';\nimport type { HeaderProps } from '@snapchat/snap-design-system-marketing';\nimport { Header } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport { logger } from '../../helpers/logging';\nimport type { MetasProps } from './types';\n\n/**\n * Parses meta tags into name and string attributes based on the value in the string.\n *\n * Note that this supports a legacy format like <name>=<content> as well as parsing the meta tag as\n * a whole.\n *\n * Values are escaped to avoid script injection.\n */\nexport function parseCustomMeta(customMeta: string): { name: string; content: string } {\n  customMeta = customMeta.trim();\n\n  // Support values like <meta name=\"<name>\" content=\"<content>\" />\n  if (customMeta.startsWith('<meta')) {\n    const name = /name=\"([^\"]+)\"/.exec(customMeta)?.[1] ?? 'unknown';\n    const content = /content=\"([^\"]+)\"/.exec(customMeta)?.[1] ?? 'unknown';\n    return { name: encodeURIComponent(name), content: encodeURIComponent(content) };\n  }\n\n  // Support values like <name>=<content>\n  if (!/['\"><]/.test(customMeta) && customMeta.includes('=')) {\n    const [name, content] = customMeta.split('=');\n    return {\n      name: encodeURIComponent((name as string).trim()),\n      content: encodeURIComponent((content as string).trim()),\n    };\n  }\n\n  logger.logWarning({\n    component: 'Meta',\n    action: 'parse-custom-meta',\n    message: `Unable to parse custom metadata: \"${encodeURIComponent(customMeta)}\"`,\n  });\n\n  // In all other cases throw a warning and diplay bad metadata.\n  return {\n    name: 'unparseable-meta',\n    content: encodeURIComponent(customMeta),\n  };\n}\n\nexport const Metas: FC<MetasProps> = props => {\n  const { customMetas } = props;\n\n  const parsedCustomMetas = customMetas?.map(parseCustomMeta) ?? [];\n\n  const imageUrl =\n    props.ogImage &&\n    getImageUrl({\n      imageUrl: props.ogImage.url,\n      // 512px tall should be more than large enough for image previews\n      settings: { height: 512 },\n    });\n\n  const headerProps: HeaderProps = {\n    description: props.description,\n    ogImage: imageUrl,\n    ogVideo: props.ogVideo?.url,\n    noIndex: !!props.noIndex,\n    noFollow: !!props.noFollow,\n    customMetas: parsedCustomMetas,\n  };\n\n  return <Header {...headerProps} />;\n};\n\nMetas.displayName = 'Metas';\n", "import { gql } from '@apollo/client';\n\nimport type { ContentfulTypedSysProps } from '../../types/contentful';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\n\n// =================================================================================================\n// Blog Schema Fragment\n// =================================================================================================\n\nexport const blogSchemaFragment = gql`\n  fragment BlogSchemaAll on BlogSchema {\n    ...ContentfulSysId\n    headline\n    description\n    imagesCollection(limit: 10) {\n      items {\n        url\n      }\n    }\n  }\n  ${contentfulSysIdFragment}\n`;\n\nexport interface BlogSchemaData extends ContentfulTypedSysProps<'BlogSchema'> {\n  headline: string;\n  description?: string;\n  imagesCollection?: { items?: { url?: string }[] };\n}\n", "import { gql } from '@apollo/client';\n\nimport type { ContentfulTypedSysProps } from '../../types/contentful';\nimport type { RichText } from '../../types/RichText';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\n\n// =================================================================================================\n// FAQ Page Schema Fragment\n// =================================================================================================\n\nexport const faqPageSchemaFragment = gql`\n  fragment FaqPageSchemaAll on FaqPageSchema {\n    itemsCollection {\n      items {\n        ...ContentfulSysId\n        question\n        answer {\n          json\n        }\n      }\n    }\n  }\n  ${contentfulSysIdFragment}\n`;\n\nexport interface FaqPageSchemaData extends ContentfulTypedSysProps<'FaqPageSchema'> {\n  itemsCollection?: {\n    items?: {\n      question: string;\n      answer: RichText;\n    }[];\n  };\n}\n", "import { documentToHtmlString } from '@contentful/rich-text-html-renderer';\nimport type { BlogPosting, FAQPage, Organization, Question, WithContext } from 'schema-dts';\n\nimport type { BlogSchemaData } from './blogSchemaQuery';\nimport type { FaqPageSchemaData } from './faqPageSchemaQuery';\nimport type { OrganizationSchemaData } from './organizationSchemaQuery';\nimport type { SchemaOrgStructuredDataSchema, StructuredDataSchema } from './WebSchema.types';\n\nconst schemaOrgUrl = 'https://schema.org';\n\n/** Given the schema data from contentful, generate the corresponding schema.org structured data */\nexport function generateWebSchema(\n  url: string,\n  schemaData: StructuredDataSchema,\n  postedAt?: Date,\n  lastModifiedAt?: Date,\n  organizationSchemaData?: OrganizationSchemaData\n): SchemaOrgStructuredDataSchema | undefined {\n  switch (schemaData.__typename) {\n    case 'BlogSchema':\n      return generateBlogSchema(url, schemaData, postedAt, lastModifiedAt, organizationSchemaData);\n    case 'OrganizationSchema':\n      return generateOrganizationSchema(url, schemaData);\n    case 'FaqPageSchema':\n      return generateFaqPageSchema(schemaData);\n    default:\n      return;\n  }\n}\n\n// This snippet will be re-used in other schemas to provide information about the organization\nfunction generateOrganizationSnippet(organizationSchemaData: OrganizationSchemaData): Organization {\n  return {\n    '@type': 'Organization',\n    name: organizationSchemaData.name,\n    logo: organizationSchemaData.logo?.url && {\n      '@type': 'ImageObject',\n      url: organizationSchemaData.logo?.url,\n    },\n    url: organizationSchemaData.url,\n  };\n}\n\nfunction generateBlogSchema(\n  url: string,\n  blogSchemaData: BlogSchemaData,\n  postedAt?: Date,\n  lastModifiedAt?: Date,\n  organizationSchemaData?: OrganizationSchemaData\n): WithContext<BlogPosting> {\n  const organizationSnippet =\n    organizationSchemaData && generateOrganizationSnippet(organizationSchemaData);\n\n  const images = blogSchemaData.imagesCollection?.items\n    ?.map(item => item.url)\n    // this lets typescript know that the array contains only strings, otherwise there'd be an error\n    .filter((item: string | undefined): item is string => item !== undefined);\n\n  return {\n    '@context': schemaOrgUrl,\n    '@type': 'BlogPosting',\n    mainEntityOfPage: {\n      '@type': 'WebPage',\n      '@id': url,\n    },\n    headline: blogSchemaData.headline,\n    description: blogSchemaData.description,\n    image: images,\n    author: organizationSnippet,\n    publisher: organizationSnippet,\n    datePublished: postedAt?.toISOString(),\n    dateModified: lastModifiedAt?.toISOString(),\n  };\n}\n\nfunction generateOrganizationSchema(\n  url: string,\n  organizationSchemaData: OrganizationSchemaData\n): WithContext<Organization> {\n  const organizaitonSnippet = generateOrganizationSnippet(organizationSchemaData);\n\n  return {\n    '@context': schemaOrgUrl,\n    '@type': 'Organization',\n    brand: organizaitonSnippet,\n    description: organizationSchemaData?.description,\n    name: organizationSchemaData?.name,\n    sameAs: organizationSchemaData?.sameAs,\n    url,\n  };\n}\n\nfunction generateFaqPageSchema(faqPageSchemaData: FaqPageSchemaData): WithContext<FAQPage> {\n  const questions: Question[] =\n    faqPageSchemaData.itemsCollection?.items?.map(item => ({\n      '@type': 'Question',\n      name: item.question,\n      acceptedAnswer: {\n        '@type': 'Answer',\n        text: documentToHtmlString(item.answer.json),\n      },\n    })) ?? [];\n\n  return {\n    '@context': schemaOrgUrl,\n    '@type': 'FAQPage',\n    mainEntity: questions,\n  };\n}\n", "import { gql } from '@apollo/client';\n\nimport type { ContentfulTypedSysProps } from '../../types/contentful';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\n\n// =================================================================================================\n// Organization Schema Fragment\n// =================================================================================================\n\nexport const organizationSchemaFragment = gql`\n  fragment OrganizationSchemaAll on OrganizationSchema {\n    ...ContentfulSysId\n    name\n    description\n    url\n    logo {\n      url\n    }\n    sameAs\n  }\n  ${contentfulSysIdFragment}\n`;\n\nexport const organizationSchemaCollectionQuery = gql`\n  query OrganizationSchemaCollectionQuery($preview: Boolean!, $locale: String!) {\n    organizationSchemaCollection(preview: $preview, locale: $locale, limit: 1) {\n      items {\n        ...OrganizationSchemaAll\n      }\n    }\n  }\n  ${organizationSchemaFragment}\n`;\n\nexport interface OrganizationSchemaData extends ContentfulTypedSysProps<'OrganizationSchema'> {\n  name: string;\n  description?: string;\n  url?: string;\n  logo?: { url?: string };\n  sameAs?: string[];\n}\n\nexport interface OrganizationSchemaCollectionData\n  extends ContentfulTypedSysProps<'OrganizationSchemaCollection'> {\n  organizationSchemaCollection: {\n    items: OrganizationSchemaData[];\n  };\n}\n", "import { first } from 'radashi';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\nimport { Helmet } from 'react-helmet-async';\n\nimport { AppContext } from '../../AppContext';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport { SlugContext } from '../Slug/SlugContext';\nimport type { OrganizationSchemaCollectionData } from '.';\nimport { generateWebSchema, organizationSchemaCollectionQuery } from '.';\nimport type { SchemasProps } from './WebSchema.types';\n\nexport const WebSchemas: FC<SchemasProps> = props => {\n  const { schemas } = props;\n\n  const { getCurrentUrl } = useContext(AppContext);\n  const { publishedAt, postedDate } = useContext(SlugContext);\n\n  const currentUrl = getCurrentUrl();\n\n  const { data: organizationSchemaData } = useContentfulQuery<OrganizationSchemaCollectionData>(\n    organizationSchemaCollectionQuery\n  );\n\n  const transformedSchemas = schemas.map(schema =>\n    generateWebSchema(\n      currentUrl,\n      schema,\n      postedDate,\n      publishedAt,\n      first(organizationSchemaData?.organizationSchemaCollection?.items || [])\n    )\n  );\n\n  return (\n    <Helmet>\n      {transformedSchemas.map(\n        (schema, idx) =>\n          schema && (\n            <script type=\"application/ld+json\" key={`schema-${idx}`}>\n              {JSON.stringify(schema)}\n            </script>\n          )\n      )}\n    </Helmet>\n  );\n};\n\nWebSchemas.displayName = 'WebSchemas';\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport {\n  blogSchemaFragment,\n  faqPageSchemaFragment,\n  organizationSchemaFragment,\n} from '../WebSchema';\n\nexport const fragments = {\n  all: gql`\n    fragment MetaAll on Metas {\n      ...ContentfulSysId\n      description\n      ogImage {\n        url\n      }\n      ogVideo {\n        url\n      }\n      noIndex\n      noFollow\n      customMetas\n      schemasCollection(limit: 5) {\n        items {\n          ...ContentfulSysId\n          ...BlogSchemaAll\n          ...OrganizationSchemaAll\n          ...FaqPageSchemaAll\n        }\n      }\n    }\n    ${blogSchemaFragment}\n    ${organizationSchemaFragment}\n    ${faqPageSchemaFragment}\n    ${contentfulSysIdFragment}\n  `,\n};\n\nexport const query = gql`\n  query MetasQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    metas(preview: $preview, locale: $locale, id: $id) {\n      ...MetaAll\n    }\n  }\n  ${fragments.all}\n`;\n", "import { gql } from '@apollo/client';\nimport type {\n  Maybe,\n  Scalars,\n  ScrollAnimatedSectionAnimatedContentCollection,\n  ScrollAnimatedSectionMobileContentCollection,\n} from '@snapchat/mw-contentful-schema';\nimport type { EntitySys } from 'contentful';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { blockAllFragment } from '../Block';\nimport { assetFragment } from '../Media';\n\nexport const scrollAnimatedVideoFragment = gql`\n  fragment ScrollAnimatedVideoAll on ScrollAnimatedVideo {\n    ...ContentfulSysId\n    mp4Source {\n      ...AssetAll\n    }\n    webmSource {\n      ...AssetAll\n    }\n    scrubStart\n    scrubEnd\n    videoStart\n    videoEnd\n  }\n  ${contentfulSysIdFragment}\n  ${assetFragment}\n`;\n\nexport const scrollAnimatedSectionFragment = gql`\n  fragment ScrollAnimatedSectionAll on ScrollAnimatedSection {\n    ...ContentfulSysId\n    scrollHeight\n    animatedContentCollection {\n      items {\n        ...ScrollAnimatedVideoAll\n      }\n    }\n    mobileContentCollection {\n      items {\n        ...BlockAll\n      }\n    }\n    anchorId\n  }\n  ${scrollAnimatedVideoFragment}\n  ${contentfulSysIdFragment}\n  ${assetFragment}\n  ${blockAllFragment}\n`;\n\nexport const query = gql`\n  query ScrollAnimatedSectionQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    scrollAnimatedSection(preview: $preview, locale: $locale, id: $id) {\n      ...ScrollAnimatedSectionAll\n    }\n  }\n  ${scrollAnimatedSectionFragment}\n`;\n\nexport interface ScrollAnimatedSectionDataProps {\n  __typename: 'ScrollAnimatedSection';\n  anchorId?: Maybe<Scalars['String']['output']>;\n  animatedContentCollection?: ScrollAnimatedSectionAnimatedContentCollection;\n  mobileContentCollection?: ScrollAnimatedSectionMobileContentCollection;\n  scrollHeight?: Maybe<Scalars['Float']['output']>;\n  sys: EntitySys;\n}\n", "import { gql } from '@apollo/client';\nimport type {\n  Alignment,\n  BackgroundColor,\n  MotifScheme,\n} from '@snapchat/snap-design-system-marketing';\n\nimport type { ImageDataProps } from '../../components/Image';\nimport { fragments as imageFragments } from '../../components/Image';\nimport type { VideoDataProps } from '../../components/Video';\nimport { fragments as videoFragments } from '../../components/Video';\nimport type { ContentfulTypedSysProps } from '../../types/contentful';\nimport type { Items } from '../../types/Items';\nimport type { RichText } from '../../types/RichText';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { ctaFragment } from '../CallToAction';\nimport type { CallToActionDataProps } from '../CallToAction/types';\n\n/**\n * The fields `title`, `subtitle`, and `body` have been renamed to `splitBlockTitle`,\n * `splitBlockSubtitle`, and `splitBlockBody` respectively. This prevents naming collisions with the\n * existing `Block` content type, which uses the same field names in its GraphQL query.\n */\nexport const splitBlockFragment = gql`\n  fragment SplitBlockAll on SplitBlock {\n    ...ContentfulSysId\n    callsToActionCollection(limit: 2) {\n      items {\n        ... on CallToAction {\n          ...CallToActionAll\n        }\n      }\n    }\n    splitBlockTitle: title\n    splitBlockSubtitle: subtitle\n    splitBlockBody: body {\n      json\n    }\n    textAlignment\n    textAlignmentMobile\n    verticalTextAlignment\n    media {\n      __typename\n      ... on Video {\n        ...VideoAll\n      }\n      ... on Image {\n        ...ImageAll\n      }\n    }\n    mediaCaption\n    mediaDirection\n    brandBackgroundColor\n    backgroundColor\n    fitWindow\n    anchorId\n  }\n  ${contentfulSysIdFragment}\n  ${ctaFragment}\n  ${imageFragments.all}\n  ${videoFragments.all}\n`;\n\nexport const splitBlockQuery = gql`\n  query SplitBlockQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    splitBlock(preview: $preview, locale: $locale, id: $id) {\n      ...SplitBlockAll\n    }\n  }\n  ${splitBlockFragment}\n`;\n\nexport interface SplitBlockDataProps extends ContentfulTypedSysProps<'SplitBlock'> {\n  anchorId?: string;\n  brandBackgroundColor?: MotifScheme;\n  backgroundColor?: BackgroundColor;\n  callsToActionCollection?: Items<CallToActionDataProps>;\n  fitWindow?: boolean;\n  media: ImageDataProps | VideoDataProps;\n  mediaCaption?: string;\n  mediaDirection: Alignment;\n  splitBlockBody?: RichText | string;\n  splitBlockSubtitle?: string;\n  splitBlockTitle: string;\n  textAlignment: Alignment;\n  textAlignmentMobile: Alignment;\n  verticalTextAlignment: Alignment;\n}\n\nexport interface SplitBlockDataHandlerProps {\n  splitBlock: SplitBlockDataProps;\n}\n", "import type { BackgroundColor, MotifScheme } from '@snapchat/snap-design-system-marketing';\nimport { gql } from 'graphql-tag';\n\nimport type { ContentfulTypedSysProps } from '../../types/contentful';\nimport type { Items } from '../../types/Items';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport type { SubNavigationItemProps } from './types';\n\nexport const subNavigationFragment = gql`\n  fragment SubNavigationAll on SubNavigation {\n    ...ContentfulSysId\n    brandBackgroundColor\n    backgroundColor\n    subNavigationItemsCollection {\n      items {\n        ...ContentfulSysId\n        text\n        anchorId\n      }\n    }\n  }\n  ${contentfulSysIdFragment}\n`;\n\nexport interface SubNavigationDataProps extends ContentfulTypedSysProps<'SubNavigation'> {\n  brandBackgroundColor?: MotifScheme;\n  backgroundColor?: BackgroundColor;\n  subNavigationItemsCollection: Items<SubNavigationItemProps>;\n}\n\nexport const subNavigationQuery = gql`\n  query SubNavigationQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    subNavigation(preview: $preview, locale: $locale, id: $id) {\n      ...SubNavigationAll\n    }\n  }\n  ${subNavigationFragment}\n`;\n\nexport interface SubNavigationData {\n  subNavigation?: SubNavigationDataProps;\n}\n", "import { css } from '@emotion/css';\nimport type {\n  SubNavigationItem as SubNavigationItemType,\n  SubNavigation as SubNavigationType,\n} from '@snapchat/mw-contentful-schema';\nimport {\n  SubNavigationItem as SubNavigationItemSDS,\n  SubNavigation as SubNavigationSDS,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\nimport { useMotifScheme } from '../../hooks/useMotifScheme';\nimport { getContentfulInspectorProps } from '../../utils/contentful/getContentfulInspectorProps';\nimport { totalHeaderHeightCssVar } from '../Header/headerSizeUtils';\nimport { pageStickyHeightCssVar } from '../Page';\nimport type { SubNavigationProps } from './types';\n\nenum ScrollDir {\n  DOWN = 'DOWN',\n  UP = 'UP',\n}\n\nconst isElementHorizontallyVisible = (element: HTMLElement, parent: HTMLElement) => {\n  const elementRect = element.getBoundingClientRect();\n  const parentRect = parent.getBoundingClientRect();\n\n  return elementRect.left >= parentRect.left && elementRect.right <= parentRect.right;\n};\n\nconst SubNavStickyCss = css`\n  top: calc(var(${pageStickyHeightCssVar}) + var(${totalHeaderHeightCssVar}));\n`;\n\nexport const SubNavigation: FC<SubNavigationProps> = ({\n  brandBackgroundColor,\n  backgroundColor,\n  sys,\n  items = [],\n}) => {\n  const motifScheme = useMotifScheme(brandBackgroundColor);\n\n  const subnavRef = useRef<HTMLDivElement>(null);\n\n  // have no initial state otherwise it triggers the scroll event\n  const [activeItemId, setActiveItemId] = useState<string>();\n\n  // we use -1 as a flag to indicate that the scroll position has not been set yet\n  const lastScrollPos = useRef(typeof window !== 'undefined' ? -1 : 0);\n  const scrollDir = useRef<ScrollDir>();\n\n  useEffect(() => {\n    const handleScroll = () => {\n      const scrollPos = window.scrollY;\n\n      if (lastScrollPos.current === -1) {\n        lastScrollPos.current = scrollPos;\n      }\n\n      if (scrollPos > lastScrollPos.current) {\n        scrollDir.current = ScrollDir.DOWN;\n      } else if (scrollPos < lastScrollPos.current) {\n        scrollDir.current = ScrollDir.UP;\n      } // Else horizontal scroll\n\n      lastScrollPos.current = scrollPos <= 0 ? 0 : scrollPos; // For mobile or negative scrolling\n    };\n\n    window.addEventListener('scroll', handleScroll, { passive: true });\n\n    return () => {\n      window.removeEventListener('scroll', handleScroll);\n    };\n  }, []);\n\n  useEffect(() => {\n    const handleIntersectionChange = (entries: IntersectionObserverEntry[]) => {\n      const intersectingEntries = entries.filter(entry => entry.isIntersecting);\n      const lastIntersectingEntry =\n        scrollDir.current === ScrollDir.DOWN\n          ? intersectingEntries[intersectingEntries.length - 1]\n          : intersectingEntries[0];\n\n      if (lastIntersectingEntry) {\n        const id = lastIntersectingEntry.target.id;\n        setActiveItemId(id);\n\n        const parent = subnavRef?.current;\n        const element = parent?.querySelector(`a[href='#${id}']`) as HTMLElement;\n\n        if (parent && element && !isElementHorizontallyVisible(element, parent))\n          // 64 = left parent padding + 32 margin\n          parent?.scroll({ left: element?.offsetLeft - 64, behavior: 'smooth' });\n      }\n    };\n\n    const observer = new IntersectionObserver(handleIntersectionChange, {\n      rootMargin: '-30% 0px -70% 0px',\n    });\n\n    items\n      ?.map(item => item.anchorId)\n      .filter((id): id is string => !!id)\n      .map(id => document.getElementById(id))\n      .filter((el): el is HTMLElement => !!el)\n      .forEach(el => observer.observe(el));\n\n    return () => {\n      observer.disconnect();\n    };\n  }, [items]);\n\n  const handleItemClick = (id?: string) => (event: React.MouseEvent) => {\n    event.preventDefault();\n    if (!id) return;\n\n    const itemElement = document.getElementById(id);\n    if (!itemElement) return;\n\n    const totalHeaderHeight = Number(\n      getComputedStyle(document.documentElement)\n        .getPropertyValue('--total-header-height')\n        .replace('px', '')\n    );\n\n    window?.scrollTo({\n      behavior: 'smooth',\n      top:\n        itemElement.getBoundingClientRect().top -\n        document.body.getBoundingClientRect().top -\n        totalHeaderHeight -\n        56, // SubNavigation height\n    });\n  };\n\n  const { contentfulDescriptionDataset } = getContentfulInspectorProps<SubNavigationType>({\n    entryId: sys.id,\n    fieldIds: ['contentfulDescription'],\n  });\n\n  return (\n    <SubNavigationSDS\n      motifScheme={motifScheme}\n      backgroundColor={backgroundColor}\n      className={SubNavStickyCss}\n      horizontalScrollRef={subnavRef}\n      dataset={contentfulDescriptionDataset}\n    >\n      {items?.map(item => {\n        const id = item.anchorId;\n        const { textDataset } = getContentfulInspectorProps<SubNavigationItemType>({\n          entryId: item.sys.id,\n          fieldIds: ['text'],\n        });\n\n        return (\n          <SubNavigationItemSDS\n            key={id}\n            href={`#${id}`}\n            onLinkClick={handleItemClick(id)}\n            isActive={id === activeItemId}\n            dataset={textDataset}\n          >\n            {item.text}\n          </SubNavigationItemSDS>\n        );\n      })}\n    </SubNavigationSDS>\n  );\n};\n", "import { css, cx } from '@emotion/css';\nimport { useImperativeEffect } from '@snapchat/core-browser';\nimport { Brand } from '@snapchat/mw-common';\nimport { useContentfulImages } from '@snapchat/mw-contentful-client';\nimport type { Banner as BannerType, PageBlocksItem } from '@snapchat/mw-contentful-schema';\n// TODO: Move this to common/client.\nimport type { BackgroundColor, ImageSources } from '@snapchat/snap-design-system-marketing';\nimport {\n  AiLocalizationBanner,\n  Banner,\n  bannerMinHeight,\n  BreakOverlayType,\n  Break as BreakSDS,\n  BreakSpacer as BreakSpacerSDS,\n  FootnoteBlock,\n  footnoteBlockBackgroundColor,\n  getBackgroundClassName,\n  getBreakOverlayType,\n  Header as HeaderSDS,\n  MessageContext,\n  MotifScheme,\n  Page as PageSDS,\n  PictureContext,\n  Template,\n  useIsMobile,\n} from '@snapchat/snap-design-system-marketing';\nimport type { CSSProperties, FC, ReactElement, ReactNode } from 'react';\nimport { cloneElement, Fragment, useContext, useEffect, useMemo, useRef } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport { AppContext } from '../../AppContext';\nimport { Config } from '../../config';\nimport { FooterView, HeaderView, PageLayoutContext } from '../../context/PageLayoutContext';\nimport { SubscribedEventType } from '../../helpers/logging/eventListenerTypes';\nimport { logEvent } from '../../helpers/logging/loggingInstance';\nimport { useAlternateBrandPropOverride } from '../../hooks/useAlternateBrandPropOverride';\nimport { useBrand } from '../../hooks/useBrand';\nimport { useMotifScheme } from '../../hooks/useMotifScheme';\nimport { useParseMediaContainer } from '../../hooks/useParseMediaContainer';\nimport type { RichText } from '../../types/RichText';\nimport { combineImageSources } from '../../utils/combineImageSources';\nimport { getContentfulInspectorProps } from '../../utils/contentful/getContentfulInspectorProps';\nimport { direction } from '../../utils/direction';\nimport { renderRichTextWithElements } from '../../utils/renderText/renderRichText';\nimport { AlternateLang } from '../AlternateLang/AlternateLang';\nimport type { BlockDataProps } from '../Block';\nimport { Block } from '../Block';\nimport { BlockTabs } from '../BlockTabs';\nimport type { BreakBrandColor } from '../Break';\nimport { Canonical } from '../Canonical/Canonical';\nimport { getCustomComponents } from '../customComponents';\nimport { DefinitionOverlay, DefinitionProvider } from '../Definition';\nimport { Feature, useFeatureFlags } from '../FeatureFlags';\nimport { Footnote } from '../Footnote';\nimport { totalHeaderHeightCssVar } from '../Header/headerSizeUtils';\nimport { Hero } from '../Hero';\nimport { LatestPostHero } from '../Hero/LatestPostHero';\nimport { HlsInitializer } from '../HlsInitializer/HlsInitializer';\nimport { getImageSourceSettings } from '../Image';\nimport { ImmersiveScrollBlock } from '../ImmersiveScrollBlock';\nimport { LatestPostBlock } from '../LatestPostBlock';\nimport { Metas } from '../Metas';\nimport { MultiValuePropBlock } from '../MultiValuePropBlock';\nimport { MultiVideoBlock } from '../MultiVideoBlock';\nimport { PersistentCta } from '../PersistentCta/PersistentCta';\nimport { ScrollAnimatedSection } from '../ScrollAnimatedSection';\nimport { minHeightCss } from '../Slug/Slug.styles';\nimport { SlugContext } from '../Slug/SlugContext';\nimport { SplitBlock } from '../SplitBlock/SplitBlock';\nimport { SubNavigation } from '../SubNavigation';\nimport { ActiveEventCountTracker } from '../tracing/ActiveEventCountTracker';\nimport { WebSchemas } from '../WebSchema';\nimport {\n  bannerContentContainerCss,\n  pageContainerCss,\n  pageContainerWithSideNavCss,\n  pageFixedCss,\n  pageStickyCss,\n  stickyBottomCss,\n} from './Page.styles';\nimport { PageBottomStickyPortal } from './PageBottomStickyPortal';\nimport { PageFixedPortal } from './PageFixedPortal';\nimport type { PageDataBlock, PageDataBlockWithBackgroundColor } from './pageQuery';\nimport { pageStickyHeightCssVar } from './pageStickyUtils';\nimport type { PageDataProps } from './types';\n\nconst defaultBreakTemplates: Template[] = [\n  Template.Straight,\n  Template.Skirt,\n  Template.Straight,\n  Template.HeadFlipped,\n  Template.Straight,\n  Template.Head,\n];\n\nconst pageCss = css`\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - var(${totalHeaderHeightCssVar}));\n`;\n\nconst pageBottomFixedElementsCss = css`\n  display: flex;\n  flex-direction: column;\n  margin-top: auto;\n`;\n\n// TODO: Use a variable from SDS-M when it exposes this as a const.\nconst subNavHeightPx = 60;\n\nconst pageWithSubNavCss = css`\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - calc(var(${totalHeaderHeightCssVar}) + ${subNavHeightPx}px));\n`;\n\n// We declare these as constants so they are the same object across renders to prevent\n// excessive rerendering of things that rely on the context.\nconst pictureContextLazy = { lazy: true };\nconst pictureContextNoLazy = { lazy: false };\n\ntype BlockType = PageBlocksItem['__typename'] | 'Unknown';\n\nconst allBlockTypes: BlockType[] = [\n  'Break',\n  'SubNavigation',\n  'BlockHero',\n  'LatestPosts',\n  'MultiVideoBlock',\n  'Block',\n  'SplitBlock',\n  'MultiValuePropBlock',\n  'BlockTabs',\n];\n\nconst isCustomComponent = (type: BlockType) => !allBlockTypes.includes(type);\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO: Refactor to reduce complexity.\nexport const Page: FC<PageDataProps> = props => {\n  const { pathname } = useLocation();\n  const featureFlags = useFeatureFlags();\n  const { formatMessage } = useContext(MessageContext);\n  const { currentLocale } = useContext(AppContext);\n  const { getImageSources } = useContentfulImages();\n  const isMobile = useIsMobile();\n\n  const brand = useBrand();\n  const isSnapBrand = brand === Brand.SNAP;\n\n  const pageMotifScheme = useMotifScheme(props.brandBackgroundColor);\n  const bannerMotifScheme = useMotifScheme(\n    props.banner?.__typename === 'Banner'\n      ? (props.banner?.brandBackgroundColor as MotifScheme)\n      : undefined\n  );\n\n  // This is only used in sandbox to override the break templates and hero break template props for other brands\n  const alternateBrandPropOverride = useAlternateBrandPropOverride(Config, 'page');\n\n  const stickyContainerRef = useRef<HTMLDivElement>(null);\n  const pageRef = useRef<HTMLDivElement>(null);\n\n  // Unfortunately, we have to do this check here because on forbusiness, we use the same banner slot\n  // to render the mobile CTA, but the mobile CTA doesn't use the sticky container\n  // TODO: Rethink how this is done. Current this is done here because SSR needs to have a value... but does it really?\n  const stickyHeightRef = useRef<number>(\n    props.banner && props.banner.__typename === 'Banner' ? bannerMinHeight : 0\n  );\n\n  // TODO: Extract as a hook.\n  const resizeObserver = useMemo(() => {\n    // attach resize observer on client\n    if (typeof window !== 'undefined') {\n      return new ResizeObserver(entries => {\n        const { height } = entries[0]!.contentRect;\n\n        if (stickyHeightRef.current !== height) {\n          stickyHeightRef.current = height;\n\n          pageRef.current?.style.setProperty(pageStickyHeightCssVar, `${height}px`);\n        }\n      });\n    }\n\n    return undefined;\n    // we disable here because we only need it to run once on mount (on ssr and on client)\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  useEffect(() => {\n    if (stickyContainerRef.current && resizeObserver) {\n      resizeObserver.observe(stickyContainerRef.current, { box: 'border-box' });\n\n      return () => {\n        resizeObserver.disconnect();\n      };\n    }\n\n    return;\n  }, [resizeObserver]);\n\n  useImperativeEffect(() => {\n    // Note we log the page load event here, because at this point the page experiment information is available.\n    logEvent({\n      subscribedEventType: SubscribedEventType.PAGE_LOAD,\n    });\n  }, [pathname]);\n\n  // NOTE: Since these useEffect calls can modify renders above this component,\n  // we need to ensure they are always run (and not gated by an if statement).\n  const {\n    headerView: currentHeaderView,\n    footerView: currentFooterView,\n    hasSideNav,\n    hasSubNav,\n    setHeaderView,\n    setFooterView,\n  } = useContext(PageLayoutContext);\n  const headerView = props.headerView ?? HeaderView.FULL_HEADER;\n  const footerView = props.footerView ?? FooterView.FULL_FOOTER;\n\n  // Hack to mark the session header/footer with the correct values on the\n  // server-side only. Since useEffect doesn't run on the server, we need to\n  // set the value somehow.\n  // One of the issues here is that this only works if there are async promises\n  // in the first render pass that forces the server re-render everything. In\n  // those cases the server will pick up the correct values on the second pass.\n  // So, if for some reason, the server hasn't re-rendered (because all async\n  // data is already in the cache), then the server will have the wrong values.\n  if (!Config.isClient) {\n    setHeaderView?.(headerView);\n    setFooterView?.(footerView);\n  }\n\n  useEffect(() => {\n    if (headerView === currentHeaderView) return;\n    setHeaderView?.(headerView);\n  }, [headerView, currentHeaderView, setHeaderView]);\n\n  useEffect(() => {\n    if (footerView === currentFooterView) return;\n    setFooterView?.(footerView);\n  }, [footerView, currentFooterView, setFooterView]);\n\n  const slugContext = useContext(SlugContext);\n\n  const {\n    title,\n    metas,\n    blocksCollection,\n    footnotesCollection,\n    collapseFootnotes,\n    backgroundColor,\n    backgroundMediaV2,\n    backgroundMediaStyle,\n    scrollSnap,\n    mobileCta,\n    showAiLocalizationBanner = [],\n    denseLayout,\n  } = props;\n\n  // This value is loaded here for testing.\n  // TODO: Add regression tests to very this value is set correctly.\n  const testFeature = featureFlags[Feature.TEST_FEATURE];\n\n  const pageBackgroundColor = backgroundColor ?? Config.theme?.defaultPageBackgroundColor;\n\n  // =================================================================================================\n  // Footnotes\n  // =================================================================================================\n  // TODO: This should probably be OL and children should be LI\n  const footnotes = footnotesCollection?.items?.map(footnoteProps => (\n    <Footnote key={footnoteProps.sys.id} {...footnoteProps} />\n  ));\n\n  const footnotesTitle = formatMessage({ id: 'footnotesTitle', defaultMessage: '' });\n\n  // Don't pass in a footnoteBlock if there are no footnotes\n  const footnoteBlock = footnotes?.length ? (\n    <FootnoteBlock title={footnotesTitle} isOpenInitially={!collapseFootnotes}>\n      {footnotes}\n    </FootnoteBlock>\n  ) : undefined;\n\n  // =================================================================================================\n  // AI Localization Banner\n  // =================================================================================================\n\n  const aiLocalizationBannerTitle = formatMessage({\n    id: 'aiLocalizationBannerTitle',\n    defaultMessage: '',\n  });\n  const aiLocalizationBannerDescription = formatMessage({\n    id: 'aiLocalizationBannerDescription',\n    defaultMessage: '',\n  });\n\n  const aiLocalizationBanner = showAiLocalizationBanner?.includes(currentLocale) ? (\n    <AiLocalizationBanner\n      title={aiLocalizationBannerTitle}\n      description={aiLocalizationBannerDescription}\n    />\n  ) : undefined;\n\n  // =================================================================================================\n  // All blocks from CMS\n  // =================================================================================================\n  // TODO: This should be using PageBlocksItem\n  const blocks: PageDataBlock[] = [];\n  blocks.push(...(blocksCollection?.items ?? []));\n\n  // =================================================================================================\n  // Convert blocks data to components and auto-break insertion\n  // =================================================================================================\n  const breakTemplates =\n    alternateBrandPropOverride?.breakTemplates ??\n    Config.theme?.breakTemplates ??\n    defaultBreakTemplates;\n  let templateIndex = 0;\n  let firstHeroOrBlockIndex = -1;\n\n  const blocksWithBreaks: { data: PageDataBlock; component: ReactElement }[] = [];\n\n  blocks.forEach((props, idx) => {\n    const { sys, __typename } = props;\n\n    const isLastBlock = idx === blocks.length - 1;\n\n    const prevBlock = blocks?.[idx - 1];\n    const nextBlock = blocks?.[idx + 1];\n\n    const blockBackgroundColor = (props as PageDataBlockWithBackgroundColor)?.backgroundColor;\n    const prevBackgroundColor = (prevBlock as PageDataBlockWithBackgroundColor)?.backgroundColor;\n    const nextBackgroundColor = (nextBlock as PageDataBlockWithBackgroundColor)?.backgroundColor;\n\n    const blockBrandBackgroundColor = (props as PageDataBlockWithBackgroundColor)\n      ?.brandBackgroundColor;\n    const prevBrandBackgroundColor = (prevBlock as PageDataBlockWithBackgroundColor)\n      ?.brandBackgroundColor;\n    const nextBrandBackgroundColor = (nextBlock as PageDataBlockWithBackgroundColor)\n      ?.brandBackgroundColor;\n\n    const blockHasBackgroundMedia = !!(props as BlockDataProps)?.backgroundMediaV2;\n    const prevBlockHasBackgroundMedia = !!(prevBlock as BlockDataProps)?.backgroundMediaV2;\n    const nextBlockHasBackgroundMedia = !!(nextBlock as BlockDataProps)?.backgroundMediaV2;\n\n    const blockEffectiveColor =\n      blockHasBackgroundMedia || (!blockBrandBackgroundColor && !blockBackgroundColor)\n        ? undefined\n        : blockBrandBackgroundColor ??\n          (getBackgroundClassName(blockBackgroundColor) as MotifScheme);\n\n    const nextEffectiveColor =\n      nextBlockHasBackgroundMedia || (!nextBrandBackgroundColor && !nextBackgroundColor)\n        ? undefined\n        : nextBrandBackgroundColor ?? (getBackgroundClassName(nextBackgroundColor) as MotifScheme);\n\n    // get index of first hero or block (basically anything thats not subnav)\n    // to guestimate above the fold\n    if (firstHeroOrBlockIndex === -1 && __typename !== 'SubNavigation') {\n      firstHeroOrBlockIndex = idx;\n    }\n\n    // Create component based on block type\n    switch (__typename) {\n      case 'Break': {\n        // Use the newer 'brandType' property if it exists, otherwise use the older 'type' property\n        const breakType = props.brandType ?? props.type;\n\n        // TODO: Extract this out into a mwp/components/Break.\n        if (breakType && breakType !== 'None') {\n          // Convert legacy BreakBackgroundColor to BreakBrandColor (MotifScheme)\n          const deprecatedTopColorAsBrand: BreakBrandColor | undefined = isSnapBrand\n            ? undefined\n            : props.topColor\n            ? props.topColor === 'Transparent'\n              ? 'Transparent'\n              : (getBackgroundClassName(props.topColor) as MotifScheme)\n            : undefined;\n\n          const deprecatedBottomColorAsBrand: BreakBrandColor | undefined = isSnapBrand\n            ? undefined\n            : props.bottomColor\n            ? props.bottomColor === 'Transparent'\n              ? 'Transparent'\n              : (getBackgroundClassName(props.bottomColor) as MotifScheme)\n            : undefined;\n\n          // Auto-detect from adjacent blocks: brandBackgroundColor, or convert\n          // backgroundColor to MotifScheme via getBackgroundClassName\n          const topColorFallback: BreakBrandColor =\n            prevBlockHasBackgroundMedia || (!prevBrandBackgroundColor && !prevBackgroundColor)\n              ? 'Transparent'\n              : prevBrandBackgroundColor ??\n                (getBackgroundClassName(prevBackgroundColor) as MotifScheme);\n\n          let bottomColorFallback: BreakBrandColor;\n\n          if (isLastBlock && !!footnoteBlock) {\n            bottomColorFallback = getBackgroundClassName(\n              footnoteBlockBackgroundColor\n            ) as MotifScheme;\n          } else {\n            bottomColorFallback =\n              nextBlockHasBackgroundMedia || (!nextBrandBackgroundColor && !nextBackgroundColor)\n                ? 'Transparent'\n                : nextBrandBackgroundColor ??\n                  (getBackgroundClassName(nextBackgroundColor) as MotifScheme);\n          }\n\n          // We need to default to the default motif scheme for Snap brand for a smoother transition from snapchat brand\n          // Priority: brandTopColor > topColor > prev block brandBackgroundColor > prev block backgroundColor\n          const topColor =\n            (isSnapBrand ? props.brandTopColor || MotifScheme.DEFAULT : props.brandTopColor) ??\n            deprecatedTopColorAsBrand ??\n            topColorFallback;\n          const bottomColor =\n            (isSnapBrand\n              ? props.brandBottomColor || MotifScheme.DEFAULT\n              : props.brandBottomColor) ??\n            deprecatedBottomColorAsBrand ??\n            bottomColorFallback;\n\n          const topColorClean = topColor === 'Transparent' ? undefined : (topColor as MotifScheme);\n          const bottomColorClean =\n            bottomColor === 'Transparent' ? undefined : (bottomColor as MotifScheme);\n\n          const { desktopSettings, mobileSettings } = getImageSourceSettings({\n            desktopHeight: props.media?.media?.height ?? 0,\n            mobileHeight: props.media?.mobileMedia?.height ?? 0,\n            enableHighDpi: props.media?.enableHighDpi,\n            quality: props.media?.quality,\n          });\n\n          const imgSrcs = combineImageSources({\n            desktop: getImageSources(props.media?.media.url, desktopSettings),\n            mobile: getImageSources(props.media?.mobileMedia?.url, mobileSettings),\n          });\n\n          blocksWithBreaks.push({\n            data: {\n              ...props,\n              brandTopColor: topColor,\n              brandBottomColor: bottomColor,\n            },\n            component: (\n              <BreakSDS\n                key={props.sys.id}\n                template={Template[breakType]}\n                imgSrcs={imgSrcs}\n                topColor={topColorClean}\n                bottomColor={bottomColorClean}\n                isOverlaid={props.isOverlaid && !isLastBlock}\n              />\n            ),\n          });\n        }\n        break;\n      }\n\n      case 'ScrollAnimatedSection': {\n        if (isMobile) {\n          const mobileContent = props.mobileContentCollection?.items ?? [];\n\n          for (const blockProps of mobileContent) {\n            const blockPropsAsDataProps = blockProps as BlockDataProps;\n\n            blocksWithBreaks.push({\n              data: props,\n              component: (\n                <Block\n                  key={sys.id}\n                  {...blockPropsAsDataProps}\n                  isPreviousSameBackgroundColor={\n                    blockPropsAsDataProps.backgroundColor === prevBackgroundColor\n                  }\n                  isNextSameBackgroundColor={\n                    blockPropsAsDataProps.backgroundColor === nextBackgroundColor\n                  }\n                  fullHeight={scrollSnap || blockPropsAsDataProps.fullHeight}\n                />\n              ),\n            });\n          }\n          break;\n        }\n\n        blocksWithBreaks.push({\n          data: props,\n          component: <ScrollAnimatedSection key={sys.id} {...props} />,\n        });\n        break;\n      }\n\n      case 'SubNavigation': {\n        blocksWithBreaks.push({\n          data: props,\n          component: (\n            <SubNavigation\n              key={sys.id}\n              items={props?.subNavigationItemsCollection?.items ?? []}\n              {...props}\n            />\n          ),\n        });\n        break;\n      }\n\n      case 'BlockHero': {\n        blocksWithBreaks.push({\n          data: props,\n          component: props.useLatestPost ? (\n            <LatestPostHero key={sys.id} backgroundColor={props.backgroundColor} />\n          ) : (\n            <Hero\n              key={sys.id}\n              {...props}\n              fitWindow={scrollSnap || props.fitWindow}\n              fallbackDate={slugContext.postedDate ?? slugContext.publishedAt}\n              shareable={slugContext.isShareable}\n              topics={slugContext.topics}\n            />\n          ),\n        });\n        break;\n      }\n\n      case 'LatestPosts': {\n        blocksWithBreaks.push({\n          data: props,\n          component: <LatestPostBlock {...props} key={sys.id} />,\n        });\n        break;\n      }\n\n      case 'MultiVideoBlock': {\n        blocksWithBreaks.push({\n          data: props,\n          component: <MultiVideoBlock key={sys.id} id={sys.id} />,\n        });\n        break;\n      }\n\n      case 'Block': {\n        blocksWithBreaks.push({\n          data: props,\n          component: (\n            <Block\n              key={sys.id}\n              {...props}\n              isPreviousSameBackgroundColor={props.backgroundColor === prevBackgroundColor}\n              isNextSameBackgroundColor={props.backgroundColor === nextBackgroundColor}\n              fullHeight={scrollSnap || props.fullHeight}\n              denseLayout={props.denseLayout ?? denseLayout}\n            />\n          ),\n        });\n        break;\n      }\n\n      case 'SplitBlock': {\n        blocksWithBreaks.push({\n          data: props,\n          component: <SplitBlock key={sys.id} {...props} />,\n        });\n        break;\n      }\n\n      case 'MultiValuePropBlock': {\n        blocksWithBreaks.push({\n          data: props,\n          component: <MultiValuePropBlock key={sys.id} {...props} />,\n        });\n        break;\n      }\n\n      case 'BlockTabs': {\n        blocksWithBreaks.push({\n          data: props,\n          component: <BlockTabs key={sys.id} {...props} />,\n        });\n        break;\n      }\n\n      case 'ImmersiveScrollBlock': {\n        blocksWithBreaks.push({\n          data: props,\n          component: <ImmersiveScrollBlock key={sys.id} {...props} />,\n        });\n        break;\n      }\n\n      default: {\n        const customBlocks = getCustomComponents();\n\n        if (__typename in customBlocks) {\n          const CustomComponent = customBlocks[__typename]!;\n\n          blocksWithBreaks.push({\n            data: props,\n            component: <CustomComponent key={sys.id} id={sys.id} />,\n          });\n        } else {\n          blocksWithBreaks.push({\n            // Putting in a dummy value for iteration safety.\n            data: {\n              __typename: 'Break',\n              sys: { id: '__generated_error' },\n              brandType: 'Straight',\n            },\n            component: (\n              <Fragment key={sys.id}>\n                {!Config.isCompilationModeProd &&\n                  `Dev error: Unknown component type ${__typename} with id ${sys.id}`}\n              </Fragment>\n            ),\n          });\n        }\n      }\n    }\n\n    // Auto-insert breaks\n    if (!isLastBlock) {\n      const skipBreak =\n        __typename === 'Break' ||\n        nextBlock?.__typename === 'Break' ||\n        __typename === 'SubNavigation' ||\n        nextBlock?.__typename === 'SubNavigation' ||\n        isCustomComponent(__typename) ||\n        isCustomComponent(nextBlock?.__typename) ||\n        (blockHasBackgroundMedia && nextBlockHasBackgroundMedia) ||\n        (blockEffectiveColor === nextEffectiveColor &&\n          !blockHasBackgroundMedia &&\n          !nextBlockHasBackgroundMedia) ||\n        breakTemplates.length <= 0;\n\n      // Auto-insert break if needed\n      if (!skipBreak) {\n        const configHeroBreakTemplate =\n          alternateBrandPropOverride?.heroBreakTemplate ?? Config.theme?.heroBreakTemplate;\n\n        let heroBreakTemplate: Template;\n\n        if (configHeroBreakTemplate === Template.None) {\n          heroBreakTemplate = Template.None;\n        } else if (configHeroBreakTemplate === Template.Straight) {\n          heroBreakTemplate = Template.Straight;\n        } else {\n          heroBreakTemplate = Template.Skirt3;\n        }\n\n        const template =\n          __typename === 'BlockHero' ? heroBreakTemplate : breakTemplates[templateIndex]!;\n\n        const brandTopColor = blockEffectiveColor;\n        const brandBottomColor = nextEffectiveColor;\n\n        const isOverlaid = false;\n\n        blocksWithBreaks.push({\n          data: {\n            __typename: 'Break',\n            sys: { id: '__generated' },\n            brandType: template,\n            brandTopColor,\n            brandBottomColor,\n            isOverlaid,\n          },\n          component: (\n            <BreakSDS\n              key={`break ${idx}`}\n              template={template}\n              topColor={brandTopColor}\n              bottomColor={brandBottomColor}\n              isOverlaid={isOverlaid}\n            />\n          ),\n        });\n\n        // Rotate template to use, unless this block is a Hero as that always uses a specific template\n        if (__typename !== 'BlockHero') {\n          templateIndex = (templateIndex + 1) % breakTemplates.length;\n        }\n      }\n    }\n  });\n\n  // =================================================================================================\n  // Add break spacers where 'Break' component overlays blocks/components\n  // =================================================================================================\n  const blocksToRender = blocksWithBreaks.map((block, idx) => {\n    const { component } = block;\n    const prevBlock = blocksWithBreaks?.[idx - 1];\n    const nextBlock = blocksWithBreaks?.[idx + 1];\n\n    const breakSpacerProps: {\n      preChildren?: ReactNode;\n      postChildren?: ReactNode;\n    } = {};\n\n    // If previous and/or next block is a 'Break' that overlays the block/component, inject a\n    // 'BreakSpacer' component as pre/post children to the block/component, which will counter\n    // the amount that the 'Break' overlays so that any content is not obscured and background\n    // media continues behind the break\n    // Do not add spacers for straight breaks as they will not obscure content\n    if (prevBlock && prevBlock.data.__typename === 'Break') {\n      // Use the newer 'brandType' property if it exists, otherwise use the older 'type' property\n      const prevBreakType = prevBlock?.data.brandType ?? prevBlock?.data.type;\n\n      if (prevBreakType !== Template.Straight && prevBreakType !== 'None') {\n        const prevTopColor = prevBlock.data.brandTopColor ?? prevBlock.data.topColor;\n        const prevBottomColor = prevBlock.data.brandBottomColor ?? prevBlock.data.bottomColor;\n\n        const topBreakOverlayType = getBreakOverlayType({\n          template: prevBreakType as Template,\n          isTopTransparent: !prevTopColor || prevTopColor === 'Transparent',\n          isBottomTransparent: !prevBottomColor || prevBottomColor === 'Transparent',\n          isOverlaid: prevBlock.data.isOverlaid,\n        });\n\n        breakSpacerProps.preChildren = <BreakSpacerSDS type={topBreakOverlayType} location=\"top\" />;\n      }\n    }\n\n    if (nextBlock && nextBlock.data.__typename === 'Break') {\n      // Use the newer 'brandType' property if it exists, otherwise use the older 'type' property\n      const nextBreakType = nextBlock?.data.brandType ?? nextBlock?.data.type;\n\n      if (nextBreakType !== Template.Straight && nextBreakType !== 'None') {\n        const nextTopColor = nextBlock.data.brandTopColor ?? nextBlock.data.topColor;\n        const nextBottomColor = nextBlock.data.brandBottomColor ?? nextBlock.data.bottomColor;\n\n        const bottomBreakOverlayType = getBreakOverlayType({\n          template: nextBreakType as Template,\n          isTopTransparent: !nextTopColor || nextTopColor === 'Transparent',\n          isBottomTransparent: !nextBottomColor || nextBottomColor === 'Transparent',\n          isOverlaid: nextBlock.data.isOverlaid,\n        });\n\n        breakSpacerProps.postChildren = (\n          <BreakSpacerSDS type={bottomBreakOverlayType} location=\"bottom\" />\n        );\n      }\n    }\n\n    // The last block should have a post child to add extra spacing.\n    if (!nextBlock && !breakSpacerProps.postChildren) {\n      breakSpacerProps.postChildren = (\n        <BreakSpacerSDS type={BreakOverlayType.TOP_HALF} location=\"bottom\" />\n      );\n    }\n\n    return cloneElement(component, breakSpacerProps);\n  });\n\n  // =================================================================================================\n  // Page Bottom Fixed Elements\n  // =================================================================================================\n  // This wrapper ensures that the footnote and AI localization banner are positioned correctly\n  // at the bottom of the page main content.\n  const pageBottomFixedElements =\n    footnoteBlock || aiLocalizationBanner ? (\n      <div className={pageBottomFixedElementsCss}>\n        {footnoteBlock}\n        {aiLocalizationBanner}\n      </div>\n    ) : undefined;\n\n  // =================================================================================================\n  // Content\n  // =================================================================================================\n\n  // New background media\n\n  const {\n    media: { imageSource, videoSource },\n    mobileMedia: { imageSource: mobileImageSource, videoSource: mobileVideoSource },\n    thumbnailSource,\n  } = useParseMediaContainer(backgroundMediaV2);\n\n  let imgSrcs: ImageSources | undefined;\n\n  if (backgroundMediaV2?.__typename === 'Image') {\n    const { desktopSettings, mobileSettings } = getImageSourceSettings({\n      desktopHeight: backgroundMediaV2.media?.height ?? 0,\n      mobileHeight: backgroundMediaV2.mobileMedia?.height ?? 0,\n      enableHighDpi: backgroundMediaV2.enableHighDpi,\n      quality: backgroundMediaV2.quality,\n    });\n\n    imgSrcs = combineImageSources({\n      desktop: getImageSources(imageSource, desktopSettings),\n      mobile: getImageSources(mobileImageSource, mobileSettings),\n    });\n  }\n\n  // set Page to ltr unless title points us to rtl\n  const dir = direction(title);\n\n  const content = (\n    <>\n      <DefinitionProvider>\n        <PictureContext.Provider value={pictureContextNoLazy}>\n          {blocksToRender.slice(0, firstHeroOrBlockIndex + 1)}\n        </PictureContext.Provider>\n        <PictureContext.Provider value={pictureContextLazy}>\n          {blocksToRender.slice(firstHeroOrBlockIndex + 1)}\n        </PictureContext.Provider>\n        <DefinitionOverlay />\n      </DefinitionProvider>\n      {pageBottomFixedElements}\n    </>\n  );\n\n  let banner: ReactNode = null;\n  let customBanner: ReactNode = null;\n\n  if (props?.banner?.__typename === 'Banner') {\n    const { contentfulDescriptionDataset } = getContentfulInspectorProps<BannerType>({\n      entryId: props.banner.sys.id,\n      fieldIds: ['contentfulDescription'],\n    });\n\n    banner = (\n      <Banner\n        className={pageStickyCss}\n        contentClassName={bannerContentContainerCss}\n        motifScheme={bannerMotifScheme}\n        backgroundColor={props.banner?.backgroundColor as BackgroundColor}\n        dataset={contentfulDescriptionDataset}\n      >\n        {renderRichTextWithElements(props.banner?.content as RichText | string)}\n      </Banner>\n    );\n  } else if (props?.banner?.__typename) {\n    const customBlocks = getCustomComponents();\n\n    if (customBlocks[props.banner.__typename]) {\n      const CustomComponent = customBlocks[props.banner.__typename]!;\n      customBanner = <CustomComponent id={props.banner.sys.id} />;\n    }\n  }\n\n  // =================================================================================================\n  // Render\n  // =================================================================================================\n  return (\n    <div\n      data-testid=\"page\"\n      ref={pageRef}\n      className={cx(\n        pageContainerCss,\n        pageMotifScheme ?? getBackgroundClassName(pageBackgroundColor),\n        {\n          [pageContainerWithSideNavCss]: hasSideNav,\n        },\n        minHeightCss,\n        'mwp-page'\n      )}\n      dir={dir}\n      data-test-feature={testFeature}\n      style={\n        {\n          [pageStickyHeightCssVar]: `${stickyHeightRef.current}px`,\n        } as CSSProperties\n      }\n    >\n      <Canonical localizedIn={props.localizedIn} />\n      <AlternateLang localizedIn={props.localizedIn} />\n      {!!metas && <Metas {...metas} />}\n      {!!metas?.schemasCollection?.items && <WebSchemas schemas={metas.schemasCollection.items} />}\n\n      {banner ? (\n        <div className={pageStickyCss} ref={stickyContainerRef}>\n          {banner}\n        </div>\n      ) : null}\n      <HeaderSDS title={title} />\n      {/* By including the HlsInitializer wrapper here, we are adding Hls playback support to the Page and any of its children */}\n      <HlsInitializer>\n        <PageSDS\n          motifScheme={pageMotifScheme}\n          backgroundColor={pageBackgroundColor}\n          backgroundImageSources={imgSrcs}\n          backgroundMediaStyle={backgroundMediaStyle}\n          backgroundVideoSource={videoSource}\n          gutterMatchesPageBackground={props.stretchPageBackgroundColor}\n          mobileBackgroundVideoSource={mobileVideoSource}\n          backgroundPosterSource={thumbnailSource}\n          className={cx({ [pageCss]: !hasSubNav, [pageWithSubNavCss]: hasSubNav })}\n          scrollSnap={scrollSnap}\n        >\n          {content}\n          {customBanner}\n          {isMobile && mobileCta && (\n            <PersistentCta\n              mobileCta={mobileCta}\n              shouldScrollToShow={\n                featureFlags[Feature.ENABLE_PERSISTENT_CTA_SCROLL_VISIBILITY] === 'true'\n              }\n            />\n          )}\n          <PageBottomStickyPortal className={stickyBottomCss} />\n          <PageFixedPortal className={pageFixedCss} />\n        </PageSDS>\n      </HlsInitializer>\n      <ActiveEventCountTracker />\n    </div>\n  );\n};\n\nPage.displayName = 'Page';\n", "/* eslint-disable no-misleading-character-class */\n// The above rule is disabled beacuse the RTL rangle is OK to match partial characters for our\n// purpose of detecting RTL chars.\n\n/**\n * Range for RTL characters. Copied from https://github.com/wooorm/direction.\n *\n * See https://www.ssec.wisc.edu/~tomw/java/unicode.html for explanation\n */\nconst rtlRange =\n  '\\u0591-\\u07FF' + // Hebrew (0500-05FF), Arabic Letters (0600-06FF) and Syriac (0700-074F)\n  '\\uFB1D-\\uFDFD' + // Hebrew and Arabic Letters and Ligatures, Farsi\n  '\\uFE70-\\uFEFC'; // Arabic Presentation Form B\n\nconst rtl = new RegExp(`[${rtlRange}]`, 'g');\n\n/** Detect direction of a string. */\nexport const direction = (source: string): 'rtl' | 'ltr' => {\n  if (!source) {\n    return 'ltr';\n  }\n\n  return rtl.test(source) ? 'rtl' : 'ltr';\n};\n", "import type { FC } from 'react';\nimport { useContext } from 'react';\nimport { Helmet } from 'react-helmet-async';\n\nimport { AppContext } from '../../AppContext';\nimport { filterMetadataUrl } from '../../helpers/filterMetadataUrl';\nimport { defaultLocale } from '../../helpers/locale';\n\ninterface AlternateLangProps {\n  /**\n   * Array of locales that a page is localized in. Defaults to en-US in case the field is undefined\n   * (this happens if the Page has no titles set yet)\n   */\n  localizedIn?: string[];\n}\n\n/**\n * Adds the locale alternate links.\n *\n * See this doc: https://developers.google.com/search/docs/advanced/crawling/localized-versions\n */\nexport const AlternateLang: FC<AlternateLangProps> = ({ localizedIn = [defaultLocale] }) => {\n  const { getCurrentUrl } = useContext(AppContext);\n\n  const url = filterMetadataUrl(getCurrentUrl());\n  url.searchParams.delete('lang');\n\n  const nonDefaultLocales = localizedIn.filter(locale => locale !== defaultLocale);\n\n  return (\n    <Helmet>\n      <link rel=\"alternate\" hrefLang=\"x-default\" href={url.href} />\n      <link key={defaultLocale} rel=\"alternate\" hrefLang={defaultLocale} href={url.href} />\n      {nonDefaultLocales?.map(locale => {\n        const localizedUrl = new URL(url.href);\n        localizedUrl.searchParams.set('lang', locale);\n\n        return <link key={locale} rel=\"alternate\" hrefLang={locale} href={localizedUrl.href} />;\n      })}\n    </Helmet>\n  );\n};\n", "import { Config } from '../config';\n\nexport const baseMetadataQueryParamsAllowlist = ['lang'];\n\nexport const getMetadataQueryParamsAllowlist = (\n  siteSpecificAllowlist: string[] = Config.metadataQueryParamsAllowlist ?? []\n): Set<string> => new Set([...baseMetadataQueryParamsAllowlist, ...siteSpecificAllowlist]);\n\n/**\n * Returns a URL suitable for canonical/hreflang metadata by dropping all query params except an\n * allowlist and always removing hash.\n */\nexport const filterMetadataUrl = (\n  currentUrl: string,\n  queryParamsAllowlist: Set<string> = getMetadataQueryParamsAllowlist()\n): URL => {\n  const originalUrl = new URL(currentUrl);\n  const filteredUrl = new URL(originalUrl.href);\n\n  filteredUrl.hash = '';\n  filteredUrl.search = '';\n\n  for (const [key, value] of originalUrl.searchParams.entries()) {\n    if (queryParamsAllowlist.has(key)) {\n      filteredUrl.searchParams.append(key, value);\n    }\n  }\n\n  return filteredUrl;\n};\n", "import type { FC } from 'react';\nimport { useContext } from 'react';\nimport { Helmet } from 'react-helmet-async';\n\nimport { AppContext } from '../../AppContext';\nimport { filterMetadataUrl } from '../../helpers/filterMetadataUrl';\nimport { defaultLocale } from '../../helpers/locale';\n\ninterface CanonicalProps {\n  /**\n   * Array of locales that a page is localized in. Defaults to en-US in case the field is undefined\n   * (this happens if the Page has no titles set yet)\n   */\n  localizedIn?: string[];\n}\n\n/** Adds canonical based on whether or not the page is localized in the current locale. */\nexport const Canonical: FC<CanonicalProps> = ({ localizedIn = [defaultLocale] }) => {\n  const { currentLocale, getCurrentUrl } = useContext(AppContext);\n\n  const url = filterMetadataUrl(getCurrentUrl());\n  url.searchParams.delete('lang');\n\n  if (currentLocale !== defaultLocale && localizedIn.includes(currentLocale)) {\n    url.searchParams.set('lang', currentLocale);\n  }\n\n  return (\n    <Helmet>\n      <link rel=\"canonical\" href={url.href} />\n    </Helmet>\n  );\n};\n", "import { css } from '@emotion/css';\nimport { GlobalComponentsContext } from '@snapchat/mw-global-components';\nimport { useGlobalComponentsContentfulQuery } from '@snapchat/mw-global-components-schema';\nimport kebabCase from 'lodash-es/kebabCase';\nimport head from 'lodash/head';\nimport { useContext } from 'react';\nimport type { Column } from 'react-table';\n\nimport {\n  Block,\n  Content,\n  MessageContext,\n  Spinner,\n  Table,\n} from '../../../../../../snap-design-system-marketing/src';\nimport { AppContext } from '../../../../AppContext';\nimport { useContentfulContext } from '../../../../components/useContentfulContext';\nimport { Config } from '../../../../config';\nimport { renderRichTextWithElements } from '../../../../utils/renderText/renderRichText';\nimport {\n  type CookieInformationDataProps,\n  type CookieModalShallowDataProps,\n  type CookieShallowProps,\n  cookieInformationQuery,\n} from './CookieInformationBlock.query';\n\nconst tableCss = css`\n  table-layout: fixed;\n  width: 100%;\n  overflow-wrap: break-word;\n  min-width: 600px;\n`;\n\nconst tableContainerCss = css`\n  overflow-x: auto;\n`;\n\nexport const CookieInformationBlock = () => {\n  const context = useContentfulContext();\n  const { globalApolloClient } = useContext(GlobalComponentsContext);\n  const { currentLocale } = useContext(AppContext);\n  const { formatMessage } = useContext(MessageContext);\n\n  const formattedName = formatMessage({ id: 'name', defaultMessage: 'Name' });\n  const formattedProvider = formatMessage({ id: 'provider', defaultMessage: 'Provider' });\n  const formattedDomains = formatMessage({ id: 'domains', defaultMessage: 'Domains' });\n  const formattedPurpose = formatMessage({ id: 'purpose', defaultMessage: 'Purpose' });\n  const formattedExpiration = formatMessage({ id: 'expiration', defaultMessage: 'Expiration' });\n  const formattedBlockTitle = formatMessage({\n    id: 'cookieInformation',\n    defaultMessage: 'Cookie Information',\n  });\n  const formattedUpdated = formatMessage({ id: 'updatedOn', defaultMessage: 'Updated On: ' });\n\n  const { data } = useGlobalComponentsContentfulQuery<CookieInformationDataProps>(\n    cookieInformationQuery,\n    { currentLocale: context.locale, isPreview: context.preview, isSSR: Config.isSSR },\n    { client: globalApolloClient }\n  );\n\n  const cookieModal = head(data?.cookieModalCollection.items) as\n    | CookieModalShallowDataProps\n    | undefined;\n\n  if (!cookieModal) {\n    return <Spinner />;\n  }\n\n  const cookieModalLastPublished = cookieModal.sys?.publishedAt;\n  const cookieModalPublishedDate = new Date(cookieModalLastPublished);\n  const formattedDate = cookieModalPublishedDate.toLocaleDateString(currentLocale, {\n    year: 'numeric',\n    month: 'long',\n    day: 'numeric',\n  });\n\n  const cookieCategories = cookieModal.cookieCategoriesCollection.items;\n\n  const tableColumns: Column<CookieShallowProps>[] = [\n    {\n      Header: formattedName,\n      accessor: 'name',\n    },\n    {\n      Header: formattedProvider,\n      accessor: (row: CookieShallowProps) => {\n        const rowProvider = row.provider;\n        return renderRichTextWithElements(rowProvider);\n      },\n    },\n    {\n      Header: formattedDomains,\n      accessor: (row: CookieShallowProps) => {\n        const rowDomains = row.domains;\n        return renderRichTextWithElements(rowDomains);\n      },\n    },\n    {\n      Header: formattedPurpose,\n      accessor: (row: CookieShallowProps) => {\n        const rowPurpose = row.purpose;\n        return renderRichTextWithElements(rowPurpose);\n      },\n    },\n    {\n      Header: formattedExpiration,\n      accessor: (row: CookieShallowProps) => {\n        const rowExpiration = row.expiration;\n        return renderRichTextWithElements(rowExpiration);\n      },\n    },\n  ];\n\n  const cookieTables = cookieCategories.map(category => {\n    const tableTitle = category.title;\n\n    const tableData: CookieShallowProps[] = category.cookiesCollection.items.map(\n      (cookie): CookieShallowProps => {\n        return {\n          name: cookie.name,\n          purpose: cookie.purpose,\n          provider: cookie.provider,\n          expiration: cookie.expiration,\n          domains: cookie.domains,\n        };\n      }\n    );\n\n    return (\n      <Content\n        anchorId={kebabCase(tableTitle.toLowerCase())}\n        title={tableTitle}\n        key={tableTitle}\n        body={\n          <section className={tableContainerCss}>\n            <Table<CookieShallowProps>\n              data={tableData}\n              columns={tableColumns}\n              className={tableCss}\n            />\n          </section>\n        }\n      />\n    );\n  });\n\n  return (\n    <Block\n      title={formattedBlockTitle}\n      maxColumns={1}\n      subtitle={`${formattedUpdated} ${formattedDate}`}\n    >\n      {cookieTables}\n    </Block>\n  );\n};\n", "import { gql } from '@apollo/client';\n\nimport type { Items } from '../../../../types/Items';\nimport type { RichText } from '../../../../types/RichText';\n\nexport const cookieInformationQuery = gql`\n  query CookieInformation($preview: Boolean!, $locale: String!) {\n    cookieModalCollection(limit: 1, preview: $preview, locale: $locale) {\n      items {\n        sys {\n          publishedAt\n        }\n        cookieCategoriesCollection(limit: 13) {\n          items {\n            title\n            cookiesCollection(limit: 50) {\n              items {\n                name\n                provider {\n                  json\n                }\n                domains {\n                  json\n                }\n                purpose {\n                  json\n                }\n                expiration {\n                  json\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n`;\n\nexport interface CookieInformationDataProps {\n  cookieModalCollection: Items<CookieModalShallowDataProps>;\n}\n\nexport interface CookieModalShallowDataProps {\n  sys: {\n    publishedAt: string;\n  };\n  cookieCategoriesCollection: Items<CookieCategoriesShallowProps>;\n}\n\nexport interface CookieCategoriesShallowProps {\n  title: string;\n  cookiesCollection: Items<CookieShallowProps>;\n}\n\nexport interface CookieShallowProps {\n  name: string;\n  provider: RichText;\n  domains: RichText;\n  purpose: RichText;\n  expiration: RichText;\n}\n", "import { type FC, useContext, useEffect } from 'react';\n\nimport { BlockShallow } from '../../../components/Block/BlockShallow';\nimport { PageLayoutContext } from '../../../context/PageLayoutContext';\nimport { type ContentfulIdVariable, useContentfulQuery } from '../../../hooks/useContentfulQuery';\nimport { CardBlockShallow } from '../components/CardBlock';\nimport { LatestNewsBlockShallow } from '../components/LatestNewsBlock';\nimport { SideMenu } from '../components/SideMenu/SideMenu';\nimport { SnapHomeHeroShallow } from '../components/SnapHomeHero';\nimport { SnapHomePageWrapper } from '../components/SnapHomePageWrapper';\nimport { type SnapHomePageProps, snapHomePageQuery } from './SnapHomePage.query';\nimport { contentContainerCss } from './SnapHomePage.styles';\n\nexport const SnapHomePage: FC<{ id: string }> = props => {\n  const { data } = useContentfulQuery<SnapHomePageProps, ContentfulIdVariable>(snapHomePageQuery, {\n    variables: { id: props.id },\n  });\n\n  const { setHasCustomSideNav } = useContext(PageLayoutContext);\n\n  useEffect(() => {\n    /* This component has a custom side nav that is part of a custom block rather than a side nav\n     * that is rendered at the slug-level.\n     *\n     * We set this property to true so that the footer can adjust accordingly.\n     */\n    setHasCustomSideNav?.(true);\n  }, [setHasCustomSideNav]);\n\n  const blocks = data?.snapHomePage.blocksCollection?.items ?? [];\n  const navItems = data?.snapHomePage.navigationItemsCollection?.items ?? [];\n\n  return (\n    <SnapHomePageWrapper>\n      {navItems.length ? <SideMenu navItems={navItems} /> : null}\n      <div className={contentContainerCss}>\n        {blocks?.map(block => {\n          const id = block.sys.id;\n\n          switch (block.__typename) {\n            case 'SnapHomeHero':\n              return <SnapHomeHeroShallow key={id} id={id} />;\n\n            case 'CardBlock':\n              return <CardBlockShallow key={id} id={id} />;\n\n            case 'NewsBlock':\n              return <LatestNewsBlockShallow key={id} id={id} />;\n\n            case 'Block':\n              return <BlockShallow key={id} {...block} />;\n\n            default:\n              return null;\n          }\n        })}\n      </div>\n    </SnapHomePageWrapper>\n  );\n};\n", "import type { FC } from 'react';\n\nimport type { ContentfulIdVariable } from '../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport type { ContentfulSysProps } from '../../types/contentful';\nimport { Block } from './Block';\nimport type { BlockDataHandlerProps } from './query';\nimport { query } from './query';\n\ntype BlockShallowProps = ContentfulSysProps;\n\nexport const BlockShallow: FC<BlockShallowProps> = props => {\n  const { data } = useContentfulQuery<BlockDataHandlerProps, ContentfulIdVariable>(query, {\n    variables: { id: props.sys.id },\n  });\n\n  if (!data?.block) return null;\n\n  return <Block {...data.block} />;\n};\n", "import { cx } from '@emotion/css';\nimport { Alignment, Block as BlockSDS, useIsMobile } from '@snapchat/snap-design-system-marketing';\nimport { type FC, useMemo } from 'react';\n\nimport { useContentfulImages } from '../../../../../../contentful-client/src/useContentfulImages';\nimport { CallToAction } from '../../../../components/CallToAction';\nimport { AnimatedMediaCard } from '../AnimatedMediaCard';\nimport type { CardBlockDataProps } from './CardBlock.query';\nimport {\n  cardContainerCss,\n  cardContainerWithCtasCss,\n  cardContainerWithEyebrowCss,\n} from './CardBlock.styles';\n\nexport const CardBlock: FC<CardBlockDataProps> = ({\n  callsToActionCollection,\n  cardsCollection,\n  eyebrow,\n  textAlignment = Alignment.Center,\n  textAlignmentMobile = Alignment.Center,\n}) => {\n  const { getImageSources } = useContentfulImages();\n  const isMobile = useIsMobile();\n\n  const numberOfColumns = useMemo(() => {\n    if (isMobile) {\n      return 1;\n    }\n\n    return cardsCollection?.items?.length === 3 ? 3 : 2;\n  }, [isMobile, cardsCollection?.items?.length]);\n\n  const callsToAction = callsToActionCollection?.items?.map(item => (\n    <CallToAction key={item.sys.id} {...item} />\n  ));\n\n  return (\n    <BlockSDS\n      callsToAction={callsToAction}\n      eyebrow={eyebrow}\n      maxColumns={numberOfColumns}\n      titleAlignment={textAlignment}\n      titleAlignmentMobile={textAlignmentMobile}\n    >\n      <div\n        className={cx(cardContainerCss, {\n          [cardContainerWithEyebrowCss]: !!eyebrow,\n          [cardContainerWithCtasCss]: !!callsToAction?.length,\n        })}\n      >\n        {cardsCollection?.items?.map(item => (\n          <AnimatedMediaCard\n            key={item.sys.id}\n            url={item.url}\n            backgroundImageSources={getImageSources(item.backgroundMedia.url)}\n            foregroundImageSources={getImageSources(item.foregroundMedia.url)}\n          />\n        ))}\n      </div>\n    </BlockSDS>\n  );\n};\n", "import type { ImageSources } from '@snapchat/snap-design-system-marketing';\nimport { Picture as PictureSDS } from '@snapchat/snap-design-system-marketing';\nimport type { ReactElement } from 'react';\nimport { useContext } from 'react';\n\nimport { Anchor } from '../../../../components/Anchor';\nimport { ElementLocation } from '../../../../context/ElementLocationContext/ElementLocationContext';\nimport { shouldFlushLogs } from '../../../../helpers/getLocalPath';\nimport { logger, logUserEvent } from '../../../../helpers/logging';\nimport { UserAction } from '../../../../types/events';\nimport {\n  animatedMediaCardBackgroundImageCss,\n  animatedMediaCardCss,\n  animatedMediaCardForegroundImageCss,\n  animatedMediaCardPictureCss,\n  animatedMediaCardWrapperCss,\n} from './AnimatedMediaCard.styles';\n\ntype AnimatedMediaCardProps = {\n  url: string;\n  backgroundImageSources?: ImageSources;\n  foregroundImageSources?: ImageSources;\n};\n\nexport function AnimatedMediaCard({\n  url,\n  backgroundImageSources,\n  foregroundImageSources,\n}: AnimatedMediaCardProps): ReactElement {\n  const elementLocation = useContext(ElementLocation).elementLocation;\n\n  const onClickHandler = () => {\n    logUserEvent({\n      eventCategory: 'AnimatedMediaCard',\n      eventAction: UserAction.Click,\n      eventLabel: `to: ${url}`,\n      context: { targetUrl: url, elementLocation },\n    });\n\n    if (shouldFlushLogs(url)) {\n      void logger.flush();\n    }\n  };\n\n  return (\n    <Anchor href={url} className={animatedMediaCardCss} onClick={onClickHandler}>\n      <div className={animatedMediaCardWrapperCss}>\n        <PictureSDS\n          imgSrcs={backgroundImageSources}\n          imgClassName={animatedMediaCardBackgroundImageCss}\n          className={animatedMediaCardPictureCss}\n        />\n      </div>\n      <PictureSDS\n        imgSrcs={foregroundImageSources}\n        imgClassName={animatedMediaCardForegroundImageCss}\n        className={animatedMediaCardPictureCss}\n      />\n    </Anchor>\n  );\n}\n", "import { css } from '@emotion/css';\nimport { m, smallMobileMediaQuery } from '@snapchat/snap-design-system-marketing';\n\nexport const animatedMediaCardForegroundImageCss = css`\n  height: 100%;\n  object-fit: contain;\n  pointer-events: none;\n  position: relative;\n  width: 65%;\n`;\n\nexport const animatedMediaCardCss = css`\n  align-items: center;\n  border: 2px solid ${m('--palette-black-v50')};\n  border-radius: ${m('--border-radius-l')};\n  box-shadow: none;\n  display: flex;\n  justify-content: center;\n  height: 185px;\n  overflow: hidden;\n  position: relative;\n  transition: border-color 0.2s linear, box-shadow 0.2s linear;\n  width: 100%;\n\n  :hover {\n    border-color: ${m('--palette-black-v200')};\n    box-shadow: ${m('--box-shadow-m')};\n  }\n\n  ${smallMobileMediaQuery} {\n    height: 148px;\n  }\n`;\n\nexport const animatedMediaCardWrapperCss = css`\n  align-items: center;\n  bottom: 0;\n  display: flex;\n  justify-content: center;\n  left: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n\n  img {\n    transition: transform 0.2s linear;\n  }\n\n  :hover img {\n    transform: scale(1.2);\n  }\n`;\n\nexport const animatedMediaCardBackgroundImageCss = css`\n  height: 100%;\n  object-fit: cover;\n  width: 100%;\n`;\n\nexport const animatedMediaCardPictureCss = css`\n  display: flex;\n  justify-content: center;\n  height: 100%;\n  width: 100%;\n`;\n", "import { css } from '@emotion/css';\nimport { m, twoColumnCollapseMediaQuery } from '@snapchat/snap-design-system-marketing';\n\nexport const cardContainerCss = css`\n  display: grid;\n  gap: ${m('--spacing-xl')};\n  grid-template-columns: repeat(2, minmax(0, 1fr));\n\n  ${twoColumnCollapseMediaQuery} {\n    gap: ${m('--spacing-m')};\n    grid-template-columns: minmax(0, 1fr);\n  }\n`;\n\nexport const cardContainerWithEyebrowCss = css`\n  margin-top: ${m('--spacing-xl')};\n`;\n\nexport const cardContainerWithCtasCss = css`\n  margin-bottom: ${m('--spacing-l')};\n`;\n", "import type { Alignment } from '@snapchat/snap-design-system-marketing';\nimport { gql } from 'graphql-tag';\n\nimport { ctaFragment } from '../../../../components/CallToAction';\nimport type { CallToActionDataProps } from '../../../../components/CallToAction/types';\nimport { fragments as assetsFragments } from '../../../../components/Media';\nimport type { MediaDataProps } from '../../../../components/Media/types';\nimport type { ContentfulSysProps } from '../../../../types/contentful';\nimport type { Items } from '../../../../types/Items';\nimport { contentfulSysIdFragment } from '../../../../utils/contentful/contentfulQuery';\n\nconst animatedMediaCardFragment = gql`\n  fragment AnimatedMediaCardAll on AnimatedMediaCard {\n    ...ContentfulSysId\n    backgroundMedia {\n      ...AssetAll\n    }\n    foregroundMedia {\n      ...AssetAll\n    }\n    url\n  }\n  ${assetsFragments.all}\n  ${contentfulSysIdFragment}\n`;\n\nconst cardBlockFragment = gql`\n  fragment CardBlockAll on CardBlock {\n    ...ContentfulSysId\n    eyebrow\n    cardsCollection(limit: 4) {\n      items {\n        ...AnimatedMediaCardAll\n      }\n    }\n    callsToActionCollection(limit: 9) {\n      items {\n        ... on CallToAction {\n          ...CallToActionAll\n        }\n      }\n    }\n    textAlignment\n    textAlignmentMobile\n  }\n  ${ctaFragment}\n  ${contentfulSysIdFragment}\n  ${animatedMediaCardFragment}\n`;\n\nexport const cardBlockQuery = gql`\n  query CardBlockQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    cardBlock(preview: $preview, locale: $locale, id: $id) {\n      ...ContentfulSysId\n      ...CardBlockAll\n    }\n  }\n  ${contentfulSysIdFragment}\n  ${cardBlockFragment}\n`;\n\nexport type CardBlockDataHandlerProps = {\n  cardBlock: CardBlockDataProps;\n};\n\nexport type CardBlockDataProps = ContentfulSysProps & {\n  callsToActionCollection?: Items<CallToActionDataProps>;\n  cardsCollection: Items<CardBlockItemDataProps>;\n  eyebrow?: string;\n  textAlignment?: Alignment;\n  textAlignmentMobile?: Alignment;\n};\n\nexport type CardBlockItemDataProps = ContentfulSysProps & {\n  backgroundMedia: MediaDataProps;\n  foregroundMedia: MediaDataProps;\n  url: string;\n};\n", "import type { FC } from 'react';\n\nimport type { ContentfulIdVariable } from '../../../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../../../hooks/useContentfulQuery';\nimport { CardBlock } from './CardBlock';\nimport { type CardBlockDataHandlerProps, cardBlockQuery } from './CardBlock.query';\n\nexport const CardBlockShallow: FC<{ id: string }> = props => {\n  /*\n    TODO: move the query logic to the SnapHomePage component. We should only need a single query to\n    fetch all of the content, except for the cross-space query for fetching Newsroom tiles.\n  */\n  const { data } = useContentfulQuery<CardBlockDataHandlerProps, ContentfulIdVariable>(\n    cardBlockQuery,\n    {\n      variables: { id: props.id },\n    }\n  );\n\n  if (!data?.cardBlock) return null;\n\n  return <CardBlock {...data.cardBlock} />;\n};\n", "import { css } from '@emotion/css';\nimport {\n  m,\n  MotifComponent,\n  twoColumnCollapseMediaQuery,\n} from '@snapchat/snap-design-system-marketing';\n\nexport const galleryContainerCss = css`\n  ${twoColumnCollapseMediaQuery} {\n    .${MotifComponent.GALLERY} > * {\n      width: 100%;\n    }\n  }\n`;\n\nexport const galleryContainerWithEyebrowCss = css`\n  margin-top: ${m('--spacing-xl')};\n`;\n", "import { Site } from '@snapchat/mw-common';\nimport { contentfulSpaceIds, productionContentTokens } from '@snapchat/mw-contentful-schema';\nimport { useContext, useMemo } from 'react';\n\nimport { AppContext } from '../../../AppContext';\nimport type { ContentfulConfiguration } from '../../../configTypes';\nimport { defaultLocale } from '../../../helpers/locale';\nimport { getOrCreateApolloClient } from '../../../utils/contentful/ContentfulClientCache';\n\nexport const useNewsroomContentfulContext = () => {\n  const { currentLocale } = useContext(AppContext);\n  const newsroomLocale = newsroomLocales.has(currentLocale) ? currentLocale : defaultLocale;\n\n  const newsroomContext = useMemo(() => {\n    const contentfulConfig: ContentfulConfiguration = {\n      spaceId: contentfulSpaceIds[Site.NEWSROOM],\n      environmentName: 'production',\n      accessToken: productionContentTokens[Site.NEWSROOM],\n    };\n\n    const apolloClient = getOrCreateApolloClient(newsroomLocale, [\n      contentfulConfig,\n      {\n        Entry: ['Tile'],\n      },\n      {},\n    ]);\n\n    return {\n      locale: newsroomLocale,\n      preview: false,\n      fetchPolicy: 'cache-first',\n      apolloClient,\n    };\n  }, [newsroomLocale]);\n\n  return newsroomContext;\n};\n\n/**\n * Newsroom.snap.com website does not include all of the locales that exist on snap.com. We need to\n * use the default locale (en-US) when a user sees newsroom content outside of the locales bellow.\n */\nexport const newsroomLocales = new Set<string>([\n  'ar',\n  'bn-BD',\n  'bn-IN',\n  'da-DK',\n  'de-DE',\n  'el-GR',\n  'en-GB',\n  'en-US',\n  'es-AR',\n  'es-ES',\n  'es-MX',\n  'es',\n  'fi-FI',\n  'fil-PH',\n  'fr-FR',\n  'gu-IN',\n  'hi-IN',\n  'id-ID',\n  'it-IT',\n  'ja-JP',\n  'kn-IN',\n  'ko-KR',\n  'ml-IN',\n  'mr-IN',\n  'ms-MY',\n  'nb-NO',\n  'nl-NL',\n  'pa',\n  'pl-PL',\n  'pt-BR',\n  'pt-PT',\n  'ro-RO',\n  'ru-RU',\n  'sv-SE',\n  'ta-IN',\n  'te-IN',\n  'th-TH',\n  'tr-TR',\n  'ur-PK',\n  'vi-VN',\n  'zh-Hans',\n  'zh-Hant',\n]);\n", "import type { ExecutionResult } from \"graphql\";\n\nimport type { NetworkError, GraphQLErrors } from \"../../errors/index.js\";\nimport { Observable } from \"../../utilities/index.js\";\nimport type { Operation, FetchResult, NextLink } from \"../core/index.js\";\nimport { ApolloLink } from \"../core/index.js\";\n\nexport interface ErrorResponse {\n  graphQLErrors?: GraphQLErrors;\n  networkError?: NetworkError;\n  response?: ExecutionResult;\n  operation: Operation;\n  forward: NextLink;\n}\n\nexport namespace ErrorLink {\n  /**\n   * Callback to be triggered when an error occurs within the link stack.\n   */\n  export interface ErrorHandler {\n    (error: ErrorResponse): Observable<FetchResult> | void;\n  }\n}\n\n// For backwards compatibility.\nexport import ErrorHandler = ErrorLink.ErrorHandler;\n\nexport function onError(errorHandler: ErrorHandler): ApolloLink {\n  return new ApolloLink((operation, forward) => {\n    return new Observable((observer) => {\n      let sub: any;\n      let retriedSub: any;\n      let retriedResult: any;\n\n      try {\n        sub = forward(operation).subscribe({\n          next: (result) => {\n            if (result.errors) {\n              retriedResult = errorHandler({\n                graphQLErrors: result.errors,\n                response: result,\n                operation,\n                forward,\n              });\n\n              if (retriedResult) {\n                retriedSub = retriedResult.subscribe({\n                  next: observer.next.bind(observer),\n                  error: observer.error.bind(observer),\n                  complete: observer.complete.bind(observer),\n                });\n                return;\n              }\n            }\n            observer.next(result);\n          },\n          error: (networkError) => {\n            retriedResult = errorHandler({\n              operation,\n              networkError,\n              //Network errors can return GraphQL errors on for example a 403\n              graphQLErrors:\n                networkError &&\n                networkError.result &&\n                networkError.result.errors,\n              forward,\n            });\n            if (retriedResult) {\n              retriedSub = retriedResult.subscribe({\n                next: observer.next.bind(observer),\n                error: observer.error.bind(observer),\n                complete: observer.complete.bind(observer),\n              });\n              return;\n            }\n            observer.error(networkError);\n          },\n          complete: () => {\n            // disable the previous sub from calling complete on observable\n            // if retry is in flight.\n            if (!retriedResult) {\n              observer.complete.bind(observer)();\n            }\n          },\n        });\n      } catch (e) {\n        errorHandler({ networkError: e as Error, operation, forward });\n        observer.error(e);\n      }\n\n      return () => {\n        if (sub) sub.unsubscribe();\n        if (retriedSub) sub.unsubscribe();\n      };\n    });\n  });\n}\n\nexport class ErrorLink extends ApolloLink {\n  private link: ApolloLink;\n  constructor(errorHandler: ErrorLink.ErrorHandler) {\n    super();\n    this.link = onError(errorHandler);\n  }\n\n  public request(\n    operation: Operation,\n    forward: NextLink\n  ): Observable<FetchResult> | null {\n    return this.link.request(operation, forward);\n  }\n}\n", "import type { DocumentNode } from '@apollo/client/core';\nimport type { OperationDefinitionNode } from 'graphql';\n\n/** Returns name of an apollo query for debugging. */\nexport function getQueryName(query: DocumentNode): string {\n  const sourceName = query.loc?.source.name;\n  const definitionName = query.definitions\n    .filter(def => def.kind === 'OperationDefinition')\n    .map(def => def as OperationDefinitionNode)\n    .find(def => def.operation === 'query')?.name?.value;\n\n  return definitionName ?? sourceName ?? 'Anonymous';\n}\n", "import type {\n  Cache,\n  DataProxy,\n  InMemoryCacheConfig,\n  NormalizedCacheObject,\n  OperationVariables,\n  PossibleTypesMap,\n  Reference,\n} from '@apollo/client';\nimport { defaultDataIdFromObject, InMemoryCache, isReference } from '@apollo/client';\nimport type {\n  KeyFieldsFunction,\n  TypePolicies,\n  TypePolicy,\n} from '@apollo/client/cache/inmemory/policies';\n\nimport type { ContentfulSysProps } from '../../types/contentful';\nimport { getTracer } from '../tracing';\nimport { getQueryName } from './getQueryName';\n\n/** Our overwrides of the Apollo in memory cache. */\nclass ContentfulInMemoryCache extends InMemoryCache {\n  writeQuery<TD, TV>(options: DataProxy.WriteQueryOptions<TD, TV>): Reference | undefined {\n    const trace = getTracer().startSpan(`InMemoryCache.writeQuery: ${getQueryName(options.query)}`);\n    const result = super.writeQuery(options);\n    trace.endSpan();\n    return result;\n  }\n\n  diff<TData, TVariables extends OperationVariables = OperationVariables>(\n    options: Cache.DiffOptions<TData, TVariables>\n  ): DataProxy.DiffResult<TData> {\n    const trace = getTracer().startSpan(`InMemoryCache.diff: ${getQueryName(options.query)}`);\n    const result = super.diff(options);\n    trace.endSpan();\n    return result;\n  }\n\n  readQuery<QueryType, TVariables = unknown>(\n    options: Cache.ReadQueryOptions<QueryType, TVariables>,\n    optimistic?: boolean | undefined\n  ): QueryType | null {\n    const trace = getTracer().startSpan(`InMemoryCache.readQuery: ${getQueryName(options.query)}`);\n    const result = super.readQuery(options, optimistic);\n    trace.endSpan();\n    return result;\n  }\n}\n\n/**\n * Creates an InMemoryCache for apollo that is catered to be used w/ Contentful.\n *\n * Namely it tells the memory processor the shape of the objects, so that every \"Entry\" is known to\n * have a \"sys.id\".\n */\nexport function createContentfulCache(\n  fragments: PossibleTypesMap,\n  apolloState?: NormalizedCacheObject\n): ContentfulInMemoryCache {\n  const keyFields: KeyFieldsFunction = (storeObject, context) => {\n    const entry = storeObject as unknown as ContentfulSysProps;\n\n    if (entry.sys?.id) {\n      return `${context.typename}:${entry.sys.id}`;\n    }\n\n    if (isReference(entry.sys)) {\n      return `${context.typename}:${entry.sys.__ref.split(':')[1]}`;\n    }\n\n    // This isn't a hard error, so we don't log it. It's meant to warn developers that they didn't\n    // include the sys props. And this isn't a warning because some pages throw 1000s of these and\n    // collecting stack traces crashes the page.\n    console.info(\n      `Apollo Query missing { sys { id }}. Add '...ContentfulSysId' field. Type: ${context.typename}`\n    );\n\n    return defaultDataIdFromObject(storeObject);\n  };\n\n  // See: https://www.apollographql.com/docs/react/caching/cache-configuration#typepolicy-fields\n  const typePolicies: TypePolicies = Object.fromEntries(\n    fragments.Entry!.flatMap(typeName => [\n      // [`${typeName}Collection`, { keyFields: [] } as TypePolicy],\n      [typeName, { keyFields } as TypePolicy],\n    ])\n  );\n\n  const cacheOptions: InMemoryCacheConfig = {\n    possibleTypes: fragments,\n    typePolicies,\n  };\n\n  const cache = new ContentfulInMemoryCache(cacheOptions);\n\n  if (apolloState) {\n    const restoreSpan = getTracer().startSpan('restoringContentfulCache');\n    cache.restore(apolloState);\n    restoreSpan.endSpan();\n  }\n\n  return cache;\n}\n", "import { ApolloLink } from '@apollo/client';\nimport type { ASTKindToNode, Visitor } from 'graphql';\nimport { visit } from 'graphql';\nimport cloneDeep from 'lodash-es/cloneDeep';\n\nconst createShortNameGenerator = (prefix = '') => {\n  let count = 0;\n  return () => `${prefix}${++count}`;\n};\n\n/**\n * An ApolloLink that dynamically minifies outgoing GraphQL queries.\n *\n * @remarks\n * This link provides a client-side-only solution for reducing network payload size. It is essential\n * when using 3rd-party GraphQL APIs (like Contentful) that do not support Automatic Persisted\n * Queries (APQ).\n *\n * ### How It Works\n *\n * This link is **dynamic** and **stateless**. It processes each query individually, requiring no\n * pre-configured maps. The process is:\n *\n * 1. **Pass 1: Scan & Map** A read-only `visit` walks the AST to find all `VariableDefinition` and\n *    `FragmentDefinition` nodes.\n * 2. **Map Generation** It dynamically generates short, unique names (e.g., `v1`, `f1`) for each\n *    definition and stores them in `variableMap` and `fragmentMap`.\n * 3. **Variable Object Transform** It immediately uses `variableMap` to rename the keys in the\n *    `operation.variables` object (e.g., `{ preview: true }` becomes `{ v1: true }`).\n * 4. **Pass 2: Query AST Transform** It clones `operation.query` (to protect the cache) and runs a\n *    _second_ `visit` call. This pass uses a dedicated `visitor` object to rename all definitions\n *    (`VariableDefinition`, `FragmentDefinition`) and usages (`Variable`, `FragmentSpread`) with\n *    the new short names.\n * 5. **Forward** The fully minified `operation` (query + variables) is passed to the next link in the\n *    chain.\n *\n * @example\n *\n * ```typescript\n * import { ApolloClient, InMemoryCache, createHttpLink } from '@apollo/client';\n * import { queryOptimizeVisitor } from './queryOptimizeVisitor'; // Name of this file\n *\n * const httpLink = createHttpLink({ uri: '...' });\n *\n * const client = new ApolloClient({\n *   cache: new InMemoryCache(),\n *   link: queryOptimizeVisitor.concat(httpLink),\n * });\n * ```\n *\n * @see {@link https://www.apollographql.com/docs/react/api/link/introduction | Apollo Link documentation}\n * @see {@link https://graphql.org/graphql-js/language/#visit | GraphQL 'visit' function}\n */\nexport const queryOptimizeVisitor = new ApolloLink((operation, forward) => {\n  const fragmentMap: { [key: string]: string } = {};\n  const variableMap: { [key: string]: string } = {};\n\n  // Create new generators for this specific query\n  const getNextFragmentName = createShortNameGenerator('f');\n  const getNextVariableName = createShortNameGenerator('v');\n\n  // Walk the AST to find all definitions and assign them a new, short name in our maps.\n  visit(operation.query, {\n    VariableDefinition: node => {\n      const originalName = node.variable.name.value;\n\n      if (!variableMap[originalName]) {\n        variableMap[originalName] = getNextVariableName();\n      }\n    },\n    FragmentDefinition: node => {\n      const originalName = node.name.value;\n\n      if (!fragmentMap[originalName]) {\n        fragmentMap[originalName] = getNextFragmentName();\n      }\n    },\n  });\n\n  // transform `operation.variables`\n  // { \"preview\": true } must become { \"v1\": true }\n  const newVariables: { [key: string]: string } = {};\n\n  for (const key in operation.variables) {\n    const newKey = variableMap[key] || key; // Get the minified name\n    newVariables[newKey] = operation.variables[key];\n  }\n  operation.variables = newVariables;\n\n  // Clone the query to avoid mutating the cached original\n  const newQueryAst = cloneDeep(operation.query);\n\n  const visitor: Partial<Visitor<ASTKindToNode>> = {\n    VariableDefinition: node => {\n      const newName = variableMap[node.variable.name.value];\n\n      if (!newName) {\n        return false;\n      }\n\n      return {\n        ...node,\n        variable: { ...node.variable, name: { ...node.variable.name, value: newName } },\n      };\n    },\n    Variable: node => {\n      const newName = variableMap[node.name.value];\n\n      if (!newName) {\n        return false;\n      }\n\n      return { ...node, name: { ...node.name, value: newName } };\n    },\n    FragmentDefinition: node => {\n      const newName = fragmentMap[node.name.value];\n\n      if (!newName) {\n        return false;\n      }\n\n      return { ...node, name: { ...node.name, value: newName } };\n    },\n    FragmentSpread: node => {\n      const newName = fragmentMap[node.name.value];\n\n      if (!newName) {\n        return false;\n      }\n\n      return { ...node, name: { ...node.name, value: newName } };\n    },\n  };\n\n  // Run the transform and replace the query on the operation\n  operation.query = visit(newQueryAst, visitor);\n\n  // Send the minified operation on its way\n  return forward(operation);\n});\n", "import { ApolloLink, Observable } from '@apollo/client';\n\nimport { logTiming } from '../../helpers/logging';\n\n/* NOTE:\n   There is a limitation with Apollo where you need to wrap operations in new Operation/Observer\n   rather than append additional subcribers.  Appending causes the operation to be fired multiple times.\n   Relevant GitHub Thread: https://github.com/apollographql/apollo-link/issues/298\n\n   Implementation is based on this example from the Apollo GraphQL repository:\n   https://github.com/apollographql/apollo-link/blob/638b78672a9b4adc5283e5710150da701e8e4bbd/packages/apollo-link-error/src/index.ts\n */\n\n/**\n * Apollo link that records request latency.\n *\n * Tries to extract helpful headers from the contentful response.\n *\n * This is meant to be used as a debugging log tool for troubleshooting responses from contentful.\n */\nexport const requestLatencyLogLink = new ApolloLink((operation, forward) => {\n  const queryName = operation.operationName;\n  const locale = operation.variables.locale ?? 'en-US';\n  const eventCategory = 'Contentful';\n  const eventVariable = 'request_duration';\n  const requestUrl = operation.getContext().currentUrl as string;\n  // NOTE: We log the path now to be able to analyze slower queries on certain sites/pages.\n\n  const requestPath = requestUrl ? new URL(requestUrl).pathname : '/';\n  // TODO: Consider adding request complexity and response size here.\n  const logContext = {\n    queryName,\n    locale,\n    requestPath,\n  };\n\n  // This is a wrapper around the original operation that we can use to measure latency.\n  return new Observable(latencyObserver => {\n    // NOTE: Setting this here has some overhead, but it's typically <0.01ms.\n    operation.setContext({ startMs: performance.now() });\n\n    const subscription = forward(operation).subscribe({\n      // Forward to next link in the chain.\n      next: result => {\n        latencyObserver.next(result);\n      },\n\n      // Fires on going back up the chain on success.\n      complete: () => {\n        const durationMs = performance.now() - operation.getContext().startMs;\n        const response = operation.getContext().response as Response;\n        const responseStatus = response?.status ?? 200;\n\n        logTiming({\n          eventCategory,\n          eventVariable,\n          eventValue: durationMs,\n          eventLabel: null,\n          context: {\n            ...logContext,\n            responseStatus,\n            contentfulRequestStatus: 'complete',\n            // NOTE: These headers aren't being logged on the client for some reason.\n            // TODO: Figure out why. They're in the network tab but are absent from the headers here.\n            // Works fine on the server.\n            'x-contentful-region': response?.headers?.get('x-contentful-region'),\n            'x-cache': response?.headers?.get('x-cache'),\n            // When contentful support is contacted, they want these request ids provided to them.\n            'x-contentful-request-id': response?.headers?.get('x-contentful-request-id'),\n            'x-served-by': response?.headers?.get('x-served-by'),\n          },\n        });\n\n        latencyObserver.complete();\n      },\n\n      // Fires on going back up the chain on error.\n      error: error => {\n        const durationMs = performance.now() - operation.getContext().startMs;\n        const response = operation.getContext().response as Response;\n        const responseStatus = response?.status ?? 500;\n\n        logTiming({\n          eventCategory,\n          eventVariable,\n          eventValue: durationMs,\n          eventLabel: null,\n\n          context: {\n            ...logContext,\n            responseStatus,\n            // NOTE: The error is logged in a separate link and does not need to be replicated here.\n            contentfulRequestStatus: 'error',\n            // NOTE: These headers aren't being logged on the client for some reason.\n            // TODO: Figure out why. They're in the network tab but are absent from the headers here.\n            // Works fine on the server.\n            'x-contentful-region': response?.headers?.get('x-contentful-region'),\n            'x-cache': response?.headers?.get('x-cache'),\n            // When contentful support is contacted, they want these request ids provided to them.\n            'x-contentful-request-id': response?.headers?.get('x-contentful-request-id'),\n            'x-served-by': response?.headers?.get('x-served-by'),\n          },\n        });\n\n        latencyObserver.error(error);\n      },\n    });\n\n    return () => {\n      subscription.unsubscribe();\n    };\n  });\n});\n", "import type {\n  HttpOptions,\n  NormalizedCacheObject,\n  PossibleTypesMap,\n  ServerError,\n} from '@apollo/client';\nimport { ApolloClient, ApolloLink, createHttpLink } from '@apollo/client';\nimport { onError } from '@apollo/client/link/error';\nimport { RetryLink } from '@apollo/client/link/retry';\nimport { parseError } from '@snapchat/core';\nimport { contentfulRetryCount } from '@snapchat/mw-common';\nimport type { ASTNode, GraphQLError } from 'graphql';\nimport { stripIgnoredCharacters } from 'graphql';\n\nimport { Config } from '../../config';\nimport type { ContentfulConfiguration } from '../../configTypes';\nimport { logError, logInfo } from '../../helpers/logging';\nimport { customFetch } from '../fetch/customFetch';\nimport { getTracer } from '../tracing';\nimport { createContentfulCache } from './ContentfulCache';\nimport { getQueryName } from './getQueryName';\nimport { queryOptimizeVisitor } from './queryOptimizeVisitor';\nimport { requestLatencyLogLink } from './RequestLatencyLogLink';\n\nconst defaultUrl = 'https://unknown.url';\n\n/** Contentful errors taken from: https://www.contentful.com/developers/docs/references/errors/ */\nconst contentfulNetworkErrorNames = new Map<number, string>()\n  .set(400, 'BadRequest')\n  .set(401, 'AccessTokenInvalid')\n  .set(403, 'AccessDenied')\n  .set(404, 'NotFound')\n  .set(409, 'VersionMismatch')\n  .set(422, 'ValidationFailed')\n  .set(429, 'RateLimitExceeded')\n  .set(500, 'ServerError')\n  .set(502, 'Hibernated');\n\n/** Returns HttpOptions for making requests to contentful. */\nexport const getContentfulHttpOptions = (config: ContentfulConfiguration): HttpOptions => {\n  const uri = config.environmentName\n    ? `https://graphql.contentful.com/content/v1/spaces/${config.spaceId}/environments/${config.environmentName}`\n    : `https://graphql.contentful.com/content/v1/spaces/${config.spaceId}`;\n\n  const headers: Record<string, string> = {\n    Authorization: `Bearer ${\n      Config.isPreview && config.previewAccessToken ? config.previewAccessToken : config.accessToken\n    }`,\n  };\n\n  // Jul 7, 2023 Temporarily adding this because we want to debug\n  // We need to monitor if this has any performance impact when we include this header\n  if (!Config.isClient) {\n    headers['fastly-debug'] = '1';\n  }\n\n  return {\n    uri,\n    credentials: 'same-origin',\n    headers,\n    fetch: customFetch,\n    print(ast: ASTNode, originalPrint: (ast: ASTNode) => string) {\n      return stripIgnoredCharacters(originalPrint(ast));\n    },\n  };\n};\n\n/**\n * Creates a new contentful apollo client. See ApolloLink documentation:\n * https://www.apollographql.com/docs/react/api/link/introduction/\n */\nexport const createContentfulClient = (\n  config: ContentfulConfiguration,\n  fragments: PossibleTypesMap,\n  apolloState?: NormalizedCacheObject\n): ApolloClient<NormalizedCacheObject> => {\n  // Retry link that will retry failed requests.\n  const retryLink = new RetryLink({\n    delay: {\n      max: 100 /* milliseconds */,\n    },\n    attempts: {\n      max: contentfulRetryCount,\n      retryIf: (error, operation) => {\n        if (error) {\n          const parsedError = parseError(error);\n          const response = operation.getContext().response as Response | undefined;\n          const responseCode = response?.status ?? 500;\n          // NOTE: we can only retry retriable errors.\n          // Other ones like 401 or 400 cannot be retried as we expect the result to be the same.\n          const shouldRetry = responseCode === 429 || (responseCode >= 500 && responseCode < 600);\n\n          if (shouldRetry) {\n            logInfo({\n              eventAction: 'RetryFetch',\n              eventCategory: 'Apollo',\n              eventLabel: getQueryName(operation.query),\n              context: {\n                responseCode: String(responseCode),\n                errorMessage: parsedError.message,\n                'x-contentful-region': response?.headers?.get('x-contentful-region'),\n                'x-cache': response?.headers?.get('x-cache'),\n                'x-contentful-request-id': response?.headers?.get('x-contentful-request-id'),\n              },\n            });\n          }\n\n          return shouldRetry;\n        }\n\n        return false;\n      },\n    },\n  });\n\n  // Link that will record errors whn they occur.\n  const onErrorLink = onError(({ graphQLErrors, networkError, operation }) => {\n    if (graphQLErrors) {\n      graphQLErrors.forEach((error: GraphQLError) => {\n        // Contentful can fire a number of errors and still return partial results - see table in reference link:\n        // https://www.contentful.com/developers/docs/references/graphql/#/reference/graphql-errors/graphql-errors-explained\n        const contentfulErrorCode: string | undefined = error.extensions?.contentful?.code;\n        const response = operation.getContext().response as Response | undefined;\n\n        logError({\n          component: 'Contentful',\n          error,\n          // reusing existing action dimension to be consistent with other error events\n          action: 'GraphQlError',\n          message: error.message,\n          context: {\n            errorName: contentfulErrorCode?.toLowerCase() ?? 'unknown',\n            variables: JSON.stringify(operation.variables),\n            queryName: getQueryName(operation.query),\n            queryPath: error.path?.join(','),\n            locations: error.locations?.join(','),\n            requestUrl: operation.getContext().currentUrl as string | undefined,\n            'x-contentful-region': response?.headers?.get('x-contentful-region'),\n            'x-cache': response?.headers?.get('x-cache'),\n            'x-contentful-request-id': response?.headers?.get('x-contentful-request-id'),\n          },\n        });\n      });\n    }\n\n    if (networkError) {\n      const serverError =\n        networkError.name === 'ServerError' ? (networkError as ServerError) : undefined;\n\n      const response = operation.getContext().response as Response | undefined;\n      const errorCode = serverError?.statusCode ?? 599;\n      // This might be similar to 'networkError.name'.\n      const errorName = contentfulNetworkErrorNames.get(errorCode) ?? 'Unknown';\n\n      logError({\n        component: 'Contentful',\n        error: networkError,\n        // reusing existing action dimension to be consistent with other error events\n        action: 'NetworkError',\n        message: `${networkError.name}/${errorName} (${errorCode})`,\n        context: {\n          name: networkError.name,\n          errorCode,\n          errorName,\n          url: new URL(serverError?.response?.url ?? defaultUrl),\n          requestUrl: operation.getContext().currentUrl,\n          'x-contentful-region': response?.headers?.get('x-contentful-region'),\n          'x-cache': response?.headers?.get('x-cache'),\n          'x-contentful-request-id': response?.headers?.get('x-contentful-request-id'),\n        },\n      });\n    }\n  });\n\n  /** Link that adds tracing spans out outgoing requests. */\n  const tracingApolloLink = new ApolloLink((operation, forward) => {\n    const traceSpan = getTracer().startSpan(`ApolloQuery: ${operation.operationName}`);\n    return forward(operation).map(result => {\n      traceSpan.endSpan();\n      return result;\n    });\n  });\n\n  const link: ApolloLink = ApolloLink.from([\n    queryOptimizeVisitor,\n    tracingApolloLink,\n    requestLatencyLogLink,\n    onErrorLink,\n    retryLink,\n    createHttpLink(getContentfulHttpOptions(config)),\n  ]);\n\n  const client = new ApolloClient({\n    link,\n    cache: createContentfulCache(fragments, apolloState),\n    ssrMode: !Config.isClient, // This var is essentially isServer.\n    ssrForceFetchDelay: Config.isSSR ? 100 : 0, // Duration of time to flash SSR content (In milliseconds)\n  });\n\n  return client;\n};\n", "import type { ApolloClient, NormalizedCacheObject } from '@apollo/client';\n\nimport { Config } from '../../config';\nimport { createContentfulClient } from './ContentfulProvider';\n\n/**\n * This is the interval at which we reset apollo clients.\n *\n * On the server this happens with no state to restore, so the cache gets wiped allowing us to\n * garbage collect previously stored quries.\n *\n * Mote that this delay is how long it can take to see changes in prod.\n */\nconst cacheExpirationTimeMs = 30_000;\n\n/**\n * Map from locale to apollo cache. We need to have a separate map per locale.\n *\n * The Apollo Client Team recommends creating a new client per SSR request:\n * https://github.com/apollographql/apollo-client/issues/7942#issuecomment-812540838 We won't go\n * that far yet, but we will recycle the Apollo client and cache periodically to address the memory\n * leak issues.\n *\n * The map values include both active client and factory method used for replacing the client.\n */\nconst apolloClientMap = new Map<\n  string,\n  [ApolloClient<NormalizedCacheObject>, () => ApolloClient<NormalizedCacheObject>]\n>();\n\n// We don't want the cache to persist forever, so we clear the cache every now and then by replacing the Apollo Client.\n// Currently set to every 30 seconds on the server-side.\nif (!Config.isClient && !Config.isTest) {\n  setInterval(() => {\n    for (const [locale, [_, clientFactory]] of Array.from(apolloClientMap.entries())) {\n      const newClient = clientFactory();\n      apolloClientMap.set(locale, [newClient, clientFactory]);\n    }\n  }, cacheExpirationTimeMs);\n}\n\n/** Returns a new apollo client for options or returns one from cache. */\nexport const getOrCreateApolloClient = (\n  locale: string,\n  options: Parameters<typeof createContentfulClient>\n): ApolloClient<NormalizedCacheObject> => {\n  // No caches on dev/staging servers.\n  if (Config.isPreview) {\n    return createContentfulClient(...options);\n  }\n\n  const spaceId = options[0].spaceId;\n  const apolloClientMapKey = `${spaceId}/${locale}`;\n\n  // If previous version exists, return it.\n  if (apolloClientMap.has(apolloClientMapKey)) {\n    const [client] = apolloClientMap.get(apolloClientMapKey)!;\n    return client;\n  }\n\n  // Else populate the cache with a new client and a factory to reset it.\n  const client = createContentfulClient(...options);\n  apolloClientMap.set(apolloClientMapKey, [client, () => createContentfulClient(...options)]);\n  return client;\n};\n", "import { useAsyncData } from '@snapchat/async-data-browser';\nimport { BrowserFeaturesContext } from '@snapchat/snap-design-system-marketing';\nimport { useContext, useMemo, useRef } from 'react';\n\nimport { AppContext } from '../../../AppContext';\nimport type { PaginationDataProps } from '../../../components/Gallery';\nimport { logger } from '../../../helpers/logging';\n\ntype GalleryData = {\n  paginationData: PaginationDataProps | undefined;\n  isLoading: boolean;\n};\n\ntype GalleryTilesProps = {\n  galleryId: string;\n  locale: string;\n  pageSize?: number;\n};\n\n/**\n * Returns the data needed to render the pagination and tiles components\n *\n * @param galleryId Id of the gallery we want to query\n * @param pageSize Number of results we want\n */\nexport function useNewsroomGalleryTiles({\n  galleryId,\n  locale,\n  pageSize = 2,\n}: GalleryTilesProps): GalleryData {\n  const appContext = useContext(AppContext);\n  const browserFeatures = useContext(BrowserFeaturesContext);\n  const previousTotal = useRef(0);\n\n  const params = useMemo(() => {\n    const params = new URLSearchParams();\n\n    params.append('galleryId', galleryId);\n    params.append('pageSize', `${pageSize}`);\n    params.append('sortBy', 'By Date');\n    params.append('spaceId', 'newsroom');\n    params.append('page', '0');\n    params.append('locale', locale);\n\n    if (appContext.userLocation.country) {\n      params.append('country', appContext.userLocation.country);\n    }\n\n    const platform = browserFeatures.getLowEntropyHints().platform;\n\n    if (platform) {\n      params.append('platform', platform);\n    }\n\n    const device = browserFeatures.getLowEntropyHints().isMobile ? 'Mobile' : 'Non-Mobile';\n\n    if (device) {\n      params.append('device', device);\n    }\n\n    return params;\n  }, [galleryId, pageSize, locale, appContext.userLocation.country, browserFeatures]);\n\n  const url = `https://newsroom.snap.com/api/gallery?${params}`;\n\n  const { data, isLoading } = useAsyncData({\n    dataId: `/api/gallery?${params}`,\n    dataAsync: async () => {\n      try {\n        const response = await fetch(url);\n        const data = await response.json();\n        return data;\n      } catch (error) {\n        logger.logError({\n          component: 'UseNewsroomGalleryTiles',\n          message: 'Error loading gallery tiles',\n          error,\n        });\n      }\n    },\n  });\n\n  if (data?.total) {\n    previousTotal.current = data?.total;\n  }\n\n  return {\n    paginationData: isLoading ? { tiles: [], total: previousTotal.current } : data,\n    isLoading,\n  };\n}\n", "import type { FetchPolicy, QueryHookOptions, QueryResult } from '@apollo/client';\nimport { useQuery } from '@apollo/client';\nimport type { Entity } from '@contentful/live-preview/dist/types';\nimport { useContext } from 'react';\n\nimport { AppContext } from '../../../AppContext';\nimport { tileCollectionQuery } from '../../../components/Gallery';\nimport { Config } from '../../../config';\nimport type {\n  ContentfulQueryOptions,\n  ContentfulQueryVariables,\n} from '../../../hooks/useContentfulQuery';\nimport { useNewsroomContentfulContext } from '../context/useNewsroomContentfulContext';\n\nexport interface ContentfulContext {\n  currentLocale: string;\n  isPreview: boolean;\n  isSSR: boolean;\n}\n\n/** Wrapper around `useQuery` hook that adds variables from the Newsroom contentful space */\nexport function useNewsroomContentfulQuery<\n  TData extends Entity,\n  TVariables = ContentfulQueryVariables\n>(\n  options?: ContentfulQueryOptions<TData, TVariables & ContentfulQueryVariables>\n): QueryResult<TData, TVariables & ContentfulQueryVariables> {\n  const { getCurrentUrl } = useContext(AppContext);\n\n  // apply newsroom specific settings to query options\n  const { locale, preview, fetchPolicy, apolloClient } = useNewsroomContentfulContext();\n\n  const queryOptions: QueryHookOptions<TData, ContentfulQueryVariables & TVariables> = {\n    client: apolloClient,\n    fetchPolicy: fetchPolicy as FetchPolicy,\n    ...options,\n    context: { currentUrl: getCurrentUrl(), ...options?.context },\n    // @ts-ignore: We assume that all queries require a 'locale' and 'preview' vars.\n    variables: {\n      preview,\n      locale,\n      ...options?.variables,\n    },\n    ssr: options?.ssr ?? Config.isSSR,\n  };\n\n  return useQuery(tileCollectionQuery, queryOptions);\n}\n", "import {\n  GalleryGridV2 as GalleryGridV2SDS,\n  SkeletonSummaryCard,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\ntype LatestNewsBlockLoadingProps = {\n  numOfCards?: number;\n};\n\nexport const LatestNewsBlockLoading: FC<LatestNewsBlockLoadingProps> = ({ numOfCards = 2 }) => {\n  return (\n    <GalleryGridV2SDS>\n      {Array.from({ length: numOfCards }).map((_, index) => (\n        <SkeletonSummaryCard key={index} />\n      ))}\n    </GalleryGridV2SDS>\n  );\n};\n", "import { GalleryGridV2 as GalleryGridV2SDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport type { TileQueryResponse } from '../../../../components/Gallery/query';\nimport type { ImageDataProps } from '../../../../components/Image/types';\nimport { SummaryCard } from '../../../../components/SummaryCard';\nimport { useNewsroomContentfulQuery } from '../../hooks/useNewsroomContentfulQuery';\nimport { LatestNewsBlockLoading } from './LatestNewsBlockLoading';\n\ntype LatestNewsBlockTilesProps = {\n  tileIds: string[];\n  defaultTileImage?: ImageDataProps;\n};\n\nexport const LatestNewsBlockTiles: FC<LatestNewsBlockTilesProps> = ({\n  tileIds,\n  defaultTileImage,\n}) => {\n  const { data, loading } = useNewsroomContentfulQuery<TileQueryResponse, { ids: string[] }>({\n    variables: { ids: tileIds },\n  });\n\n  if (loading) {\n    return <LatestNewsBlockLoading numOfCards={tileIds.length} />;\n  }\n\n  const sortedItems = data?.tileCollection?.items\n    .slice()\n    .map(item => {\n      let url = item.url;\n      const slug = item.slugReference?.slug ?? '';\n\n      // If no url is provided, update the url property of the item to ensure that the slug is used in\n      // an absolute url to the Newsroom, otherwise the slug will be used as a relative url in SummaryCard\n      if (!url) {\n        const newsroomUrl = new URL('https://newsroom.snap.com/');\n        newsroomUrl.pathname = slug;\n        url = newsroomUrl.href;\n      }\n\n      return { ...item, url };\n    })\n    .sort((a, b) => tileIds.indexOf(a.sys.id) - tileIds.indexOf(b.sys.id));\n\n  return (\n    <GalleryGridV2SDS>\n      {sortedItems?.map(tile => (\n        <SummaryCard\n          key={tile.sys.id}\n          {...tile}\n          media={tile.media ?? defaultTileImage}\n          // TODO: fetch show* prop values from gallery entry rather than hardcoding\n          showDates={true}\n          showDescriptions={true}\n          showMedia={true}\n        />\n      ))}\n    </GalleryGridV2SDS>\n  );\n};\n", "import type { FC } from 'react';\n\nimport type { ImageDataProps } from '../../../../components/Image/types';\nimport { useNewsroomContentfulContext } from '../../context/useNewsroomContentfulContext';\nimport { useNewsroomGalleryTiles } from '../../hooks/useNewsroomGalleryTiles';\nimport { LatestNewsBlockTiles } from './LatestNewsBlockTiles';\n\ntype LatestNewsBlockGalleryProps = {\n  galleryId: string;\n  defaultTileImage?: ImageDataProps;\n  pageSize?: number;\n};\n\nexport const LatestNewsBlockGallery: FC<LatestNewsBlockGalleryProps> = ({\n  galleryId,\n  defaultTileImage,\n  pageSize,\n}) => {\n  const { locale } = useNewsroomContentfulContext();\n\n  const { paginationData } = useNewsroomGalleryTiles({\n    galleryId,\n    locale,\n    pageSize,\n  });\n\n  const tileIds = paginationData?.tiles?.map(tile => tile.tileSysId) ?? [];\n\n  return tileIds?.length ? (\n    <LatestNewsBlockTiles tileIds={tileIds} defaultTileImage={defaultTileImage} />\n  ) : null;\n};\n", "import { cx } from '@emotion/css';\nimport { Alignment, Block as BlockSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport { CallToAction } from '../../../../components/CallToAction';\nimport type { NewsBlockDataProps } from './LatestNewsBlock.query';\nimport { galleryContainerCss, galleryContainerWithEyebrowCss } from './LatestNewsBlock.styles';\nimport { LatestNewsBlockGallery } from './LatestNewsBlockGallery';\n\nexport const LatestNewsBlock: FC<NewsBlockDataProps> = ({\n  eyebrow,\n  numberOfNewsItems,\n  textAlignment = Alignment.Center,\n  textAlignmentMobile = Alignment.Center,\n  callsToActionCollection,\n  newsReference,\n  defaultImage,\n}) => {\n  // Gallery id is the last portion of the urn, after the final '/'\n  const galleryId = newsReference?.sys?.urn.split('/').at(-1) ?? '';\n\n  const callsToAction = callsToActionCollection?.items?.map(item => (\n    <CallToAction key={item.sys.id} {...item} />\n  ));\n\n  return (\n    <BlockSDS\n      eyebrow={eyebrow}\n      callsToAction={callsToAction}\n      maxColumns={1}\n      titleAlignment={textAlignment}\n      titleAlignmentMobile={textAlignmentMobile}\n    >\n      {galleryId ? (\n        /* TODO: Tweak the wrapping behavior of the gallery tiles.\n         * As we are reserving some of the horizontal space for the Side Navigation component on the\n         * snap.com home page, the default styles for gallery tiles don't use the right break point\n         * to switch to single column layout. This means that the tiles can end up hard to read.\n         */\n        <div className={cx(galleryContainerCss, { [galleryContainerWithEyebrowCss]: !!eyebrow })}>\n          <LatestNewsBlockGallery\n            galleryId={galleryId}\n            pageSize={numberOfNewsItems}\n            defaultTileImage={defaultImage}\n          />\n        </div>\n      ) : null}\n    </BlockSDS>\n  );\n};\n", "import { gql } from '@apollo/client';\nimport type { Alignment } from '@snapchat/snap-design-system-marketing';\n\nimport { ctaFragment } from '../../../../components/CallToAction';\nimport type { CallToActionDataProps } from '../../../../components/CallToAction/types';\nimport { fragments as imageFragments } from '../../../../components/Image';\nimport type { ImageDataProps } from '../../../../components/Image/types';\nimport type { ContentfulSysProps } from '../../../../types/contentful';\nimport type { Items } from '../../../../types/Items';\nimport { contentfulSysIdFragment } from '../../../../utils/contentful/contentfulQuery';\n\nexport const newsBlockFragment = {\n  all: gql`\n    fragment NewsBlockAll on NewsBlock {\n      ...ContentfulSysId\n      eyebrow\n      textAlignment\n      textAlignmentMobile\n      numberOfNewsItems\n      defaultImage {\n        ...ImageAll\n      }\n      callsToActionCollection(limit: 2) {\n        items {\n          ... on CallToAction {\n            ...CallToActionAll\n          }\n        }\n      }\n      newsReference {\n        sys {\n          urn\n        }\n      }\n    }\n    ${contentfulSysIdFragment}\n    ${ctaFragment}\n    ${imageFragments.all}\n  `,\n};\n\nexport const newsBlockQuery = gql`\n  query NewsBlockQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    newsBlock(preview: $preview, locale: $locale, id: $id) {\n      ...NewsBlockAll\n    }\n  }\n  ${newsBlockFragment.all}\n`;\n\nexport type NewsBlockDataProps = ContentfulSysProps & {\n  eyebrow: string;\n  textAlignment: Alignment;\n  textAlignmentMobile: Alignment;\n  numberOfNewsItems: number;\n  defaultImage?: ImageDataProps;\n  callsToActionCollection?: Items<CallToActionDataProps>;\n  newsReference: {\n    sys: {\n      urn: string;\n    };\n  };\n};\n\nexport type NewsBlockDataHandlerProps = {\n  newsBlock: NewsBlockDataProps;\n};\n", "import type { FC } from 'react';\n\nimport type { ContentfulIdVariable } from '../../../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../../../hooks/useContentfulQuery';\nimport { LatestNewsBlock } from './LatestNewsBlock';\nimport type { NewsBlockDataHandlerProps } from './LatestNewsBlock.query';\nimport { newsBlockQuery } from './LatestNewsBlock.query';\n\nexport const LatestNewsBlockShallow: FC<{ id: string }> = ({ id }) => {\n  /*\n    TODO: move the query logic to the SnapHomePage component. We should only need a single query to\n    fetch all of the content, except for the cross-space query for fetching Newsroom tiles.\n  */\n  const { data } = useContentfulQuery<NewsBlockDataHandlerProps, ContentfulIdVariable>(\n    newsBlockQuery,\n    {\n      variables: { id },\n    }\n  );\n\n  if (!data?.newsBlock) return null;\n\n  return <LatestNewsBlock {...data?.newsBlock} />;\n};\n", "import { documentToPlainTextString } from '@contentful/rich-text-plain-text-renderer';\nimport { GlobalNavItem as GlobalNavItemSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { ElementLocation } from '../../../../context/ElementLocationContext/ElementLocationContext';\nimport { shouldFlushLogs } from '../../../../helpers/getLocalPath';\nimport { logger, logUserEvent } from '../../../../helpers/logging';\nimport { UserAction } from '../../../../types/events';\nimport { itemListCss, itemsWrapperCss, listItemCss } from './SideMenu.styles';\nimport type { SideMenuDataItemProps } from './types';\n\nexport const SideMenu: FC<{ navItems: SideMenuDataItemProps[] }> = ({ navItems }) => {\n  const elementLocation = useContext(ElementLocation).elementLocation;\n\n  const logSideMenuClick = (url: string, title: string) => {\n    logUserEvent({\n      eventCategory: 'SnapSideMenu',\n      eventAction: UserAction.Click,\n      eventLabel: `to: ${url}`,\n      context: { targetUrl: url, elementText: title, elementLocation },\n    });\n\n    if (shouldFlushLogs(url)) {\n      void logger.flush();\n    }\n  };\n\n  return (\n    <nav className={itemsWrapperCss}>\n      <ol className={itemListCss}>\n        {navItems?.map((item, index) => (\n          <li key={`list-item-${index}`} className={listItemCss}>\n            <GlobalNavItemSDS\n              title={documentToPlainTextString(item?.title?.json)}\n              href={item.url}\n              onClick={() =>\n                logSideMenuClick(item.url, documentToPlainTextString(item?.title?.json))\n              }\n            />\n          </li>\n        ))}\n      </ol>\n    </nav>\n  );\n};\n", "import { css } from '@emotion/css';\nimport { m, nonMobileMediaQuery } from '@snapchat/snap-design-system-marketing';\n\nimport { totalHeaderHeightCssVar } from '../../../../components/Header/headerSizeUtils';\n\nexport const itemsWrapperCss = css`\n  display: none;\n  min-width: 300px;\n\n  ${nonMobileMediaQuery} {\n    display: block;\n  }\n`;\n\nexport const itemListCss = css`\n  list-style: none;\n  position: sticky;\n  top: var(${totalHeaderHeightCssVar});\n`;\n\nexport const listItemCss = css`\n  font-size: 26px;\n  font-weight: 600;\n  height: 54px;\n  line-height: 54px;\n\n  a {\n    color: ${m('--neutral-v700')};\n    overflow: hidden;\n    padding-inline-start: ${m('--spacing-xxxxl')};\n    text-decoration: none;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n\n    &::before {\n      background-color: ${m('--global-header-item-hover-color')};\n      border-radius: ${m('--border-radius-xs')};\n      content: ' ';\n      height: 32px;\n      left: 0;\n      margin-top: 10px;\n      position: absolute;\n      visibility: hidden;\n      width: 7px;\n\n      *[dir='rtl'] & {\n        left: unset;\n        right: 0;\n      }\n    }\n\n    &:hover::before,\n    &:active::before {\n      visibility: visible;\n    }\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport { Block as BlockSDS, Media as MediaSDS } from '@snapchat/snap-design-system-marketing';\nimport debounce from 'lodash-es/debounce';\nimport { type FC, useEffect, useRef, useState } from 'react';\n\nimport { getRichTextWithEmbeddingsRenderer } from '../../../../utils/renderText/renderRichText';\nimport type { SnapHomeHeroDataProps } from './SnapHomeHero.query';\nimport {\n  ghostImageBaseCss,\n  ghostImageBottomCss,\n  ghostImageMiddleCss,\n  ghostImageTopCss,\n  ghostImageVisibleCss,\n  heroBodyCss,\n  heroContainerCss,\n  heroTitleCss,\n} from './SnapHomeHero.styles';\nimport type { SnapHomeHeroImageProperties } from './types';\n\nexport const SnapHomeHero: FC<SnapHomeHeroDataProps> = ({ title, title2, title3, media, body }) => {\n  const lines = [title];\n  if (title2) lines.push(title2);\n  if (title3) lines.push(title3);\n\n  const lineContainerRef = useRef<HTMLDivElement | null>(null);\n  const lineRefs = useRef<(HTMLSpanElement | null)[]>(Array.from({ length: lines.length }));\n  const [imageProperties, setImageProperties] = useState<SnapHomeHeroImageProperties>({\n    width: 0,\n    height: 0,\n    position: 'Top',\n    isVisible: false,\n  });\n\n  // Fired immediately at start of resize event queue\n  useEffect(() => {\n    // Early exit if there is no media (no need for event listeners)\n    if (!media) return;\n\n    const detectResize = debounce(\n      () => {\n        setImageProperties(current => ({ ...current, isVisible: false }));\n      },\n      500,\n      {\n        leading: true,\n        trailing: false,\n      }\n\n      // Fired at end of resize event queue\n    );\n\n    const setGhostPosition = debounce(() => {\n      const deviceWidth = window.innerWidth;\n      const isTablet = deviceWidth < 1025;\n      const containerWidth = lineContainerRef.current?.offsetWidth ?? 0;\n      const firstLineHeight = lineRefs.current[0]?.offsetHeight ?? 0;\n      const firstLineWidth = lineRefs.current[0]?.offsetWidth ?? 0;\n      const lastLineHeight = lineRefs.current[lines.length - 1]?.offsetHeight ?? 0;\n      const lastLineWidth = lineRefs.current[lines.length - 1]?.offsetWidth ?? 0;\n      const maxLineWidth = lineRefs.current.reduce((maxWidth, currentLine) => {\n        const lineWidth = currentLine?.offsetWidth ?? 0;\n        return Math.max(maxWidth, lineWidth);\n      }, 0);\n      const useTopAlignedMedia = firstLineWidth < lastLineWidth;\n      const useRightAlignedMedia =\n        isTablet && maxLineWidth < containerWidth * 0.6; /* arbitrary cutoff at 60% of width */\n\n      const paddingSizeX = 0; /* adjust position to account for horizontal padding */\n      const paddingSizeY = 32; /* adjust position to account for vertical padding */\n\n      /* If there isn't sufficent space, just don't render the media  */\n      const useNoMedia = useTopAlignedMedia && containerWidth - firstLineWidth - paddingSizeX < 50;\n\n      if (useNoMedia) {\n        setImageProperties(current => ({ ...current, isVisible: false }));\n      } else if (useRightAlignedMedia) {\n        setImageProperties({\n          width: containerWidth - maxLineWidth - paddingSizeX,\n          height: firstLineHeight * lines.length /* assumes consistent line height */,\n          position: 'Middle',\n          isVisible: true,\n        });\n      } else if (useTopAlignedMedia) {\n        setImageProperties({\n          width: containerWidth - firstLineWidth - paddingSizeX,\n          height: firstLineHeight + paddingSizeY,\n          position: 'Top',\n          isVisible: true,\n        });\n      } else {\n        setImageProperties({\n          width: containerWidth - lastLineWidth - paddingSizeX,\n          height: lastLineHeight + paddingSizeY,\n          position: 'Bottom',\n          isVisible: true,\n        });\n      }\n    }, 500);\n\n    const handleResize = () => {\n      detectResize();\n      setGhostPosition();\n    };\n\n    setGhostPosition();\n    window.addEventListener('resize', handleResize);\n\n    return () => {\n      window.removeEventListener('resize', handleResize);\n    };\n  }, [media]);\n\n  const renderBody = getRichTextWithEmbeddingsRenderer(false, false);\n\n  const desktopMedia = media?.media;\n  const mobileMedia = media?.mobileMedia;\n\n  // Placeholder for logic to populate `imgSrcs` prop (removed as part of hotfix)\n\n  return (\n    <BlockSDS maxColumns={1}>\n      <div className={heroContainerCss}>\n        {/* First column */}\n        <div ref={lineContainerRef} className={heroTitleCss}>\n          <h1>\n            {lines.map((l, i) => (\n              <span key={i}>\n                <span\n                  ref={el => {\n                    lineRefs.current[i] = el;\n                  }}\n                >\n                  {l}\n                </span>\n              </span>\n            ))}\n            <span\n              style={{ width: imageProperties.width, height: imageProperties.height }}\n              className={cx(ghostImageBaseCss, {\n                [ghostImageVisibleCss]: imageProperties.isVisible,\n                [ghostImageTopCss]: imageProperties.position === 'Top',\n                [ghostImageMiddleCss]: imageProperties.position === 'Middle',\n                [ghostImageBottomCss]: imageProperties.position === 'Bottom',\n              })}\n            >\n              {desktopMedia && (\n                <MediaSDS\n                  // TODO: refactor this in follow up ticket\n                  // imgSrcs={imgSrcs}\n                  imageSource={desktopMedia.url}\n                  altText={desktopMedia.description}\n                  videoSource={desktopMedia.url}\n                  sourceType={desktopMedia.contentType}\n                  mobileVideoSource={mobileMedia?.url}\n                />\n              )}\n            </span>\n          </h1>\n        </div>\n\n        {/* Second column */}\n        {body && <div className={heroBodyCss}>{renderBody(body)}</div>}\n      </div>\n    </BlockSDS>\n  );\n};\n", "import { css } from '@emotion/css';\nimport {\n  largeDesktopMediaQuery,\n  m,\n  mobileMediaQuery,\n  twoColumnCollapseMediaQuery,\n} from '@snapchat/snap-design-system-marketing';\n\nexport const heroContainerCss = css`\n  display: flex;\n  flex-direction: row;\n  gap: 0 ${m('--spacing-xxxxl')};\n  max-width: 100%;\n\n  ${twoColumnCollapseMediaQuery} {\n    flex-wrap: wrap;\n  }\n`;\n\nexport const heroTitleCss = css`\n  flex-grow: 2;\n  padding: ${m('--spacing-xl')} 0;\n\n  > h1 {\n    display: flex;\n    flex-direction: column;\n    min-width: 375px;\n    position: relative;\n  }\n\n  ${mobileMediaQuery} {\n    display: block;\n    width: 100%;\n\n    > h1 {\n      min-width: unset;\n    }\n  }\n`;\n\nexport const ghostImageBaseCss = css`\n  opacity: 0;\n  position: absolute;\n  /* Short animation to hide the ghost when user starts resizing */\n  transition: opacity 0.25s ease-in-out;\n\n  /* The following styles are to ensure consistent sizing for both image and video implementations */\n  div.sdsm-media-wrapper {\n    height: 100%;\n  }\n\n  img,\n  video {\n    height: 100%;\n    margin: 0;\n    object-fit: contain;\n  }\n`;\n\nexport const ghostImageVisibleCss = css`\n  opacity: 1;\n  /* Longer animation to show the ghost after user stops resizing */\n  transition: opacity 2s ease-in-out;\n`;\n\nexport const ghostImageTopCss = css`\n  right: 0;\n  top: calc(-1 * ${m('--spacing-xl')});\n\n  *[dir='rtl'] & {\n    right: unset;\n    left: 0;\n  }\n`;\n\nexport const ghostImageMiddleCss = css`\n  right: 0;\n\n  /* Horizontally center the media in the container.\n     This is meant to fill the space to the side of the Hero text so the component is visually balanced. */\n  img,\n  video {\n    margin: auto;\n  }\n\n  *[dir='rtl'] & {\n    right: unset;\n    left: 0;\n  }\n`;\n\nexport const ghostImageBottomCss = css`\n  bottom: calc(-1 * ${m('--spacing-xl')});\n  right: 0;\n\n  *[dir='rtl'] & {\n    right: unset;\n    left: 0;\n  }\n`;\n\nexport const heroBodyCss = css`\n  min-width: 200px;\n  padding: ${m('--spacing-xl')} 0;\n\n  /* handle edge case (wide screen) where left container has a greater height than right container */\n  display: flex;\n  flex-direction: column;\n\n  p {\n    margin-bottom: 1em;\n  }\n\n  ${largeDesktopMediaQuery} {\n    max-width: 50%;\n  }\n`;\n", "import { gql } from '@apollo/client';\nimport type { ContentfulTypedSysProps } from 'src/types/contentful';\nimport type { RichText } from 'src/types/RichText';\n\nimport { type ImageDataProps, fragments as imageFragments } from '../../../../components/Image';\nimport { type VideoDataProps, fragments as videoFragments } from '../../../../components/Video';\nimport { contentfulSysIdFragment } from '../../../../utils/contentful/contentfulQuery';\n\nconst snapHomeHeroFragment = gql`\n  fragment SnapHomeHeroFragment on SnapHomeHero {\n    ...ContentfulSysId\n    title\n    title2\n    title3\n    media {\n      __typename\n      ... on Video {\n        ...VideoAll\n      }\n      ... on Image {\n        ...ImageAll\n      }\n    }\n    body {\n      json\n    }\n  }\n  ${imageFragments.all}\n  ${videoFragments.all}\n  ${contentfulSysIdFragment}\n`;\n\nexport interface SnapHomeHeroDataProps extends ContentfulTypedSysProps<'SnapHomeHero'> {\n  title: string;\n  title2?: string;\n  title3?: string;\n  media?: ImageDataProps | VideoDataProps;\n  body?: RichText;\n}\n\n// =================================================================================================\n// SnapHomeHero Query\n// =================================================================================================\n\nexport const snapHomeHeroQuery = gql`\n  query SnapHomeHero($id: String!, $locale: String!, $preview: Boolean!) {\n    snapHomeHero(id: $id, locale: $locale, preview: $preview) {\n      ...SnapHomeHeroFragment\n    }\n  }\n  ${snapHomeHeroFragment}\n`;\n\nexport interface SnapHomeHeroQueryData {\n  snapHomeHero: SnapHomeHeroDataProps;\n}\n", "import type { FC } from 'react';\n\nimport {\n  type ContentfulIdVariable,\n  useContentfulQuery,\n} from '../../../../hooks/useContentfulQuery';\nimport { SnapHomeHero } from './SnapHomeHero';\nimport { type SnapHomeHeroQueryData, snapHomeHeroQuery } from './SnapHomeHero.query';\n\nexport const SnapHomeHeroShallow: FC<{ id: string }> = props => {\n  /*\n    TODO: move the query logic to the SnapHomePage component. We should only need a single query to\n    fetch all of the content, except for the cross-space query for fetching Newsroom tiles.\n  */\n  const { data } = useContentfulQuery<SnapHomeHeroQueryData, ContentfulIdVariable>(\n    snapHomeHeroQuery,\n    {\n      variables: { id: props.id },\n    }\n  );\n\n  if (!data?.snapHomeHero) return null;\n\n  return <SnapHomeHero {...data?.snapHomeHero} />;\n};\n", "import { type FC, type PropsWithChildren, useEffect, useLayoutEffect } from 'react';\n\nimport { getHeaderHeightFromCssVar } from '../../../../components/Header/headerSizeUtils';\nimport { snapHeaderBackgroundVar } from '../../styleConstants';\nimport { snapHomePageWrapperCss } from './SnapHomePageWrapper.styles';\n\nexport const SnapHomePageWrapper: FC<PropsWithChildren> = ({ children }) => {\n  useLayoutEffect(() => {\n    document.body.style.setProperty(snapHeaderBackgroundVar, 'transparent');\n\n    return () => {\n      document.body.style.removeProperty(snapHeaderBackgroundVar);\n    };\n  });\n\n  useEffect(() => {\n    const scrollListener = () => {\n      const opacityOneLimit = getHeaderHeightFromCssVar();\n      const maxOpacity = 0.4;\n      const opacity = Math.min(maxOpacity, window.scrollY / opacityOneLimit);\n      // NOTE: 255, 252, 0 is the Snap Yellow.\n      document.body.style.setProperty(snapHeaderBackgroundVar, `rgba(255, 252, 0, ${opacity})`);\n    };\n\n    window.addEventListener('scroll', scrollListener, { passive: true });\n\n    return () => {\n      window.removeEventListener('scroll', scrollListener);\n    };\n  }, []);\n\n  return <section className={snapHomePageWrapperCss}>{children}</section>;\n};\n", "export const snapHeaderBackgroundVar = '--snap-com-background-color';\n", "import { css } from '@emotion/css';\nimport {\n  CarouselFeatureClass,\n  m,\n  MotifComponent,\n  nonMobileMediaQuery,\n} from '@snapchat/snap-design-system-marketing';\n\nimport { totalHeaderHeightCssVar } from '../../../../components/Header/headerSizeUtils';\n\nexport const snapHomePageWrapperCss = css`\n  display: flex;\n  margin-top: calc(0px - var(${totalHeaderHeightCssVar}));\n  min-height: 100vh;\n  min-width: 100%;\n  padding-top: var(${totalHeaderHeightCssVar});\n\n  /* TODO: determine whether there is a more appropriate place to put the styles below */\n\n  /* Override styles of Carousel component for better alignment with custom components: CardBlock, NewsBlock */\n  .${MotifComponent.CAROUSEL}.${CarouselFeatureClass.MultiView} > div {\n    margin-inline-start: calc((${m('--carousel-card-mobile-grid-gap')} / 2) * -1);\n    width: calc(100% + (${m('--carousel-card-mobile-grid-gap')} / 2));\n\n    ${nonMobileMediaQuery} {\n      margin-inline-start: calc((${m('--carousel-card-desktop-grid-gap')} / 2) * -1);\n      width: calc(100% + (${m('--carousel-card-desktop-grid-gap')} / 2));\n    }\n  }\n`;\n", "import { gql } from '@apollo/client';\n\nimport type { ContentfulTypedSysProps } from '../../../types/contentful';\nimport type { Items } from '../../../types/Items';\nimport { contentfulSysIdFragment } from '../../../utils/contentful/contentfulQuery';\nimport type { SideMenuDataItemProps } from '../components/SideMenu/types';\n\nexport interface SnapHomePageProps {\n  snapHomePage: ContentfulTypedSysProps<'SnapHomePage'> & {\n    navigationItemsCollection: Items<SideMenuDataItemProps>;\n    blocksCollection: Items<{\n      __typename: string;\n      sys: {\n        id: string;\n      };\n    }>;\n  };\n}\n\nexport const snapHomePageQuery = gql`\n  query SnapHomePageQuery($id: String!, $preview: Boolean!, $locale: String!) {\n    snapHomePage(id: $id, preview: $preview, locale: $locale) {\n      ...ContentfulSysId\n      navigationItemsCollection(limit: 20) {\n        items {\n          ...ContentfulSysId\n          title {\n            json\n          }\n          url\n        }\n      }\n      blocksCollection {\n        items {\n          ...ContentfulSysId\n        }\n      }\n    }\n  }\n  ${contentfulSysIdFragment}\n`;\n", "import { css } from '@emotion/css';\nimport { m, smallMobileMediaQuery } from '@snapchat/snap-design-system-marketing';\n\nexport const contentContainerCss = css`\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  margin-bottom: ${m('--spacing-xxxl')};\n\n  ${smallMobileMediaQuery} {\n    margin-bottom: ${m('--spacing-xl')};\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport {\n  CarouselV3 as CarouselV3SDS,\n  Icon,\n  MotifScheme,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { AppContext } from '../../../AppContext';\nimport type { CarouselV3CardItemProps } from '../../../components/CarouselV3';\nimport { CarouselV3ImageItem } from '../../../components/CarouselV3/CarouselV3ImageItem';\nimport { CarouselV3VideoItem } from '../../../components/CarouselV3/CarouselV3VideoItem';\nimport { type ContentfulIdVariable, useContentfulQuery } from '../../../hooks/useContentfulQuery';\nimport { type SnapHomePageV2Props, snapHomePageV2Query } from './SnapHomePageV2.query';\nimport {\n  carouselAnimatedCss,\n  carouselArrowIconCss,\n  carouselOverrideStylesCss,\n  carouselTitleCss,\n  containerCss,\n  preAnimationCss,\n  titleAnimatedCss,\n  titleCss,\n} from './SnapHomePageV2.styles';\n\nexport const SnapHomePageV2: FC<{ id: string }> = props => {\n  const { isRTL } = useContext(AppContext);\n  const { data } = useContentfulQuery<SnapHomePageV2Props, ContentfulIdVariable>(\n    snapHomePageV2Query,\n    {\n      variables: { id: props.id },\n    }\n  );\n\n  const title = data?.snapHomePageV2?.title;\n  const carouselTitle = data?.snapHomePageV2?.carouselTitle;\n  const carouselCards = data?.snapHomePageV2?.carouselCardsCollection?.items;\n\n  return (\n    <div className={cx(MotifScheme.QUINARY, containerCss)}>\n      <h1 className={cx(titleCss, data ? titleAnimatedCss : preAnimationCss)}>{title}</h1>\n      {!!carouselCards?.length && (\n        <div\n          className={cx(carouselOverrideStylesCss, data ? carouselAnimatedCss : preAnimationCss)}\n        >\n          <div className={carouselTitleCss}>\n            {carouselTitle}\n            <Icon className={carouselArrowIconCss} name=\"chevron-down\" size={28} />\n          </div>\n          <CarouselV3SDS\n            isSingleView={false}\n            autoPlay={false}\n            isRtl={isRTL}\n            enableOverflowDecoration={true}\n            isResponsiveWidth={true}\n          >\n            {carouselCards.map(item => {\n              const cardItem = item as CarouselV3CardItemProps;\n              const hasVideo = cardItem?.media?.__typename === 'Video';\n\n              return hasVideo ? (\n                <CarouselV3VideoItem\n                  key={cardItem.sys.id}\n                  cardItem={cardItem}\n                  mediaAspectRatio=\"16:9\"\n                  enableVideoControls={false}\n                  isResponsiveWidth={true}\n                  hideLinkArrow={true}\n                />\n              ) : (\n                <CarouselV3ImageItem\n                  key={cardItem.sys.id}\n                  cardItem={cardItem}\n                  mediaAspectRatio=\"16:9\"\n                  isResponsiveWidth={true}\n                  hideLinkArrow={true}\n                />\n              );\n            })}\n          </CarouselV3SDS>\n        </div>\n      )}\n    </div>\n  );\n};\n", "import { gql } from '@apollo/client';\n\nimport { fragments as imageFragments } from '../../../components/Image';\nimport type { ImageDataProps } from '../../../components/Image/types';\nimport { fragments as videoFragments } from '../../../components/Video';\nimport type { VideoDataProps } from '../../../components/Video/types';\nimport type { ContentfulSysProps, ContentfulTypedSysProps } from '../../../types/contentful';\nimport type { Items } from '../../../types/Items';\nimport { contentfulSysIdFragment } from '../../../utils/contentful/contentfulQuery';\n\nexport interface SnapHomePageCarouselCardItemProps extends ContentfulSysProps {\n  body?: string;\n  media: VideoDataProps | ImageDataProps;\n  url?: string;\n  logo?: ImageDataProps;\n}\n\nexport interface SnapHomePageV2Props {\n  snapHomePageV2: ContentfulTypedSysProps<'SnapHomePageV2'> & {\n    title?: string;\n    carouselTitle?: string;\n    carouselCardsCollection?: Items<SnapHomePageCarouselCardItemProps>;\n  };\n}\n\nexport const snapHomePageV2Query = gql`\n  query SnapHomePageV2Query($id: String!, $preview: Boolean!, $locale: String!) {\n    snapHomePageV2(id: $id, preview: $preview, locale: $locale) {\n      ...ContentfulSysId\n      title\n      carouselTitle\n      carouselCardsCollection {\n        items {\n          ...ContentfulSysId\n          body\n          media {\n            __typename\n            ... on Video {\n              ...VideoAll\n            }\n            ... on Image {\n              ...ImageAll\n            }\n          }\n          url\n          logo {\n            __typename\n            ... on Image {\n              ...ImageAll\n            }\n          }\n        }\n      }\n    }\n  }\n  ${contentfulSysIdFragment}\n  ${imageFragments.all}\n  ${videoFragments.all}\n`;\n", "import { css, keyframes } from '@emotion/css';\nimport {\n  extraLargeDesktopWidth,\n  largeDesktopWidth,\n  m,\n  mediaQueryForRange,\n  mobileMediaQuery,\n  nonMobileMediaQuery,\n} from '@snapchat/snap-design-system-marketing';\n\n// The designs use a breakpoint that is not used in sdsm\nconst smallDesktopWidth = 1024;\nconst smallDesktopMediaQuery = mediaQueryForRange({ min: smallDesktopWidth + 1 });\n\nconst largeDesktopAndSmallerMediaQuery = mediaQueryForRange({ max: largeDesktopWidth });\n\nexport const containerCss = css`\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  /* Set font-family here or the var from the default motif is used */\n  font-family: ${m('--font-family')};\n  margin-bottom: ${m('--spacing-xxxxl')};\n  padding-inline: ${m('--spacing-xl')};\n\n  ${nonMobileMediaQuery} {\n    /* Minus header height (64px) and footer height (66px) */\n    min-height: calc(100vh - 64px - 66px);\n  }\n\n  ${smallDesktopMediaQuery} {\n    margin-inline: auto;\n    max-width: ${extraLargeDesktopWidth}px;\n    padding-inline: ${m('--spacing-xxxxl')};\n    width: 100%;\n  }\n`;\n\nexport const carouselOverrideStylesCss = css`\n  /* Override the desktop grid gap so that smaller desktop screens have the same gap as mobile */\n  ${largeDesktopAndSmallerMediaQuery} {\n    --carousel-card-desktop-grid-gap: ${m('--carousel-card-mobile-grid-gap')};\n  }\n\n  .sdsm-carousel {\n    /**\n     * Remove the vertical spacing from the carousel container to allow the bottom of the cards\n     * to be closer to the bottom of the screen. This is because there will be extra space below\n     * the cards if there are no pagination dots.\n     * */\n    & > div > div {\n      margin-block: 0;\n    }\n\n    /* Add spacing to the top of the pagination dots to make up for the removed container spacing above. */\n    & > nav {\n      margin-top: ${m('--spacing-xl')};\n    }\n\n    /*\n    * Override the height of the carousel card text container to 120px for SnapHomePageV2.\n    */\n    & :has(> .sdsm-carousel-card-text) {\n      ${mobileMediaQuery} {\n        height: 120px;\n      }\n    }\n\n    /* Remove the min-height and absolute positioning from the carousel card text container */\n    .sdsm-carousel-card-text {\n      min-height: unset;\n      position: unset;\n\n      p {\n        ${nonMobileMediaQuery} {\n          text-align: center;\n        }\n        /**\n         * The carousel changes font size for mobile and desktop,\n         * but we need to increase at a different breakpoint\n         * */\n        ${smallDesktopMediaQuery} {\n          font-size: 16px;\n        }\n      }\n    }\n  }\n`;\n\nexport const titleCss = css`\n  align-items: center;\n  display: flex;\n  flex-grow: 1;\n  && {\n    font-size: 26px;\n    font-weight: 400;\n  }\n  max-width: 540px;\n  /* Minus header height (64px) and height of carousel title and arrow indicator (70px) */\n  min-height: calc(100vh - 64px - 70px);\n  padding-block: 56px;\n  text-wrap: pretty;\n  width: 100%;\n\n  /* If supported, use dvh for min-height to avoid address bar covering content on mobile */\n  @supports (min-height: 100dvh) {\n    min-height: calc(100dvh - 64px - 70px);\n  }\n\n  ${nonMobileMediaQuery} {\n    && {\n      font-size: 28px;\n    }\n    max-width: calc(590px + (2 * ${m('--spacing-xxxl')}));\n    min-height: unset;\n    padding: 56px ${m('--spacing-xxxl')};\n  }\n\n  ${smallDesktopMediaQuery} {\n    && {\n      font-size: 44px;\n    }\n    max-width: calc(1040px + (2 * ${m('--spacing-xxxl')}));\n  }\n`;\n\nexport const carouselTitleCss = css`\n  align-items: center;\n  color: ${m('--block-eyebrow-color')};\n  display: flex;\n  flex-direction: column;\n  font-size: 14px;\n  font-weight: 600;\n  gap: ${m('--spacing-xs')};\n  justify-content: center;\n  letter-spacing: -0.01em;\n  line-height: 20px;\n  margin-bottom: ${m('--spacing-m')};\n  text-align: center;\n\n  ${nonMobileMediaQuery} {\n    margin-bottom: ${m('--spacing-xxxl')};\n  }\n`;\n\nexport const carouselArrowIconCss = css`\n  ${nonMobileMediaQuery} {\n    display: none;\n  }\n`;\n\nconst fadeInDownTitle = keyframes`\n  from {\n    opacity: 0;\n    transform: translateY(-64px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n`;\n\nconst fadeInDownCarousel = keyframes`\n  from {\n    opacity: 0;\n    transform: translateY(-48px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n`;\n\nconst animationBaseCss = css`\n  animation-delay: 600ms;\n  animation-duration: 800ms;\n  animation-fill-mode: forwards;\n  animation-timing-function: ease-in-out;\n  opacity: 0; /* Start hidden immediately */\n\n  @media (prefers-reduced-motion: reduce) {\n    animation: none;\n    opacity: 1;\n    transform: none;\n  }\n`;\n\nexport const titleAnimatedCss = css`\n  ${animationBaseCss}\n  animation-name: ${fadeInDownTitle};\n`;\n\nexport const carouselAnimatedCss = css`\n  ${animationBaseCss}\n  animation-name: ${fadeInDownCarousel};\n`;\n\n// Hidden state before animation starts (when data is not yet available)\nexport const preAnimationCss = css`\n  opacity: 0;\n`;\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\n\nexport const fragments = {\n  questionnaireAll: gql`\n    fragment QuestionnaireBlockAll on QuestionnaireBlock {\n      ...ContentfulSysId\n      questionnaireTitle: title\n      body {\n        json\n      }\n      image {\n        url\n      }\n      questionsCollection(limit: 20) {\n        items {\n          ...QuestionnaireQuestionAll\n        }\n      }\n      startLabel\n      submitLabel\n      nextLabel\n      backLabel\n      skipLabel\n      trackingIdLabel\n      anchorId\n    }\n  `,\n  questionnaireQuestionAll: gql`\n    fragment QuestionnaireQuestionAll on QuestionnaireQuestion {\n      ...ContentfulSysId\n      questionType\n      question\n      backgroundImage {\n        url\n      }\n      body {\n        json\n      }\n      answersCollection {\n        items {\n          ... on QuestionnaireAnswer {\n            ...ContentfulSysId\n            title\n            description {\n              json\n            }\n            image {\n              url\n            }\n          }\n        }\n      }\n      required\n    }\n    ${contentfulSysIdFragment}\n  `,\n};\n\nexport const query = gql`\n  query QuestionnaireEntryQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    questionnaireBlock(preview: $preview, locale: $locale, id: $id) {\n      ...QuestionnaireBlockAll\n    }\n  }\n  ${fragments.questionnaireAll}\n  ${fragments.questionnaireQuestionAll}\n`;\n", "import type { FC } from 'react';\n\nimport type { ContentfulIdVariable } from '../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport type {\n  QuestionnaireProps,\n  QuestionType,\n} from '../../sites/for-business/components/Questionnaire';\nimport { Questionnaire } from '../../sites/for-business/components/Questionnaire';\nimport type { QuestionnaireAnswerCollection } from '.';\nimport { query } from './queries';\nimport type { QuestionnaireBlockProps } from './types';\n\nexport const QuestionnaireBlock: FC<{ id: string }> = props => {\n  const { data } = useContentfulQuery<QuestionnaireBlockProps, ContentfulIdVariable>(query, {\n    variables: { id: props.id },\n  });\n\n  const questionnaire = buildQuestionnaireFullObject(data);\n\n  if (!questionnaire) {\n    return null;\n  }\n\n  return <Questionnaire {...questionnaire} />;\n};\n\nQuestionnaireBlock.displayName = 'QuestionnaireBlock';\n\nfunction buildQuestionnaireFullObject(data?: QuestionnaireBlockProps): QuestionnaireProps | null {\n  if (!data) {\n    return null;\n  }\n\n  const { questionnaireBlock: questionnaire } = data;\n  const { questionsCollection } = questionnaire;\n\n  const questions = questionsCollection.items.map(questionData => ({\n    id: questionData.sys.id,\n    question: questionData.question,\n    body: questionData.body,\n    questionType: questionData.questionType as QuestionType,\n    image: questionData.backgroundImage?.url,\n    answers: buildQuestionAnswers(questionData.answersCollection),\n    required: questionData.required,\n  }));\n\n  return {\n    title: questionnaire.questionnaireTitle,\n    body: questionnaire.body,\n    image: questionnaire.image?.url,\n    submitLabel: questionnaire.submitLabel,\n    startLabel: questionnaire.startLabel,\n    nextLabel: questionnaire.nextLabel,\n    backLabel: questionnaire.backLabel,\n    skipLabel: questionnaire.skipLabel,\n    anchorId: questionnaire.anchorId,\n    questions,\n  };\n}\n\nfunction buildQuestionAnswers(answersCollection?: QuestionnaireAnswerCollection) {\n  if (!answersCollection) {\n    return [];\n  }\n\n  const answers = answersCollection.items.map(answerData => ({\n    id: answerData.sys.id,\n    text: answerData.title,\n    imageUrl: answerData.image?.url,\n    isSelected: false,\n  }));\n\n  return answers;\n}\n", "import type { FC } from 'react';\n\nimport { ArArkoseProtectedFormBlock } from '../sites/ar/components/ArArkoseProtectedFormBlock';\nimport { ArDownloadFormBlock } from '../sites/ar/components/ArDownloadForm';\nimport { ArDownloadIdCaptureBlock } from '../sites/ar/components/ArDownloadIdCapture';\nimport { ArDownloadLinkCard } from '../sites/ar/components/ArDownloadLinkCard/ArDownloadLinkCard';\nimport { ArLinkOutsBlock } from '../sites/ar/components/ArLinkOutsBlock/ArLinkOutsBlock';\nimport { AvalonDeepLinkBlock } from '../sites/avalon/components/AvalonDeepLinkBlock/AvalonDeepLinkBlock';\nimport { AvalonFormBlock } from '../sites/avalon/components/AvalonFormBlock/AvalonFormBlock';\nimport { AvalonHomeHero } from '../sites/avalon/components/AvalonHomeHero/AvalonHomeHero';\nimport { AvalonProductHero } from '../sites/avalon/components/AvalonProductHero/AvalonProductHero';\nimport { AvalonScrollSection } from '../sites/avalon/components/AvalonScrollSection/AvalonScrollSection';\nimport { FixedPositionBlock } from '../sites/avalon/components/FixedPositionBlock/FixedPositionBlock';\nimport { MosaicGridBlock } from '../sites/avalon/components/MosaicGridBlock/MosaicGridBlock';\nimport { ValuePropsBlock } from '../sites/avalon/components/ValuePropsBlock/ValuePropsBlock';\nimport { JobApplyNowBlock } from '../sites/careers/components/JobApplyNowBlock/JobApplyNowBlock';\nimport { JobDescriptionBlock } from '../sites/careers/components/JobDescriptionBlock/JobDescriptionBlock';\nimport { JobHero } from '../sites/careers/components/JobHero/JobHero';\nimport { JobMobileCallToAction } from '../sites/careers/components/JobMobileCallToAction/JobMobileCallToAction';\nimport { JobPostingsShallow } from '../sites/careers/components/JobsPostings/JobPostingsShallow';\nimport { CheeriosBlock } from '../sites/cheerios/components/CheeriosBlock';\nimport { CheeriosStaticBlock } from '../sites/cheerios/components/CheeriosStaticBlock';\nimport { AiAgent } from '../sites/creators/components/AiAgent/AiAgent';\nimport { CventAuthenticator } from '../sites/experience/components/CventAuthenticator/CventAuthenticator';\nimport { EventRoot } from '../sites/experience/components/LiveEvent/EventRoot';\nimport { RegistrationFormBlock } from '../sites/experience/components/RegistrationFormBlock/RegistrationFormBlock';\n// eslint-disable-next-line max-len\nimport { Sps2024ConfirmationShallow as ExperienceSps2024ConfirmationShallow } from '../sites/experience/components/Sps2024Confirmation/Sps2024ConfirmationShallow';\n// eslint-disable-next-line max-len\nimport { Sps2024RegistrationShallow as ExperienceSpsRegistrationShallow } from '../sites/experience/components/Sps2024Registration/Sps2024RegistrationShallow';\nimport { ZkipsterAuthenticator } from '../sites/experience/components/ZkipsterAuthenticator/ZkipsterAuthenticator';\nimport { ChiliPiperFormBlockShallow } from '../sites/for-business/components/ChiliPiperForm/ChiliPiperFormShallow';\nimport { LeadGenFormBlock } from '../sites/for-business/components/LeadGenForm/LeadGenFormBlock';\nimport { LatestGalleryCardHeroShallow } from '../sites/newsroom/components/LatestGalleryCardHero/LatestGalleryCardHeroShallow';\nimport { CookieTestBlock } from '../sites/sandbox/components/CookieTestBlock/CookieTestBlock';\nimport { CookieInformationBlock } from '../sites/snap/components/CookieInformationBlock/CookieInformationBlock';\nimport { SnapHomePage } from '../sites/snap/pages/SnapHomePage';\nimport { SnapHomePageV2 } from '../sites/snap/pages/SnapHomePageV2';\n// Temporary will have a follow up PR to make standard component.\nimport { QuestionnaireBlock } from './QuestionnaireBlock';\n\n/**\n * Returns a map of all supported custom components.\n *\n * This is in a separate file and not Site Config because adding it there introduces a circular\n * dependency because usually you can't instantiate custom components without backreferencing the\n * Config in some way.\n */\nexport function getCustomComponents(): Record<string, FC<{ id: string }>> {\n  return {\n    AiAgent,\n    ArDownloadFormBlock,\n    ArDownloadIdCaptureBlock,\n    ArDownloadLinkCard,\n    ArLinkOutsBlock,\n    AvalonHomeHero,\n    AvalonDeepLinkBlock,\n    AvalonProductHero,\n    AvalonFormBlock,\n    AvalonScrollSection,\n    FixedPositionBlock,\n    ValuePropsBlock,\n    CheeriosBlock,\n    CheeriosStaticBlock,\n    ChiliPiperFormBlock: ChiliPiperFormBlockShallow,\n    CookieInformationBlock,\n    JobApplyNowBlock,\n    JobDescriptionBlock,\n    JobHero,\n    JobPostings: JobPostingsShallow,\n    JobMobileCallToAction,\n    QuestionnaireBlock,\n    SandboxCookieTest: CookieTestBlock,\n    LatestGalleryCardHero: LatestGalleryCardHeroShallow,\n    RegistrationFormBlock,\n    ArArkoseProtectedFormBlock,\n    LeadGenFormBlock,\n    ExperienceSps2024Registration: ExperienceSpsRegistrationShallow,\n    ExperienceSps2024Confirmation: ExperienceSps2024ConfirmationShallow,\n    CventAuthenticator,\n    ZkipsterAuthenticator,\n    MosaicGridBlock,\n    LiveEvent: EventRoot,\n    SnapHomePage,\n    SnapHomePageV2,\n  };\n}\n", "import { BLOCKS } from '@contentful/rich-text-types';\nimport type { CallToAction } from '@snapchat/mw-contentful-schema';\nimport { BackgroundColor, MessageContext } from '@snapchat/snap-design-system-marketing';\nimport type { FC, ReactNode } from 'react';\nimport { useContext } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport { logError } from '../../helpers/logging';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport type { Items } from '../../types/Items';\nimport type { RichText } from '../../types/RichText';\nimport type { BlockDataProps } from '../Block';\nimport type { SubNavigationDataProps } from '../SubNavigation';\nimport type { HeroDataProps } from '.';\nimport { Hero } from './Hero';\nimport type { BlockWithTitle, LatestPostHeroProps } from './latestPostQuery';\nimport { latestPostHeroQuery } from './latestPostQuery';\n\nexport const LatestPostHero: FC<{\n  backgroundColor?: BackgroundColor;\n  postChildren?: ReactNode;\n}> = ({ backgroundColor, postChildren }) => {\n  const { data } = useContentfulQuery<LatestPostHeroProps>(latestPostHeroQuery);\n  const { formatMessage } = useContext(MessageContext);\n  const { pathname } = useLocation();\n  const latestPostCtaTitle = formatMessage({ id: 'viewArticle', defaultMessage: 'View Article' });\n\n  const titleCtaRichText: RichText = {\n    json: {\n      data: {},\n      content: [\n        {\n          data: {},\n          content: [\n            {\n              data: {},\n              marks: [],\n              value: latestPostCtaTitle,\n              nodeType: 'text',\n            },\n          ],\n          nodeType: BLOCKS.PARAGRAPH,\n        },\n      ],\n      nodeType: BLOCKS.DOCUMENT,\n    },\n    links: undefined,\n  };\n\n  const slugData = data?.slugCollection.items[0];\n\n  const slug = slugData?.slug;\n  let blockHero: HeroDataProps | undefined;\n  let blocksCollection:\n    | Items<BlockDataProps | HeroDataProps | SubNavigationDataProps | BlockWithTitle>\n    | undefined;\n\n  switch (slugData?.page.__typename) {\n    case 'Page':\n      blocksCollection = slugData.page.blocksCollection;\n\n      blockHero = blocksCollection.items.find(\n        (item): item is HeroDataProps => item.__typename === 'BlockHero'\n      );\n      break;\n\n    case 'PageAsset':\n      blockHero = {\n        __typename: 'BlockHero',\n        sys: { id: 'asset_block_hero' },\n        title: slugData?.page?.media?.title,\n        body: slugData?.page?.media?.description,\n      };\n      break;\n\n    case 'Experiment': {\n      blocksCollection = (\n        slugData.page.defaultReference as unknown as {\n          blocksCollection: Items<\n            BlockDataProps | HeroDataProps | SubNavigationDataProps | BlockWithTitle\n          >;\n        }\n      ).blocksCollection;\n\n      blockHero = blocksCollection.items.find(\n        (item): item is HeroDataProps => item.__typename === 'BlockHero'\n      );\n      break;\n    }\n  }\n\n  // If no BlockHero found, find the first block with a populated title\n  if (!blockHero && blocksCollection) {\n    const blockWithTitle = blocksCollection.items.find((item): item is BlockWithTitle =>\n      Boolean(item && 'title' in item && item.title)\n    );\n\n    if (blockWithTitle) {\n      logError({\n        component: 'LatestPostHero',\n        message: `Latest post \"${slug}\" does not have a hero. Using fallback title from ${blockWithTitle.__typename}`,\n      });\n\n      blockHero = {\n        __typename: 'BlockHero',\n        sys: { id: `fallback_from_${blockWithTitle.__typename}` },\n        title: blockWithTitle.title as RichText | string,\n        backgroundColor: BackgroundColor.Black,\n      };\n    }\n  }\n\n  const callsToActionCollection: Items<CallToAction> = {\n    items: [\n      {\n        _id: 'generated',\n        sys: {\n          id: 'generated',\n        },\n        url: slug,\n        analytics: {\n          _id: 'generated',\n          sys: {\n            id: 'generated',\n          },\n          label: `Latest Post Hero CTA: ${pathname}`,\n        },\n        presentation: {\n          __typename: 'Button',\n          _id: 'generated',\n          sys: {\n            id: 'generated',\n          },\n          url: slug,\n          title: titleCtaRichText,\n          buttonType: 'Primary',\n        },\n      },\n    ],\n  };\n\n  if (!blockHero) return null;\n\n  const heroBackgroundColor = blockHero.backgroundColor ?? backgroundColor ?? BackgroundColor.White;\n\n  backgroundColor ??= BackgroundColor.White;\n  return (\n    <Hero\n      {...blockHero}\n      callsToActionCollection={callsToActionCollection}\n      backgroundColor={heroBackgroundColor}\n      theme={backgroundColor}\n      postChildren={postChildren}\n    />\n  );\n};\n", "import { gql } from '@apollo/client';\n\nimport type { ContentfulTypedSysProps } from '../../types/contentful';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport type { MediaDataProps } from '../Media';\nimport { assetFragment } from '../Media';\n\nexport interface PageAssetDataProps extends ContentfulTypedSysProps<'PageAsset'> {\n  media: MediaDataProps;\n}\n\n// =================================================================================================\n// Page Asset Fragment\n// =================================================================================================\nexport const pageAssetFragment = gql`\n  fragment PageAssetAll on PageAsset {\n    ...ContentfulSysId\n    media {\n      ...AssetAll\n    }\n  }\n  ${assetFragment}\n  ${contentfulSysIdFragment}\n`;\n", "import { gql } from '@apollo/client';\nimport type { Experiment, PageAsset } from '@snapchat/mw-contentful-schema';\n\nimport type { ContentfulTypedSysProps } from '../../types/contentful';\nimport type { Items } from '../../types/Items';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { type BlockDataProps, blockQueryLimit } from '../Block';\nimport { createExperimentFragmentNoAb } from '../Experiment/experimentQuery';\nimport { pageAssetFragment } from '../Page/pageAssetQuery';\nimport type { SubNavigationDataProps } from '../SubNavigation';\nimport { fragments as heroFragments } from './query';\nimport type { HeroDataProps } from './types';\n\n// =================================================================================================\n// Page Block Hero Fragment\n// =================================================================================================\n\n// nice to have: filter for hero only\nconst pageBlockCollectionsFragment = gql`\n  fragment PageBlocksCollection on Page {\n    ...ContentfulSysId\n    blocksCollection(limit: ${blockQueryLimit}) {\n      items {\n        __typename\n        ... on BlockHero {\n          ...BlockHeroAll\n        }\n        ... on Block {\n          ...ContentfulSysId\n          title {\n            json\n          }\n        }\n      }\n    }\n  }\n  ${contentfulSysIdFragment}\n`;\n\nexport interface BlockWithTitle {\n  __typename: string;\n  title?: { json: unknown } | string;\n}\n\ninterface PageBlocksCollectionData extends ContentfulTypedSysProps<'Page'> {\n  blocksCollection: Items<BlockDataProps | HeroDataProps | SubNavigationDataProps | BlockWithTitle>;\n}\n\n// =================================================================================================\n// Latest Post Hero\n// =================================================================================================\n\nexport const latestPostHeroQuery = gql`\n  query LatestPostHero($locale: String!, $preview: Boolean!) {\n    slugCollection(\n      limit: 1\n      order: postedDate_DESC\n      where: { AND: [{ slugType_contains: \"Blog\" }] }\n      locale: $locale\n      preview: $preview\n    ) {\n      items {\n        ...ContentfulSysId\n        slug\n        postedDate\n        author {\n          ...ContentfulSysId\n          name\n          position\n          slug\n        }\n        page {\n          ...PageAssetAll\n          ...ExperimentOnPageLoadingPageBlocksCollection\n        }\n      }\n    }\n  }\n  ${contentfulSysIdFragment}\n  ${heroFragments.all}\n  ${pageBlockCollectionsFragment}\n  ${createExperimentFragmentNoAb('Page', 'PageBlocksCollection', pageBlockCollectionsFragment)}\n  ${pageAssetFragment}\n`;\n\nexport interface LatestPostHeroProps {\n  slugCollection: Items<\n    ContentfulTypedSysProps<'Slug'> & {\n      slug: string;\n      page: PageBlocksCollectionData | Experiment | PageAsset;\n      author?: {\n        name: string;\n        position: number;\n        slug: string;\n      };\n    }\n  >;\n}\n", "import { ensureSingleScript } from '@snapchat/mw-common/client';\nimport type Hls from 'hls.js';\nimport { type FC, type PropsWithChildren, useEffect, useRef } from 'react';\n\nimport { logError } from '../../helpers/logging';\nimport { Feature, useFeatureFlags } from '../FeatureFlags';\n\n/**\n * Handles initializing Hls playback for any child video elements that have an .m3u8 source.\n *\n * Usage: Wrap children that contain videos elements who may need to handle hls playback:\n *\n *     <HlsInitializer>\n *       <SomeComponent />\n *     </HlsInitializer>;\n */\nexport const HlsInitializer: FC<PropsWithChildren> = ({ children }) => {\n  const features = useFeatureFlags();\n  const hlsInitializerRef = useRef<HTMLDivElement>(null);\n\n  const hlsFeatureEnabled = features[Feature.ENABLE_HLS_PLAYBACK] === 'true';\n\n  useEffect(() => {\n    if (!hlsFeatureEnabled) return;\n\n    if (!hlsInitializerRef.current) return;\n\n    const hlsInstances: Hls[] = [];\n\n    const getSourceFromVideo = (video: HTMLVideoElement) => {\n      const sources = Array.from(video.querySelectorAll('source'));\n\n      for (const sourceElement of sources) {\n        const src = sourceElement.getAttribute('src');\n        if (src) return src;\n      }\n\n      return null;\n    };\n\n    const ensureHlsJs = () => {\n      return new Promise<void>(resolve => {\n        if (window.Hls) {\n          resolve();\n          return;\n        }\n\n        ensureSingleScript('hls.js', '/hls.min.1.5.18.js', resolve);\n      });\n    };\n\n    const initializeHlsForVideo = async (video: HTMLVideoElement) => {\n      const source = getSourceFromVideo(video);\n\n      if (!source?.endsWith('.m3u8')) return;\n\n      await ensureHlsJs();\n\n      // Hls.js is supported almost everywhere except older versions of Safari on iOS. For those cases, hls should be\n      // supported natively, so either way we should be able to play the video.\n      if (!window.Hls!.isSupported()) return;\n\n      // We know Hls is available after calling ensureHlsJs\n      const hls = new window.Hls!({\n        // -1 indicates that Hls.js will start playback at rendition based on connection speed and adjust as needed\n        startLevel: -1,\n      });\n      hls.loadSource(source);\n      hls.attachMedia(video);\n      hlsInstances.push(hls);\n\n      // The \"preload\" attribute dictates the the auto loading behavior of the video. A value of \"auto\" means the browser\n      // will load the video immediately, without waiting for the user to press play. Hls.js ignores the \"preload attribute,\n      // so to emulate this behavior, we can use add a few event listeners:\n      //\n      // 1) We'll stop loading the video when the \"loadedmetadata\" event is fired. This way we don't load any actual\n      // video content until user presses play.\n      //\n      // 2) We'll start loading the video when the \"play\" event fires, signaling us that they want to watch the video.\n      const shouldPreload = video.getAttribute('preload') === 'auto';\n\n      if (!shouldPreload) {\n        video.addEventListener('loadedmetadata', () => hls.stopLoad(), { once: true });\n        video.addEventListener('play', () => hls.startLoad(), { once: true });\n      }\n    };\n\n    // Scan children for video elements and initialize Hls for them\n    const videos = hlsInitializerRef.current?.querySelectorAll('video') ?? [];\n\n    for (const video of Array.from(videos)) {\n      initializeHlsForVideo(video).catch(error => {\n        logError({\n          component: 'HlsInitializer',\n          message: 'Failed to initialize Hls for video',\n          error,\n        });\n      });\n    }\n\n    // Set up a MutationObserver to watch for new video elements being added to the dom\n    const observer = new MutationObserver(mutations => {\n      // First get all added nodes from list of dom mutations\n      const childListMutations = mutations.filter(mutation => mutation.type === 'childList');\n      const addedNodes = childListMutations\n        .flatMap(mutation => Array.from(mutation.addedNodes))\n        .filter(node => node instanceof HTMLElement);\n\n      // Classify the nodes as video nodes and other nodes\n      const videoNodes = addedNodes.filter(\n        node => node instanceof HTMLVideoElement\n      ) as HTMLVideoElement[];\n      const otherNodes = addedNodes.filter(\n        node => !(node instanceof HTMLVideoElement)\n      ) as HTMLElement[];\n\n      // Combine newly added video nodes with videos found in other nodes for a full list of new videos\n      const childVideos = otherNodes.flatMap(node => Array.from(node.querySelectorAll('video')));\n      const allNewVideos = [...videoNodes, ...childVideos];\n\n      // Initialize hls for all new videos\n      for (const video of allNewVideos) {\n        initializeHlsForVideo(video).catch(error => {\n          logError({\n            component: 'HlsInitializer',\n            message: 'Failed to initialize Hls for video',\n            error,\n          });\n        });\n      }\n    });\n\n    observer.observe(hlsInitializerRef.current, { childList: true, subtree: true });\n\n    // Cleanup:\n    // 1) Destroy all Hls instances when the component unmounts\n    // 2) Stop listening for dom changes by disconnect the observer\n    return () => {\n      for (const hls of hlsInstances) {\n        hls.destroy();\n      }\n      observer.disconnect();\n    };\n  }, [hlsFeatureEnabled]);\n\n  return (\n    <article ref={hlsInitializerRef} data-testid=\"mwp-hls-init\">\n      {children}\n    </article>\n  );\n};\n", "import { gql } from '@apollo/client';\nimport type { Experiment, PageAsset } from '@snapchat/mw-contentful-schema';\nimport type { BackgroundColor, MotifScheme } from '@snapchat/snap-design-system-marketing';\n\nimport type { ContentfulSysProps, ContentfulTypedSysProps } from '../../types/contentful';\nimport type { Items } from '../../types/Items';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { createExperimentFragmentNoAb } from '../Experiment/experimentQuery';\nimport { pageAssetFragment } from '../Page/pageAssetQuery';\n\n// =================================================================================================\n// Page Category Title Fragment\n// =================================================================================================\n\nconst pageCategoryTitleFragment = gql`\n  fragment PageCategoryTitle on Page {\n    ...ContentfulSysId\n    title\n    category {\n      ...ContentfulSysId\n      title\n    }\n  }\n  ${contentfulSysIdFragment}\n`;\n\nexport interface PageCategoryTitle extends ContentfulTypedSysProps<'Page'> {\n  title: string;\n  category: {\n    title: string;\n  };\n}\n\n// =================================================================================================\n// Latest post block query\n// =================================================================================================\n\nexport const latestPostBlockQuery = gql`\n  query LatestPostBlockQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    latestPosts(preview: $preview, locale: $locale, id: $id) {\n      ...ContentfulSysId\n      title\n      maxPosts\n      brandBackgroundColor\n      backgroundColor\n      cta {\n        ...ContentfulSysId\n      }\n      anchorId\n    }\n    slugCollection(\n      preview: $preview\n      locale: $locale\n      limit: 4\n      order: postedDate_DESC\n      where: { AND: [{ slugType_contains: \"Blog\" }, { slug_not: \"home\" }] }\n    ) {\n      items {\n        sys {\n          id\n          firstPublishedAt\n        }\n        __typename\n        slug\n        postedDate\n        author {\n          ...ContentfulSysId\n          name\n          position\n          slug\n        }\n        page {\n          ...PageAssetAll\n          ...ExperimentOnPageLoadingPageCategoryTitle\n        }\n      }\n    }\n  }\n  ${contentfulSysIdFragment}\n  ${createExperimentFragmentNoAb('Page', 'PageCategoryTitle', pageCategoryTitleFragment)}\n  ${pageAssetFragment}\n`;\n\nexport interface LatestPostBlockDataProps extends ContentfulTypedSysProps<'LatestPosts'> {\n  brandBackgroundColor?: MotifScheme;\n  backgroundColor?: BackgroundColor;\n}\n\nexport interface LatestPostBlockData {\n  latestPosts: {\n    title: string;\n    maxPosts: number;\n    brandBackgroundColor?: MotifScheme;\n    backgroundColor?: BackgroundColor;\n    cta?: ContentfulSysProps;\n    anchorId?: string;\n  };\n  slugCollection: Items<{\n    __typename: 'Slug';\n    sys: {\n      id: string;\n      firstPublishedAt: string;\n    };\n    slug: string;\n    postedDate?: string;\n    author?: {\n      name: string;\n      position: number;\n      slug: string;\n    };\n    page: PageCategoryTitle | Experiment | PageAsset;\n  }>;\n}\n", "import type { LatestPostItem } from '@snapchat/snap-design-system-marketing';\nimport { FormattedMessage, LatestPosts } from '@snapchat/snap-design-system-marketing';\nimport type { FC, ReactNode } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport type { ContentfulIdVariable } from '../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport { useFormatDate } from '../../hooks/useFormatDate';\nimport { useMotifScheme } from '../../hooks/useMotifScheme';\nimport type { ContentfulSysProps } from '../../types/contentful';\nimport { Anchor } from '../Anchor';\nimport { CallToAction } from '../CallToAction';\nimport { useExperiment } from '../Experiment/useExperiments';\nimport type { LatestPostBlockData } from './query';\nimport { latestPostBlockQuery } from './query';\n\nexport interface LatestPostBlockProps extends ContentfulSysProps {\n  preChildren?: ReactNode;\n  postChildren?: ReactNode;\n}\n\nexport const LatestPostBlock: FC<LatestPostBlockProps> = props => {\n  const { formatDate } = useFormatDate();\n  const { decideExperiment } = useExperiment();\n\n  const { data } = useContentfulQuery<LatestPostBlockData, ContentfulIdVariable>(\n    latestPostBlockQuery,\n    { variables: { id: props.sys.id } }\n  );\n\n  const motifScheme = useMotifScheme(data?.latestPosts?.brandBackgroundColor);\n\n  if (!data) return null;\n\n  const {\n    latestPosts: { title, maxPosts, backgroundColor, cta, anchorId },\n    slugCollection,\n  } = data;\n\n  // Edge case: total number of eligible slugs is less than configured maxPosts value\n  const postsToRender = Math.min(maxPosts, slugCollection.items.length);\n\n  const items: LatestPostItem[] = Array(postsToRender)\n    .fill(0)\n    .map((_: undefined, index: number) => {\n      const slug = slugCollection.items[index]!;\n      const dateFormatted = formatDate(\n        slug.postedDate ? slug.postedDate : slug.sys.firstPublishedAt,\n        {\n          month: 'long',\n          day: '2-digit',\n          year: 'numeric',\n          weekday: 'long',\n        }\n      );\n      const author = slug.author && (\n        <FormattedMessage\n          id=\"authorByline\"\n          values={{\n            author: slug.author.name,\n          }}\n          defaultMessage=\"By <b>{author}</b>\"\n        />\n      );\n\n      const date = dateFormatted && (\n        <FormattedMessage\n          id=\"postedOn\"\n          values={{ date: dateFormatted }}\n          defaultMessage=\"on {date}\"\n        />\n      );\n\n      if (slug.page.__typename === 'PageAsset') {\n        return {\n          title: (\n            <Anchor href={slug.slug} key={slug.slug}>\n              {slug.page?.media?.title}\n            </Anchor>\n          ),\n          author,\n          date,\n        };\n      }\n\n      if (slug.page.__typename === 'Page' || slug.page.__typename === 'Experiment') {\n        const { decision: page } = decideExperiment(slug.page, { logImpression: false });\n\n        return {\n          title: (\n            <Link to={slug.slug} key={slug.slug}>\n              {page.title}\n            </Link>\n          ),\n          author,\n          date,\n          category: page.category?.title,\n        };\n      }\n      throw new Error('Unknown page type.');\n    });\n\n  const ctaElement = cta && <CallToAction key={cta.sys.id} {...cta} />;\n  return (\n    <LatestPosts\n      anchorId={anchorId}\n      title={title}\n      items={items}\n      cta={ctaElement}\n      motifScheme={motifScheme}\n      backgroundColor={backgroundColor}\n      preChildren={props.preChildren}\n      postChildren={props.postChildren}\n    />\n  );\n};\n\nLatestPostBlock.displayName = 'LatestPostBlock';\n", "import { gql } from '@apollo/client';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { fragments as videoFragments } from '../Video/query';\n\nexport const fragments = {\n  all: gql`\n    fragment MultiVideoBlockAll on MultiVideoBlock {\n      ...ContentfulSysId\n      anchorId\n      panelPosition\n      primaryVideosCollection(limit: 10) {\n        items {\n          ... on Video {\n            ...VideoAll\n          }\n        }\n      }\n      secondaryVideosCollection(limit: 10) {\n        items {\n          ... on Video {\n            ...VideoAll\n          }\n        }\n      }\n      mobilePrimaryVideosCollection(limit: 10) {\n        items {\n          ... on Video {\n            ...VideoAll\n          }\n        }\n      }\n      mobileSecondaryVideosCollection(limit: 10) {\n        items {\n          ... on Video {\n            ...VideoAll\n          }\n        }\n      }\n    }\n    ${videoFragments.all}\n    ${contentfulSysIdFragment}\n  `,\n};\n\nexport const query = gql`\n  query MultiVideoBlockQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    multiVideoBlock(preview: $preview, locale: $locale, id: $id) {\n      ...MultiVideoBlockAll\n    }\n  }\n  ${fragments.all}\n`;\n", "import type { VideoItem } from '@snapchat/snap-design-system-marketing';\nimport { MultiVideoBlock as MultiVideoBlockSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport type { ContentfulIdVariable } from '../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport type { VideoDataProps } from '../Video/types';\nimport { query } from './query';\nimport type { MultiVideoBlockProps, MultiVideoDataHandlerProps } from './types';\n\nconst updateCollection = (collection: Array<VideoDataProps>) => {\n  if (!collection || !collection.length) return [];\n  return collection.map(item => {\n    return { ...item, id: item.sys.id } as VideoItem;\n  });\n};\n\nexport const MultiVideoBlock: FC<MultiVideoBlockProps> = ({\n  children,\n  id,\n  togglePanelClassName,\n  togglePanelLabel,\n  preChildren,\n  postChildren,\n  ...otherProps\n}) => {\n  const { data } = useContentfulQuery<MultiVideoDataHandlerProps, ContentfulIdVariable>(query, {\n    variables: { id },\n  });\n\n  if (data) {\n    const {\n      anchorId,\n      panelPosition,\n      primaryVideosCollection,\n      secondaryVideosCollection,\n      mobilePrimaryVideosCollection,\n      mobileSecondaryVideosCollection,\n    } = data.multiVideoBlock;\n\n    return (\n      <MultiVideoBlockSDS\n        anchorId={anchorId}\n        id={id}\n        toggleButtonIcons={['hover', 'reveal', 'follow', 'orbit']}\n        panelPosition={panelPosition}\n        primaryVideos={updateCollection(primaryVideosCollection?.items)}\n        secondaryVideos={updateCollection(secondaryVideosCollection?.items)}\n        mobilePrimaryVideos={updateCollection(mobilePrimaryVideosCollection?.items)}\n        mobileSecondaryVideos={updateCollection(mobileSecondaryVideosCollection?.items)}\n        togglePanelLabel={togglePanelLabel}\n        togglePanelClassName={togglePanelClassName}\n        preChildren={preChildren}\n        postChildren={postChildren}\n        {...otherProps}\n      >\n        {children}\n      </MultiVideoBlockSDS>\n    );\n  }\n\n  return null;\n};\n\nMultiVideoBlock.displayName = 'MultiVideoBlock';\n", "import { cx } from '@emotion/css';\nimport { ButtonType, MotifScheme } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { CallToAction } from '../CallToAction';\nimport type { CallToActionDataProps } from '../CallToAction/types';\nimport { persistentCtaContainerCss, persistentCtaVisibleCss } from './PersistentCta.styles';\n\ninterface PersistentCtaProps {\n  mobileCta: CallToActionDataProps;\n  shouldScrollToShow?: boolean;\n}\n\nexport const PersistentCta: FC<PersistentCtaProps> = ({ mobileCta, shouldScrollToShow }) => {\n  const [isVisible, setIsVisible] = useState(!shouldScrollToShow);\n\n  const button = useMemo(\n    () =>\n      mobileCta.presentation\n        ? { ...mobileCta.presentation, buttonType: ButtonType.Primary }\n        : undefined,\n    [mobileCta.presentation]\n  );\n\n  useEffect(() => {\n    if (!button || !shouldScrollToShow) return;\n\n    const handleScroll = () => {\n      const shouldShow = window.scrollY >= window.innerHeight;\n      setIsVisible(shouldShow);\n    };\n\n    document.addEventListener('scroll', handleScroll, { passive: true });\n\n    handleScroll();\n\n    return () => {\n      document.removeEventListener('scroll', handleScroll);\n    };\n  }, [button, shouldScrollToShow]);\n\n  if (!button) return null;\n\n  return (\n    <aside\n      data-testid=\"mwp-persistent-cta\"\n      className={cx(MotifScheme.SECONDARY, persistentCtaContainerCss, {\n        [persistentCtaVisibleCss]: isVisible,\n      })}\n      aria-hidden={!isVisible}\n    >\n      <CallToAction {...mobileCta} presentation={button} />\n    </aside>\n  );\n};\n\nPersistentCta.displayName = 'PersistentCta';\n", "import { css } from '@emotion/css';\nimport { m, MotifComponent, ZIndex } from '@snapchat/snap-design-system-marketing';\n\nexport const persistentCtaContainerCss = css`\n  background-color: ${m('--bg-color')};\n  bottom: 0;\n  opacity: 0;\n  padding: ${m('--spacing-xs')};\n  position: sticky;\n  transition: opacity 300ms ease-in-out, visibility 0s 300ms;\n  visibility: hidden;\n  z-index: ${ZIndex.MOBILE_CTA};\n\n  .${MotifComponent.BUTTON}.${MotifComponent.BUTTON} {\n    align-items: center;\n    border-radius: ${m('--border-radius-s')};\n    display: flex;\n    justify-content: center;\n    min-height: 54px; /* Custom for this feature. */\n  }\n`;\n\nexport const persistentCtaVisibleCss = css`\n  opacity: 1;\n  transition: opacity 300ms ease-in-out, visibility 0s 0s;\n  visibility: visible;\n`;\n", "import { css } from '@emotion/css';\nimport type { ScrollAnimatedSectionAnimatedContentCollection } from '@snapchat/mw-contentful-schema';\nimport {\n  ScrollAnimatedSection as ScrollableSectionSDS,\n  ScrollAnimatedVideo,\n} from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useCallback, useEffect, useMemo, useRef } from 'react';\n\nimport { getHeaderHeightFromCssVar, totalHeaderHeightCssVar } from '../Header/headerSizeUtils';\n\ninterface ScrollableSectionProps {\n  anchorId?: string;\n  animatedContentCollection?: ScrollAnimatedSectionAnimatedContentCollection;\n  scrollHeight?: number;\n}\n\nconst innerScrollContainerCss = css`\n  height: calc(100vh - var(${totalHeaderHeightCssVar}));\n  top: var(${totalHeaderHeightCssVar});\n`;\n\nconst scrubVideoCss = css`\n  position: absolute;\n  object-fit: cover;\n  width: 100%;\n  height: 100%;\n`;\n\nexport const ScrollAnimatedSection: FC<ScrollableSectionProps> = ({\n  anchorId,\n  scrollHeight = 1,\n  animatedContentCollection,\n}) => {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const totalHeaderHeightRef = useRef<number>(64);\n\n  // gets header height value from css var. only need to do this once\n  // until we allow variable header heights... one day...\n  // when that time comes we will have a hook w/ resize observer to fix this\n  useEffect(() => {\n    totalHeaderHeightRef.current = getHeaderHeightFromCssVar();\n  }, []);\n\n  /**\n   * Function that returns the scroll progress for the scrub video. This returns the percentage of\n   * the scrollable section that has scrolled past the top of the screen.\n   */\n  const calculateScrollProgress = useCallback(() => {\n    if (!containerRef.current) {\n      return 0;\n    }\n    const top =\n      (containerRef.current.getBoundingClientRect().top - totalHeaderHeightRef.current) * -1;\n\n    const totalHeight = containerRef.current.offsetHeight - window.innerHeight;\n    const scrollProgress = top / totalHeight;\n    return scrollProgress;\n  }, []);\n\n  const heightStyle = useMemo(() => {\n    return { height: `${scrollHeight * 100}vh` };\n  }, [scrollHeight]);\n\n  return (\n    <ScrollableSectionSDS\n      anchorId={anchorId}\n      innerContainerClassName={innerScrollContainerCss}\n      containerRef={containerRef}\n      style={heightStyle}\n    >\n      {animatedContentCollection?.items.map(video => {\n        const {\n          sys,\n          mp4Source,\n          webmSource,\n          videoStart,\n          videoEnd,\n          scrubStart = 0,\n          scrubEnd = 100,\n        } = video;\n        if (!mp4Source?.url || !webmSource?.url) return null;\n        return (\n          <ScrollAnimatedVideo\n            calculateScrollProgress={calculateScrollProgress}\n            className={scrubVideoCss}\n            key={sys.id}\n            scrubEnd={scrubEnd}\n            scrubStart={scrubStart}\n            videoEnd={videoEnd}\n            videoMp4Src={mp4Source.url}\n            videoStart={videoStart}\n            videoWebmSrc={webmSource?.url}\n          />\n        );\n      })}\n    </ScrollableSectionSDS>\n  );\n};\n", "import { css } from '@emotion/css';\nimport {\n  extraLargeDesktopWidth,\n  m,\n  mobileMediaQuery,\n} from '@snapchat/snap-design-system-marketing';\n\nexport const slugContainerCss = css`\n  display: flex;\n  width: 100%;\n  justify-content: left;\n  margin: auto;\n  max-width: ${extraLargeDesktopWidth}px;\n\n  html[dir='rtl'] & {\n    justify-content: right;\n  }\n\n  ${mobileMediaQuery} {\n    display: block;\n  }\n`;\n\n/**\n * Give the slug a default gutter color so the gutter doesn't flicker. Unfortunately does not work\n * if the page background color is set to a different color But handles the default case well\n */\nexport const slugGutterCss = css`\n  ::before {\n    background-color: ${m('--gutter-color')};\n    content: '';\n    height: 100vh;\n    inset: 0;\n    position: fixed;\n    width: 100vw;\n    z-index: -10;\n  }\n`;\n\nexport const slugContainerWithSideNavCss = css`\n  overflow: clip;\n`;\n\nexport const minHeightCss = css`\n  min-height: calc(100vh - var(--total-header-height));\n  min-height: calc(100dvh - var(--total-header-height));\n`;\n", "import { useContentfulImages } from '@snapchat/mw-contentful-client';\nimport type { ImageSources } from '@snapchat/snap-design-system-marketing';\nimport { SplitBlock as SplitBlockSDS } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport { useMotifScheme } from '../../hooks/useMotifScheme';\nimport { useParseMediaContainer } from '../../hooks/useParseMediaContainer';\nimport { combineImageSources } from '../../utils/combineImageSources';\nimport { renderRichTextWithElements } from '../../utils/renderText/renderRichText';\nimport { CallToAction } from '../CallToAction';\nimport { getImageSourceSettings } from '../Image';\nimport type { SplitBlockDataProps } from './SplitBlock.query';\n\ninterface VideoProps {\n  videoSource?: string;\n  mobileVideoSource?: string;\n  mediaContentType?: string;\n  mobileMediaContentType?: string;\n  posterSource?: string;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO: Refactor to reduce complexity.\nexport const SplitBlock: FC<SplitBlockDataProps> = props => {\n  const { getImageSources } = useContentfulImages();\n\n  const {\n    splitBlockTitle: title,\n    splitBlockSubtitle: subtitle,\n    splitBlockBody: body,\n    media,\n    callsToActionCollection,\n    splitBlockBody,\n    mediaCaption,\n    anchorId,\n    brandBackgroundColor,\n    ...restProps\n  } = props;\n\n  const motifScheme = useMotifScheme(brandBackgroundColor);\n\n  const {\n    media: { imageSource, imageAltText, videoSource, contentType },\n    mobileMedia: {\n      imageSource: mobileImageSource,\n      imageAltText: mobileImageAltText,\n      videoSource: mobileVideoSource,\n      contentType: mobileContentType,\n    },\n    thumbnailSource,\n  } = useParseMediaContainer(media);\n\n  const backgroundMediaType = media.__typename;\n\n  let imgSrcs: ImageSources | undefined;\n  let videoProps: VideoProps | undefined;\n\n  if (backgroundMediaType === 'Image') {\n    const { desktopSettings, mobileSettings } = getImageSourceSettings({\n      desktopHeight: media.media?.height ?? 0,\n      mobileHeight: media.mobileMedia?.height ?? 0,\n      enableHighDpi: media.enableHighDpi,\n      quality: media.quality,\n    });\n\n    imgSrcs = combineImageSources({\n      desktop: getImageSources(imageSource, desktopSettings),\n      mobile: getImageSources(mobileImageSource, mobileSettings),\n    });\n  }\n\n  if (backgroundMediaType === 'Video') {\n    videoProps = {\n      videoSource,\n      mobileVideoSource,\n      mediaContentType: contentType,\n      mobileMediaContentType: mobileContentType,\n      posterSource: thumbnailSource,\n    };\n  }\n\n  const callsToAction = callsToActionCollection?.items?.map(item => (\n    <CallToAction key={item.sys.id} {...item} />\n  ));\n\n  const stickers = media?.stickersCollection?.items?.map(sticker => ({\n    imgSrcs: getImageSources(sticker?.asset?.url) as ImageSources,\n    position: sticker?.position,\n    rotation: sticker?.rotation,\n  }));\n\n  return (\n    <SplitBlockSDS\n      title={title}\n      subtitle={subtitle}\n      body={renderRichTextWithElements(body)}\n      callsToAction={callsToAction?.length ? callsToAction : undefined}\n      imageSources={imgSrcs}\n      imageAltText={imageAltText ?? mobileImageAltText ?? mediaCaption}\n      mediaCaption={mediaCaption}\n      stickers={stickers}\n      motifScheme={motifScheme}\n      anchorId={anchorId}\n      {...videoProps}\n      {...restProps}\n    />\n  );\n};\n", "import type { FC } from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport { getTracer } from '../../utils/tracing';\n\n/**\n * Component for automation testing to track outgoing requests. Since its using the tracer, it also\n * includes anything that is being actively traced, but a majority of it is outgoing requests.\n */\nexport const ActiveEventCountTracker: FC = () => {\n  const divRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    return getTracer().addEventListener(\n      (_eventId, _eventName, _lifeCycle, activeEventCount: number) => {\n        divRef.current && (divRef.current.dataset.events = `${activeEventCount}`);\n      }\n    );\n  }, []);\n\n  return <div data-testid=\"mwp-active-traced-events\" ref={divRef} data-events=\"0\" hidden />;\n};\n", "import { css } from '@emotion/css';\nimport {\n  desktopSideNavWidthPx,\n  extraLargeDesktopWidth,\n  ZIndex,\n} from '@snapchat/snap-design-system-marketing';\n\nimport { richTextCtaClassName } from '../../utils/contentfulComponentMap';\nimport { totalHeaderHeightCssVar } from '../Header/headerSizeUtils';\n\n/**\n * Used to ensure consistent rendering of page since some of our breaks have different widths and\n * cause inconsistent rednering without this.\n */\nexport const pageContainerCss = css`\n  flex-grow: 1;\n  max-width: ${extraLargeDesktopWidth}px;\n`;\n\nexport const pageContainerWithSideNavCss = css`\n  max-width: ${extraLargeDesktopWidth - desktopSideNavWidthPx}px;\n`;\n\nexport const pageStickyCss = css`\n  position: sticky;\n  top: var(${totalHeaderHeightCssVar});\n  z-index: ${ZIndex.SUB_NAVIGATION};\n`;\n\nexport const bannerContentContainerCss = css`\n  line-height: 20px;\n  white-space: pre-wrap;\n\n  /* TODO: Swap this rule when use a proper <p> element for paragraphs */\n  .sdsm-p {\n    margin-bottom: 0;\n  }\n\n  .${richTextCtaClassName} {\n    font-size: 14px;\n    /*\n    need to unset lineheight because it messes with alignment :(\n    also need vertical align bottom to make it actually aligned for some reason\n    */\n    line-height: unset;\n    vertical-align: bottom;\n\n    /*\n    hack because icons mess up alignment due to their taller size and\n    we don't want to use flex because the text nodes won't be able to wrap\n    properly then\n    */\n    i {\n      font-size: 14px;\n      transform: scale(1.25);\n    }\n\n    /* same as above for images, bad and will update in future */\n    img {\n      height: 14px;\n      transform: scale(1.5);\n      margin-left: 2px;\n    }\n  }\n`;\n\nexport const stickyBottomCss = css`\n  position: sticky;\n  bottom: 0;\n  z-index: ${ZIndex.MOBILE_CTA};\n`;\n\nexport const pageFixedCss = css`\n  position: fixed;\n  bottom: 0;\n  z-index: ${ZIndex.PAGE_FIXED_PORTAL};\n`;\n", "import type { FC, PropsWithChildren } from 'react';\nimport { memo, useContext } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { AppContext } from '../../AppContext';\n\n// eslint-disable-next-line import/no-unused-modules\nexport const pageBottomStickyPortalId = 'mwp-page-bottom-sticky-portal';\n\n/**\n * Portal for rendering content at the bottom of the page in a persistent/sticky manner.\n *\n * Use as return React.createPortal(<element>, pageBottomStickyPortalId)\n */\nexport const PageBottomStickyPortal: FC<{ className?: string }> = memo(props => {\n  const { pageBottomStickyPortalRef } = useContext(AppContext);\n\n  return (\n    <aside\n      className={props.className}\n      data-testid={pageBottomStickyPortalId}\n      ref={pageBottomStickyPortalRef}\n    />\n  );\n});\n\n/**\n * Easy insertion point into the bottom of the page (but sticks as the user scrolls).\n *\n * Use as <IntoPageBottomStickyPortal>{.. your stuff ..}</IntoPageBottomStickyPortal>\n *\n * NOTE: The contently only gets inserted on the client. Nothing displays on the server.\n */\nexport const IntoPageBottomStickyPortal: FC<PropsWithChildren> = ({ children }) => {\n  const { pageBottomStickyPortalRef } = useContext(AppContext);\n\n  return pageBottomStickyPortalRef?.current\n    ? createPortal(children, pageBottomStickyPortalRef!.current)\n    : null;\n};\n", "import type { FC, PropsWithChildren } from 'react';\nimport { memo, useContext, useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { AppContext } from '../../AppContext';\n\n// eslint-disable-next-line import/no-unused-modules\nexport const pageFixedPortalId = 'mwp-page-fixed-portal';\n\n/**\n * Portal for rendering content above all of the page content in a persistent manner.\n *\n * Use as return React.createPortal(<element>, pageFixedPortalId)\n */\nexport const PageFixedPortal: FC<{ className?: string }> = memo(props => {\n  const { pageFixedPortalRef } = useContext(AppContext);\n\n  return (\n    <aside className={props.className} data-testid={pageFixedPortalId} ref={pageFixedPortalRef} />\n  );\n});\n\n/**\n * Easy insertion point into the page.\n *\n * Use as <IntoPageFixedPortal>{.. your stuff ..}</IntoPageFixedPortal>\n *\n * NOTE: The content only gets inserted on the client. Nothing displays on the server.\n */\nexport const IntoPageFixedPortal: FC<PropsWithChildren> = ({ children }) => {\n  const { pageFixedPortalRef } = useContext(AppContext);\n\n  /* The portal target ref is populated during the commit phase of PageFixedPortal.\n   * If this component renders in the same pass (e.g. with cached Apollo data), the\n   * ref will still be null on first render. Tracking mount state forces a second\n   * render after commit so the portal can actually attach.\n   */\n  const [isMounted, setIsMounted] = useState(false);\n\n  useEffect(() => {\n    setIsMounted(true);\n  }, []);\n\n  if (!isMounted || !pageFixedPortalRef?.current) return null;\n\n  return createPortal(children, pageFixedPortalRef.current);\n};\n", "export const pageStickyHeightCssVar = '--page-sticky-height';\n", "import { gql } from '@apollo/client';\nimport type { Banner } from '@snapchat/mw-contentful-schema';\nimport type { BackgroundColor, MotifScheme } from '@snapchat/snap-design-system-marketing';\n\nimport type { FooterView, HeaderView } from '../../context/PageLayoutContext';\nimport type { Category } from '../../types/Category';\nimport type { ContentfulTypedSysProps } from '../../types/contentful';\nimport type { Items } from '../../types/Items';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport type { BlockDataProps, BlockShallowDataProps } from '../Block';\nimport { blockAllFragment, blockFragmentShallow, blockQueryLimit } from '../Block';\nimport { blockTabsFragment } from '../BlockTabs';\nimport type { BlockTabsDataProps } from '../BlockTabs/types';\nimport type { BreakDataProps } from '../Break';\nimport { breakFragment } from '../Break';\nimport { ctaFragment } from '../CallToAction';\nimport type { FootnoteDataProps } from '../Footnote';\nimport { fragments as footnoteFragments } from '../Footnote';\nimport type { HeroDataProps } from '../Hero';\nimport { fragments as heroFragments } from '../Hero';\nimport type { ImageDataProps } from '../Image/types';\nimport { immersiveScrollBlockFragment } from '../ImmersiveScrollBlock';\nimport type { ImmersiveScrollBlockDataProps } from '../ImmersiveScrollBlock/types';\nimport type { LatestPostBlockDataProps } from '../LatestPostBlock';\nimport { fragments as assetsFragments } from '../Media/query';\nimport type { MediaDataProps } from '../Media/types';\nimport type { MetasDataProps } from '../Metas';\nimport { fragments as metaFragments } from '../Metas';\nimport { multiValuePropBlockFragment } from '../MultiValuePropBlock/query';\nimport type { MultiValuePropBlockProps } from '../MultiValuePropBlock/types';\nimport type { MultiVideoDataProps } from '../MultiVideoBlock';\nimport type { ScrollAnimatedSectionDataProps } from '../ScrollAnimatedSection/query';\nimport { scrollAnimatedSectionFragment } from '../ScrollAnimatedSection/query';\nimport type { SideNavigationDataProps } from '../SideNavigation';\nimport { type SplitBlockDataProps, splitBlockFragment } from '../SplitBlock/SplitBlock.query';\nimport type { SubNavigationDataProps } from '../SubNavigation';\nimport { subNavigationFragment } from '../SubNavigation';\n\n// =================================================================================================\n// Page Shallow Fragment\n// =================================================================================================\n\n/**\n * This shallow fragment does load deep ids for the blocks and content so that they can be loaded in\n * the next load cycle. This allows for executing all of the children queries in parallel.\n */\nexport const pageFragmentShallow = gql`\n  fragment PageShallow on Page {\n    ...ContentfulSysId\n    blocksCollection(limit: ${blockQueryLimit}) {\n      items {\n        # For non-standard blocks, just preload their ids.\n        ...ContentfulSysId\n        # For blocks, alse preload the content ids.\n        ... on Block {\n          ...BlockShallow\n        }\n      }\n    }\n  }\n  ${blockFragmentShallow}\n  ${contentfulSysIdFragment}\n`;\n\nexport interface PageShallowDataProps extends ContentfulTypedSysProps<'Page'> {\n  blocksCollection: Items<BlockShallowDataProps>;\n}\n\n// =================================================================================================\n// Banner Fragment\n// =================================================================================================\nexport const bannerFragment = gql`\n  fragment BannerAll on Banner {\n    ...ContentfulSysId\n    content {\n      json\n      links {\n        entries {\n          inline {\n            ... on CallToAction {\n              ...CallToActionAll\n            }\n          }\n        }\n      }\n    }\n    brandBackgroundColor\n    backgroundColor\n  }\n  ${contentfulSysIdFragment}\n  ${ctaFragment}\n`;\n\n// =================================================================================================\n// Page All Fragment\n// =================================================================================================\n\nexport const fragments = {\n  all: gql`\n    fragment PageAll on Page {\n      ...ContentfulSysId\n      title\n      metas {\n        ...MetaAll\n      }\n      banner {\n        ...BannerAll\n        # In case there's a MobileCta inside banner, we want to retrieve its ID.\n        ...ContentfulSysId\n      }\n      brandBackgroundColor\n      backgroundColor\n      backgroundMediaV2 {\n        __typename\n        ... on Video {\n          ...VideoAll\n        }\n        ... on Image {\n          ...ImageAll\n        }\n      }\n      backgroundMediaStyle\n      stretchPageBackgroundColor\n      blocksCollection(limit: ${blockQueryLimit}) {\n        items {\n          ...ContentfulSysId\n          ... on Block {\n            ...BlockAll\n          }\n          ... on BlockHero {\n            ...BlockHeroAll\n          }\n          ... on LatestPosts {\n            brandBackgroundColor\n            backgroundColor\n          }\n          ... on Break {\n            ...BreakAll\n          }\n          ... on SubNavigation {\n            ...SubNavigationAll\n          }\n          ... on ScrollAnimatedSection {\n            ...ScrollAnimatedSectionAll\n          }\n          ... on SplitBlock {\n            ...SplitBlockAll\n          }\n          ... on MultiValuePropBlock {\n            ...MultiValuePropBlockAll\n          }\n          ... on BlockTabs {\n            ...BlockTabsAll\n          }\n          ... on ImmersiveScrollBlock {\n            ...ImmersiveScrollBlockAll\n          }\n        }\n      }\n      mobileCta {\n        ...CallToActionAll\n      }\n      footnotesCollection(limit: 50) {\n        items {\n          ... on FootNotes {\n            ...FootNotesAll\n          }\n        }\n      }\n      collapseFootnotes\n      footerView\n      headerView\n      scrollSnap\n      localizedIn\n      showAiLocalizationBanner\n      denseLayout\n    }\n    ${bannerFragment}\n    ${blockAllFragment}\n    ${scrollAnimatedSectionFragment}\n    ${assetsFragments.all}\n    ${ctaFragment}\n    ${heroFragments.all}\n    ${footnoteFragments.all}\n    ${metaFragments.all}\n    ${contentfulSysIdFragment}\n    ${subNavigationFragment}\n    ${breakFragment}\n    ${splitBlockFragment}\n    ${multiValuePropBlockFragment}\n    ${blockTabsFragment}\n    ${immersiveScrollBlockFragment}\n  `,\n};\n\nexport type PageDataBlock =\n  | BlockDataProps\n  | HeroDataProps\n  | LatestPostBlockDataProps\n  | MultiVideoDataProps\n  | SubNavigationDataProps\n  | BreakDataProps\n  | ScrollAnimatedSectionDataProps\n  | SplitBlockDataProps\n  | MultiValuePropBlockProps\n  | BlockTabsDataProps\n  | ImmersiveScrollBlockDataProps\n  | ContentfulTypedSysProps<'Unknown'>; // Placeholder __typename as custom components could be any string\n\nexport type PageDataBlockWithBackgroundColor = Extract<\n  PageDataBlock,\n  | BlockDataProps\n  | HeroDataProps\n  | LatestPostBlockDataProps\n  | SubNavigationDataProps\n  | SplitBlockDataProps\n  | MultiValuePropBlockProps\n  | BlockTabsDataProps\n>;\n\nexport interface PageDataProps extends ContentfulTypedSysProps<'Page'> {\n  title: string;\n  metas?: MetasDataProps;\n  banner?: Banner;\n  blocksCollection?: Items<PageDataBlock>;\n  footnotesCollection?: Items<FootnoteDataProps>;\n  collapseFootnotes?: boolean;\n  sideNavigation?: SideNavigationDataProps;\n  tileImage?: ImageDataProps;\n  brandBackgroundColor?: MotifScheme;\n  backgroundColor?: BackgroundColor;\n  category?: Category;\n  backgroundMediaV2?: MediaDataProps;\n  footerView?: FooterView;\n  headerView?: HeaderView;\n  localizedIn?: string[];\n  showAiLocalizationBanner?: string[];\n  denseLayout?: boolean;\n}\n\n// =================================================================================================\n// Page Navigation Fragment\n// =================================================================================================\n\nexport const pageNavigationFragment = gql`\n  fragment PageNavigationShallow on Page {\n    ...ContentfulSysId\n    sideNavigation {\n      ...ContentfulSysId\n    }\n  }\n  ${contentfulSysIdFragment}\n`;\n\n// =================================================================================================\n// Page Query\n// =================================================================================================\nexport const pageAllQuery = gql`\n  query PageQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    page(preview: $preview, locale: $locale, id: $id) {\n      ...PageAll\n    }\n  }\n  ${fragments.all}\n`;\n\nexport interface PageAllDataProps {\n  page: PageDataProps;\n}\n\n// =================================================================================================\n// Page SiteMap Fragment\n// =================================================================================================\n/** Page Query optimized for generating site map data. */\nexport const pageSitemapFragment = gql`\n  fragment SiteMapPage on Page {\n    sys {\n      id\n    }\n    metas {\n      noIndex\n    }\n    localizedIn\n  }\n`;\n\n/** Page content model optimized for generating site map data. */\nexport interface PageSitemapData {\n  __typename: 'Page';\n  sys: {\n    id: string;\n  };\n  localizedIn?: string[];\n  metas?: {\n    noIndex?: boolean;\n  };\n}\n\n/** Allows querying multiple entries by sys id */\nexport const pageBlocksCollectionQuery = gql`\n  query PageBlocksCollectionQuery(\n    $preview: Boolean!\n    $locale: String!\n    $ids: [String]!\n    $limit: Int = 10\n  ) {\n    entryCollection(\n      preview: $preview\n      locale: $locale\n      where: { sys: { id_in: $ids } }\n      limit: $limit\n    ) {\n      items {\n        ...ContentfulSysId\n        ... on Block {\n          ...BlockAll\n        }\n        ... on BlockHero {\n          ...BlockHeroAll\n        }\n      }\n    }\n  }\n  ${contentfulSysIdFragment}\n  ${blockAllFragment}\n  ${heroFragments.all}\n`;\n", "import { gql } from '@apollo/client';\nimport type { Criteria, Experiment } from '@snapchat/mw-contentful-schema';\n\nimport type { ContentfulTypedSysProps } from '../../types/contentful';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { createExperimentFragmentNoAb } from '../Experiment/experimentQuery';\nimport { pageNavigationFragment } from '../Page/pageQuery';\nimport type { PageNavigationShallowDataProps } from '../Page/types';\n\nexport const pageSideNavbarQuery = gql`\n  query AllPageSideNavQuery($preview: Boolean!, $locale: String!, $limit: Int, $skip: Int) {\n    slugCollection(\n      limit: $limit\n      skip: $skip\n      preview: $preview\n      locale: $locale\n      where: { page_exists: true }\n    ) {\n      total\n      items {\n        ...ContentfulSysId\n        slug\n        page {\n          ...ExperimentOnPageLoadingPageNavigationShallow\n        }\n        unlistedCriteria {\n          ...CriteriaAll\n        }\n      }\n    }\n  }\n  ${contentfulSysIdFragment}\n  ${createExperimentFragmentNoAb('Page', 'PageNavigationShallow', pageNavigationFragment)}\n`;\n\nexport type PageNavigationData = {\n  slugCollection: {\n    total: number;\n    items: Array<\n      ContentfulTypedSysProps<'Slug'> & {\n        slug: string;\n        // NOTE: This is not a true experiment, but only the ExperimentDefaultReference.\n        // TODO: Fix the types. Currently we don't support experimentation on the side nav-level.\n        page: PageNavigationShallowDataProps | Experiment;\n        unlistedCriteria?: Criteria;\n      }\n    >;\n  };\n};\n", "import { cx } from '@emotion/css';\nimport { htmlEscape } from '@snapchat/core';\nimport type { FC } from 'react';\nimport { useContext, useEffect } from 'react';\nimport type { RouteProps } from 'react-router-dom';\nimport { useLocation } from 'react-router-dom';\n\nimport { Config } from '../../config';\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { PageLayoutContext } from '../../context/PageLayoutContext';\nimport { logWarning } from '../../helpers/logging';\nimport { Feature, useFeatureFlags } from '../FeatureFlags';\nimport { SideNavigationShallow } from '../SideNavigation';\nimport {\n  minHeightCss,\n  slugContainerCss,\n  slugContainerWithSideNavCss,\n  slugGutterCss,\n} from './Slug.styles';\nimport { SlugCollection } from './SlugCollection';\nimport { useSlugToNavMap } from './useSlugToNavMap';\n\nexport const Slug: FC<RouteProps> = () => {\n  const location = useLocation();\n  // NOTE: We don't use the useParams() hook here because we want to check\n  // the pathname exactly. Otherwise we run into issues like \"///foo\" not matching\n  // routes like \"/:slug*\", and router thinking it should be a homepage match.\n  // See https://jira.sc-corp.net/browse/WEBP-9117\n  const originalSlug = location.pathname.substring(1);\n  const slug = originalSlug === '' ? 'home' : htmlEscape(originalSlug);\n  const featureFlags = useFeatureFlags();\n\n  // TODO: Delete once we no longer need this functionality, after snapchat\n  // home is fully migrated to consumer web.\n  const shouldRedirectHome = featureFlags[Feature.HOME_REDIRECT] === 'true';\n\n  useEffect(() => {\n    if (shouldRedirectHome && originalSlug === 'home' && Config.isClient) {\n      const url = new URL(window.location.href);\n      url.pathname = '';\n      window.history.replaceState(null, '', url); // or pushState\n    }\n  }, [originalSlug, shouldRedirectHome]);\n\n  // biome-ignore lint/correctness/useExhaustiveDependencies: We want to scroll to the top of the slug on every slug change\n  useEffect(() => {\n    window.scrollTo(0, 0);\n  }, [slug]);\n\n  const { sideNavMap, subNavMap } = useSlugToNavMap();\n\n  const hasSideNav = sideNavMap.has(slug);\n  const sideNavId = sideNavMap.get(slug)?.sys.id;\n  const hasSubNav = subNavMap.has(slug);\n  const subNavId = subNavMap.get(slug)?.sys.id;\n\n  const { setHasSideNav, setHasSubNav } = useContext(PageLayoutContext);\n\n  useEffect(() => {\n    setHasSideNav?.(hasSideNav);\n    setHasSubNav?.(hasSubNav);\n  }, [hasSideNav, hasSubNav, setHasSideNav, setHasSubNav]);\n\n  if (sideNavId && subNavId) {\n    logWarning({\n      component: 'Slug',\n      message: `Having both a SideNav and a SubNav isn't supported.`,\n      context: { slug },\n    });\n  }\n\n  // The <main> is set in index.ejs\n  return (\n    <div\n      data-testid=\"mwp-slug\"\n      className={cx(slugContainerCss, minHeightCss, slugGutterCss, {\n        [slugContainerWithSideNavCss]: hasSideNav,\n      })}\n    >\n      {sideNavId && (\n        <ElementLocation.Provider value={{ elementLocation: 'SideNavigation' }}>\n          <SideNavigationShallow sys={{ id: sideNavId }} />\n        </ElementLocation.Provider>\n      )}\n      <SlugCollection key={slug} slug={slug} />\n    </div>\n  );\n};\n", "import { gql } from 'graphql-tag';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { criteriaFragment } from '../Experiment';\n\n// TODO: get url from first level items so it allows first level links or sections\n// (not implemented in SDS)\n\nexport const fragments = {\n  all: gql`\n    fragment SideNavigationAll on SideNavigation {\n      ...ContentfulSysId\n      brandBackgroundColor\n      backgroundColor\n      brandBackgroundColorMobile\n      mobileBackgroundColor\n      navigatorItemsCollection(limit: 14) {\n        items {\n          ...ContentfulSysId\n          title {\n            json\n          }\n          hideCriteria {\n            ...CriteriaAll\n          }\n          navigatorItemsCollection(limit: 15) {\n            items {\n              ...ContentfulSysId\n              title {\n                json\n              }\n              url\n              hideCriteria {\n                ...CriteriaAll\n              }\n            }\n          }\n        }\n      }\n    }\n    ${criteriaFragment}\n    ${contentfulSysIdFragment}\n  `,\n};\n\nexport const query = gql`\n  query SideNavigationQuery($preview: Boolean!, $locale: String!, $id: String!) {\n    sideNavigation(preview: $preview, locale: $locale, id: $id) {\n      ...SideNavigationAll\n    }\n  }\n  ${fragments.all}\n`;\n", "import { documentToPlainTextString } from '@contentful/rich-text-plain-text-renderer';\nimport type {\n  NavigatorItem as NavigatorItemType,\n  SideNavigation as SideNavigationType,\n} from '@snapchat/mw-contentful-schema';\nimport type {\n  SideNavigationItemProps,\n  SideNavigationSectionProps,\n} from '@snapchat/snap-design-system-marketing';\nimport { SideNavigation as SideNavigationSDS } from '@snapchat/snap-design-system-marketing';\nimport { type FC, useContext } from 'react';\n\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logUserEvent } from '../../helpers/logging';\nimport type { ContentfulIdVariable } from '../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport { useMotifScheme } from '../../hooks/useMotifScheme';\nimport { UserAction } from '../../types/events';\nimport { isContentfulSysProps } from '../../utils/contentful';\nimport { getContentfulInspectorProps } from '../../utils/contentful/getContentfulInspectorProps';\nimport { useExperiment } from '../Experiment';\nimport { useConsumerContext } from '../useConsumerContext';\nimport { query } from './query';\nimport { stickToHeaderCss } from './styles';\nimport type {\n  NavigatorItemWithChildrenData,\n  SideNavigationDataHandlerProps,\n  SideNavigationDataProps,\n  SideNavigationProps,\n} from './types';\n\nexport const SideNavigation: FC<SideNavigationDataProps> = ({\n  navigatorItemsCollection,\n  brandBackgroundColor,\n  backgroundColor,\n  brandBackgroundColorMobile,\n  mobileBackgroundColor,\n  sys,\n}) => {\n  const motifScheme = useMotifScheme(brandBackgroundColor);\n  const motifSchemeMobile = useMotifScheme(brandBackgroundColorMobile);\n\n  const { checkCriteria } = useExperiment();\n  const { isUrlCurrent } = useConsumerContext();\n\n  const isVisible = (item: NavigatorItemWithChildrenData) => checkCriteria(item.hideCriteria);\n\n  const items: SideNavigationSectionProps[] = navigatorItemsCollection.items\n    .filter(isVisible)\n    .map(section => {\n      const { titleDataset } = getContentfulInspectorProps<NavigatorItemType>({\n        entryId: section.sys.id,\n        fieldIds: ['title'],\n      });\n\n      return {\n        title: section.title ? documentToPlainTextString(section.title.json) : '',\n        links: section.navigatorItemsCollection.items.filter(isVisible).map(link => {\n          const { titleDataset: nestedTitleDataset } =\n            getContentfulInspectorProps<NavigatorItemType>({\n              entryId: link.sys.id,\n              fieldIds: ['title'],\n            });\n\n          const item: SideNavigationItemProps = {\n            title: link.title ? documentToPlainTextString(link.title.json) : '',\n            url: link.url ?? ''!,\n            dataset: nestedTitleDataset,\n          };\n\n          return item;\n        }),\n        dataset: titleDataset,\n      };\n    });\n\n  const { contentfulDescriptionDataset } = getContentfulInspectorProps<SideNavigationType>({\n    entryId: sys.id,\n    fieldIds: ['contentfulDescription'],\n  });\n\n  const elementLocation = useContext(ElementLocation).elementLocation;\n\n  return (\n    <SideNavigationSDS\n      className={stickToHeaderCss}\n      items={items}\n      isUrlCurrent={isUrlCurrent}\n      dataset={contentfulDescriptionDataset}\n      motifScheme={motifScheme}\n      motifSchemeMobile={motifSchemeMobile}\n      backgroundColor={backgroundColor}\n      mobileBackgroundColor={mobileBackgroundColor}\n      onSectionClick={(sectionTitle: string, isExpanding: boolean) => {\n        logUserEvent({\n          eventCategory: 'SideNavigation',\n          eventAction: isExpanding ? UserAction.Open : UserAction.Close,\n          eventLabel: null,\n          context: { elementText: sectionTitle, elementLocation },\n        });\n      }}\n    />\n  );\n};\n\nexport const SideNavigationShallow: FC<SideNavigationProps> = props => {\n  const id = isContentfulSysProps(props) ? props.sys.id : undefined;\n  const { data } = useContentfulQuery<SideNavigationDataHandlerProps, ContentfulIdVariable>(query, {\n    skip: !id,\n    variables: { id },\n  });\n\n  if (!data) return null;\n  return <SideNavigation {...data.sideNavigation} />;\n};\n\nSideNavigationShallow.displayName = 'SideNavigation';\n", "import { css } from '@emotion/css';\nimport { mobileMediaQuery, nonMobileMediaQuery } from '@snapchat/snap-design-system-marketing';\n\nexport const stickToHeaderCss = css`\n  ${nonMobileMediaQuery} {\n    & > * {\n      position: sticky;\n      top: var(--total-header-height);\n    }\n  }\n\n  ${mobileMediaQuery} {\n    position: sticky;\n    top: var(--total-header-height);\n  }\n`;\n", "import { cx } from '@emotion/css';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\nimport { __RouterContext } from 'react-router';\n\nimport { useExperiment } from '../../components/Experiment';\nimport type { PageShallowDataProps } from '../../components/Page';\nimport { PageShallow } from '../../components/Page/PageShallow';\nimport { minHeightCss, slugContainerCss, slugGutterCss } from '../../components/Slug/Slug.styles';\nimport { SlugContext } from '../../components/Slug/SlugContext';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport { NoMatchDefault } from './NoMatchDefault';\nimport type { Custom404CollectionData } from './query';\nimport { custom404CollectionQuery } from './query';\n\nexport const NoMatch: FC = () => {\n  // For SSR we should set the status code to 404 so it can still gives\n  // an http error code. Based on https://v5.reactrouter.com/web/guides/server-rendering/404-401-or-any-other-status\n  const { staticContext } = useContext(__RouterContext);\n  const { data } = useContentfulQuery<Custom404CollectionData>(custom404CollectionQuery);\n  const { decideExperiment } = useExperiment();\n\n  if (staticContext) {\n    staticContext.statusCode = 404;\n  }\n\n  if (!data) {\n    return null; // Loading\n  }\n\n  const custom404OrExperiment = data.slugCollection.items?.[0]?.page;\n\n  if (!custom404OrExperiment) {\n    return <NoMatchDefault />;\n  }\n\n  if (custom404OrExperiment.__typename === 'Page') {\n    return (\n      // we need slug container css to make sure it renders similar to a real slug\n      <section\n        className={cx(slugContainerCss, minHeightCss, slugGutterCss)}\n        data-testid=\"mwp-404-page\"\n      >\n        <PageShallow {...custom404OrExperiment} />\n      </section>\n    );\n  }\n\n  const experimentResult = decideExperiment<PageShallowDataProps>(custom404OrExperiment, {\n    logImpression: true,\n  });\n\n  return (\n    <SlugContext.Provider\n      value={{\n        isShareable: false,\n        replacements: experimentResult.replacements,\n      }}\n    >\n      <section data-testid=\"mwp-404-page\">\n        <PageShallow {...experimentResult.decision} />\n      </section>\n    </SlugContext.Provider>\n  );\n};\n\nNoMatch.displayName = 'NoMatch';\n", "import { useApolloClient } from '@apollo/client';\nimport { parseError } from '@snapchat/core';\nimport type { Banner } from '@snapchat/mw-contentful-schema';\nimport type { FC } from 'react';\nimport { useContext, useRef } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport { Config } from '../../config';\nimport { logWarning } from '../../helpers/logging';\nimport type { ContentfulIdsVariable, ContentfulIdVariable } from '../../hooks/useContentfulQuery';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport type { ContentfulSysProps } from '../../types/contentful';\nimport { contentfulTypeQueries } from '../../utils/contentful/contentfulTypeQueries';\nimport { getQueryName } from '../../utils/contentful/getQueryName';\nimport type { BlockDataProps, BlockShallowWithContentIds } from '../Block';\nimport type { HeroDataProps } from '../Hero/types';\nimport { SlugContext } from '../Slug/SlugContext';\nimport { Page } from './Page';\nimport type { PageShallowDataProps } from './pageQuery';\nimport { pageAllQuery, pageBlocksCollectionQuery } from './pageQuery';\nimport type { PageDataHandlerProps } from './types';\n\nexport interface PageBlocksCollectionData {\n  entryCollection: {\n    items: Array<BlockDataProps | HeroDataProps | Banner>;\n  };\n}\n\nexport const PageShallow: FC<PageShallowDataProps> = props => {\n  const { data } = useContentfulQuery<PageDataHandlerProps, ContentfulIdVariable>(pageAllQuery, {\n    variables: { id: props.sys.id },\n  });\n  const prefetchedIds = useRef(new Set<string>());\n  const apolloClient = useApolloClient();\n  const { currentLocale, getCurrentUrl } = useContext(AppContext);\n  const { replacements } = useContext(SlugContext);\n\n  /** Sys IDs of the entries we need to fetch data for since they are replacing something */\n  const replacementIds = replacements\n    ? props.blocksCollection.items.reduce<string[]>((acc, block) => {\n        if (replacements?.[block.sys.id]) {\n          acc.push(replacements[block.sys.id]?.sys.id ?? '');\n        }\n\n        return acc;\n      }, [])\n    : [];\n\n  /** Data of the replacement entries. We skip this if there are no replacements */\n  const replacementData = useContentfulQuery<PageBlocksCollectionData, ContentfulIdsVariable>(\n    pageBlocksCollectionQuery,\n    {\n      skip: !replacementIds.length,\n      variables: {\n        ids: replacementIds,\n      },\n    }\n  );\n\n  /** Kick off a single query to contentful to seed the cache for further rendering. */\n  function preloadItem(preload: ContentfulSysProps) {\n    const query = contentfulTypeQueries[preload.__typename!];\n\n    if (!query) {\n      logWarning({\n        component: 'PageShallow',\n        message: `Cannot preload item \"${preload.__typename}\". Add it to 'contentfulTypeQueries'`,\n        context: {\n          type: preload.__typename,\n        },\n      });\n\n      return;\n    }\n    const queryId = `${getQueryName(query)}:${preload.sys.id}`;\n\n    if (prefetchedIds.current.has(queryId)) {\n      return;\n    }\n\n    // Note: we don't await this here. We don't do anything with the return except initial this\n    // request sooner rather than later.\n    void apolloClient\n      .query({\n        query,\n        context: { currentUrl: getCurrentUrl() },\n        variables: { id: preload.sys.id, preview: Config.isPreview, locale: currentLocale },\n      })\n      .catch(error => {\n        logWarning({\n          component: 'PageShallow',\n          message: `Failed to preload item \"${preload.__typename}\" due to error: ${\n            parseError(error).message\n          }`,\n          context: {\n            type: preload.__typename,\n          },\n        });\n      });\n    prefetchedIds.current.add(queryId);\n  }\n\n  /** Loops through the ids in the shallow page content and triggers a preload on them. */\n  function preloadPageData() {\n    for (const shallowBlock of props.blocksCollection.items) {\n      // The list of supported types is defined in <Block>\n      // TODO: generate list outside of this pageData function so typings are less weird\n      if (shallowBlock.__typename === 'Block') {\n        let finalBlock = shallowBlock as BlockShallowWithContentIds;\n\n        if (replacements?.[shallowBlock.sys.id]?.sys.id) {\n          finalBlock = {\n            ...shallowBlock,\n            sys: { id: replacements[shallowBlock.sys.id]?.sys.id },\n          } as BlockShallowWithContentIds;\n        }\n\n        // The block will get loaded as a part of the page, but we can preload the contents.\n        for (const blockItem of finalBlock.contentsCollection.items) {\n          preloadItem(blockItem);\n        }\n      } else {\n        // TODO: Handle custom components.\n        preloadItem(shallowBlock);\n      }\n    }\n  }\n\n  // If we don't have the base page data OR the replacement data hasn't resolved yet\n  // we just preload page data\n  if (!data || replacementData.loading) {\n    preloadPageData();\n    return null;\n  }\n\n  let finalBanner = data.page.banner;\n  let finalBlocksCollection = data.page.blocksCollection;\n\n  // handle the banner swapping here\n  if (replacements && data.page.banner && data.page.banner.sys.id in replacements) {\n    finalBanner = replacementData.data?.entryCollection.items.find(entry => {\n      if (!data.page.banner) return false;\n      return entry.sys.id === replacements[data.page.banner.sys.id]?.sys.id;\n    }) as Banner | undefined;\n  }\n\n  // handle the block swapping here\n  if (data.page.blocksCollection && replacements) {\n    const blocksCollectionCopy = [...data.page.blocksCollection.items];\n\n    for (let i = 0; i < blocksCollectionCopy.length; i++) {\n      const blockId = blocksCollectionCopy[i]?.sys?.id;\n\n      if (blockId && blockId in replacements) {\n        const replacement = replacementData.data?.entryCollection.items.find(entry => {\n          return entry.sys.id === replacements[blockId]?.sys.id;\n        });\n\n        if (replacement === undefined) {\n          blocksCollectionCopy.splice(i, 1);\n        } else if (replacement && replacement.__typename !== 'Banner') {\n          blocksCollectionCopy[i] = replacement as BlockDataProps | HeroDataProps;\n        }\n      }\n    }\n\n    finalBlocksCollection = { items: blocksCollectionCopy };\n  }\n\n  return <Page {...data.page} blocksCollection={finalBlocksCollection} banner={finalBanner} />;\n};\n\nPageShallow.displayName = 'PageShallow';\n", "import type { DocumentNode } from 'graphql';\n\nimport { queries as accordionQueries } from '../../components/Accordion';\nimport { query as animatedAccordionQuery } from '../../components/AnimatedAccordion/query';\nimport { blockTabsQuery } from '../../components/BlockTabs';\nimport { breakQuery } from '../../components/Break';\nimport { carouselV3Query } from '../../components/CarouselV3';\nimport { queries as contentQueries } from '../../components/Content';\nimport { queries as formQueries } from '../../components/Form';\nimport { lazyGalleryQuery } from '../../components/Gallery';\nimport { blockHeroQuery } from '../../components/Hero/query';\nimport { latestPostBlockQuery } from '../../components/LatestPostBlock';\nimport { query as mosaicQuery } from '../../components/Mosaic';\nimport { multiValuePropBlockQuery } from '../../components/MultiValuePropBlock/query';\nimport { query as mvbQuery } from '../../components/MultiVideoBlock/query';\nimport { splitBlockQuery } from '../../components/SplitBlock/SplitBlock.query';\nimport { subNavigationQuery } from '../../components/SubNavigation/query';\nimport { queries as tabQueries } from '../../components/Tabs';\nimport { queries as barQueries } from '../../components/visualizations/BarChart';\nimport { chartToggleQuery } from '../../components/visualizations/ChartToggle';\nimport { queries as geoQueries } from '../../components/visualizations/GeoMap';\nimport { queries as lineQueries } from '../../components/visualizations/LineChart';\nimport { queries as vizQueries } from '../../components/visualizations/MultiVisualization';\nimport { queries as tableQueries } from '../../components/visualizations/Table';\nimport { query as arArkoseProtectedFormBlockQuery } from '../../sites/ar/components/ArArkoseProtectedFormBlock/arArkoseProtectedFormBlockQuery';\nimport { query as arDownloadFormBlockQuery } from '../../sites/ar/components/ArDownloadForm/arDownloadFormBlockQuery';\nimport { query as arDownloadLinkCardQuery } from '../../sites/ar/components/ArDownloadLinkCard/arDownloadLinkCardQuery';\nimport { query as arLinkOutsBlockQuery } from '../../sites/ar/components/ArLinkOutsBlock/arLinkOutsBlockQuery';\nimport { avalonFormBlockQuery } from '../../sites/avalon/components/AvalonFormBlock/AvalonFormBlock.query';\nimport { avalonProductHeroQuery } from '../../sites/avalon/components/AvalonProductHero/AvalonProductHero.query';\nimport { avalonScrollSectionQuery } from '../../sites/avalon/components/AvalonScrollSection/AvalonScrollSection.query';\nimport { fixedPositionBlockQuery } from '../../sites/avalon/components/FixedPositionBlock/FixedPositionBlock.query';\nimport { mosaicGridBlockQuery } from '../../sites/avalon/components/MosaicGridBlock/MosaicGridBlock.query';\nimport { valuePropsBlockQuery } from '../../sites/avalon/components/ValuePropsBlock/ValuePropsBlock.query';\nimport { aiAgentQuery } from '../../sites/creators/components/AiAgent/AiAgent.query';\nimport { liveEventQuery } from '../../sites/experience/components/LiveEvent/liveEventQuery';\nimport { latestGalleryCardHeroQuery } from '../../sites/newsroom/components/LatestGalleryCardHero';\nimport { newsBlockQuery } from '../../sites/snap/components/LatestNewsBlock/LatestNewsBlock.query';\nimport { snapHomePageQuery } from '../../sites/snap/pages/SnapHomePage.query';\nimport { snapHomePageV2Query } from '../../sites/snap/pages/SnapHomePageV2.query';\n\n/**\n * Contentful queries that can be selected by the content type (__typename) with a variable \"id\"\n * being the sys id.\n */\nexport const contentfulTypeQueries: Record<string, DocumentNode | undefined> = {\n  AiAgent: aiAgentQuery,\n  LatestPosts: latestPostBlockQuery,\n  MultiVideoBlock: mvbQuery,\n  Content: contentQueries.all,\n  CarouselV3: carouselV3Query,\n  Gallery: lazyGalleryQuery,\n  Tabs: tabQueries.all,\n  Mosaic: mosaicQuery.all,\n  Form: formQueries.all,\n  ChartToggle: chartToggleQuery,\n  BarChart: barQueries.all,\n  LineChart: lineQueries.all,\n  GeoVisualization: geoQueries.all,\n  VisualizationSelector: vizQueries.all,\n  TableVisualization: tableQueries.all,\n  Accordion: accordionQueries.all,\n  BlockHero: blockHeroQuery,\n  Break: breakQuery,\n  SubNavigation: subNavigationQuery,\n  LatestGalleryCardHero: latestGalleryCardHeroQuery,\n  AnimatedAccordion: animatedAccordionQuery,\n  AvalonProductHero: avalonProductHeroQuery,\n  AvalonFormBlock: avalonFormBlockQuery,\n  MosaicGridBlock: mosaicGridBlockQuery,\n  AvalonScrollSection: avalonScrollSectionQuery,\n  FixedPositionBlock: fixedPositionBlockQuery,\n  ValuePropsBlock: valuePropsBlockQuery,\n  ArArkoseProtectedFormBlock: arArkoseProtectedFormBlockQuery,\n  ArDownloadFormBlock: arDownloadFormBlockQuery,\n  ArDownloadLinkCard: arDownloadLinkCardQuery,\n  ArLinkOutsBlock: arLinkOutsBlockQuery,\n  LiveEvent: liveEventQuery,\n  MultiValuePropBlock: multiValuePropBlockQuery,\n  NewsBlock: newsBlockQuery,\n  SnapHomePage: snapHomePageQuery,\n  SnapHomePageV2: snapHomePageV2Query,\n  BlockTabs: blockTabsQuery,\n  SplitBlock: splitBlockQuery,\n};\n", "import { css, cx } from '@emotion/css';\nimport { getBackgroundClassName, MessageContext } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\nimport { useContext } from 'react';\n\nimport { backgroundColor, containerCss, headingCss, minHeightCss } from './styles';\n\nconst ghostCss = css`\n  max-width: 500px;\n  width: 80%;\n`;\n\nexport const NoMatchDefault: FC = () => {\n  // Fetch localized content from contentful `global-components` space's Messages collection.\n  const { formatMessage } = useContext(MessageContext);\n  const title = formatMessage({ id: 'noMatch.title', defaultMessage: 'Well, this is awkward!' });\n  const subtitle = formatMessage({\n    id: 'noMatch.subtitle',\n    defaultMessage: 'We could not find what you were looking for.',\n  });\n\n  return (\n    <div\n      className={cx(getBackgroundClassName(backgroundColor), containerCss, minHeightCss)}\n      data-testid=\"mwp-404-page\"\n    >\n      <h1 className={headingCss}>{title}</h1>\n      <h2>{subtitle}</h2>\n      <img className={ghostCss} src=\"/images/404.png\" alt=\"404 Ghost Image\" />\n    </div>\n  );\n};\n\nNoMatchDefault.displayName = 'NoMatchDefault';\n", "import { css } from '@emotion/css';\nimport { BackgroundColor, m } from '@snapchat/snap-design-system-marketing';\n\nimport { Config } from '../../config';\nimport { mediaQuery } from '../../styles/mediaQueries';\n\nexport const backgroundColor = Config.theme?.defaultPageBackgroundColor ?? BackgroundColor.White;\n\nexport const custom404ContainerCss = css`\n  display: flex;\n  justify-content: center;\n`;\n\nexport const containerCss = css`\n  align-items: center;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  background-color: ${m('--bg-color')};\n  color: ${m('--fg-color')};\n  min-height: max(600px, calc(100vh - var(--total-header-height)));\n  padding: ${m('--spacing-xxl')};\n  text-align: center;\n  width: 100%;\n`;\n\nexport const headingCss = css`\n  margin-bottom: 10px;\n\n  ${mediaQuery.over1024_desktop_medium} {\n    font-size: 5rem;\n    line-height: 5.5rem;\n  }\n`;\n\nexport const minHeightCss = css`\n  min-height: calc(100vh - var(--total-header-height));\n  min-height: calc(100dvh - var(--total-header-height));\n`;\n", "import { gql } from '@apollo/client';\nimport type { Experiment } from '@snapchat/mw-contentful-schema';\n\nimport { createExperimentFragmentWithAbReplacements } from '../../components/Experiment';\nimport type { PageShallowDataProps } from '../../components/Page';\nimport { pageFragmentShallow } from '../../components/Page';\nimport type { Items } from '../../types/Items';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\n\nconst custom404Fragment = gql`\n  fragment Custom404 on Slug {\n    ...ContentfulSysId\n    page {\n      ...ExperimentOnPageLoadingPageShallow\n    }\n  }\n  ${createExperimentFragmentWithAbReplacements('Page', 'PageShallow', pageFragmentShallow)}\n  ${contentfulSysIdFragment}\n`;\n\nexport const custom404CollectionQuery = gql`\n  query Custom404CollectionQuery($preview: Boolean!, $locale: String!) {\n    slugCollection(preview: $preview, locale: $locale, where: { slug: \"not-found\" }, limit: 1) {\n      items {\n        ...Custom404\n      }\n    }\n  }\n  ${custom404Fragment}\n`;\n\ninterface Custom404Data {\n  page: PageShallowDataProps | Experiment;\n}\n\nexport interface Custom404CollectionData {\n  slugCollection: Items<Custom404Data>;\n}\n", "import { css } from '@emotion/css';\nimport type { FC } from 'react';\nimport { useContext, useEffect } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport { Config } from '../../config';\n\nconst redirectContainerCss = css`\n  padding: 20px;\n`;\n\n/**\n * Redirect component that will use the redirect function and therefore function for both server and\n * client, not just client.\n */\nexport const Redirect: FC<{ path: string; newTab?: boolean; isPermanent?: boolean }> = ({\n  path,\n  newTab,\n  isPermanent,\n}) => {\n  const { onRedirect } = useContext(AppContext);\n\n  // On the server, useEffect doesn't fire, so we need to immediately call this\n  // function to record the new URL in the router.\n  if (!Config.isClient) {\n    onRedirect?.(path, { isPermanent, newTab });\n  }\n\n  useEffect(() => {\n    onRedirect?.(path, { isPermanent, newTab });\n  }, [onRedirect, path, newTab, isPermanent]);\n\n  return (\n    <section className={redirectContainerCss}>\n      Redirecting to <a href={path}>{path}</a>.\n    </section>\n  );\n};\n", "import { gql } from '@apollo/client';\n\nimport type { ContentfulTypedSysProps } from '../../types/contentful';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\n\n// =================================================================================================\n// Redirect Fragment\n// =================================================================================================\n\nexport interface RedirectDataProps extends ContentfulTypedSysProps<'Redirect'> {\n  externalUrl?: string;\n  isPermanent?: boolean;\n  slug?: ContentfulTypedSysProps<'Slug'> & { slug: string };\n}\n\nexport const redirectFragment = gql`\n  fragment Redirect on Redirect {\n    ...ContentfulSysId\n    externalUrl\n    isPermanent\n    slug {\n      sys {\n        id\n      }\n      slug\n    }\n  }\n  ${contentfulSysIdFragment}\n`;\n\n// =================================================================================================\n// Redirect SiteMap Fragment\n// =================================================================================================\nexport const redirectSitemapFragment = gql`\n  fragment SiteMapRedirect on Redirect {\n    ...ContentfulSysId\n  }\n  ${contentfulSysIdFragment}\n`;\n\nexport type RedirectSitemapData = ContentfulTypedSysProps<'Redirect'>;\n", "import { gql } from '@apollo/client';\nimport type { Criteria, Experiment, TopicCollection } from '@snapchat/mw-contentful-schema';\n\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\nimport { breadcrumbsFragment } from '../Breadcrumbs';\nimport type { BreadcrumbsDataProps } from '../Breadcrumbs/types';\nimport type { ExperimentSitemapData } from '../Experiment/experimentQuery';\nimport {\n  createExperimentFragmentNoAb,\n  createExperimentFragmentWithAbReplacements,\n  criteriaFragment,\n  experimentSitemapFragment,\n} from '../Experiment/experimentQuery';\nimport type { PageAssetDataProps } from '../Page/pageAssetQuery';\nimport { pageAssetFragment } from '../Page/pageAssetQuery';\nimport type { PageShallowDataProps, PageSitemapData } from '../Page/pageQuery';\nimport { pageFragmentShallow, pageSitemapFragment } from '../Page/pageQuery';\nimport type { RedirectDataProps, RedirectSitemapData } from '../Redirect/redirectQuery';\nimport { redirectFragment, redirectSitemapFragment } from '../Redirect/redirectQuery';\nimport { topicFragment } from '../Topic/Topic.query';\n\n// =================================================================================================\n// Slug Shallow Fragment\n// =================================================================================================\n\nexport interface SlugShallowData {\n  __typename: 'Slug';\n  sys: {\n    id: string;\n    publishedAt?: string;\n    firstPublishedAt?: string;\n  };\n  slug: string;\n  breadcrumbText?: string;\n  slugParent?: BreadcrumbsDataProps;\n  page: PageShallowDataProps | Experiment | PageAssetDataProps | RedirectDataProps;\n  criteria?: Criteria;\n  topicsCollection?: TopicCollection;\n  shareable?: boolean;\n  postedDate?: string;\n}\n\nexport const slugShallowFragment = gql`\n  fragment Slug on Slug {\n    sys {\n      id\n      publishedAt\n      firstPublishedAt\n    }\n    __typename\n    slug\n    postedDate\n    page {\n      ...PageAssetAll\n      ...ExperimentOnPageLoadingPageShallow\n      ...ExperimentOnRedirectLoadingRedirect\n      ...Redirect\n    }\n    unlistedCriteria {\n      ...CriteriaAll\n    }\n    shareable\n    ...BreadcrumbsAll\n    topicsCollection {\n      items {\n        ...TopicAll\n      }\n    }\n  }\n  ${createExperimentFragmentWithAbReplacements('Page', 'PageShallow', pageFragmentShallow)}\n  ${createExperimentFragmentNoAb('Redirect', 'Redirect', redirectFragment)}\n  ${contentfulSysIdFragment}\n  ${pageAssetFragment}\n  ${redirectFragment}\n  ${breadcrumbsFragment}\n  ${topicFragment}\n`;\n\n// =================================================================================================\n// Slug Sitemap Fragment\n// =================================================================================================\n\nexport const slugSitemapFragment = gql`\n  fragment SiteMapSlug on Slug {\n    sys {\n      id\n      firstPublishedAt\n    }\n    __typename\n    postedDate\n    slug\n    page {\n      ...SiteMapPage\n      ...SiteMapExperiment\n      ...SiteMapRedirect\n    }\n    unlistedCriteria {\n      ...CriteriaAll\n    }\n  }\n  ${pageSitemapFragment}\n  ${experimentSitemapFragment}\n  ${redirectSitemapFragment}\n  ${criteriaFragment}\n`;\n\n/** Slug content model optimized for generating site map data. */\nexport interface SlugSitemapData {\n  __typename: 'Slug';\n  sys: {\n    id: string;\n    firstPublishedAt?: string;\n  };\n  postedDate?: string;\n  slug: string;\n  page?: PageSitemapData | ExperimentSitemapData | RedirectSitemapData;\n  unlistedCriteria?: Criteria;\n}\n", "import { gql } from '@apollo/client';\n\nimport type { Items } from '../../types/Items';\nimport type { SlugShallowData } from './slugQuery';\nimport { slugShallowFragment } from './slugQuery';\n\nexport const slugCollectionQuery = gql`\n  query SlugCollectionQuery($preview: Boolean!, $locale: String!, $slug: String!) {\n    slugCollection(preview: $preview, locale: $locale, where: { slug: $slug }, limit: 1) {\n      total\n      items {\n        ...Slug\n      }\n    }\n  }\n  ${slugShallowFragment}\n`;\n\nexport interface SlugCollectionData {\n  slugCollection: Items<SlugShallowData>;\n}\n", "import { first } from 'radashi';\nimport type { FC } from 'react';\nimport { Helmet } from 'react-helmet-async';\n\nimport { Config } from '../../config';\nimport { logEvent, SubscribedEventType } from '../../helpers/logging';\nimport { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport { NoMatch } from '../../pages/NoMatch';\nimport { createBreadcrumbSchema } from '../Breadcrumbs';\nimport type { ReplacementData } from '../Experiment/useExperiments';\nimport { useExperiment } from '../Experiment/useExperiments';\nimport type { PageShallowDataProps } from '../Page';\nimport type { PageAssetDataProps } from '../Page/pageAssetQuery';\nimport { PageShallow } from '../Page/PageShallow';\nimport { Redirect } from '../Redirect/Redirect';\nimport type { RedirectDataProps } from '../Redirect/redirectQuery';\nimport type { SlugCollectionData } from './slugCollectionQuery';\nimport { slugCollectionQuery } from './slugCollectionQuery';\nimport { SlugContext } from './SlugContext';\n\n// Note: this needs the slash prepended to override multi level paths\nconst notFoundPath = '/404';\n\nexport const SlugCollection: FC<{ slug: string }> = props => {\n  const { decideExperiment } = useExperiment();\n\n  const { data } = useContentfulQuery<SlugCollectionData, { slug: string }>(slugCollectionQuery, {\n    variables: { slug: props.slug },\n  });\n\n  if (!data) {\n    return null; // Loading.\n  }\n\n  const slugMatch = first(data?.slugCollection.items);\n  const pageOrExperiment = slugMatch?.page;\n\n  let page: PageShallowDataProps | PageAssetDataProps | RedirectDataProps;\n  let replacements: Partial<Record<string, ReplacementData>> | undefined;\n\n  if (pageOrExperiment?.__typename === 'Experiment') {\n    const experimentResult = decideExperiment<PageShallowDataProps>(pageOrExperiment, {\n      logImpression: true,\n    });\n\n    if (Config.isClient) {\n      const mainElement = document.getElementsByTagName('main')[0]!;\n\n      experimentResult?.experimentId &&\n        mainElement.setAttribute('data-experiment-id', experimentResult.experimentId);\n\n      experimentResult.variantId &&\n        mainElement.setAttribute('data-experiment-arm-id', experimentResult.variantId);\n    }\n\n    page = experimentResult.decision;\n    replacements = experimentResult.replacements;\n  } else {\n    page = pageOrExperiment as typeof page;\n  }\n\n  // Expose page level experiment arm id so release tests are aware of what experiment\n  // (if any) was chosen\n\n  if (!page || !slugMatch) {\n    logEvent({\n      eventCategory: 'NoMatch',\n      eventAction: '404-redirect',\n      eventLabel: props.slug,\n      subscribedEventType: SubscribedEventType.INTERNAL,\n    });\n\n    return <Redirect path={notFoundPath} />;\n  }\n\n  if (page.__typename === 'PageAsset') {\n    if (page.media?.url) {\n      // TODO: we have to click back twice now because we are on the same tab.\n      // Need a better implementation to render \"go back to previous page\" with\n      // message that a page was opened on another tab. https://jira.sc-corp.net/browse/ENTWEB-8682\n      return <Redirect path={page.media.url} newTab={false} />;\n    }\n\n    return <NoMatch />;\n  }\n\n  if (page.__typename === 'Redirect') {\n    logEvent({\n      eventCategory: 'Redirect',\n      eventAction: 'page-redirect',\n      eventLabel: page.slug?.slug ?? page.externalUrl ?? null,\n      subscribedEventType: SubscribedEventType.INTERNAL,\n    });\n\n    if (page.slug?.slug) {\n      // redirect to home\n      if (page.slug.slug === 'home') {\n        return <Redirect path={''} newTab={false} isPermanent={page.isPermanent} />;\n      }\n\n      // Adding \"/\" for the onRedirect in Redirects\n      return <Redirect path={`/${page.slug.slug}`} newTab={false} isPermanent={page.isPermanent} />;\n    }\n\n    if (page.externalUrl) {\n      return <Redirect path={page.externalUrl} newTab={false} isPermanent={page.isPermanent} />;\n    }\n\n    return <NoMatch />;\n  }\n\n  let publishedAt: Date | undefined = undefined;\n\n  if (slugMatch.sys.publishedAt) {\n    publishedAt = new Date(slugMatch.sys.publishedAt);\n  }\n\n  const postedDateStr = slugMatch.postedDate ?? slugMatch.sys.firstPublishedAt;\n  const postedDate = postedDateStr ? new Date(postedDateStr) : undefined;\n\n  const breadcrumbData = {\n    slug: slugMatch.slug,\n    breadcrumbText: slugMatch.breadcrumbText,\n    slugParent: slugMatch.slugParent,\n  };\n  const breadcrumbSchema = createBreadcrumbSchema(breadcrumbData);\n\n  return (\n    <>\n      {breadcrumbSchema && (\n        <Helmet>\n          <script type=\"application/ld+json\">{JSON.stringify(breadcrumbSchema)}</script>\n        </Helmet>\n      )}\n      <SlugContext.Provider\n        value={{\n          publishedAt,\n          postedDate,\n          isShareable: slugMatch.shareable ?? false,\n          replacements,\n          breadcrumbData,\n          topics: slugMatch.topicsCollection?.items,\n          slugId: slugMatch.sys.id,\n        }}\n      >\n        <PageShallow {...page} />\n      </SlugContext.Provider>\n    </>\n  );\n};\n\nSlugCollection.displayName = 'SlugCollection';\n", "import { gql } from '@apollo/client';\n\nimport type { ContentfulSysProps, ContentfulTypedSysProps } from '../../types/contentful';\nimport type { Items } from '../../types/Items';\nimport { contentfulSysIdFragment } from '../../utils/contentful/contentfulQuery';\n\n// =================================================================================================\n// Pages with SubNavigation or SideNavigation\n// =================================================================================================\n\nexport const pagesWithSubOrSideNavQuery = gql`\n  query PagesWithSubOrSideNavQuery($preview: Boolean!) {\n    pageCollection(\n      locale: \"en-US\" # Always en-US because \"linkedFrom\" do not work in other languages.\n      preview: $preview\n      where: { sideNavigation_exists: true }\n      limit: 500\n    ) {\n      total\n      items {\n        sideNavigation {\n          ...ContentfulSysId\n        }\n        linkedFrom {\n          entryCollection {\n            total\n            items {\n              ...ContentfulSysId\n              ... on Slug {\n                slug\n              }\n            }\n          }\n        }\n        ...ContentfulSysId\n      }\n    }\n  }\n  ${contentfulSysIdFragment}\n`;\n\nexport interface PagesWithSubOrSideNavData {\n  pageCollection: Items<\n    ContentfulTypedSysProps<'Page'> & {\n      sideNavigation: ContentfulSysProps;\n      subNavigation: ContentfulSysProps;\n      linkedFrom: {\n        entryCollection: Items<\n          ContentfulSysProps & {\n            slug?: string;\n          }\n        >;\n      };\n    }\n  >;\n}\n\n// =================================================================================================\n// Experiments By Ids\n// =================================================================================================\n\nexport const experimentsByIdsLinkingToSlugs = gql`\n  query ExperimentsByIdsLinkingToSlugsQuery($preview: Boolean!, $ids: [String]!) {\n    experimentCollection(\n      locale: \"en-US\" # Always en-US because \"linkedFrom\" do not work in other languages.\n      preview: $preview\n      where: { sys: { id_in: $ids } }\n      limit: 500\n    ) {\n      total\n      items {\n        ...ContentfulSysId\n        linkedFrom {\n          entryCollection {\n            total\n            items {\n              ...ContentfulSysId\n              ... on Slug {\n                slug\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n  ${contentfulSysIdFragment}\n`;\n\nexport interface ExperimentsByIdsLinkingToSlugsData {\n  experimentCollection: Items<\n    ContentfulTypedSysProps<'Experiment'> & {\n      linkedFrom: {\n        entryCollection: Items<\n          ContentfulSysProps & {\n            slug?: string;\n          }\n        >;\n      };\n    }\n  >;\n}\n", "import { useContentfulQuery } from '../../hooks/useContentfulQuery';\nimport type { ContentfulSysProps } from '../../types/contentful';\nimport type {\n  ExperimentsByIdsLinkingToSlugsData,\n  PagesWithSubOrSideNavData,\n} from './slugNavigationQuery';\nimport { experimentsByIdsLinkingToSlugs, pagesWithSubOrSideNavQuery } from './slugNavigationQuery';\n\ninterface SlugToNavMap {\n  sideNavMap: Map<string, ContentfulSysProps>;\n  subNavMap: Map<string, ContentfulSysProps>;\n}\n\n/**\n * Looks up maps from /slug to the ids of SideNavigation and SubNavigation.\n *\n * Works even through experiments.\n *\n * Done as a reverse lookup to avoid loading ALL slugs which is slow on sites like forbusiness.\n */\nexport function useSlugToNavMap(): SlugToNavMap {\n  const sideNavMap = new Map<string, ContentfulSysProps>();\n  const subNavMap = new Map<string, ContentfulSysProps>();\n\n  const experimentIdToSideNav = new Map<string, ContentfulSysProps>();\n  const experimentIdToSubNav = new Map<string, ContentfulSysProps>();\n\n  // STEP 1: Find all pages with navigation bars (Sub or Side).\n\n  const { data: pagesWithNav } = useContentfulQuery<PagesWithSubOrSideNavData>(\n    pagesWithSubOrSideNavQuery\n  );\n\n  for (const page of pagesWithNav?.pageCollection.items ?? []) {\n    for (const parent of page.linkedFrom.entryCollection.items) {\n      // if a page is referenced from an archive slug it will shop up as undefined in linkedFrom\n      // so we need to check here so staging sites don't break. doesn't happen when preview=false\n      if (!parent) continue;\n\n      switch (parent.__typename) {\n        case 'Experiment': {\n          page.sideNavigation && experimentIdToSideNav.set(parent.sys.id, page.sideNavigation);\n          page.subNavigation && experimentIdToSubNav.set(parent.sys.id, page.subNavigation);\n          break;\n        }\n\n        case 'Slug': {\n          parent.slug && page.sideNavigation && sideNavMap.set(parent.slug, page.sideNavigation);\n          parent.slug && page.subNavigation && subNavMap.set(parent.slug, page.subNavigation);\n          break;\n        }\n      }\n    }\n  }\n\n  // STEP 2: Lookup slug strings for experiments (if any)\n\n  const experimentIds = new Set<string>([\n    ...experimentIdToSideNav.keys(),\n    ...experimentIdToSubNav.keys(),\n  ]);\n\n  const { data: slugsFromExperiments } = useContentfulQuery<\n    ExperimentsByIdsLinkingToSlugsData,\n    { ids: string[] }\n  >(experimentsByIdsLinkingToSlugs, {\n    variables: { ids: [...experimentIds] },\n    skip: experimentIds.size === 0,\n  });\n\n  for (const experiment of slugsFromExperiments?.experimentCollection.items ?? []) {\n    for (const link of experiment.linkedFrom.entryCollection.items) {\n      if (link.__typename === 'Slug' && link.slug) {\n        const sideNav = experimentIdToSideNav.get(experiment.sys.id);\n        sideNav && sideNavMap.set(link.slug, sideNav);\n        const subNav = experimentIdToSubNav.get(experiment.sys.id);\n        subNav && subNavMap.set(link.slug, subNav);\n      }\n    }\n  }\n\n  return { sideNavMap, subNavMap };\n}\n", "import { css } from '@emotion/css';\nimport { DeploymentType } from '@snapchat/mw-common';\nimport {\n  BackgroundType,\n  CookieSettings as CookieSettingsGlobal,\n} from '@snapchat/mw-global-components';\nimport { BackgroundColor, Block } from '@snapchat/snap-design-system-marketing';\nimport type React from 'react';\n\nimport { NoMatchDefault } from '../NoMatch/NoMatchDefault';\n\nexport type CookieSettingsProps = {\n  cookieDomain: string;\n  deploymentType: DeploymentType;\n  domainName: string;\n  isClient: boolean;\n  backgroundColor?: BackgroundColor;\n};\n\nconst defaultBackgroundColor = BackgroundColor.White;\n\nconst noPaddingTopCss = css`\n  padding-top: 0;\n`;\n\nexport const CookieSettings: React.FC<CookieSettingsProps> = ({\n  cookieDomain,\n  deploymentType,\n  domainName,\n  isClient,\n  backgroundColor = defaultBackgroundColor,\n}) => {\n  // Use current domain for local development and in Dev/Staging environments\n  if (deploymentType !== DeploymentType.PRODUCTION) {\n    domainName = '';\n    cookieDomain = '';\n  }\n\n  // Match both vanilla domain (`snap.com`) OR standard prefix for top level domain (`www.snap.com`)\n  const isSameDomain = domainName === cookieDomain || domainName === `www.${cookieDomain}`;\n  const backgroundType =\n    backgroundColor === BackgroundColor.Black ? BackgroundType.DarkMode : BackgroundType.LightMode;\n\n  // Return 404 if using cookies from a different domain.\n  if (!isSameDomain) return <NoMatchDefault />;\n\n  // Return nothing for SSR\n  if (!isClient) return null;\n\n  return (\n    <Block backgroundColor={backgroundColor} className={noPaddingTopCss}>\n      <CookieSettingsGlobal cookieDomain={cookieDomain} backgroundType={backgroundType} />\n    </Block>\n  );\n};\n", "import { htmlEscape, htmlUnescape } from '@snapchat/core';\nimport {\n  AutoComplete as AutoCompleteSDS,\n  FormattedMessage,\n  Header,\n  MessageContext,\n  MotifComponent,\n  Pagination,\n  Spinner,\n  useMotifStyles,\n} from '@snapchat/snap-design-system-marketing';\nimport { noop } from 'radashi';\nimport type { FC } from 'react';\nimport { useCallback, useContext, useEffect, useRef, useState } from 'react';\n\nimport { AppContext } from '../../AppContext';\nimport { ConsumerContext } from '../../components/ConsumerContextProvider';\nimport { totalHeaderHeightCssVar } from '../../components/Header/headerSizeUtils';\nimport type { SearchResult } from '../../components/Search';\nimport { NoResultsFound, SearchResultItem } from '../../components/Search';\nimport { ActiveEventCountTracker } from '../../components/tracing/ActiveEventCountTracker';\nimport { ElementLocation } from '../../context/ElementLocationContext/ElementLocationContext';\nimport { logEvent, logUserEvent, SubscribedEventType } from '../../helpers/logging';\nimport { useQueryParams } from '../../hooks/useQueryParams';\nimport { useSearchResults } from '../../hooks/useSearchResults';\nimport { UserAction } from '../../types/events';\nimport {\n  searchAutocompleteCss,\n  searchContainerCss,\n  searchResultsContainerCss,\n  searchResultsListCss,\n  searchSubtitleCss,\n  spinnerContainerCss,\n} from './styles';\n\nconst maxResultsPerPage = 20;\n// 250 seems appropriate as it balances search responsiveness and debouncing times per second.\nconst searchDebounceDelay = 250;\n\n// 1000ms debounce delay for logging the page view event\nconst pageViewDebounceDelay = 1000;\n\n/**\n * Replaces invisible commas with ellipses and removes ellipses at the start or end of the string\n * for each element in the array. Concatenates the modified elements into a single string separated\n * by ellipses.\n *\n * @param elements - An array of strings to be processed.\n * @returns A string with modified elements joined by ellipses.\n */\nconst getDescription = (elements: Array<string>) => {\n  const result = elements\n    .map(element => element.replace(/ ?(\\u2063+)/gm, '\\u2026').replace(/^\\u2026+|\\u2026+$/g, ''))\n    .join('\\u2026 ');\n\n  return result;\n};\n\nconst handleScroll = (element: HTMLDivElement | null) => {\n  // Using requestAnimationFrame to avoid forced reflow  and solve inconsistencies with smooth scroll.\n  window.requestAnimationFrame(() => {\n    const totalHeaderHeight = Number.parseInt(\n      getComputedStyle(document.documentElement).getPropertyValue(totalHeaderHeightCssVar),\n      10\n    );\n\n    const containerTop = element?.getBoundingClientRect().top ?? 0;\n    const scrollY = window.scrollY;\n\n    // To account for the height of the sticky header, add totalHeaderHeight and additionalSpaceAboveHeader\n    // to create white space between the top of the element and the header.\n    window.scrollTo({\n      top: containerTop + scrollY - (totalHeaderHeight + 20),\n      behavior: 'smooth',\n    });\n  });\n};\n\nexport const Search: FC = () => {\n  const query = useQueryParams();\n  const searchQueryParameter = query.get('q') ?? '';\n  const searchPageParameter = Number(query.get('page') ?? '1');\n  const [shouldRenderSpinner, setShouldRenderSpinner] = useState(true);\n\n  // Initialize Motif styles for the Search component\n  useMotifStyles(MotifComponent.SEARCH);\n\n  const { currentLocale } = useContext(AppContext);\n  const { formatMessage } = useContext(MessageContext);\n  const { getUrlParams, setUrlParams } = useContext(ConsumerContext);\n  const elementLocation = useContext(ElementLocation).elementLocation;\n\n  const containerRef = useRef<HTMLDivElement>(null);\n\n  const [page, setPage] = useState(searchPageParameter);\n  const [searchTerm, setSearchTerm] = useState(searchQueryParameter);\n  const [debouncedSearchTerm, setDebouncedSearchTerm] = useState(searchTerm);\n\n  // effect to set debounced searchTerm\n  useEffect(() => {\n    if (searchTerm === debouncedSearchTerm) {\n      return;\n    }\n\n    const timerId = setTimeout(() => {\n      setDebouncedSearchTerm(searchTerm);\n      setPage(1);\n      setShouldRenderSpinner(true);\n    }, searchDebounceDelay);\n\n    return () => {\n      clearTimeout(timerId);\n    };\n  }, [searchTerm, debouncedSearchTerm]);\n\n  //  effect to log page view event every time we think a new search is being performed\n  useEffect(() => {\n    const timerId = setTimeout(() => {\n      logEvent({\n        subscribedEventType: SubscribedEventType.PAGE_LOAD,\n      });\n    }, pageViewDebounceDelay);\n\n    return () => {\n      clearTimeout(timerId);\n    };\n  });\n\n  const searchResults = useSearchResults(\n    debouncedSearchTerm,\n    currentLocale,\n    page,\n    maxResultsPerPage\n  );\n\n  useEffect(() => {\n    if (searchResults.isLoading) {\n      return;\n    }\n\n    setShouldRenderSpinner(false);\n  }, [searchResults.isLoading]);\n\n  // effect to change url when state changes\n  useEffect(() => {\n    if (!getUrlParams || !setUrlParams) {\n      return;\n    }\n\n    const queryParams = new URLSearchParams(getUrlParams());\n\n    // Purposely not using `searchPageParameter` and `searchQueryParameter` to\n    // avoid render loop between this and the `Handle back button click` useEffect\n    if (\n      debouncedSearchTerm === (queryParams.get('q') ?? '') &&\n      page.toString() === queryParams.get('page')\n    ) {\n      return;\n    }\n\n    queryParams.set('q', debouncedSearchTerm);\n    queryParams.set('page', `${page}`);\n\n    setUrlParams({ ...Object.fromEntries(queryParams) });\n  }, [currentLocale, debouncedSearchTerm, page, getUrlParams, setUrlParams]);\n\n  // Handle back button click\n  useEffect(() => {\n    const newPage = searchPageParameter;\n    const newTerm = searchQueryParameter;\n\n    setPage(newPage);\n    setSearchTerm(newTerm);\n    setDebouncedSearchTerm(newTerm);\n  }, [searchPageParameter, searchQueryParameter]);\n\n  const onChange = (term: string) => {\n    const trimmedTerm = term.trimStart();\n    setSearchTerm(trimmedTerm);\n  };\n\n  const onChangePage = useCallback(\n    (newPage: number) => {\n      setPage(newPage);\n      handleScroll(containerRef.current);\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [containerRef.current]\n  );\n\n  const showLoading = shouldRenderSpinner && searchResults.isLoading && !searchResults.isErrored;\n  const showResults = !showLoading && !!searchResults.data.total;\n  const showNoResults = !showLoading && !searchResults.data.total;\n\n  return (\n    <>\n      <Header noIndex={true} />\n      <div data-testid=\"mwp-search\" className={searchContainerCss} ref={containerRef}>\n        <div className={searchAutocompleteCss}>\n          <AutoCompleteSDS<SearchResult>\n            autocompleteResults={[]}\n            collapsible={false}\n            hideSuggestions\n            initialText={htmlUnescape(htmlEscape(searchTerm))}\n            loadingAutocompleteTerms={false}\n            onChange={onChange}\n            onSelect={noop}\n            placeholder={formatMessage({\n              id: 'placeholderSearchPageInput',\n              defaultMessage: 'Search...',\n            })}\n          />\n          {searchResults && (\n            <p className={searchSubtitleCss}>\n              <FormattedMessage\n                id=\"searchResultsSubtitle\"\n                defaultMessage={'{total} search results for \"{term}\"'}\n                values={{\n                  total: String(searchResults.data.total),\n                  term: htmlEscape(debouncedSearchTerm),\n                }}\n              />\n            </p>\n          )}\n        </div>\n        <div className={searchResultsContainerCss}>\n          {showLoading && (\n            <div className={spinnerContainerCss}>\n              <Spinner />\n            </div>\n          )}\n          {showResults && (\n            <ul className={searchResultsListCss}>\n              {searchResults.data.results.map((item, i) => (\n                <li key={item.pageTitle + searchTerm + i * page}>\n                  <SearchResultItem\n                    description={getDescription(item.highlights)}\n                    pageTitle={item.pageTitle}\n                    slug={item.slug}\n                    onClick={() =>\n                      logUserEvent({\n                        eventCategory: 'SearchResult',\n                        eventAction: UserAction.Click,\n                        eventLabel: item.slug,\n                        context: {\n                          targetUrl: `/${item.slug}`,\n                          elementText: item.pageTitle,\n                          elementLocation,\n                        },\n                      })\n                    }\n                  />\n                </li>\n              ))}\n            </ul>\n          )}\n          {showNoResults && <NoResultsFound />}\n        </div>\n\n        {showResults ? (\n          <Pagination\n            currentPage={page}\n            onChange={onChangePage}\n            totalPages={Math.floor((searchResults.data.total - 1) / maxResultsPerPage) + 1}\n          />\n        ) : null}\n\n        {/* Render the same test divs as the MWP Page component for use in release tests.\n          NOTE: Purposely deferring rendering these until the search results are returned\n                so our release tests check the results page rather than loading state. */}\n        {!searchResults.isLoading && <ActiveEventCountTracker />}\n      </div>\n    </>\n  );\n};\n", "import { css } from '@emotion/css';\nimport { m, p2Css } from '@snapchat/snap-design-system-marketing';\n\nexport const noResultsFoundContainerCss = css`\n  align-items: center;\n  display: flex;\n  flex-direction: column;\n  padding-block: ${m('--spacing-xl')} 128px;\n  width: 100%;\n`;\n\nexport const noResultsFoundTitleCss = css`\n  margin-block-end: ${m('--spacing-xs')};\n`;\n\nexport const noResultsFoundSubtitleCss = css`\n  ${p2Css}\n  margin-block-end: ${m('--spacing-l')};\n`;\n\nexport const noResultsFoundImageCss = css`\n  width: 268px;\n  max-width: 90%;\n`;\n", "import { FormattedMessage } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport {\n  noResultsFoundContainerCss,\n  noResultsFoundImageCss,\n  noResultsFoundSubtitleCss,\n  noResultsFoundTitleCss,\n} from './NoResultsFound.styles';\n\nexport const NoResultsFound: FC = () => (\n  <div className={noResultsFoundContainerCss}>\n    <h4 className={noResultsFoundTitleCss}>\n      <FormattedMessage id=\"searchNotFoundTitle\" defaultMessage=\"Sorry, no results were found\" />\n    </h4>\n    <p className={noResultsFoundSubtitleCss}>\n      <FormattedMessage\n        id=\"searchNotFoundSubtitle\"\n        defaultMessage=\"Please try again with a different keyword.\"\n      />\n    </p>\n    <img alt=\"confused ghost logo\" src=\"/images/404.png\" className={noResultsFoundImageCss} />\n  </div>\n);\n\nNoResultsFound.displayName = 'NoResultsFound';\n", "export interface SearchResult {\n  slug: string;\n  pageTitle: string;\n  highlights: string[];\n}\n\nexport interface SearchResultResponse {\n  results: SearchResult[];\n  total: number;\n}\n\nexport const searchQueryParam = 'query';\nexport const searchOffsetParam = 'offset';\nexport const searchPerPageParam = 'page';\nexport const searchLocaleParam = 'locale';\n", "import { css } from '@emotion/css';\nimport { m, nonMobileMediaQuery, p2Css } from '@snapchat/snap-design-system-marketing';\n\nexport const searchResultItemPageTitleCss = css`\n  margin-block: 0 ${m('--spacing-xxs')};\n`;\n\nexport const searchResultItemLinkCss = css`\n  border-radius: ${m('--spacing-xxxs')};\n  color: ${m('--action-text-default-color')};\n  text-decoration: none;\n\n  @media (hover: hover) {\n    &:hover {\n      color: ${m('--action-text-hover-color')};\n      text-decoration-thickness: ${m('--spacing-xxxs')};\n      text-decoration: underline;\n      text-underline-offset: ${m('--spacing-xxxs')};\n    }\n  }\n`;\n\nexport const searchResultItemDescriptionCss = css`\n  ${p2Css}\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: 4;\n  color: ${m('--fg-color')};\n  display: -webkit-box;\n  hyphens: auto;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  word-break: break-word;\n  word-wrap: break-word;\n\n  ${nonMobileMediaQuery} {\n    -webkit-line-clamp: 2;\n  }\n\n  & strong {\n    font-weight: 600;\n  }\n`;\n", "import { MotifComponent } from '@snapchat/snap-design-system-marketing';\nimport type { FC } from 'react';\n\nimport { Anchor } from '../../Anchor';\nimport {\n  searchResultItemDescriptionCss,\n  searchResultItemLinkCss,\n  searchResultItemPageTitleCss,\n} from './SearchResultItem.styled';\nimport type { SearchResultItemProps } from './SearchResultItem.types';\n\nexport const replaceEmTags = (inputString: string): (string | JSX.Element)[] => {\n  const regex = /<em>(.*?)<\\/em>/gi;\n  const parts = inputString.split(regex);\n\n  return parts.map((part, index) => {\n    if (index % 2 === 1) {\n      // Odd index means it's between <em> and </em>, so replace content\n      return <strong key={index}>{part}</strong>;\n    }\n\n    // Even index means it's outside <em> tags, so render as is\n    return part;\n  });\n};\n\nexport const SearchResultItem: FC<SearchResultItemProps> = ({\n  description,\n  pageTitle,\n  slug,\n  onClick,\n}) => {\n  return (\n    <article className={MotifComponent.SEARCH}>\n      <h6 className={searchResultItemPageTitleCss}>\n        <Anchor href={slug} className={searchResultItemLinkCss} onClick={onClick}>\n          {pageTitle}\n        </Anchor>\n      </h6>\n      {description && (\n        <p className={searchResultItemDescriptionCss}>{replaceEmTags(description)}</p>\n      )}\n    </article>\n  );\n};\n\nSearchResultItem.displayName = 'SearchResultItem';\n", "import { useContext, useMemo } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport { ConsumerContext } from '../components/ConsumerContextProvider';\n\nexport const useQueryParams: () => URLSearchParams = () => {\n  // Used to trigger updates when path changes on Client\n  const { search } = useLocation();\n  // Used to enable fetching values on both Client and Server\n  const { getUrlParams } = useContext(ConsumerContext);\n\n  return useMemo(() => {\n    const searchParams = getUrlParams?.() ?? {};\n    return new URLSearchParams(searchParams);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [search, getUrlParams]);\n};\n", "import { useAsyncData } from '@snapchat/async-data-browser';\nimport { useMemo, useRef } from 'react';\n\nimport type { SearchResultResponse } from '../components/Search';\nimport {\n  searchLocaleParam,\n  searchOffsetParam,\n  searchPerPageParam,\n  searchQueryParam,\n} from '../components/Search';\nimport { Config } from '../config';\nimport { logger } from '../helpers/logging';\n\ntype SearchResultsData = {\n  data: SearchResultResponse;\n  isErrored: boolean;\n  isLoading: boolean;\n};\n\n/**\n * Custom hook for fetching search results based on the provided parameters.\n *\n * @param {string} searchTerm - The term to search for\n * @param {string} locale - The locale for which search results are requested.\n * @param {number} page - The page number to use in the query\n * @param {number} pageSize - The number of search results per page\n * @returns An object containing search results data and loading state.\n */\nexport function useSearchResults(\n  searchTerm: string,\n  locale: string,\n  page = 1,\n  pageSize = 20\n): SearchResultsData {\n  const previousResults = useRef([]);\n  const previousTotal = useRef(0);\n  const emptyResults: SearchResultResponse = { results: [], total: 0 };\n  let searchResults = emptyResults;\n\n  const params = useMemo(() => {\n    const params = new URLSearchParams();\n    const searchOffsetValue = Math.max(0, (page - 1) * pageSize);\n\n    params.append(searchQueryParam, searchTerm ?? '');\n    params.append(searchLocaleParam, locale);\n    params.append(searchOffsetParam, `${searchOffsetValue}`);\n    params.append(searchPerPageParam, `${pageSize}`);\n\n    return params;\n  }, [searchTerm, locale, page, pageSize]);\n\n  const host = Config.isClient ? '' : `http://localhost:${process.env.PORT ?? 3000}`;\n  const url = `${host}/api/search?${params}`;\n\n  const { data, isLoading, error } = useAsyncData({\n    dataId: `/api/search?${params}`,\n    dataAsync: async () => {\n      // edge case: don't send to server if there is no search input\n      if (!searchTerm) return emptyResults;\n\n      const response = await fetch(url);\n\n      if (!response.ok) {\n        const error = await response.text();\n        throw new Error(error);\n      }\n\n      const data = await response.json();\n      return data;\n    },\n  });\n\n  if (error) {\n    logger.logError({\n      component: 'useSearchResults',\n      message: 'Error loading search results',\n      error,\n    });\n  }\n\n  if (data) {\n    previousResults.current = data.results;\n    previousTotal.current = data.total;\n    searchResults = data as SearchResultResponse;\n  }\n\n  return {\n    data: isLoading\n      ? { results: previousResults.current, total: previousTotal.current }\n      : searchResults,\n    isLoading,\n    isErrored: !!error,\n  };\n}\n", "import { css } from '@emotion/css';\nimport {\n  globalHeaderHeight,\n  m,\n  mobileMediaQuery,\n  p3Css,\n} from '@snapchat/snap-design-system-marketing';\n\nexport const searchContainerCss = css`\n  padding-block: ${m('--spacing-xl')};\n  margin-inline: auto;\n  max-width: ${m('--search-container-max-width')};\n  padding-inline: ${m('--spacing-xl')};\n  width: 100%;\n  min-height: calc(100vh - ${globalHeaderHeight}px);\n  min-height: calc(100dvh - ${globalHeaderHeight}px);\n\n  ${mobileMediaQuery} {\n    margin-block: ${m('--spacing-xxxl')};\n  }\n`;\n\nexport const searchAutocompleteCss = css`\n  margin-block-end: ${m('--spacing-xxxl')};\n\n  ${mobileMediaQuery} {\n    margin-block-end: ${m('--spacing-xl')};\n  }\n`;\n\nexport const searchSubtitleCss = css`\n  ${p3Css};\n  color: ${m('--search-subtitle-color')};\n  margin-block-start: ${m('--spacing-s')};\n`;\n\nexport const searchResultsContainerCss = css`\n  margin-block-end: ${m('--spacing-xxxl')};\n\n  ${mobileMediaQuery} {\n    margin-block-end: ${m('--spacing-xl')};\n  }\n`;\n\nexport const searchResultsListCss = css`\n  display: flex;\n  flex-wrap: wrap;\n  gap: ${m('--search-results-list-gap')};\n  list-style: none;\n  > li {\n    width: 100%;\n  }\n`;\n\nexport const spinnerContainerCss = css`\n  display: flex;\n  justify-content: center;\n`;\n", "import { useImperativeEffect } from '@snapchat/core-browser';\nimport { type FC, useContext, useState } from 'react';\nimport type { RouteComponentProps } from 'react-router-dom';\n\nimport { AppContext } from '../../../../AppContext';\nimport { logError, logEvent, SubscribedEventType } from '../../../../helpers/logging';\nimport { NoMatch } from '../../../../pages/NoMatch';\nimport { assetContainerCss, assetFrameCss } from './PoliticalAdAsset.styles';\n\nconst supportedVideoExtensions = ['mp4', 'mov'];\nconst gcsBucketUrl = 'https://storage.googleapis.com/ad-manager-political-ads-dump-shadow';\n\nexport const PoliticalAdAsset: FC<Partial<RouteComponentProps<{ assetId: string }>>> = ({\n  match,\n}) => {\n  const assetId = match?.params.assetId;\n  const { getCurrentUrl } = useContext(AppContext);\n  const [hasLoadingError, setHasLoadingError] = useState(false);\n\n  useImperativeEffect(() => {\n    logEvent({\n      subscribedEventType: SubscribedEventType.PAGE_LOAD,\n    });\n  }, [assetId]);\n\n  if (!assetId) {\n    return <NoMatch />;\n  }\n\n  const currentUrl = getCurrentUrl();\n\n  const urlObj = new URL(currentUrl);\n  const mediaType = urlObj.searchParams.get('mediaType');\n\n  const assetSrc = `${gcsBucketUrl}/${assetId}.${mediaType}`;\n\n  const handleError = () => {\n    logError({\n      component: 'PoliticalAdsAsset',\n      action: 'Loading asset failed',\n    });\n\n    setHasLoadingError(true);\n  };\n\n  if (hasLoadingError) {\n    return <NoMatch />;\n  }\n\n  const asset = supportedVideoExtensions.includes(mediaType || '') ? (\n    <video src={assetSrc} autoPlay controls onError={handleError} />\n  ) : (\n    <img src={assetSrc} onError={handleError} alt=\"ad\" />\n  );\n\n  return (\n    <article className={assetContainerCss}>\n      <section className={assetFrameCss}>{asset}</section>\n    </article>\n  );\n};\n", "import { css } from '@emotion/css';\nimport { m } from '@snapchat/snap-design-system-marketing';\n\nexport const assetContainerCss = css`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  min-height: calc(100vh - var(--total-header-height));\n  min-height: calc(100dvh - var(--total-header-height));\n  img,\n  video {\n    max-width: 300px;\n    border-radius: ${m('--spacing-s')};\n  }\n`;\n\nexport const assetFrameCss = css`\n  border-radius: ${m('--spacing-s')};\n  box-shadow: 0 ${m('--spacing-xs')} ${m('--spacing-xl')} 0 rgba(0, 0, 0, 0.16);\n  border: ${m('--spacing-s')} solid #fff;\n`;\n", "import { Site } from '@snapchat/mw-common';\nimport { fontTokensWithPlaceholders } from '@snapchat/snap-design-system-marketing';\n\nimport { Config } from '../config';\n\n/**\n * Returns font tokens with placeholders for the current site. Sites without Snapchat branding\n * return undefined to skip font fallback injection.\n */\nexport const getSiteFontFallbacks = (): Record<string, string> | undefined => {\n  switch (Config.site) {\n    case Site.ARCADIA:\n      return;\n    case Site.AVALON:\n      return;\n    case Site.CHEERIOS:\n      return;\n\n    default:\n      return fontTokensWithPlaceholders;\n  }\n};\n", "import { Site } from '@snapchat/mw-common';\nimport { type Motif, defaultMotif } from '@snapchat/snap-design-system-marketing';\n\nimport { snapMotif } from '../brands/snap/snapMotif';\nimport { Config } from '../config';\nimport { arcadiaMotif } from '../sites/arcadia/arcadiaMotif';\nimport { avalonMotif } from '../sites/avalon/avalonMotif';\nimport { cheeriosMotif } from '../sites/cheerios/cheeriosMotif';\nimport { experienceMotif } from '../sites/experience/experienceMotif';\nimport { stinsonMotif } from '../sites/stinson/stinsonMotif';\n\nexport function getSiteMotif(): Motif | undefined {\n  switch (Config.site) {\n    case Site.ARCADIA:\n      return arcadiaMotif;\n    case Site.AVALON:\n      return avalonMotif;\n    case Site.CHEERIOS:\n      return cheeriosMotif;\n    case Site.EXPERIENCE:\n      return experienceMotif;\n    case Site.SNAP:\n      return snapMotif;\n    case Site.STINSON:\n      return stinsonMotif;\n    default:\n      return defaultMotif;\n  }\n}\n", "var e,n,t,i,r,a=-1,o=function(e){addEventListener(\"pageshow\",(function(n){n.persisted&&(a=n.timeStamp,e(n))}),!0)},c=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType(\"navigation\")[0]},u=function(){var e=c();return e&&e.activationStart||0},f=function(e,n){var t=c(),i=\"navigate\";a>=0?i=\"back-forward-cache\":t&&(document.prerendering||u()>0?i=\"prerender\":document.wasDiscarded?i=\"restore\":t.type&&(i=t.type.replace(/_/g,\"-\")));return{name:e,value:void 0===n?-1:n,rating:\"good\",delta:0,entries:[],id:\"v3-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:i}},s=function(e,n,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var i=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries())}))}));return i.observe(Object.assign({type:e,buffered:!0},t||{})),i}}catch(e){}},d=function(e,n,t,i){var r,a;return function(o){n.value>=0&&(o||i)&&((a=n.value-(r||0))||void 0===r)&&(r=n.value,n.delta=a,n.rating=function(e,n){return e>n[1]?\"poor\":e>n[0]?\"needs-improvement\":\"good\"}(n.value,t),e(n))}},l=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}))},p=function(e){var n=function(n){\"pagehide\"!==n.type&&\"hidden\"!==document.visibilityState||e(n)};addEventListener(\"visibilitychange\",n,!0),addEventListener(\"pagehide\",n,!0)},v=function(e){var n=!1;return function(t){n||(e(t),n=!0)}},m=-1,h=function(){return\"hidden\"!==document.visibilityState||document.prerendering?1/0:0},g=function(e){\"hidden\"===document.visibilityState&&m>-1&&(m=\"visibilitychange\"===e.type?e.timeStamp:0,T())},y=function(){addEventListener(\"visibilitychange\",g,!0),addEventListener(\"prerenderingchange\",g,!0)},T=function(){removeEventListener(\"visibilitychange\",g,!0),removeEventListener(\"prerenderingchange\",g,!0)},E=function(){return m<0&&(m=h(),y(),o((function(){setTimeout((function(){m=h(),y()}),0)}))),{get firstHiddenTime(){return m}}},C=function(e){document.prerendering?addEventListener(\"prerenderingchange\",(function(){return e()}),!0):e()},L=[1800,3e3],w=function(e,n){n=n||{},C((function(){var t,i=E(),r=f(\"FCP\"),a=s(\"paint\",(function(e){e.forEach((function(e){\"first-contentful-paint\"===e.name&&(a.disconnect(),e.startTime<i.firstHiddenTime&&(r.value=Math.max(e.startTime-u(),0),r.entries.push(e),t(!0)))}))}));a&&(t=d(e,r,L,n.reportAllChanges),o((function(i){r=f(\"FCP\"),t=d(e,r,L,n.reportAllChanges),l((function(){r.value=performance.now()-i.timeStamp,t(!0)}))})))}))},b=[.1,.25],S=function(e,n){n=n||{},w(v((function(){var t,i=f(\"CLS\",0),r=0,a=[],c=function(e){e.forEach((function(e){if(!e.hadRecentInput){var n=a[0],t=a[a.length-1];r&&e.startTime-t.startTime<1e3&&e.startTime-n.startTime<5e3?(r+=e.value,a.push(e)):(r=e.value,a=[e])}})),r>i.value&&(i.value=r,i.entries=a,t())},u=s(\"layout-shift\",c);u&&(t=d(e,i,b,n.reportAllChanges),p((function(){c(u.takeRecords()),t(!0)})),o((function(){r=0,i=f(\"CLS\",0),t=d(e,i,b,n.reportAllChanges),l((function(){return t()}))})),setTimeout(t,0))})))},A={passive:!0,capture:!0},I=new Date,P=function(i,r){e||(e=r,n=i,t=new Date,k(removeEventListener),F())},F=function(){if(n>=0&&n<t-I){var r={entryType:\"first-input\",name:e.type,target:e.target,cancelable:e.cancelable,startTime:e.timeStamp,processingStart:e.timeStamp+n};i.forEach((function(e){e(r)})),i=[]}},M=function(e){if(e.cancelable){var n=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;\"pointerdown\"==e.type?function(e,n){var t=function(){P(e,n),r()},i=function(){r()},r=function(){removeEventListener(\"pointerup\",t,A),removeEventListener(\"pointercancel\",i,A)};addEventListener(\"pointerup\",t,A),addEventListener(\"pointercancel\",i,A)}(n,e):P(n,e)}},k=function(e){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(n){return e(n,M,A)}))},D=[100,300],x=function(t,r){r=r||{},C((function(){var a,c=E(),u=f(\"FID\"),l=function(e){e.startTime<c.firstHiddenTime&&(u.value=e.processingStart-e.startTime,u.entries.push(e),a(!0))},m=function(e){e.forEach(l)},h=s(\"first-input\",m);a=d(t,u,D,r.reportAllChanges),h&&p(v((function(){m(h.takeRecords()),h.disconnect()}))),h&&o((function(){var o;u=f(\"FID\"),a=d(t,u,D,r.reportAllChanges),i=[],n=-1,e=null,k(addEventListener),o=l,i.push(o),F()}))}))},B=0,R=1/0,H=0,N=function(e){e.forEach((function(e){e.interactionId&&(R=Math.min(R,e.interactionId),H=Math.max(H,e.interactionId),B=H?(H-R)/7+1:0)}))},O=function(){return r?B:performance.interactionCount||0},q=function(){\"interactionCount\"in performance||r||(r=s(\"event\",N,{type:\"event\",buffered:!0,durationThreshold:0}))},j=[200,500],_=0,z=function(){return O()-_},G=[],J={},K=function(e){var n=G[G.length-1],t=J[e.interactionId];if(t||G.length<10||e.duration>n.latency){if(t)t.entries.push(e),t.latency=Math.max(t.latency,e.duration);else{var i={id:e.interactionId,latency:e.duration,entries:[e]};J[i.id]=i,G.push(i)}G.sort((function(e,n){return n.latency-e.latency})),G.splice(10).forEach((function(e){delete J[e.id]}))}},Q=function(e,n){n=n||{},C((function(){var t;q();var i,r=f(\"INP\"),a=function(e){e.forEach((function(e){(e.interactionId&&K(e),\"first-input\"===e.entryType)&&(!G.some((function(n){return n.entries.some((function(n){return e.duration===n.duration&&e.startTime===n.startTime}))}))&&K(e))}));var n,t=(n=Math.min(G.length-1,Math.floor(z()/50)),G[n]);t&&t.latency!==r.value&&(r.value=t.latency,r.entries=t.entries,i())},c=s(\"event\",a,{durationThreshold:null!==(t=n.durationThreshold)&&void 0!==t?t:40});i=d(e,r,j,n.reportAllChanges),c&&(\"PerformanceEventTiming\"in window&&\"interactionId\"in PerformanceEventTiming.prototype&&c.observe({type:\"first-input\",buffered:!0}),p((function(){a(c.takeRecords()),r.value<0&&z()>0&&(r.value=0,r.entries=[]),i(!0)})),o((function(){G=[],_=O(),r=f(\"INP\"),i=d(e,r,j,n.reportAllChanges)})))}))},U=[2500,4e3],V={},W=function(e,n){n=n||{},C((function(){var t,i=E(),r=f(\"LCP\"),a=function(e){var n=e[e.length-1];n&&n.startTime<i.firstHiddenTime&&(r.value=Math.max(n.startTime-u(),0),r.entries=[n],t())},c=s(\"largest-contentful-paint\",a);if(c){t=d(e,r,U,n.reportAllChanges);var m=v((function(){V[r.id]||(a(c.takeRecords()),c.disconnect(),V[r.id]=!0,t(!0))}));[\"keydown\",\"click\"].forEach((function(e){addEventListener(e,(function(){return setTimeout(m,0)}),!0)})),p(m),o((function(i){r=f(\"LCP\"),t=d(e,r,U,n.reportAllChanges),l((function(){r.value=performance.now()-i.timeStamp,V[r.id]=!0,t(!0)}))}))}}))},X=[800,1800],Y=function e(n){document.prerendering?C((function(){return e(n)})):\"complete\"!==document.readyState?addEventListener(\"load\",(function(){return e(n)}),!0):setTimeout(n,0)},Z=function(e,n){n=n||{};var t=f(\"TTFB\"),i=d(e,t,X,n.reportAllChanges);Y((function(){var r=c();if(r){var a=r.responseStart;if(a<=0||a>performance.now())return;t.value=Math.max(a-u(),0),t.entries=[r],i(!0),o((function(){t=f(\"TTFB\",0),(i=d(e,t,X,n.reportAllChanges))(!0)}))}}))};export{b as CLSThresholds,L as FCPThresholds,D as FIDThresholds,j as INPThresholds,U as LCPThresholds,X as TTFBThresholds,S as getCLS,w as getFCP,x as getFID,Q as getINP,W as getLCP,Z as getTTFB,S as onCLS,w as onFCP,x as onFID,Q as onINP,W as onLCP,Z as onTTFB};\n", "import { onCLS, onFID, onINP, onLCP } from 'web-vitals';\n\nimport { logTiming, logValue } from '../helpers/logging';\n\n/**\n * Init gathering of Web Vitals, specifically LCP (Largest Contentful Paint), CLS (Cumulative Layout\n * Shift), and FID (First Input Delay).\n */\nexport const initWebVitalsLogging = (): void => {\n  const category = 'WebVitals';\n\n  onCLS(metric =>\n    logValue({\n      eventValue: metric.value,\n      eventLabel: window.location.pathname,\n      eventVariable: 'cumulative_layout_shift',\n      eventCategory: category,\n    })\n  );\n\n  onFID(metric =>\n    logTiming({\n      eventValue: metric.value,\n      eventLabel: window.location.pathname,\n      eventVariable: 'first_input_delay',\n      eventCategory: category,\n    })\n  );\n\n  onLCP(metric =>\n    logTiming({\n      eventValue: metric.value,\n      eventLabel: window.location.pathname,\n      eventVariable: 'largest_contentful_paint',\n      eventCategory: category,\n    })\n  );\n\n  onINP(metric => {\n    logTiming({\n      eventValue: metric.value,\n      eventLabel: window.location.pathname,\n      eventVariable: 'interaction_to_next_paint',\n      eventCategory: category,\n    });\n  });\n};\n", "import type { BrowserInfo } from '@snapchat/client-hints';\n\nimport { Config } from '../../config';\nimport type { UserAgentHints } from '../../types/userAgentHints';\n\nexport function userAgentHintsFromBowser(browserFeatures: BrowserInfo): UserAgentHints {\n  const hints = browserFeatures.getLowEntropyHints();\n  const browserVersion = hints.browsers[0]?.majorVersion;\n  return {\n    isMobile: hints.isMobile,\n    brand: hints.browsers[0]?.brand, // \"Edge\".\n    brandVersion: browserVersion ? String(browserVersion) : undefined, // \"75.2\"\n    platform: hints.platform, // \"Windows\", \"macOS\" etc.\n  };\n}\n\n/**\n * Starting from iOS 13, iPad uses MacOS for its UA. As of April 2023 there's no touch screen Mac,\n * so we can hack around this by checking for maxTouchPoints. We want to limit this workaround as\n * much as possible. Note we cannot detect Firefox via UA on iPad reliably, so we can only limit it\n * to iPad.\n *\n * NOTE: Relies on client features (navigator), always returns false for SSR\n */\nexport const isIpad = (browserFeatures: BrowserInfo): boolean => {\n  // Subsequent check relies on client features, always return false for SSR\n  if (!Config.isClient) return false;\n\n  // Normal case: Check for Mac OS with touchpoints\n  const hints = browserFeatures.getLowEntropyHints();\n  return hints.platform === 'macOS' && !!navigator?.maxTouchPoints && navigator?.maxTouchPoints > 1;\n};\n", "import { logError } from '../../helpers/logging';\n\nexport interface CookieOptions {\n  expires?: Date;\n  path?: string;\n  secure?: boolean;\n  httpOnly?: boolean;\n  credentials?: string;\n  domain?: string;\n  sameSite?: 'strict' | 'lax' | 'none';\n}\n\ntype JsonLike = Record<string, unknown> | boolean | number;\n\n/** Node/browser agnostic cookie utility interface */\nexport abstract class CookieManager {\n  public abstract getCookie: (name: string) => string | undefined;\n  public abstract setCookie: (name: string, value: string, options: CookieOptions) => void;\n  public abstract deleteCookie: (name: string) => void;\n\n  /**\n   * Returns the JSON value for the cookie.\n   *\n   * Returns `unedefined` if an error occurs.\n   */\n  public getCookieJson: (name: string) => JsonLike | undefined = name => {\n    const value = this.getCookie(name);\n    if (!value) return undefined;\n\n    try {\n      return JSON.parse(value);\n    } catch (error) {\n      logError({ component: 'CookieManager', message: `Error parsing cookie: \"${value}\"`, error });\n      return undefined;\n    }\n  };\n\n  /**\n   * Sets the value of the cookie to the JSON serialized version of the value.\n   *\n   * This will store an '' if the value is nullish.\n   */\n  setCookieJson: (name: string, value: JsonLike, options: CookieOptions) => void = (\n    name,\n    value,\n    options\n  ) => {\n    if (!value) {\n      this.setCookie(name, '', options);\n    } else {\n      this.setCookie(name, JSON.stringify(value), options);\n    }\n  };\n}\n", "import Cookies from 'js-cookie';\n\nimport type { CookieOptions } from '../utils/cookies/CookieManager';\nimport { CookieManager } from '../utils/cookies/CookieManager';\n\nexport class BrowserCookieManager extends CookieManager {\n  /** @override */\n  public getCookie = (name: string): string | undefined => {\n    return Cookies.get(name);\n  };\n\n  /** @override */\n  public setCookie = (name: string, value: string, options: CookieOptions): void => {\n    Cookies.set(name, value, options);\n  };\n\n  /** @override */\n  public deleteCookie = (name: string): void => {\n    return Cookies.remove(name);\n  };\n}\n", "import type { CreateUuidV4 } from '../utils/uuid/uuidFactory';\n\n/**\n * Template.\n *\n * - 'X' means replace with any 8-bit number.\n * - 'Y' means replace with any 0b10 + 6-bit number.\n */\nconst legacyUuidTemplate = 'XXXXXXXX-XXXX-4XXX-YXXX-XXXXXXXXXXXX';\n\ntype UuidV4Type = `${string}-${string}-${string}-${string}-${string}`;\n\n/**\n * Produces pseudo-random UUID v4 strings using window.crypto.getRandomValues.\n *\n * I.e. bb63899b-fb89-41ed-8a1e-eb87f44544c3\n *\n * See spec: https://datatracker.ietf.org/doc/html/rfc9562#name-uuid-version-4\n */\nconst legacyRandomUuid = (): UuidV4Type => {\n  let ri = 0;\n  const rs = window.crypto.getRandomValues(new Uint8Array(32));\n\n  return legacyUuidTemplate.replace(/[XY]/g, c => {\n    const r = rs[ri++]! % 16;\n\n    if (c === 'X') {\n      return r.toString(16);\n    }\n\n    if (c === 'Y') {\n      // Has to be in format: 0b10XXXXXX\n      return ((r >> 2) & 0b10000000).toString(16);\n    }\n\n    return '0';\n  }) as UuidV4Type;\n};\n\nexport const createUuidV4Browser: CreateUuidV4 = () => {\n  if (!('randomUUID' in window.crypto)) {\n    return legacyRandomUuid();\n  }\n\n  return window.crypto.randomUUID();\n};\n", "import baseIteratee from './_baseIteratee.js';\nimport isArrayLike from './isArrayLike.js';\nimport keys from './keys.js';\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n  return function(collection, predicate, fromIndex) {\n    var iterable = Object(collection);\n    if (!isArrayLike(collection)) {\n      var iteratee = baseIteratee(predicate, 3);\n      collection = keys(collection);\n      predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n    }\n    var index = findIndexFunc(collection, predicate, fromIndex);\n    return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n  };\n}\n\nexport default createFind;\n", "import baseFindIndex from './_baseFindIndex.js';\nimport baseIteratee from './_baseIteratee.js';\nimport toInteger from './toInteger.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'active': true },\n *   { 'user': 'fred',    'active': false },\n *   { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\nfunction findLastIndex(array, predicate, fromIndex) {\n  var length = array == null ? 0 : array.length;\n  if (!length) {\n    return -1;\n  }\n  var index = length - 1;\n  if (fromIndex !== undefined) {\n    index = toInteger(fromIndex);\n    index = fromIndex < 0\n      ? nativeMax(length + index, 0)\n      : nativeMin(index, length - 1);\n  }\n  return baseFindIndex(array, baseIteratee(predicate, 3), index, true);\n}\n\nexport default findLastIndex;\n", "import createFind from './_createFind.js';\nimport findLastIndex from './findLastIndex.js';\n\n/**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n *   return n % 2 == 1;\n * });\n * // => 3\n */\nvar findLast = createFind(findLastIndex);\n\nexport default findLast;\n", "import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n  return typeof value == 'string' ||\n    (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n", "import baseProperty from './_baseProperty.js';\n\n/**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nvar asciiSize = baseProperty('length');\n\nexport default asciiSize;\n", "/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nfunction unicodeSize(string) {\n  var result = reUnicode.lastIndex = 0;\n  while (reUnicode.test(string)) {\n    ++result;\n  }\n  return result;\n}\n\nexport default unicodeSize;\n", "import asciiSize from './_asciiSize.js';\nimport hasUnicode from './_hasUnicode.js';\nimport unicodeSize from './_unicodeSize.js';\n\n/**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\nfunction stringSize(string) {\n  return hasUnicode(string)\n    ? unicodeSize(string)\n    : asciiSize(string);\n}\n\nexport default stringSize;\n", "import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArrayLike from './isArrayLike.js';\nimport isString from './isString.js';\nimport stringSize from './_stringSize.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\n\n/**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\nfunction size(collection) {\n  if (collection == null) {\n    return 0;\n  }\n  if (isArrayLike(collection)) {\n    return isString(collection) ? stringSize(collection) : collection.length;\n  }\n  var tag = getTag(collection);\n  if (tag == mapTag || tag == setTag) {\n    return collection.size;\n  }\n  return baseKeys(collection).length;\n}\n\nexport default size;\n", "import type {\n  BaseMarketingWebEvent,\n  MarketingWebClientIdEvent,\n  MarketingWebSnapPixelEvent,\n} from '@snapchat/blizzard-schema';\nimport { type LoggedEvent, LoggingEventType } from '@snapchat/logging';\nimport type { BlizzardBaseEvent } from '@snapchat/logging-browser';\nimport kebabCase from 'lodash-es/kebabCase';\n\nimport { SubscribedEventType } from '../../eventListenerTypes';\nimport type { LoggingContext, LoggingCustomEvents } from '../../loggingTypes';\n\n/**\n * Event Formatting function for primary MarketingWeb Blizzard Table\n *\n * Table: `sc-analytics.prod_analytics_marketing_web`\n *\n * This is the primary MarketingWeb Blizzard table. Events logged here may trigger events in\n * secondary tables - refer to `formatSnapPixelEvent()` and `formatWebClientIdEvent()` functions for\n * details.\n */\nconst formatMarketingWebEvent = (\n  event: LoggedEvent<LoggingCustomEvents>,\n  context: Partial<LoggingContext>\n): BlizzardBaseEvent | undefined => {\n  const url = context.url ?? new URL(window.location.href);\n  const data: BaseMarketingWebEvent = {\n    host: url.host,\n    path: url.pathname,\n    query: JSON.stringify(Object.fromEntries(url.searchParams.entries())),\n    page_locale: context.locale,\n  };\n\n  // if experiment data exists, we add all three fields\n  if (context.variantId) {\n    data.experiment_category = 'Page'; // Always page.\n    data.experiment_group = context.variantId;\n    data.experiment_id = context.experimentId ?? 'None';\n  }\n\n  switch (event.type) {\n    case LoggingEventType.CUSTOM: {\n      switch (event.subscribedEventType) {\n        case SubscribedEventType.PAGE_LOAD:\n\n        // falls through\n        case SubscribedEventType.FIRST_PAGE_LOAD: {\n          return {\n            event_name: 'MARKETING_WEB_PAGE_VIEW',\n            ...data,\n            is_landing_page: event.subscribedEventType === SubscribedEventType.FIRST_PAGE_LOAD,\n          };\n        }\n\n        case SubscribedEventType.EXPERIMENT_IMPRESSION: {\n          // We add this case so typescript is happy, but theoretically this should never fire.\n          // If it DOES somehow fire, it will fire the exact same log as SubscribedEventType.INTERNAL and\n          // how the fields are set up in useExperiment\n          return {\n            event_name: 'MARKETING_WEB_INTERNAL_EVENT',\n            ...data,\n            type: 'useExperiment',\n            category: 'Experiment',\n            label: `${event.experimentId?.replace(/[ _]/, '-')}:${kebabCase(event.variantId)}`,\n            element_location: context.elementLocation,\n            element_text: context.elementText,\n            target_url: context.targetUrl,\n          } as BlizzardBaseEvent;\n        }\n      }\n      break;\n    }\n\n    case LoggingEventType.USER_ACTION: {\n      return {\n        event_name: 'MARKETING_WEB_USER_INTERACTION',\n        ...data,\n        type: event.action,\n        category: event.component,\n        label: event.label,\n        element_location: context.elementLocation,\n        element_text: context.elementText,\n        target_url: context.targetUrl,\n      } as BlizzardBaseEvent;\n    }\n\n    case LoggingEventType.INFO: {\n      return {\n        event_name: 'MARKETING_WEB_INTERNAL_EVENT',\n        ...data,\n        type: event.action,\n        category: event.component,\n        label: event.label,\n        element_location: context.elementLocation,\n        element_text: context.elementText,\n        target_url: context.targetUrl,\n      } as BlizzardBaseEvent;\n    }\n\n    case LoggingEventType.VALUE: {\n      return {\n        event_name: 'MARKETING_WEB_VALUE_EVENT',\n        ...data,\n        metric: event.value,\n        type: event.variable,\n        category: event.component,\n        label: event.label,\n        element_location: context.elementLocation,\n        element_text: context.elementText,\n        target_url: context.targetUrl,\n      } as BlizzardBaseEvent;\n    }\n\n    case LoggingEventType.TIMING: {\n      return {\n        event_name: 'MARKETING_WEB_TIMING_EVENT',\n        ...data,\n        duration: event.valueMs,\n        type: event.variable,\n        category: event.component,\n        label: event.label,\n        element_location: context.elementLocation,\n        element_text: context.elementText,\n        target_url: context.targetUrl,\n      } as BlizzardBaseEvent;\n    }\n  }\n\n  return undefined;\n};\n\n/**\n * Formatting for Snap Pixel Blizzard events (table:\n * `sc-analytics.prod_analytics_marketing_web_pixel_id`)\n *\n * Returns undefined if it is not relevant for the triggering event. Table is used to correlate\n * entries in the `sc-analytics.prod_analytics_marketing_web` to Snap pixel identifiers. This is\n * separated to its own table as snap pixel data requires a shorter data retention policy than the\n * primary table.\n *\n * @param triggeringEvent Event generated by `formatMarketingWebEvent` function\n * @param context Logging context, used to access pixelId value\n */\nconst formatSnapPixelEvent = (\n  triggeringEvent: BlizzardBaseEvent,\n  context: Partial<LoggingContext>\n): MarketingWebSnapPixelEvent | undefined => {\n  // Do not create event if pixelId is not defined\n  if (!context.pixelId) return;\n\n  return {\n    event_name: 'MARKETING_WEB_SNAP_PIXEL_EVENT',\n    pixel_id: context.pixelId,\n    triggering_event_name: triggeringEvent.event_name,\n  };\n};\n\n/**\n * Formatting for sc-wcid Blizzard events (table: `sc-analytics:prod_analytics_marketing_web_wcid`)\n *\n * Returns undefined if it is not relevant for the triggering event. Table is used to correlate\n * entries in the `sc-analytics.prod_analytics_marketing_web` to sc-wcid identifiers. This is\n * separated to its own table as the `sc-wcid` cookie values require a shorter data retention policy\n * than the primary table.\n *\n * @param triggeringEvent Event generated by `formatMarketingWebEvent` function\n * @param context Logging context, used to access webClientId value\n */\nconst formatWebClientIdEvent = (\n  triggeringEvent: BlizzardBaseEvent,\n  context: Partial<LoggingContext>\n): MarketingWebClientIdEvent | undefined => {\n  // Do not create event if webClientId is not defined\n  if (!context.webClientId) return;\n\n  return {\n    event_name: 'MARKETING_WEB_CLIENT_ID_EVENT',\n    web_client_id: context.webClientId,\n    triggering_event_name: triggeringEvent.event_name,\n  };\n};\n\n/**\n * Cache of events that have already been recorded.\n *\n * This is used for deduplicating webClientId and pixelId events.\n */\nconst eventLog = new Set<string>();\n\nexport function clearEventLogForTest(): void {\n  eventLog.clear();\n}\n\n/**\n * Wrapper function around individual MarketingWebEvent formatting functions.\n *\n * Returns an array containing formatted events.\n */\nexport const formatMarketingWebEvents = (\n  event: LoggedEvent<LoggingCustomEvents>,\n  context: Partial<LoggingContext>\n): BlizzardBaseEvent[] => {\n  const output: BlizzardBaseEvent[] = [];\n\n  const primaryEvent = formatMarketingWebEvent(event, context);\n\n  // If not a valid input event for logging to MWP tables, return empty array\n  if (!primaryEvent) return output;\n\n  output.push(primaryEvent);\n\n  // Generate related event if appropriate and add to output array\n  const pixelEvent = formatSnapPixelEvent(primaryEvent, context);\n\n  if (pixelEvent) {\n    // NOTE: The `triggering_event_name` field isn't used by the DS team, so we do\n    // not use it as a cache key. Doug pointed us this search:\n    // https://livegrep.sc-corp.net/search/?q=triggering_event_name%20max_matches%3A999&fold_case=auto&regex=false&context=true&repo%5B%5D=Snapchat%2Fflowrida\n    const eventKey = [pixelEvent.event_name, pixelEvent.pixel_id].join(':');\n\n    if (!eventLog.has(eventKey)) {\n      output.push(pixelEvent);\n      eventLog.add(eventKey);\n    }\n  }\n\n  // Generate related event if appropriate and add to output array\n  const webClientIdEvent = formatWebClientIdEvent(primaryEvent, context);\n\n  if (webClientIdEvent) {\n    // NOTE: triggering_event_name isn't part of the key for the same reason as above.\n    const eventKey = [webClientIdEvent.event_name, webClientIdEvent.web_client_id].join(':');\n\n    if (!eventLog.has(eventKey)) {\n      output.push(webClientIdEvent);\n      eventLog.add(eventKey);\n    }\n  }\n\n  return output;\n};\n", "import type { ForBusinessBaseEvent } from '@snapchat/blizzard-schema';\nimport type { LoggedEvent } from '@snapchat/logging';\nimport { LoggingEventType } from '@snapchat/logging';\nimport type { BlizzardBaseEvent } from '@snapchat/logging-browser';\nimport findLast from 'lodash-es/findLast';\nimport size from 'lodash-es/size';\n\nimport { SubscribedEventType } from '../../eventListenerTypes';\nimport type { LoggingContext, LoggingCustomEvents } from '../../loggingTypes';\nimport { formatMarketingWebEvents } from './marketingWeb';\n\n/**\n * Site specific Event Formatting for ForBusiness.snapchat.com\n *\n * Also generates standard MarketingWeb events via `formatMarketingWebEvents`\n *\n * Event Formatting function for ForBusiness.snapchat.com. Wraps the `formatMarketingWebEvents`\n * function and adds site specific events\n *\n * Table: `sc-analytics.prod_analytics_ads_manager`\n */\nexport const formatForBusinessEvents = (\n  event: LoggedEvent<LoggingCustomEvents>,\n  context: Partial<LoggingContext>\n): BlizzardBaseEvent[] => {\n  const url = context.url ?? new URL(window.location.href);\n  const uriMetrics = JSON.stringify({\n    href: url.href,\n    host: url.host,\n    path: url.pathname,\n    filename: findLast(url.pathname.split('/'), size) ?? '',\n    query: Object.fromEntries(url.searchParams.entries()),\n  });\n\n  const forBusinessData: ForBusinessBaseEvent = {\n    uri_info: uriMetrics,\n    experiment_name: context.experimentId,\n    experiment_variation: context.variantId,\n    page_locale: context.locale,\n  };\n\n  const events = formatMarketingWebEvents(event, context);\n\n  switch (event.type) {\n    case LoggingEventType.CUSTOM: {\n      switch (event.subscribedEventType) {\n        case SubscribedEventType.FIRST_PAGE_LOAD: {\n          events.push({\n            event_name: 'FOR_BUSINESS_PAGE_VIEW',\n            ...forBusinessData,\n          });\n          break;\n        }\n\n        case SubscribedEventType.PAGE_LOAD: {\n          events.push({\n            event_name: 'FOR_BUSINESS_PAGE_NAVIGATION',\n            ...forBusinessData,\n          });\n          break;\n        }\n      }\n      break;\n    }\n\n    case LoggingEventType.USER_ACTION: {\n      events.push({\n        event_name: 'FOR_BUSINESS_CLICK',\n        ...forBusinessData,\n        event_category: event.component,\n        event_action: event.action,\n        event_label: event.label,\n        element_location: context.elementLocation,\n        element_text: context.elementText,\n        target_url: context.targetUrl,\n      } as BlizzardBaseEvent);\n      break;\n    }\n  }\n\n  return events;\n};\n", "import { type FlatContext, type LoggedEvent, LoggingEventType } from '@snapchat/logging';\nimport { polyfilledStructuredClone } from '@snapchat/polyfills';\n\nimport type { LoggingContext, LoggingCustomEvents } from '../loggingTypes';\n\n// =============================================================================\n// Utility functions and constants for Graphene Event Listeners.\n// These are in a separate file so we can treeshake client and server dependencies\n// Only add dependencies that should be shared between the client and server listeners to this file.\n// =============================================================================\n\nexport const logFlushIntervalMs = 5e3;\n\nexport const silencedEventTypes = new Set([\n  LoggingEventType.INFO,\n  LoggingEventType.DEBUG,\n  LoggingEventType.USER_ACTION,\n  LoggingEventType.CUSTOM,\n]);\n\n// These are overrides from the default ones for legacy reasons.\nexport const getMetricName = (event: LoggedEvent<LoggingCustomEvents>): string | null => {\n  switch (event.type) {\n    case LoggingEventType.TIMING: {\n      return 'app_measure_event';\n    }\n\n    case LoggingEventType.VALUE: {\n      return 'app_measure_event';\n    }\n\n    case LoggingEventType.ERROR: {\n      if (event.component === 'Csp') {\n        return 'csp_error';\n      }\n\n      if (event.component === 'Contentful') {\n        return 'contentful_error';\n      }\n    }\n  }\n\n  // Fallback to defaults for other events.\n  return null;\n};\n\nexport const getAdditionalDimensions = (\n  context: Partial<LoggingContext>\n): FlatContext | undefined => ({\n  // only for csp violations, will not be populated for others.\n  blockedUri: context.blockedUri,\n  sourceFile: context.sourceFile,\n  violatedDirective: context.violatedDirective,\n\n  // only for contentful errors, may not be populated for others.\n  errorCode: context.errorCode,\n  errorName: context.errorName,\n\n  // All others\n  region: context.region, // Useful for graphene charting\n  locale: context.locale, // Useful for debugging\n  uaBrand: context.uaBrand,\n  uaPlatform: context.uaPlatform,\n});\n\n/**\n * EventRewrite helper for Graphene Event Listeners.\n *\n * Used to replace high cardinality event porperties with static values.\n */\nexport const eventRewrite = (event: LoggedEvent<LoggingCustomEvents>) => {\n  // LogPageLoad Component\n  if (\n    (event.type === LoggingEventType.TIMING || event.type === LoggingEventType.VALUE) &&\n    event.component === 'NavigationTiming'\n  ) {\n    const output = polyfilledStructuredClone(event);\n    output.label = '[REDACTED]'; // Includes current path\n    return output;\n  }\n\n  // LogPageLoad business profile logs\n  if (event.type === LoggingEventType.INFO && event.component === 'PersonaMatch') {\n    const output = polyfilledStructuredClone(event);\n    output.label = '[REDACTED]'; // Includes current path\n    return output;\n  }\n\n  // initWebVitalsLogging()\n  if (\n    (event.type === LoggingEventType.TIMING || event.type === LoggingEventType.VALUE) &&\n    event.component === 'WebVitals'\n  ) {\n    const output = polyfilledStructuredClone(event);\n    output.label = '[REDACTED]'; // Includes current path\n    return output;\n  }\n\n  // Video component\n  if (event.type === LoggingEventType.TIMING && event.component === 'Video') {\n    const output = polyfilledStructuredClone(event);\n    output.label = '[REDACTED]'; // user defined analytics label\n    return output;\n  }\n\n  // Default: no mutations, return original object\n  return event;\n};\n", "import type { Event, EventHint } from '@sentry/core';\n\ntype SentryEvent = Event;\ntype SentryEventHint = EventHint;\n\nconst groupByErrors = [\n  \"Can't find variable: ResizeObserver\",\n  'Importing a module script failed.',\n  'o.flush is not a function',\n  'ResizeObserver loop limit exceeded',\n  \"Cannot read properties of null (reading 'querySelector')\",\n  // These errors are thrown from the AR download form and don't get grouped well because of payload. They are all the same\n  'Form submit failed',\n  'Missing fields in LS download form: eula',\n];\n\nconst ignoreErrors = [\n  // We get a ton of these and they are not actionable because our csp rules are already blocking the eval\n  \"Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed\",\n];\n\n/**\n * Sentry hooks before sending data to Sentry.\n *\n * Contains filters and grouping rules for both server and client logging\n */\nexport function getBeforeSend<T extends SentryEvent, F extends SentryEventHint>(): (\n  event: T,\n  hint?: F\n) => T | PromiseLike<T | null> | null {\n  return (event: T, _hint?: F): T | PromiseLike<T | null> | null => {\n    const exceptionStackframe = event?.exception?.values?.[0]?.stacktrace?.frames;\n    const exceptionMessage = event.exception?.values?.[0]?.value ?? event.message;\n\n    if (!exceptionMessage && !exceptionStackframe) {\n      // Return early if there's no exception message to parse.\n      return event;\n    }\n\n    // Skip 599 messages. They are always a follow-up to another error.\n    if (exceptionMessage?.includes('599')) {\n      return null;\n    }\n\n    // Skip errors we have deemed as not actionable or otherwise irrelevant.\n    if (ignoreErrors.some(error => exceptionMessage?.includes(error))) {\n      return null;\n    }\n\n    // Group this query execution error. They all point to the same content issue.\n    const unresolvedQueryErrorMatches = exceptionMessage?.match(\n      /Query execution error\\. Link from entry(.*)cannot be resolved/\n    );\n\n    if (unresolvedQueryErrorMatches?.length && unresolvedQueryErrorMatches[0]) {\n      event.fingerprint = [unresolvedQueryErrorMatches[0]];\n      return event;\n    }\n\n    // These errors don't get grouped well because they don't have stack trace - it's usually because\n    // of new deployments that render the old imported module URL invalid.\n    if (exceptionMessage?.includes('Failed to fetch dynamically imported module')) {\n      event.fingerprint = ['Failed to fetch dynamically imported module'];\n      return event;\n    }\n\n    // These errors get thrown a couple times across the stackframe and don't get grouped - just check\n    // the exception message and that it's thrown from `@improbable-web/grpc-web`\n    if (\n      exceptionMessage?.includes('Response closed without headers') &&\n      exceptionStackframe?.some(frame => frame.module?.includes('@improbable-eng/grpc-web'))\n    ) {\n      event.fingerprint = ['[grpc-web] Response closed without headers'];\n      return event;\n    }\n\n    // These are thrown alot and not grouped well for AR site.\n    if (exceptionMessage?.includes('Failed to fetch') && event.request?.url?.includes('download')) {\n      event.fingerprint = ['[download] Failed to fetch'];\n      return event;\n    }\n\n    const url = event.request?.url ?? '/';\n\n    // These errors get thrown from any component that links out. It creates a new issue for each stack trace which\n    // is duplicative. Just group them all together. We have a ticket to investigate the error: https://jira.sc-corp.net/browse/WEBP-9306\n    for (const groupByError of groupByErrors) {\n      if (exceptionMessage?.includes(groupByError)) {\n        event.fingerprint = [url, groupByError];\n        return event;\n      }\n    }\n\n    return event;\n  };\n}\n", "/* eslint-disable import/no-unused-modules */\nimport { parseError } from '@snapchat/core';\nimport type {\n  BaseEventListenerProps,\n  BasePermission,\n  EmptyObject,\n  EventPayload,\n  LoggedEvent,\n} from '@snapchat/logging';\nimport { AbstractEventListener } from '@snapchat/logging';\n\nimport { customFetch } from '../utils/fetch/customFetch';\n\nconst mwpAuthTokenHeader = 'X-Snap-Mwp-Auth';\n\ntype Props<LoggingContext, CustomEvents> = {\n  /** Interval in ms the events are exported */\n  logTimeIntervalMs?: number;\n  /** Actions to take when an error has been encountered exporting */\n  onError?: (error: Error) => void;\n  /** Function to use to perform post request */\n  fetch?: typeof customFetch;\n  /** Function to provide the current time in ms. Defaults to Date.now */\n  clock?: () => number;\n} & BaseEventListenerProps<LoggingContext, CustomEvents>;\n\n/**\n * Event listener to export client events to /api/events. Includes logic to regularly sync the\n * events when they are needed.\n */\nexport class ClientExportEventListener<\n  LoggingContext extends EmptyObject = EmptyObject,\n  CustomEvents extends EmptyObject = EmptyObject,\n  LoggingPermission extends BasePermission = BasePermission\n> extends AbstractEventListener<LoggingContext, CustomEvents, LoggingPermission> {\n  private readonly props: Props<LoggingContext, CustomEvents>;\n\n  private events: EventPayload<CustomEvents, LoggingContext>[];\n  private timeout?: ReturnType<typeof setTimeout>;\n  private fetch: typeof customFetch;\n  private readonly clock: () => number;\n\n  // TODO: refactor to extract out syncing logic into a reusable class\n\n  constructor(props: Props<LoggingContext, CustomEvents>) {\n    super({ requiredPermissions: ['logging'], filter: props.filter });\n    this.props = props;\n    this.fetch = props.fetch ?? customFetch;\n    this.events = [];\n    this.clock = props.clock ?? Date.now;\n  }\n\n  /** Setup a timeout to trigger an export */\n  private ensureTimeout(): void {\n    if (this.timeout !== undefined) return;\n\n    this.timeout = setTimeout(this.exportEvents, this.props.logTimeIntervalMs);\n  }\n\n  /** Export events to /api/events, including generating authentication token. */\n  private exportEvents = async (): Promise<void> => {\n    // clear timeout, we only set it again if we exported or get new events\n    this.timeout = undefined;\n\n    if (this.events.length === 0) {\n      return;\n    }\n\n    const data = { events: this.getSerializedEvents(), timestamp: this.clock() };\n    this.events = [];\n\n    try {\n      // Hash a subset of the payload\n      const tokenData = { events: [data.events[0]], timestamp: data.timestamp };\n      const hash = await hashData(tokenData);\n      // Base64 encode it\n      const authToken = window.btoa(hash);\n\n      const response = await this.fetch('/api/events', {\n        method: 'POST',\n        body: JSON.stringify(data),\n        headers: {\n          [mwpAuthTokenHeader]: authToken,\n          'Content-Type': 'application/json',\n        },\n      });\n\n      // if response is not good, stop loop\n      if (!response.ok) {\n        const text = await response.text();\n        throw new Error(\n          `Events export request failed - status: ${response.status}, value:${text} `\n        );\n      }\n    } catch (error) {\n      this.props.onError?.(parseError(error));\n    }\n\n    this.ensureTimeout();\n  };\n\n  //==================================================\n  // Event serialization\n  //==================================================\n\n  /**\n   * Extracts the message from the Error object values.\n   *\n   * This is required because JSON.stringify(error) is always '{}' since error fields aren't\n   * enumerable.\n   *\n   * This way we at least send the error message to the server.\n   *\n   * The extraction of the message typically happens when the error is logged, but we make an\n   * exception here so that we don't lose the data.\n   */\n  getSerializedEvents = (): typeof this.events => {\n    return this.events.map(payload => {\n      if (payload.event.type !== 'error') {\n        return payload;\n      }\n\n      const event = payload.event;\n\n      if (event.message || !event.error) {\n        return payload;\n      }\n\n      event.message = parseError(event.error).message;\n      return payload;\n    });\n  };\n\n  //==================================================\n  // Event Listener overrides\n  //==================================================\n\n  /** @override */\n  protected init = (): Promise<void> => {\n    return Promise.resolve();\n  };\n\n  /** @override */\n  protected logEventInternal(\n    event: LoggedEvent<CustomEvents>,\n    context: Partial<LoggingContext>\n  ): void {\n    // we just collect events to push later on\n    this.events.push({ event, context: context ?? {} });\n\n    this.ensureTimeout();\n  }\n\n  /** @override */\n  public flushInternal = async (): Promise<void> => {\n    if (this.timeout) clearTimeout(this.timeout);\n\n    await this.exportEvents();\n  };\n}\n\nasync function hashData(input: string | object): Promise<string> {\n  // Convert the input to a string representation\n  const dataStr = typeof input === 'string' ? input : JSON.stringify(input);\n  const encoder = new TextEncoder();\n  const data = encoder.encode(dataStr);\n\n  const hash = await window.crypto.subtle.digest('SHA-256', data); // Hash the bytes\n\n  // Convert the hash from bytes to a hex string\n  return Array.from(new Uint8Array(hash))\n    .map(byte => byte.toString(16).padStart(2, '0'))\n    .join('');\n}\n", "import type { ErrorEvent, EventHint } from '@sentry/core';\nimport type { EventListener, LoggedEvent } from '@snapchat/logging';\nimport { LoggingEventType } from '@snapchat/logging';\nimport {\n  BlizzardClientEventListener,\n  ConsoleClientEventListener,\n  GrapheneClientEventListener,\n  SentryClientEventListener,\n} from '@snapchat/logging-browser';\nimport omit from 'lodash-es/omit';\n\nimport {\n  formatForBusinessEvents,\n  formatMarketingWebEvents,\n} from '../helpers/logging/blizzard/eventFormats';\nimport {\n  BlizzardEventFormat,\n  LoggingVendor,\n  SubscribedEventType,\n} from '../helpers/logging/eventListenerTypes';\nimport {\n  type InitialLoggingContext,\n  GoogleEventListener,\n} from '../helpers/logging/google/GoogleEventListener';\nimport {\n  eventRewrite,\n  getAdditionalDimensions,\n  getMetricName,\n  silencedEventTypes,\n} from '../helpers/logging/graphene/utils';\nimport { logger } from '../helpers/logging/loggingInstance';\nimport type {\n  ExperimentContext,\n  LoggingConfig,\n  LoggingContext,\n  LoggingCustomEvents,\n  LoggingPermissions,\n} from '../helpers/logging/loggingTypes';\nimport { EventOrigin } from '../helpers/logging/loggingTypes';\nimport { getBeforeSend } from '../helpers/logging/sentry';\nimport { ClientExportEventListener } from './ClientExportEventListener';\n\n/** Configuration parameter for SentryClientEventListener class constructor */\ntype SentryProps = ConstructorParameters<\n  typeof SentryClientEventListener<LoggingContext, LoggingCustomEvents, LoggingPermissions>\n>[0];\n\n/** For logger where flush interval is controlled, this is the value we pass in. */\nconst logFlushIntervalMs = 5e3;\n\n/** Returns the value of a cookie. 1-liner to avoid importing a cookie library. */\nfunction getCookie(cookieName: string): string | undefined {\n  return new RegExp(`${cookieName}=([^;]+);`).exec(document.cookie)?.[1];\n}\n\n/** Provides the Snap Pixel cookie id if set. */\nfunction getPixelContext(): { pixelId?: string } {\n  return {\n    pixelId: getCookie('_scid'),\n  };\n}\n\n/** Captor for the latest values of the experiment impression. */\nclass ExperimentContextListener\n  implements EventListener<LoggingContext, LoggingCustomEvents, LoggingPermissions>\n{\n  private readonly experimentContext: ExperimentContext = {};\n\n  /** @override */\n  public logEvent(\n    event: LoggedEvent<LoggingCustomEvents>,\n    _context: Partial<LoggingContext>\n  ): void {\n    if (\n      event.type === LoggingEventType.CUSTOM &&\n      event.subscribedEventType === SubscribedEventType.EXPERIMENT_IMPRESSION\n    ) {\n      if (!event.experimentId) {\n        this.experimentContext.experimentId = undefined;\n        this.experimentContext.variantId = undefined;\n      } else {\n        this.experimentContext.experimentId = event.experimentId;\n        this.experimentContext.variantId = event.variantId;\n      }\n    }\n  }\n\n  public getExperimentContext = (): ExperimentContext => this.experimentContext;\n\n  // TODO: Consider moving these overrides to SyncEventListener..\n\n  /** @override */\n  allow = () => Promise.resolve();\n  /** @override */\n  deny = () => Promise.resolve();\n  /** @override */\n  flush = () => Promise.resolve();\n}\n\n/** For Client Side logging, need to incorporate the initial logging context */\ntype ClientLoggingConfig = LoggingConfig & InitialLoggingContext;\n\nexport const initializeClientLogging = (config: ClientLoggingConfig): void => {\n  // Do not log inside tests.\n  if (config.isTest || !config.isClient) return;\n\n  logger.addContextProvider(() => ({\n    region: config.region,\n    buildNumber: config.buildNumber, // TODO add commit\n    eventOrigin: EventOrigin.CLIENT,\n  }));\n\n  // Adds the experiment context provider.\n  const experimentContextListener = new ExperimentContextListener();\n  logger.addEventListeners(experimentContextListener);\n  logger.addContextProvider(() => experimentContextListener.getExperimentContext());\n\n  // Adds the snap pixel context provider.\n  logger.addContextProvider(getPixelContext);\n\n  // Add web client id if sc-wcid cookie is set.\n  logger.addContextProvider(() => ({\n    webClientId: getCookie('sc-wcid'),\n  }));\n\n  for (const eventListenerConfig of config.trackingSettings.eventListeners) {\n    switch (eventListenerConfig.vendor) {\n      case LoggingVendor.GRAPHENE: {\n        logger.addEventListeners(\n          new GrapheneClientEventListener<LoggingContext, LoggingCustomEvents, LoggingPermissions>({\n            partitionName: eventListenerConfig.partitionName,\n            variant: config.site,\n            flavor: config.isDeploymentTypeProd ? 'production' : 'development',\n            logTimeInterval: logFlushIntervalMs,\n            // These are overrides from the default ones for legacy reasons.\n            getMetricName,\n            getAdditionalDimensions,\n            // if filter returns true, logs the event\n            // if filter returns false, omits the event\n            filter: event => {\n              // if a silenced event type, skip\n              if (silencedEventTypes.has(event.type)) return false;\n              // otherwise skip only if specified by input\n              return true;\n            },\n            eventRewrite,\n          })\n        );\n        break;\n      }\n\n      case LoggingVendor.MWP_HERMES: {\n        if (!config.isCompilationModeProd || !config.isDeploymentTypeProd || !config.buildNumber) {\n          break;\n        }\n\n        logger.addEventListeners(\n          new ClientExportEventListener({\n            useAsync: true,\n            logTimeIntervalMs: logFlushIntervalMs,\n            onError: error => console.error(error),\n          })\n        );\n        break;\n      }\n\n      case LoggingVendor.GOOGLE_TAG_MANAGER: {\n        // TODO: Pass in nonce a a prop.\n        const nonce = document.querySelector<HTMLScriptElement>('script[nonce]')?.nonce;\n        const gtmEventListener = new GoogleEventListener({\n          useAsync: true,\n          gtmId: eventListenerConfig.googleTagManagerId,\n          nonce,\n          initialContext: {\n            locale: config.locale,\n            globalPrivacyControl: config.globalPrivacyControl,\n          },\n        });\n\n        logger.addEventListeners(gtmEventListener);\n        break;\n      }\n\n      case LoggingVendor.BLIZZARD: {\n        const formatter =\n          eventListenerConfig.eventFormat === BlizzardEventFormat.FOR_BUSINESS\n            ? formatForBusinessEvents\n            : formatMarketingWebEvents;\n\n        logger.addEventListeners(\n          new BlizzardClientEventListener<LoggingContext, LoggingCustomEvents, LoggingPermissions>({\n            useAsync: true,\n            isProd: config.isDeploymentTypeProd,\n            cookieDomain: config.trackingSettings.cookieDomain,\n            eventFormatter: formatter,\n          })\n        );\n        break;\n      }\n\n      case LoggingVendor.SENTRY: {\n        // TODO: Re-enable sentry on staging. Disabled to avoid regression tests\n        // using up all of sentry quota.\n        if (!config.isDeploymentTypeProd) {\n          break;\n        }\n        const shortCommit = config.commit?.slice(0, 9) ?? 'unknown';\n\n        // Sentry Listener configuration\n        const sentryProps: SentryProps = {\n          dsn: eventListenerConfig.dsn,\n          tracesSampleRate: 1.0,\n          useAsync: true,\n          getContext: (_event, context) => ({\n            contexts: {\n              location: {\n                userCountry: context.userCountry ?? 'unknown_country',\n                locale: context.locale ?? 'unknown_locale',\n                region: context.region ?? 'unknown_region',\n              },\n            },\n          }),\n          environment: config.deploymentType,\n          release: `${eventListenerConfig.projectName}@${shortCommit}`,\n          filter(event, _context) {\n            // Skip CSP errors because they are very spammy and already logged in Graphene\n            if (event.type === LoggingEventType.ERROR && event.component === 'Csp') {\n              return false;\n            }\n\n            // Skip debug logs.\n            if (event.type === LoggingEventType.DEBUG) {\n              return false;\n            }\n\n            // Else log other events.\n            return true;\n          },\n          // We can adjust grouping rules before sending an event\n          beforeSend: getBeforeSend<ErrorEvent, EventHint>(),\n        };\n\n        // Only specify `allowUrls` property if defined in config, otherwise fallback to default\n        if (eventListenerConfig.allowUrls) {\n          sentryProps.allowUrls = eventListenerConfig.allowUrls;\n        }\n\n        logger.addEventListeners(\n          new SentryClientEventListener<LoggingContext, LoggingCustomEvents, LoggingPermissions>(\n            sentryProps\n          )\n        );\n        break;\n      }\n\n      case LoggingVendor.CONSOLE: {\n        logger.addEventListeners(\n          new ConsoleClientEventListener<LoggingContext, LoggingCustomEvents, LoggingPermissions>({\n            filter(event, _context) {\n              // Skip Contentful: requestDuration=XXXms because it's very spammy.\n              if (\n                event.type === LoggingEventType.TIMING &&\n                event.component === 'Contentful' &&\n                event.variable === 'request_duration' &&\n                event.valueMs < 1e3\n              ) {\n                return false;\n              }\n\n              // Else log other events.\n              return true;\n            },\n            getFlatContext(context) {\n              return {\n                elementLocation: context.elementLocation,\n                elementText: context.elementText,\n                targetUrl: context.targetUrl,\n              };\n            },\n            customEventFormatter(event, _context) {\n              if (event.subscribedEventType === SubscribedEventType.EXPERIMENT_IMPRESSION) {\n                if (!event.experimentId || !event.variantId) return null;\n                return `Experiment: Impression on ${event.experimentId}.${event.variantId}`;\n              }\n\n              // Dump other custom events.\n              return [omit(event, 'type')];\n            },\n          })\n        );\n        break;\n      }\n    }\n  }\n};\n", "import { logger } from '../helpers/logging/loggingInstance';\nimport type { LoggingConfig } from '../helpers/logging/loggingTypes';\n\n/**\n * Attempts with different deferral values (on citizen.snap.com) and Lighthouse Perfromance (Mobile)\n * scores:\n *\n *     10 seconds: 74, 72\n *     9  seconds: Skip\n *     8  seconds: Skip\n *     7  seconds: 72, 72\n *     6  seconds: 72, 74, 69, 74, 78\n *     5  seconds: 79, 76, 73, 74, 73\n *     4  seconds: 72, 74, 73, 72, 75\n *     3  seconds: 61, 73, 67, 58, 72\n *     2  seconds: 71, 69, 70, 70, 69\n *     1  seconds: Skip\n *     0  seconds: 69, 70\n *\n * Based on the table above, we're targeting 5 seconds since we want to avoid never logging too many\n * bounced visits.\n */\nconst loggingInitTimeoutMs = 5e3;\n\n/**\n * Gives the logger the logging permission.\n *\n * This triggers async downloads of the logging libs which has implications.\n */\nexport function startClientLogging(config: LoggingConfig): void {\n  // logging client initialization occurs outside of React, so need to handle default behaviors here.\n  const disableLazyLoadLogging =\n    config.featureFlags?.disableLazyLoadLogging === 'true' || !config.isDeploymentTypeProd;\n\n  const loggingScheduleStart = performance.now();\n\n  const allowLogging = () => {\n    void logger.allow('logging');\n    const loggingAllowTrigger = performance.now();\n\n    logger.logTiming({\n      component: 'logInit',\n      variable: 'allowLogging',\n      valueMs: loggingAllowTrigger - loggingScheduleStart,\n    });\n  };\n\n  if (disableLazyLoadLogging) {\n    // This has an effect of greatly slowing down website rendering because logging\n    // packages are very cumbersome, but this way there are less missed user sessions.\n    setTimeout(allowLogging, 10);\n  } else if (typeof globalThis.requestIdleCallback === 'function') {\n    // If we can, we wait for the network to be idle before loading logging packages.\n    // Though we only check after 1 second, to allow for the initial rendering to\n    // finish (on fast machines anyway). Without the delay, idle callback fires too soon.\n    setTimeout(() => {\n      requestIdleCallback(allowLogging, { timeout: loggingInitTimeoutMs });\n    }, 1e3);\n  } else if (typeof globalThis.requestAnimationFrame === 'function') {\n    // For legacy browsers, we wait for the end of the JS loop via setTimeout and then\n    // wait for for the layout to finish allowing for one JS + render cycle to complete\n    // before loading the logging packages.\n    setTimeout(() => {\n      requestAnimationFrame(allowLogging);\n    }, 1e3);\n  } else {\n    // If all else fails, we have a long delay before initializing logging.\n    setTimeout(allowLogging, loggingInitTimeoutMs);\n  }\n}\n", "import { Config } from '../../config';\nimport type { ContentfulConfiguration } from '../../configTypes';\nimport { UrlParameter } from '../../constants/urlParameters';\n\n/**\n * Applies URL overrides to a contentful configuration.\n *\n * Currently only supports the 'contentfulEnvironmentName' param.\n */\nexport function applyUrlOverrides(\n  config: ContentfulConfiguration,\n  params: URLSearchParams\n): ContentfulConfiguration {\n  if (Config.isDeploymentTypeProd) {\n    return config;\n  }\n  const newConfig = {\n    ...config,\n    environmentName: params.get(UrlParameter.CONTENTFUL_ENVIRONMENT_NAME) ?? config.environmentName,\n  };\n\n  return newConfig;\n}\n", "import type { PossibleTypesMap } from '@apollo/client';\nimport memoizeAsync from 'promise-memoize';\n\nimport type { ContentfulConfiguration } from '../../configTypes';\nimport { customFetch } from '../fetch/customFetch';\nimport { getTracer } from '../tracing';\nimport { getContentfulHttpOptions } from './ContentfulProvider';\n\n/**\n * Returns the fragment map (i.e. what types Entry interface maps to etc).\n *\n * This is based on this code:\n * https://www.apollographql.com/docs/react/data/fragments/#generating-possibletypes-automatically\n */\nexport const generateFragmentTypes = memoizeAsync(\n  async (config: ContentfulConfiguration): Promise<PossibleTypesMap> => {\n    const httpOptions = getContentfulHttpOptions(config);\n    const trace = getTracer().startSpan('generateFragmentTypes');\n    const possibleTypesResponse = await customFetch(httpOptions.uri as string, {\n      method: 'POST',\n      headers: {\n        Authorization: httpOptions.headers?.Authorization ?? '',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        variables: {},\n        // Minified sincewe don't have a way to minify this otherwise.\n        query: '{__schema{types{kind name possibleTypes{name}}}}',\n      }),\n    });\n\n    const possibleTypesData = await possibleTypesResponse.json();\n\n    if (!possibleTypesData.data) {\n      throw Error(`Schema request failed: ${JSON.stringify(possibleTypesData)}`);\n    }\n\n    const parsedFragmentTypes = parseFragmentTypeData(possibleTypesData.data);\n\n    trace.endSpan();\n    return parsedFragmentTypes;\n  }\n);\n\ntype FragmentTypeSchema = {\n  __schema: {\n    types: {\n      kind: string;\n      name: string;\n      possibleTypes?: { name: string }[] | null;\n    }[];\n  };\n};\n\nexport function parseFragmentTypeData(data: FragmentTypeSchema): PossibleTypesMap {\n  const possibleTypeMap: PossibleTypesMap = {};\n\n  data.__schema.types.forEach(supertype => {\n    if (supertype.possibleTypes) {\n      possibleTypeMap[supertype.name] = supertype.possibleTypes.map(\n        (subtype: { name: string }) => subtype.name\n      );\n    }\n  });\n\n  return possibleTypeMap;\n}\n", "import type {\n  RunningTrace,\n  Tracer,\n  TracerEventListener,\n  TracerListenerRemover,\n} from './tracingTypes';\nimport { TraceLifeCycleState } from './tracingTypes';\n\nexport class BrowserTracer implements Tracer {\n  private spanCount = 0;\n  private listeners: Set<TracerEventListener> = new Set();\n  private activeEvents = 0;\n\n  startSpan: (name: string) => RunningTrace = (name: string) => {\n    const markName = `${this.spanCount++}: ${name}`;\n\n    // Pre event trace handling\n    this.activeEvents++;\n\n    this.listeners.forEach(listener =>\n      listener(markName, name, TraceLifeCycleState.START, this.activeEvents)\n    );\n\n    performance.mark(`${markName} start`);\n    return { endSpan: () => this.endSpan(name, markName) };\n  };\n\n  private endSpan: (name: string, internalTrackingName: string) => void = (name, markName) => {\n    performance.mark(`${markName} end`);\n    performance.measure(name, `${markName} start`, `${markName} end`);\n    // Record performance in dev tools to see these spans.\n\n    // Post event tracing handling\n    this.activeEvents--;\n\n    this.listeners.forEach(listener =>\n      listener(markName, name, TraceLifeCycleState.END, this.activeEvents)\n    );\n  };\n\n  addEventListener = (callback: TracerEventListener): TracerListenerRemover => {\n    this.listeners.add(callback);\n\n    return () => {\n      this.listeners.delete(callback);\n    };\n  };\n}\n", "// TODO use Config.trackingSettings.cookieDomain\nexport const allowedDomains = new Set([\n  '.snapchat.com',\n  '.snap.com',\n  '.arcadiacreativestudio.com',\n  '.pixy.com',\n  '.yellowla.com',\n  '.specs.com',\n  '.spectacles.com',\n  // dev/staging\n  '.snap-dev.net',\n  '.sc-corp.net',\n  'localhost',\n]);\nexport const essentialSessionCookieName = 'EssentialSession';\nexport const webClientIdName = 'sc-wcid';\n", "import { gdprCountries } from '@snapchat/mw-common';\nimport { getTopLevelDomain } from '@snapchat/parse-domain';\n\nimport type { UserLocation } from '../../AppContext';\nimport type { CookieManager, CookieOptions } from '../cookies/CookieManager';\nimport type { CreateUuidV4 } from '../uuid/uuidFactory';\nimport {\n  allowedDomains,\n  essentialSessionCookieName,\n  webClientIdName,\n} from './webClientIdConstants';\n\ntype EnsureWebClientIdArgs = {\n  currentUrl: URL;\n  userLocation: UserLocation;\n  cookieManager: CookieManager;\n  createUuidV4: CreateUuidV4;\n};\n\n/**\n * Returns the current `sc-wcid` value.\n *\n * If one doesn't exist, creates it and sets the cookie.\n *\n * If one isn't allowed to be stored, returns undefined.\n *\n * This code is inteded to be used on server and client-side, so all of the implementation details\n * are abstracted.\n *\n * This is inspired by\n * https://github.sc-corp.net/Snapchat/web/blob/main/common/sc-cookies/lib/sc-cookies.ts\n */\nexport function ensureWebClientId(args: EnsureWebClientIdArgs): string | undefined {\n  const { currentUrl, userLocation, cookieManager, createUuidV4 } = args;\n\n  // Case 1: user has opted out of Essential Session we do nothing\n  if (cookieManager.getCookie(essentialSessionCookieName) === 'false') {\n    return;\n  }\n\n  // Case 2: Cookie already exists\n  const existingCookie = cookieManager.getCookie(webClientIdName);\n\n  if (existingCookie) {\n    return existingCookie;\n  }\n\n  // Case 3: Cookie needs to be set\n  const isGdpr = userLocation.country ? gdprCountries.has(userLocation.country) : true;\n  const expires = new Date();\n\n  if (isGdpr) {\n    // For GDPR countries, the expiry of the web_client_id should be set to 24 hours\n    expires.setDate(expires.getDate() + 1);\n  } else {\n    expires.setFullYear(expires.getFullYear() + 1);\n  }\n\n  let cookieDomain = getTopLevelDomain(currentUrl.hostname);\n  // need leading .\n  if (cookieDomain !== 'localhost') cookieDomain = `.${cookieDomain}`;\n  // handle staging special case\n  if (cookieDomain === '.appspot.com') cookieDomain = '.sc-corp.net';\n\n  const cookieOptions: CookieOptions = {\n    expires: new Date(expires),\n    path: '/', // Is this necessary?\n    secure: true,\n    httpOnly: false,\n    credentials: 'same-origin',\n    domain: allowedDomains.has(cookieDomain) ? cookieDomain : undefined,\n  };\n\n  const webClientId = createUuidV4();\n\n  cookieManager.setCookie(webClientIdName, webClientId, cookieOptions);\n\n  return webClientId;\n}\n"],
  "mappings": "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AC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KAYMC,GAAwB,CAC5B,QAAS1C,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,GAAMC,GACN,QAASC,GACT,SAAUC,GACV,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,IAGXE,GAAA,QAAeD,0GClGf,IAAAE,GAAA,KACMC,GAAqB,QAC3B,SAAgBC,GAAaC,EAAmC,CAAnCA,IAAA,SAAAA,EAAAF,IAC3BE,EAASA,GAASA,EAAO,YAAW,EACpC,IAAMC,EAAUJ,GAAA,QAAaG,CAAM,EAAIH,GAAA,QAAaG,CAAM,EAAIH,GAAA,QAAaC,EAAkB,EAC7F,QAAQ,IAAI,KAAOG,EAAQ,QAAS,6DAA6D,EACjG,QAAQ,IAAI,KAAOA,EAAQ,QAAS,0DAA0D,CAChG,CALAC,GAAA,aAAAH,KCFA,IAAAI,GAAAC,GAAAC,IAAA,cAEA,IAAIC,GAAI,KAEND,GAAQ,WAAaC,GAAE,WACvBD,GAAQ,YAAcC,GAAE,YAE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",
  "names": ["require_ar_aa", "__commonJSMin", "exports", "module", "require_bn_bd", "__commonJSMin", "exports", "module", "require_bn_in", "__commonJSMin", "exports", "module", "require_da_dk", "__commonJSMin", "exports", "module", "require_de_de", "__commonJSMin", "exports", "module", "require_el_gr", "__commonJSMin", "exports", "module", "require_en_gb", "__commonJSMin", "exports", "module", "require_en_us", "__commonJSMin", "exports", "module", "require_es_ar", "__commonJSMin", "exports", "module", "require_es_es", "__commonJSMin", "exports", "module", "require_es_mx", "__commonJSMin", "exports", "module", "require_es", "__commonJSMin", "exports", "module", "require_fi_fi", "__commonJSMin", "exports", "module", "require_fil_ph", "__commonJSMin", "exports", "module", "require_fr_fr", "__commonJSMin", "exports", "module", "require_gu_in", "__commonJSMin", "exports", "module", "require_hi_in", "__commonJSMin", "exports", "module", "require_id_id", "__commonJSMin", "exports", "module", "require_it_it", "__commonJSMin", "exports", "module", "require_ja_jp", "__commonJSMin", "exports", "module", "require_kn_in", "__commonJSMin", "exports", "module", "require_ko_kr", "__commonJSMin", "exports", "module", "require_ml_in", "__commonJSMin", "exports", "module", "require_mr_in", "__commonJSMin", "exports", "module", "require_ms_my", "__commonJSMin", "exports", "module", "require_nb_no", "__commonJSMin", "exports", "module", "require_nl_nl", "__commonJSMin", "exports", "module", "require_pa_in", "__commonJSMin", "exports", "module", "require_pl_pl", "__commonJSMin", "exports", "module", "require_pt_br", "__commonJSMin", "exports", "module", "require_pt_pt", "__commonJSMin", "exports", "module", "require_ro_ro", "__commonJSMin", "exports", "module", "require_ru_ru", "__commonJSMin", "exports", "module", "require_sv_se", "__commonJSMin", "exports", "module", "require_ta_in", "__commonJSMin", "exports", "module", "require_te_in", "__commonJSMin", "exports", "module", "require_th_th", "__commonJSMin", "exports", "module", "require_tr_tr", "__commonJSMin", "exports", "module", "require_ur_pk", "__commonJSMin", "exports", "module", "require_vi_vn", "__commonJSMin", "exports", "module", "require_zh_cn", "__commonJSMin", "exports", "module", "require_zh_tw", "__commonJSMin", "exports", "module", "arAa", "bnBd", "bnIn", "daDk", "deDe", "elGr", "enGb", "enUs", "esAr", "esEs", "esMx", "es", "fiFi", "filPh", "frFr", "guIn", "hiIn", "idId", "itIt", "jaJp", "knIn", "koKr", "mlIn", "mrIn", "msMy", "nbNo", "nlNl", "paIn", "plPl", "ptBr", "ptPt", "roRo", "ruRu", "svSe", "taIn", "teIn", "thTh", "trTr", "urPk", "viVn", "zhCn", "zhTw", "content", "exports", "localization_1", "defaultTranslation", "printWarning", "locale", "content", "exports", "require_client", "__commonJSMin", "exports", "m", "i", "blocks", "BLOCKS", "inlines", "INLINES", "marks", "MARKS", "__spreadArray", "this", "to", "from", "pack", "i", "l", "ar", "_a", "exports", "blocks_1", "require$$0", "inlines_1", "require$$1", "marks_1", "require$$2", "types", "nodeTypes", "emptyDocument", "helpers", "isInline", "isBlock", "isText", "hasValue", "obj", "value", "_i", "key", "node", "schemas", "getSchemaWithNodeType", "nodeType", "require", "__createBinding", "o", "m", "k", "k2", "desc", "__setModuleDefault", "v", "__exportStar", "p", "__importStar", "mod", "result", "require$$3", "require$$4", "require$$5", "emptyDocument_1", "require$$6", "require$$7", "schemas_1", "require$$8", "matchHtmlRegExp", "escapeHtml_1", "escapeHtml", "string", "str", "match", "escape", "html", "index", "lastIndex", "attributeValue", "defaultNodeRenderers", "next", "defaultInline", "defaultInlineResource", "href", "defaultMarkRenderers", "_b", "text", "type", "documentToHtmlString", "richTextDocument", "options", "nodeListToHtmlString", "__assign", "nodes", "renderNode", "renderMark", "preserveWhitespace", "nodeToHtmlString", "nodeValue", "mark", "nextNode", "css", "ref", "insertAt", "document", "head", "getElementsByTagName", "style", "createElement", "type", "firstChild", "insertBefore", "appendChild", "styleSheet", "cssText", "createTextNode", "closeIconTypes", "circle", "circle2", "close", "cancel", "OutsideAlerter", "props", "clickEvent", "wrapperRef", "useRef", "outsideClick", "useEffect", "handleClickOutside", "event", "current", "contains", "target", "addEventListener", "removeEventListener", "React", "children", "Multiselect", "c", "_this", "state", "inputValue", "options", "filteredOptions", "unfilteredOptions", "selectedValues", "Object", "assign", "preSelectedValues", "toggleOptionsList", "highlightOption", "avoidHighlightFirstOption", "showCheckbox", "keepSearchTerm", "groupedObject", "closeIconType", "closeIcon", "optionTimeout", "searchWrapper", "createRef", "searchBox", "onChange", "bind", "onKeyPress", "onFocus", "onBlur", "renderMultiselectContainer", "renderSelectedList", "onRemoveSelectedItem", "toggelOptionList", "onArrowKeyNavigation", "onSelectItem", "filterOptionsByInput", "removeSelectedValuesFromOptions", "isSelectedValue", "fadeOutSelection", "isDisablePreSelectedValues", "renderGroupByOptions", "renderNormalOption", "listenerCallback", "resetSelectedValues", "getSelectedItems", "getSelectedItemsCount", "hideOnClickOutside", "onCloseOptionList", "isVisible", "a", "_proto", "initialSetValue", "e", "this", "groupBy", "singleSelect", "groupByOptions", "Promise", "resolve", "_this2", "setState", "length", "componentDidMount", "componentDidUpdate", "prevProps", "t", "prevSelectedvalues", "JSON", "stringify", "focus", "componentWillUnmount", "clearTimeout", "skipCheck", "isObject", "displayValue", "l", "optionList", "filter", "item", "findIndex", "v", "indexOf", "reduce", "r", "key", "push", "create", "onSearch", "value", "onKeyPressFn", "i", "_this3", "matchValues", "search", "caseSensitiveSearch", "toLowerCase", "toString", "keyCode", "disablePreSelectedValues", "previousState", "index", "onRemove", "splice", "_this4", "closeOnSelect", "selectionLimit", "onSelect", "onSingleSelect", "_this5", "renderOptionList", "emptyRecordMsg", "loadingMessage", "o", "loading", "className", "keys", "map", "obj", "Fragment", "option", "isSelected", "_this6", "onClick", "readOnly", "checked", "optionValueDecorator", "_this7", "customCloseIcon", "_this8", "selectedValueDecorator", "src", "setTimeout", "elem", "offsetWidth", "offsetHeight", "getClientRects", "element", "getElementsByClassName", "_this9", "placeholder", "id", "name", "hidePlaceholder", "disable", "showArrow", "customArrow", "hideSelectedList", "onKeyDown", "autoComplete", "disabled", "onMouseDown", "preventDefault", "render", "Component", "defaultProps", "require_dist", "__commonJSMin", "exports", "module", "require_react_fast_compare", "__commonJSMin", "exports", "module", "hasElementType", "hasMap", "hasSet", "hasArrayBuffer", "equal", "a", "b", "length", "i", "keys", "it", "error", "require_browser", "__commonJSMin", "exports", "module", "invariant", "condition", "format", "a", "b", "c", "d", "e", "f", "error", "args", "argIndex", "require_shallowequal", "__commonJSMin", "exports", "module", "objA", "objB", "compare", "compareContext", "ret", "keysA", "keysB", "bHasOwnProperty", "idx", "key", "valueA", "valueB", "require_ms", "__commonJSMin", "exports", "module", "s", "m", "h", "d", "w", "y", "val", "options", "type", "parse", "fmtLong", "fmtShort", "str", "match", "n", "ms", "msAbs", "plural", "name", "isPlural", "require_common", "__commonJSMin", "exports", "module", "setup", "env", "createDebug", "coerce", "disable", "enable", "enabled", "destroy", "key", "selectColor", "namespace", "hash", "i", "prevTime", "enableOverride", "namespacesCache", "enabledCache", "debug", "args", "self", "curr", "ms", "index", "match", "format", "formatter", "val", "extend", "v", "delimiter", "newDebug", "namespaces", "split", "ns", "matchesTemplate", "search", "template", "searchIndex", "templateIndex", "starIndex", "matchIndex", "name", "skip", "require_browser", "__commonJSMin", "exports", "module", "formatArgs", "save", "load", "useColors", "localstorage", "warned", "m", "args", "c", "index", "lastC", "match", "namespaces", "r", "formatters", "v", "error", "require_jsonp", "__commonJSMin", "exports", "module", "debug", "jsonp", "count", "noop", "url", "opts", "fn", "prefix", "id", "param", "timeout", "enc", "target", "script", "timer", "cleanup", "cancel", "data", "require_isarray", "__commonJSMin", "exports", "module", "toString", "arr", "require_path_to_regexp", "__commonJSMin", "exports", "module", "isarray", "pathToRegexp", "parse", "compile", "tokensToFunction", "tokensToRegExp", "PATH_REGEXP", "str", "options", "tokens", "key", "index", "path", "defaultDelimiter", "res", "m", "escaped", "offset", "next", "prefix", "name", "capture", "group", "modifier", "asterisk", "partial", "repeat", "optional", "delimiter", "pattern", "prevText", "escapeGroup", "restrictBacktrack", "escapeString", "encodeURIComponentPretty", "c", "encodeAsterisk", "matches", "i", "flags", "obj", "opts", "data", "encode", "token", "value", "segment", "j", "attachKeys", "re", "keys", "regexpToRegexp", "groups", "arrayToRegexp", "parts", "regexp", "stringToRegexp", "strict", "end", "route", "endsWithDelimiter", "BLOCKS", "exports", "INLINES", "MARKS", "blocks_1", "_a", "__spreadArray", "inlines_1", "marks_1", "hasValue", "obj", "value", "_i", "key", "isInline", "node", "isBlock", "isText", "blocks", "inlines", "marks", "__exportStar", "schemaConstraints", "types", "nodeTypes", "emptyDocument", "helpers$1", "__importStar", "helpers", "appendKeyToValidElement", "element", "isValidElement", "cloneElement", "nodeListToReactComponents", "nodes", "options", "index", "nodeToReactComponent", "renderNode", "renderMark", "renderText", "preserveWhitespace", "nodeValue", "match", "lines_1", "jsxLines_1", "line", "React", "mark", "children", "defaultNodeRenderers", "defaultInline", "defaultInlineResource", "defaultMarkRenderers", "_b", "text", "type", "documentToReactComponents", "richTextDocument", "__assign", "require_resolver", "__commonJSMin", "exports", "module", "resolvers", "args", "res", "i", "createFlexResolver", "params", "p", "max", "how", "require_memoize", "__commonJSMin", "exports", "module", "resolver", "_toTrue", "_toFalse", "pSuccess", "promise", "_pass", "data", "_throw", "err", "ensurePromise", "thenable", "createCacheObj", "result", "args", "destroyCacheObj", "cache", "key", "askPrefetch", "_track_proceed", "success", "config", "trackCacheObj", "P", "_prefetch_proceed", "doPrefetch", "fn", "options", "_options", "resolve", "memoizedFn", "i", "keys", "require_promise_memoize", "__commonJSMin", "exports", "module", "AsyncDataController", "_a", "props", "__name", "now", "cachedEntry", "promise", "result", "dataListeners", "listener", "e", "error", "errorListeners", "numDeleted", "value", "key", "asyncDataController", "highEntropyUserAgentHints", "ClientBrowserFeature", "_a", "AbstractBrowserFeature", "featuresWindow", "legacy", "parseUserAgent", "brand", "parseBrowserBrand", "parseMajorVersion", "parsePlatform", "hints", "highEntropyValues", "hint", "reduceMotion", "preferDark", "preferLight", "__name", "import_self_xss_warning", "import_client", "import_react", "AsyncDataContext", "asyncDataController", "useAsyncData", "props", "controller", "_invariant", "setInvariant", "onData", "data", "invariant", "onError", "error", "__name", "Action", "import_rich_text_plain_text_renderer", "PlainRichText", "document", "jsx", "Fragment", "head", "array", "head_default", "isUndefined", "value", "isUndefined_default", "COMPARE_PARTIAL_FLAG", "COMPARE_UNORDERED_FLAG", "baseIsMatch", "object", "source", "matchData", "customizer", "index", "length", "noCustomizer", "data", "key", "objValue", "srcValue", "stack", "Stack_default", "result", "baseIsEqual_default", "baseIsMatch_default", "init_isObject", "isStrictComparable", "value", "isObject_default", "isStrictComparable_default", "getMatchData", "object", "result", "keys_default", "length", "key", "value", "isStrictComparable_default", "getMatchData_default", "matchesStrictComparable", "key", "srcValue", "object", "matchesStrictComparable_default", "baseMatches", "source", "matchData", "getMatchData_default", "matchesStrictComparable_default", "object", "baseIsMatch_default", "baseMatches_default", "get", "object", "path", "defaultValue", "result", "baseGet_default", "get_default", "baseHasIn", "object", "key", "baseHasIn_default", "hasPath", "object", "path", "hasFunc", "castPath_default", "index", "length", "result", "key", "toKey_default", "isLength_default", "isIndex_default", "isArray_default", "isArguments_default", "hasPath_default", "hasIn", "object", "path", "hasPath_default", "baseHasIn_default", "hasIn_default", "COMPARE_PARTIAL_FLAG", "COMPARE_UNORDERED_FLAG", "baseMatchesProperty", "path", "srcValue", "isKey_default", "isStrictComparable_default", "matchesStrictComparable_default", "toKey_default", "object", "objValue", "get_default", "hasIn_default", "baseIsEqual_default", "baseMatchesProperty_default", "baseProperty", "key", "object", "baseProperty_default", "basePropertyDeep", "path", "object", "baseGet_default", "basePropertyDeep_default", "property", "path", "isKey_default", "baseProperty_default", "toKey_default", "basePropertyDeep_default", "property_default", "baseIteratee", "value", "identity_default", "isArray_default", "baseMatchesProperty_default", "baseMatches_default", "property_default", "baseIteratee_default", "init_isObject", "baseSet", "object", "path", "value", "customizer", "isObject_default", "castPath_default", "index", "length", "lastIndex", "nested", "key", "toKey_default", "newValue", "objValue", "isIndex_default", "assignValue_default", "baseSet_default", "basePickBy", "object", "paths", "predicate", "index", "length", "result", "path", "value", "baseGet_default", "baseSet_default", "castPath_default", "basePickBy_default", "pickBy", "object", "predicate", "props", "arrayMap_default", "getAllKeysIn_default", "prop", "baseIteratee_default", "basePickBy_default", "value", "path", "pickBy_default", "import_react", "import_react", "ContentfulContext", "import_react", "NotImplemented", "component", "DesignSystemContext", "jsx", "CookieModalQueryDocumentType", "DevelopmentDomains", "BrowserGrapheneClient", "partition", "host", "__publicField", "client", "Graphene", "flavor", "variant", "config", "getWebConfig", "FetchNetworkHandler", "topLevelDomain", "getTopLevelDomain", "input", "pattern", "metric", "dimensions", "component", "description", "error", "acceptAllCookies", "categories", "output", "category", "categoryCookieName", "essentialOnlyCookies", "isEssential", "acceptCustomCookies", "custom", "auditForUncategorizedCookies", "cookieMappings", "currentCookies", "api", "allStaticCookieNames", "allCookieRegexPatterns", "_", "categoryCookies", "name", "regex", "uncategorizedCookies", "cookieName", "convertToCategorizedCookie", "hostName", "input", "sys", "name", "pattern", "subDomains", "path", "secure", "sameSite", "output", "createCookieMapping", "categories", "cookieMapping", "category", "cookieSet", "cookieName", "trackingCookie", "categorizedCookie", "cookiesApiPopupEligibleEndpoint", "fetchShouldDisplayModal", "response", "status", "statusText", "cookiesApiUserLocationEndpoint", "fetchUserLocation", "data", "status", "statusText", "json", "country", "region", "getCookie", "name", "api", "getAllCookies", "categories", "output", "category", "categoryCookieName", "cookieValue", "getCookieDomain", "inputCookieDomain", "hostName", "getTopLevelDomain", "removeCookie", "cookie", "cookieDomain", "currentCookies", "removedCookies", "deleteOptions", "cookieName", "api", "removeRelevantCookies", "cookieType", "cookieMappings", "relevantCookies", "removeCookiesForNonacceptedCategories", "newState", "enableCookieDeletion", "updatedCookies", "setCookie", "name", "value", "domain", "api", "setOptInCookies", "cookieDomain", "cookieStatus", "key", "import_react", "DesignAgnosticButton", "props", "buttonComponent", "DesignSystemContext", "import_react", "DesignAgnosticLocaleDropdown", "props", "localeDropdownComponent", "DesignSystemContext", "import_react", "DesignAgnosticModal", "props", "modalComponent", "DesignSystemContext", "import_react", "DesignAgnosticSection", "props", "sectionComponent", "DesignSystemContext", "import_react", "DesignAgnosticToggle", "props", "toggleComponent", "DesignSystemContext", "import_react", "BrowserErrorBoundary", "props", "partition", "hostname", "client", "BrowserGrapheneClient", "error", "children", "renderInstead", "hasError", "withErrorBoundary", "WrappedComponent", "displayName", "onError", "jsx", "import_rich_text_html_renderer", "import_react", "CookieRichText", "document", "className", "currentLocale", "ContentfulContext", "renderUri", "targetUrl", "uri", "jsx", "cx", "node", "text", "current", "CookieModalFooter", "children", "jsx", "import_react", "GhostLogo", "className", "width", "height", "backgroundType", "fillColor", "outlineColor", "jsx", "jsxs", "CookieModalHeader", "backgroundType", "supportedLocales", "onLocaleChange", "currentLocale", "ContentfulContext", "headerRef", "containerProvider", "jsxs", "jsx", "GhostLogo", "DesignAgnosticLocaleDropdown", "CookieLandingScreen", "backgroundType", "supportedLocales", "title", "content", "settingsButtonText", "acceptAllButtonText", "essentialOnlyButtonText", "onSettingsbuttonClick", "onAcceptAllButtonClick", "onAcceptEssentialButtonClick", "onLocaleChange", "jsxs", "jsx", "CookieModalHeader", "CookieRichText", "CookieModalFooter", "DesignAgnosticButton", "CookieCategories", "title", "cookieCategories", "categoriesState", "updateCategoriesState", "activeToggleLabel", "inactiveToggleLabel", "isModal", "jsxs", "Fragment", "jsx", "category", "cookieCategory", "categoryLabel", "DesignAgnosticToggle", "CookieRichText", "CookieSettingsScreen", "backgroundType", "supportedLocales", "onLocaleChange", "title", "cookieCategories", "activeToggleLabel", "inactiveToggleLabel", "categoriesState", "updateCategoriesState", "acceptAllButtonText", "essentialOnlyButtonText", "acceptSelectedButtonText", "onAcceptAllButtonClick", "onAcceptEssentialButtonClick", "onAcceptSelectedButtonClick", "jsxs", "jsx", "CookieModalHeader", "CookieCategories", "CookieModalFooter", "DesignAgnosticButton", "displayName", "CookieModal", "supportedLocales", "inputCookieDomain", "portalRoot", "backgroundType", "onLocaleChange", "onComplete", "onEvent", "onGlobalPrivacyControlSet", "globalPrivacyControl", "forceVisible", "context", "ContentfulContext", "data", "useGlobalComponentsContentfulQuery", "CookieModalQueryDocumentType", "config", "head_default", "gpcLocations", "categorySettings", "cookieCategoryMap", "enableCookieDeletion", "createCookieMapping", "cookieDomain", "getCookieDomain", "isInModalRequiredRegion", "setIsInModalRequiredRegion", "userLocation", "setUserLocation", "isDisplayed", "setIsDisplayed", "categoryState", "setCategoryState", "updateCategoryState", "key", "value", "newState", "clone_default", "isLoaded", "setIsLoaded", "activeScreen", "setActiveScreen", "grapheneClient", "setGrapheneClient", "isGlobalPrivacyControlApplied", "logUncategorizedCookies", "DevelopmentDomains", "uncategorizedCookies", "auditForUncategorizedCookies", "cookieName", "dimensions", "updateUserCookies", "cookiesToSet", "existingCookies", "changesToApply", "pickBy_default", "isUndefined_default", "setOptInCookies", "results", "removeCookiesForNonacceptedCategories", "host", "client", "BrowserGrapheneClient", "Partition", "shouldDisplayModal", "fetchShouldDisplayModal", "unknownError", "error", "parseError", "fetchUserLocation", "defaultState", "essentialOnlyCookies", "retrievedCookies", "getAllCookies", "hasPreviouslyAcceptedCookies", "gpcDimensions", "cookiesToRecreate", "acceptAllCookies", "acceptAll", "logUserAction", "label", "cookieCategories", "acceptEssential", "acceptSelected", "acceptCustomCookies", "jsxs", "DesignAgnosticModal", "jsx", "CookieLandingScreen", "CookieSettingsScreen", "wrapped", "withErrorBoundary", "CookieProvider", "children", "client", "otherProps", "isPreview", "isSSR", "currentLocale", "contentfulContext", "wrappedWithContext", "jsx", "ContentfulContext", "DesignSystemContext", "defaultClient", "ApolloClient", "globalComponentsApolloLink", "InMemoryCache", "ApolloProvider", "import_react", "displayName", "CookieSettings", "backgroundType", "inputCookieDomain", "onSubmit", "onEvent", "context", "ContentfulContext", "data", "useGlobalComponentsContentfulQuery", "CookieModalQueryDocumentType", "config", "head_default", "categorySettings", "cookieCategoryMap", "enableCookieDeletion", "createCookieMapping", "cookieDomain", "getCookieDomain", "userLocation", "setUserLocation", "categoryState", "setCategoryState", "updateCategoryState", "key", "value", "newState", "clone_default", "setSaveButtonState", "saveButtonState", "updateSaveButton", "grapheneClient", "setGrapheneClient", "updateUserCookies", "cookiesToSet", "setOptInCookies", "results", "removeCookiesForNonacceptedCategories", "cookieName", "dimensions", "host", "client", "BrowserGrapheneClient", "Partition", "retrieveUserCookies", "retrievedCookies", "getAllCookies", "interval", "fetchUserLocation", "unknownError", "error", "parseError", "acceptSelected", "acceptCustomCookies", "logUserAction", "label", "cookieCategories", "buttonProps", "jsxs", "DesignAgnosticSection", "jsx", "CookieCategories", "DesignAgnosticButton", "wrapped", "withErrorBoundary", "import_react", "Alignment", "VerticalAlignment", "VideoPanelAlignment", "BackgroundStyle", "localeFontFallbackPlaceholder", "localeFallbackFontMap", "fontTokensWithPlaceholders", "MobileHeading", "css", "Heading", "mobileMediaQuery", "FontParagraph", "noHorizontalScrollbarsCss", "css", "getTextAlignValue", "alignment", "Alignment", "getFlexAlignValue", "allAlignments", "textAlignmentCss", "css", "alignItemsCss", "justifyItemsCss", "justifyContentCss", "justifyContentMobileCss", "mobileMediaQuery", "alignmentCss", "mobileAlignmentCss", "import_react", "BlockBackgroundColorContext", "formatDateToDatetime", "date", "replaceFontFallbackPlaceholder", "fontFamilyTokenValue", "fallbackFont", "localeFontFallbackPlaceholder", "isFontRampToken", "tokenName", "motifFontRampVariables", "buildLocalizedFontRampTokens", "baseTokens", "localizedTokens", "originalValue", "getMotifWithFontFallbacks", "locale", "baseMotif", "fontTokensToLocalize", "localeFallbackFontMap", "localizedFontRampTokens", "mergeMotifs", "getBackgroundClassName", "backgroundColor", "getMotifSchemeForLegacyBackgroundColor", "isAbsoluteUrl", "appendTrackingParameters", "href", "parameters", "url", "key", "value", "import_react", "useWindowFocused", "enabled", "isFocused", "setIsFocused", "handleBlur", "handleFocus", "import_react", "AccordionContext", "accordionCss", "css", "m", "titleCss", "nonMobileMediaQuery", "mobileMediaQuery", "Accordion", "children", "multipleOpen", "title", "titleDataset", "useMotifStyles", "openIds", "setOpenIds", "jsx", "AccordionContext", "jsxs", "cx", "accordionCss", "titleCss", "dataSetToAttributes", "import_react", "import_react", "defaultUseToggleStateInit", "noop", "useToggleState", "init", "initialValue", "onToggle", "transitionDurationMs", "state", "setState", "setStateAndNotify", "newState", "oldState", "transitionTimeout", "turnOn", "turnOff", "target", "import_react", "fadeInKeyframes", "keyframes", "fadeOutKeyframes", "animationPropsToCssProp", "props", "key", "value", "opacityFadeInCss", "animationProps", "css", "opacityFadeOutCss", "androidFastOutSlowInCurve", "androidLinearOutSlowIn", "slideUpCss", "animationProps", "css", "animationPropsToCssProp", "slideDownCss", "detailsSummaryAnimationDurationCssVar", "detailsCss", "css", "detailsAnimationCss", "fadeInKeyframes", "fadeOutKeyframes", "chevronCss", "summaryCss", "DetailsSummary", "showChevron", "chevronProps", "onToggle", "summary", "summaryProps", "children", "detailsClassName", "fadeInAnimation", "transitionDurationMs", "forceOpen", "parentDetailsRef", "summaryRef", "disableScrollToOnOpen", "forceOpenAttribute", "detailsProps", "parentHasStateControl", "isNullish", "useMotifStyles", "scrollTimeoutRef", "internalDetailsRef", "setDetailRefs", "el", "isOpenState", "toggleIsOpenInternal", "useToggleState", "toggleWithAnimation", "event", "isNativeOpen", "summaryClassName", "dataset", "otherSummaryProps", "getTitle", "jsxs", "cx", "detailsCss", "detailsAnimationCss", "detailsSummaryAnimationDurationCssVar", "summaryCss", "dataSetToAttributes", "jsx", "Icon", "chevronCss", "accordionItemCss", "css", "m", "summaryCss", "MobileHeading", "itemChevronCss", "duration", "easing", "AccordionItem", "id", "title", "children", "titleDataset", "className", "summaryClassName", "onToggleProp", "multipleOpen", "openIds", "setOpenIds", "AccordionContext", "detailsRef", "summaryRef", "animation", "isClosing", "isExpanding", "isOpen", "shrink", "startHeight", "endHeight", "onAnimationFinish", "expand", "open", "onToggle", "toggle", "o", "jsx", "DetailsSummary", "itemChevronCss", "m", "cx", "accordionItemCss", "summaryCss", "aiLocalizationBannerCss", "css", "m", "mobileMediaQuery", "aiLocalizationBannerContentCss", "maxWidth", "aiLocalizationBannerTitleCss", "p2Css", "aiLocalizationBannerDescriptionCss", "p3Css", "AiLocalizationBanner", "title", "description", "useMotifStyles", "jsx", "cx", "aiLocalizationBannerCss", "jsxs", "aiLocalizationBannerContentCss", "aiLocalizationBannerTitleCss", "aiLocalizationBannerDescriptionCss", "import_react", "canUseTouchEvent", "useDisableScrollOutside", "allowScrollParent", "inTransition", "shouldAllowScrollEvent", "previousScrollX", "previousScrollY", "lastTouchStartY", "captureTouchStart", "event", "preventScrollEvent", "scrollYDirection", "current", "isInAllowedArea", "hasRoomToScroll", "scrollRoom", "canScrollUp", "canScrollDown", "activeListenerOptions", "import_react", "useOnScreen", "ref", "isIntersecting", "setIntersecting", "observer", "entry", "import_react", "import_react", "combineRefs", "innerRef", "fwdRef", "element", "ref", "import_react", "defaultStickerInsetPx", "stickerCss", "css", "largeDesktopMediaQuery", "stickerImgCss", "stickerMediumCss", "stickerLargeCss", "stickerTopStartCss", "stickerTopEndCss", "stickerBottomStartCss", "stickerBottomEndCss", "stickerRotationNegative15DegreesCss", "stickerRotationPositive15DegreesCss", "stickersDesktopOnlyCss", "mobileMediaQuery", "StickerPosition", "StickerRotation", "StickerSize", "Sticker", "className", "imgSrcs", "position", "rotation", "size", "insetPx", "defaultStickerInsetPx", "jsx", "Picture", "cx", "stickerCss", "stickerMediumCss", "stickerLargeCss", "stickerTopStartCss", "stickerTopEndCss", "stickerBottomStartCss", "stickerBottomEndCss", "stickerRotationNegative15DegreesCss", "stickerRotationPositive15DegreesCss", "stickerImgCss", "pictureContainerCss", "css", "PictureWithStickers", "altText", "className", "style", "defaultSrc", "imgClassName", "imgSrcs", "height", "width", "fetchPriority", "dataset", "isDraggable", "handleSafariSourceSets", "stickers", "hasNoSources", "pictureContext", "PictureContext", "jsxs", "cx", "pictureContainerCss", "imgSrc", "index", "jsx", "addSrcFactory", "dataSetToAttributes", "props", "i", "Sticker", "isVideoPlaying", "video", "import_react", "import_react", "TabsContext", "videoContainerCss", "css", "videoCss", "objectFitCoverCss", "objectFitContainCss", "getObjectFit", "isBackgroundVideo", "Video", "props", "ref", "source", "mobileSource", "sourceType", "mobileSourceType", "posterSource", "altText", "className", "style", "muted", "autoPlay", "loop", "controls", "playsInline", "onPlay", "onPause", "captionsSource", "isBackgroundVideo", "onTimeUpdate", "dataset", "videoRef", "getLowEntropyHints", "BrowserFeaturesContext", "clientHints", "currentTrack", "track", "addOnTabChangeListener", "removeOnTabChangeListener", "TabsContext", "onTabChange", "isVideoPlaying", "objectFitStyle", "getObjectFit", "preload", "isSafari", "browser", "videoSource", "mobileVideoSource", "jsxs", "cx", "videoCss", "combineRefs", "dataSetToAttributes", "jsx", "import_react", "VideoWithStickers", "props", "ref", "source", "mobileSource", "sourceType", "mobileSourceType", "posterSource", "altText", "className", "style", "muted", "autoPlay", "loop", "controls", "playsInline", "onPlay", "onPause", "captionsSource", "isBackgroundVideo", "onTimeUpdate", "dataset", "videoClassName", "stickers", "videoRef", "getLowEntropyHints", "BrowserFeaturesContext", "clientHints", "currentTrack", "track", "addOnTabChangeListener", "removeOnTabChangeListener", "TabsContext", "onTabChange", "isVideoPlaying", "objectFitStyle", "getObjectFit", "preload", "isSafari", "browser", "videoSource", "mobileVideoSource", "jsxs", "cx", "videoContainerCss", "videoCss", "combineRefs", "dataSetToAttributes", "jsx", "i", "Sticker", "LaptopWrapper", "children", "className", "maxHeight", "styleCss", "css", "jsx", "cx", "jsxs", "baseImageCss", "css", "noWrapImageCss", "m", "wrappedImageCss", "wrappedVideoCss", "noWrapVideoCss", "wrappedBackgroundVideoCss", "noWrapBackgroundVideoCss", "phoneVideoCss", "mobileMediaQuery", "smallMobileMediaQuery", "divStyleCss", "macSafariCss", "phoneContainerCss", "shadowContainerCss", "mediaContainerCss", "wrappedPictureContainerCss", "phoneWrapperCss", "css", "phoneWrapperBgCss", "PhoneWrapper", "children", "jsx", "cx", "mediaWrapperClassName", "Media", "props", "ref", "className", "altText", "imageSource", "maxHeight", "maxWidth", "videoSource", "mobileVideoSource", "sourceType", "wrap", "Device", "showVideoControls", "autoplay", "posterSource", "onPlay", "onPause", "captionsSource", "isBackgroundVideo", "onTimeUpdate", "imgSrcs", "dataset", "height", "width", "isDraggable", "useMotifStyles", "unwrapped", "getLowEntropyHints", "BrowserFeaturesContext", "mediaRef", "clientHints", "applyMacSafariStyles", "browser", "isDevice", "sizeStyles", "imgClassName", "cx", "wrappedImageCss", "noWrapImageCss", "phoneContainerCss", "shadowContainerCss", "jsx", "Picture", "wrappedVideo2Css", "wrappedBackgroundVideoCss", "wrappedVideoCss", "noWrapVideo2Css", "noWrapBackgroundVideoCss", "noWrapVideoCss", "videoClassName", "phoneVideoCss", "macSafariCss", "Video", "combineRefs", "divStyleCss", "LaptopWrapper", "PhoneWrapper", "mediaContainerCss", "import_react", "mediaWrapperClassName", "MediaWithStickers", "props", "ref", "className", "mediaClassName", "altText", "imageSource", "maxHeight", "maxWidth", "videoSource", "mobileVideoSource", "sourceType", "wrap", "Device", "showVideoControls", "autoplay", "posterSource", "onPlay", "onPause", "captionsSource", "isBackgroundVideo", "onTimeUpdate", "imgSrcs", "dataset", "height", "width", "isDraggable", "stickers", "useMotifStyles", "unwrapped", "getLowEntropyHints", "BrowserFeaturesContext", "mediaRef", "clientHints", "applyMacSafariStyles", "browser", "isDevice", "sizeStyles", "imgClassName", "cx", "wrappedImageCss", "noWrapImageCss", "phoneContainerCss", "shadowContainerCss", "jsx", "PictureWithStickers", "wrappedPictureContainerCss", "wrappedVideo2Css", "wrappedBackgroundVideoCss", "wrappedVideoCss", "noWrapVideo2Css", "noWrapBackgroundVideoCss", "noWrapVideoCss", "videoClassName", "phoneVideoCss", "macSafariCss", "VideoWithStickers", "combineRefs", "divStyleCss", "LaptopWrapper", "PhoneWrapper", "mediaContainerCss", "import_react", "import_react", "extraLargeDesktopMediaQuery", "mediaQueryForRange", "maxWidth", "layoutCss", "css", "layoutReverseCss", "accordionContainerCss", "imagesContainerCss", "accordionItemCss", "accordionItemDetailCss", "accordionItemDetailContentCss", "accordionItemDetailContentActiveCss", "accordionItemSummaryCss", "progressIndicatorCss", "progressIndicatorBarCss", "m", "imageAspectRatioWrapperCss", "imageCss", "imageActiveCss", "ProgressIndicator", "durationMs", "isActive", "isPaused", "onAnimationComplete", "barRef", "animation", "jsx", "progressIndicatorCss", "progressIndicatorBarCss", "animationOptions", "AccordionItem", "isOpen", "isPaused", "progressIndicatorDurationMs", "title", "body", "onToggle", "onMouseOver", "onMouseLeave", "onAnimationComplete", "detailsRef", "summaryRef", "animation", "isClosing", "setIsClosing", "isExpanding", "setIsExpanding", "shrink", "startHeight", "endHeight", "onAnimationFinish", "expand", "open", "useBrowserLayoutEffect", "jsxs", "accordionItemCss", "jsx", "ProgressIndicator", "DetailsSummary", "accordionItemDetailCss", "accordionItemSummaryCss", "cx", "accordionItemDetailContentCss", "accordionItemDetailContentActiveCss", "Accordion", "items", "mediaDirection", "autoPlaySpeedMs", "onItemSelect", "allowAnimation", "accordionRef", "isOnScreen", "useOnScreen", "activeItem", "setActiveItem", "isPaused", "setIsPaused", "handleOnAnimationComplete", "prevActiveItem", "jsxs", "cx", "layoutCss", "layoutReverseCss", "jsx", "accordionContainerCss", "item", "i", "AccordionItem", "imagesContainerCss", "imageAspectRatioWrapperCss", "Media", "imageCss", "imageActiveCss", "import_react", "import_react", "minHeightVariable", "progressIndicatorWidth", "accordionItemAlignStartCss", "css", "accordionItemAlignCenterCss", "accordionItemAlignEndCss", "hiddenAccordionItemCss", "fadeInAnimationCss", "accordionItemContainerCss", "m", "mediaContainerCss", "imageCss", "accordionControlsContainerCss", "navDotsContainerCss", "progressIndicatorContainerCss", "progressIndicatorCss", "progressIndicatorBarCss", "dotContainerCss", "dotCss", "navButtonCss", "contentContainerCss", "contentTitleCss", "contentBodyCss", "ProgressIndicatorMobile", "durationMs", "isActive", "isPaused", "onAnimationComplete", "barRef", "animation", "progressIndicatorWidth", "jsx", "progressIndicatorCss", "progressIndicatorBarCss", "AnimatedAccordionControls", "props", "currentItemIndex", "durationMs", "isActive", "isPaused", "itemsCount", "onAnimationComplete", "onPause", "jsxs", "accordionControlsContainerCss", "jsx", "navDotsContainerCss", "_", "index", "progressIndicatorContainerCss", "ProgressIndicatorMobile", "dotContainerCss", "dotCss", "navButtonCss", "PlayFilled_default", "Pause_default", "AnimatedAccordionMobile", "props", "items", "textAlignment", "onItemSelect", "allowAnimation", "itemsRefs", "activeItem", "setActiveItem", "isPaused", "setIsPaused", "touchStartX", "setTouchStartX", "isSwipping", "setIsSwipping", "swipeOffset", "setSwipeOffset", "maxHeight", "setMaxHeight", "isMaxHeightSet", "handleOnAnimationComplete", "prevActiveItem", "handleTouchStart", "event", "handleTouchMove", "deltaX", "handleTouchEnd", "previousAccordionItem", "nextAccordionItem", "next", "prev", "heights", "item", "maxHeightVariableStyles", "minHeightVariable", "jsx", "itemIndex", "jsxs", "cx", "accordionItemContainerCss", "accordionItemAlignStartCss", "Alignment", "accordionItemAlignCenterCss", "accordionItemAlignEndCss", "hiddenAccordionItemCss", "element", "mediaContainerCss", "fadeInAnimationCss", "Media", "imageCss", "AnimatedAccordionControls", "contentContainerCss", "contentTitleCss", "contentBodyCss", "AnimatedAccordion", "props", "useMotifStyles", "isMobile", "useMediaMode", "MediaMode", "mediaDirection", "autoPlaySpeed", "textAlignmentMobile", "Alignment", "items", "onItemSelect", "jsx", "AnimatedAccordionMobile", "Accordion", "import_react", "staticObserver", "getObserver", "entries", "entry", "target", "getAnimationCssProperties", "animation", "animationName", "delay", "direction", "duration", "fillMode", "iterationCount", "playState", "timingFunction", "transformOrigin", "useAnimations", "ref", "observer", "toObserve", "targetElement", "authorBylineContainerCss", "css", "authorBylineAuthorCss", "AuthorByline", "author", "date", "jsxs", "authorBylineContainerCss", "jsx", "import_react", "import_react", "import_react", "tableWithHeadersClassName", "columnCountVariable", "tableWrapperCss", "css", "m", "primitiveElementClassNames", "tableCss", "overflowOnMobileCss", "mobileMediaQuery", "collapsedMobileTableCss", "tableCellCss", "tableHeaderCss", "tableRowCss", "PrimitiveTableCell", "children", "jsx", "tableCellCss", "PrimitiveTableHeader", "tableHeaderCss", "PrimitiveTableRow", "tableRowCss", "PrimitiveTable", "children", "collapseMobileTable", "useMotifStyles", "firstTableRow", "child", "PrimitiveTableRow", "columnCount", "PrimitiveTableHeader", "PrimitiveTableCell", "hasTableHeaders", "columnCountVariableStyles", "columnCountVariable", "jsx", "cx", "tableWrapperCss", "tableCss", "collapsedMobileTableCss", "tableWithHeadersClassName", "overflowOnMobileCss", "CollapseTableMobile", "NoCollapseTableMobile", "containerCss", "css", "m", "IconButton", "props", "ref", "url", "iconName", "className", "iconClassName", "onClick", "disabled", "size", "passThrough", "useMotifStyles", "Anchor", "PrimitivesContext", "containerClassName", "cx", "containerCss", "icon", "jsx", "Icon", "m", "onActivate", "autoCompleteMaxWidthPx", "autoCompleteContainerCss", "css", "m", "hiddenSuggestionsCss", "shortAutoCompleteCss", "inputCss", "nonMobileMediaQuery", "resultsContainerCss", "noResults", "BackgroundColor", "resultsContainerWithResultsCss", "resultsContainerNoResultsCss", "autocompleteListItemCss", "searchIconCss", "cancelButtonCss", "searchButtonCss", "rowCss", "seeResultsCss", "selectedStyle", "m", "AutocompleteSuggestion", "term", "onClick", "setSelectedIndex", "isActive", "listItemStyles", "resultAccessor", "loadingAutocompleteTerms", "loadingMessage", "ref", "jsx", "autocompleteListItemCss", "cx", "e", "AutoComplete", "onSelect", "onChange", "onKeyDown", "onSeeResults", "onCollapseChange", "autocompleteResults", "placeholder", "cancelMessage", "seeResultsMessage", "noResultsMessage", "initialText", "containerStyles", "inputStyles", "collapsible", "shortBar", "disabled", "hideSuggestions", "hideCancelButton", "useMotifStyles", "currentSearchTerm", "setCurrentSearchTerm", "collapsedState", "setCollapsedState", "showSuggestions", "setShowSuggestions", "selectedIndex", "inputEl", "setShowSearchSuggestions", "show", "collapseChange", "state", "onInputChange", "onCancel", "onSeeResultsHandler", "handleKeyDown", "event", "autocompleteLength", "newSelectedIndex", "renderSuggestions", "resultsContainerWithResultsCss", "resultsContainerNoResultsCss", "result", "index", "IconButton", "searchButtonCss", "showSeeResults", "jsxs", "autoCompleteContainerCss", "hiddenSuggestionsCss", "shortAutoCompleteCss", "rowCss", "Icon", "searchIconCss", "inputCss", "cancelButtonCss", "seeResultsCss", "import_react", "globalHeaderBannerCss", "css", "m", "mobileMediaQuery", "globalHeaderBannerContentContainerCss", "globalHeaderBannerButtonDivCss", "globalHeaderBannerButtonStylesCss", "Banner", "motifScheme", "backgroundColor", "className", "children", "contentClassName", "dataset", "useMotifStyles", "show", "setShow", "motifSchemeWithFallback", "getBackgroundClassName", "jsxs", "cx", "globalHeaderBannerCss", "dataSetToAttributes", "jsx", "globalHeaderBannerContentContainerCss", "globalHeaderBannerButtonDivCss", "globalHeaderBannerButtonStylesCss", "Cross_default", "import_react", "styleCss", "css", "maxWidth", "styleReducedCss", "nonMobileMediaQuery", "reducedWidth", "styleNarrowCss", "narrowWidth", "BlockBoundary", "children", "className", "isNarrow", "widthStyle", "passThroughProps", "useMotifStyles", "cx", "jsx", "import_react", "import_react", "GlobalHeaderContext", "childrenMarginCss", "outerMargin", "innerMargin", "css", "globalHeaderCss", "m", "ZIndex", "smallDesktopLessMarginsPadding", "desktopLessMarginsPadding", "globalHeaderLessMarginsCss", "smallDesktopMediaQuery", "globalHeaderDesktopCss", "globalHeaderMobileCss", "globalHeaderDesktopNavButtonCss", "globalHeaderMobileNavButtonCss", "globalHeaderMobileBottomBorderCss", "globalHeaderCtaDesktopCss", "globalHeaderButtonCss", "globalHeaderCtaMobileCss", "globalHeaderNavButtonCss", "globalHeaderDesktopContainerCss", "extraLargeDesktopWidth", "mobileMediaQuery", "globalHeaderMobileBarCss", "globalHeaderSiteNameCss", "globalHeaderUnderlineCss", "globalHeaderDesktopRelativeParentCss", "alignmentToCss", "alignment", "GlobalHeaderDesktop", "logo", "siteName", "className", "cta", "endChildrenClassName", "localNavDesktop", "toggleExpanded", "showNavScreen", "showGlobalLinks", "navItemAlignment", "buttonAriaLabel", "dataset", "lessMargins", "addBottomBorder", "customIcon", "headerClassName", "jsx", "cx", "globalHeaderDesktopCss", "globalHeaderSiteNameCss", "dataSetToAttributes", "jsxs", "globalHeaderDesktopRelativeParentCss", "globalHeaderDesktopContainerCss", "globalHeaderLessMarginsCss", "IconButton", "globalNavMenuButtonClassName", "globalHeaderDesktopNavButtonCss", "testIds", "globalHeaderCtaDesktopCss", "globalHeaderUnderlineCss", "import_react", "dotsGroupContainerCss", "css", "dotContainerCss", "dotCss", "m", "dotTopLeftCss", "dotBottomLeftCss", "dotTopRightCss", "dotBottomRightCss", "GlobalHeaderAnimatedIcon", "screenState", "GlobalHeaderContext", "jsxs", "cx", "dotsGroupContainerCss", "jsx", "dotContainerCss", "dotCss", "dotTopLeftCss", "dotTopRightCss", "dotBottomLeftCss", "dotBottomRightCss", "testIds", "GlobalHeaderMobile", "logo", "cta", "className", "isExpanded", "toggleExpanded", "showNavScreen", "endChildrenClassName", "buttonAriaLabel", "dataset", "addBottomBorder", "jsxs", "cx", "globalHeaderMobileCss", "globalHeaderMobileBottomBorderCss", "dataSetToAttributes", "jsx", "globalHeaderMobileNavButtonCss", "testIds", "GlobalHeaderAnimatedIcon", "globalHeaderCtaMobileCss", "defaultGlobalNavMobileGroupKey", "GlobalHeader", "motifScheme", "backgroundColor", "className", "defaultGroupKey", "children", "displayed", "onToggleExpanded", "stayOpenInvariant", "trackingSiteName", "showNavScreen", "dataset", "isUrlCurrent", "buttonAriaLabel", "otherHeaderProps", "useMotifStyles", "mode", "useMediaMode", "isExpandedState", "toggleExpanded", "useToggleState", "newState", "_oldState", "groupKey", "setGroupKey", "MediaMode", "isVisible", "classNameWithTheme", "cx", "getBackgroundClassName", "testIds", "isExpanded", "GlobalHeaderImpl", "GlobalHeaderMobile", "GlobalHeaderDesktop", "jsxs", "GlobalHeaderContext", "jsx", "import_react", "globalNavItemCss", "css", "m", "globalNavItemWithChildrenCss", "externalIconCss", "globalNavItemChevronCss", "globalNavItemActiveCss", "childrenCountCssVarName", "animateInDetailsCss", "css", "nextLevelLineHeightCssVar", "androidLinearOutSlowIn", "itemListCss", "nonMobileMediaQuery", "globalNavGroupOpenCss", "m", "globalNavGroupActiveCss", "globalNavGroupCss", "globalNavOuterMargin", "globalNavNegativeOuterMargin", "detailsHeightAnimationDesktopCss", "GlobalNavGroup", "navGroupKey", "title", "mobileHighlight", "isActive", "children", "groupKey", "setGroupKey", "mode", "screenState", "GlobalHeaderContext", "isOpen", "setIsOpen", "newIsOpen", "timeoutRef", "wrappedChildren", "jsx", "itemListCss", "child", "index", "setGroupKeyOnToggleOn", "target", "isMobile", "MediaMode", "jsxs", "DetailsSummary", "globalNavItemChevronCss", "cx", "globalNavLevelClassName", "detailsHeightAnimationDesktopCss", "globalNavGroupCss", "globalNavGroupOpenCss", "globalNavGroupActiveCss", "childrenCountCssVarName", "import_react", "highlightTextClassName", "highlightTextTitleClassName", "highlightTextBodyClassName", "highlightMediaMobileClassName", "highlightMediaDesktopClassName", "highlightCtaClassName", "highlightMediaCss", "className", "css", "m", "highlightDesktopCss", "highlightCardCss", "highlightCardOuterMargin", "highlightCtaMargin", "highlightCardWideDesktopCss", "highlightCardNarrowDesktopCss", "highlightCardBreakDesktopWidth", "highlightCardDesktopCss", "highlightCardMobileCss", "highlightSpace", "reelDesktopCss", "androidFastOutSlowInCurve", "GlobalNavHighlightDesktop", "background", "callToAction", "cardTitleV2", "cardBodyV2", "cardTitle", "cardBody", "jsxs", "highlightDesktopCss", "jsx", "highlightMediaDesktopClassName", "cx", "getBackgroundClassName", "BackgroundColor", "highlightCardDesktopCss", "highlightTextClassName", "highlightTextTitleClassName", "highlightTextBodyClassName", "highlightCtaClassName", "GlobalNavHighlight", "props", "GlobalHeaderContext", "MediaMode", "jsx", "GlobalNavHighlightDesktop", "import_react", "GlobalNavHighlightReel", "className", "highlights", "headerContext", "GlobalHeaderContext", "isMobile", "MediaMode", "selectedIndex", "setSelectedIndex", "nonNullHighlights", "_groupKey", "highlight", "index", "selectedCss", "css", "jsx", "cx", "reelDesktopCss", "import_react", "isExternal", "link", "isAbsoluteUrl", "defaultTrackingParameters", "GlobalNavItemWithChildren", "title", "children", "isSelected", "dataset", "onToggle", "handleToggle", "jsx", "DetailsSummary", "cx", "globalNavItemChevronCss", "globalNavLevelClassName", "globalNavItemWithChildrenCss", "globalNavItemActiveCss", "itemListCss", "child", "GlobalNavItem", "href", "showExternalIcon", "onClick", "addTrackingParams", "Anchor", "PrimitivesContext", "toggleExpanded", "trackingSiteName", "GlobalHeaderContext", "trackingParameters", "snake", "trackedHref", "appendTrackingParameters", "isLinkExternal", "isExternal", "onLinkActivate", "event", "jsxs", "globalNavItemCss", "dataSetToAttributes", "Icon", "externalIconCss", "import_react", "scrollbarCss", "backgroundColor", "thumbColor", "trackWidth", "css", "m", "Transparent", "screenStateClassName", "state", "globalNavCss", "css", "m", "ZIndex", "levelSelector", "level", "globalNavLevelClassName", "globalNavDesktopFontCss", "nextLevelLineHeightCssVar", "globalNavMobileFontCss", "leftNavWidth", "globalNavHighlightClassName", "globalNavNoScrollClassName", "globalNavLeftNavClassName", "globalNavDesktopCss", "slideUpCss", "slideDownCss", "globalNavInnerDesktopCss", "extraLargeDesktopWidth", "scrollbarCss", "globalNavOuterMargin", "globalNavMobileCss", "opacityFadeInCss", "opacityFadeOutCss", "globalNavMobileLocalNavClassName", "globalLinksClassName", "globalNavMobileHeadingCss", "import_react", "GlobalNavScreenDesktop", "className", "onNavClose", "highlight", "globalNav", "motifScheme", "backgroundColor", "screenState", "dataset", "leftNavRef", "ref", "testIds", "useDisableScrollOutside", "jsx", "cx", "globalNavDesktopCss", "getBackgroundClassName", "dataSetToAttributes", "jsxs", "globalNavInnerDesktopCss", "globalNavLeftNavClassName", "IconButton", "globalHeaderDesktopNavButtonCss", "globalNavHighlightClassName", "import_react", "GlobalNavScreenMobile", "className", "localNavMobile", "localNavMobileFooter", "globalNav", "globalNavHeading", "motifScheme", "backgroundColor", "showGlobalLinks", "dataset", "navScreenRef", "screenState", "GlobalHeaderContext", "inTransition", "useDisableScrollOutside", "LocalNavSection", "jsxs", "globalNavMobileLocalNavClassName", "Fragment", "jsx", "testIds", "cx", "globalNavMobileCss", "getBackgroundClassName", "dataSetToAttributes", "globalLinksClassName", "globalNavMobileHeadingCss", "GlobalNavScreen", "props", "screenState", "mode", "GlobalHeaderContext", "MediaMode", "jsx", "GlobalNavScreenMobile", "screenStateClassName", "GlobalNavScreenDesktop", "blockScrollMarginCss", "css", "backgroundContainerCss", "css", "backgroundCss", "curtainCss", "m", "ZIndex", "blockBackgroundColorCss", "blockCss", "boundaryCss", "mobileMediaQuery", "denseLayoutBoundaryCss", "nonMobileMediaQuery", "headerCss", "eyebrowCss", "titleCss", "subtitleCss", "callsToActionWrapperCss", "contentContainerCss", "contentContainerStyle1ColumnCss", "denseLayoutContentContainerCss", "contentContainerStyle2ColumnCss", "mobilePageContainerQuery", "contentContainerStyle3ColumnCss", "nonTwoColumnCollapseMediaQuery", "twoColumnCollapseMediaQuery", "nonTwoColumnCollapsePageContainerQuery", "twoColumnCollapsePageContainerQuery", "nonMobilePageContainerQuery", "contentContainerStyle4ColumnCss", "threeColumnCollapseMediaQuery", "largeDesktopPageContainerQuery", "fullHeightBlockCss", "Block", "showCurtain", "backgroundVideoSource", "backgroundPosterSource", "mobileBackgroundVideoSource", "backgroundImageSources", "backgroundImageAltText", "callsToAction", "children", "anchorId", "maxColumns", "motifScheme", "backgroundColor", "eyebrow", "title", "subtitle", "titleAlignment", "Alignment", "titleAlignmentMobile", "widthStyle", "fullHeight", "className", "style", "eyebrowDataset", "titleDataset", "subtitleDataset", "preChildren", "postChildren", "backgroundMediaStickers", "denseLayout", "useMotifStyles", "hasHeader", "numChildren", "callsToActionCount", "effectiveMaxColumns", "backgroundMediaStickersLarge", "sticker", "StickerSize", "stickersDesktopOnlyCss", "jsxs", "cx", "getBackgroundClassName", "blockCss", "blockScrollMarginCss", "fullHeightBlockCss", "blockBackgroundColorCss", "jsx", "curtainCss", "PictureWithStickers", "backgroundContainerCss", "backgroundCss", "VideoWithStickers", "BlockBackgroundColorContext", "BlockBoundary", "boundaryCss", "denseLayoutBoundaryCss", "headerCss", "alignmentCss", "mobileAlignmentCss", "eyebrowCss", "dataSetToAttributes", "titleCss", "p1Css", "subtitleCss", "contentContainerCss", "contentContainerStyle1ColumnCss", "contentContainerStyle2ColumnCss", "contentContainerStyle3ColumnCss", "contentContainerStyle4ColumnCss", "denseLayoutContentContainerCss", "callsToActionWrapperCss", "linkBeforeCss", "m", "desktopSideNavWidthPx", "wrapperCss", "css", "ZIndex", "nonMobileMediaQuery", "mobileMediaQuery", "wrapperShadowCss", "containerCss", "navigatorItemButtonCss", "navigatorItemButtonOpenCss", "navigatorItemButtonActiveCss", "linkCss", "caratCss", "activeLinkCss", "sectionButtonCss", "sideNavIconCss", "sideNavMobileIconCss", "outerContainerCss", "css", "innerContainerCss", "pageGutterCss", "m", "pageBgColorCss", "pageTransparentBgCss", "fixedBackgroundImageCss", "css", "backgroundMediaCss", "fixedBackgroundMediaCss", "sideNavigationWrapperCss", "White", "mobileMediaQuery", "sideNavigationWrapperBlocksCss", "maxWidth", "desktopSideNavWidthPx", "breakHeightCss", "css", "m", "mobileMediaQuery", "breakHalfHeightCss", "breakCss", "ZIndex", "patternCss", "mediaCss", "topOverlaidCss", "bottomOverlaidCss", "topHalfOverlaidCss", "bottomHalfOverlaidCss", "spacerWrapperCss", "spacerHeightFullCss", "spacerHeightHalfCss", "backgroundColorCss", "HeadBreak", "props", "topColor", "bottomColor", "shadowColor", "shadowOpacity", "rest", "jsxs", "jsx", "HeadFlippedBreak", "props", "topColor", "bottomColor", "shadowColor", "shadowOpacity", "rest", "jsxs", "jsx", "lineBreakContainerCss", "css", "m", "nonMobileMediaQuery", "smallDesktopMediaQuery", "lineBreakCss", "LineBreak", "jsx", "SkirtBreak", "props", "topColor", "bottomColor", "shadowColor", "shadowOpacity", "rest", "jsxs", "jsx", "Skirt2Break", "props", "topColor", "bottomColor", "shadowColor", "shadowOpacity", "rest", "jsxs", "jsx", "Skirt3Break", "props", "topColor", "bottomColor", "shadowColor", "shadowOpacity", "rest", "jsxs", "jsx", "StraightBreak", "props", "topColor", "bottomColor", "shadowColor", "shadowOpacity", "rest", "jsxs", "jsx", "getBreakOverlayType", "template", "isTopTransparent", "isBottomTransparent", "isOverlaid", "Template", "isTransparentTopOnly", "isTransparentBottomOnly", "Break", "template", "imgSrcs", "topColor", "bottomColor", "isOverlaid", "useMotifStyles", "hasCustomMedia", "isTopTransparent", "isBottomTransparent", "topScheme", "getMotifSchemeForLegacyBackgroundColor", "bottomScheme", "topValue", "getMotifVariableValue", "bottomValue", "shadowColor", "m", "shadowOpacity", "pattern", "jsx", "StraightBreak", "patternCss", "Template", "HeadBreak", "HeadFlippedBreak", "LineBreak", "SkirtBreak", "Skirt2Break", "Skirt3Break", "breakOverlayType", "getBreakOverlayType", "jsxs", "cx", "breakCss", "topOverlaidCss", "bottomOverlaidCss", "topHalfOverlaidCss", "bottomHalfOverlaidCss", "backgroundColorCss", "Media", "mediaCss", "BreakSpacer", "type", "location", "useMotifStyles", "isFullHeight", "isHalfHeight", "jsx", "cx", "spacerWrapperCss", "spacerHeightFullCss", "spacerHeightHalfCss", "import_react", "editorialGalleryCardMediaClassName", "editorialGalleryCardClassName", "editorialGalleryCardContainerCss", "css", "m", "largeDesktopMediaQuery", "editorialGalleryCardLayoutCss", "nonMobileMediaQuery", "editorialGalleryCardContentCss", "editorialGalleryCardMetadataCss", "editorialGalleryCardPreviewCss", "editorialGalleryCardAnnotationCss", "editorialGalleryCardMediaContainerCss", "editorialGalleryCardMediaCss", "editorialGalleryCardBodyCss", "editorialGalleryCardTextGroupCss", "editorialGalleryCardTitleCss", "h5Css", "editorialGalleryCardDescriptionCss", "p2Css", "editorialGalleryCardButtonCss", "snapBrandBackgroundCss", "snapchatBrandBackgroundCss", "lensBrandBackgroundCss", "spectaclesBrandBackgroundCss", "noBrandBackgroundCss", "stretchedLinkCss", "editorialGalleryCardSkeletonCss", "skeletonAnimationCss", "keyframes", "editorialGalleryCardSkeletonAnimationCss", "editorialGalleryCardSkeletonDescriptionCss", "editorialGalleryCardSkeletonTitleLinesCss", "editorialGalleryCardTextGroupSkeletonCss", "editorialGalleryCardSkeletonMediaCss", "editorialGalleryCardMetadataSkeletonCss", "editorialGalleryCardBrandSkeletonCss", "editorialGalleryCardBrandDateSkeletonCss", "editorialGalleryCardSkeletonBarCss", "editorialGalleryCardButtonSkeletonCss", "editorialGalleryCardsContainerCss", "editorialGalleryBrandNames", "brandBackgroundCss", "lensBrandBackgroundCss", "snapBrandBackgroundCss", "snapchatBrandBackgroundCss", "spectaclesBrandBackgroundCss", "EditorialGalleryCard", "date", "dateTime", "title", "description", "imgSrcs", "videoSource", "imgAltText", "brand", "isRtl", "link", "ctaLabel", "onClick", "dataset", "brandDataset", "titleDataset", "descriptionDataset", "dateDataset", "mediaDataset", "className", "props", "useMotifStyles", "hasMedia", "jsx", "cx", "editorialGalleryCardContainerCss", "noBrandBackgroundCss", "dataSetToAttributes", "editorialGalleryCardClassName", "editorialGalleryCardLayoutCss", "jsxs", "editorialGalleryCardContentCss", "editorialGalleryCardMetadataCss", "editorialGalleryCardAnnotationCss", "formatDateToDatetime", "editorialGalleryCardPreviewCss", "editorialGalleryCardMediaContainerCss", "Media", "editorialGalleryCardMediaClassName", "editorialGalleryCardMediaCss", "editorialGalleryCardBodyCss", "editorialGalleryCardTextGroupCss", "editorialGalleryCardTitleCss", "editorialGalleryCardDescriptionCss", "Button", "ButtonType", "editorialGalleryCardButtonCss", "stretchedLinkCss", "titleLines", "descriptionLines", "SkeletonEditorialGalleryCard", "className", "dashClassName", "cx", "editorialGalleryCardSkeletonCss", "editorialGalleryCardSkeletonAnimationCss", "jsx", "editorialGalleryCardContainerCss", "editorialGalleryCardClassName", "editorialGalleryCardLayoutCss", "jsxs", "editorialGalleryCardContentCss", "editorialGalleryCardMetadataSkeletonCss", "editorialGalleryCardBrandSkeletonCss", "editorialGalleryCardBrandDateSkeletonCss", "editorialGalleryCardPreviewCss", "editorialGalleryCardMediaContainerCss", "editorialGalleryCardSkeletonMediaCss", "editorialGalleryCardBodyCss", "editorialGalleryCardTextGroupSkeletonCss", "editorialGalleryCardSkeletonTitleLinesCss", "height", "width", "index", "editorialGalleryCardSkeletonBarCss", "editorialGalleryCardSkeletonDescriptionCss", "editorialGalleryCardButtonSkeletonCss", "arrowIconSize", "lineClamp", "lines", "css", "cardCss", "m", "linkCss", "mediaContainerCss", "image169Css", "image32Css", "image11Css", "imageLoadingCss", "mediaLogoContainerCss", "mediaLogoPictureCss", "mediaLogoImageCss", "mediaLogoPictureMobileCss", "mediaLogoImageMobileCss", "cardPortraitWidthCss", "mobileMediaQuery", "cardLandscapeWidthCss", "mediaQueryForRange", "cardResponsiveWidthCss", "nonMobileMediaQuery", "singleViewLandscapeWidthCss", "textWrapperCss", "textWrapperOverlapCss", "textCss", "textOverlapCss", "arrowCss", "infoElementCss", "titleCss", "h5Css", "titleOnlyClampCss", "subtitleCss", "h6Css", "subtitleOnlyClampCss", "bodyCss", "p3Css", "bodyOnlyClampCss", "imageCss", "videoCss", "videoPlayerControlsCss", "textPlayerControlsCss", "metadataContainerCss", "metadataTextCss", "relatedContentLineClampCss", "CarouselCardItem", "aspectRatio", "autoplay", "body", "captionsSource", "imgAltText", "imgSrcs", "shouldLoad", "onPlay", "onPause", "onTimeUpdate", "openNewTab", "posterSource", "isVisible", "showVideoControls", "subtitle", "title", "url", "videoSource", "mobileVideoSource", "onClick", "isSingleView", "isResponsiveWidth", "hideLinkArrow", "logoSrcs", "logoAltText", "className", "date", "brand", "relatedContent", "media", "setMedia", "isLogoOverlayHovered", "setIsLogoOverlayHovered", "mediaCallback", "elt", "didLoad", "Anchor", "PrimitivesContext", "isMobile", "useIsMobile", "isResponsiveWidthMultiView", "isTextOverlap", "hasLogoOverlay", "onClickWrapped", "event", "video", "isVideoPlaying", "hasBodyContent", "mediaElement", "mediaCss", "cx", "videoCss", "imageCss", "videoPlayerControlsCss", "jsx", "Media", "mediaContent", "jsxs", "mediaContainerCss", "image32Css", "image11Css", "image169Css", "imageLoadingCss", "mediaLogoContainerCss", "Picture", "mediaLogoPictureCss", "mediaLogoImageCss", "bodyContent", "textWrapperCss", "textWrapperOverlapCss", "textCss", "textOverlapCss", "textPlayerControlsCss", "Icon", "arrowCss", "mediaLogoPictureMobileCss", "mediaLogoImageMobileCss", "infoElementCss", "metadataContainerCss", "metadataTextCss", "editorialGalleryBrandNames", "titleCss", "titleOnlyClampCss", "subtitleCss", "subtitleOnlyClampCss", "bodyCss", "relatedContentLineClampCss", "bodyOnlyClampCss", "commonCss", "cardLandscapeWidthCss", "singleViewLandscapeWidthCss", "cardPortraitWidthCss", "cardResponsiveWidthCss", "cardCss", "linkCss", "import_react", "arrowIconSize", "maxTextWidth", "linkCss", "css", "m", "mobileMediaQuery", "contentCss", "nonMobileMediaQuery", "descriptionCss", "subTextCss", "p3Css", "arrowCss", "CarouselTextItem", "description", "subText", "url", "openNewWTab", "onClick", "rest", "Anchor", "PrimitivesContext", "onClickWrapped", "event", "jsxs", "cx", "contentCss", "linkCss", "jsx", "Icon", "arrowCss", "descriptionCss", "subTextCss", "baseClamp", "number", "lower", "upper", "baseClamp_default", "init_toNumber", "clamp", "number", "lower", "upper", "toNumber_default", "baseClamp_default", "clamp_default", "nativeMax", "nativeMin", "baseInRange", "number", "start", "end", "baseInRange_default", "init_toNumber", "inRange", "number", "start", "end", "toFinite_default", "toNumber_default", "baseInRange_default", "inRange_default", "import_react", "carouselAnimationDuration", "carouselContainerCss", "css", "mobileMediaQuery", "carouselContentWrapperCss", "carouselContentWrapperOverflowCss", "carouselContentWrapperOverflowResponsiveWidthCss", "nonMobileMediaQuery", "carouselCenteredCss", "carouselGapCss", "m", "carouselSingleViewDefaultTransformCss", "carouselContentCss", "carouselSlideCss", "carouselSlideResponsiveWidthCss", "carouselFillSlidesCss", "dotWrapperCss", "dotCss", "dotActiveCss", "dotsInnerContainerCss", "withDotsCss", "dotsContainerCss", "Dots", "currentIndex", "length", "onDotClick", "jsx", "dotsContainerCss", "dotsInnerContainerCss", "_", "index", "dotWrapperCss", "cx", "dotCss", "dotActiveCss", "import_react", "isCarouselV3Element", "elem", "CarouselV3", "getValueFromDirection", "originalValue", "isRTL", "shortestPath", "currentIndex", "targetIndex", "count", "direct", "wrapping", "direction", "useDrag", "dragStart", "dragMove", "dragEnd", "isMobile", "useMediaMode", "MediaMode", "initialTouchPosition", "touchPosition", "event", "clientX", "diff", "initial", "current", "CarouselV3", "children", "isSingleView", "isRtl", "autoPlay", "autoPlaySpeed", "enableOverflowDecoration", "isResponsiveWidth", "onSlideChange", "useMotifStyles", "carouselContentWrapperRef", "carouselContent", "setCarouselContent", "carouselContentRefCallback", "node", "fadeOutTimeouts", "autoplayInterval", "enableTransition", "isPaused", "setIsPaused", "isOnScreen", "useOnScreen", "currentIndex", "setCurrentIndex", "isFocused", "useWindowFocused", "tileSize", "setTileSize", "childElements", "cardsLength", "windowWidth", "useWindowSize", "isMobile", "useIsMobile", "isResponsiveWidthMultiView", "visibleCount", "carouselContentWidth", "cardWidth", "isCarousel", "duplicateCount", "maxDuplicates", "width", "gapCss", "gapInt", "gap", "timeoutID", "slide", "index", "isCurrent", "carouselAnimationDuration", "currentOffset", "gapOffset", "showOverflowDecoration", "shiftItems", "numberOfItemsToShift", "handleKeyUp", "event", "onDotClick", "targetIndex", "mobileMaxWidth", "finalDelta", "shortestPath", "newIndex", "dragHandlers", "useDrag", "delta", "xPosition", "getValueFromDirection", "threshold", "clampedSteps", "clamp_default", "handleMouseEnter", "handleMouseLeave", "handleMouseUp", "resetPosition", "handleTransitionEnd", "e", "carouselContentStyle", "isSSR", "renderDots", "preceding", "following", "cardIsVisible", "inRange_default", "cardShouldLoad", "jsxs", "cx", "carouselContainerCss", "withDotsCss", "jsx", "carouselContentWrapperCss", "carouselContentWrapperOverflowCss", "carouselContentWrapperOverflowResponsiveWidthCss", "carouselContentCss", "carouselCenteredCss", "carouselSingleViewDefaultTransformCss", "carouselGapCss", "child", "idx", "carouselSlideCss", "carouselFillSlidesCss", "carouselSlideResponsiveWidthCss", "Dots", "categoryCss", "css", "Category", "title", "jsx", "categoryCss", "import_react", "hideWhenMobileCss", "css", "mobileMediaQuery", "hideWhenDesktopCss", "nonMobileMediaQuery", "listIconUrlVariable", "contentScrollMarginCss", "css", "contentBaseCss", "m", "mobileMediaQuery", "mobilePageContainerQuery", "transparentBackgroundCss", "contentLayoutCss", "contentLayoutDirectionCss", "contentLayoutDirectionMobileCss", "contentMediaContainerCss", "mediaOrderCss", "mediaOrderMobileCss", "contentWrapperStyle", "contentWrapperNoMobilePaddingStyle", "bodyContainerCss", "bodyContainerStretchCss", "nonMobileMediaQuery", "bodyContainerMediaSideCss", "listIconStyleCss", "bodyCss", "bodyStyleCss", "p2Css", "headerCss", "titleCss", "h4Css", "subtitleBaseCss", "alignmentClassNames", "Alignment", "textAlignmentBaseCss", "textAlignmentDesktopStyle", "textAlignmentMobileStyle", "ctaContainerCss", "ctaInnerCss", "displayNoneCss", "borderColorCssVar", "borderCss", "Content", "className", "body", "bodyAlignment", "bodyAlignmentMobile", "callsToAction", "displayOn", "layout", "mediaDirection", "mediaDirectionMobile", "subtitle", "title", "titleAlignment", "titleAlignmentMobile", "motifScheme", "backgroundColorProp", "borderColor", "anchorId", "animation", "isRTL", "bodyDataset", "titleDataset", "subtitleDataset", "asset", "style", "listIconUrl", "useMotifStyles", "contentRef", "animationCssProps", "useAnimations", "dir", "blockBackgroundColor", "BlockBackgroundColorContext", "contentTheme", "contentBackgroundColor", "backgroundColor", "isSameBackgroundColorAsBlock", "getMotifSchemeForLegacyBackgroundColor", "hasHeader", "hasCallsToAction", "hasBody", "hasContent", "hasMediaAndContent", "bgClass", "getBackgroundClassName", "finalInlineStyle", "borderColorScheme", "borderColorVar", "getMotifVariableValue", "borderInlineStyle", "borderColorCssVar", "contentBoxStyle", "contentWrapperNoMobilePaddingStyle", "contentWrapperStyle", "sectionClassName", "cx", "contentBaseCss", "hideWhenMobileCss", "hideWhenDesktopCss", "displayNoneCss", "contentLayoutCss", "contentLayoutDirectionCss", "contentLayoutDirectionMobileCss", "transparentBackgroundCss", "borderCss", "jsxs", "contentScrollMarginCss", "jsx", "contentMediaContainerCss", "mediaOrderCss", "mediaOrderMobileCss", "bodyContainerCss", "bodyContainerStretchCss", "bodyContainerMediaSideCss", "ContentHeader", "ContentBody", "Alignment", "titleAlignmentClassName", "textAlignmentBaseCss", "textAlignmentDesktopStyle", "textAlignmentMobileStyle", "headerCss", "titleCss", "dataSetToAttributes", "p1Css", "subtitleBaseCss", "bodyAlignmentClassName", "columnCountVariableStyles", "listIconUrlVariable", "bodyCss", "bodyStyleCss", "listIconStyleCss", "ctaContainerCss", "ctaInnerCss", "import_react", "definitionCss", "css", "m", "definitionActiveCss", "Definition", "anchorId", "isActive", "onClick", "className", "children", "ref", "useMotifStyles", "jsx", "e", "cx", "definitionCss", "definitionActiveCss", "directionalOverlayPanelActiveCss", "css", "directionalOverlayPanelCss", "ZIndex", "directionalOverlayDesktopLeftCss", "nonMobileMediaQuery", "directionalOverlayDesktopRightCss", "directionalOverlayDesktopTopCss", "directionalOverlayDesktopBottomCss", "directionalOverlayDesktopHorizontalOpenCss", "directionalOverlayDesktopVerticalOpenCss", "directionalOverlayMobileLeftCss", "mobileMediaQuery", "directionalOverlayMobileRightCss", "directionalOverlayMobileTopCss", "directionalOverlayMobileBottomCss", "directionalOverlayMobileHorizontalOpenCss", "directionalOverlayMobileVerticalOpenCss", "directionalOverlayBackdropBaseCss", "m", "directionalOverlayBackdropActiveCss", "directionCssMap", "DirectionalOverlay", "isOpen", "children", "desktopDirection", "mobileDirection", "desktopSizePercent", "mobileSizePercent", "onBackdropClick", "showBackdrop", "backdropClassName", "className", "style", "dataset", "dataTestId", "resolvedMobileDirection", "panelStyle", "handleBackdropKeyDown", "event", "desktopCss", "directionCssMap", "mobileCss", "backdropClass", "cx", "directionalOverlayBackdropBaseCss", "directionalOverlayBackdropActiveCss", "panelClass", "directionalOverlayPanelCss", "directionalOverlayPanelActiveCss", "jsxs", "Fragment", "jsx", "dataSetToAttributes", "buttonsWrapperClassName", "dropdownWrapperClassName", "skeletonWrapperClassName", "buttonsWrapperCss", "css", "buttonsBaseCss", "m", "mobileMediaQuery", "noHorizontalScrollbarsCss", "buttonsSizeCss", "buttonsCss", "panelsCss", "buttonActiveClassName", "buttonBaseCss", "ZIndex", "buttonSizeCss", "buttonCss", "contentContainerStyle1ColumnCss", "chartToggleWrapperCss", "nonMobileMediaQuery", "dropdownCss", "noLabelCss", "defaultColor", "skeletonWrapperCss", "css", "skeletonLabelCss", "m", "skeletonLinesWrapperCss", "skeletonLineCss", "nonMobileMediaQuery", "skeletonLineAnimationCss", "skeletonIconWrapperCss", "skeletonDropdownIconCss", "DropdownSkeleton", "jsxs", "cx", "skeletonWrapperClassName", "skeletonWrapperCss", "jsx", "skeletonLabelCss", "skeletonLineAnimationCss", "skeletonLinesWrapperCss", "skeletonLineCss", "skeletonIconWrapperCss", "Icon", "skeletonDropdownIconCss", "emphasizedTextCss", "css", "m", "EmphasizedText", "text", "useMotifStyles", "jsx", "cx", "emphasizedTextCss", "import_react", "desktopWrapperCss", "css", "mobileMediaQuery", "nonMobileMediaQuery", "dropdownCss", "m", "dropdownMobileWrapperCss", "dropdownMobileCss", "dropdownTextCss", "dropdownMainTextCss", "MobileHeading", "dropdownSecondaryTextCss", "caratCss", "allValue", "FilterDropdownMenu", "title", "onChange", "isStandalone", "value", "allItemTitle", "items", "dataset", "useMotifStyles", "itemsWithEvents", "id", "onChangeMobile", "e", "FilterButton", "props", "jsxs", "dropdownCss", "dataSetToAttributes", "jsx", "cx", "dropdownTextCss", "dropdownMainTextCss", "caratCss", "Icon", "Fragment", "desktopWrapperCss", "DropdownMenu", "dropdownMobileWrapperCss", "dropdownMobileCss", "dropdownSecondaryTextCss", "import_react", "import_react", "SideNavigationLinks", "links", "isUrlCurrent", "focusSection", "isRTL", "linksRefs", "Anchor", "PrimitivesContext", "handleLinkKeyPress", "idx", "event", "next", "prev", "handleOnClick", "url", "isExternal", "createLink", "link", "id", "linkProps", "element", "ariaCurrent", "jsx", "Fragment", "isCurrent", "cx", "linkCss", "activeLinkCss", "dataSetToAttributes", "SideNavigation", "className", "items", "isUrlCurrent", "dataset", "motifScheme", "backgroundColor", "motifSchemeMobile", "mobileBackgroundColor", "onSectionClick", "useMotifStyles", "browserFeatures", "BrowserFeaturesContext", "formatMessage", "MessageContext", "windowWidth", "useWindowSize", "isMobile", "isMobileOs", "containerRef", "sectionsRefs", "defaultSection", "section", "link", "activeSection", "setActiveSection", "isVisible", "setIsVisible", "isRtl", "handleSectionClick", "idx", "event", "isExpanding", "handleSectionKeyPress", "next", "prev", "focusSection", "toggleIsVisible", "showTopBar", "mobileMaxWidth", "secondaryNavigationLabel", "jsxs", "cx", "getBackgroundClassName", "wrapperCss", "wrapperShadowCss", "sectionButtonCss", "jsx", "Icon", "sideNavMobileIconCss", "containerCss", "dataSetToAttributes", "sectionHasActiveLink", "el", "navigatorItemButtonCss", "navigatorItemButtonOpenCss", "navigatorItemButtonActiveCss", "caratCss", "sideNavIconCss", "SideNavigationLinks", "wrapperCss", "css", "m", "footerBarContainerCss", "extraLargeDesktopWidth", "footerBarContainerOffsetCss", "maxWidth", "desktopSideNavWidthPx", "footerBarFullWidthCss", "footerBarCss", "nonMobileMediaQuery", "twoColumnCollapseMediaQuery", "nonTwoColumnCollapseMediaQuery", "mobileMediaQuery", "FooterBar", "children", "backgroundColor", "hasSideNav", "jsx", "cx", "footerBarWrapperClassName", "getBackgroundClassName", "wrapperCss", "footerBarContainerClassName", "footerBarContainerCss", "footerBarContainerOffsetCss", "footerBarClassName", "footerBarCss", "import_react", "import_react", "FooterContext", "wrapperCss", "css", "m", "footerColumnsDesktopContainerCss", "extraLargeDesktopWidth", "footerColumnsDesktopContainerOffsetCss", "maxWidth", "desktopSideNavWidthPx", "footerColumnsDesktopCss", "twoColumnCollapseMediaQuery", "nonTwoColumnCollapseMediaQuery", "footerColumnsCenteredCss", "footerColumnMobileItemsCss", "footerColumnMobileCss", "oneColumnWidthCss", "twoColumnWidthCss", "threeColumnWidthCss", "fourColumnWidthCss", "fiveOrMoreColumnWidthCss", "FooterColumnsDesktop", "hasSideNav", "children", "footerStyle", "cx", "footerColumnsDesktopCss", "childrenLength", "child", "oneColumnWidthCss", "twoColumnWidthCss", "threeColumnWidthCss", "fourColumnWidthCss", "fiveOrMoreColumnWidthCss", "footerColumnsCenteredCss", "jsx", "footerColumnsDesktopWrapperClassName", "wrapperCss", "footerColumnsDesktopContainerClassName", "footerColumnsDesktopContainerCss", "footerColumnsDesktopContainerOffsetCss", "import_react", "FooterColumnsMobile", "children", "backgroundColor", "expandedItem", "setExpandedItem", "jsx", "FooterContext", "MediaMode", "cx", "getBackgroundClassName", "footerColumnMobileCss", "footerColumnMobileItemsCss", "FooterColumns", "children", "props", "mode", "FooterContext", "MediaMode", "jsx", "FooterColumnsMobile", "FooterColumnsDesktop", "import_react", "footerHeaderCss", "css", "m", "nonMobileMediaQuery", "footerHeaderSpacingCss", "footerGroupCss", "mobileMediaQuery", "footerColumnListCss", "footerHorizontalLayoutCss", "nonTwoColumnCollapseMediaQuery", "FooterGroup", "id", "children", "title", "orientation", "isFooterBar", "onToggle", "mode", "FooterContext", "containerClassName", "cx", "footerGroupCss", "footerHorizontalLayoutCss", "footerHeaderClassName", "footerHeaderCss", "footerHeaderSpacingCss", "header", "jsx", "childrenWrapper", "footerColumnListCss", "MediaMode", "DetailsSummary", "jsxs", "import_react", "footerItemContainerCss", "css", "m", "nonMobileMediaQuery", "footerItemCss", "FooterItemV2", "id", "url", "title", "onClick", "Anchor", "PrimitivesContext", "jsx", "footerItemContainerCss", "footerItemCss", "wrapperCss", "css", "m", "footerSocialContainerCss", "extraLargeDesktopWidth", "footerSocialContainerOffsetCss", "maxWidth", "desktopSideNavWidthPx", "footerSocialCss", "nonMobileMediaQuery", "footerSocialIconsWrapperCss", "FooterSocial", "title", "hasSideNav", "children", "jsx", "cx", "footerSocialWrapperClassName", "wrapperCss", "footerSocialClassName", "footerSocialContainerCss", "footerSocialContainerOffsetCss", "jsxs", "footerSocialCss", "footerSocialIconsWrapperCss", "FooterV2", "children", "motifScheme", "backgroundColor", "className", "mode", "useMediaMode", "useMotifStyles", "jsx", "FooterContext", "cx", "getBackgroundClassName", "footnoteCss", "css", "m", "maxWidth", "p3Css", "mobileMediaQuery", "nonMobileMediaQuery", "footnoteSuperscriptCss", "Footnote", "index", "children", "useMotifStyles", "jsxs", "cx", "footnoteCss", "jsx", "footnoteSuperscriptCss", "Superscript", "import_react", "footnotesCss", "css", "m", "footnotesContentCss", "maxWidth", "mobileMediaQuery", "footnotesPrintCss", "footnoteDetailsCss", "footnoteAccordionItemSummaryCss", "footnoteAccordionItemContentCss", "footnoteBlockBackgroundColor", "animationDuration", "chevronProps", "itemChevronCss", "m", "summaryProps", "footnoteAccordionItemSummaryCss", "FootnoteBlock", "title", "isOpenInitially", "children", "className", "open", "setOpen", "detailsRef", "onToggle", "jsx", "cx", "footnotesCss", "jsxs", "footnotesContentCss", "footnotesPrintCss", "DetailsSummary", "footnoteDetailsCss", "footnoteAccordionItemContentCss", "import_react", "import_react", "validations", "checkNoError", "state", "name", "isInvalid", "field", "value", "initialFormState", "formReducer", "action", "clone_default", "metadata", "merge_default", "meta", "FormContext", "initialFormState", "noop", "import_react", "formCss", "css", "m", "formRowCss", "mobileMediaQuery", "inputLabelCss", "inputHelpTextCss", "p2Css", "errorMessageCss", "errorDebugSectionCss", "errorCodeCss", "submitButtonCss", "inputContainerCss", "inputErrorCss", "readonlyCss", "inputCss", "nonMobileMediaQuery", "checkboxCheckPath", "checkboxCss", "checkboxWrapperCss", "textAreaCss", "selectCss", "selectWrapperCss", "placeholderCss", "arrowCss", "formMultiSelectArrowCss", "multiSelectDropdownCss", "requiredCss", "requiredDescriptionCss", "paragraphCss", "p3Css", "FormErrorMessage", "renderErrorMessage", "on400ResponseMessage", "on500ResponseMessage", "onInvalidClientSideSubmissionMessage", "renderErrorDetails", "state", "FormContext", "errorStatusCode", "error", "type", "jsx", "errorMessageCss", "errorDisplayText", "errorObject", "jsxs", "Fragment", "errorDebugSectionCss", "errorCodeCss", "import_react", "FormMessage", "formRequiredFieldsMessage", "state", "FormContext", "field", "jsx", "requiredDescriptionCss", "Form", "className", "children", "endpoint", "submitText", "submitSuccessText", "submitTextDataset", "onSubmitSuccess", "onSubmitFailure", "onFormBodyChange", "formChildrenRenderer", "extraParams", "extraParamsAsync", "on400ResponseMessage", "on500ResponseMessage", "renderErrorMessage", "onInvalidClientSideSubmissionMessage", "formRequiredFieldsMessage", "renderErrorDetails", "useMotifStyles", "state", "dispatch", "formReducer", "cloneDeep_default", "initialFormState", "contextValue", "handleSubmit", "event", "submitForm", "extraParamsRealized", "formBody", "merge_default", "response", "payload", "error", "rawError", "parseError", "disabled", "isEmpty", "loading", "submitSuccess", "submitTextValue", "formChildren", "jsxs", "Fragment", "jsx", "Button", "ButtonType", "submitButtonCss", "FormContext", "cx", "formCss", "placeholderCss", "FormMessage", "FormErrorMessage", "FormRow", "children", "props", "jsx", "formRowCss", "import_react", "Field", "type", "name", "label", "helpText", "error", "hasError", "children", "dataset", "labelDataset", "helpTextDataset", "errorDataset", "required", "jsx", "Fragment", "jsxs", "cx", "inputContainerCss", "dataSetToAttributes", "h6Css", "inputLabelCss", "requiredCss", "inputHelpTextCss", "errorMessageCss", "getStringValue", "value", "getBooleanValue", "getInputPlaceholder", "placeholder", "showRequired", "Input", "props", "name", "validation", "required", "placeholder", "initialValue", "type", "label", "richLabel", "labelDataset", "richLabelDataset", "readOnly", "shouldResetToInitial", "maxLength", "minValue", "maxValue", "restProps", "state", "dispatch", "FormContext", "fieldMeta", "value", "inputProps", "omit_default", "handleChange", "e", "target", "handleInvalid", "inputPlaceholder", "getInputPlaceholder", "getInputElement", "jsx", "getStringValue", "cx", "textAreaCss", "placeholderCss", "inputErrorCss", "jsxs", "checkboxWrapperCss", "getBooleanValue", "checkboxCss", "dataSetToAttributes", "inputCss", "Field", "import_react", "import_multiselect_react_dropdown", "import_react", "import_react_dom", "multiSelectWrapperCss", "css", "multiSelectDropdownBaseCss", "m", "multiSelectArrowCss", "multiSelectCloseIconCss", "multiSelectOverflowChipCss", "MultiSelect", "options", "selectedValues", "displayValue", "placeholder", "showCheckbox", "hidePlaceholder", "avoidHighlightFirstOption", "onSelect", "onRemove", "onKeyPressFn", "dropdownClassName", "wrapperClassName", "arrowClassName", "maxVisibleChips", "useMotifStyles", "wrapperRef", "portalTarget", "setPortalTarget", "closeIcon", "jsx", "Icon", "multiSelectCloseIconCss", "selectedCount", "shouldTruncate", "overflowCount", "overflowCss", "css", "handleArrowMouseDown", "event", "handleArrowClick", "input", "handleOverflowMouseDown", "jsxs", "cx", "multiSelectWrapperCss", "Multiselect", "multiSelectDropdownBaseCss", "multiSelectOverflowChipCss", "multiSelectArrowCss", "initialFieldState", "MultiSelectDropdown", "props", "name", "placeholder", "showCheckbox", "options", "required", "initialValues", "state", "dispatch", "FormContext", "value", "formField", "handleSelect", "selectedList", "onKeyPress", "event", "handleRemove", "jsx", "Field", "MultiSelect", "getInputPlaceholder", "cx", "multiSelectDropdownCss", "placeholderCss", "inputErrorCss", "selectWrapperCss", "formMultiSelectArrowCss", "import_react", "Select", "props", "name", "placeholder", "children", "required", "initialValue", "allValues", "shouldResetToInitial", "fieldDataset", "restProps", "selectProps", "omit_default", "state", "dispatch", "FormContext", "validInitialValue", "getStringValue", "formField", "value", "handleChange", "e", "handleInvalid", "jsx", "Field", "jsxs", "cx", "selectWrapperCss", "selectCss", "inputErrorCss", "getInputPlaceholder", "Icon", "arrowCss", "import_react", "desktopWrapperCss", "css", "mobileMediaQuery", "nonMobileMediaQuery", "mobileWrapperCss", "buttonDefaultStylesResetCss", "m", "searchWrapperCss", "filterBarCss", "toggleDropdownsBaseTextCss", "toggleDropdownsMainTextCss", "toggleDropdownsSecondaryTextCss", "clearFiltersWrapperCss", "clearFiltersButtonCss", "filtersIconButtonCss", "filtersIconCss", "filtersIconActiveCss", "GalleryFiltersV2", "searchMenus", "selectedFilters", "onChangeFilter", "mobileFiltersToggleLabel", "onClearFilters", "clearButtonLabel", "mobileFiltersWrapperTextDataset", "clearFiltersCtaCopyDataset", "useMotifStyles", "isMobileOpen", "setIsMobileOpen", "toggleIsMobileOpen", "selectedFiltersCount", "children", "title", "id", "allItemTitle", "items", "dataset", "allValue", "setValue", "props", "jsx", "FilterDropdownMenu", "filterText", "jsxs", "desktopWrapperCss", "searchWrapperCss", "cx", "buttonDefaultStylesResetCss", "clearFiltersButtonCss", "dataSetToAttributes", "mobileWrapperCss", "filterBarCss", "toggleDropdownsBaseTextCss", "toggleDropdownsMainTextCss", "toggleDropdownsSecondaryTextCss", "clearFiltersWrapperCss", "filtersIconButtonCss", "Icon", "filtersIconCss", "filtersIconActiveCss", "galleryV2Css", "css", "m", "largeDesktopMediaQuery", "largeDesktopPageContainerQuery", "nonLargeDesktopPageContainerQuery", "nonMobileMediaQuery", "mobilePageContainerQuery", "nonMobilePageContainerQuery", "GalleryGridV2", "children", "useMotifStyles", "jsx", "cx", "galleryV2Css", "createBaseEach", "eachFunc", "fromRight", "collection", "iteratee", "isArrayLike_default", "length", "index", "iterable", "createBaseEach_default", "baseEach", "createBaseEach_default", "baseForOwn_default", "baseEach_default", "baseMap", "collection", "iteratee", "index", "result", "isArrayLike_default", "baseEach_default", "value", "key", "baseMap_default", "map", "collection", "iteratee", "func", "isArray_default", "arrayMap_default", "baseMap_default", "baseIteratee_default", "map_default", "htmlUnescapes", "unescapeHtmlChar", "basePropertyOf_default", "unescapeHtmlChar_default", "reEscapedHtml", "reHasEscapedHtml", "unescape", "string", "toString_default", "unescapeHtmlChar_default", "unescape_default", "TAG_PROPERTIES", "TAG_NAMES", "BASE", "BODY", "HEAD", "HTML", "LINK", "META", "NOSCRIPT", "SCRIPT", "STYLE", "TITLE", "FRAGMENT", "SEO_PRIORITY_TAGS", "rel", "type", "charset", "name", "property", "VALID_TAG_NAMES", "Object", "keys", "map", "REACT_TAG_MAP", "accesskey", "class", "contenteditable", "contextmenu", "itemprop", "tabindex", "HTML_TAG_MAP", "reduce", "obj", "key", "getInnermostProperty", "propsList", "i", "length", "props", "prototype", "hasOwnProperty", "call", "getTitleFromPropsList", "innermostTitle", "innermostTemplate", "Array", "isArray", "join", "replace", "innermostDefaultTitle", "undefined", "getOnChangeClientState", "getAttributesFromPropsList", "tagType", "filter", "tagAttrs", "current", "getBaseTagFromPropsList", "primaryAttributes", "reverse", "innermostBaseTag", "tag", "lowerCaseAttributeKey", "toLowerCase", "indexOf", "concat", "getTagsFromPropsList", "tagName", "approvedSeenTags", "console", "warn", "approvedTags", "instanceTags", "instanceSeenTags", "primaryAttributeKey", "attributeKey", "value", "forEach", "push", "tagUnion", "getAnyTrueFromPropsList", "checkedTag", "index", "flattenArray", "possibleArray", "prioritizer", "elementsList", "propsToMatch", "acc", "elementAttrs", "toMatch", "includes", "priority", "default", "without", "_extends2", "a", "SELF_CLOSING_TAGS", "encodeSpecialCharacters", "str", "encode", "String", "generateElementAttributesAsString", "attributes", "attr", "convertElementAttributesToReactProps", "initProps", "generateTagsAsReactComponent", "tags", "_mappedTag", "mappedTag", "attribute", "mappedAttribute", "dangerouslySetInnerHTML", "__html", "innerHTML", "cssText", "React", "createElement", "getMethodsForTag", "toComponent", "generateTitleAsReactComponent", "titleAttributes", "title", "_initProps", "toString", "attributeString", "flattenedTitle", "generateTagsAsString", "attributeHtml", "string", "tagContent", "isSelfClosing", "mapStateOnServer", "baseTag", "bodyAttributes", "htmlAttributes", "noscriptTags", "styleTags", "_props$title", "s", "linkTags", "metaTags", "scriptTags", "priorityMethods", "prioritizeSeoTags", "_getPriorityMethods", "_ref", "meta", "link", "script", "base", "noscript", "style", "instances", "HelmetData", "context", "canUseDOM", "_this", "this", "document", "setHelmet", "serverState", "helmet", "helmetInstances", "get", "add", "instance", "remove", "splice", "Context", "createContext", "providerShape", "PropTypes", "shape", "func", "Provider", "helmetData", "render", "children", "Component", "propTypes", "node", "isRequired", "defaultProps", "displayName", "updateTags", "indexToDelete", "headElement", "head", "querySelector", "tagNodes", "querySelectorAll", "oldTags", "slice", "newTags", "newElement", "styleSheet", "appendChild", "createTextNode", "setAttribute", "some", "existingTag", "isEqualNode", "parentNode", "removeChild", "updateAttributes", "elementTag", "getElementsByTagName", "helmetAttributeString", "getAttribute", "helmetAttributes", "split", "attributesToRemove", "attributeKeys", "indexToSave", "removeAttribute", "commitTagChanges", "newState", "cb", "onChangeClientState", "tagUpdates", "addedTags", "removedTags", "_tagUpdates$tagType", "_helmetCallback", "Dispatcher", "rendered", "shouldComponentUpdate", "nextProps", "shallowEqual", "componentDidUpdate", "emitChange", "componentWillUnmount", "_this$props$context", "state", "_extends", "defer", "cancelAnimationFrame", "requestAnimationFrame", "init", "F", "G", "Helmet", "fastCompare", "mapNestedChildrenToProps", "child", "nestedChildren", "Error", "flattenArrayTypeChildren", "arrayTypeChildren", "newChildProps", "_proto", "mapObjectTypeChildren", "_ref2", "_extends3", "_extends4", "newProps", "mapArrayTypeChildrenToProps", "newFlattenedProps", "arrayChildName", "_extends5", "warnOnInvalidChildren", "invariant", "nestedChild", "mapChildrenToProps", "Children", "_child$props", "childProps", "_objectWithoutPropertiesLoose", "_excluded", "_this$props", "_excluded2", "Consumer", "object", "oneOfType", "arrayOf", "defaultTitle", "bool", "titleTemplate", "Header", "title", "description", "keywords", "ogImage", "ogVideo", "noIndex", "noFollow", "customMetas", "robots", "jsxs", "W", "jsx", "unescape_default", "map_default", "customMeta", "import_react", "import_react", "breadcrumbContainerCss", "css", "breadcrumbCss", "m", "nonMobileMediaQuery", "breadcrumbAnchorCss", "breadcrumbTextCss", "breadcrumbActiveCss", "tooltipCss", "p3Css", "backIconCss", "Breadcrumb", "breadcrumbText", "slug", "isCurrent", "showBackIcon", "Anchor", "PrimitivesContext", "textRef", "isTruncated", "setIsTruncated", "checkIfTruncated", "offsetWidth", "scrollWidth", "text", "jsx", "breadcrumbTextCss", "breadcrumb", "jsxs", "cx", "breadcrumbCss", "breadcrumbAnchorCss", "Icon", "backIconCss", "breadcrumbActiveCss", "breadcrumbContainerCss", "tooltipCss", "breadcrumbCss", "css", "bgDarkGradientCss", "bgLightGradientCss", "breadcrumbsListCss", "m", "nonMobileMediaQuery", "breadcrumbsListItemCss", "mobileMediaQuery", "breadcrumbsListItemShowMobileCss", "Breadcrumbs", "motifScheme", "breadcrumbsItems", "showBgGradient", "jsx", "breadcrumbCss", "cx", "breadcrumbsListCss", "bgLightGradientCss", "bgDarkGradientCss", "breadcrumb", "index", "isCurrent", "shouldShowOnMobile", "breadcrumbsListItemCss", "breadcrumbsListItemShowMobileCss", "Breadcrumb", "import_react", "createIcon", "iconConfig", "_a", "_b", "bgStyle", "borderRadius", "iconFillColor", "round", "size", "rest", "__objRest", "__spreadProps", "__spreadValues", "EmailIcon", "objectToGetParams", "object", "params", "value", "key", "isPromise", "obj", "getBoxPositionOnWindowCenter", "width", "height", "getBoxPositionOnScreenCenter", "windowOpen", "url", "_a", "onClose", "_b", "configRest", "__objRest", "config", "__spreadValues", "shareDialog", "interval", "e", "ShareButton", "_c", "_d", "beforeOnClick", "children", "className", "disabled", "disabledStyle", "forwardedRef", "htmlTitle", "networkLink", "networkName", "onClick", "onShareWindowClose", "openShareDialogOnClick", "opts", "resetButtonStyle", "style", "windowHeight", "windowPosition", "windowWidth", "rest", "handleClick", "event", "link", "returnVal", "windowConfig", "newClassName", "cx", "newStyle", "__spreadProps", "createShareButton", "optsMap", "defaultProps", "CreatedButton", "props", "ref", "passedProps", "emailLink", "subject", "body", "separator", "EmailShareButton", "_", "FacebookIcon", "createIcon", "FacebookMessengerIcon", "createIcon", "facebookMessengerLink", "url", "appId", "redirectUri", "to", "objectToGetParams", "FacebookMessengerShareButton", "createShareButton", "props", "AssertionError", "message", "assert", "value", "facebookLink", "url", "hashtag", "objectToGetParams", "FacebookShareButton", "createShareButton", "props", "useIsMounted", "isMounted", "SocialMediaShareCount", "_e", "_f", "children", "shareCount", "className", "getCount", "url", "rest", "__objRest", "count", "setCount", "isLoading", "setIsLoading", "__spreadProps", "__spreadValues", "cx", "createShareCount", "ShareCount", "props", "getFacebookShareCount", "shareUrl", "callback", "endpoint", "jsonp", "err", "data", "FacebookShareCount", "HatenaIcon", "createIcon", "hatenaLink", "url", "title", "assert", "HatenaShareButton", "createShareButton", "props", "getHatenaShareCount", "shareUrl", "callback", "jsonp", "objectToGetParams", "err", "data", "HatenaShareCount", "createShareCount", "InstapaperIcon", "createIcon", "instapaperLink", "url", "title", "description", "assert", "objectToGetParams", "InstapaperShareButton", "createShareButton", "props", "LineIcon", "createIcon", "lineLink", "url", "title", "assert", "objectToGetParams", "LineShareButton", "createShareButton", "props", "LinkedinIcon", "createIcon", "LinkedinIcon$1", "linkedinLink", "url", "title", "summary", "source", "assert", "objectToGetParams", "LinkedinShareButton", "createShareButton", "LinkedinShareButton$1", "LivejournalIcon", "livejournalLink", "url", "title", "description", "assert", "objectToGetParams", "LivejournalShareButton", "createShareButton", "props", "MailruIcon", "createIcon", "mailruLink", "url", "title", "description", "imageUrl", "assert", "objectToGetParams", "MailruShareButton", "createShareButton", "props", "OKIcon", "createIcon", "okLink", "url", "title", "description", "image", "assert", "objectToGetParams", "OKShareButton", "createShareButton", "props", "getOKShareCount", "shareUrl", "callback", "index", "_count", "_b", "_a", "url", "count", "callbackIndex", "jsonp", "objectToGetParams", "OKShareCount", "createShareCount", "PinterestIcon", "createIcon", "pinterestLink", "url", "media", "description", "pinId", "assert", "objectToGetParams", "PinterestShareButton", "createShareButton", "props", "getPinterestShareCount", "shareUrl", "callback", "jsonp", "objectToGetParams", "err", "data", "PinterestShareCount", "createShareCount", "PocketIcon", "createIcon", "pocketLink", "url", "title", "assert", "objectToGetParams", "PocketShareButton", "createShareButton", "props", "RedditIcon", "createIcon", "redditLink", "url", "title", "assert", "objectToGetParams", "RedditShareButton", "createShareButton", "props", "gabLink", "url", "title", "assert", "objectToGetParams", "GabShareButton", "createShareButton", "props", "GabIcon", "createIcon", "getRedditShareCount", "shareUrl", "callback", "endpoint", "jsonp", "err", "response", "RedditShareCount", "createShareCount", "TelegramIcon", "createIcon", "telegramLink", "url", "title", "assert", "objectToGetParams", "TelegramShareButton", "createShareButton", "props", "TumblrIcon", "createIcon", "tumblrLink", "url", "title", "caption", "tags", "posttype", "assert", "objectToGetParams", "TumblrShareButton", "createShareButton", "props", "getTumblrShareCount", "shareUrl", "callback", "jsonp", "objectToGetParams", "err", "data", "TumblrShareCount", "createShareCount", "TwitterIcon", "createIcon", "TwitterIcon$1", "twitterLink", "url", "title", "via", "hashtags", "related", "assert", "TwitterShareButton", "createShareButton", "props", "TwitterShareButton$1", "ViberIcon", "viberLink", "url", "title", "separator", "assert", "objectToGetParams", "ViberShareButton", "createShareButton", "props", "VKIcon", "createIcon", "vkLink", "url", "title", "image", "noParse", "noVkLinks", "assert", "objectToGetParams", "VKShareButton", "createShareButton", "props", "getVKShareCount", "shareUrl", "callback", "index", "count", "_b", "_a", "url", "jsonp", "objectToGetParams", "VKShareCount", "createShareCount", "WeiboIcon", "createIcon", "weiboLink", "url", "title", "image", "assert", "objectToGetParams", "WeiboShareButton", "createShareButton", "props", "WhatsappIcon", "createIcon", "isMobileOrTablet", "whatsappLink", "url", "title", "separator", "assert", "objectToGetParams", "WhatsappShareButton", "createShareButton", "props", "WorkplaceIcon", "createIcon", "workplaceLink", "url", "quote", "hashtag", "assert", "objectToGetParams", "WorkplaceShareButton", "createShareButton", "props", "XIcon", "createIcon", "Social", "title", "props", "useMotifStyles", "shareUrl", "setShareUrl", "jsxs", "cx", "jsx", "LinkedinShareButton$1", "LinkedinIcon$1", "TwitterShareButton$1", "TwitterIcon$1", "heroMobileMinHeightPx", "heroDesktopMinHeightPx", "cutoffWithMediaPx", "contentMaxWith", "heroMobileAssetHeightPx", "heroCurtainOpacityCssVar", "alignItemsStartCss", "css", "alignItemsEndCss", "textContentCss", "m", "ZIndex", "mobileMediaQuery", "heroTopicsTransparencyCss", "hideTextOverflowCss", "heroCss", "boundaryCss", "smallMobileMediaQuery", "heroWithBreadcrumbsCss", "nonMobileMediaQuery", "compactBoundaryCss", "curtainCss", "headerCss", "eyebrowCss", "titleCss", "heroCompactTitleCss", "titleIncreasedFontSizeCss", "subTitleCss", "p1Css", "topicsContainerCss", "bodyCss", "p2Css", "callsToActionWrapperCss", "footerCss", "heroSocialContainerCss", "fitWindowCss", "backgroundContainerCss", "backgroundCss", "heroTitleContainerCss", "heroMediaCss", "heroScrollButtonWrapCss", "heroScrollButtonCss", "heroSplitCss", "reverseSplitCss", "splitItemCss", "splitMediaItemCss", "splitMediaCss", "iconSize", "headerMobileCss", "css", "p2Css", "mobileMediaQuery", "m", "nonMobileMediaQuery", "headerDesktopCss", "headerImageCss", "isDate", "date", "dateDesktopString", "dateMobileString", "HeroHeader", "content", "iconSrcs", "iconAltText", "textAlignMobile", "headerDataset", "className", "headerIsDate", "isDate", "headerMobile", "dateMobileString", "headerDesktop", "dateDesktopString", "icon", "jsx", "headerImageCss", "Picture", "jsxs", "Fragment", "cx", "headerDesktopCss", "dataSetToAttributes", "mobileAlignmentCss", "Alignment", "headerMobileCss", "import_react", "summaryCardHeight", "mobileSummaryCardHeight", "dataLineHeight", "summaryCardCss", "css", "m", "nonMobileMediaQuery", "summaryCardRowCss", "summaryCardImageCss", "largeDesktopMediaQuery", "extraLargeDesktopMediaQuery", "summaryCardTitleCss", "summaryCardTitleNoDateCss", "summaryCardTitleNoMediaNoDescriptionCss", "summaryCardTitleMediaNoDescriptionCss", "summaryCardTitleNoMediaDescriptionNoDateCss", "summaryCardTitleNoMediaDescriptionCss", "summaryCardTitleMediaDescriptionCss", "summaryCardDateCss", "summaryCardContainerCss", "summaryCardSkeletonContainerCss", "summaryCardDescriptionCss", "summaryCardDescriptionMediaCss", "summaryCardDescriptionNoMediaCss", "summaryCardPictureContainerCss", "summaryCardPictureCss", "summaryCardAnchorCss", "summaryCardSkeletonCss", "summaryCardSkeletonGapCss", "summaryCardDashCss", "summaryCardSkeletonAnimationCss", "skeletonLines", "SkeletonSummaryCard", "className", "summaryCardClassName", "cx", "summaryCardCss", "summaryCardContainerClassName", "summaryCardContainerCss", "summaryCardSkeletonContainerCss", "summaryCardImageClassName", "summaryCardImageCss", "summaryCardSkeletonCss", "summaryCardDashClassName", "summaryCardDashCss", "summaryCardSkeletonAnimationCss", "summaryCardRowClassName", "summaryCardRowCss", "summaryCardSkeletonGapCss", "jsxs", "jsx", "height", "items", "lineIndex", "widthPercentage", "itemIndex", "import_react", "SummaryCard", "date", "dateTime", "className", "title", "description", "onClick", "link", "imgSrcs", "imgAltText", "showMedia", "showDescription", "showDate", "dataset", "dateDataset", "titleDataset", "descriptionDataset", "mediaDataset", "eyebrowText", "stickers", "useMotifStyles", "Anchor", "PrimitivesContext", "rootClassName", "cx", "summaryCardCss", "summaryCardRowCss", "anchorRootClassName", "summaryCardAnchorCss", "summaryCardTitleClassName", "summaryCardTitleCss", "summaryCardTitleMediaDescriptionCss", "summaryCardTitleNoMediaNoDescriptionCss", "summaryCardTitleNoMediaDescriptionCss", "summaryCardTitleNoMediaDescriptionNoDateCss", "summaryCardTitleMediaNoDescriptionCss", "summaryCardTitleNoDateCss", "summaryCardDescriptionClassName", "summaryCardDescriptionCss", "summaryCardDescriptionMediaCss", "summaryCardDescriptionNoMediaCss", "innerContainer", "jsxs", "dataSetToAttributes", "summaryCardContainerCss", "jsx", "summaryCardDateCss", "formatDateToDatetime", "summaryCardImageCss", "PictureWithStickers", "summaryCardPictureContainerCss", "summaryCardPictureCss", "isSummaryCardElement", "elem", "asSummaryCard", "SummaryCard", "SkeletonSummaryCard", "typeAsFC", "heroMediaCss", "css", "m", "mobileMediaQuery", "heroWideMediaCss", "compactHeroMediaCss", "HeroMedia", "className", "foregroundMedia", "imgSrcs", "wrapMedia", "showMediaMobile", "size", "isMobile", "useIsMobile", "children", "isCarouselV3Element", "jsx", "Media", "cx", "heroMediaCss", "compactHeroMediaCss", "heroWideMediaCss", "isSummaryCardElement", "BackgroundMediaLayout", "Hero", "props", "ref", "useMotifStyles", "backgroundVideoSource", "backgroundPosterSource", "mobileBackgroundVideoSource", "body", "callsToAction", "fitWindow", "foregroundMedia", "defaultCurtainOpacityPercentage", "headerImgSrcs", "headerImgAltText", "eyebrow", "title", "motifScheme", "backgroundColor", "header", "bgImgSrcs", "bgImgAltText", "imgSrcs", "textAlign", "textAlignMobile", "verticalTextAlign", "VerticalAlignment", "shareable", "className", "footer", "anchorId", "eyebrowDataset", "titleDataset", "bodyDataset", "headerDataset", "postChildren", "showMediaMobile", "wrapMedia", "size", "subTitle", "subTitleDataset", "showScrollButton", "onScrollDownButtonClick", "backgroundMediaLayout", "breadcrumbs", "topics", "backgroundMediaStickers", "increaseTitleFontSize", "hasMedia", "width", "useWindowSize", "isMobile", "useIsMobile", "motifSchemeWithFallback", "getBackgroundClassName", "hideMedia", "mobileMaxWidth", "cutoffWithMediaPx", "hasBackgroundMedia", "isEmpty", "isCompact", "curtainOpacityPercentage", "isNullish", "isSplitBlock", "backgroundContent", "backgroundMediaStickersSized", "sticker", "StickerSize", "stickersDesktopOnlyCss", "jsx", "PictureWithStickers", "cx", "backgroundContainerCss", "splitItemCss", "splitMediaItemCss", "splitMediaCss", "backgroundCss", "VideoWithStickers", "alignMobileCss", "mobileAlignmentCss", "Alignment", "defaultTextAlign", "contentAlignmentCss", "alignmentCss", "verticalAlignCss", "alignItemsStartCss", "alignItemsEndCss", "showCurtain", "jsxs", "heroCss", "fitWindowCss", "heroSplitCss", "reverseSplitCss", "heroTopicsTransparencyCss", "curtainCss", "heroCurtainOpacityCssVar", "Breadcrumbs", "BlockBoundary", "boundaryCss", "heroWithBreadcrumbsCss", "compactBoundaryCss", "textContentCss", "hideTextOverflowCss", "HeroHeader", "headerCss", "eyebrowCss", "dataSetToAttributes", "heroTitleContainerCss", "titleCss", "heroCompactTitleCss", "titleIncreasedFontSizeCss", "subTitleCss", "bodyCss", "topicsContainerCss", "callsToActionWrapperCss", "footerCss", "HeroMedia", "heroMediaCss", "heroScrollButtonWrapCss", "IconButton", "heroScrollButtonCss", "Social", "heroSocialContainerCss", "import_react", "hyperLinkCss", "css", "m", "mobileMediaQuery", "nonMobileMediaQuery", "Hyperlink", "children", "link", "target", "onClick", "useMotifStyles", "Anchor", "PrimitivesContext", "jsx", "cx", "hyperLinkCss", "import_react", "imageButtonCss", "css", "ImageButton", "height", "imgSrcs", "url", "width", "onClick", "altText", "pictureClassName", "className", "useMotifStyles", "Anchor", "PrimitivesContext", "jsx", "cx", "Picture", "import_react", "immersiveScrollBlockCss", "css", "m", "boundaryCss", "nonMobileMediaQuery", "contentWrapperCss", "contentWrapperStartAlignmentCss", "textColumnCss", "textColumnStartAlignmentCss", "navigationWrapperCss", "navigationWrapperAlignmentCss", "activeColor", "activeDarkColor", "navigationElementCss", "motifScheme", "navigationElementActiveCss", "textWrapperCss", "mobileMediaQuery", "textStartCss", "textCenterCss", "textEndCss", "cardsColumnCss", "cardWrapperCss", "eyebrowCss", "titleCss", "h2Css", "textCss", "p1Css", "import_react", "useActiveCardObserver", "cardRefs", "childCount", "options", "threshold", "isEnabled", "activeCardIndex", "setActiveCardIndex", "cardElements", "intersectionRatios", "observerCallback", "entries", "entry", "bestIndex", "bestRatio", "bestThresholdIndex", "bestThresholdRatio", "i", "element", "ratio", "newIndex", "thresholds", "observer", "cardEl", "init_debounce", "import_react", "useWheelScrollAnimation", "childCount", "elementRefs", "isEnabled", "visibleCardIndices", "ticking", "cardElements", "element", "animateScales", "viewportCenterY", "cardIndex", "cardEl", "rect", "cardCenterY", "distance", "adjustedDistance", "progress", "scale", "onScroll", "observerCallback", "entries", "entry", "targetEl", "targetIndex", "observer", "debouncedAnimateScales", "debounce_default", "ImmersiveScrollBlock", "props", "anchor", "motifScheme", "backgroundColor", "children", "eyebrow", "text", "textAlignmentMobile", "Alignment", "tilesDirection", "title", "useMotifStyles", "cardRefs", "containerRef", "childCount", "isMobile", "useIsMobile", "titleId", "motifSchemeWithFallback", "getBackgroundClassName", "setCardRef", "el", "index", "useWheelScrollAnimation", "activeCardIndex", "useActiveCardObserver", "jsx", "cx", "immersiveScrollBlockCss", "BlockBoundary", "boundaryCss", "jsxs", "contentWrapperCss", "contentWrapperStartAlignmentCss", "textColumnCss", "textColumnStartAlignmentCss", "navigationWrapperCss", "navigationWrapperAlignmentCss", "_", "navigationElementCss", "navigationElementActiveCss", "textWrapperCss", "textStartCss", "textCenterCss", "textEndCss", "eyebrowCss", "titleCss", "textCss", "cardsColumnCss", "child", "cardWrapperCss", "latestPostItemWrapperCss", "css", "m", "latestPostItemTitleCss", "LatestPosts", "anchorId", "title", "items", "cta", "motifScheme", "backgroundColor", "scrollSnap", "className", "preChildren", "postChildren", "latestPostsBody", "jsx", "Fragment", "item", "index", "jsxs", "latestPostItemWrapperCss", "Category", "latestPostItemTitleCss", "AuthorByline", "Block", "Alignment", "Content", "keyframesAnimationCss", "css", "loadingBarContainerCss", "barCss", "ZIndex", "m", "LoadingBar", "className", "useMotifStyles", "jsx", "cx", "import_react", "ghostOutlineCss", "css", "m", "ghostCss", "snapLogoCss", "GhostSvg", "className", "width", "height", "useMotifStyles", "jsx", "cx", "jsxs", "ghostCss", "ghostOutlineCss", "SnapIncLogoSvg", "className", "useMotifStyles", "jsx", "cx", "snapLogoCss", "jsxs", "rootCss", "css", "customLogoCss", "m", "mobileMediaQuery", "labelCss", "actionCss", "Logo", "imgSrcs", "imageSource", "label", "url", "onClick", "innerLogoClassName", "className", "openInNewTab", "logoType", "ariaLabel", "Anchor", "PrimitivesContext", "logo", "jsx", "Picture", "SnapIncLogoSvg", "GhostSvg", "jsxs", "cx", "import_react", "import_react_dom", "alignmentCss", "VerticalAlignment", "css", "modalBackdropCss", "ZIndex", "m", "modalContentCss", "isBlockingClassName", "closeButtonCss", "mobileMediaQuery", "Modal", "className", "contentClassName", "isBlocking", "verticalAlignment", "VerticalAlignment", "onClose", "isDisplayed", "portalRoot", "style", "dataset", "children", "disableBackgroundScroll", "shouldAllowScrollEvent", "useMotifStyles", "modalRef", "setModalRef", "isMobile", "useIsMobile", "captureModalRef", "node", "useDisableScrollOutside", "modal", "jsx", "cx", "modalBackdropCss", "isBlockingClassName", "dataSetToAttributes", "jsxs", "modalContentCss", "alignmentCss", "IconButton", "closeButtonCss", "import_react", "import_react", "filtersCss", "css", "m", "containerCss", "columns", "mobileColumns", "mobileMediaQuery", "mobilePageContainerQuery", "wrapperCss", "coveredTileCss", "overlayCss", "titleCss", "highlightCss", "durationCss", "videoCss", "playButtonCss", "tileCss", "rows", "mobileRows", "posterCss", "posterImageCss", "lightBoxContainerCss", "lightBoxCss", "ZIndex", "lightBoxControlsCss", "lightBoxCaptionCss", "lightBoxVideoCss", "lightboxNavLeftIconCss", "lightboxNavRightIconCss", "MosaicFilters", "filters", "currentFilter", "onSelectFilter", "handleClick", "filterId", "handleKeyPress", "event", "jsx", "cx", "filtersCss", "id", "icon", "text", "i", "ToggleButton", "import_react", "MosaicLightBox", "tile", "handleKeyPress", "goNext", "goPrevious", "close", "className", "jsx", "Modal", "lightBoxContainerCss", "jsxs", "cx", "lightBoxCss", "Media", "lightBoxVideoCss", "lightBoxControlsCss", "IconButton", "lightboxNavLeftIconCss", "lightBoxCaptionCss", "lightboxNavRightIconCss", "import_react", "MosaicTile", "columns", "rows", "mobileColumns", "mobileRows", "cover", "poster", "preview", "showOverlay", "highlight", "title", "duration", "onEnter", "onLeave", "containerRef", "playing", "setPlaying", "ratio", "mobileRatio", "ratioCss", "css", "mobileMediaQuery", "onTileEnter", "video", "onTileLeave", "isVideoPlaying", "container", "jsxs", "cx", "wrapperCss", "coveredTileCss", "jsx", "Media", "videoCss", "posterCss", "posterImageCss", "overlayCss", "titleCss", "highlightCss", "durationCss", "playButtonCss", "Icon", "Mosaic", "tiles", "columns", "mobileColumns", "filters", "className", "lightboxClassName", "useMotifStyles", "currentTile", "setCurrentTile", "currentFilter", "setCurrentFilter", "isRTL", "setIsRTL", "containerRef", "node", "tileRefs", "goNext", "next", "goPrevious", "previous", "close", "handleKeyPress", "idx", "event", "filteredTiles", "t", "jsxs", "cx", "jsx", "MosaicLightBox", "MosaicFilters", "containerCss", "tile", "i", "tileCss", "el", "MosaicTile", "maxBlockWidthPx", "imageSubtopicWidthPx", "aspectRatio916MediaWidthPx", "mobileAspectRatio916MediaWidthPx", "boundaryCss", "css", "m", "largeDesktopMediaQuery", "mobileMediaQuery", "mainWrapperCss", "singleColumnCss", "reverseDirectionCss", "fullHeightCss", "blockContentWrapperCss", "mediaQueryForRange", "contentWrapperCss", "p2Css", "headerWrapperCss", "subtopicsWrapperCss", "subtopicCss", "p4Css", "subtopicContentWrapperCss", "customIconWrapperCss", "customIconCss", "subtopicSdsIconCss", "statSubtopicCss", "subtopicMediaWrapperCss", "subtopicMediaCss", "ctasContainerCss", "blockMediaWrapperCss", "mediaWrapperCss", "aspectRatio916Css", "mobileAspectRatio916Css", "aspectRatio169Css", "mobileAspectRatio169Css", "aspectRatio32Css", "mobileAspectRatio32Css", "aspectRatio11Css", "mobileAspectRatio11Css", "ImageSubtopic", "props", "title", "imgSrcs", "jsxs", "cx", "subtopicCss", "subtopicContentWrapperCss", "jsx", "subtopicMediaWrapperCss", "Media", "subtopicMediaCss", "h6Css", "MultiValuePropBlock", "props", "isMobile", "useIsMobile", "anchor", "motifScheme", "backgroundColor", "title", "subtitle", "body", "children", "mediaSources", "desktopMediaAspectRatio", "mobileMediaAspectRatio", "mediaDirection", "Alignment", "autoplayCarousel", "callsToAction", "fullHeight", "className", "style", "stickers", "isRtl", "mediaSourcesCount", "MultiValuePropBlockMedia", "jsx", "blockMediaWrapperCss", "CarouselV3", "item", "index", "CarouselCardItem", "cx", "aspectRatio916Css", "mobileAspectRatio916Css", "MediaWithStickers", "mediaWrapperCss", "aspectRatio169Css", "aspectRatio32Css", "aspectRatio11Css", "mobileAspectRatio169Css", "mobileAspectRatio32Css", "mobileAspectRatio11Css", "getMotifSchemeForLegacyBackgroundColor", "mainWrapperCss", "fullHeightCss", "jsxs", "BlockBoundary", "boundaryCss", "reverseDirectionCss", "blockContentWrapperCss", "singleColumnCss", "contentWrapperCss", "headerWrapperCss", "h3Css", "p1Css", "subtopicsWrapperCss", "ctasContainerCss", "StatSubtopic", "stat", "subtitle", "jsxs", "cx", "subtopicCss", "statSubtopicCss", "jsx", "h3Css", "TextSubtopic", "props", "title", "body", "icon", "imgSrcs", "jsxs", "subtopicCss", "jsx", "Icon", "subtopicSdsIconCss", "Picture", "customIconWrapperCss", "customIconCss", "subtopicContentWrapperCss", "h6Css", "import_react", "slidePanelCss", "VideoPanelAlignment", "css", "slidePanelMobileCss", "mobileMediaQuery", "multiVideoBlockCss", "backgroundImageCss", "togglePanelWithBreakSpacerWrapCss", "togglePanelWrapCss", "import_react", "visibleVideoCss", "css", "videoCss", "VideoItem", "hasVideoSync", "video", "currentTime", "videoRef", "isNullish", "handleTimeUpdate", "event", "jsx", "Video", "cx", "MultiVideoBlock", "anchorId", "children", "className", "hasVideoSync", "id", "mobilePrimaryVideos", "mobileSecondaryVideos", "onVideoChange", "noop", "panelPosition", "primaryVideos", "style", "secondaryVideos", "toggleButtonIcons", "togglePanelClassName", "togglePanelLabel", "preChildren", "postChildren", "sliderChecked", "setSliderChecked", "selectedVideoIndex", "setSelectedVideoIndex", "currentTime", "useMotifStyles", "isMobile", "useMediaMode", "MediaMode", "videoGroup", "videos", "selectedVideo", "allVideos", "handleButtonToggle", "index", "handleSliderCheck", "isSliderChecked", "prefetchedVideos", "video", "jsx", "jsxs", "cx", "multiVideoBlockCss", "backgroundImageCss", "VideoItem", "togglePanelWithBreakSpacerWrapCss", "togglePanelWrapCss", "TogglePanel", "slidePanelCss", "slidePanelMobileCss", "init_debounce", "import_react", "defaultIsUrlCurrent", "location", "destinationUrl", "base", "destUrl", "currentUrlHost", "currentUrlPath", "import_react", "IconOrImage", "fill", "icon", "media", "size", "jsx", "Icon", "altText", "imgSrcs", "Picture", "navigatorItemFeaturedLinkTitleClassName", "navigatorItemFeaturedLinkCss", "css", "m", "navigatorItemFeaturedLinkActiveCss", "navigatorItemFeaturedLinkTitleCss", "navigatorItemFeaturedLinkDescriptionCss", "navigatorItemFeaturedLinkCtaContainerCss", "navigatorItemFeaturedLinkCtaTextCss", "nonMobileMediaQuery", "navigatorItemFeaturedLinkCtaIconCss", "NavigatorItemFeaturedLink", "url", "title", "dataset", "description", "icon", "media", "ctaLabel", "onClick", "isUrlCurrent", "Anchor", "PrimitivesContext", "jsxs", "cx", "navigatorItemFeaturedLinkCss", "navigatorItemFeaturedLinkActiveCss", "dataSetToAttributes", "jsx", "IconOrImage", "m", "navigatorItemFeaturedLinkTitleClassName", "navigatorItemFeaturedLinkTitleCss", "navigatorItemFeaturedLinkDescriptionCss", "navigatorItemFeaturedLinkCtaContainerCss", "navigatorItemFeaturedLinkCtaTextCss", "Icon", "navigatorItemFeaturedLinkCtaIconCss", "import_react", "navigatorItemLinkTextTitleClassName", "navigatorItemLinkCss", "css", "m", "navigatorItemLinkActiveCss", "navigatorItemLinkIconCss", "navigatorItemLinkTextCss", "navigatorItemLinkTextTitleCss", "navigatorItemLinkTextDescriptionCss", "navigatorItemLinkSpacerCss", "NavigatorItemLink", "url", "title", "dataset", "description", "icon", "media", "showSpacer", "onClick", "isUrlCurrent", "Anchor", "PrimitivesContext", "jsxs", "Fragment", "cx", "navigatorItemLinkCss", "navigatorItemLinkActiveCss", "dataSetToAttributes", "jsx", "navigatorItemLinkIconCss", "IconOrImage", "m", "navigatorItemLinkTextCss", "navigatorItemLinkTextTitleClassName", "navigatorItemLinkTextTitleCss", "navigatorItemLinkTextDescriptionCss", "navigatorItemLinkSpacerCss", "getColsWithDivider", "col1Label", "col1Items", "col2Label", "col2Items", "col3Label", "col3Items", "hasItems", "col", "i", "arr", "prevCol", "isFirstCol", "hasDivider", "id", "navigatorItemDesktopCss", "css", "m", "mobileMediaQuery", "navigatorItemDesktopClickableCss", "navigatorItemDesktopIconCss", "navigatorItemDesktopMenuCss", "navigatorItemDesktopMenu4ColCss", "navigatorItemDesktopRightAlignedCss", "navigatorItemDesktopLeftAlignedCss", "navigatorItemDesktopMenuExpandedCss", "navigatorItemDesktopMenuGridCss", "navigatorItemDesktopMenuColCss", "navigatorItemDesktopMenuColWithDividerCss", "navigatorItemDesktopMenuColLabelCss", "defaultIsUrlCurrent", "url", "currentLocation", "NavigatorItemDesktop", "onClick", "isSelected", "title", "dataset", "analytics", "col1Label", "col1Items", "col2Label", "col2Items", "col3Label", "col3Items", "featuredItem", "useMotifStyles", "Anchor", "PrimitivesContext", "isUrlCurrent", "GlobalHeaderContext", "shouldSelect", "setShouldSelect", "isExpanded", "setIsExpanded", "navAlignment", "setNavAlignment", "isRelevantUrl", "item", "parentRef", "menuRef", "iconName", "positionNavMenu", "deviceWidth", "parentLeft", "parentWidth", "parentRight", "menuWidth", "centerAlignedMenuLeft", "centerAlignedMenuRight", "shouldRightAlign", "maxWidth", "shouldLeftAlign", "Alignment", "onResize", "debounce_default", "clickableItemClassName", "navigatorItemDesktopClickableCss", "titleClassName", "cx", "linkOrText", "jsx", "handleTriggerKeyPress", "e", "focusableElements", "firstElement", "lastElement", "handleMenuKeyPress", "handleMouseEnter", "handleMouseLeave", "numOfColsWithItems", "c", "numOfSpacers", "navigatorItemDesktopCss", "dataSetToAttributes", "hasCol1Descriptions", "hasCol2Descriptions", "hasCol3Descriptions", "colsWithDivider", "getColsWithDivider", "showCol1Icons", "showCol2Icons", "showCol3Icons", "handleItemLinkClick", "label", "jsxs", "navigatorItemDesktopRightAlignedCss", "navigatorItemDesktopLeftAlignedCss", "Icon", "navigatorItemDesktopIconCss", "navigatorItemDesktopMenuCss", "navigatorItemDesktopMenuExpandedCss", "navigatorItemDesktopMenu4ColCss", "navigatorItemDesktopMenuGridCss", "navigatorItemDesktopMenuColCss", "navigatorItemDesktopMenuColWithDividerCss", "navigatorItemDesktopMenuColLabelCss", "description", "icon", "media", "i", "NavigatorItemLink", "_", "NavigatorItemFeaturedLink", "import_react", "navigatorItemMobileCss", "css", "m", "navigatorItemMobileColCss", "navigatorItemMobileColWithDividerCss", "navigatorItemMobileTextCss", "navigatorItemActiveMobileTextCss", "navigatorItemMobileColLabelCss", "navigatorItemMobileFeaturedItemCss", "NavigatorItemMobile", "col1Label", "col1Items", "col2Label", "col2Items", "col3Label", "col3Items", "featuredItem", "onClick", "className", "useMotifStyles", "Anchor", "PrimitivesContext", "isUrlCurrent", "GlobalHeaderContext", "colsWithDivider", "getColsWithDivider", "NavigatorItemLinkMobile", "url", "title", "analytics", "dataset", "jsx", "cx", "navigatorItemMobileTextCss", "navigatorItemActiveMobileTextCss", "dataSetToAttributes", "jsxs", "navigatorItemMobileCss", "navigatorItemMobileColCss", "navigatorItemMobileColWithDividerCss", "navigatorItemMobileColLabelCss", "i", "navigatorItemMobileFeaturedItemCss", "NavigatorItemFeaturedLink", "import_react", "scrollSnapItemCss", "css", "ScrollSnapContainer", "children", "html", "body", "childrenArray", "jsx", "Fragment", "child", "index", "sliderChild", "isLastItem", "cx", "Page", "motifScheme", "pageBackgroundColor", "backgroundImageSources", "backgroundMediaStyle", "BackgroundStyle", "backgroundPosterSource", "backgroundVideoSource", "children", "pageClassName", "mobileBackgroundVideoSource", "scrollSnap", "gutterMatchesPageBackground", "useMotifStyles", "innerContainerClassName", "cx", "innerContainerCss", "getBackgroundClassName", "pageGutterCss", "pageTransparentBgCss", "pageBgColorCss", "gutterColorCss", "m", "jsx", "outerContainerCss", "jsxs", "Picture", "fixedBackgroundMediaCss", "backgroundMediaCss", "Video", "ScrollSnapContainer", "import_react", "paginationCss", "css", "m", "nonMobileMediaQuery", "paginationItemButtonCss", "smallMobileMediaQuery", "paginationItemCss", "activePaginationItemCss", "arrowButtonCss", "previousButtonCss", "nextButtonCss", "PaginationItem", "ariaLabel", "children", "disabled", "handlePageChange", "isActive", "type", "jsx", "IconButton", "cx", "arrowButtonCss", "previousButtonCss", "nextButtonCss", "paginationItemCss", "activePaginationItemCss", "paginationItemButtonCss", "range", "start", "end", "length", "_", "index", "getPaginationItems", "totalPages", "currentPage", "siblingsStart", "siblingsEnd", "hasStartEllipsis", "hasEndEllipsis", "pageBeforeEllipses", "pageAfterEllipses", "leftEllipsisRange", "rightEllipsisRange", "Pagination", "ariaLabel", "className", "totalPages", "currentPage", "onChange", "useMotifStyles", "formatMessage", "MessageContext", "previousPageMessage", "nextPageMessage", "goToPageMessage", "pageNumber", "handlePageChange", "newPage", "paginationItems", "getPaginationItems", "jsx", "cx", "jsxs", "paginationCss", "PaginationItem", "item", "index", "bigQuoteCss", "css", "startQuoteCss", "endQuoteCss", "quoteCss", "m", "authorCss", "nonMobileMediaQuery", "mobileMediaQuery", "Quote", "author", "children", "useMotifStyles", "jsxs", "cx", "quoteCss", "jsx", "startQuoteCss", "bigQuoteCss", "endQuoteCss", "authorCss", "bigQuoteCss", "css", "startQuoteCss", "endQuoteCss", "quoteCss", "m", "nonMobileMediaQuery", "mobileMediaQuery", "quoteWithoutImageCss", "quoteIconCss", "quoteTextCss", "longQuoteTextCss", "imageButtonContainerCss", "quoteIconContainerCss", "authorCss", "authorWithoutLogoCss", "logoWithoutAuthorCss", "quoteContainerCss", "quoteMediaContainerCss", "imageCss", "videoCss", "QuoteV2", "author", "children", "logoImageSrc", "isRtl", "isLongQuote", "imgSrcs", "videoSrc", "mobileVideoSrc", "useMotifStyles", "authorStylesWithSpacing", "authorCss", "authorWithoutLogoCss", "quoteTextStyles", "longQuoteTextCss", "quoteTextCss", "quoteIcon", "mediaCss", "cx", "videoCss", "imageCss", "showMedia", "jsxs", "quoteContainerCss", "jsx", "quoteMediaContainerCss", "Media", "quoteCss", "quoteWithoutImageCss", "quoteIconContainerCss", "quoteIconCss", "imageButtonContainerCss", "logoWithoutAuthorCss", "ImageButton", "import_react", "import_react", "radioSelectOptionsWrapperCss", "css", "m", "readonlyCss", "inputRadioWrapperCss", "radioCss", "radioLabelCss", "inputErrorCss", "InputRadio", "props", "id", "handleChange", "handleInvalid", "hasError", "label", "name", "readOnly", "value", "inputProps", "state", "FormContext", "formFieldValue", "getStringValue", "inputValue", "jsxs", "inputRadioWrapperCss", "jsx", "cx", "radioCss", "inputErrorCss", "radioLabelCss", "readonlyCss", "RadioSelectField", "props", "error", "helpText", "initialValue", "label", "name", "options", "required", "shouldResetToInitial", "state", "dispatch", "FormContext", "fieldMeta", "handleChange", "e", "handleInvalid", "jsx", "Field", "radioSelectOptionsWrapperCss", "key", "value", "InputRadio", "containerCss", "css", "innerContainerCss", "ScrollAnimatedSection", "className", "containerRef", "innerContainerClassName", "children", "dataset", "style", "anchorId", "jsx", "cx", "containerCss", "dataSetToAttributes", "innerContainerCss", "import_react", "ScrollAnimatedVideo", "calculateScrollProgress", "className", "videoMp4Src", "videoWebmSrc", "videoStart", "videoEnd", "scrubStart", "scrubEnd", "style", "dataset", "videoRef", "finalVideoSrc", "BrowserFeaturesContext", "browser", "scrollCallback", "scrollPercent", "scrubRange", "animationPercent", "animationDuration", "newTime", "jsx", "dataSetToAttributes", "import_react", "contentMaxWidthPx", "contentMaxWidthPxMobile", "sideOverlayCss", "css", "m", "nonMobileMediaQuery", "mobileMediaQuery", "sideOverlayDirectionRightCss", "directionalOverlayPanelActiveCss", "sideOverlayDirectionLeftCss", "sideOverlayWithSideNavCss", "desktopSideNavWidthPx", "sideOverlayWithSideNavDirectionLeftCss", "sideOverlayHeaderCss", "sideOverlayCloseButtonCss", "sideOverlayListCss", "sideOverlayTermCss", "sideOverlayDefinitionCss", "sideOverlayBackdropMobileOnlyCss", "sideOverlayDesktopSizePercent", "sideOverlayMobileSizePercent", "SideOverlay", "isOpen", "title", "body", "onClose", "className", "hasSideNav", "style", "dataset", "dataTestId", "direction", "useMotifStyles", "closeButtonRef", "handleBackdropClick", "event", "isLeft", "jsxs", "DirectionalOverlay", "sideOverlayBackdropMobileOnlyCss", "cx", "sideOverlayCss", "sideOverlayDirectionLeftCss", "sideOverlayDirectionRightCss", "sideOverlayWithSideNavCss", "sideOverlayWithSideNavDirectionLeftCss", "jsx", "sideOverlayHeaderCss", "sideOverlayCloseButtonCss", "Icon", "m", "sideOverlayListCss", "sideOverlayTermCss", "sideOverlayDefinitionCss", "import_react", "iframeContainerCss", "css", "blockQuoteCss", "frameContainerCss", "linkCss", "frameCss", "spacerCss", "footerCss", "footerLinkCss", "footerTextCss", "SnapchatEmbed", "props", "url", "dataset", "className", "ref", "useMotifStyles", "Anchor", "PrimitivesContext", "ensureSingleScript", "event", "newUrl", "urlWithoutParams", "jsx", "cx", "iframeContainerCss", "dataSetToAttributes", "jsxs", "blockQuoteCss", "frameContainerCss", "linkCss", "frameCss", "spacerCss", "footerCss", "footerLinkCss", "footerTextCss", "import_react", "minHeightPx", "mobileMediaMinHeightPx", "contentMaxWidthPx", "mediaCaptionMaxWidthPx", "splitBlockWrapperCss", "css", "m", "mobileMediaQuery", "mobilePageContainerQuery", "fitWindowCss", "reverseSplitCss", "textWrapperCss", "twoColumnCollapseMediaQuery", "twoColumnCollapsePageContainerQuery", "contentWrapperCss", "nonMobileMediaQuery", "nonMobilePageContainerQuery", "titleCss", "h1Css", "subtitleCss", "p1Css", "bodyCss", "p2Css", "primitiveElementClassNames", "ctaWrapperCss", "mediaWrapperCss", "backgroundCss", "backgroundMediaCss", "mediaCaptionCss", "White", "p3Css", "SplitBlock", "props", "anchorId", "motifScheme", "backgroundColor", "body", "callsToAction", "fitWindow", "imageSources", "imageAltText", "mediaCaption", "mediaContentType", "mediaDirection", "Alignment", "mobileMediaContentType", "mobileVideoSource", "subtitle", "textAlignment", "textAlignmentMobile", "title", "verticalTextAlignment", "videoSource", "posterSource", "stickers", "callsToActionCount", "motifSchemeWithFallback", "getBackgroundClassName", "stickersMedium", "sticker", "StickerSize", "jsxs", "cx", "splitBlockWrapperCss", "fitWindowCss", "reverseSplitCss", "jsx", "textWrapperCss", "contentWrapperCss", "alignmentCss", "mobileAlignmentCss", "justifyContentCss", "titleCss", "subtitleCss", "bodyCss", "ctaWrapperCss", "mediaWrapperCss", "PictureWithStickers", "backgroundCss", "backgroundMediaCss", "VideoWithStickers", "mediaCaptionCss", "import_react", "statsContainerCss", "css", "m", "statCss", "supplementaryTextCss", "Stats", "stat", "optionalSupplementaryText", "animation", "style", "useMotifStyles", "statsRef", "animationCssProps", "useAnimations", "jsxs", "cx", "statsContainerCss", "jsx", "statCss", "supplementaryTextCss", "import_react", "navCss", "css", "m", "ZIndex", "mobileMediaQuery", "itemsWrapCss", "itemsCss", "itemCss", "underlineHeight", "itemLinkCss", "itemLinkActiveCss", "leftGradientCss", "rightGradientCss", "SubNavigation", "motifScheme", "backgroundColor", "className", "children", "horizontalScrollRef", "dataset", "useMotifStyles", "windowWidth", "useWindowSize", "isRTL", "setIsRTL", "scrollPosition", "setScrollPosition", "useBrowserLayoutEffect", "element", "listener", "parentElementWidth", "totalElementWidth", "isGradientLeft", "isGradientRight", "jsxs", "cx", "navCss", "getBackgroundClassName", "dataSetToAttributes", "jsx", "leftGradientCss", "itemsWrapCss", "itemsCss", "rightGradientCss", "import_react", "SubNavigationItem", "href", "isActive", "onLinkClick", "className", "children", "dataset", "Anchor", "PrimitivesContext", "ref", "jsx", "cx", "itemCss", "dataSetToAttributes", "itemLinkCss", "itemLinkActiveCss", "import_react", "tabsPanelsCss", "css", "mobileMediaQuery", "m", "arrowButtonContainerCss", "ZIndex", "arrowCss", "leftGradientCss", "rightGradientCss", "tabsContainerCss", "tabsContainerOverflowMobileCss", "tabItemContainerCss", "tabItemContainterOverflowMobileCss", "tabItemListCss", "tabItemListCenterCss", "tabItemListStartCss", "itemLinkUnderlineCss", "itemLinkUnderlineActiveCss", "itemLinkCss", "nonMobileMediaQuery", "itemLinkActiveCss", "tabBreakCss", "TabArrows", "direction", "onClick", "isDisabled", "jsx", "arrowCss", "Icon", "TabItems", "items", "className", "selectTab", "selectedTab", "useMotifStyles", "containerRef", "listContainerRef", "arrowContainerRef", "isRTL", "setIsRTL", "scrollPosition", "setScrollPosition", "hasOverflow", "setHasOverflow", "windowWidth", "useWindowSize", "centerTab", "index", "selectedTabItem", "scroll", "scrollNum", "newScrollPosition", "parentTabWidth", "totalTabWidth", "onScroll", "direction", "useBrowserLayoutEffect", "totalParentWidth", "arrowWidth", "isMobile", "useMediaMode", "MediaMode", "swipePosition", "setSwipePosition", "element", "swipeListener", "scrollListener", "isDisabledLeft", "isDisabledRight", "isGradientLeft", "isGradientRight", "jsxs", "cx", "tabsContainerCss", "tabsContainerOverflowMobileCss", "jsx", "leftGradientCss", "tabItemContainerCss", "tabItemContainterOverflowMobileCss", "tabItemListCss", "tabItemListStartCss", "tabItemListCenterCss", "item", "isSelected", "itemLinkCss", "itemLinkActiveCss", "rightGradientCss", "arrowButtonContainerCss", "TabArrows", "import_react", "contentContainerStyles", "contentContainerStyle1ColumnCss", "contentContainerStyle2ColumnCss", "contentContainerStyle3ColumnCss", "TabsPanels", "items", "selectedTab", "jsx", "tabsPanelsCss", "item", "index", "cx", "contentContainerCss", "content", "Tabs", "items", "defaultSelectedTab", "onSelectTab", "selectedTab", "selectTab", "eventListenersRef", "useMotifStyles", "handleSelectTab", "index", "listener", "jsx", "TabsContext", "l", "jsxs", "TabItems", "TabsPanels", "TileImageSize", "TileImageFit", "labelLineHeight", "labelHeight", "textLineHeight", "imgWidth", "imgWidthWithIcon", "imgHeight", "imgHeightWithIcon", "tileWidth", "tileHeight", "imageHeightForImageSize", "TileImageSize", "titleHeightForImageSize", "mapValues", "height", "titleLinesForImageSize", "tileCarouselMargin", "import_react", "anchorCss", "css", "tileCss", "tileWidth", "tileHeight", "m", "tileImageClassName", "imageSource", "imageHeight", "imageFit", "imagePadding", "TileImageFit", "tileLabelCss", "labelLineHeight", "tileTitleCss", "innerTitleCss", "p1Css", "tileImageWithUserIconClassName", "tileVideoWithUserIconClassName", "mobileMediaQuery", "imgWidthWithIcon", "tileWithUserIconCss", "tileUserIconCss", "tileTitleWithUserIconCss", "innerTitleWithUserIconCss", "tileLabelWithUserIconCss", "p2Css", "tilePictureCss", "coverCss", "containCss", "tileNoBgImgCss", "pointerCss", "tileTitleHeight", "imageSize", "label", "baseHeight", "titleHeightForImageSize", "labelHeight", "tileTitleLines", "h", "textLineHeight", "Tile", "className", "title", "imageSource", "videoSource", "iconImageSource", "label", "onClick", "imageSize", "TileImageSize", "imageFit", "TileImageFit", "imagePadding", "link", "tilesLayout", "isRTL", "iconImgSrcs", "iconAltText", "imgSrcs", "imgAltText", "useMotifStyles", "Anchor", "PrimitivesContext", "dir", "onClickWrapped", "event", "imageHeight", "imageHeightForImageSize", "useTileImageClassName", "tileImageClassName", "useTileImageWithUserIconClassName", "tileImageWithUserIconClassName", "imgHeightWithIcon", "useTileVideoWithUserIconClassName", "tileVideoWithUserIconClassName", "defaultInner", "jsxs", "cx", "pointerCss", "tileCss", "jsx", "tileNoBgImgCss", "Picture", "tilePictureCss", "coverCss", "containCss", "tileTitleCss", "css", "titleHeightForImageSize", "labelLineHeight", "tileLabelCss", "innerTitleCss", "tileTitleLines", "tileTitleHeight", "tilesInner", "tileWithUserIconCss", "Media", "tileUserIconCss", "tileTitleWithUserIconCss", "innerTitleWithUserIconCss", "tileLabelWithUserIconCss", "anchorCss", "topicStylesCss", "css", "m", "Topic", "props", "useMotifStyles", "displayText", "url", "jsx", "Anchor", "cx", "topicStylesCss", "skeletonWrapperCss", "css", "White", "m", "nonTwoColumnCollapseMediaQuery", "skeletonChartCss", "skeletonSvgCss", "skeletonSvgBackgroundCss", "skeletonSvgMaskCss", "skeletonSvgGradientDarkColorCss", "skeletonSvgGradientLightColorCss", "animationDuration", "ChartSkeleton", "useMotifStyles", "jsx", "cx", "skeletonWrapperCss", "skeletonChartCss", "jsxs", "skeletonSvgCss", "skeletonSvgGradientDarkColorCss", "skeletonSvgGradientLightColorCss", "skeletonSvgMaskCss", "skeletonSvgBackgroundCss", "import_react", "ChartToggleButton", "children", "active", "onClick", "className", "cx", "buttonCss", "buttonActiveClassName", "jsx", "ChartToggleButtons", "items", "selectedChart", "selectChart", "handleOnClick", "index", "wrapperClassName", "cx", "buttonsWrapperCss", "buttonsWrapperClassName", "jsx", "buttonsCss", "title", "ChartToggleButton", "TabsPanels", "items", "selectedChart", "jsx", "panelsCss", "content", "index", "contentContainerStyle1ColumnCss", "ChartToggle", "items", "selectedChart", "selectChart", "useMotifStyles", "onToggle", "jsxs", "jsx", "ChartToggleButtons", "TabsPanels", "ChartTogglePanelsV2", "items", "selectedChart", "jsx", "Fragment", "content", "index", "import_react", "ChartToggleDropdown", "label", "items", "selectedChart", "selectChart", "handleOnClick", "item", "dropdownItems", "index", "jsxs", "cx", "dropdownWrapperClassName", "dropdownCss", "noLabelCss", "jsx", "DropdownMenu", "ChartToggleV2", "items", "label", "isLoading", "selectedChart", "selectChart", "useMotifStyles", "onToggle", "jsx", "DropdownSkeleton", "jsxs", "Fragment", "ChartToggleDropdown", "ChartTogglePanelsV2", "ChartToggleWrapper", "children", "jsx", "cx", "chartToggleWrapperCss", "import_react", "import_react", "defaultLocaleCode", "defaultSupportedLocales", "defaultIsUrlCurrent", "pathOrUrl", "url", "defaults", "GlobalComponentsContext", "error", "GlobalComponentsContextProvider", "children", "value", "jsx", "merge_default", "googleTagDataLayerSet", "document", "GTMID", "nonce", "configureDataLayer", "createdScriptElement", "toggleGoogleTracking", "GAID", "enabled", "identifier", "getGaidWithPrefix", "input", "enableGoogleTagManager", "windowGaArgumentSetter", "args", "googleAnalyticsArgumentsSet", "enableGoogleAnalytics", "gaPlugins", "plugin", "GA4Script", "enablePerformanceAnalytics", "plugins", "gaIdentifier", "import_react", "localeCookie", "localeDropdownCss", "css", "dropdownMenuClassName", "LocaleDropdown", "currentLocale", "supportedLocales", "onLocaleChange", "className", "buttonComponent", "context", "GlobalComponentsContext", "defaultSupportedLocales", "localeArray", "onSelect", "item", "localeCode", "api", "localeCookie", "getTopLevelDomain", "Action", "l1", "l2", "dropdownItems", "locale", "displayText", "localeMap", "jsx", "DropdownMenu", "cx", "localeDropdownCss", "defaultLocaleCode", "import_react", "normalizeCss", "css", "m", "cookieTitleFontRampCss", "h5Css", "globalCss", "cookieModalHeaderCss", "richTextCss", "cookieModalRichTextCss", "nonMobileMediaQuery", "mobileMediaQuery", "cookieModalSettingsScreenCss", "cookieModalFooterCss", "smallMobileMediaQuery", "settingsPageFooterCss", "contentCss", "cookieModalCss", "cookieSettingsPageCss", "SdsmCookieModal", "backgroundType", "className", "children", "isDisplayed", "portalRoot", "useMotifStyles", "mode", "useMediaMode", "windowWidth", "useWindowSize", "modalAlignment", "setModalAlignment", "VerticalAlignment", "alignment", "smallMobileMaxWidth", "jsx", "Modal", "cx", "globalCss", "getBackgroundClassName", "cookieModalCss", "contentCss", "SdsmComponents", "text", "isDisabled", "isPrimary", "onClick", "type", "ButtonType", "jsx", "Button", "currentLocale", "supportedLocales", "containerProvider", "onLocaleChange", "LocaleDropdown", "backgroundType", "children", "isDisplayed", "portalRoot", "SdsmCookieModal", "cx", "contentCss", "getBackgroundClassName", "id", "isChecked", "onToggle", "ToggleSlider", "CookieModal", "portalRoot", "cookieDomain", "supportedLocales", "GTMID", "GAID", "nonce", "plugins", "onLocaleChange", "userOnComplete", "preferencesAcceptedCallback", "performanceAnalyticsCallback", "marketingAnalyticsCallback", "backgroundType", "forceVisible", "globalPrivacyControl", "onGlobalPrivacyControlSet", "toggleGoogleTracking", "context", "GlobalComponentsContext", "Anchor", "globalApolloClient", "currentLocale", "isPreview", "isSSR", "onEvent", "onError", "defaultSupportedLocales", "providerProps", "SdsmComponents", "jsx", "PrimitivesProvider", "CookieProvider", "wrapped", "props", "cookieAcceptance", "userLocation", "configureDataLayer", "enablePerformanceAnalytics", "label", "import_react", "CookieSettings", "backgroundType", "cookieDomain", "useMotifStyles", "context", "GlobalComponentsContext", "Anchor", "currentLocale", "isPreview", "isSSR", "onEvent", "onError", "globalApolloClient", "providerProps", "SdsmComponents", "settingsProps", "jsx", "PrimitivesProvider", "cx", "globalCss", "cookieSettingsPageCss", "CookieProvider", "wrapped", "import_react", "import_react", "FooterV3CollectionQueryDocumentType", "GlobalNavConfigCollectionQueryDocumentType", "snakeCase", "createCompounder_default", "result", "word", "index", "snakeCase_default", "import_react", "defaultTrackingParameters", "FooterItemV3", "props", "id", "url", "title", "analyticsLabel", "isUrlCurrent", "onEvent", "hostname", "GlobalComponentsContext", "trackingParameters", "snakeCase_default", "trackedUrl", "appendTrackingParameters", "onClick", "Action", "jsx", "FooterItemV2", "FooterGroup", "id", "title", "items", "onClick", "orientation", "isFooterBar", "beforeItems", "afterItems", "onToggle", "itemsToRender", "item", "i", "jsx", "FooterItemV3", "jsxs", "localeDropdownContainerCss", "css", "nonMobileMediaQuery", "logoWrapperCss", "m", "lightBgSnapLogoCss", "localeDropdownContainerCss", "css", "mobileMediaQuery", "dropdownCss", "m", "horizontalDropdownCss", "titleCss", "FooterLocaleDropdown", "title", "orientation", "buttonComponent", "jsxs", "cx", "dropdownCss", "horizontalDropdownCss", "jsx", "titleCss", "LocaleDropdown", "localeDropdownContainerCss", "mergeFooterData", "globalGroups", "customGroups", "cookieSettingsUrl", "clonedCustomGroups", "clone_default", "computed", "result", "curGroup", "spaceItemIndex", "group", "genericItems", "contentfulToGenericGroup", "spaceGroup", "mergedGroup", "restMapped", "filterFooterDomains", "collection", "domain", "item", "items", "FooterCollectionV3", "customColumns", "customFooterBar", "motifScheme", "backgroundColor", "logo", "socialBar", "footerType", "cookieSettingsUrl", "hasSideNav", "customLocaleDropdownButton", "className", "onGroupToggle", "Anchor", "supportedLocales", "currentLocale", "hostname", "isPreview", "isSSR", "globalApolloClient", "GlobalComponentsContext", "data", "loading", "error", "useGlobalComponentsContentfulQuery", "FooterV3CollectionQueryDocumentType", "defaultLocaleCode", "motifSchemeWithFallback", "getBackgroundClassName", "hasMultipleLanguages", "footerProps", "head_default", "globalFooterColumnsItems", "globalFooterColumnsCollectionGroups", "filterFooterDomains", "globalFooterBarItems", "globalFooterBarCollectionGroups", "localeDropdownData", "group", "localeDropdownItem", "i", "columnsGroups", "mergeFooterData", "barGroups", "finalLogo", "jsx", "Logo", "logoWrapperCss", "lightBgSnapLogoCss", "localeDropdown", "localeDropdownContainerCss", "FooterLocaleDropdown", "output", "jsxs", "FooterV2", "FooterBar", "FooterGroup", "footerBar", "footerColumns", "FooterColumns", "PrimitivesProvider", "GlobalFooter", "footerType", "onGroupToggle", "props", "onEvent", "GlobalComponentsContext", "handleGroupToggle", "groupId", "groupTitle", "Action", "jsx", "FooterCollectionV3", "import_react", "import_react", "import_react", "import_react", "Button", "props", "Anchor", "onEvent", "GlobalComponentsContext", "url", "target", "buttonType", "theme", "title", "size", "image", "iconName", "jsx", "PrimitivesProvider", "Action", "PlainRichText", "CallToAction", "props", "onError", "GlobalComponentsContext", "presentation", "analytics", "url", "jsx", "Button", "import_react", "useActivation", "triggered", "ctaProps", "context", "GlobalComponentsContext", "onEvent", "presentation", "url", "analytics", "usesButton", "resolvedUrl", "Action", "getDprDataByHeight", "defaultHeight", "assetHeight", "result", "getDprSrcSetSettingsByHeight", "quality", "dprData", "getImageUrl", "imageUrl", "settings", "currentUrl", "progressive", "width", "height", "format", "quality", "fit", "uri", "uriError", "import_react", "slowConnections", "getSrcSetUrl", "url", "settings", "format", "size", "getImageUrl", "image", "useContentfulImages", "browserFeatures", "BrowserFeaturesContext", "connectionType", "isSlowConnection", "lowEntropyBrowserHints", "useContentfulImagesInternal", "supportsAvif", "supportsWebP", "props", "getImageSources", "merge_default", "isSvg", "sources", "sizes", "media", "defaultSettings", "prev", "cur", "getBestBgImgSrc", "bestFormat", "finalSettings", "import_react", "isVideoUrl", "contentType", "isImageUrl", "Media", "props", "onError", "GlobalComponentsContext", "contentType", "url", "description", "sizeSettings", "getImageSources", "useContentfulImages", "isImageUrl", "imgSrcs", "jsx", "isVideoUrl", "hightlightWidths", "hightlightPadding", "globalNavHighlightSizes", "mobileMaxWidth", "hightlightSizedSrcSets", "width", "GlobalNavHighlight", "props", "triggered", "setTriggered", "useActivation", "cta", "background", "cardTitleV2", "cardBodyV2", "onActivate", "jsx", "Media", "CallToAction", "import_react", "baseFilter", "collection", "predicate", "result", "baseEach_default", "value", "index", "baseFilter_default", "FUNC_ERROR_TEXT", "negate", "predicate", "args", "negate_default", "reject", "collection", "predicate", "func", "isArray_default", "arrayFilter_default", "baseFilter_default", "negate_default", "baseIteratee_default", "reject_default", "import_react", "import_react", "import_react", "isHiddenNavItem", "hideHostnameRegex", "hostname", "GlobalNavItem", "title", "url", "analytics", "onEvent", "isUrlCurrent", "GlobalComponentsContext", "onClick", "Action", "jsx", "GlobalNavGroup", "title", "groupKey", "itemsCollection", "highlight", "isUrlCurrent", "GlobalComponentsContext", "mobileNavHighlight", "jsx", "GlobalNavHighlight", "item", "itemProps", "i", "GlobalNavItem", "sortNavGroups", "navGroups", "isPromoted", "reject_default", "filterNavGroups", "hostname", "navGroup", "GlobalNavGroupCollection", "GlobalComponentsContext", "group", "filteredNavGroups", "sortedNavGroups", "jsx", "Fragment", "props", "GlobalNavGroup", "GlobalNavHighlightCollection", "props", "highlights", "group", "navGroup", "jsx", "GlobalNavHighlight", "GlobalNavHighlightReel", "GlobalNavGroupScreen", "motifScheme", "backgroundColor", "localNavMobile", "localNavMobileFooter", "navGroups", "globalNavHeading", "showMobileGlobalLinks", "toggleExpanded", "GlobalHeaderContext", "jsx", "GlobalNavScreen", "GlobalNavHighlightCollection", "GlobalNavGroupCollection", "import_react", "useMediaPreload", "media", "isImportant", "settings", "onError", "GlobalComponentsContext", "preloads", "asset", "link", "isVideoUrl", "video", "source", "isImageUrl", "picture", "avifSrc", "webpSrc", "img", "size", "getSrcSetUrl", "getImageUrl", "defaultBackgroundColor", "BackgroundColor", "defaultDefaultGroupKey", "GlobalHeaderContext", "mediaPreloadSettings", "hightlightSizedSrcSets", "mobileMaxWidth", "GlobalHeader", "motifScheme", "backgroundColor", "className", "defaultGroupKey", "siteName", "displayed", "trackingSiteName", "cta", "ctaItems", "localNavDesktop", "localNavMenuItems", "logo", "logoProps", "localNavMobile", "localNavMobileFooter", "onToggleExpanded", "search", "searchOpen", "endChildrenDesktopClassName", "endChildrenMobileClassName", "showGlobalLinks", "showNavScreen", "pathname", "navItemAlignment", "customIcon", "lessMargins", "addBottomBorder", "headerClassName", "context", "GlobalComponentsContext", "Anchor", "onEvent", "data", "useGlobalComponentsContentfulQuery", "GlobalNavConfigCollectionQueryDocumentType", "defaultLocaleCode", "config", "head_default", "navGroups", "browserFeatures", "BrowserFeaturesContext", "isMobile", "isMobileOs", "assetsToPreload", "item", "asset", "useMediaPreload", "onToggleExpandedWithLogging", "isExpanded", "Action", "callToActions", "id", "jsx", "Button", "endChildren", "jsxs", "Fragment", "defaultLogo", "Logo", "shouldShowLogo", "endChildrenClassName", "mobileNavigation", "desktopNavigation", "url", "title", "isSelected", "col1Label", "col1Items", "col2Label", "col2Items", "col3Label", "col3Items", "featuredItem", "GlobalNavItem", "NavigatorItemMobile", "NavigatorItemDesktop", "PrimitivesProvider", "GlobalNavGroupScreen", "buildDelayFunction", "delayOptions", "_a", "_b", "initial", "_c", "jitter", "_d", "max", "baseDelay", "count", "delay", "buildRetryFunction", "retryOptions", "_a", "retryIf", "_b", "max", "count", "operation", "error", "RetryableOperation", "observer", "operation", "forward", "delayFor", "retryIf", "_this", "error", "__awaiter", "shouldRetry", "_a", "delay", "RetryLink", "_super", "__extends", "options", "attempts", "buildDelayFunction", "buildRetryFunction", "nextLink", "Observable", "retryable", "ApolloLink", "import_react", "_setPrototypeOf", "t", "e", "_inheritsLoose", "t", "o", "_setPrototypeOf", "isAbsolute", "pathname", "spliceOne", "list", "index", "i", "k", "n", "resolvePathname", "to", "from", "toParts", "fromParts", "isToAbs", "isFromAbs", "mustEndAbs", "hasTrailingSlash", "last", "up", "part", "result", "resolve_pathname_default", "isProduction", "prefix", "invariant", "condition", "message", "provided", "value", "addLeadingSlash", "path", "stripLeadingSlash", "hasBasename", "prefix", "stripBasename", "stripTrailingSlash", "parsePath", "pathname", "search", "hash", "hashIndex", "searchIndex", "createPath", "location", "createLocation", "state", "key", "currentLocation", "_extends", "e", "resolve_pathname_default", "createTransitionManager", "prompt", "setPrompt", "nextPrompt", "confirmTransitionTo", "location", "action", "getUserConfirmation", "callback", "result", "listeners", "appendListener", "fn", "isActive", "listener", "item", "notifyListeners", "_len", "args", "_key", "canUseDOM", "getConfirmation", "message", "supportsHistory", "ua", "supportsPopStateOnHashChange", "supportsGoWithoutReloadUsingHash", "isExtraneousPopstateEvent", "event", "PopStateEvent", "HashChangeEvent", "getHistoryState", "createBrowserHistory", "props", "invariant", "globalHistory", "canUseHistory", "needsHashChangeListener", "_props", "_props$forceRefresh", "forceRefresh", "_props$getUserConfirm", "_props$keyLength", "keyLength", "basename", "stripTrailingSlash", "addLeadingSlash", "getDOMLocation", "historyState", "_ref", "key", "state", "_window$location", "pathname", "search", "hash", "path", "stripBasename", "createLocation", "createKey", "transitionManager", "setState", "nextState", "_extends", "history", "handlePopState", "handlePop", "handleHashChange", "forceNextPop", "ok", "revertPop", "fromLocation", "toLocation", "toIndex", "allKeys", "fromIndex", "delta", "go", "initialLocation", "createHref", "createPath", "push", "href", "prevIndex", "nextKeys", "replace", "n", "goBack", "goForward", "listenerCount", "checkDOMListeners", "isBlocked", "block", "unblock", "listen", "unlisten", "HashChangeEvent$1", "HashPathCoders", "stripLeadingSlash", "stripHash", "url", "hashIndex", "getHashPath", "pushHashPath", "replaceHashPath", "createHashHistory", "canGoWithoutReload", "_props$hashType", "hashType", "_HashPathCoders$hashT", "encodePath", "decodePath", "ignorePath", "locationsAreEqual$$1", "a", "b", "encodedPath", "prevLocation", "allPaths", "baseTag", "hashChanged", "nextPaths", "clamp", "lowerBound", "upperBound", "createMemoryHistory", "_props$initialEntries", "initialEntries", "_props$initialIndex", "initialIndex", "index", "entries", "entry", "nextIndex", "nextEntries", "canGo", "_objectWithoutPropertiesLoose", "r", "e", "t", "MAX_SIGNED_31_BIT_INT", "commonjsGlobal", "globalThis", "window", "global", "getUniqueId", "key", "objectIs", "x", "y", "createEventEmitter", "value", "handlers", "on", "handler", "push", "off", "filter", "h", "get", "set", "newValue", "changedBits", "forEach", "onlyChild", "children", "Array", "isArray", "createReactContext", "defaultValue", "calculateChangedBits", "contextProp", "Provider", "_React$Component", "emitter", "_this", "props", "getChildContext", "_ref", "componentWillReceiveProps", "nextProps", "oldValue", "render", "React", "Component", "childContextTypes", "_Provider$childContex", "PropTypes", "object", "isRequired", "Consumer", "_React$Component2", "observedBits", "state", "_this2", "getValue", "onUpdate", "setState", "componentDidMount", "context", "componentWillUnmount", "contextTypes", "_Consumer$contextType", "createContext", "createNamedContext", "name", "displayName", "historyContext", "Router", "computeRootMatch", "pathname", "path", "url", "params", "isExact", "location", "history", "_isMounted", "_pendingLocation", "staticContext", "unlisten", "listen", "RouterContext", "match", "HistoryContext", "MemoryRouter", "createHistory", "Lifecycle", "onMount", "call", "componentDidUpdate", "prevProps", "onUnmount", "cache", "cacheLimit", "cacheCount", "compilePath", "path", "options", "cacheKey", "end", "strict", "sensitive", "pathCache", "keys", "regexp", "pathToRegexp", "result", "matchPath", "pathname", "Array", "isArray", "_options", "exact", "_options$exact", "_options$strict", "_options$sensitive", "paths", "concat", "reduce", "matched", "_compilePath", "match", "exec", "url", "values", "isExact", "params", "memo", "key", "index", "name", "isEmptyChildren", "children", "React", "Children", "count", "Route", "render", "React", "RouterContext", "context", "invariant", "location", "_this", "props", "match", "computedMatch", "path", "matchPath", "pathname", "_extends", "children", "_this$props", "component", "Array", "isArray", "isEmptyChildren", "createElement", "Component", "addLeadingSlash", "charAt", "addBasename", "basename", "stripBasename", "base", "indexOf", "substr", "length", "createURL", "createPath", "staticHandler", "methodName", "noop", "StaticRouter", "handlePush", "navigateTo", "handleReplace", "handleListen", "handleBlock", "action", "_this$props$basename", "_this$props$context", "createLocation", "url", "_this$props2$basename", "_this$props2$context", "_this$props2$location", "rest", "_objectWithoutPropertiesLoose", "_this$props2", "history", "createHref", "push", "replace", "go", "goBack", "goForward", "listen", "block", "Router", "Switch", "element", "Children", "forEach", "child", "isValidElement", "from", "cloneElement", "useContext", "React", "useHistory", "HistoryContext", "useLocation", "RouterContext", "location", "BrowserRouter", "history", "createHistory", "_this", "props", "render", "React", "Router", "children", "Component", "HashRouter", "resolveToLocation", "to", "currentLocation", "normalizeToLocation", "createLocation", "forwardRefShim", "C", "forwardRef", "isModifiedEvent", "event", "metaKey", "altKey", "ctrlKey", "shiftKey", "LinkAnchor", "_ref", "forwardedRef", "innerRef", "navigate", "onClick", "rest", "_objectWithoutPropertiesLoose", "target", "_extends", "ex", "preventDefault", "defaultPrevented", "button", "ref", "Link", "_ref2", "component", "_ref2$component", "replace", "RouterContext", "context", "invariant", "location", "href", "createHref", "isDuplicateNavigation", "createPath", "method", "push", "createElement", "forwardRefShim", "C", "forwardRef", "React", "joinClassnames", "classnames", "_len", "_key", "filter", "i", "join", "NavLink", "_ref", "forwardedRef", "ariaCurrent", "_ref$ariaCurrent", "activeClassName", "_ref$activeClassName", "activeStyle", "classNameProp", "className", "exact", "isActiveProp", "isActive", "locationProp", "location", "sensitive", "strict", "styleProp", "style", "to", "innerRef", "rest", "_objectWithoutPropertiesLoose", "RouterContext", "context", "invariant", "currentLocation", "toLocation", "normalizeToLocation", "resolveToLocation", "path", "pathname", "escapedPath", "replace", "match", "matchPath", "_extends", "props", "ref", "Link", "import_react", "import_react_dom", "appPortalId", "AppPortal", "props", "appPortalRef", "AppContext", "jsx", "import_react", "localHosts", "Config", "isLocalUrl", "url", "domain", "shouldFlushLogs", "urlObj", "createIsCurrentUrl", "getRequestUrl", "destinationUrlString", "options", "currentUrl", "destinationUrl", "pattern", "persistedQueryParams", "Config", "alwaysPersistQueryParams", "checkIfSameTabDomain", "targetUrl", "currentUrl", "isLocalUrl", "domain", "checkIfPersistParamsDomain", "url", "persistDomains", "businessHelpHostname", "localeLanguageMap", "appendLocaleToBusinessHelpUrl", "url", "locale", "newLocale", "httpPrefix", "httpPrefixUppercase", "httpsPrefix", "httpsPrefixUppercase", "copyUrlSearchParameters", "destinationUrl", "currentUrl", "persistentQueryParams", "referrerUrlString", "referrerUrl", "queryParameter", "value", "mergeUrlParameters", "urlParameters", "defaultFeatureFlags", "acceptsLangParameter", "url", "appendLocaleParameterToUrl", "locale", "businessHelpHostname", "appendLocaleToBusinessHelpUrl", "allLocales", "localeMap", "getLinkProps", "options", "targetUrl", "isSameTabDomain", "checkIfSameTabDomain", "isPersistParamsDomain", "checkIfPersistParamsDomain", "openInNewTab", "isFinalTargetLocal", "isLocalUrl", "queryParamsToPersist", "persistedQueryParams", "alwaysPersistQueryParams", "mergeUrlParameters", "appendLocaleParameterToUrl", "localePrefix", "locale", "Anchor", "props", "ref", "currentLocale", "getCurrentUrl", "AppContext", "jsx", "updatedProps", "getLinkProps", "url", "isLocalUrl", "_", "nonHrefProps", "Link", "import_react", "import_react", "ElementLocation", "import_react", "import_react", "import_react", "import_react", "mapVariantToOption", "variant", "name", "value", "extractSellingPlanGroups", "node", "group", "plan", "parseSellingPlanDepositData", "rawValue", "productKey", "warn", "message", "logWarning", "parsed", "entries", "result", "currency", "entry", "record", "resolveMaxQuantity", "productMetafields", "firstVariant", "productRaw", "field", "variantRaw", "resolveAtpMessage", "available", "calculateAtp", "atpDays", "normalizeCatalog", "shopifyData", "catalog", "productOptionById", "options", "sellingPlanDataRaw", "depositData", "product", "edge", "option", "defaultCatalogState", "ShopifyContext", "ShopifyProvider", "children", "shopifyData", "country", "AppContext", "formatMessage", "MessageContext", "featureFlags", "useFeatureFlags", "calculateAtp", "available", "atp", "bufferRemainder", "weeks", "weekRange", "Config", "jsx", "Fragment", "catalog", "productOptionById", "normalizeCatalog", "singleStoreMode", "store", "storeKeys", "isHiddenBehindFeatureFlag", "shopifyStore", "currencyCode", "shipsToCountries", "isCountrySupported", "shopifyCartKey", "initialCartState", "noop_default", "getUrlDiscount", "urlString", "validatePersistedCart", "data", "parsed", "lines", "line", "entry", "persistCart", "setLocalStorageItem", "findLineIndex", "optionId", "useCart", "appContext", "AppContext", "elementLocation", "ElementLocation", "catalog", "productOptionById", "ShopifyContext", "country", "urlDiscount", "setLines", "cartOpen", "setCartOpenState", "discountCode", "setDiscountCode", "setCartOpen", "open", "logEvent", "addLine", "productKey", "currencyCode", "product", "option", "idx", "newLines", "index", "currencyEntry", "removeLine", "existing", "_", "clearCart", "cartInit", "raw", "getLocalStorageItem", "validLines", "Config", "CartContext", "initialCartState", "CartProvider", "children", "cart", "useCart", "jsx", "assetSizesDesc", "assetSizesAsc", "mediaQueryCss", "width", "mediaQuery", "disabledButtonCss", "css", "m", "addToCartButtonCss", "addToCartTooltipCss", "mediaQuery", "AddToCartButton", "productKey", "optionId", "showTooltip", "cart", "CartContext", "catalog", "currencyCode", "ShopifyContext", "product", "elementLocation", "ElementLocation", "resolvedOptionId", "quantityInCart", "l", "disabled", "jsxs", "Fragment", "jsx", "Button", "disabledButtonCss", "logUserEvent", "FormattedMessage", "addToCartTooltipCss", "AddToCart", "className", "store", "isCountrySupported", "isProductAvailableInCountry", "buttonRef", "setShowTooltip", "button", "onButtonMouseEnter", "onButtonMouseLeave", "cx", "addToCartButtonCss", "import_react", "import_react", "usePrice", "price", "userLocation", "AppContext", "currencyCode", "ShopifyContext", "Price", "productPrice", "className", "price", "usePrice", "jsx", "cx", "cartWrapperStyles", "hasItems", "css", "m", "activeWrapperCss", "mediaQuery", "cartOverlayCss", "White", "cartOverlayActiveCss", "cartInternalCss", "cartCloseCss", "cartCloseButtonCss", "cartItemWrapperCss", "cartItemImg", "imageUrl", "buttonWrapperCss", "quantityCss", "allAccessoriesCss", "accessoryWrapperCss", "accessoryQuantityCss", "quantityWrapperCss", "accessoryNameAndPriceCss", "accessoryTitleCss", "quantityModificationCss", "quantityModificationDisabledCss", "accessoryQuantityModificationCss", "accessoryQuantityModificationDisabledCss", "titleCss", "atpCss", "priceCss", "depositInfoCss", "depositAmountCss", "depositLabelCss", "fullPriceStrikethroughCss", "totalCss", "checkoutButtonCss", "checkoutDisclaimerCss", "noCartItemsContainerCss", "noCartItemsTitleCss", "featuredProductImg", "featuredProductTitleCss", "featuredProductPriceCss", "featuredProductButtonCss", "cartIconButtonCss", "cartIconQuantityCss", "cartIconCss", "CartItem", "productKey", "title", "image", "atpMessage", "price", "optionId", "maxQuantity", "optionTitle", "sellingPlanDepositData", "cart", "CartContext", "currencyCode", "ShopifyContext", "formatMessage", "MessageContext", "elementLocation", "ElementLocation", "quantity", "cartLine", "buttonDisabled", "depositAmount", "jsxs", "cartItemWrapperCss", "jsx", "cartItemImg", "titleCss", "depositInfoCss", "Price", "fullPriceStrikethroughCss", "depositAmountCss", "depositLabelCss", "priceCss", "quantityWrapperCss", "logUserEvent", "quantityModificationCss", "Icon", "quantityCss", "cx", "quantityModificationDisabledCss", "atpCss", "import_react", "useCheckoutUrl", "userLocation", "getCurrentUrl", "currentLocale", "cookieManager", "AppContext", "cart", "CartContext", "store", "currencyCode", "ShopifyContext", "options", "Config", "gaCookie", "itemParams", "line", "index", "numericId", "sellingPlanNumericId", "queryParams", "queryString", "key", "value", "itemsQuery", "checkoutUrl", "mergeUrlParameters", "checkoutPath", "cartAddPath", "Cart", "elementLocation", "ElementLocation", "formatMessage", "MessageContext", "catalog", "productOptionById", "currencyCode", "ShopifyContext", "cart", "CartContext", "featuredProductKey", "Config", "featuredProduct", "checkoutUrl", "useCheckoutUrl", "checkoutButtonCopy", "disclaimer", "noCartItems", "hasItems", "totalFromCart", "acc", "line", "entry", "depositTotalFromCart", "product", "itemPrice", "hasDeposits", "total", "usePrice", "totalCopy", "onCheckoutClick", "logUserEvent", "logger", "jsxs", "cx", "cartWrapperStyles", "activeWrapperCss", "jsx", "cartOverlayCss", "cartOverlayActiveCss", "buttonWrapperCss", "cartCloseCss", "Icon", "cartCloseButtonCss", "cartInternalCss", "CartItem", "noCartItemsContainerCss", "noCartItemsTitleCss", "Fragment", "featuredProductImg", "featuredProductTitleCss", "Price", "featuredProductPriceCss", "AddToCart", "featuredProductButtonCss", "totalCss", "checkoutButtonCss", "Button", "checkoutDisclaimerCss", "import_react", "CartIcon", "cart", "CartContext", "total", "acc", "line", "jsxs", "cartIconButtonCss", "jsx", "cartIconQuantityCss", "Icon", "cartIconCss", "import_react", "ConsumerContext", "castFunction", "value", "identity_default", "castFunction_default", "forEach", "collection", "iteratee", "func", "isArray_default", "arrayEach_default", "baseEach_default", "castFunction_default", "forEach_default", "filtersToUrlParams", "filters", "urlParams", "forEach_default", "value", "key", "isNullish", "urlParamsToFilters", "params", "result", "import_react", "import_react", "import_react", "defaultLocale", "ContentfulContext", "defaultLocale", "getContentfulContext", "locale", "params", "fetchPolicy", "param", "Config", "useContentfulContext", "context", "ContentfulContext", "import_react", "ContentfulLivePreviewContext", "ContentfulLivePreviewContextProvider", "children", "hasLivePreview", "setHasLivePreview", "jsx", "ContentfulLivePreview", "locale", "useContentfulContext", "setHasLivePreview", "ContentfulLivePreviewContext", "shouldSetupLivePreview", "Config", "setupContentfulLivePreview", "livePreview", "preview", "logger", "LoggingEventType", "import_react", "personasCookieKey", "getPersonasCookie", "cookieManager", "personasCookieKey", "setPersonasCookie", "personas", "personasCookieValue", "isEqual_default", "expires", "domain", "Config", "shopifyConsentTimeoutMs", "consentApiPromise", "ensureConsentApi", "resolve", "ensureSingleScript", "shopify", "reject", "error", "getShopifyTrackingConsentPayload", "cookieAcceptance", "store", "saleOfData", "rootDomain", "submitShopifyTrackingConsent", "timeoutMs", "api", "payload", "_", "defaultBackgroundColor", "BackgroundColor", "CookiePopup", "isClient", "backgroundColor", "globalPrivacyControl", "cookieManager", "personasRef", "AppContext", "store", "ShopifyContext", "backgroundType", "cookieDomain", "Config", "jsx", "CookieModal", "event", "onMarketingTrackingAccepted", "error", "logError", "onPerformanceTrackingAccepted", "setPersonasCookie", "submitShopifyTrackingConsent", "snapPersonas", "getPersonasCookie", "snapPersona", "snapPersonaDisplayText", "snapPersonasDisplayTextMap", "logEvent", "import_react", "rtlLanguageCodes", "directionFromLocale", "locale", "currentLocale", "defaultLocale", "languageCode", "DirectionDirective", "appContext", "AppContext", "jsx", "W", "directionFromLocale", "import_react", "mapValues", "object", "iteratee", "result", "baseIteratee_default", "baseForOwn_default", "value", "key", "baseAssignValue_default", "mapValues_default", "convertNullsToUndefined", "object", "cloned", "clone_default", "mapped", "mapValues_default", "useContentfulQuery", "query", "options", "getCurrentUrl", "AppContext", "preview", "locale", "fetchPolicy", "useContentfulContext", "hasLivePreview", "ContentfulLivePreviewContext", "queryOptions", "Config", "queryResponse", "useQuery", "updatedEntries", "setUpdatedEntries", "cleanup", "noop_default", "subscribeToLiveUpdates", "ContentfulLivePreview", "singleItemKeys", "key", "collectionKeys", "singleItemUnsubscribeFns", "newData", "entries", "collectionUnsubscribeFns", "fn", "maybeClonedResponse", "clone_default", "dataToUse", "convertNullsToUndefined", "contentfulSysIdFragment", "gql", "import_react", "getFileInfo", "url", "nameAndExt", "nameAndExtArr", "extension", "isElementInViewport", "element", "rect", "isVideoDataProps", "props", "getVideoWatchLogger", "autoPlay", "eventLabel", "getPreviousWatchTime", "setPreviousWatchTime", "elementLocation", "event", "video", "sufficientDataToPlay", "isVideoPlaying", "watchEventTimeDelta", "isVideoInViewport", "isElementInViewport", "logValue", "assetFragment", "gql", "fragments", "query", "isImageUrl", "contentType", "embeddedMediaCss", "css", "m", "Media", "props", "data", "useContentfulQuery", "query", "getImageSources", "useContentfulImages", "elementLocation", "ElementLocation", "videoPlayed", "setVideoPlayed", "prevWatchEventTime", "asset", "url", "description", "imgSrcSetSettings", "getDprSrcSetSettingsByHeight", "imgSrcs", "jsx", "onPlay", "_e", "fileName", "getFileInfo", "logUserEvent", "onPause", "onTimeUpdate", "getVideoWatchLogger", "value", "fragments", "gql", "contentfulSysIdFragment", "query", "Favicon", "data", "useContentfulQuery", "query", "faviconEntry", "jsx", "W", "sys", "asset", "size", "import_react", "import_react", "PageLayoutContext", "import_react", "useAlternateBrandPropOverride", "siteConfig", "overrideKey", "getCurrentUrl", "AppContext", "Config", "alternateMotifValue", "alternateBrandOverrides", "brandOverrides", "import_react", "useBrand", "getCurrentUrl", "AppContext", "brand", "SitesToBrands", "Config", "alternateMotif", "allBrands", "useMotifScheme", "brandValue", "useBrand", "import_react", "isContentfulIdProps", "props", "isContentfulSysProps", "isContentfulShallow", "props", "allKeys", "key", "isContentfulSysNotShallow", "getContentfulInspectorProps", "entryId", "fieldIds", "locale", "Config", "map", "id", "mapId", "import_rich_text_plain_text_renderer", "import_react", "import_rich_text_react_renderer", "import_react", "Hyperlink", "uri", "children", "elementLocation", "ElementLocation", "jsx", "logUserEvent", "shouldFlushLogs", "logger", "headerCss", "css", "NoHeadingH1", "children", "jsx", "cx", "primitiveElementClassNames", "h4Css", "NoHeadingH2", "h5Css", "NoHeadingH3", "p1Css", "NoHeadingH4", "p2Css", "NoHeadingH5", "p3Css", "NoHeadingH6", "p4Css", "import_rich_text_react_renderer", "import_rich_text_types", "arrayAggregator", "array", "setter", "iteratee", "accumulator", "index", "length", "value", "arrayAggregator_default", "baseAggregator", "collection", "setter", "iteratee", "accumulator", "baseEach_default", "value", "key", "baseAggregator_default", "createAggregator", "setter", "initializer", "collection", "iteratee", "func", "isArray_default", "arrayAggregator_default", "baseAggregator_default", "accumulator", "baseIteratee_default", "createAggregator_default", "keyBy", "createAggregator_default", "result", "value", "key", "baseAssignValue_default", "keyBy_default", "AssetEntryHyperlink", "props", "item", "children", "typename", "notAcceptedTypes", "slugNoUrl", "assetNoUrl", "logError", "url", "Config", "jsx", "Hyperlink", "import_react", "SuspenseWrapper", "children", "fallbackElement", "isServer", "setIsServer", "jsx", "LazyCode", "lazyComponent", "module", "Code", "props", "jsx", "SuspenseWrapper", "fragments", "gql", "contentfulSysIdFragment", "import_react", "import_react", "defaultContext", "DefinitionContext", "DefinitionProvider", "children", "isOpen", "setIsOpen", "content", "setContent", "triggerRef", "setTriggerRef", "open", "title", "body", "ref", "close", "jsx", "Definition", "displayText", "fullText", "anchorId", "overlayTitle", "overlayBody", "className", "open", "close", "triggerRef", "DefinitionContext", "elementLocation", "ElementLocation", "ref", "isActive", "content", "renderRichTextWithElements", "handleClick", "logUserEvent", "url", "jsx", "Fragment", "import_react", "DefinitionOverlay", "className", "hasSideNav", "PageLayoutContext", "isOpen", "close", "content", "triggerRef", "DefinitionContext", "handleClose", "e", "url", "jsx", "SideOverlay", "fragments", "gql", "contentfulSysIdFragment", "query", "DownloadableAsset", "props", "hasData", "data", "useContentfulQuery", "query", "isContentfulIdProps", "result", "jsx", "Hyperlink", "EmphasizedText", "props", "text", "jsx", "emphasizedTextFragment", "gql", "contentfulSysIdFragment", "footnoteInlineNoDisplayTextCss", "css", "footnoteInlineSuperscriptCss", "footnoteInlineSuperscriptOverlayCss", "footnoteOverlayBodyCss", "FootnoteInline", "number", "displayText", "fullText", "props", "footnoteDisplayText", "jsxs", "Fragment", "jsx", "footnoteInlineSuperscriptCss", "Superscript", "overlayBody", "footnoteOverlayBodyCss", "footnoteInlineSuperscriptOverlayCss", "renderRichTextWithElements", "Definition", "footnoteInlineNoDisplayTextCss", "combineImageSources", "sources", "source", "parseImageMedia", "imageMedia", "parseVideoMedia", "videoMedia", "parseMedia", "media", "isImageDataProps", "props", "getImageSourceSettings", "desktopHeight", "mobileHeight", "desktopDefaultHeight", "mobileDefaultHeight", "enableHighDpi", "qualityKey", "quality", "imageQuality", "desktopStandardSettings", "mobileStandardSettings", "desktopSettings", "getDprSrcSetSettingsByHeight", "mobileSettings", "imageQuality", "Image", "props", "enableHighDpi", "quality", "dataset", "imageSource", "imageAltText", "parseMedia", "mobileImageSource", "getImageSources", "useContentfulImages", "desktopSettings", "mobileSettings", "getImageSourceSettings", "imgSrcs", "combineImageSources", "jsx", "MediaWithStickers", "stickerFragment", "gql", "contentfulSysIdFragment", "fragments", "stickerQuery", "fragments", "gql", "stickerFragment", "query", "fragments", "gql", "contentfulSysIdFragment", "query", "import_react", "Quote", "props", "needsLoading", "isContentfulShallow", "getImageSources", "useContentfulImages", "isRTL", "AppContext", "data", "useContentfulQuery", "query", "author", "authorName", "body", "logo", "isLongQuote", "media", "logoImageSrc", "imgSrcs", "videoSrc", "mobileVideoSrc", "authorText", "isNullish", "renderRichTextWithElementsNoHeadings", "jsx", "QuoteV2", "snapchatEmbedFragment", "gql", "contentfulSysIdFragment", "query", "SnapchatEmbedShallow", "props", "id", "isContentfulSysProps", "data", "useContentfulQuery", "query", "jsx", "SnapchatEmbed", "fragments", "gql", "stickerFragment", "contentfulSysIdFragment", "query", "import_react", "import_react", "parseImage", "image", "parseImageMedia", "parseVideo", "videoContainer", "getBestBgImgSrc", "allowHls", "videoMedia", "mobileVideoMedia", "thumbnailSource", "defaultContainerProps", "parseVideoMedia", "streamUrl", "vodAssetHash", "getTokensFromVodUrl", "contentfulAssetHash", "getTokensFromAssetUrl", "media", "useParseMediaContainer", "mediaContainer", "features", "useFeatureFlags", "appContext", "AppContext", "useContentfulImages", "isVideo", "isImage", "isHlsVideo", "hlsFeatureEnabled", "Config", "getMediaProps", "video", "getBestImgSrc", "media", "mobileMedia", "thumbnailMedia", "autoPlay", "wrap", "captions", "videoSource", "parseMedia", "mobileVideoSource", "posterSource", "isNullish", "Video", "props", "id", "isContentfulSysProps", "data", "useContentfulQuery", "query", "videoPlayed", "setVideoPlayed", "getBestBgImgSrc", "useContentfulImages", "elementLocation", "ElementLocation", "prevWatchEventTime", "thumbnailSource", "useParseMediaContainer", "mediaProps", "onPlay", "_e", "fileName", "getFileInfo", "logUserEvent", "onPause", "onTimeUpdate", "getVideoWatchLogger", "value", "jsx", "MediaWithStickers", "richTextCtaClassName", "EmbeddedMedia", "props", "heightPx", "useIsMobile", "jsx", "Media", "getImageUrl", "CallToActionWrapper", "CallToAction", "contentfulComponentMap", "FootnoteInline", "Quote", "SnapchatEmbedShallow", "Image", "Video", "Code", "Definition", "DownloadableAsset", "EmphasizedText", "embeddedVideoCss", "css", "defaultMarkRenderer", "text", "defaultNodeRenderer", "node", "children", "jsx", "Fragment", "logError", "getRichTextMarkRenderer", "Component", "getRichTextNodeRenderer", "getEmbeddedEntryNodeRenderer", "contentfulComponentMap", "entries", "entriesById", "keyBy_default", "entry", "entryId", "typename", "VideoComponent", "embeddedVideoCss", "isRichText", "data", "getEmbeddedNodeRenderer", "props", "accessPath", "nodeRenderer", "linkedEntries", "get_default", "getHyperlinkedNodeRenderer", "linkedItems", "item", "AssetEntryHyperlink", "getRichTextOptions", "components", "blockEmbeddedAssetNodeRenderer", "inlineEmbeddedEntryNodeRenderer", "blockEmbeddedEntryNodeRenderer", "hyperlinkedAssetNodeRenderer", "hyperlinkedEntryNodeRenderer", "createRichTextRenderer", "options", "import_react", "maxWidthCss", "css", "RichTextDocument", "children", "jsx", "noMarginCss", "RichTextNoPaddingParagraph", "flatMap", "collection", "iteratee", "baseFlatten_default", "map_default", "flatMap_default", "convertNewLineToBr", "text", "flatMap_default", "i", "jsx", "retainLtrText", "textSegment", "index", "unescape_default", "renderMultiLineText", "textWithLineBreaks", "RichTextWithElementsComponents", "RichTextDocument", "renderMultiLineText", "Bold", "Italics", "Underline", "H1", "H2", "H3", "H4", "H5", "H6", "Paragraph", "Hyperlink", "ListItem", "UnorderedList", "OrderedList", "NoCollapseTableMobile", "PrimitiveTableCell", "PrimitiveTableHeader", "PrimitiveTableRow", "HorizontalRule", "Quote", "renderRichText", "data", "renderRichTextMarkingsOnly", "createRichTextRenderer", "renderRichTextMultiLineWithMarkings", "RichTextNoPaddingParagraph", "renderRichTextWithElements", "renderRichTextWithElementsNoHeadings", "NoHeadingH1", "NoHeadingH2", "NoHeadingH3", "NoHeadingH4", "NoHeadingH5", "NoHeadingH6", "getRichTextWithEmbeddingsRenderer", "useHeadingTagsForBody", "collapseMobileTable", "CollapseTableMobile", "Button", "props", "url", "onClick", "buttonType", "title", "size", "image", "iconName", "targetAsset", "className", "buttonTextDataset", "elementLocation", "ElementLocation", "getImageSources", "useContentfulImages", "onClickHandler", "logUserEvent", "shouldFlushLogs", "logger", "type", "ButtonType", "imgSrcs", "jsx", "renderRichTextMarkingsOnly", "buttonFragment", "gql", "fragments", "contentfulSysIdFragment", "fragments", "gql", "contentfulSysIdFragment", "query", "ctaFragment", "gql", "buttonFragment", "contentfulSysIdFragment", "fragments", "query", "CallToAction", "props", "elementLocation", "ElementLocation", "rawData", "useContentfulQuery", "query", "isContentfulSysNotShallow", "data", "presentation", "analytics", "url", "className", "label", "onClick", "logUserEvent", "buttonData", "titleDataset", "getContentfulInspectorProps", "jsx", "Button", "import_react", "applyStyles", "styleString", "acc", "style", "property", "value", "camelCaseProperty", "_", "letter", "animationKeyframes", "keyframes", "useEntranceAnimation", "entranceAnimation", "styles", "animationName", "import_react", "imageButtonFragment", "gql", "contentfulSysIdFragment", "fragments", "query", "LazyImageButton", "props", "data", "useContentfulQuery", "query", "getImageSources", "useContentfulImages", "elementLocation", "ElementLocation", "url", "image", "rest", "imageSource", "imageAltText", "parseMedia", "imgSrcs", "jsx", "ImageButton", "logUserEvent", "shouldFlushLogs", "logger", "mediaStylesCss", "css", "mediaOnlyCss", "mobileMediaQuery", "bodyEmbeddedMediaCss", "mediaWrapperClassName", "m", "videoCss", "Content", "props", "videoPlayed", "setVideoPlayed", "getImageSources", "useContentfulImages", "elementLocation", "ElementLocation", "isRTL", "AppContext", "isSnapBrand", "useBrand", "sys", "mediaWrap", "showVideoControls", "layout", "mediaDirection", "mediaDirectionMobile", "displayOn", "asset", "title", "subtitle", "titleAlignment", "titleAlignmentMobile", "showFullResolutionMedia", "body", "bodyAlignment", "bodyAlignmentMobile", "callsToActionCollection", "theme", "brandBackgroundColor", "backgroundColor", "brandBorderColor", "borderColor", "anchorId", "useHeadingTagsForBody", "collapseMobileTable", "listIcon", "entranceAnimation", "motifScheme", "useMotifScheme", "isMediaOnly", "getBestBgImgSrc", "iconUrl", "renderBody", "getRichTextWithEmbeddingsRenderer", "imageSource", "imageAltText", "imageSize", "videoSource", "mobileImageSource", "mobileImageSize", "mobileVideoSource", "thumbnailSource", "useParseMediaContainer", "inspectorDataset", "getContentfulInspectorProps", "animation", "styles", "useEntranceAnimation", "callsToAction", "callToAction", "jsx", "LazyImageButton", "CallToAction", "defaultHeight", "desktopSettings", "mobileSettings", "getImageSourceSettings", "imgSrcs", "combineImageSources", "prevWatchEventTime", "onPlay", "fileName", "getFileInfo", "logUserEvent", "onPause", "assetChild", "typeName", "onTimeUpdate", "getVideoWatchLogger", "value", "assetMediaWrap", "thumbnailMedia", "captions", "autoPlay", "media", "videoAltText", "showVideoControlsFinal", "isNullish", "isStrictHeight", "mediaClassName", "cx", "mediaOnlyCss", "mediaStylesCss", "videoCss", "stickers", "sticker", "MediaWithStickers", "SnapchatEmbed", "statsAsset", "Stats", "renderRichTextMultiLineWithMarkings", "bodyEmbeddedMediaCss", "fragments", "gql", "contentfulSysIdFragment", "query", "animationKeyframesFragment", "entranceAnimationFragment", "definitionFragment", "gql", "contentfulSysIdFragment", "query", "Footnote", "props", "number", "fullText", "jsx", "renderRichTextWithElements", "fragments", "gql", "contentfulSysIdFragment", "query", "statsFragment", "gql", "entranceAnimationFragment", "query", "contentAssetFragment", "gql", "contentfulSysIdFragment", "fragments", "snapchatEmbedFragment", "statsFragment", "assetFragment", "ctaFragment", "definitionFragment", "entranceAnimationFragment", "queries", "blockQueryLimit", "blockAllFragment", "gql", "contentfulSysIdFragment", "ctaFragment", "fragments", "emphasizedTextFragment", "blockPreviewFragment", "blockFragmentShallow", "query", "criteriaFragment", "gql", "contentfulSysIdFragment", "experimentSitemapFragment", "createExperimentFragmentWithAbReplacements", "entryType", "fragmentName", "fragment", "armLimit", "blockQueryLimit", "blockFragmentShallow", "createExperimentFragmentNoAb", "import_react", "import_react", "adler32", "source", "alpha", "beta", "i", "component", "useAbExperiments", "getUserInfo", "getCurrentUrl", "AppContext", "needsDecision", "setNeedsDecision", "userInfo", "useAsyncData", "error", "logger", "ab", "decideAbExperimentImpl", "context", "seededBucket", "userTrafficPercentile", "adler32", "Config", "userBucketParameter", "userBucket", "variant", "isNullish", "import_react", "_WeakRefPolyfill", "ref", "__publicField", "WeakRefPolyfill", "maxHistory", "areEqual", "deps", "previousDeps", "dep", "i", "previousDep", "mapDep", "singleCallback", "key", "callback", "dependencies", "cache", "previousCalls", "previous", "SingleCallbackCacheContext", "useSingleCallback", "cache", "args", "singleCallback", "import_react", "component", "useUserBusinessProfile", "cookieManager", "getPersona", "personasRef", "AppContext", "needsDecision", "setNeedsDecision", "personaResponse", "useAsyncData", "error", "logger", "personas", "personasCookieValue", "getPersonasCookie", "getUserBusinessProfileImpl", "import_react", "useUserSnapProfile", "cookieManager", "personasRef", "AppContext", "personasCookieValue", "getPersonasCookie", "extractUtmParameters", "url", "urlObj", "utmParameters", "key", "value", "printDebugStatements", "printDebugSkip", "analyticsId", "what", "where", "action", "useExperiment", "cookieManager", "currentLocale", "userLocation", "getCurrentUrl", "personasRef", "updatePersonas", "AppContext", "browserFeatures", "BrowserFeaturesContext", "singleCallback", "useSingleCallback", "decideAbExperiment", "useAbExperiments", "getUserSnapProfile", "useUserSnapProfile", "getUserBusinessProfile", "useUserBusinessProfile", "language", "country", "platform", "deviceType", "utmParams", "extractUtmParameters", "checkCriteria", "value", "doesPassCriteria", "options", "decideExperimentImpl", "doesFailCheck", "array", "value", "action", "doesPassCriteria", "criteria", "props", "analyticsId", "printDebugSkip", "utmParam", "decideExperimentImpl", "options", "logEvent", "experiment", "chosenArmAnalyticsId", "reference", "replacements", "singleCallback", "isThinking", "arm", "passCriteria", "snapPersonasCriteria", "businessPersonasCriteria", "businessPersonasMatchAll", "hasBusinessPersonasCriteria", "hasSnapPersonasCriteria", "userBusinessProfile", "userBusinessProfileDecision", "updatedPersonas", "getPersonasCookie", "setPersonasCookie", "businessPersonaAction", "doesMatchCriteria", "decision", "snapPersonasDecision", "snapPersonaAction", "abExperiments", "abExperiment", "entryToReplace", "madeReplacement", "experimentArm", "logInfo", "kebabCase_default", "socialPictureCss", "css", "socialAnchorCss", "logoWrapperCss", "m", "nonMobileMediaQuery", "convertToGenericProps", "item", "cookieSettingsUrl", "filterCriteria", "filterFunc", "collection", "filterAndMapItems", "items", "outputItems", "inputItem", "genericItem", "groups", "outputGroups", "inputGroup", "Footer", "cookieSettingsUrl", "footerView", "hasSideNav", "hasCustomSideNav", "PageLayoutContext", "getImageSources", "useContentfulImages", "handleGroupToggle", "groupId", "groupTitle", "logUserEvent", "alternateBrandPropOverride", "useAlternateBrandPropOverride", "Config", "formatMessage", "MessageContext", "defaultLogoAriaLabel", "finalFooterProps", "sitewideValues", "SitewideConfigurationContext", "motifScheme", "useMotifScheme", "checkCriteria", "useExperiment", "showSimpleFooter", "noFooter", "footerType", "isVisible", "item", "customFooter", "filteredFooterColumnsCollection", "filterCriteria", "filteredFooterBarCollection", "footerSocial", "jsx", "FooterSocial", "footerSocialItem", "i", "image", "height", "sys", "url", "width", "ImageButton", "socialPictureCss", "socialAnchorCss", "customLogo", "footerLogo", "imgSrcs", "logoUrl", "logo", "Media", "logoAriaLabel", "Anchor", "logoWrapperCss", "GlobalFooter", "HardcodedComponents", "Config", "jsx", "import_react", "NavigationCta", "props", "checkCriteria", "useExperiment", "location", "useLocation", "displayMode", "currentSlug", "matchesDisplayMode", "shouldShow", "isHiddenForCurrentSlug", "slug", "jsx", "CallToAction", "navigationCtaFragment", "gql", "criteriaFragment", "contentfulSysIdFragment", "ctaFragment", "query", "GlobalHeaderCta", "displayRegion", "callsToAction", "isMobile", "useIsMobile", "displayMode", "navigationCta", "cta", "ctaProps", "cloneDeep_default", "buttonProps", "Size", "ButtonType", "jsx", "NavigationCta", "CallToAction", "Fragment", "import_react", "GlobalHeaderLogo", "sitewideValues", "SitewideConfigurationContext", "formatMessage", "MessageContext", "logoAriaLabel", "localNavProps", "getImageSources", "useContentfulImages", "url", "logo", "imgSrcs", "combineImageSources", "jsx", "Fragment", "Logo", "import_react", "GlobalHeaderSearch", "setSearchOpen", "autocompleteProps", "formatMessage", "MessageContext", "pathname", "useLocation", "onRedirect", "AppContext", "onSeeResults", "term", "jsx", "AutoComplete", "noop", "open", "import_react", "LocalNavDesktop", "items", "elementLocation", "ElementLocation", "getItemDataset", "id", "contentfulDescriptionDataset", "getContentfulInspectorProps", "jsx", "Fragment", "item", "sys", "url", "title", "isSelected", "analytics", "column1Label", "column1Items", "column2Label", "column2Items", "column3Label", "column3Items", "featuredMenuItem", "handleClick", "clickUrl", "analyticsId", "logUserEvent", "shouldFlushLogs", "logger", "NavigatorItemDesktop", "import_react", "import_react", "LocalNavItemMobile", "sys", "url", "title", "isSelected", "analytics", "column1Label", "column1Items", "column2Label", "column2Items", "column3Label", "column3Items", "featuredMenuItem", "elementLocation", "ElementLocation", "getCurrentUrl", "AppContext", "contentfulDescriptionDataset", "getContentfulInspectorProps", "handleClick", "analyticsId", "logUserEvent", "shouldFlushLogs", "logger", "absoluteUrl", "isLocal", "isLocalUrl", "hasChildren", "jsx", "GlobalNavItem", "navTitle", "NavigatorItemMobile", "LocalNavMobile", "items", "setGroupKey", "GlobalHeaderContext", "defaultGlobalNavMobileGroupKey", "jsx", "Fragment", "props", "i", "LocalNavItemMobile", "import_react", "useConsumerContext", "context", "ConsumerContext", "globalHeaderSearchContainerDesktopOpenCss", "css", "globalHeaderSearchContainerMobileCss", "searchOpenCss", "siteNameCss", "m", "headerContainerCss", "ZIndex", "noMarginCss", "convertToPathAwareNavigatorGroups", "items", "isUrlCurrent", "checkCriteria", "getImageSources", "output", "item", "node", "convertToPathAwareNavGroup", "group", "isSelected", "menuItemsReducer", "accumulator", "isItemCurrent", "getAnalyticsForNavigatorItem", "getIconForNavigatorItem", "getMediaForNavigatorItem", "getContentfulInspectorProps", "column1MenuItemsCollection", "column2MenuItemsCollection", "column3MenuItemsCollection", "featuredHeaderMenuItem", "otherProps", "column1Items", "column2Items", "column3Items", "featuredMenuItem", "getFeaturedItemForNavigatorGroup", "isFeaturedItemVisible", "label", "iconName", "isMediaSvg", "media", "imgSrcs", "combineImageSources", "title", "url", "description", "ctaLabel", "import_react", "import_react_dom", "headerPortalId", "HeaderPortal", "props", "headerPortalRef", "AppContext", "jsx", "IntoHeaderPortal", "children", "headerHeight", "setHeaderHeight", "height", "totalHeaderHeightCssVar", "getHeaderHeightFromCssVar", "Header", "config", "searchOpen", "setSearchOpen", "location", "useLocation", "checkCriteria", "useExperiment", "headerView", "headerBackgroundColorOverride", "PageLayoutContext", "sitewideValues", "SitewideConfigurationContext", "getImageSources", "useContentfulImages", "alternateBrandPropOverride", "useAlternateBrandPropOverride", "Config", "featureFlags", "useFeatureFlags", "enableSearchFeature", "isUrlCurrent", "useConsumerContext", "localNavProps", "motifScheme", "useMotifScheme", "callsToActionCollection", "headerMenuItemGroups", "convertToPathAwareNavigatorGroups", "headerContainerRef", "resizeObserver", "lastSize", "entries", "height", "totalHeaderHeightCssVar", "setHeaderHeight", "elementLocation", "ElementLocation", "siteName", "handleToggleExpanded", "isExpanded", "logUserEvent", "globalHeaderProps", "jsx", "GlobalHeaderLogo", "jsxs", "Fragment", "GlobalHeaderCta", "HeaderPortal", "noMarginCss", "CartIcon", "cx", "globalHeaderSearchContainerDesktopOpenCss", "globalHeaderSearchContainerMobileCss", "shouldRenderSearch", "siteNameLink", "Anchor", "siteNameCss", "searchOpenCss", "GlobalHeaderSearch", "renderLocalNavDesktop", "LocalNavDesktop", "renderLocalNavMobile", "LocalNavMobile", "hasCtas", "finalGlobalHeaderProps", "GlobalHeader", "headerContainerCss", "import_react", "messageFragment", "gql", "contentfulSysIdFragment", "intlProviderQuery", "localIntlProviderQuery", "IntlProvider", "children", "context", "useContentfulContext", "globalApolloClient", "GlobalComponentsContext", "localData", "useContentfulQuery", "localIntlProviderQuery", "globalData", "useGlobalComponentsContentfulQuery", "intlProviderQuery", "Config", "globalMessages", "m", "localMessages", "jsx", "MessageContext", "defaultFormatMessage", "messages", "formatMessage", "message", "vars", "formattedValue", "key", "value", "import_react", "languageFromLocale", "locale", "currentLocale", "defaultLocale", "languageCode", "LanguageDirective", "appContext", "AppContext", "jsx", "W", "languageFromLocale", "import_react", "import_cross_fetch", "NoOpTracer", "__publicField", "_name", "noop", "_callback", "tracer", "NoOpTracer", "getTracer", "setTracer", "tracerImpl", "startFetchEventListeners", "endFetchEventListeners", "customFetch", "input", "init", "resolve", "reject", "listener", "trace", "getTracer", "controller", "Config", "isRejected", "contentfulRequestTimeoutMs", "timeoutMs", "abortTimeout", "initWithAbort", "fetch", "value", "error", "LoadingBar", "loadingCount", "setLoadingCount", "startCallBack", "endCallBack", "requestIdleCallback", "startFetchEventListeners", "endFetchEventListeners", "jsx", "import_react", "useImperativeEffect", "callback", "dependencies", "lastExecutionDependencies", "useRef", "useEffect", "isEqual", "__name", "LogAdBlockUsage", "m", "ensureSingleScript", "noop", "hasAdBlocker", "isNullish", "logInfo", "import_react", "sanitizeCspResource", "resource", "url", "ignoredBlockedUriBySourcePrefix", "Config", "LogCspViolation", "reported", "listener", "e", "blockedURI", "violatedDirective", "sourceFile", "key", "sourceFilePrefix", "logError", "sanitizeCspResource", "basePick", "object", "paths", "basePickBy_default", "value", "path", "hasIn_default", "basePick_default", "pick", "flatRest_default", "object", "paths", "basePick_default", "pick_default", "logTimingEvents", "windowTimingEntries", "timing", "keysToLog", "eventVariable", "eventValue", "pick_default", "logValue", "logTiming", "logProfile", "response", "customFetch", "responseBody", "profile", "logEvent", "LogPageLoad", "m", "listener", "import_react", "logScrollDepthBreakPoints", "LogScrollDepth", "pathname", "useLocation", "maxScrollDepth", "currScrollDepth", "setCurrScrollDepth", "listener", "throttle", "scrollY", "scrollHeight", "scrollDepth", "roundedScrollDepth", "m", "i", "breakpoint", "nextBreakpoint", "isLastBreakpoint", "logValue", "import_react", "snapMotif", "customBlueMotif", "mergeMotifs", "defaultMotif", "m", "customGreenMotif", "mergeMotifs", "defaultMotif", "m", "LazyCustomMotifHandler", "lazyComponent", "module", "MotifRootWrapper", "children", "motif", "passThroughProps", "getCurrentUrl", "AppContext", "featureFlags", "useFeatureFlags", "finalMotif", "useAlternateMotif", "Config", "customGreenMotif", "customBlueMotif", "snapMotif", "jsx", "SuspenseWrapper", "MotifRoot", "import_react", "Viewport", "features", "BrowserFeaturesContext", "viewport", "jsx", "W", "import_react", "PageLayoutProvider", "sessionValue", "children", "footerView", "setFooterView", "headerView", "setHeaderView", "headerBackgroundColorOverride", "setHeaderBackgroundColorOverride", "hasSideNav", "setHasSideNav", "hasSubNav", "setHasSubNav", "hasCustomSideNav", "setHasCustomSideNav", "pageContext", "bgColor", "jsx", "PageLayoutContext", "import_react", "footerItemFragment", "gql", "contentfulSysIdFragment", "criteriaFragment", "footerLocaleDropdownFragment", "footerCookiesSettingsLinkFragment", "footerGroupFragment", "customFooterFragment", "imageButtonFragment", "fragments", "customFooterQuery", "headerMenuItemGroupFragment", "gql", "contentfulSysIdFragment", "headerMenuItemFragment", "fragments", "criteriaFragment", "assetFragment", "featuredHeaderMenuItemFragment", "navigatorFragment", "ctaFragment", "navigationCtaFragment", "sitewideValuesFragment", "gql", "contentfulSysIdFragment", "sitewideConfigurationFragment", "navigatorFragment", "customFooterFragment", "navigationCtaFragment", "headerMenuItemGroupFragment", "headerMenuItemFragment", "featuredHeaderMenuItemFragment", "ctaFragment", "footerGroupFragment", "footerCookiesSettingsLinkFragment", "footerLocaleDropdownFragment", "footerItemFragment", "sitewideConfigurationQuery", "isEntry", "value", "isCollection", "maxDepth", "replaceEntries", "entry", "replacementMap", "depth", "returnVal", "clone_default", "key", "newItems", "item", "SitewideConfigurationProvider", "children", "decideAbExperiment", "useAbExperiments", "currentLocale", "AppContext", "data", "useContentfulQuery", "sitewideConfigurationQuery", "singleCallback", "useSingleCallback", "reference", "first", "finalValues", "isThinking", "variant", "replacement", "logInfo", "cloneDeep_default", "processedFinalValues", "jsx", "SitewideConfigurationContext", "import_react", "error500Css", "css", "Error500", "jsxs", "jsx", "ErrorBoundary", "props", "error", "errorInfo", "trace", "customFetch", "_", "logError", "children", "hasError", "jsx", "Error500", "fontLinkToCheck", "fontLinkAlternative", "canLoadFonts", "error", "parseError", "FontChecker", "m", "canLoad", "newLink", "BlizzardClientEventListener", "_a", "AbstractEventListener", "props", "__name", "initBlizzard", "logEvent", "CollectionMode", "event", "context", "formattedEvents", "formattedEventsArray", "formattedEvent", "formatWebPlatformEvent", "_context", "uri", "data", "LoggingEventType", "error", "parseError", "getCommonBlizzardClientEventListener", "ConsoleClientEventListener", "ConsoleEventListener", "type", "message", "firstMessage", "firstMessageWithColor", "addGa4EventCallback", "callback", "gtag", "_args", "GoogleAnalytics4ClientEventListener", "AbstractDataLayerEventListener", "ga4Script", "config", "gtmScriptId", "addGtmEventCallback", "GoogleTagManagerClientEventListener", "gtmScript", "GrapheneClientEventListener", "AbstractGrapheneEventListener", "options", "FetchNetworkHandler", "Graphene", "matchAllRequests", "SentryClientEventListener", "AbstractSentryEventListener", "init", "captureException", "captureEvent", "googleAnalyticsEventName", "googleAnalyticsValueEventName", "googleAnalyticsTimingEventName", "_GoogleEventListener", "GoogleTagManagerClientEventListener", "props", "initialContext", "otherProps", "__publicField", "isGtmDebug", "superHasAllPermissions", "permission", "data", "error", "parseError", "inCalifornia", "enableConsentConfigs", "event", "context", "LoggingEventType", "requiredFields", "GoogleEventListener", "import_react", "import_react", "import_react", "fragments", "gql", "contentfulSysIdFragment", "ctaFragment", "queries", "Accordion", "props", "id", "isContentfulSysProps", "elementLocation", "ElementLocation", "data", "useContentfulQuery", "queries", "titleDataset", "getContentfulInspectorProps", "accordionItems", "jsx", "item", "plainTitle", "AccordionItem", "renderRichTextMarkingsOnly", "isExpanding", "logUserEvent", "Content", "import_react", "fragments", "gql", "contentfulSysIdFragment", "query", "verticalPaddingCss", "css", "nonMobileMediaQuery", "AnimatedAccordion", "props", "elementLocation", "ElementLocation", "data", "useContentfulQuery", "query", "accordionContentsCollection", "mediaDirection", "autoPlaySpeedSecs", "textAlignmentMobile", "Alignment", "getImageSources", "useContentfulImages", "items", "item", "imageSource", "imageAltText", "parseMedia", "mobileImageSource", "desktopSettings", "mobileSettings", "getImageSourceSettings", "imgSrcs", "combineImageSources", "renderRichTextMarkingsOnly", "renderRichTextWithElements", "jsx", "index", "logUserEvent", "import_react", "import_react", "getPortraitCardImgSrcSetSizes", "quality", "cardWidths", "cardWidthsStr", "cw", "getLandscapeCardImgSrcSetSizes", "width", "mobileMaxWidth", "CarouselV3ImageItem", "cardItem", "mediaAspectRatio", "isVisible", "shouldLoad", "isResponsiveWidth", "hideLinkArrow", "otherProps", "imageMedia", "imageSource", "imageAltText", "parseMedia", "mobileImageSource", "getImageSources", "useContentfulImages", "elementLocation", "ElementLocation", "imageQuality", "imageSrcSettings", "imgSrcs", "combineImageSources", "logoMedia", "logoImgSrcs", "logoAltText", "size", "slug", "url", "onClick", "logUserEvent", "shouldFlushLogs", "logger", "jsx", "CarouselCardItem", "import_rich_text_plain_text_renderer", "import_react", "CarouselV3TextItem", "textItem", "description", "renderRichText", "subtext", "slug", "url", "elementLocation", "ElementLocation", "elementText", "jsx", "CarouselTextItem", "logUserEvent", "import_react", "CarouselV3VideoItem", "cardItem", "mediaAspectRatio", "enableVideoControls", "isVisible", "shouldLoad", "isResponsiveWidth", "hideLinkArrow", "otherProps", "videoPlayed", "setVideoPlayed", "prevWatchEventTime", "elementLocation", "ElementLocation", "videoMedia", "getBestBgImgSrc", "getImageSources", "useContentfulImages", "posterSource", "videoSource", "mobileVideoSource", "useParseMediaContainer", "logoMedia", "logoImgSrcs", "logoAltText", "imageSource", "imageAltText", "parseMedia", "mobileImageSource", "quality", "imageQuality", "size", "getPortraitCardImgSrcSetSizes", "getLandscapeCardImgSrcSetSizes", "combineImageSources", "onPlay", "_e", "fileName", "getFileInfo", "logUserEvent", "onPause", "onTimeUpdate", "getVideoWatchLogger", "value", "slug", "url", "onClick", "shouldFlushLogs", "logger", "jsx", "CarouselCardItem", "carouselItemFragments", "gql", "contentfulSysIdFragment", "fragments", "carouselV3Query", "noShadowCss", "css", "CarouselV3", "props", "isRTL", "AppContext", "getCurrentUrl", "elementLocation", "ElementLocation", "url", "pauseAnimations", "Config", "alternateBrandPropOverride", "useAlternateBrandPropOverride", "data", "useContentfulQuery", "carouselV3Query", "carouselItemsType", "contentsCollection", "mediaAspectRatio", "items", "singleView", "enableOverflowDecoration", "jsx", "index", "trigger", "logUserEvent", "item", "cardItem", "hasVideo", "autoPlay", "enableVideoControls", "shadowCss", "CarouselV3VideoItem", "CarouselV3ImageItem", "textItem", "CarouselV3TextItem", "ContentShallow", "props", "data", "useContentfulQuery", "queries", "jsx", "Content", "import_react", "import_react", "arkosePublicDevKey", "arkosePublicProdKey", "globalMyEnforcement", "useArkose", "nonce", "onReady", "onCompleted", "onError", "onReset", "myEnforcementRef", "enableArkose", "arkoseDevKey", "arkosePublicDevKey", "arkoseProdKey", "arkosePublicProdKey", "publicKey", "Config", "setMyEnforcementConfig", "myEnforcement", "response", "setMyEnforcementRef", "setupEnforcementViaDataCallback", "attributes", "ensureSingleScript", "import_rich_text_react_renderer", "countryCodeToName", "sortedEntries", "a", "b", "sortedCountries", "presetDropdowns", "name", "code", "getFormField", "form", "fieldName", "row", "field", "utmParameterFieldMap", "getFormExtraParameters", "input", "currentUrl", "config", "item", "searchParams", "output", "key", "parameter", "getFormQueryParams", "params", "url", "rawParams", "_value", "updatedKey", "value", "formBody", "multiValues", "val", "optionName", "singleValue", "buttonContainerCss", "css", "mediaQuery", "FieldByType", "field", "submitText", "submitSuccessText", "submitTextDataset", "submitProps", "fieldInitialValue", "typename", "inputInspectorProps", "getContentfulInspectorProps", "error", "richLabel", "initialValue", "jsx", "Input", "dropdownDatasets", "optionCollectionItems", "contentfulInitialValue", "allValues", "value", "initialSelectValue", "Select", "omit_default", "key", "item", "options", "MultiSelectDropdown", "presetOptions", "presetDropdowns", "RadioSelectField", "handleSubmit", "disabled", "loading", "submitSuccess", "Button", "hiddenCss", "css", "defaultRedirectTimeout", "formKey", "FormRow", "rowAsText", "sys", "fieldsCollection", "fieldRender", "rowAsTextDataset", "getContentfulInspectorProps", "jsx", "renderRichTextWithElementsNoHeadings", "makeFormChildrenRenderer", "rowsCollection", "submitText", "submitSuccessText", "submitTextDataset", "formInitialOverrides", "submitProps", "Fragment", "item", "FieldByType", "Form", "additionalFeaturesCollection", "analytics", "redirectUrl", "endpoint", "responseType", "redirectTimeout", "extraParams", "callback", "enableArkose", "Config", "arkosePublicDevKey", "arkosePublicProdKey", "persistFieldEdits", "prepopulatePerQueryParams", "onFormInit", "onValueChange", "renderErrorMessage", "rest", "initalFormValues", "setInitialFormValues", "allFormLocalStorageRef", "userLocation", "currentLocale", "getCurrentUrl", "AppContext", "country", "initialFormBody", "allLocalStorageForms", "getLocalStorageItem", "merge_default", "currentUrl", "queryParamsValues", "getFormQueryParams", "fieldName", "getFormField", "key", "value", "elementLocation", "ElementLocation", "arkoseRef", "arkosePromiseResolveRef", "arkosePromiseRejectRef", "useArkose", "token", "error", "logError", "formatMessage", "MessageContext", "on400ResponseMessage", "on500ResponseMessage", "onInvalidClientSideSubmissionMessage", "formRequiredFieldsMessage", "statusCode", "formDownloadUrl", "setDownloadUrl", "anchorTag", "onSubmitSuccess", "response", "formBody", "logUserEvent", "formRedirectUrl", "data", "setLocalStorageItem", "onSubmitFailure", "hasSubmitButton", "typename", "persistentFormFields", "rowsAsJson", "submitTextDatasetAsJson", "persistFormFieldsAsJson", "FormChildrenRenderer", "formRows", "getArkoseToken", "missingArkoseError", "resolve", "reject", "onFormValueChange", "debounce", "lastChangedFieldName", "isInit", "finalExtraParams", "getFormExtraParameters", "jsxs", "formRowFragment", "gql", "contentfulSysIdFragment", "extraParametersFormFeatureFragment", "formFragments", "fragments", "queries", "FormShallow", "props", "data", "useContentfulQuery", "queries", "jsx", "Form", "import_react", "galleryTagsPrefix", "GalleryTilesSorting", "defaultTileSorting", "import_react", "globalDefaultImage", "defaultImageAltText", "defaultDateOptions", "editorialGalleryDateOptions", "imageHeights", "imageHeightsStr", "ih", "getGalleryImgSrcSetSizes", "quality", "height", "mobileMaxWidth", "import_react", "forcedArabicLocale", "useFormatDate", "currentLocale", "AppContext", "date", "dateFormatOptions", "effectiveLocale", "EditorialGalleryCard", "analytics", "date", "label", "media", "slugReference", "sys", "title", "url", "brand", "formatDate", "useFormatDate", "logEvent", "ConsumerContext", "getImageSources", "useContentfulImages", "isRTL", "AppContext", "formatMessage", "MessageContext", "validUrl", "logEventAction", "imageSource", "imageAltText", "parseMedia", "mobileImageSource", "globalDefaultImage", "defaultImageAltText", "quality", "imageQuality", "imageSrcSettings", "getGalleryImgSrcSetSizes", "imgSrcs", "combineImageSources", "contentfulDescriptionDataset", "brandDataset", "titleDataset", "labelDataset", "mediaDataset", "dateDataset", "getContentfulInspectorProps", "jsx", "renderRichTextMarkingsOnly", "editorialGalleryDateOptions", "fragments", "gql", "criteriaFragment", "contentfulSysIdFragment", "queries", "topicFragment", "gql", "contentfulSysIdFragment", "galleryDropdownFragment", "gql", "contentfulSysIdFragment", "topicFragment", "galleryFragment", "fragments", "lazyGalleryQuery", "tileCollectionQuery", "galleryWrapperCss", "css", "m", "totalHeaderHeightCssVar", "galleryPlaceholderCss", "h3Css", "buttonWrapperCss", "editorialGalleryWrapperCss", "editorialGalleryPaginationCss", "nonMobileMediaQuery", "EditorialGalleryLazyTiles", "emptyPlaceholder", "tiles", "emptyPlaceholderDataset", "isGalleryLoading", "defaultTileImage", "numberOfTiles", "tileIds", "tile", "data", "loading", "useContentfulQuery", "tileCollectionQuery", "sortedItems", "a", "b", "jsx", "Fragment", "_", "index", "SkeletonEditorialGalleryCard", "EditorialGalleryCard", "galleryPlaceholderCss", "dataSetToAttributes", "import_react", "import_rich_text_plain_text_renderer", "import_react", "mobileSummaryCardHeight", "summaryCardHeroHeight", "summaryCardHeroCss", "css", "nonMobileMediaQuery", "SummaryCard", "analytics", "date", "label", "media", "showDates", "showDescriptions", "showMedia", "slugReference", "sys", "title", "url", "isHeroTile", "eyebrowText", "formatDate", "useFormatDate", "elementLocation", "ElementLocation", "getImageSources", "useContentfulImages", "validUrl", "logEventAction", "logUserEvent", "imageSource", "imageAltText", "parseMedia", "mobileImageSource", "globalDefaultImage", "defaultImageAltText", "quality", "imageQuality", "imageSrcSettings", "getGalleryImgSrcSetSizes", "imgSrcs", "combineImageSources", "contentfulDescriptionDataset", "titleDataset", "labelDataset", "mediaDataset", "dateDataset", "getContentfulInspectorProps", "stickers", "sticker", "jsx", "renderRichTextMarkingsOnly", "renderRichText", "defaultDateOptions", "cx", "summaryCardHeroCss", "LazyTiles", "emptyPlaceholder", "tiles", "emptyPlaceholderDataset", "showDates", "showDescriptions", "showMedia", "isGalleryLoading", "defaultTileImage", "numberOfTiles", "tileIds", "tile", "data", "loading", "useContentfulQuery", "tileCollectionQuery", "sortedItems", "a", "jsx", "GalleryGridV2", "_", "index", "SkeletonSummaryCard", "Fragment", "SummaryCard", "galleryPlaceholderCss", "dataSetToAttributes", "import_react", "useGalleryTiles", "galleryId", "page", "tags", "pageSize", "sortBy", "defaultTileSorting", "appContext", "AppContext", "browserFeatures", "BrowserFeaturesContext", "previousTotal", "params", "platform", "device", "url", "Config", "data", "isLoading", "useAsyncData", "error", "logger", "buildSearchMenus", "dropdowns", "galleryPaginationEnabled", "matchAllOptionsTitle", "dropdownItemsCollection", "queryParamKey", "title", "sys", "contentfulDescriptionDataset", "getContentfulInspectorProps", "galleryTagsPrefix", "kebabCase_default", "displayText", "topicId", "a", "b", "handleScroll", "gallery", "totalHeaderHeight", "totalHeaderHeightCssVar", "galleryTop", "scrollY", "Gallery", "props", "galleryId", "getUrlParams", "setUrlParams", "ConsumerContext", "onRedirect", "getCurrentUrl", "AppContext", "query", "page", "setPage", "dropdownFilters", "buildSearchMenus", "dropdownFiltersIds", "dropdown", "tilesTags", "setTilesTags", "pick_default", "searchParams", "newFilters", "newPage", "paginationData", "isLoading", "useGalleryTiles", "galleryRef", "onChangeFilter", "filterKey", "filterValue", "cloneDeep_default", "currentQuery", "otherParams", "omit_default", "onChangePage", "newUrlParams", "clearFilters", "mobileFiltersWrapperTextDataset", "clearFiltersCtaCopyDataset", "emptyPlaceholderDataset", "getContentfulInspectorProps", "Config", "queryRedirectsKeys", "key", "requestUrl", "url", "value", "galleryTagsPrefix", "jsxs", "galleryWrapperCss", "jsx", "GalleryFiltersV2", "LazyTiles", "Pagination", "EditorialGallery", "props", "gallery", "galleryId", "getUrlParams", "setUrlParams", "ConsumerContext", "onRedirect", "getCurrentUrl", "AppContext", "query", "page", "setPage", "dropdownFilters", "buildSearchMenus", "dropdownFiltersIds", "dropdown", "tilesTags", "setTilesTags", "pick_default", "searchParams", "newFilters", "newPage", "paginationData", "isLoading", "useGalleryTiles", "galleryRef", "onChangeFilter", "filterKey", "filterValue", "cloneDeep_default", "currentQuery", "otherParams", "omit_default", "onChangePage", "newUrlParams", "handleScroll", "clearFilters", "mobileFiltersWrapperTextDataset", "clearFiltersCtaCopyDataset", "emptyPlaceholderDataset", "getContentfulInspectorProps", "Config", "queryRedirectsKeys", "key", "requestUrl", "url", "value", "galleryTagsPrefix", "jsxs", "editorialGalleryWrapperCss", "jsx", "GalleryFiltersV2", "cx", "editorialGalleryCardsContainerCss", "EditorialGalleryLazyTiles", "Pagination", "editorialGalleryPaginationCss", "LazyGallery", "props", "galleryId", "galleryData", "useContentfulQuery", "lazyGalleryQuery", "gallery", "isEditorialGallery", "jsx", "EditorialGallery", "Gallery", "import_react", "Mosaic", "props", "elementLocation", "ElementLocation", "getBestBgImgSrc", "getImageSources", "useContentfulImages", "tilesCollection", "columns", "mobileColumns", "filtersCollection", "tiles", "video", "preview", "thumbnail", "analytics", "item", "poster", "label", "component", "logUserEvent", "i", "getMediaProps", "filters", "sys", "isAll", "filter", "jsx", "fragments", "gql", "contentfulSysIdFragment", "query", "MosaicShallow", "props", "data", "useContentfulQuery", "query", "jsx", "Mosaic", "import_rich_text_plain_text_renderer", "import_react", "import_react", "SlugContext", "tileCollectionAndRelatedContentQuery", "gql", "fragments", "import_react", "useRelatedContent", "page", "tags", "pageSize", "sortBy", "defaultTileSorting", "appContext", "AppContext", "browserFeatures", "BrowserFeaturesContext", "previousTotal", "params", "platform", "device", "url", "Config", "data", "isLoading", "useAsyncData", "error", "logger", "tilesLimit", "defaultDateOptions", "RelatedContent", "props", "topics", "slugId", "SlugContext", "getImageSources", "useContentfulImages", "isRTL", "AppContext", "formatDate", "useFormatDate", "topicsIds", "topic", "paginationData", "isLoading", "useRelatedContent", "tilesData", "loadingTiles", "useContentfulQuery", "tileCollectionAndRelatedContentQuery", "tile", "globalDefaultImage", "defaultImageSource", "defaultImageAltText", "defaultMobileImageSource", "useParseMediaContainer", "tilesCount", "jsx", "CarouselV3", "tileMediaType", "tileHasVideo", "tileHasMedia", "imgSrcs", "combineImageSources", "tileSlug", "tileTitle", "titleBody", "tileDate", "CarouselCardItem", "SitesToBrands", "Config", "fragments", "gql", "contentfulSysIdFragment", "queries", "import_react", "Tabs", "props", "data", "useContentfulQuery", "queries", "elementLocation", "ElementLocation", "itemsCollection", "onSelectTab", "index", "logUserEvent", "items", "item", "content", "contentDataProps", "key", "jsx", "FormShallow", "ContentShallow", "import_react", "LazyBarChart", "lazyComponent", "module", "BarChart", "props", "chartData", "yAxis", "xAxes", "stackKey", "filters", "width", "height", "hideXAxisLabels", "hideYAxisLabels", "hideXPercentLabels", "hideLegend", "chartTitle", "dataColors", "showAsPercent", "numberOfDecimalPlaces", "isRTL", "AppContext", "rawData", "getRawData", "jsx", "SuspenseWrapper", "ChartSkeleton", "seriesFragment", "gql", "chartDataFragment", "contentfulSysIdFragment", "fragments", "gql", "contentfulSysIdFragment", "chartDataFragment", "queries", "BarChartShallow", "props", "id", "isContentfulSysProps", "data", "loading", "useContentfulQuery", "queries", "jsx", "ChartSkeleton", "chartData", "xAxes", "BarChart", "import_react", "import_react", "LazyGeoMap", "lazyComponent", "module", "topographyDataEndpoint", "GeoMap", "props", "chartTitle", "chartData", "width", "countryCodeKey", "valueKey", "dataScalingMethod", "topographyData", "setTopographyData", "currentLocale", "AppContext", "fetchTopographyData", "data", "customFetch", "error", "logError", "rawData", "getRawData", "jsx", "SuspenseWrapper", "ChartSkeleton", "fragments", "gql", "contentfulSysIdFragment", "chartDataFragment", "queries", "GeoMapShallow", "props", "id", "isContentfulSysProps", "data", "loading", "useContentfulQuery", "queries", "jsx", "ChartSkeleton", "chartData", "valueKey", "GeoMap", "LazyLineChart", "lazyComponent", "module", "getAccessors", "yAxisKeys", "xAxisKey", "accessors", "yKey", "row", "LineChart", "props", "chartData", "curve", "xKey", "yKeys", "chartTitle", "rawData", "getRawData", "jsx", "SuspenseWrapper", "ChartSkeleton", "fragments", "gql", "contentfulSysIdFragment", "chartDataFragment", "queries", "LineChartShallow", "props", "id", "isContentfulSysProps", "data", "loading", "useContentfulQuery", "queries", "jsx", "ChartSkeleton", "chartData", "yKeys", "LineChart", "fragments", "gql", "contentfulSysIdFragment", "chartDataFragment", "queries", "import_react", "dataFormatDate", "LazyTableVisualization", "lazyComponent", "module", "getRowDataForKey", "series", "row", "key", "locale", "properties", "data", "dataType", "dataFormat", "getColumns", "columns", "propertyKeys", "column", "headerName", "Table", "props", "chartData", "tableColumns", "enableSearch", "initialRowCount", "currentLocale", "AppContext", "error", "setError", "rawData", "getRawData", "err", "logger", "Config", "jsxs", "jsx", "SuspenseWrapper", "ChartSkeleton", "TableShallow", "props", "id", "isContentfulSysProps", "data", "loading", "useContentfulQuery", "queries", "jsx", "ChartSkeleton", "chartData", "Table", "chartToggleQuery", "gql", "contentfulSysIdFragment", "fragments", "Chart", "props", "jsx", "ChartToggle", "BarChartShallow", "LineChartShallow", "GeoMapShallow", "TableShallow", "Fragment", "useDropdowns", "useFeatureFlags", "data", "loading", "useContentfulQuery", "chartToggleQuery", "elementLocation", "ElementLocation", "itemsProps", "analytics", "title", "contentsCollection", "id", "label", "logUserEvent", "contents", "ChartToggleV2", "ChartToggleWrapper", "props", "useFeatureFlags", "jsx", "ChartToggle", "import_react", "fragments", "gql", "seriesFragment", "chartDataFragment", "contentfulSysIdFragment", "queries", "LazyMultiVisualization", "lazyComponent", "module", "generateChartMeta", "chartData", "generateVisualizationMeta", "visualization", "getProcessedChartData", "chartDataItems", "series", "filteredChartData", "unnamedChartDataCount", "MultiVisualization", "chartTitle", "seriesName", "chartDataCollection", "visualizationsCollection", "selectableFields", "locale", "ContentfulContext", "visualizationMetadataItems", "chartMetadataItems", "fieldMetadataItems", "field", "selectedChartData", "setSelectedChartData", "selectedVisualization", "setSelectedVisualization", "selectedField", "setSelectedField", "onChartDataSelected", "item", "onVisualizationSelected", "viz", "renderVisualization", "jsx", "TableShallow", "BarChartShallow", "LineChartShallow", "GeoMapShallow", "SuspenseWrapper", "MultiVisualizationShallow", "props", "id", "isContentfulSysProps", "data", "useContentfulQuery", "queries", "BlockContent", "props", "jsx", "LazyGallery", "CarouselV3", "Tabs", "MosaicShallow", "FormShallow", "ChartToggleWrapper", "BarChartShallow", "LineChartShallow", "GeoMapShallow", "MultiVisualizationShallow", "TableShallow", "ContentShallow", "Accordion", "AnimatedAccordion", "RelatedContent", "logError", "Fragment", "Block", "maxColumns", "eyebrow", "title", "subtitle", "titleAlignment", "titleAlignmentMobile", "contentsCollection", "callsToActionCollection", "anchorId", "isNarrow", "widthStyle", "fullHeight", "brandBackgroundColor", "backgroundColor", "backgroundMediaV2", "theme", "isNextSameBackgroundColor", "isPreviousSameBackgroundColor", "className", "sys", "preChildren", "postChildren", "givenShowCurtain", "denseLayout", "motifScheme", "useMotifScheme", "replacements", "SlugContext", "finalContentsCollection", "contentsCollectionCopy", "i", "contentId", "contentType", "replacement", "backgroundImageSource", "backgroundImageAltText", "backgroundVideoSource", "mobileBackgroundImageSource", "mobileBackgroundImageAltText", "mobileBackgroundVideoSource", "thumbnailSource", "useParseMediaContainer", "blockChildren", "item", "callsToAction", "CallToAction", "getImageSources", "useContentfulImages", "bgImgSrc", "desktopSettings", "mobileSettings", "getImageSourceSettings", "combineImageSources", "backgroundMediaStickers", "sticker", "inspectorDatasets", "getContentfulInspectorProps", "showCurtain", "block", "renderRichText", "renderRichTextMultiLineWithMarkings", "ElementLocation", "import_react", "import_react", "ImageSubtopic", "props", "getImageSources", "useContentfulImages", "title", "image", "desktopSettings", "mobileSettings", "getImageSourceSettings", "imgSrcs", "combineImageSources", "jsx", "StatSubtopic", "stat", "subtitle", "jsx", "renderRichTextMultiLineWithMarkings", "TextSubtopic", "props", "getImageSources", "useContentfulImages", "title", "icon", "body", "imgSrcs", "combineImageSources", "jsx", "renderRichTextMultiLineWithMarkings", "DefaultImageHeights", "DefaultMobileImageHeights", "MultiValuePropBlock", "props", "getImageSources", "useContentfulImages", "isRTL", "AppContext", "anchor", "brandBackgroundColor", "backgroundColor", "title", "multiValuePropBlockSubtitle", "body", "subtopicsCollection", "callsToActionCollection", "mediaCollection", "desktopMediaAspectRatio", "mobileMediaAspectRatio", "mediaDirection", "autoplayCarousel", "fullHeight", "style", "motifScheme", "useMotifScheme", "callsToAction", "item", "jsx", "CallToAction", "mediaSources", "desktopSettings", "mobileSettings", "getImageSourceSettings", "combineImageSources", "subtopics", "stickers", "sticker", "renderRichTextMultiLineWithMarkings", "renderRichTextWithElementsNoHeadings", "subtopic", "ImageSubtopic", "StatSubtopic", "TextSubtopic", "BlockTabs", "props", "title", "subtitle", "titleAlignment", "titleAlignmentMobile", "brandBackgroundColor", "backgroundColor", "BackgroundColor", "fullHeight", "tabsCollection", "anchorId", "motifScheme", "useMotifScheme", "elementLocation", "ElementLocation", "selectedTab", "setSelectedTab", "handleSelectTab", "index", "tabText", "logUserEvent", "tabItems", "blockTab", "jsx", "MultiValuePropBlock", "jsxs", "Fragment", "Block", "renderRichTextMultiLineWithMarkings", "TabItems", "tabItem", "textSubtopicFragment", "lib_default", "imageSubtopicFragment", "statSubtopicFragment", "multiValuePropBlockFragment", "contentfulSysIdFragment", "ctaFragment", "fragments", "multiValuePropBlockQuery", "blockTabsFragment", "lib_default", "contentfulSysIdFragment", "multiValuePropBlockFragment", "blockTabsQuery", "breakFragment", "gql", "fragments", "contentfulSysIdFragment", "breakQuery", "import_react", "breadcrumbsFragment", "gql", "contentfulSysIdFragment", "breadcrumbsQuery", "structureBreadcrumbs", "slugData", "parent", "currentBreadcrumbText", "result", "createBreadcrumbSchema", "breadcrumbs", "breadcrumb", "index", "import_rich_text_plain_text_renderer", "renderString", "data", "dateFormatOptions", "getHeroHeaderComponent", "fallbackDate", "header", "isExpectingDate", "jsx", "Fragment", "renderRichTextMarkingsOnly", "headerText", "renderString", "parsedDate", "isParsedDateValid", "formatDate", "useFormatDate", "isCarouselV3", "props", "headerImgSrcSetSizes", "width", "i", "globalNavHighlightSizes", "getForegroundMedia", "foreground", "getImageSources", "dataset", "videoSource", "posterSource", "foregroundMediaStickers", "isVideoDataProps", "isImageDataProps", "sticker", "mobileVideoSource", "parseMedia", "jsx", "MediaWithStickers", "imageSource", "imageAltText", "mobileImageSource", "desktopSettings", "mobileSettings", "getImageSourceSettings", "imgSrcs", "combineImageSources", "isCarouselV3", "CarouselV3", "SnapchatEmbed", "Hero", "props", "eyebrow", "title", "subTitle", "body", "backgroundMediaLayout", "BackgroundMediaLayout", "backgroundMediaV2", "callsToActionCollection", "isHeaderDate", "header", "headerMediaV2", "brandBackgroundColor", "backgroundColor", "theme", "textAlign", "textAlignMobile", "verticalTextAlign", "fitWindow", "curtainOpacityPercentage", "mediaWrap", "className", "footer", "showMediaMobile", "anchorId", "sys", "postChildren", "size", "showScrollButton", "topics", "displayTopics", "increaseTitleFontSize", "motifScheme", "useMotifScheme", "browserFeatures", "BrowserFeaturesContext", "elementLocation", "ElementLocation", "breadcrumbData", "SlugContext", "breadcrumbs", "structureBreadcrumbs", "containerRef", "fallbackDate", "shareable", "backgroundImageSource", "backgroundImageAltText", "backgroundVideoSource", "backgroundImageSize", "mobileBackgroundImageSource", "mobileBackgroundImageAltText", "mobileBackgroundVideoSource", "mobileBackgroundImageSize", "backgroundVideoThumbnailSource", "useParseMediaContainer", "headerMediaSource", "headerImageSource", "headerImageAltText", "mobileHeaderMediaSource", "mobileHeaderImageSource", "callsToAction", "item", "CallToAction", "inspectorDataset", "getContentfulInspectorProps", "useContentfulImages", "foregroundMediaVideoSource", "foregroundVideoThumbnailSource", "foregroundMedia", "bg", "isNullish", "alternativeBackground", "HeroHeader", "getHeroHeaderComponent", "headerSettings", "headerImgSrcs", "bgImgDprData", "getDprDataByHeight", "bgImgSrcs", "bgDesktopSettings", "bgMobileSettings", "baseAvifSrc", "additionalAvifSrcWithDpr", "supportsAvif", "avifSrc", "src", "getSrcSetUrl", "heroSize", "handleScrollDownButtonClick", "logUserEvent", "headerHeight", "getHeaderHeightFromCssVar", "scrollPos", "topicsToRender", "topic", "Topic", "backgroundMediaStickers", "jsxs", "Fragment", "Config", "W", "renderRichTextMultiLineWithMarkings", "renderRichTextWithElementsNoHeadings", "omit_default", "fragments", "gql", "ctaFragment", "snapchatEmbedFragment", "emphasizedTextFragment", "blockHeroQuery", "import_rich_text_plain_text_renderer", "ImmersiveScrollBlockCard", "tile", "getImageSources", "useContentfulImages", "imageSource", "videoSource", "contentType", "mobileImageSource", "mobileVideoSource", "mobileContentType", "thumbnailSource", "useParseMediaContainer", "imgSrcs", "videoProps", "desktopSettings", "mobileSettings", "getImageSourceSettings", "combineImageSources", "tileSlug", "tileTitle", "titleBody", "jsx", "CarouselCardItem", "ImmersiveScrollBlock", "props", "title", "tilesDirection", "text", "textAlignmentMobile", "eyebrow", "brandBackgroundColor", "backgroundColor", "anchor", "tilesCollection", "motifScheme", "useMotifScheme", "jsx", "renderRichTextMultiLineWithMarkings", "tile", "ImmersiveScrollBlockCard", "import_react", "Tile", "props", "isRTL", "AppContext", "getImageSources", "useContentfulImages", "elementLocation", "ElementLocation", "rawData", "useContentfulQuery", "queries", "isContentfulSysNotShallow", "data", "urlFromProps", "title", "label", "media", "queryImageSize", "queryImageFit", "urlFromData", "afterClick", "beforeClick", "onClick", "propsImageSize", "propsImageFit", "imageSource", "imageAltText", "parseMedia", "onClickWrapped", "logUserEvent", "url", "imageSize", "imageFit", "imgSrcs", "imageHeightForImageSize", "TileImageSize", "jsx", "renderRichTextMarkingsOnly", "TileImageFit", "immersiveScrollBlockFragment", "gql", "contentfulSysIdFragment", "emphasizedTextFragment", "fragments", "immersiveScrollBlockQuery", "parseCustomMeta", "customMeta", "name", "content", "logger", "Metas", "props", "customMetas", "parsedCustomMetas", "imageUrl", "getImageUrl", "headerProps", "jsx", "Header", "blogSchemaFragment", "gql", "contentfulSysIdFragment", "faqPageSchemaFragment", "gql", "contentfulSysIdFragment", "import_rich_text_html_renderer", "schemaOrgUrl", "generateWebSchema", "url", "schemaData", "postedAt", "lastModifiedAt", "organizationSchemaData", "generateBlogSchema", "generateOrganizationSchema", "generateFaqPageSchema", "generateOrganizationSnippet", "blogSchemaData", "organizationSnippet", "images", "item", "organizaitonSnippet", "faqPageSchemaData", "questions", "organizationSchemaFragment", "gql", "contentfulSysIdFragment", "organizationSchemaCollectionQuery", "import_react", "WebSchemas", "props", "schemas", "getCurrentUrl", "AppContext", "publishedAt", "postedDate", "SlugContext", "currentUrl", "organizationSchemaData", "useContentfulQuery", "organizationSchemaCollectionQuery", "transformedSchemas", "schema", "generateWebSchema", "first", "jsx", "W", "idx", "fragments", "gql", "blogSchemaFragment", "organizationSchemaFragment", "faqPageSchemaFragment", "contentfulSysIdFragment", "query", "scrollAnimatedVideoFragment", "gql", "contentfulSysIdFragment", "assetFragment", "scrollAnimatedSectionFragment", "blockAllFragment", "query", "splitBlockFragment", "gql", "contentfulSysIdFragment", "ctaFragment", "fragments", "splitBlockQuery", "subNavigationFragment", "gql", "contentfulSysIdFragment", "subNavigationQuery", "import_react", "import_react", "rtlRange", "rtl", "direction", "source", "import_react", "baseMetadataQueryParamsAllowlist", "getMetadataQueryParamsAllowlist", "siteSpecificAllowlist", "Config", "filterMetadataUrl", "currentUrl", "queryParamsAllowlist", "originalUrl", "filteredUrl", "key", "value", "AlternateLang", "localizedIn", "defaultLocale", "getCurrentUrl", "AppContext", "url", "filterMetadataUrl", "nonDefaultLocales", "locale", "jsxs", "W", "jsx", "localizedUrl", "import_react", "Canonical", "localizedIn", "defaultLocale", "currentLocale", "getCurrentUrl", "AppContext", "url", "filterMetadataUrl", "jsx", "W", "import_react", "cookieInformationQuery", "gql", "tableCss", "css", "tableContainerCss", "CookieInformationBlock", "context", "useContentfulContext", "globalApolloClient", "GlobalComponentsContext", "currentLocale", "AppContext", "formatMessage", "MessageContext", "formattedName", "formattedProvider", "formattedDomains", "formattedPurpose", "formattedExpiration", "formattedBlockTitle", "formattedUpdated", "data", "useGlobalComponentsContentfulQuery", "cookieInformationQuery", "Config", "cookieModal", "head_default", "jsx", "Spinner", "cookieModalLastPublished", "formattedDate", "cookieCategories", "tableColumns", "row", "rowProvider", "renderRichTextWithElements", "rowDomains", "rowPurpose", "rowExpiration", "cookieTables", "category", "tableTitle", "tableData", "cookie", "Content", "kebabCase_default", "Table", "Block", "import_react", "BlockShallow", "props", "data", "useContentfulQuery", "query", "jsx", "Block", "import_react", "import_react", "animatedMediaCardForegroundImageCss", "css", "animatedMediaCardCss", "m", "smallMobileMediaQuery", "animatedMediaCardWrapperCss", "animatedMediaCardBackgroundImageCss", "animatedMediaCardPictureCss", "AnimatedMediaCard", "url", "backgroundImageSources", "foregroundImageSources", "elementLocation", "ElementLocation", "jsxs", "Anchor", "animatedMediaCardCss", "logUserEvent", "shouldFlushLogs", "logger", "jsx", "animatedMediaCardWrapperCss", "Picture", "animatedMediaCardBackgroundImageCss", "animatedMediaCardPictureCss", "animatedMediaCardForegroundImageCss", "cardContainerCss", "css", "m", "twoColumnCollapseMediaQuery", "cardContainerWithEyebrowCss", "cardContainerWithCtasCss", "CardBlock", "callsToActionCollection", "cardsCollection", "eyebrow", "textAlignment", "Alignment", "textAlignmentMobile", "getImageSources", "useContentfulImages", "isMobile", "useIsMobile", "numberOfColumns", "callsToAction", "item", "jsx", "CallToAction", "Block", "cx", "cardContainerCss", "cardContainerWithEyebrowCss", "cardContainerWithCtasCss", "AnimatedMediaCard", "animatedMediaCardFragment", "gql", "fragments", "contentfulSysIdFragment", "cardBlockFragment", "ctaFragment", "cardBlockQuery", "CardBlockShallow", "props", "data", "useContentfulQuery", "cardBlockQuery", "jsx", "CardBlock", "galleryContainerCss", "css", "twoColumnCollapseMediaQuery", "galleryContainerWithEyebrowCss", "m", "import_react", "onError", "errorHandler", "ApolloLink", "operation", "forward", "Observable", "observer", "sub", "retriedSub", "retriedResult", "result", "networkError", "e", "ErrorLink", "_super", "__extends", "_this", "getQueryName", "query", "sourceName", "def", "ContentfulInMemoryCache", "InMemoryCache", "options", "trace", "getTracer", "getQueryName", "result", "optimistic", "createContentfulCache", "fragments", "apolloState", "keyFields", "storeObject", "context", "entry", "isReference", "defaultDataIdFromObject", "typePolicies", "typeName", "cacheOptions", "cache", "restoreSpan", "createShortNameGenerator", "prefix", "count", "queryOptimizeVisitor", "ApolloLink", "operation", "forward", "fragmentMap", "variableMap", "getNextFragmentName", "getNextVariableName", "visit", "node", "originalName", "newVariables", "key", "newKey", "newQueryAst", "cloneDeep_default", "visitor", "newName", "requestLatencyLogLink", "ApolloLink", "operation", "forward", "queryName", "locale", "eventCategory", "eventVariable", "requestUrl", "requestPath", "logContext", "Observable", "latencyObserver", "subscription", "result", "durationMs", "response", "responseStatus", "logTiming", "error", "defaultUrl", "contentfulNetworkErrorNames", "getContentfulHttpOptions", "config", "uri", "headers", "Config", "customFetch", "ast", "originalPrint", "stripIgnoredCharacters", "createContentfulClient", "fragments", "apolloState", "retryLink", "RetryLink", "contentfulRetryCount", "error", "operation", "parsedError", "parseError", "response", "responseCode", "shouldRetry", "logInfo", "getQueryName", "onErrorLink", "onError", "graphQLErrors", "networkError", "contentfulErrorCode", "logError", "serverError", "errorCode", "errorName", "tracingApolloLink", "ApolloLink", "forward", "traceSpan", "getTracer", "result", "link", "queryOptimizeVisitor", "requestLatencyLogLink", "createHttpLink", "ApolloClient", "createContentfulCache", "cacheExpirationTimeMs", "apolloClientMap", "Config", "locale", "_", "clientFactory", "newClient", "getOrCreateApolloClient", "options", "createContentfulClient", "apolloClientMapKey", "client", "useNewsroomContentfulContext", "currentLocale", "AppContext", "newsroomLocale", "newsroomLocales", "defaultLocale", "contentfulConfig", "contentfulSpaceIds", "productionContentTokens", "apolloClient", "getOrCreateApolloClient", "import_react", "useNewsroomGalleryTiles", "galleryId", "locale", "pageSize", "appContext", "AppContext", "browserFeatures", "BrowserFeaturesContext", "previousTotal", "params", "platform", "device", "url", "data", "isLoading", "useAsyncData", "error", "logger", "import_react", "useNewsroomContentfulQuery", "options", "getCurrentUrl", "AppContext", "locale", "preview", "fetchPolicy", "apolloClient", "useNewsroomContentfulContext", "queryOptions", "Config", "useQuery", "tileCollectionQuery", "LatestNewsBlockLoading", "numOfCards", "jsx", "GalleryGridV2", "_", "index", "SkeletonSummaryCard", "LatestNewsBlockTiles", "tileIds", "defaultTileImage", "data", "loading", "useNewsroomContentfulQuery", "jsx", "LatestNewsBlockLoading", "sortedItems", "item", "url", "slug", "newsroomUrl", "a", "b", "GalleryGridV2", "tile", "SummaryCard", "LatestNewsBlockGallery", "galleryId", "defaultTileImage", "pageSize", "locale", "useNewsroomContentfulContext", "paginationData", "useNewsroomGalleryTiles", "tileIds", "tile", "jsx", "LatestNewsBlockTiles", "LatestNewsBlock", "eyebrow", "numberOfNewsItems", "textAlignment", "Alignment", "textAlignmentMobile", "callsToActionCollection", "newsReference", "defaultImage", "galleryId", "callsToAction", "item", "jsx", "CallToAction", "Block", "cx", "galleryContainerCss", "galleryContainerWithEyebrowCss", "LatestNewsBlockGallery", "newsBlockFragment", "gql", "contentfulSysIdFragment", "ctaFragment", "fragments", "newsBlockQuery", "LatestNewsBlockShallow", "id", "data", "useContentfulQuery", "newsBlockQuery", "jsx", "LatestNewsBlock", "import_rich_text_plain_text_renderer", "import_react", "itemsWrapperCss", "css", "nonMobileMediaQuery", "itemListCss", "totalHeaderHeightCssVar", "listItemCss", "m", "SideMenu", "navItems", "elementLocation", "ElementLocation", "logSideMenuClick", "url", "title", "logUserEvent", "shouldFlushLogs", "logger", "jsx", "itemsWrapperCss", "itemListCss", "item", "index", "listItemCss", "GlobalNavItem", "init_debounce", "import_react", "heroContainerCss", "css", "m", "twoColumnCollapseMediaQuery", "heroTitleCss", "mobileMediaQuery", "ghostImageBaseCss", "ghostImageVisibleCss", "ghostImageTopCss", "ghostImageMiddleCss", "ghostImageBottomCss", "heroBodyCss", "largeDesktopMediaQuery", "SnapHomeHero", "title", "title2", "title3", "media", "body", "lines", "lineContainerRef", "lineRefs", "imageProperties", "setImageProperties", "detectResize", "debounce_default", "current", "setGhostPosition", "isTablet", "containerWidth", "firstLineHeight", "firstLineWidth", "lastLineHeight", "lastLineWidth", "maxLineWidth", "maxWidth", "currentLine", "lineWidth", "useTopAlignedMedia", "useRightAlignedMedia", "paddingSizeX", "paddingSizeY", "useNoMedia", "handleResize", "renderBody", "getRichTextWithEmbeddingsRenderer", "desktopMedia", "mobileMedia", "jsx", "Block", "jsxs", "heroContainerCss", "heroTitleCss", "l", "i", "el", "cx", "ghostImageBaseCss", "ghostImageVisibleCss", "ghostImageTopCss", "ghostImageMiddleCss", "ghostImageBottomCss", "Media", "heroBodyCss", "snapHomeHeroFragment", "gql", "fragments", "contentfulSysIdFragment", "snapHomeHeroQuery", "SnapHomeHeroShallow", "props", "data", "useContentfulQuery", "snapHomeHeroQuery", "jsx", "SnapHomeHero", "import_react", "snapHeaderBackgroundVar", "snapHomePageWrapperCss", "css", "totalHeaderHeightCssVar", "m", "nonMobileMediaQuery", "SnapHomePageWrapper", "children", "snapHeaderBackgroundVar", "scrollListener", "opacityOneLimit", "getHeaderHeightFromCssVar", "opacity", "jsx", "snapHomePageWrapperCss", "snapHomePageQuery", "gql", "contentfulSysIdFragment", "contentContainerCss", "css", "m", "smallMobileMediaQuery", "SnapHomePage", "props", "data", "useContentfulQuery", "snapHomePageQuery", "setHasCustomSideNav", "PageLayoutContext", "blocks", "navItems", "jsxs", "SnapHomePageWrapper", "jsx", "SideMenu", "contentContainerCss", "block", "id", "SnapHomeHeroShallow", "CardBlockShallow", "LatestNewsBlockShallow", "BlockShallow", "import_react", "snapHomePageV2Query", "gql", "contentfulSysIdFragment", "fragments", "smallDesktopWidth", "smallDesktopMediaQuery", "mediaQueryForRange", "largeDesktopAndSmallerMediaQuery", "largeDesktopWidth", "containerCss", "css", "m", "nonMobileMediaQuery", "extraLargeDesktopWidth", "carouselOverrideStylesCss", "mobileMediaQuery", "titleCss", "carouselTitleCss", "carouselArrowIconCss", "fadeInDownTitle", "keyframes", "fadeInDownCarousel", "animationBaseCss", "titleAnimatedCss", "carouselAnimatedCss", "preAnimationCss", "SnapHomePageV2", "props", "isRTL", "AppContext", "data", "useContentfulQuery", "snapHomePageV2Query", "title", "carouselTitle", "carouselCards", "jsxs", "cx", "containerCss", "jsx", "titleCss", "titleAnimatedCss", "preAnimationCss", "carouselOverrideStylesCss", "carouselAnimatedCss", "carouselTitleCss", "Icon", "carouselArrowIconCss", "CarouselV3", "item", "cardItem", "CarouselV3VideoItem", "CarouselV3ImageItem", "fragments", "gql", "contentfulSysIdFragment", "query", "QuestionnaireBlock", "props", "data", "useContentfulQuery", "query", "questionnaire", "buildQuestionnaireFullObject", "jsx", "questionsCollection", "questions", "questionData", "buildQuestionAnswers", "answersCollection", "answerData", "getCustomComponents", "CookieInformationBlock", "QuestionnaireBlock", "SnapHomePage", "SnapHomePageV2", "import_rich_text_types", "import_react", "pageAssetFragment", "gql", "assetFragment", "contentfulSysIdFragment", "pageBlockCollectionsFragment", "gql", "blockQueryLimit", "contentfulSysIdFragment", "latestPostHeroQuery", "fragments", "createExperimentFragmentNoAb", "pageAssetFragment", "LatestPostHero", "backgroundColor", "postChildren", "data", "useContentfulQuery", "latestPostHeroQuery", "formatMessage", "MessageContext", "pathname", "useLocation", "latestPostCtaTitle", "titleCtaRichText", "slugData", "slug", "blockHero", "blocksCollection", "item", "blockWithTitle", "logError", "BackgroundColor", "callsToActionCollection", "heroBackgroundColor", "jsx", "Hero", "import_react", "HlsInitializer", "children", "features", "useFeatureFlags", "hlsInitializerRef", "hlsFeatureEnabled", "hlsInstances", "getSourceFromVideo", "video", "sources", "sourceElement", "src", "ensureHlsJs", "resolve", "ensureSingleScript", "initializeHlsForVideo", "source", "hls", "videos", "error", "logError", "observer", "mutations", "addedNodes", "mutation", "node", "videoNodes", "childVideos", "allNewVideos", "jsx", "pageCategoryTitleFragment", "gql", "contentfulSysIdFragment", "latestPostBlockQuery", "createExperimentFragmentNoAb", "pageAssetFragment", "LatestPostBlock", "props", "formatDate", "useFormatDate", "decideExperiment", "useExperiment", "data", "useContentfulQuery", "latestPostBlockQuery", "motifScheme", "useMotifScheme", "title", "maxPosts", "backgroundColor", "cta", "anchorId", "slugCollection", "postsToRender", "items", "_", "index", "slug", "dateFormatted", "author", "jsx", "FormattedMessage", "date", "Anchor", "page", "Link", "ctaElement", "CallToAction", "LatestPosts", "fragments", "gql", "contentfulSysIdFragment", "query", "updateCollection", "collection", "item", "MultiVideoBlock", "children", "id", "togglePanelClassName", "togglePanelLabel", "preChildren", "postChildren", "otherProps", "data", "useContentfulQuery", "query", "anchorId", "panelPosition", "primaryVideosCollection", "secondaryVideosCollection", "mobilePrimaryVideosCollection", "mobileSecondaryVideosCollection", "jsx", "import_react", "persistentCtaContainerCss", "css", "m", "ZIndex", "persistentCtaVisibleCss", "PersistentCta", "mobileCta", "shouldScrollToShow", "isVisible", "setIsVisible", "button", "ButtonType", "handleScroll", "shouldShow", "jsx", "cx", "persistentCtaContainerCss", "persistentCtaVisibleCss", "CallToAction", "import_react", "innerScrollContainerCss", "css", "totalHeaderHeightCssVar", "scrubVideoCss", "ScrollAnimatedSection", "anchorId", "scrollHeight", "animatedContentCollection", "containerRef", "totalHeaderHeightRef", "getHeaderHeightFromCssVar", "calculateScrollProgress", "top", "totalHeight", "heightStyle", "jsx", "video", "sys", "mp4Source", "webmSource", "videoStart", "videoEnd", "scrubStart", "scrubEnd", "ScrollAnimatedVideo", "slugContainerCss", "css", "extraLargeDesktopWidth", "mobileMediaQuery", "slugGutterCss", "m", "slugContainerWithSideNavCss", "minHeightCss", "SplitBlock", "props", "getImageSources", "useContentfulImages", "title", "subtitle", "body", "media", "callsToActionCollection", "splitBlockBody", "mediaCaption", "anchorId", "brandBackgroundColor", "restProps", "motifScheme", "useMotifScheme", "imageSource", "imageAltText", "videoSource", "contentType", "mobileImageSource", "mobileImageAltText", "mobileVideoSource", "mobileContentType", "thumbnailSource", "useParseMediaContainer", "backgroundMediaType", "imgSrcs", "videoProps", "desktopSettings", "mobileSettings", "getImageSourceSettings", "combineImageSources", "callsToAction", "item", "jsx", "CallToAction", "stickers", "sticker", "renderRichTextWithElements", "import_react", "ActiveEventCountTracker", "divRef", "getTracer", "_eventId", "_eventName", "_lifeCycle", "activeEventCount", "jsx", "pageContainerCss", "css", "extraLargeDesktopWidth", "pageContainerWithSideNavCss", "desktopSideNavWidthPx", "pageStickyCss", "totalHeaderHeightCssVar", "ZIndex", "bannerContentContainerCss", "richTextCtaClassName", "stickyBottomCss", "pageFixedCss", "import_react", "import_react_dom", "pageBottomStickyPortalId", "PageBottomStickyPortal", "props", "pageBottomStickyPortalRef", "AppContext", "jsx", "import_react", "import_react_dom", "pageFixedPortalId", "PageFixedPortal", "props", "pageFixedPortalRef", "AppContext", "jsx", "pageStickyHeightCssVar", "defaultBreakTemplates", "Template", "pageCss", "css", "totalHeaderHeightCssVar", "pageBottomFixedElementsCss", "subNavHeightPx", "pageWithSubNavCss", "pictureContextLazy", "pictureContextNoLazy", "allBlockTypes", "isCustomComponent", "type", "Page", "props", "pathname", "useLocation", "featureFlags", "useFeatureFlags", "formatMessage", "MessageContext", "currentLocale", "AppContext", "getImageSources", "useContentfulImages", "isMobile", "useIsMobile", "isSnapBrand", "useBrand", "pageMotifScheme", "useMotifScheme", "bannerMotifScheme", "alternateBrandPropOverride", "useAlternateBrandPropOverride", "Config", "stickyContainerRef", "pageRef", "stickyHeightRef", "resizeObserver", "entries", "height", "pageStickyHeightCssVar", "m", "logEvent", "currentHeaderView", "currentFooterView", "hasSideNav", "hasSubNav", "setHeaderView", "setFooterView", "PageLayoutContext", "headerView", "footerView", "slugContext", "SlugContext", "title", "metas", "blocksCollection", "footnotesCollection", "collapseFootnotes", "backgroundColor", "backgroundMediaV2", "backgroundMediaStyle", "scrollSnap", "mobileCta", "showAiLocalizationBanner", "denseLayout", "testFeature", "pageBackgroundColor", "footnotes", "footnoteProps", "jsx", "Footnote", "footnotesTitle", "footnoteBlock", "FootnoteBlock", "aiLocalizationBannerTitle", "aiLocalizationBannerDescription", "aiLocalizationBanner", "AiLocalizationBanner", "blocks", "breakTemplates", "templateIndex", "firstHeroOrBlockIndex", "blocksWithBreaks", "idx", "sys", "__typename", "isLastBlock", "prevBlock", "nextBlock", "blockBackgroundColor", "prevBackgroundColor", "nextBackgroundColor", "blockBrandBackgroundColor", "prevBrandBackgroundColor", "nextBrandBackgroundColor", "blockHasBackgroundMedia", "prevBlockHasBackgroundMedia", "nextBlockHasBackgroundMedia", "blockEffectiveColor", "getBackgroundClassName", "nextEffectiveColor", "breakType", "deprecatedTopColorAsBrand", "deprecatedBottomColorAsBrand", "topColorFallback", "bottomColorFallback", "footnoteBlockBackgroundColor", "topColor", "bottomColor", "topColorClean", "bottomColorClean", "desktopSettings", "mobileSettings", "getImageSourceSettings", "imgSrcs", "combineImageSources", "Break", "mobileContent", "blockProps", "blockPropsAsDataProps", "Block", "ScrollAnimatedSection", "SubNavigation", "LatestPostHero", "Hero", "LatestPostBlock", "MultiVideoBlock", "SplitBlock", "MultiValuePropBlock", "BlockTabs", "ImmersiveScrollBlock", "customBlocks", "getCustomComponents", "CustomComponent", "configHeroBreakTemplate", "heroBreakTemplate", "template", "brandTopColor", "brandBottomColor", "isOverlaid", "blocksToRender", "block", "component", "breakSpacerProps", "prevBreakType", "prevTopColor", "prevBottomColor", "topBreakOverlayType", "getBreakOverlayType", "BreakSpacer", "nextBreakType", "nextTopColor", "nextBottomColor", "bottomBreakOverlayType", "pageBottomFixedElements", "jsxs", "imageSource", "videoSource", "mobileImageSource", "mobileVideoSource", "thumbnailSource", "useParseMediaContainer", "dir", "direction", "content", "Fragment", "DefinitionProvider", "PictureContext", "DefinitionOverlay", "banner", "customBanner", "contentfulDescriptionDataset", "getContentfulInspectorProps", "Banner", "pageStickyCss", "bannerContentContainerCss", "renderRichTextWithElements", "cx", "pageContainerCss", "pageContainerWithSideNavCss", "minHeightCss", "Canonical", "AlternateLang", "Metas", "WebSchemas", "Header", "HlsInitializer", "PersistentCta", "PageBottomStickyPortal", "stickyBottomCss", "PageFixedPortal", "pageFixedCss", "ActiveEventCountTracker", "isElementHorizontallyVisible", "element", "parent", "elementRect", "parentRect", "SubNavStickyCss", "css", "pageStickyHeightCssVar", "totalHeaderHeightCssVar", "SubNavigation", "brandBackgroundColor", "backgroundColor", "sys", "items", "motifScheme", "useMotifScheme", "subnavRef", "activeItemId", "setActiveItemId", "lastScrollPos", "scrollDir", "handleScroll", "scrollPos", "handleIntersectionChange", "entries", "intersectingEntries", "entry", "lastIntersectingEntry", "id", "observer", "item", "el", "handleItemClick", "event", "itemElement", "totalHeaderHeight", "contentfulDescriptionDataset", "getContentfulInspectorProps", "jsx", "textDataset", "SubNavigationItem", "pageFragmentShallow", "gql", "blockQueryLimit", "blockFragmentShallow", "contentfulSysIdFragment", "bannerFragment", "ctaFragment", "fragments", "blockAllFragment", "scrollAnimatedSectionFragment", "subNavigationFragment", "breakFragment", "splitBlockFragment", "multiValuePropBlockFragment", "blockTabsFragment", "immersiveScrollBlockFragment", "pageNavigationFragment", "pageAllQuery", "pageSitemapFragment", "pageBlocksCollectionQuery", "pageSideNavbarQuery", "gql", "contentfulSysIdFragment", "createExperimentFragmentNoAb", "pageNavigationFragment", "import_react", "fragments", "gql", "criteriaFragment", "contentfulSysIdFragment", "query", "import_rich_text_plain_text_renderer", "import_react", "stickToHeaderCss", "css", "nonMobileMediaQuery", "mobileMediaQuery", "SideNavigation", "navigatorItemsCollection", "brandBackgroundColor", "backgroundColor", "brandBackgroundColorMobile", "mobileBackgroundColor", "sys", "motifScheme", "useMotifScheme", "motifSchemeMobile", "checkCriteria", "useExperiment", "isUrlCurrent", "useConsumerContext", "isVisible", "item", "items", "section", "titleDataset", "getContentfulInspectorProps", "link", "nestedTitleDataset", "contentfulDescriptionDataset", "elementLocation", "ElementLocation", "jsx", "stickToHeaderCss", "sectionTitle", "isExpanding", "logUserEvent", "SideNavigationShallow", "props", "id", "isContentfulSysProps", "data", "useContentfulQuery", "query", "import_react", "import_react", "contentfulTypeQueries", "latestPostBlockQuery", "query", "queries", "carouselV3Query", "lazyGalleryQuery", "chartToggleQuery", "blockHeroQuery", "breakQuery", "subNavigationQuery", "multiValuePropBlockQuery", "newsBlockQuery", "snapHomePageQuery", "snapHomePageV2Query", "blockTabsQuery", "splitBlockQuery", "PageShallow", "props", "data", "useContentfulQuery", "pageAllQuery", "prefetchedIds", "apolloClient", "useApolloClient", "currentLocale", "getCurrentUrl", "AppContext", "replacements", "SlugContext", "replacementIds", "acc", "block", "replacementData", "pageBlocksCollectionQuery", "preloadItem", "preload", "query", "contentfulTypeQueries", "logWarning", "queryId", "getQueryName", "Config", "error", "parseError", "preloadPageData", "shallowBlock", "finalBlock", "blockItem", "finalBanner", "finalBlocksCollection", "entry", "blocksCollectionCopy", "i", "blockId", "replacement", "jsx", "Page", "import_react", "backgroundColor", "Config", "BackgroundColor", "custom404ContainerCss", "css", "containerCss", "m", "headingCss", "mediaQuery", "minHeightCss", "ghostCss", "css", "NoMatchDefault", "formatMessage", "MessageContext", "title", "subtitle", "jsxs", "cx", "getBackgroundClassName", "backgroundColor", "containerCss", "minHeightCss", "jsx", "headingCss", "custom404Fragment", "gql", "createExperimentFragmentWithAbReplacements", "pageFragmentShallow", "contentfulSysIdFragment", "custom404CollectionQuery", "NoMatch", "staticContext", "context", "data", "useContentfulQuery", "custom404CollectionQuery", "decideExperiment", "useExperiment", "custom404OrExperiment", "jsx", "NoMatchDefault", "cx", "slugContainerCss", "minHeightCss", "slugGutterCss", "PageShallow", "experimentResult", "SlugContext", "import_react", "redirectContainerCss", "css", "Redirect", "path", "newTab", "isPermanent", "onRedirect", "AppContext", "Config", "jsxs", "jsx", "redirectFragment", "gql", "contentfulSysIdFragment", "redirectSitemapFragment", "slugShallowFragment", "gql", "createExperimentFragmentWithAbReplacements", "pageFragmentShallow", "createExperimentFragmentNoAb", "redirectFragment", "contentfulSysIdFragment", "pageAssetFragment", "breadcrumbsFragment", "topicFragment", "slugSitemapFragment", "pageSitemapFragment", "experimentSitemapFragment", "redirectSitemapFragment", "criteriaFragment", "slugCollectionQuery", "gql", "slugShallowFragment", "notFoundPath", "SlugCollection", "props", "decideExperiment", "useExperiment", "data", "useContentfulQuery", "slugCollectionQuery", "slugMatch", "first", "pageOrExperiment", "page", "replacements", "experimentResult", "Config", "mainElement", "logEvent", "jsx", "Redirect", "NoMatch", "publishedAt", "postedDateStr", "postedDate", "breadcrumbData", "breadcrumbSchema", "createBreadcrumbSchema", "jsxs", "Fragment", "W", "SlugContext", "PageShallow", "pagesWithSubOrSideNavQuery", "gql", "contentfulSysIdFragment", "experimentsByIdsLinkingToSlugs", "useSlugToNavMap", "sideNavMap", "subNavMap", "experimentIdToSideNav", "experimentIdToSubNav", "pagesWithNav", "useContentfulQuery", "pagesWithSubOrSideNavQuery", "page", "parent", "experimentIds", "slugsFromExperiments", "experimentsByIdsLinkingToSlugs", "experiment", "link", "sideNav", "subNav", "Slug", "originalSlug", "useLocation", "slug", "htmlEscape", "shouldRedirectHome", "useFeatureFlags", "Config", "url", "sideNavMap", "subNavMap", "useSlugToNavMap", "hasSideNav", "sideNavId", "hasSubNav", "subNavId", "setHasSideNav", "setHasSubNav", "PageLayoutContext", "logWarning", "jsxs", "cx", "slugContainerCss", "minHeightCss", "slugGutterCss", "slugContainerWithSideNavCss", "jsx", "ElementLocation", "SideNavigationShallow", "SlugCollection", "defaultBackgroundColor", "BackgroundColor", "noPaddingTopCss", "css", "CookieSettings", "cookieDomain", "deploymentType", "domainName", "isClient", "backgroundColor", "isSameDomain", "backgroundType", "jsx", "Block", "NoMatchDefault", "import_react", "noResultsFoundContainerCss", "css", "m", "noResultsFoundTitleCss", "noResultsFoundSubtitleCss", "p2Css", "noResultsFoundImageCss", "NoResultsFound", "jsxs", "noResultsFoundContainerCss", "jsx", "noResultsFoundTitleCss", "FormattedMessage", "noResultsFoundSubtitleCss", "noResultsFoundImageCss", "searchQueryParam", "searchOffsetParam", "searchPerPageParam", "searchLocaleParam", "searchResultItemPageTitleCss", "css", "m", "searchResultItemLinkCss", "searchResultItemDescriptionCss", "p2Css", "nonMobileMediaQuery", "replaceEmTags", "inputString", "regex", "part", "index", "jsx", "SearchResultItem", "description", "pageTitle", "slug", "onClick", "jsxs", "searchResultItemPageTitleCss", "Anchor", "searchResultItemLinkCss", "searchResultItemDescriptionCss", "import_react", "useQueryParams", "search", "useLocation", "getUrlParams", "ConsumerContext", "searchParams", "import_react", "useSearchResults", "searchTerm", "locale", "page", "pageSize", "previousResults", "previousTotal", "emptyResults", "searchResults", "params", "searchOffsetValue", "searchQueryParam", "searchLocaleParam", "searchOffsetParam", "searchPerPageParam", "url", "Config", "data", "isLoading", "error", "useAsyncData", "response", "logger", "searchContainerCss", "css", "m", "mobileMediaQuery", "searchAutocompleteCss", "searchSubtitleCss", "p3Css", "searchResultsContainerCss", "searchResultsListCss", "spinnerContainerCss", "maxResultsPerPage", "searchDebounceDelay", "pageViewDebounceDelay", "getDescription", "elements", "element", "handleScroll", "totalHeaderHeight", "totalHeaderHeightCssVar", "containerTop", "scrollY", "Search", "query", "useQueryParams", "searchQueryParameter", "searchPageParameter", "shouldRenderSpinner", "setShouldRenderSpinner", "useMotifStyles", "currentLocale", "AppContext", "formatMessage", "MessageContext", "getUrlParams", "setUrlParams", "ConsumerContext", "elementLocation", "ElementLocation", "containerRef", "page", "setPage", "searchTerm", "setSearchTerm", "debouncedSearchTerm", "setDebouncedSearchTerm", "timerId", "logEvent", "searchResults", "useSearchResults", "queryParams", "newPage", "newTerm", "onChange", "term", "trimmedTerm", "onChangePage", "showLoading", "showResults", "showNoResults", "jsxs", "Fragment", "jsx", "Header", "searchContainerCss", "searchAutocompleteCss", "AutoComplete", "htmlUnescape", "htmlEscape", "noop", "searchSubtitleCss", "FormattedMessage", "searchResultsContainerCss", "spinnerContainerCss", "Spinner", "searchResultsListCss", "item", "i", "SearchResultItem", "logUserEvent", "NoResultsFound", "Pagination", "ActiveEventCountTracker", "import_react", "assetContainerCss", "css", "m", "assetFrameCss", "supportedVideoExtensions", "gcsBucketUrl", "PoliticalAdAsset", "match", "assetId", "getCurrentUrl", "AppContext", "hasLoadingError", "setHasLoadingError", "m", "logEvent", "jsx", "NoMatch", "currentUrl", "mediaType", "assetSrc", "handleError", "logError", "asset", "assetContainerCss", "assetFrameCss", "Routes", "location", "useLocation", "history", "useHistory", "enableSearchFeature", "useFeatureFlags", "timeout", "jsxs", "Switch", "jsx", "Route", "cookieSettingsPath", "CookieSettings", "Config", "Search", "PoliticalAdAsset", "NoMatch", "Slug", "getSiteFontFallbacks", "Config", "fontTokensWithPlaceholders", "getSiteMotif", "Config", "snapMotif", "defaultMotif", "e", "n", "t", "i", "r", "a", "o", "c", "u", "f", "s", "d", "l", "p", "v", "m", "h", "g", "T", "y", "E", "C", "L", "w", "b", "S", "A", "I", "P", "k", "F", "M", "D", "x", "B", "R", "H", "N", "O", "q", "j", "_", "z", "G", "J", "K", "Q", "U", "V", "W", "initWebVitalsLogging", "category", "S", "metric", "logValue", "x", "logTiming", "W", "Q", "userAgentHintsFromBowser", "browserFeatures", "hints", "browserVersion", "HistoryCaptor", "onHistory", "history", "useHistory", "App", "getCurrentUrl", "currentLocale", "supportedLocales", "routerContext", "userLocation", "shopifyData", "helmetContext", "pageLayoutContext", "apolloClient", "globalApolloClient", "siteData", "browserFeatures", "onRedirect", "asyncDataController", "globalPrivacyControl", "cookieManager", "getUserInfo", "getPersona", "createUuidV4", "singleCallbackCache", "onHlsVideo", "initialPersonas", "updatePersonasProp", "appRenderTrace", "getTracer", "url", "Router", "Config", "children", "jsxs", "BrowserRouter", "jsx", "StaticRouter", "userAgentHints", "userAgentHintsFromBowser", "isRtl", "directionFromLocale", "useBrowserLayoutEffect", "appContextProvider", "logger", "initWebVitalsLogging", "consumerContext", "defaultContext", "type", "label", "component", "logEvent", "createIsCurrentUrl", "search", "urlParamsToFilters", "paramsObj", "pathname", "paramsStr", "filtersToUrlParams", "newPath", "GlobalHeaderContext", "globalComponentsContext", "error", "logError", "Anchor", "action", "googleAnalyticsEventName", "isLocalUrl", "locale", "siteDataState", "setSiteData", "headerPortalRef", "pageBottomStickyPortalRef", "pageFixedPortalRef", "appPortalRef", "personasRef", "appContext", "updatedPersonas", "contentfulContext", "getContentfulContext", "cookieSettingsUrl", "getCookieSettingsUrl", "baseMotif", "getSiteMotif", "fontFallbackTokens", "getSiteFontFallbacks", "localizedMotif", "getMotifWithFontFallbacks", "primitivesContext", "defaultPrimitivesContext", "injectGlobal", "renderedApp", "ErrorBoundary", "ContentfulContext", "ContentfulLivePreviewContextProvider", "ApolloProvider", "AsyncDataContext", "ConsumerContext", "PrimitivesContext", "GlobalComponentsContextProvider", "BrowserFeaturesContext", "q", "IntlProvider", "AppContext", "SingleCallbackCacheContext", "LogCspViolation", "LogPageLoad", "LogAdBlockUsage", "LogScrollDepth", "DirectionDirective", "LanguageDirective", "ContentfulLivePreview", "Favicon", "Viewport", "FontChecker", "SitewideConfigurationProvider", "HardcodedComponents", "PageLayoutProvider", "ShopifyProvider", "CartProvider", "MotifRootWrapper", "ElementLocation", "Header", "LoadingBar", "Routes", "AppPortal", "Footer", "CookiePopup", "Cart", "CookieManager", "__publicField", "name", "value", "error", "logError", "options", "BrowserCookieManager", "CookieManager", "__publicField", "name", "api", "value", "options", "legacyUuidTemplate", "legacyRandomUuid", "ri", "rs", "c", "r", "createUuidV4Browser", "createFind", "findIndexFunc", "collection", "predicate", "fromIndex", "iterable", "isArrayLike_default", "iteratee", "baseIteratee_default", "keys_default", "key", "index", "createFind_default", "nativeMax", "nativeMin", "findLastIndex", "array", "predicate", "fromIndex", "length", "index", "toInteger_default", "baseFindIndex_default", "baseIteratee_default", "findLastIndex_default", "findLast", "createFind_default", "findLastIndex_default", "findLast_default", "init_baseGetTag", "init_isObjectLike", "stringTag", "isString", "value", "isArray_default", "isObjectLike_default", "baseGetTag_default", "isString_default", "asciiSize", "baseProperty_default", "asciiSize_default", "rsAstralRange", "rsComboMarksRange", "reComboHalfMarksRange", "rsComboSymbolsRange", "rsComboRange", "rsVarRange", "rsAstral", "rsCombo", "rsFitz", "rsModifier", "rsNonAstral", "rsRegional", "rsSurrPair", "rsZWJ", "reOptMod", "rsOptVar", "rsOptJoin", "rsSeq", "rsSymbol", "reUnicode", "unicodeSize", "string", "result", "unicodeSize_default", "stringSize", "string", "hasUnicode_default", "unicodeSize_default", "asciiSize_default", "stringSize_default", "mapTag", "setTag", "size", "collection", "isArrayLike_default", "isString_default", "stringSize_default", "tag", "getTag_default", "baseKeys_default", "size_default", "formatMarketingWebEvent", "event", "context", "url", "data", "LoggingEventType", "kebabCase_default", "formatSnapPixelEvent", "triggeringEvent", "formatWebClientIdEvent", "eventLog", "formatMarketingWebEvents", "event", "context", "output", "primaryEvent", "formatMarketingWebEvent", "pixelEvent", "formatSnapPixelEvent", "eventKey", "eventLog", "webClientIdEvent", "formatWebClientIdEvent", "formatForBusinessEvents", "event", "context", "url", "forBusinessData", "findLast_default", "size_default", "events", "formatMarketingWebEvents", "LoggingEventType", "silencedEventTypes", "LoggingEventType", "getMetricName", "event", "getAdditionalDimensions", "context", "eventRewrite", "output", "polyfilledStructuredClone", "groupByErrors", "ignoreErrors", "getBeforeSend", "event", "_hint", "exceptionStackframe", "exceptionMessage", "error", "unresolvedQueryErrorMatches", "frame", "url", "groupByError", "mwpAuthTokenHeader", "ClientExportEventListener", "AbstractEventListener", "props", "__publicField", "data", "tokenData", "hash", "hashData", "authToken", "response", "text", "error", "parseError", "payload", "event", "customFetch", "context", "input", "dataStr", "byte", "logFlushIntervalMs", "getCookie", "cookieName", "getPixelContext", "ExperimentContextListener", "__publicField", "event", "_context", "LoggingEventType", "initializeClientLogging", "config", "logger", "experimentContextListener", "eventListenerConfig", "GrapheneClientEventListener", "getMetricName", "getAdditionalDimensions", "silencedEventTypes", "eventRewrite", "ClientExportEventListener", "error", "nonce", "gtmEventListener", "GoogleEventListener", "formatter", "formatForBusinessEvents", "formatMarketingWebEvents", "BlizzardClientEventListener", "shortCommit", "sentryProps", "_event", "context", "getBeforeSend", "SentryClientEventListener", "ConsoleClientEventListener", "omit_default", "loggingInitTimeoutMs", "startClientLogging", "config", "disableLazyLoadLogging", "loggingScheduleStart", "allowLogging", "logger", "loggingAllowTrigger", "applyUrlOverrides", "config", "params", "Config", "import_promise_memoize", "generateFragmentTypes", "memoizeAsync", "config", "httpOptions", "getContentfulHttpOptions", "trace", "getTracer", "possibleTypesData", "customFetch", "parsedFragmentTypes", "parseFragmentTypeData", "data", "possibleTypeMap", "supertype", "subtype", "BrowserTracer", "__publicField", "name", "markName", "listener", "callback", "allowedDomains", "essentialSessionCookieName", "webClientIdName", "ensureWebClientId", "args", "currentUrl", "userLocation", "cookieManager", "createUuidV4", "essentialSessionCookieName", "existingCookie", "webClientIdName", "isGdpr", "gdprCountries", "expires", "cookieDomain", "getTopLevelDomain", "cookieOptions", "allowedDomains", "webClientId", "defaultState", "defaultContext", "main", "state", "loggingConfig", "Config", "initializeClientLogging", "startClientLogging", "setTracer", "BrowserTracer", "url", "defaultLocale", "apolloCache", "globalApolloCache", "requestUrl", "contentfulConfigWithOverrides", "applyUrlOverrides", "localApolloFragments", "generateFragmentTypes", "globalApolloFragments", "apolloClient", "getOrCreateApolloClient", "globalApolloClient", "asyncDataControllerCache", "asyncDataController", "AsyncDataController", "cookieManager", "BrowserCookieManager", "createUuidV4", "createUuidV4Browser", "webClientId", "ensureWebClientId", "getUserInfoClient", "response", "getPersonaClient", "hashedIpOverride", "onRedirectClient", "location", "options", "newTab", "history", "browserFeatures", "ClientBrowserFeature", "clientAppProps", "capturedHistory", "cache", "createCache", "jsx", "CacheProvider", "App", "rootElement", "errorCount", "serverStatus", "event", "data", "error", "path"]
}
