{"version":3,"sources":["../webpack/bootstrap","api/epiApi.ts","store/modules/epi.ts","hooks/useSessionStorage.ts","store/modules/model.ts","pages/sharedModelTypes.ts","store/index.ts","theme/media-queries.ts","theme/grid.ts","theme/styles.ts","types/enums.ts","components/Boilerplate/Link/Link.tsx","theme/utils/index.ts","components/Typography/Typography.styles.tsx","components/Typography/Typography.tsx","components/Typography/index.ts","fonts/GT-Walsheim-Regular.woff","fonts/GT-Walsheim-Regular.woff2","fonts/GT-Walsheim-Medium.woff","fonts/GT-Walsheim-Medium.woff2","fonts/GT-Walsheim-Bold.woff","fonts/GT-Walsheim-Bold.woff2","fonts/NotoSans-Regular.woff","fonts/NotoSans-Regular.woff2","fonts/NotoSans-Bold.woff","fonts/NotoSans-Bold.woff2","fonts/LibreFranklin-Light.ttf","fonts/PlayfairDisplay-Bold.ttf","fonts/Oswald-Light.ttf","fonts/Oswald-SemiBold.ttf","theme/micrositeGlobal.ts","components/Breadcrumbs/Breadcrumbs.styles.tsx","utils/helper-utils.tsx","components/Highcharts/Highcharts.tsx","types/common.ts","components/Breadcrumbs/Breadcrumbs.tsx","components/Boilerplate/Grid/index.tsx","components/Boilerplate/Space/index.tsx","components/BannerPanel/BannerPanel.styles.tsx","components/Boilerplate/Icon/Icon.styles.tsx","components/Boilerplate/Icon/IconCollection.tsx","components/Boilerplate/Icon/Icon.tsx","components/Button/Button.styles.tsx","components/Button/Button.tsx","components/BannerPanel/BannerPanel.tsx","components/Banners/BannerTextLinks/BannerTextLinks.styles.tsx","components/Panels/Panels.styles.tsx","components/Banners/BannerTextLinks/BannerTextLinks.tsx","components/Banners/BannerPuffText/BannerPuffText.styles.tsx","components/Banners/BannerPuffText/BannerPuffText.tsx","components/Banners/BannerPuffTextImage/BannerPuffTextImage.styles.tsx","hooks/useImageTitle.tsx","components/Banners/BannerPuffTextImage/BannerPuffTextImage.tsx","components/Banners/BannerPuffTextYoutube/BannerPuffTextYoutube.styles.tsx","components/YouTube/YouTube.styles.tsx","components/YouTube/YouTube.tsx","components/Banners/BannerPuffTextYoutube/BannerPuffTextYoutube.tsx","components/Boilerplate/RichText/RichText.tsx","components/Boilerplate/Puff/Puff.styles.tsx","components/Boilerplate/Image/Image.styles.tsx","components/Boilerplate/Image/LinkableImage.tsx","components/Boilerplate/Image/Image.tsx","components/Boilerplate/Image/index.ts","components/Boilerplate/Puff/PuffWithImage.tsx","components/Boilerplate/EpiFragments/fragments/Image.tsx","components/Boilerplate/ResponsiveIframe/ResponsiveIframe.styles.tsx","components/Boilerplate/ResponsiveIframe/ResponsiveIframe.tsx","components/ExpanderPrototype/ExpanderPrototype.styles.tsx","components/ExpanderPrototype/ExpanderPrototype.tsx","components/Boilerplate/EpiFragments/fragments/LegalBoxModel.tsx","components/ListHeader/ListHeader.styles.tsx","components/ListHeader/ListHeader.tsx","components/Panels/FragmentPuffList.styles.tsx","components/EditableField/EditableField.tsx","components/Panels/ColumnPageWithSidebar.tsx","components/Panels/SidebarPuff.styles.tsx","components/Panels/SidebarPuff.tsx","pages/NVseArticlePage/NVseArticlePage.styles.tsx","components/Carousel/Carousel.styles.tsx","components/Pagination/Pagination.styles.tsx","components/Pagination/Pagination.tsx","components/Gallery/Gallery.styles.tsx","components/Gallery/Gallery.tsx","components/Carousel/Carousel.tsx","components/Panels/SectionHeader.styles.tsx","components/Panels/SectionHeader.tsx","components/Panels/ShowMoreButton.styles.tsx","components/Panels/ShowMoreButton.tsx","components/Panels/FragmentPuffList.tsx","components/PuffListItem/PuffListItem.styles.tsx","components/PuffListItem/PuffListItem.tsx","components/StandardPuffModel/StandardPuff.styles.tsx","components/PuffCardMobile/PuffCardMobile.styles.tsx","components/PuffCardMobile/PuffCardMobile.tsx","components/StandardPuffModel/StandardPuff.tsx","components/Boilerplate/EpiFragments/fragments/StandardPuffModel.tsx","components/SubjectAreaIconPuffModel/SubjectAreaIconPuff.styles.tsx","components/SubjectAreaIconPuffModel/SubjectAreaIconPuff.tsx","components/PuffCard/PuffCard.styles.tsx","components/PuffCard/PuffCard.tsx","components/FaqPuff/FaqPuff.styles.tsx","components/FaqPuff/FaqPuff.tsx","components/Boilerplate/EpiFragments/fragments/GuidancePuffModel.tsx","components/Banners/HeroBanner/HeroBanner.styles.tsx","components/Banners/HeroBanner/HeroBanner.tsx","components/Banners/DashboardBlock/DashboardBlock.styles.tsx","components/Banners/DashboardBlock/DashboardBlock.tsx","components/ContactBlock/ContactBlock.styles.tsx","components/ContactBlock/ContactBlock.tsx","components/Banners/WidgetNumericBlock/WidgetNumericBlock.styles.tsx","components/Banners/WidgetNumericBlock/WidgetNumericBlock.tsx","components/Banners/LogoBanner/LogoBanner.styles.tsx","components/Banners/LogoBanner/LogoBanner.tsx","components/HighlightBlock/HighlightBlock.styles.tsx","components/HighlightBlock/HighlightBlock.tsx","components/Banners/BannerTextWidget/BannerTextWidget.styles.tsx","components/Banners/BannerTextWidget/BannerTextWidget.tsx","components/Highcharts/Highcharts.styles.tsx","components/Tab/Tab.styles.tsx","components/Tab/Tab.tsx","components/Checkbox/Checkbox.styles.tsx","components/Checkbox/Checkbox.tsx","components/Banners/DropdownMenu/DropdownMenu.styles.tsx","components/Banners/DropdownMenu/DropdownMenu.tsx","components/Boilerplate/EpiFragments/EpiFragments.tsx","components/Boilerplate/EpiFragments/fragments/StatisticsBlockModel.tsx","components/EpiForms/EpiForms.helpers.ts","components/EpiForms/EpiForms.submit.ts","components/Form/hooks/useFieldValidation.ts","components/Form/context/Form.context.tsx","components/Form/fields/Field.tsx","components/Form/fields/TextArea.tsx","components/Form/fields/Checkbox.tsx","components/Form/fields/RadioButton.tsx","components/Form/fields/Select.tsx","components/Form/fields/Multiselect.tsx","components/Form/fields/Button.tsx","components/Form/Labels.tsx","components/Form/fields/Fieldset.tsx","components/Boilerplate/Button/Button.tsx","components/EpiForms/FormButtons.tsx","components/EpiForms/FormStep.tsx","components/Form/hooks/useChildClones.ts","components/Form/Form.styles.tsx","components/Form/Form.tsx","components/Form/FormComponent.tsx","components/EpiForms/FormMessage.tsx","components/EpiForms/EpiForms.dependencies.ts","components/EpiForms/EpiForms.actions.ts","hooks/useFormRenderer.tsx","hooks/usePrevious.ts","components/EpiForms/EpiForms.tsx","components/EpiForms/index.tsx","hooks/useForceUpdate.ts","components/Panels/PageOverviewPuff.styles.tsx","components/SearchByListngPage/SearchByListngPage.model.tsx","components/Boilerplate/EpiFragments/fragments/TableFragment.tsx","components/Boilerplate/EpiFragments/fragments/YouTubeModel.tsx","components/Boilerplate/EpiFragments/fragments/PuffWithLargeImage.tsx","components/Boilerplate/EpiFragments/fragments/Video.tsx","components/Boilerplate/EpiFragments/fragments/WidgetNumericBlockModel.tsx","components/Boilerplate/EpiFragments/fragments/HeroBannerModel.tsx","components/Boilerplate/EpiFragments/fragments/LogoBannerModel.tsx","components/Boilerplate/EpiFragments/fragments/BannerModel.tsx","components/Boilerplate/EpiFragments/fragments/FaqModel.tsx","components/Boilerplate/EpiFragments/fragments/ContentBlockModel.tsx","components/Boilerplate/EpiFragments/fragments/CollapsibleContainer.tsx","components/Boilerplate/EpiFragments/fragments/MediaBanner.tsx","components/Boilerplate/EpiFragments/fragments/DashboardBlockModel.tsx","components/Boilerplate/EpiFragments/fragments/PuffContainer.tsx","components/Boilerplate/EpiFragments/fragments/HeadingFragment.tsx","components/Boilerplate/EpiFragments/fragments/RawFragment.tsx","components/Boilerplate/EpiFragments/fragments/ContactModel.tsx","components/Boilerplate/EpiFragments/fragments/CollapsibleBlockModel.tsx","components/Boilerplate/EpiFragments/fragments/HighlightModel.tsx","components/Boilerplate/EpiFragments/fragments/GrantPuffModel.tsx","components/Boilerplate/EpiFragments/fragments/EventPuffItemModel.tsx","components/Boilerplate/EpiFragments/fragments/SubjectAreaIconPuffModel.tsx","components/Boilerplate/EpiFragments/fragments/PublicationPuffModel.tsx","components/Boilerplate/EpiFragments/fragments/RegulationPuffModel.tsx","components/ListingPageGrantsHeader/ListingPageGrantsHeader.styles.tsx","components/ListingPageGrantsHeader/ListingPageGrantsHeader.tsx","components/SearchByListngPage/SearchByListngPage.styles.tsx","components/MegaMenu/MegaMenu.tsx","components/FilterDropdown/FilterDropdown.styles.tsx","components/FilterDropdown/MultiSelectCheckbox.styles.tsx","components/FilterDropdown/MultiSelectCheckbox.tsx","components/FilterDropdown/SingleSelectCheckbox.styles.tsx","components/FilterDropdown/SingleSelectCheckbox.tsx","components/FilterDropdown/DateSelectDropdown.styles.tsx","components/FilterDropdown/DateSelectDropdown.tsx","pages/NVsePublicationsListingPage/NVsePublicationsListingPage.styles.tsx","components/Radio/Radio.styles.tsx","components/Radio/Radio.tsx","components/FilterDropdown/FilterDropdown.tsx","components/Pills/Pills.styles.tsx","components/Pills/Pills.tsx","components/Autocomplete/Autocomplete.styles.tsx","components/Autocomplete/Autocomplete.tsx","components/SearchByListngPage/SearchByListngPage.tsx","components/Panels/ListPageShowMoreButton.styles.tsx","components/Panels/ListPageShowMoreButton.tsx","pages/NVseStandardListingPage/NVseStandardListingPage.styles.tsx","components/FilterModal/FilterModal.styles.tsx","components/FilterModal/FilterModal.tsx","components/AccordionFilter/AccordionFilter.styles.tsx","components/AccordionFilter/AccordionFilter.tsx","components/SearchByListngPageMobile/SearchByListngPageMobile.tsx","components/Panels/GrantsHeader.styles.tsx","components/Panels/GrantsHeader.tsx","pages/NVseStandardListingPage/NVseStandardListingPage.tsx","pages/NVseStartPage/PageTopOverlappBanner.styles.tsx","pages/NVseStartPage/PageTopOverlappBanner.tsx","pages/microsite/Fjall/FjallStartPage/FjallStartPage.tsx","components/MegaMenu/MegaMenu.styles.tsx","pages/microsite/MicrositeSearchPage/MicrositeSearchPage.tsx","components/PageTopBanner/PageTopBanner.styles.tsx","hooks/useSize.ts","components/PageTopBanner/PageTopBanner.tsx","components/Panels/PageOverviewPuff.tsx","components/Panels/PageSectionContent.tsx","components/Panels/SidebarRelatedPanel.styles.tsx","components/Panels/SidebarRelatedPanel.tsx","components/Panels/OnPageNavigationContent.tsx","pages/microsite/Fjall/FjallArticlePage/FjallArticlePage.tsx","pages/microsite/Microsite404Page/Microsite404Page.tsx","pages/microsite/MicrositeListingPage/MicrositeListingPage.styles.tsx","pages/microsite/MicrositeListingPage/MicrositeListingPage.tsx","components/Panels/SearchInputForm.styles.tsx","components/Panels/SearchInputForm.tsx","pages/NVseSearchPage/NVseSearchPage.tsx","pages/microsite/MicrositeArticlePage/MicrositeArticlePage.tsx","pages/microsite/MicrositeStartPage/MicrositeStartPage.tsx","components/microsite/QuizForm/QuizForm.styles.tsx","components/microsite/QuizForm/Quiz/Quiz.styles.tsx","components/microsite/QuizForm/Quiz/Quiz.tsx","components/microsite/QuizForm/QuizResult/QuizResult.style.tsx","components/microsite/QuizForm/QuizResult/QuizResult.tsx","hooks/useQuizForm.ts","components/microsite/QuizForm/QuizForm.tsx","pages/microsite/MicrositeQuizPage/MicrositeQuizPage.tsx","pages/NVseRegulationsListingPage/CategoryDropdown.tsx","components/JobListPage/JobListPage.styles.tsx","components/JobListPage/JobListPage.tsx","components/Banners/BannerLinks/BannerLinks.styles.tsx","components/Banners/BannerLinks/BannerLinks.tsx","pages/NVseJobListPage/NVseJobListPage.styles.tsx","pages/NVseJobListPage/NVseJobListPage.tsx","pages/NVseJobDetailPage/components/JobDetailSideBarItem/JobDetailSideBarItem.styles.tsx","pages/NVseJobDetailPage/components/JobDetailSideBarItem/JobDetailSideBarItem.tsx","pages/NVseJobDetailPage/NVseJobDetailPage.styles.tsx","pages/NVseJobDetailPage/NVseJobDetailPage.tsx","pages/NVseGrantsListingPage/NVseGrantsListingPage.styles.tsx","components/Panels/SubHeader.tsx","pages/NVseGrantsListingPage/NVseGrantsListingPage.tsx","pages/NVseStatisticsPage/NVseStatisticsPage.styles.tsx","pages/NVseStatisticsPage/NVseStatisticsPage.tsx","pages/NVseStartPage/NVseStartPage.tsx","components/SimplePuff/SimplePuff.styles.tsx","components/SimplePuff/SimplePuff.tsx","components/TargetGroups/TargetGroups.tsx","pages/NVseGrantPage/NVseGrantPage.tsx","pages/NVseGrantStartPage/NVseGrantStartPage.tsx","pages/NVseThemePage/NVseThemePage.styles.tsx","pages/NVseGuidanceStartPage/NVseGuidanceStartPage.tsx","pages/NVseNavigationPage/NVseNavigationPage.tsx","pages/NVseArticlePage/NVseArticlePage.tsx","pages/StandardPage/StandardPage.tsx","pages/NVseGuidanceCategoryPage/NVseGuidanceCategoryPage.tsx","pages/NVseGuidanceChapterPage/NVseGuidanceChapterPage.tsx","pages/NVseSearchPage/NVseSearchPage.styles.tsx","types/fragments.ts","pages/NVseThemePage/NVseThemePage.tsx","pages/NVseStatisticsCategoryPage/NVseStatisticsCategoryPage.tsx","pages/NVsePublicationPage/NVsePublicationPage.styles.tsx","pages/NVsePublicationPage/PublicationMetadataBanner.styles.tsx","pages/NVsePublicationPage/PublicationMetadataBanner.tsx","pages/NVsePublicationPage/NVsePublicationPage.tsx","pages/NVsePublicationsCategoryPage/NVsePublicationsCategoryPage.tsx","components/Panels/ListingPageIndexPanel.styles.tsx","components/Panels/ListingPageIndexPanel.tsx","pages/NVseSubjectAreaListingPage/NVseSubjectAreaListingPage.styles.tsx","pages/NVseSubjectAreaListingPage/NVseSubjectAreaListingPage.tsx","pages/NVseSubjectAreaPage/NVseSubjectAreaPage.tsx","pages/ErrorHandler404Page/ErrorHandler404Page.tsx","pages/NVseEventPage/NVseEventPage.styles.tsx","components/EventInfoBox/EventInfoBox.styles.tsx","components/EventInfoBox/EventInfoBox.tsx","pages/NVseEventPage/NVseEventPage.tsx","pages/NVseEventsListingPage/EventListItem.styles.tsx","pages/NVseEventsListingPage/EventListItem.tsx","pages/NVseEventsListingPage/NVseEventsListingPage.styles.tsx","pages/NVseEventsListingPage/NVseEventsListingPage.tsx","pages/NVseRegulationPage/NVseRegulationPage.styles.tsx","pages/NVseRegulationPage/RegulationHistoryDescription.styles.tsx","pages/NVseRegulationPage/RegulationHistoryDescription.tsx","pages/NVseRegulationPage/RegulationHistoryNarrow.styles.tsx","pages/NVseRegulationPage/RegulationHistoryNarrow.tsx","pages/NVseRegulationPage/RegulationHistoryTable.styles.tsx","pages/NVseRegulationPage/RegulationHistoryTable.tsx","pages/index.tsx","pages/NVseRegulationPage/NVseRegulationPage.tsx","components/Boilerplate/Loader/index.tsx","routeHandler.tsx","components/MenuMobile/MenuMobile.styles.tsx","components/MenuMobile/MenuMobile.tsx","components/microsite/MicrositeHeader/MicrositeHeader.styles.tsx","components/SiteHeader/SiteHeader.styles.tsx","components/MenuDropdown/MenuDropdown.styles.tsx","components/MenuDropdown/MenuDropdown.tsx","hooks/useOutsideClick.ts","components/microsite/MicrositeHeader/MicrositeHeader.tsx","components/microsite/MicrositeFooter/MicrositeFooter.styles.tsx","components/SiteFooter/FooterSection.styles.tsx","components/microsite/MicrositeFooter/MicrositeFooter.tsx","theme/MicrositeTheme.tsx","MicrositeApp.tsx","fonts/AkkuratLLWeb-Regular.woff","fonts/AkkuratLLWeb-Regular.woff2","fonts/AkkuratLLWeb-Bold.woff","fonts/AkkuratLLWeb-Bold.woff2","fonts/TiemposFineWeb-Light.woff","fonts/TiemposFineWeb-Light.woff2","fonts/TiemposText-Regular.woff","fonts/TiemposText-Regular.woff2","theme/global.ts","theme/theme.ts","components/EnvironmentToaster/EnvironmentToaster.styles.tsx","components/EnvironmentToaster/EnvironmentToaster.tsx","hooks/useCookie.ts","components/CookieBar/CookieBar.styles.tsx","components/CookieBar/index.tsx","components/CookieBar/CookieBar.tsx","components/GlobalMessage/GlobalMessage.styles.tsx","components/GlobalMessage/GlobalMessage.tsx","components/SiteHeader/SiteHeader.tsx","components/SiteFooter/Twitter-white.png","components/SiteFooter/SimpleExpander.styles.tsx","components/SiteFooter/SimpleExpander.tsx","components/SiteFooter/FooterSection.tsx","components/SiteFooter/Facebook.png","components/SiteFooter/LinkedIn.png","components/SiteFooter/LinksFooter.styles.tsx","components/SiteFooter/LinksFooter.tsx","components/SiteFooter/ContactFooter.styles.tsx","components/SiteFooter/ContactFooter.tsx","components/SiteFooter/SiteFooter.tsx","NVseApp.tsx","hooks/useEpiContextAndSavedEvent.ts","components/Boilerplate/Meta/Meta.tsx","App.tsx","index.tsx","types/epi.ts","store/modules/react.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","this","oldJsonpFunction","slice","ApiPath","createSlice","initialState","isEditable","inEditMode","inPreviewMode","ready","reducers","updateEpi","state","action","payload","selectEpi","epi","actions","getEpiPage","apiUrl","route","a","appendUrl","indexOf","index","query","substring","endsWith","test","url","axios","getPagegontentWithContentLink","contentLink","fetchSuggestions","suggestions","console","error","getEpiSearchResult","getSessionStorage","sessionStorageModels","modelType","id","findIndex","item","ButtonVariant","ButtonColors","PuffTheme","ListingModelsType","loading","sessionStorage","model","content","undefined","react","unsetNavigationLinksIsActive","items","forEach","isActive","children","getModelStart","getModelSuccess","breadcrumbs","navigation","getModelFailed","updateContent","setSessionStorage","toggleMenuItem","getSearchStart","includes","getSearchSuccess","respons","resultModel","searchModel","numberOfSearchResults","updateStateSessonStorage","sessionStoragePropName","getSearchFailed","pageSessionStorage","newPageSessionStorage","createPageSessionStorage","fetchSearchResult","routeApiUrl","dispatch","reason","statusCode","response","status","log","statusText","toString","selectModel","selectContent","selectSearch","search","selectMetaData","metadata","selectLocalization","localization","selectNavigation","selectLang","lang","selectQuickLinks","quickLinks","selectBreadcrumbs","selectCookieBar","cookieBar","selectFooter","footer","selectTracer","tracer","selectSessionStorage","selectGlobalMessages","globalMessages","selectMicrosite","microsite","selectLogo","logo","getSkipToContent","skipToContent","selectAppLayout","appTypeLayout","rootReducer","combineReducers","epiReducer","reactReducer","modelReducer","configStore","preloadedState","configureStore","reducer","breakpointsNumber","breakpoints","desktop","tablet","phone","mediaQueries","tabletOrLarger","phoneOrTablet","math","grid","columns","margin","gutter","defaultColumnSpan","maxWidth","gridMaxWidth","getLinkArrowStyle","css","styleForLink","props","theme","typography","style6","getStyle","isMicrositeActive","colors","primary","style10","styleForLinkDark","style5","white","accessibilityFocus","direction","resetAccessibilityFocus","ViewType","Rotate","getThemeBackground","themeContext","NeutralWhite","BlueDark","BlueLight","blue1","GreenDark","secondaryGreen","GreenLight","green1","BrownDark","secondaryBrown","BrownLight","brown1","Black","black","MicrositeMainTheme","tertiary","getThemeHeadingColor","secondaryBlue","getThemeTextColor","palette","text","getThemeBorderColor","hideIcon","LinkBasicStyle","styled","$isDarkTheme","$showLinkIcon","RouterLinkBasicStyle","RouterLink","Link","React","forwardRef","ref","to","href","showLinkIcon","className","external","target","tabIndex","puffTheme","htmlAttributes","useSelector","isDarkTheme","getIsDarkTheme","charAt","px","sizeInPx","px2rem","rem2px","sizeInRem","generateAnchorId","str","hash","charCodeAt","hashCode","zeroMarginPadding","Span","span","style8","Div","div","styleForH1","style1","spacing","space2","H1","h1","styleForH2","space3","style2","H2","h2","styleForH3","style3","H3","h3","styleForH4","style4","H4","h4","styleForH5","space1","H5","h5","styleForH6","H6","h6","styleForP","P","styleForPreamble","style7","Preamble","styleForButton","style11","Button","styleForInput","styleForLabel","style9","styleForSelect","Select","select","ScreenReaderText","styleForTable","styleForScrollableTableWrapper","table","ScrollableTableWrapper","styleForRichText","RichText","tagMapper","preamble","button","screenReader","Typography","styleAs","as","color","Component","ComponentAs","Heading","level","styleLevel","zeroBottom","safeLevel","headerThemeTagMapper","safeStyleLevel","getTypographyStyle","style12","headerStyleMapper","MicrositeGlobalStyle","createGlobalStyle","notoSansRegularWoff2","notoSansRegularWoff","notoSansBoldWoff2","notoSansBoldWoff","gtWalsheimRegularWoff2","gtWalsheimRegularWoff","gtWalsheimMediumWoff2","gtWalsheimMediumWoff","gtWalsheimBoldWoff2","gtWalsheimBoldWoff","libreFranklinLight","playfairDisplay","oswaldSemiBold","oswaldLight","commonBgColor","isOpen","window","scrollY","secondary","commonAccentHue","accentRed","BreadcrumbStyled","ol","getSymbol","BreadcrumbItemWarpper","li","isPhone","BreadcrumbLink","$active","convertDateWithMonthWrittenOut","dateIsoStr","lastReviewedText","validDate","date","Date","enDate","toLocaleDateString","day","month","year","monthIndex","capitalizedMonth","toUpperCase","toLocaleString","err","FormatType","convertDateWithShortMonthWrittenOut","isNaN","getTimeFromDate","toLocaleTimeString","timeStyle","MimeTypes","getShortTimeName","capitalizeFirstLetter","buildQueryString","params","keys","filter","map","encodeURIComponent","join","formatText","format","total","filtered","temp","split","translate","fallback","translations","getRotationDegrees","trend","Down","Up","Right","Left","formatCategories","categories","categoryNames","cat","debounce","func","delay","timeoutId","args","clearTimeout","setTimeout","ListingPageURLs","Breadcrumbs","useState","setBreadcrumbs","useMediaQuery","minWidth","useEffect","secondLastItem","firstItem","ariaLabel","CellPropsList","breakpointMin","size","gridConf","min","parseInt","breakpointMax","sizeIndex","getGridCss","margins","paddingTop","padding","paddingRight","paddingBottom","paddingLeft","getInnerGridCss","gutters","getMediaQueriesCss","fn","max","getMediaQueries","getCellCss","devices","dev","percent","Grid","style","inner","align","getAlignGridCss","Cell","deviceProps","getDeviceProps","order","getAlignCellCss","Space","top","bottom","right","left","stack","BannerPanelHeaderStyle","BannerPanelStyle","center","alignbottom","space4","themeName","DecalStyle","iconSize","iconSizes","iconDirections","down","up","IconChevron","animate","width","height","extraProps","fill","viewBox","stroke","strokeWidth","fillRule","IconCross","transform","points","IconInfo","xmlns","cx","cy","x1","y1","x2","y2","Icon","icon","iProp","createElement","IconCollection","arrow","listview","cardview","chevron","link","arrowdown","arrowup","cross","plus","warning","menu","clock","play","focusable","role","copy","x","check","getCommonStyle","getVariant","variant","Primary","Secondary","Tertiary","grey1","blue2","Microsite","StandardButton","$fill","disabled","LinkButton","getLinkButtonStyle","onClick","type","iconName","iconColor","iconPosition","propsToTransfer","$color","BannerPanel","decal","headingLevel","heading","useContext","ThemeContext","primaryButtonVariant","getThemePrimaryButton","isFile","BannerTextLinksStyle","space6","BannerTextLinksListStyle","ul","BannerTextLinksListItemStyle","ColumnContainerDevider","ColumnContainerWithDevider","space5","textToRight","LabelContainer","flexRow","LabelWrapper","fieldset","ListItemsStyle","cardView","CommonDecalStyle","style13","NFSText","BannerTextLinks","links","isTablet","BannerPuffTextStyle","space7","BannerPuffText","BannerPuffTextImageStyle","BannerPuffTextImageImage","img","ColumnContainer","useImageTitle","photographer","agency","illustrator","photographerLabel","agencyLabel","illustratorLabel","parts","labels","sb","BannerPuffTextImage","image","title","src","alt","srcSet","BannerPuffTextYoutubeStyle","YoutubeContainer","Overlay","PlayIconArea","hover","PlayIcon","YouTube","videoId","allowfullscreen","getSourceUrl","videoSource","setVideoSource","titleState","setTitleState","allowfullscreenState","setAllowfullscreenState","playVideo","setPlayVideo","onHover","setOnHover","frameBorder","allow","allowFullScreen","onMouseEnter","onMouseLeave","getImageForOverlay","BannerPuffTextYoutube","youtube","videoID","history","useHistory","nodeRef","useRef","handleLinkClick","event","getAttribute","preventDefault","nodeRefRef","current","querySelectorAll","addEventListener","removeEventListener","Block","Img","Figure","figure","FigCaption","figcaption","LinkableImage","rel","Image","figCaption","PuffWithImage","linkText","_properties","block","getTitle","imgData","ResponsiveIframeWrapper","aspectRatio","Iframe","iframe","ResponsiveIframe","ExpanderPrototypeHeader","isEnabled","ExpanderPrototypeHeaderContent","ExpanderPrototypeContent","HeaderDevider","ExpanderPrototype","themeHeader","themeContent","isOpenState","setIsOpenState","isEnabledState","setIsEnabledState","elementId","onKeyDown","LegalBoxHeaderContainer","LegalParagraphStyle","ListHeaderStyle","ListHeadingStyle","addRightMargin","ListHeaderLinkStyle","ListHeaderMetadataStyle","ListHeaderControllsContainerStyle","ListHeaderSwitchesStyle","ListHeader","sectionStyle","onViewChange","defaultValue","showOptions","checked","List","onChange","e","htmlFor","Card","FragmentPuffListStyle","getThemeSettings","MicrositeLinkStyle","EditableField","inline","opeProperty","cssClass","ColumnPageWithSidebar","options","textAsModel","bottomItems","previousBlockType","preamble_htmlAttributes","textAsModel_htmlAttributes","mainBody_htmlAttributes","disableCustomHeadingLogic","secondPreviousBlockType","fragments","BlockType","Element","mainContent","insideGrid","insideCell","insideInnerGrid","wrapElementInGrid","ImagePuffContainer","ImagePuffContent","SidebarPuff","TopImage","ContentBlockModelWrapper","CarouselContainer","PaginationContainer","Pagination","forwardButtonText","backwardButtonText","onPreviousSlide","onNextSlide","inactivateForwardButton","inactivateBackwardButton","paginationNextLabel","paginationPreviousLabel","GalleryContainer","GalleryListStyle","myTranslate","transition","GalleryListItemStyle","Gallery","puffItems","listLength","numberOfColumns","numberOfItemsInColumns","Math","floor","GalleryListItems","array1","galleryItems","clonedPuffItems","tempFragmentArray","galleryListItem","GalleryListItem","tempJSXArray","puffItem","Carousel","cssState","setcssState","currentIndex","setCurrentIndex","slideWidth","setSlideWidth","numberOfPuffsToSlide","setNumberOfPuffsToSlide","getSlideWidth","prev","SectionHeaderStyle","SectionLinkStyle","SectionHeader","ShowAllStyle","ShowMoreButton","header","themecontext","FragmentPuffList","stackItems","showMoreLabel","initialMaxCount","renderAsCarousel","nextLabel","previousLabel","isNarrowDisplay","showItemsCount","setShowItemsCount","filterdItems","setFilterdItems","newViewOptions","view","CompactList","listElement","centeredHeading","contentHeadingLevel","headerElement","element","headerMicrositeElement","listMicrositeElement","micrositeElement","renderElement","ComponentWithBorderLeft","PuffListItemLinkStyle","PuffListItemTextStyle","PuffTimeStyle","primaryFontFamily","PuffListItemImageStyle","PuffListItemLink","PuffListItemPreamble","PuffListItemMetadata","PuffListItemMetadataCompact","PuffListItem","compact","publicationDate","nfsText","showImage","dateTime","StandardPuffStyle","StandardPuffImageStyle","StandardPuffColumnReverse","StandardPuffTextContainerStyle","StandardPuffTimeStyle","hasImage","StandardPuffHeaderStyle","StandardPuffPreambleStyle","StandardPuffMetadataStyle","PuffCardMobileStyle","grey3","PuffCardMobileImageStyle","PuffCardMobileTimeStyle","PuffCardMobileTextContainerStyle","hasDate","PuffCardMobileDecalStyle","PuffCardMobileHeaderStyle","getHeaderCompactStyle","PuffCardMobilePreambleStyle","PuffCardMobileMetadataStyle","PuffCardMobile","StandardPuff","GetStandardPuffElement","standardPuffModel","newLink","viewType","SubjectAreaIconPuffMobileContainer","SubjectAreaIconPuffMobileImage","SubjectAreaIconPuffMobileContent","SubjectAreaIconPuffMobileTitleLink","SubjectAreaIconPuffContainer","SubjectAreaIconPuffLink","SubjectAreaIconPuffImage","SubjectAreaIconPuff","PuffCardStyle","PuffCardImageStyle","PuffColumnReverse","PuffColumn","PuffCardDecalStyle","PuffCardTextContainerStyle","PuffCardHeaderStyle","PuffCardPreambleStyle","PuffCardMetadataStyle","PuffCardLinkStyle","PuffCard","CardClockStatus","CardClockStatusStyle","StandardFaqPuff","QuestionContainer","AnswerContainer","FaqPuff","question","answerRaw","dangerouslySetInnerHTML","__html","GetGuidancePuffModelElement","guidancePuffModel","areaNames","HeroBannerStyle","HeroBannerTextBlockStyle","space8","HeroBanner","DashboardBlockStyle","DashboardLineStyle","DashboardLineDeviderStyle","DashboardBlock","preparedItems","setPreparedItems","temparray","newItems","chunkList","DashboardLine","ContactBlockContainer","ContactBlockContentWrapper","ContactBlockHeader","ContactBlockSubTitle","ContactBlock","fullName","jobTitle","WidgetNumericBlockStyle","WidgetNumericBlockHeader","WidgetNumericBlockText","WidgetNumericBlockSubText","CharRotator","rotate","WidgetNumericBlock","subtext","LogoBannerStyle","LogoBannerImageContainer","LogoBannerImage","LogoBannerFooter","LogoBannerLink","LogoBanner","logoItems","HighlightBlockContainer","HighlightBlock","BannerTextWidgetStyle","BannerWidgetContainerStyle","BannerWidgetSubTextStyle","BannerWidgetTextStyle","BannerTextWidget","widgetText","HighchartsStyle","HighchartAndTable","showChartMode","HighchartsLegendsStyle","HighchartsLegendsActions","HighchartsLegendsSymbols","symbolColor","TabListStyle","TabListActionsStyle","TabListItemContainerStyle","selected","TabPanelStyle","Tab","defaultTabId","label","autoSelect","onSelect","selectedId","panelId","TabList","selectedPanelId","setSelectedPanelId","focusedPanelId","setFocusedPanelId","panelIds","setPanelIds","elements","setElements","onTabItemClick","handleChildGotFocus","handleChildOnFocused","panels","Children","child","cloneElement","focused","gotFocus","onFocused","updateChildren","currentFocusIndex","newFocusIndex","TabItem","isSelected","setIsSelected","hasFocus","setHasFocus","prevAmount","reference","createRef","focus","onFocus","onBlur","TabPanel","hidden","HiddenCheckbox","input","attrs","svg","CheckboxContainer","isRegulationPage","StyledCheckbox","Checkbox","onCheckedChanged","required","checkedState","setCheckedState","DropdownMenuContainer","DropdownMenuStyle","grey4","DropdownMenu","openState","setOpenState","focusIndex","setFocusIndex","itemRefs","useMemo","wrapperRef","buttonRef","toggleMenu","handleClickOutside","contains","document","onItemClicked","Highcharts","showAsChartLabel","showAsTableLabel","downloadLabel","exportAsLabel","legendHeading","legendSelectAllLabel","legendSelectNoneLabel","categoryLabel","showLegends","useShortDate","statisticsClassificationsLink","classificationList","chartId","tableId","selectedTabPage","setSelectedTabPage","chartOptions","setChartOptions","showFilterLegends","setShowFilterLegends","legends","setLegends","symbolType","classificationLegends","setClassificationLegends","tabPops","stateRef","chartRef","HighchartsModule","exporting","exportData","dataModule","accessibility","setOptions","filename","location","pathname","replace","resetZoom","numericSymbols","decimalPoint","months","weekdays","shortMonths","newOptions","showTable","tableCaption","csv","dateFormat","legendItemClick","serie","userOptions","setVisibilityOnSerie","visible","chart","backgroundColor","marginTop","legend","enabled","columnHeaderFormatter","Axis","plotOptions","series","events","enhanceOptions","symbol","setAllLegenSelect","show","chartSerieitem","groups","pos","setVisibilityOnClassificationSeries","classification","custom","chartElement","highcharts","renderOutput","classificationItems","selectAllLabel","selectNoneLabel","onCheckAll","onUncheckAll","onClassificationsCheckedChanged","exportItems","pdf","png","jpg","downloadCSV","mimeType","exportChart","HighchartsLegends","itemCheckedChanged","classificationCheckedChanged","symbolChar","HighchartsContainer","getStepFields","currentStep","formId","stepId","currentStepNode","getElementById","formData","FormData","currentStepFields","getHiddenFieldValues","visibleFields","field","fieldId","getSelectValue","getCheckboxAndRadioValue","getUploadedFiles","getFieldValue","hiddenFieldHolder","append","files","handleResponse","multiStep","nextStep","redirectUrl","isLoading","invalidFields","validationMessages","IsSuccess","handleServerValidationError","AdditionalParams","__FormField","submissionId","Data","SubmissionId","Message","RedirectUrl","successMessage","fieldErrors","InvalidElement","InvalidElementLabel","message","ValidationMessage","serverValidationError","useFieldValidation","fieldRef","fieldProps","pattern","validationMessage","patternMessage","single","fieldsetHasOneCheckedInput","allInputs","hasOneValidInput","fieldIsNotValid","checkValidity","requiredFieldIsNotFilledIn","fieldDoesNotMatchPattern","match","singleInputIsNotChecked","querySelector","classList","add","textContent","removeAttribute","remove","setAttribute","FormReducer","values","validationMessageHasNotChanged","currentInvalidFields","updatedFields","updatedMessages","FormContext","createContext","FormProvider","Provider","useReducer","useFormValue","Field","placeholder","description","onFieldChange","autoSubmit","showError","setFocus","noValidate","describedby","allProps","resetForm","setValue","valid","setValid","touched","setTouched","validateField","showFieldError","hideFieldError","validatedField","fieldIsValid","describedByAttribute","clsx","TextArea","shouldBeChecked","Array","isArray","setChecked","RadioButton","defaultChecked","selectedOption","selectedIndex","caption","Multiselect","isInvalid","opt","Label","ErrorSpan","invalid","DescriptionSpan","FieldContainer","preferedWidth","displayOptions","WideScreenColspan","FieldContainerStyle","Fieldset","partOfVisibleFields","fieldName","displayWidth","Tag","NextButton","nextId","isExpanded","PreviousButton","previousIndex","previousId","onPrevious","FormStep","step","nrOfSteps","isFirstStep","isLastStep","nextIndex","useChildClones","formFieldNameCounter","renderChildren","initialValues","renderedChildren","isValidElement","isValidFormElement","FormStyle","form","getUniqueKey","random","substr","Form","method","enctype","onSubmit","sendDataType","defaultSubmit","formKey","setFormKey","setShowError","setVisibleFields","formRef","encType","messages","updatedInvalidFields","stepIndex","some","reduce","obj","valueIsArray","newValue","FormComponent","ErrorSummary","FormMessage","confirmationMessage","hasMessageToShow","messageType","checkFieldConditions","dependency","conditions","currentFieldValue","expectedValue","fieldValue","operator","checkIfAnyConditionIsTrue","checkIfAllConditionsAreTrue","performAction","checkOperator","dependencyField","compareValue","useFormRenderer","fields","dependencies","fieldActionExists","renderLabel","renderDescriptionField","renderFieldError","renderField","placeHolder","failedMessage","fieldActions","allowMultiple","buttonText","allActionOutcomes","thenAction","operatorResult","whenValue","attribute","checkFieldActions","multiple","renderFieldset","FieldComponent","renderSingleInput","fieldLabel","renderAsFieldset","singleCheckboxOrRadio","fieldHasDependency","fieldShouldBeRendered","conditionsFulFilled","checkDependency","Unknown","paragraphText","usePrevious","EpiForms","encodingType","steps","forceUpdate","useForceUpdate","renderFormElement","showForm","formValues","el","predefinedValue","getInitialFormValues","messageHolderRef","prevInvalidFields","prevStep","successfullySubmitted","formMessageElement","currentValidationMessages","set","fetch","body","cache","headers","credentials","redirect","referrer","then","ok","Error","json","catch","alert","submitForm","display","flexWrap","PageOverview","aside","ElementContainer","FacetTypeOf","wrapElementWithIdElement","onPageMenuVisibility","onPageMenuHeading","anchorId","wrapElement","wrapElementInCell","wrapElementInInnerGrid","getLastItemBlockType","lastBlockMetaData","getFragmentMetadata","hasFragments","blockType","getSpaceToAddBefore","previous","spaceBetween_Sections","getSection","spaceBetween_Elements","getElement","spaceBetween_TextAndElements","getTextAndElement","spaceBetween_Texts","getText","SectionNew","SectionBanner","_Reserved_Heading","_Reserved_HtmlContent","Item","tableData","youtubeData","puff","videoData","bannerData","information","heroBannerProps","GetHeroBannerModelElement","modelData","GetLogoBannerModelElement","linkList","GetBannerModelElement","faqData","answer","GetFaqModelElement","expanderData","colorHeading","sidebar","GetContentBlockModelElement","collapsibleContainer","overrideSpacing","GetCollapsibleContainerElement","mediaBannerData","mediaContent","GetMediaBannerElement","GetDashboardBlockModelElement","highChartPptions","JSON","parse","highChartsOptions","showHeader","GetStatisticsBlockModelElement","puffContainer","GetPuffContainerElement","isPage","blockLevel","getHeadingLevel","raw","GetHeadingFragmentElement","removeBottomMargin","fragment","GetRawFragmentElement","GetContactModelElement","legalBoxData","headingElement","showIcon","sfsNumber","showAsClosed","GetLegalBoxModelElement","colorTheme","expanderId","themeStyles","GetCollapsibleBlockModelElement","GetHighlightModelElement","GetImageElement","grantPuffModel","statusColor","statusId","green3","statusAlert","GetGrantPuffModelElement","eventPuffItemModel","formattedSubtitle","eventStartDate","eventType","GetEventPuffItemModelElement","subjectAreaIcondPuffModel","GetSubjectAreaIconPuffElement","embedUrl","publicationPuffModel","GetPublicationPuffModelElement","regulationPuffModel","validFromString","validFromDate","dateString","regulationId","nfsString","tag","buildMetaDataString","linkItem","GetRegulationPuffModelElement","EpiFragments","elementInformation","spaceBefore","topSpace","wrapFragmentInSpace","Fragment","themeTop","isSubjectAreaPage","PublicationLink","ListingPageGrantsHeader","heading_htmlAttributes","publicationLink","AriaLabel","SearchOverlappBlock","FiltersContainer","ResultMessageHelper","grey5","StyledSpan","SearchInputWrapper","PillsBlock","PillResetButton","AllFilterButton","FieldsetInline","FilterButtonContainer","FilterBlock","CheckboxWrapper","LabelButtonWrapper","FilterButton","FilterRegPageButton","filterKey","FilterOptionsContainer","TimeIntervalDropdown","CheckboxesInline","FilterCheckboxGroup","ChildrenWrapper","HideCheckbox","MultiSelectCheckbox","hits","focusStyle","handleCheckChange","prevValue","SingleFilterCheckbox","SingleSelectCheckbox","DateSelectDropdownStyle","SelectContainer","SelectLabel","Separator","CTAButtons","ButtonReset","DateSelectDropdown","timeInterval","selectedDates","fromLabel","toLabel","btnResetLabel","btnAddLabel","selectableYears","selectYearLabel","from","setState","yearRanges","setYearRanges","updateYearRangeStateMobile","udpatedYearRanges","facets","URLSearchParams","releaseDateFacet","find","facet","startsWith","releaseDateValue","reverse","newRangeState","releaseDatePart","part","dateRange","startYear","endYear","handleSubmitMobile","newState","RadioButtonContainer","Wrap","RadioOption","Container","Radio","onSelectedChanged","focusId","setFocusId","selectedIdState","setSelectedStateId","optionsState","setOptionsState","labelState","setLabelState","changeSelected","hasDoneInitialDrawRef","lastListSectionRef","useCallback","lastListSectionElement","handleOptionClick","option","focusedOption","nextOption","previousOptionIndex","currentSelectedOptionIndex","nextOptionIndex","focusSelect","FilterDropdown","facetModels","onDateSelectChanged","onCheckboxChanged","sortModel","onSortChanged","initFiltersByKey","fKey","setFKey","sSF","setSSF","radioBtnRef","tagName","prevK","updFKey","handleKeyDown","toggleFOpts","modelKey","toggleSSF","facetKey","handleDateSelectChanged","range","filterTypeOf","selectedName","facetOptions","facetType","bool","multiSelect","isFirst","isLast","helpText","singleSelect","dateSelect","sortOptionModels","selectedOpt","PillWrapper","PillButton","Pills","onRemove","keyPill","AutocompleteContainer","SuggestionsList","SuggestionItem","isfocused","RegularText","HighlightedText","Autocomplete","currentState","autoCompleteApi","setSuggestions","showSuggestions","setShowSuggestions","containerRef","listIndex","setListIndex","buildQueryParam","fetchAndSetSuggestions","prevIndex","getStyledSuggestion","suggestion","escapedQuery","regex","RegExp","toLowerCase","queryParams","searchURL","sortBy","q","encodesFilters","entries","formattedValues","filtersURL","queryFormated","queryURL","SearchByListngPage","filterLabel","searchActionText","searchTopic","searchResultLabel","searchPlaceholder","searchResultLabelNoMatchesHint","searchResultLabelNoMatches","rootPageId","pageChanged","clearAllFiltersText","searchApi","showClearAll","filterEnabled","useDispatch","searchRef","userQuery","setUserQuery","pillItem","setPillItems","showAutocomplete","setShowAutocomplete","page","culture","searchState","setSearchState","handleURLParameters","handlePopState","newSearchState","currentURL","executeSearch","resetAll","updatedPills","existingPill","Set","newPillItems","TypeFilter","pill","clear","selectedYears","minYear","maxYear","kPLabel","dateLabel","getFacetsFromUrl","has","delete","optionName","updatedDateSelectPills","onPillRemove","flag","updatePills","updatedFacets","debouncedExecuteSearch","urlParams","splitedFacets","ff","decodedValues","decodeURIComponent","concat","facetModel","facetOption","trimStart","facetsArray","sortURL","URL","queryParamsURL","maxLength","handleUserQuery","autoComplete","enterKeyHint","numberOfHits","typeOfFacet","checkboxValue","trim","pillName","optSelected","ListPageShowMoreButton","ListPageShowMoreButtonContainer","ListingPageShowMoreButton","ClearAllLinkContainer","TotalCountDisplay","FilterModalContainer","FilterModalContent","FilterModalHeader","FilterModalFooter","filterFlag","FilterModal","filteredCount","clearAllText","filterExist","showFilterModal","onClose","onClear","onMobileSubmit","modalRef","handleFocus","overflow","documentElement","Transition","in","timeout","unmountOnExit","AccordionContainer","AccordionItem","AccordianPills","AccordionHeader","activePills","AccordionContent","AccordionIcon","AccordionFilter","dateSelectorSSF","ssfIintial","dateSSF","setDateSSF","timeIntervalOption","formattedItem","displayName","prevKey","toggleDateSSF","SearchByListngPageMobile","allFilterText","showModal","setShowModal","setFilterExist","mobileFilteredItemsCount","setMobileFilteredItemsCount","mobileYearItemsCount","setMmobileYearItemsCount","stageFacetModels","setstageFacetModels","setSelectedDates","closeModal","getMobilePill","prevPillItems","resetFilters","hitsOnly","hitsOnlyURL","res","updatedFacetModels","totalFilteredHits","selectedFacetModelsCount","hasSelectedOption","totalYearHits","yearObj","GrantsHeaderDecalStyle","GrantsHeaderLastReviwedStyle","cameFromSectionContent","GrantsHeaderCategoriesStyle","GrantsHeader","sectionHeading","lastReviewed","showReviewDate","applyLink","NVseStandardListingPage","loadMoreSearchResults","displayedResultsText","showFiltersText","apiEndpointSearch","apiEndpointAutoComplete","resetSearchInput","setPageChanged","setShowClearAll","setFilterEnabled","listingResultModel","setListingResultModel","sessionStorageModel","checkFilterEnabled","searchResponse","prevState","results","lastBlockType","spaceAfterLast","getPageTopPadding","totalHits","excerpt","totalPages","Subtitle","MicroSubtitle","HeroContainer","ActionsContainer","PageTopOverlappBanner","image_htmlAttributes","FjallStartPage","BackgroundOverlayStyle","MegaMenuListsContainer","MegaMenuHeaderContainer","MegaMenuCloseContainer","MegaMenuListContainer","MegaMenuRootItem","MicrositeMegaMenuRootItem","MegaMenuRootLinkItem","MegaMenuSiblingItem","MegaMenuSiblingLinkItem","isRedirect","MicrositeMegaMenuSiblingLinkItem","MegaMenuAlternativSiblingLinkItem","MegaMenuErrorItem","SearchRelevansTypes","SearchFilterTypes","MegaMenu","useLocation","isEnglish","menus","setMenus","currentLocation","setCurrentLocation","setAnimate","animate2","setAnimate2","MENU","MENY","getActiveItem","currentUrl","closeMenu","rootMenues","parent","currentLevel","activeItem","newMenuList","onToggleItem","createNodeIndexPath","onMenuListClose","focusOrigin","menuList","onMouseClickOutside","toggleItemsToFalse","path","state2","TransitionGroup","component","menuItem","showCloseButton","MegaMenuList","closeElement","closeLabel","ariaCloseLabel","onMenuItemSelected","zIndex","toLocaleUpperCase","matchIndex","stopPropagation","shiftKey","onKeyUp","visibility","SIDEMENU","LEVEL","SIDOMENY","NIVA","MenuListItem","onSelected","onItemFocus","getItemWithSubItems","getLinkItem","TopBannerWithImageContainer","MicroTopBannerWithImageContainer","TopBannerWithTextContainer","MicroTopBannerWithTextContainer","getImageDiementions","prop","_height","_width","zoom","ImageContainerStyle","MicroImageContainerStyle","TextContainerContentStyle","TopBannerNoImageContainer","TextContainerHeader","TextContainerSubHeader","TopBannerLink","useSize","setSize","useLayoutEffect","getBoundingClientRect","useResizeObserver","entry","contentRect","PageTopBanner","mainImage","subheading","mainImage_htmlAttributes","bannerElementRef","textElementRef","textSize","banner","textBannerContainer","bw","th","bh_max","bh_min","wantedImageHeight","imageHeight","imageProps","PageOverviewPuff","PageSectionContent","renderHeader","blockTypeBefore_textAsModel","SidebarRelatedPanelStyle","SidebarRelatedPanel","OnPageNavigationContent","sections","relatedEnvironmentGoalsLabel","relatedEnvironmentGoals","relatedSustainabilityGoalsLabel","relatedSustainabilityGoals","findOnPageLabel","showRelatedPanel","related","renderLeftcolumn","getBlockBaseSections","blockBaseModel","instanceOfBlockBase","convertToBlockBaseInstance","getBlockBaseMenuItems","FjallArticlePage","subHeading","metaData","isMenuOpen","setIsMenuOpen","setSections","menuIndex","setMenuIndex","sectionStrings","menuIndexRoot","blockTypeBefore_bottomItems","DisplayNavigationHeader","userClosed","Microsite404Page","mainBody","MicrositeListingPage","puffs","puffNavigationListSizeOnLoad","showMoreButton","setShowMoreButton","itemsToShow","SearchInputFormContainer","shorterInput","SearchInputFormInputContainer","SearchInputForm","onEsc","micrositeActive","searchLabel","escapeListener","trimmedValue","autoFocus","evt","MicrositeSearchPage","displayedSearchHitsText","displayedSearchNoHitsText","getInitialParameters","f","All","selectedViewType","initialParameters","getSearchStateFromParameters","queryString","go","changePage","newPageNr","MicrositeArticlePage","MicrositeStartPage","ButtonContainer","NextAndPrevButtons","QuizContainer","QuizOption","QuizLabel","QuizText","QuizInput","QuizList","Quiz","answerOptions","correctAnswer","correctAnswerExplination","selectedQuiz","selectedAnswer","setAnswer","headingRef","handleSelectAnswer","questionIndex","questionDescription","marginLeft","onKeyPress","handleEnterPress","Question","Answers","Alternatives","IconWrapper","Answer","AnswerText","AnswerIcon","AnswerResult","resultTitle","yourAnswerText","correctAnswerText","minimumPassing","failedText","passedText","answers","correctAnswersTotal","answerOption","QuizForm","questions","nextButtonText","prevButtonText","resultButtonText","quizFormState","setQuizFormState","quizFormData","getItem","stringify","updateSessionStorage","quizState","setItem","newAnswer","existingAnswerIndex","updatedAnswers","updatedState","setSelectedQuiz","useQuizForm","seeResult","setSeeResult","container","removeItem","MicrositeQuizPage","CategoryDropdown","category","allowEmpty","onSelectChanged","onCategorySelected","categoryOptions","SeeMore","AdsDisplayed","StyledTable","JobListPage","hdAd","hdCity","hdEmployment","hdApplyDate","displayOfTotalLabel","seeAllLabel","showMore","setShowMore","adsDisplayed","setAdsDisplayed","areas","lastApplyDate","employment","BannerLinksStyle","BannerLinksListStyle","BannerLinksListItemStyle","BannerLinks","SortContainer","NVseJobListPage","mediaBanner","jobList","siblingsList","listEmpty","jobListItem","jobListSorted","setJobListSorted","orderByItemKey","setOrderByItemKey","compare","keyName","listOrdered","sort","b","catId","catItem","word","renderCatOption","minTabletWidth","SideBarSectionContainer","SideBarSectionTitle","SectionTitleUnderline","hr","SectionItemContainer","SectionItem","JobDetailSideBarItem","DetailGrid","ContentBodyCell","NVseJobDetailPage","contactInfo","notification","summary","isDesktopOrLarger","mainItems","FilterContainer","SubHeader","zeroBottomMargin","NVseGrantsListingPage","targetGroups","grants","displayedGrantsText","pastGrantsHeading","pastGrantsLink","qty","setFilter","filteredGrants","setFilteredGrants","endedGrants","setEndedGrants","currentAndComming","currentAndCommingTotal","targetGroupIds","sorted","isPrioritized","maxDate","date1","applicationEndDate","date2","getTime","ended","blockTypeBefore_filteredGrants","blockTypeBefore_endedGrants","spaceBefore_filteredGrants","spaceBefore_endedGrants","newfilterList","newFilter","filterCheckedChanged","CustomBackground","NVseStatisticsPage","tabHeading","tabItems","responsibleAuthorityLabel","responsibleAuthority","dataSource","selectedPagePanel","setSelectedPagePanel","pages","tabPagesPops","blockTypeBefore_siblingsList","selectedTabIndex","spaceBefore_siblingsList","NVseStartPage","SimplePuffStyle","TopPuffHeader","TopPuffContent","SimplePuff","TargetGroups","targetGroupsHeading","targetGroupsText","applyScopeHeading","applyScopeText","applyPeriodHeading","applyPeriodText","NVseGrantPage","NVseGrantStartPage","targetGroupList","fixedItems","setFixedItems","tempItems","blockTypeBefore_fixedItems","spaceBefore_fixedItems","PageOverviewBanner","PageOverviewContent","NVseGuidanceStartPage","chapterList","blockTypeBefore_chapterList","NVseNavigationPage","puffNavigationList","displayedNavigationsText","puffNavigationListViewOnLoad","setSelectedViewType","formattedHeader","NVseArticlePage","StandardPage","NVseGuidanceCategoryPage","guidanceItemsHeading","allGuidanceItemsText","guidanceItems","blockTypeBefore_guidanceItems","spaceBefore_guidanceItems","NVseGuidanceChapterPage","parentHeading","SearchRelevanceContainer","SearchFilterContainer","PageLayoutType","NVseSearchPage","sortRelevanceLabel","sortDateLabel","filterByAllLabel","filterByPageLabel","filterByDocumentLabel","sortLabel","termsAggregation","aggregations","bucketPage","buckets","term","NVsePage","bucketDoc","NVseDocument","filterType","count","relevance","lastUpdated","NVseThemePage","layoutType","isMicroSite","Micro","NVseStatisticsCategoryPage","statisticsItemsHeading","allStatisticsItemsText","statisticsItems","MetadataGridContainer","MetadataContainer","MetadataThumbnailContainer","MetadataThumbnail","PublicationMetadataBanner","descriptionAsModel","isbn","isbnLabel","releaseDate","releaseDateLabel","pagesLabel","authors","authorsLabel","thumbnail","downloadLinks","renderTable","firstBlockType","getFirstItemBlockType","spaceBeforeThumbnail","NVsePublicationPage","aboutReportLabel","metdataProps","spaceBefore_Metadata","NVsePublicationsCategoryPage","publicationItemsHeading","allPublicationsItemsText","publicationsItems","IndexSectionWrapper","IndexSection","IndexHeading","IndexSectionItem","ListingPageIndexPanel","letter","sectionItems","ListingPageIndexPanelWrapper","NVseSubjectAreaListingPage","subjectAreaListingPageItems","topItems","NVseSubjectAreaPage","ErrorHandler404Page","homeLink","popularList","blockTypeBefore_popularList","spaceBefore_popularList","AsideBoxStyle","EventInfoBoxContainer","LabelStyle","SpanStyle","SectionStyle","ButtonWrapper","EventInfoBox","duration","durationLabel","eventTimeLabel","eventPlace","otherInfo","infoBoxTitle","infoBoxDateHeading","infoBoxLocationHeading","otherInfoHeading","registrationLink","iCalLink","NVseEventPage","CalendarEventItemLinkContainer","CalendarDateContainer","CalendarEventItemInformationContainer","CalendarInformaitonDuration","CalendarHeading","EventListItem","startDate","weekday","getDate","CalendarEventListGroup","CalendarEventListMonthGroup","CalendarEventListHeading","CalendarEventListContainer","NVseEventsListingPage","showAllLabel","selectMonthLabel","fixedEvents","setFixedEvents","selectNodes","setSelectNodes","selectedFilter","setSelectedFilter","filteredEvents","setFilteredEvents","endDate","item1","item2","grouped","groupItems","selectedYear","getFullYear","selectedMonth","getMonth","yearNodes","yearNode","monthNode","monthName","yearItem","monthItem","SidebarContainer","RegulationHistoryDescriptionStyle","RegulationHistoryDescription","optionalTitle","regulationType","relatedRegulationLinksLabel","relatedRegulationLinks","RegulationHistoryNarrowStyle","blue4","RegulationHistoryNarrow","titleLabel","validFromDateLabel","downloadPdfLinkLabel","downloadPdfLink","RegulationHistoryTableStyle","RegulationHistoryTable","Pages","NVseRegulationPage","linkListHeadingLabel","blockTypeBefore_history","spaceBefore_history","relatedElement","NVseGuidanceListingPage","NVseStatisticsListingPage","NVsePublicationsListingPage","NVseRegulationsListingPage","Loader","LoaderStatic","RouteHandler","siteRoute","useParams","ariaLiveRef","pageRef","pageContent","selectReact","renderingState","loaderVisible","setLoaderVisible","Page","PagesMapper","RenderingStates","ClientSide","contentType","updateRenderingState","loaderTimeout","innerHTML","scrollTo","outline","getLevelFontStyle","MenuContainer","MenuHeader","MicrositeMenuHeader","MenuListItemContainer","getLevelStyle","MenuItemHeader","MicrositeMenuItemHeader","MenuLinkItem","MenuLinkItemStyle1","CloseButton","MicrositeCloseButton","MenuMobile","micrositeLogo","firstMenuItem","onHeaderClick","active","focusTrapOptions","preventScroll","onToggleOpenState","MenuList","hasChildren","onChangeState","toggleOpenState","MenuItemComponent","MicrositeHeaderLogoLink","SiteHeaderContainer","SiteHeaderContent","SiteHeaderLogoLink","SiterHeaderMenuAndSearch","SiteHeaderMenuAndQuickLinks","nav","QuickLinksList","QuickLinksListItem","SearchContainer","SearchOverlay","BreadcrumbsContainer","bgBreadcrumbs","Dropdown","MainContainer","DropdownItem","getActiveStyle","MenuDropdown","callback","mobileHeader","isMicrosite","dropdownExpanded","setDropdownExpanded","menuTitle","setMenuTitle","listener","newUrl","MicrositeHeader","menuButtonRef","itemsAria","home","isPopupMenuOpen","onOpenMenu","onOpenSearchMenu","isSearchOpen","isSearchPanelOpen","setIsSearchPanelOpen","searchButtonRef","searchOverlayRef","searchButtonLabel","menuButtonLabel","closeSearchMenu","epiNavigator","prefix","lastIndexOf","handleSearchSubmit","searchPageUrl","onSearchMenuEsc","onMouseClickOutsideSearchOverlay","menuHeaderIsItem","mountOnEnter","QuickLinks","itemPath","urlpaths","paths","getPath","MicrositeFooterLogoLink","MicrositeContainer","MicrositeFooterSectionContainer","MicrositeFooterLinkContainer","MicrositeFooterTextContainer","FooterSectionHeader","FooterSectionItemList","FooterSectionItem","FooterSectionLink","FooterSectionText","FooterSectionTextEmail","SocialLogoStyle","MicrositeFooter","customerService","footerLinkList","contactInformation","socialLinks","getCssStyle","fontFamily","fontWeight","fontSize","lineHeight","letterSpacing","textTransform","MicrositeThemeProvider","micrositeColors","primaryColor","secondaryColor","tertiaryColor","quaternary","quaternaryColor","micrositePalette","textPalette","hint","micrositeFonts","typographyType","secondaryFontFamily","ThemeMicrositeDesktop","ThemeMicrositeMobile","MicrositeApp","Router","headerLogo","setHeaderLogo","footerLogo","setFooterLogo","getLocation","showBreadcrumbs","menuComponent","setMenuComponent","fixedBreadcrumbs","setFixedBreadcrumbs","setIsSearchOpen","fixed","onCloseMenuEvent","menuRoot","menuComponent2","mobile","MicrositeTheme","context","routePatterns","routePattern","footerGroups","GlobalStyle","akkuratRegularWoff2","akkuratRegularWoff","akkuratBoldWoff2","akkuratBoldWoff","tiemposFineLightWoff2","tiemposFineLightWoff","tiemposTextRegulatWoff2","tiemposTextRegulatWoff","accentBlue","blue3","green2","brown2","red1","accentYellow","accentGreen","grey2","ThemeDesktop","ThemeMobile","EnvironmentToasterContainer","EnvironmentToaster","dateStr","env","buildDate","environment","EnvironmentId","DEV","SMOKE","INT","PREP","PROD","translateEnvironment","buildStr","isDesktop","setCookie","expires","days","now","toUTCString","sameSite","secure","cookie","useCookie","initialValue","v","ContentWrapper","CookieBar","readMoreText","readMoreUrl","cookieIsAccepted","setCookieIsAccepted","preserveAspectRatio","MessageContainer","TopBorder","HeaderContainer","MessageHeading","BackgroundWrapper","TextWrapper","LinkWrapper","Text","GlobalMessage","showMoreText","showLessText","setIsOpen","notFirst","SiteHeader","SimpleExpanderHeader","SimpleExpanderHeaderContent","SimpleExpanderDevider","SimpleExpanderContent","SimpleExpander","FooterSection","linkHeading","section","socialLogo","twitterImg","customStyle","marginRight","FooterLinksContainer","LinksFooter","FooterContactContainer","ContactFooter","contact","linkSections","contactHeading","spaceBefore_button","SiteFooter","setContact","footerSections","setFooterSections","contactSections","setContactSections","ariaLabel_links","ariaLabel_Contact","head","generateFooterGroups","newSection","generateLinkList","customerServiceFixed","customerServiceLink","NVseApp","useEpiContextAndSavedEvent","handleContentSaved","subscribe","setContextAndEvent","handleSetContextAndEvent","Meta","keywords","localizationData","mappedMetaData","favIcons","googleSiteVerificationTag","ogSiteName","openGraph","siteName","ogType","ogTitle","ogUrl","ogDescription","twitterCard","twitter","card","twitterTitle","twitterDescription","twitterImage","excludeFromIndex","canonicalUrl","Helmet","sdg","includeSDGMetaTags","sdgMetaDataTags","sizes","renderFavIcon","App","isClient","setIsClient","useClientSideMediaQuery","renderMethod","ReactDOM","render","reactInitialState","__model","hydrate","Hydrate","containerId","store","initStore","BrowserRouter","clientOnly","siteBaseUrl","process","PUBLIC_URL","apiEditUrl"],"mappings":"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","file":"client/client-main.8f22a405.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/assets/\";\n\n \tvar jsonpArray = this[\"webpackJsonpnvse-2020-frontend.master\"] = this[\"webpackJsonpnvse-2020-frontend.master\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([132,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import axios from 'axios';\r\nimport { ContentLinkResponse, Model } from 'types/epi';\r\n\r\nexport const getEpiPage = async (apiUrl: string, route: string) => {\r\n\tconst appendUrl = '.json';\r\n\r\n\tif (route === '') {\r\n\t\troute = `index${appendUrl}`;\r\n\t} else if (route.indexOf('?') > -1) {\r\n\t\tlet index = route.indexOf('?');\r\n\t\tlet query = route.substring(index);\r\n\t\troute = route.substring(0, index);\r\n\r\n\t\tif (route.endsWith('/')) {\r\n\t\t\troute += `index${appendUrl}`;\r\n\t\t} else {\r\n\t\t\troute += appendUrl;\r\n\t\t}\r\n\r\n\t\troute += query;\r\n\t} else if (/\\.(jpe?g|png|gif|bmp)$/i.test(route)) {\r\n\t\troute += '';\r\n\t} else {\r\n\t\troute += appendUrl;\r\n\t}\r\n\r\n\tconst url = `${apiUrl}${route}`;\r\n\tconst { data } = await axios.get<Model>(url);\r\n\treturn data;\r\n};\r\n\r\nexport const getEpiPageContent = async (apiUrl: string, route: string) => {\r\n\tlet appendUrl = '.json';\r\n\r\n\tif (route === '') {\r\n\t\troute = `index${appendUrl}`;\r\n\t} else if (route.indexOf('?') > -1) {\r\n\t\tlet index = route.indexOf('?');\r\n\t\tlet query = route.substring(index);\r\n\t\troute = route.substring(0, index);\r\n\r\n\t\tif (route.endsWith('/')) {\r\n\t\t\troute += `index${appendUrl}`;\r\n\t\t} else {\r\n\t\t\troute += appendUrl;\r\n\t\t}\r\n\r\n\t\troute += query;\r\n\t} else {\r\n\t\troute += appendUrl;\r\n\t}\r\n\r\n\tconst url = `${apiUrl}${route}`;\r\n\tconst { data } = await axios.get<Model>(url);\r\n\treturn data.content;\r\n};\r\n\r\nexport const getPagegontentWithContentLink = async (contentLink: string) => {\r\n\tconst { data } = await axios.get<ContentLinkResponse>(\r\n\t\t`/api/naturvardsverket/pageonediting/${contentLink}`\r\n\t);\r\n\treturn data;\r\n};\r\n\r\n// function sleep(ms: number) {\r\n// \treturn new Promise(resolve => setTimeout(resolve, ms));\r\n// }\r\n\r\nexport const fetchSuggestions = async (\r\n\tapiUrl: string,\r\n\troute: string,\r\n\tquery: string\r\n): Promise<string[]> => {\r\n\ttry {\r\n\t\tconst url = `${apiUrl}${route}?${query}`;\r\n\t\tconst { data } = await axios.get<any>(url);\r\n\t\treturn data?.suggestions;\r\n\t} catch (error) {\r\n\t\tconsole.error('Error fetching suggestions', error);\r\n\t\treturn [];\r\n\t}\r\n};\r\nexport const getEpiSearchResult = async (\r\n\tapiUrl: string,\r\n\troute: string,\r\n\tquery: string\r\n) => {\r\n\t// TODO: <any> => <T>\r\n\r\n\tconst url = `${apiUrl}${route}?${query}`;\r\n\r\n\tconst { data } = await axios.get<any>(url);\r\n\t//\tawait sleep(2000);\r\n\r\n\treturn data;\r\n};\r\n\r\nexport enum ApiPath {\r\n\tNVseSearchPage = 'api/naturvardsverket/search/publications',\r\n\tNVseSearchPageDemo = '/api/search/publications',\r\n\tNVseRegulations = 'api/naturvardsverket/search/regulations',\r\n\tNVseRegulationsDemo = '/api/search/regulations',\r\n\tNVseStatisticsListingPage = 'api/naturvardsverket/search/statistics',\r\n\tNVseStatisticsListingPageDemo = '/api/search/statistics',\r\n}\r\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\r\nimport { EpiEvent } from 'types/epi';\r\nimport { RootState } from 'store';\r\n\r\nlet initialState: EpiEvent = {\r\n\tisEditable: false,\r\n\tinEditMode: false,\r\n\tinPreviewMode: false,\r\n\tready: false,\r\n};\r\n\r\nconst slice = createSlice({\r\n\tname: 'epi',\r\n\tinitialState,\r\n\treducers: {\r\n\t\tupdateEpi: (state, action: PayloadAction<EpiEvent>) => {\r\n\t\t\tstate.isEditable = action.payload.isEditable;\r\n\t\t\tstate.inEditMode = action.payload.inEditMode;\r\n\t\t\tstate.inPreviewMode = action.payload.inPreviewMode;\r\n\t\t\tstate.ready = action.payload.ready;\r\n\t\t},\r\n\t},\r\n});\r\n\r\nexport const selectEpi = (state: RootState) => state.epi;\r\nexport const { updateEpi } = slice.actions;\r\n\r\nexport default slice.reducer;\r\n","import { useEffect, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { selectSessionStorage, setSessionStorage } from 'store/modules/model';\r\nimport { SessionStorageModel } from 'types/epi';\r\n\r\nexport function useSessionStorage(modelType: string, id: string) {\r\n\tconst [result, setResult] = useState<SessionStorageModel | null>();\r\n\r\n\tconst sessionStorageModel = useSelector(selectSessionStorage);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (sessionStorageModel) {\r\n\t\t\tconst index = sessionStorageModel.findIndex(\r\n\t\t\t\t(item) => item.modelType === modelType && item.id === id\r\n\t\t\t);\r\n\t\t\tif (index !== -1) {\r\n\t\t\t\tconst result = sessionStorageModel[index];\r\n\t\t\t\tsetResult(result);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tsetResult(null);\r\n\t\t}\r\n\t}, [sessionStorageModel, modelType, id]);\r\n\r\n\treturn result;\r\n}\r\n\r\n\r\nexport function usePageSessionStorage<Type>(modelType: string, id: string, initialData: any) {\r\n\tconst [result, setResult] = useState<Type>(initialData);\r\n\r\n\tconst sessionStorageModel = useSelector(selectSessionStorage);\r\n\tconst dispatch = useDispatch();\r\n\r\n\tuseEffect(() => {\r\n\r\n\t\tconst pageSessionStorage = getSessionStorage(sessionStorageModel, modelType, id);\r\n\t\tif (pageSessionStorage) {\r\n\t\t\t// Update\r\n\t\t\tsetResult(pageSessionStorage.data);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst payLoad: SessionStorageModel = {\r\n\t\t\tmodelType, id, data: initialData\r\n\t\t};\r\n\r\n\t\t// No page session, Create one \r\n\t\tdispatch(setSessionStorage(payLoad));\r\n\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [sessionStorageModel, modelType, id]);\r\n\r\n\treturn result;\r\n}\r\n\r\nexport function getSessionStorage(sessionStorageModels: SessionStorageModel[], modelType: string, id: string): SessionStorageModel | null {\r\n\r\n\tif (sessionStorageModels) {\r\n\t\tconst index = sessionStorageModels.findIndex(\r\n\t\t\t(item) => item.modelType === modelType && item.id === id\r\n\t\t);\r\n\t\tif (index !== -1) {\r\n\t\t\treturn sessionStorageModels[index];\r\n\t\t}\r\n\t}\r\n\treturn null\r\n}\r\n\r\nexport function createPageSessionStorage(modelType: string, id: string, data: any): SessionStorageModel {\r\n\treturn { modelType, id, data }\r\n}","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\r\nimport {\r\n\tModel,\r\n\tNavigationItem,\r\n\tSearchListingResultModel,\r\n\tSearchResultModel,\r\n\tSessionStorageModel,\r\n} from 'types/epi';\r\nimport { ContentTypes } from 'types/pages';\r\nimport { RootState, AppThunk } from 'store';\r\nimport {\r\n\tgetEpiPage,\r\n\tgetEpiSearchResult,\r\n\tgetPagegontentWithContentLink,\r\n} from 'api/epiApi';\r\nimport { AxiosError } from 'axios';\r\nimport {\r\n\tcreatePageSessionStorage,\r\n\tgetSessionStorage,\r\n} from 'hooks/useSessionStorage';\r\n\r\ninterface ModelState {\r\n\tmodel: Model;\r\n\terror: string | null;\r\n\tloading: boolean;\r\n\tsessionStorage: SessionStorageModel[];\r\n}\r\n\r\nexport const ListingModelsType = [\r\n\t'NVseGuidanceListingPage',\r\n\t'NVseStatisticsListingPage',\r\n\t'NVseStandardListingPage',\r\n\t'NVsePublicationsListingPage',\r\n\t'NVseRegulationsListingPage',\r\n];\r\n\r\nconst initialState: ModelState = {\r\n\terror: null,\r\n\tloading: false,\r\n\tsessionStorage: [],\r\n\tmodel: {\r\n\t\tcontent: undefined,\r\n\t\treact: undefined,\r\n\t},\r\n};\r\n\r\nexport const unsetNavigationLinksIsActive = (items: NavigationItem[]) => {\r\n\titems.forEach((item) => {\r\n\t\titem.isActive = false;\r\n\t\tif (item.children && item.children.length > 0) {\r\n\t\t\tunsetNavigationLinksIsActive(item.children);\r\n\t\t}\r\n\t});\r\n};\r\n\r\nconst slice = createSlice({\r\n\tname: 'model',\r\n\tinitialState,\r\n\treducers: {\r\n\t\tgetModelStart: (state) => {\r\n\t\t\tstate.loading = true;\r\n\t\t},\r\n\t\tgetModelSuccess: (state, action: PayloadAction<Model>) => {\r\n\t\t\t// TODO: Strange place for this check?.. rethink\r\n\t\t\t// do the same with MicrositeStartPage\r\n\t\t\tif (action.payload.content?.modelType === 'NVseStartPage') {\r\n\t\t\t\taction.payload.breadcrumbs = { breadcrumbs: [] };\r\n\t\t\t}\r\n\r\n\t\t\tif (action.payload.navigation && action.payload.navigation.items) {\r\n\t\t\t\tunsetNavigationLinksIsActive(action.payload.navigation.items);\r\n\t\t\t}\r\n\t\t\tstate.model = action.payload;\r\n\r\n\t\t\tstate.error = null;\r\n\t\t\tstate.loading = false;\r\n\t\t},\r\n\t\tgetModelFailed: (state, action: PayloadAction<any>) => {\r\n\t\t\tif (action.payload.error) {\r\n\t\t\t\tstate.error = action.payload.error;\r\n\t\t\t}\r\n\r\n\t\t\tif (action.payload.data) {\r\n\t\t\t\tstate.model = action.payload.data;\r\n\t\t\t}\r\n\r\n\t\t\tstate.loading = false;\r\n\t\t},\r\n\t\tupdateContent: (state, action: PayloadAction<ContentTypes>) => {\r\n\t\t\tstate.model.content = action.payload;\r\n\t\t},\r\n\t\tsetSessionStorage: (state, action: PayloadAction<SessionStorageModel>) => {\r\n\t\t\tif (!state.sessionStorage) {\r\n\t\t\t\tstate.sessionStorage = [];\r\n\t\t\t}\r\n\r\n\t\t\tconst index = state.sessionStorage.findIndex(\r\n\t\t\t\t(item) =>\r\n\t\t\t\t\titem.modelType === action.payload.modelType &&\r\n\t\t\t\t\titem.id === action.payload.id\r\n\t\t\t);\r\n\r\n\t\t\tif (index === -1) {\r\n\t\t\t\tstate.sessionStorage.push(action.payload);\r\n\t\t\t} else {\r\n\t\t\t\tstate.sessionStorage[index] = action.payload;\r\n\t\t\t}\r\n\t\t},\r\n\t\ttoggleMenuItem: (state, action: PayloadAction<number[]>) => {\r\n\t\t\tif (state.model.navigation) {\r\n\t\t\t\tlet item = state.model.navigation.items[action.payload[0]];\r\n\t\t\t\tfor (let i = 1; i < action.payload.length; i++) {\r\n\t\t\t\t\titem = item.children[action.payload[i]];\r\n\t\t\t\t}\r\n\t\t\t\titem.isActive = !item.isActive;\r\n\t\t\t}\r\n\t\t},\r\n\t\tgetSearchStart: (state, action: PayloadAction<string>) => {\r\n\t\t\tListingModelsType.includes(action.payload)\r\n\t\t\t\t? (state.loading = false)\r\n\t\t\t\t: (state.loading = true);\r\n\t\t},\r\n\t\tgetSearchSuccess: (state, action: PayloadAction<SearchResponse>) => {\r\n\t\t\t// Response from the api.\r\n\t\t\tlet searchListingResultModel: SearchListingResultModel | null = null;\r\n\t\t\tconst respons = action.payload.data as SearchListingResultModel;\r\n\t\t\tsearchListingResultModel = {\r\n\t\t\t\tsearchModel: respons.searchModel,\r\n\t\t\t\tnumberOfSearchResults: respons.numberOfSearchResults,\r\n\t\t\t} as SearchListingResultModel;\r\n\r\n\t\t\tconst resultModel = searchListingResultModel;\r\n\t\t\tupdateStateSessonStorage(\r\n\t\t\t\tstate,\r\n\t\t\t\taction.payload.modelType,\r\n\t\t\t\taction.payload.id,\r\n\t\t\t\taction.payload.sessionStoragePropName,\r\n\t\t\t\tresultModel\r\n\t\t\t);\r\n\t\t\tstate.loading = false;\r\n\t\t},\r\n\t\tgetSearchFailed: (state, action: PayloadAction<SearchResponse>) => {\r\n\t\t\tconst resultModel = {\r\n\t\t\t\tsearchModel: {},\r\n\t\t\t\tnumberOfSearchResults: '',\r\n\t\t\t} as SearchListingResultModel;\r\n\t\t\tupdateStateSessonStorage(\r\n\t\t\t\tstate,\r\n\t\t\t\taction.payload.modelType,\r\n\t\t\t\taction.payload.id,\r\n\t\t\t\taction.payload.sessionStoragePropName,\r\n\t\t\t\tresultModel\r\n\t\t\t);\r\n\r\n\t\t\t// state.loading = false;\r\n\t\t},\r\n\t},\r\n});\r\n\r\nconst updateStateSessonStorage = (\r\n\tstate: ModelState,\r\n\tmodelType: string,\r\n\tid: string,\r\n\tsessionStoragePropName: string,\r\n\tresultModel: SearchResultModel | SearchListingResultModel | null\r\n) => {\r\n\t// Find page session data\r\n\r\n\tconst pageSessionStorage = getSessionStorage(\r\n\t\tstate.sessionStorage,\r\n\t\tmodelType,\r\n\t\tid\r\n\t);\r\n\tif (pageSessionStorage) {\r\n\t\t// Initilize data\r\n\t\tif (!pageSessionStorage.data) {\r\n\t\t\tpageSessionStorage.data = {};\r\n\t\t}\r\n\t\t// Update result\r\n\t\tpageSessionStorage.data[sessionStoragePropName] = resultModel;\r\n\t} else {\r\n\t\t// No page session found, create one and add it to sessionStorage list.\r\n\t\tconst data = {\r\n\t\t\t[sessionStoragePropName]: resultModel,\r\n\t\t};\r\n\r\n\t\tconst newPageSessionStorage = createPageSessionStorage(modelType, id, data);\r\n\t\t// Initilize sessionStorage\r\n\t\tif (!state.sessionStorage) {\r\n\t\t\tstate.sessionStorage = [];\r\n\t\t}\r\n\t\tstate.sessionStorage.push(newPageSessionStorage);\r\n\t}\r\n};\r\n\r\nexport const fetchPage = (\r\n\trouteApiUrl: string,\r\n\troute: string\r\n): AppThunk => async (dispatch) => {\r\n\tlet data;\r\n\r\n\tdispatch(getModelStart());\r\n\r\n\ttry {\r\n\t\tdata = await getEpiPage(routeApiUrl, route);\r\n\t} catch (err: any) {\r\n\t\tconst contentType = err.response.headers['content-type'];\r\n\r\n\t\tif (contentType && contentType.indexOf('application/json') !== -1) {\r\n\t\t\t// process your JSON data further\r\n\t\t\tdispatch(\r\n\t\t\t\tgetModelFailed({ data: err.response.data, error: err.toString() })\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\t// this is text, do something with it\r\n\t\t\tdispatch(getModelFailed({ data: undefined, error: err.toString() }));\r\n\t\t}\r\n\r\n\t\t//\t\tdispatch(getModelFailed(err));\r\n\t\treturn;\r\n\t}\r\n\r\n\tdispatch(getModelSuccess(data));\r\n};\r\n\r\nexport const fetchPageWithContentLink = (\r\n\tcontentLink: string\r\n): AppThunk => async (dispatch) => {\r\n\tlet data;\r\n\ttry {\r\n\t\tdata = await getPagegontentWithContentLink(contentLink);\r\n\t} catch (error) {\r\n\t\tconsole.log(error);\r\n\t\treturn;\r\n\t}\r\n\tif (data.status === 200) {\r\n\t\tdispatch(updateContent(data.result));\r\n\t}\r\n};\r\n\r\nexport const fetchSearchResult = (\r\n\tmodelType: string,\r\n\tid: string,\r\n\tsessionStoragePropName: string,\r\n\trouteApiUrl: string,\r\n\troute: string,\r\n\tquery: string\r\n): AppThunk => async (dispatch) => {\r\n\tlet data;\r\n\r\n\tdispatch(getSearchStart(modelType));\r\n\r\n\ttry {\r\n\t\t// TODO: Type data <T>\r\n\t\tdata = await getEpiSearchResult(routeApiUrl, route, query);\r\n\t} catch (err: any) {\r\n\t\tconst reason = err as AxiosError;\r\n\t\tconst statusCode: number | undefined = reason.response?.status;\r\n\t\tswitch (statusCode) {\r\n\t\t\tcase 400: // 400 Bad request\r\n\t\t\t\tconsole.log(\r\n\t\t\t\t\t'TODO: Handle 400, StatusText:' + reason.response!.statusText\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 500: // 500 Internal server error\r\n\t\t\t\tconsole.log(\r\n\t\t\t\t\t'TODO: Handle 500, StatusText:' + reason.response!.statusText\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tconsole.log('TODO: Handle unsupported status code ' + statusCode);\r\n\t\t}\r\n\r\n\t\tlet result = {\r\n\t\t\tmodelType,\r\n\t\t\tid,\r\n\t\t\tsessionStoragePropName,\r\n\t\t\tdata: null,\r\n\t\t\terror: err.toString(),\r\n\t\t} as SearchResponse;\r\n\r\n\t\tdispatch(getSearchFailed(result));\r\n\t\treturn;\r\n\t}\r\n\tlet result = {\r\n\t\tmodelType,\r\n\t\tid,\r\n\t\tsessionStoragePropName,\r\n\t\tdata,\r\n\t} as SearchResponse;\r\n\r\n\tdispatch(getSearchSuccess(result));\r\n};\r\n\r\nexport type SearchResponse = {\r\n\tmodelType: string;\r\n\tid: string;\r\n\tsessionStoragePropName: string;\r\n\tdata: any;\r\n\terror: string;\r\n};\r\n\r\nexport const selectModel = (state: RootState) => state.model;\r\nexport const selectContent = (state: RootState) => state.model.model.content;\r\nexport const selectSearch = (state: RootState) => state.model.model.search;\r\nexport const selectMetaData = (state: RootState) => state.model.model.metadata;\r\nexport const selectLocalization = (state: RootState) =>\r\n\tstate.model.model.localization;\r\nexport const selectNavigation = (state: RootState) =>\r\n\tstate.model.model.navigation;\r\nexport const selectLang = (state: RootState) => state.model.model.lang;\r\nexport const selectQuickLinks = (state: RootState) =>\r\n\tstate.model.model.quickLinks?.quickLinks;\r\nexport const selectBreadcrumbs = (state: RootState) =>\r\n\tstate.model.model.breadcrumbs?.breadcrumbs;\r\nexport const selectCookieBar = (state: RootState) =>\r\n\tstate.model.model.cookieBar;\r\nexport const selectFooter = (state: RootState) => state.model.model.footer;\r\nexport const selectTracer = (state: RootState) => state.model.model.tracer;\r\nexport const selectSessionStorage = (state: RootState) =>\r\n\tstate.model.sessionStorage;\r\nexport const selectGlobalMessages = (state: RootState) =>\r\n\tstate.model.model.globalMessages;\r\n\r\nexport const selectMicrosite = (state: RootState) =>\r\n\tstate.model.model.microsite;\r\n\r\nexport const selectLogo = (state: RootState) => state.model.model.logo;\r\nexport const getSkipToContent = (state: RootState) =>\r\n\tstate.model.model.quickLinks?.skipToContent;\r\nexport const selectAppLayout = (state: RootState) =>\r\n\tstate.model.model.appTypeLayout;\r\n\r\nexport const {\r\n\tgetModelStart,\r\n\tgetModelSuccess,\r\n\tgetModelFailed,\r\n\tgetSearchStart,\r\n\tgetSearchSuccess,\r\n\tsetSessionStorage,\r\n\tgetSearchFailed,\r\n\tupdateContent,\r\n\ttoggleMenuItem,\r\n} = slice.actions;\r\n\r\nexport default slice.reducer;\r\n","/**\r\n * Shared model types\r\n * (todo: Move this to another folder?)\r\n */\r\nimport { css } from 'styled-components';\r\nimport { ThemeType } from 'theme/theme';\r\nimport { ModelBreadcrumbs } from 'types/epi';\r\nimport { FragmentModelTypes, ImageFragmentModel } from 'types/fragments';\r\n\r\nexport enum ButtonVariant {\r\n\tPrimary = 'primary',\r\n\tSecondary = 'secondary',\r\n\tTertiary = 'tertiary',\r\n\tLink = 'link',\r\n\tMicrosite = 'microsite',\r\n}\r\n\r\nexport enum ButtonColors {\r\n\tPrimary = 'primary',\r\n\tSecondary = 'secondary',\r\n\tBlue = 'blue',\r\n\tGreen = 'green',\r\n\tBrown = 'brown',\r\n\tBlack = 'black',\r\n\tWhite = 'white',\r\n\tGrey = 'grey',\r\n}\r\n\r\nexport type ImageObjectPosition = {\r\n\thorizontal?: number;\r\n\tvertical?: number;\r\n};\r\n\r\nexport enum PuffTheme {\r\n\tNeutralWhite = 'neutralwhite',\r\n\tBlueDark = 'bluedark',\r\n\tBlueLight = 'bluelight',\r\n\tGreenDark = 'greendark',\r\n\tGreenLight = 'greenlight',\r\n\tBrownDark = 'browndark',\r\n\tBrownLight = 'brownlight',\r\n\tBlack = 'black',\r\n\tMicrositeMainTheme = 'micrositeMainTheme',\r\n}\r\n\r\nexport type LinkType = {\r\n\theading: string;\r\n\turl: string;\r\n\tisFile?: boolean;\r\n\ttarget?: string;\r\n\trel?: string;\r\n};\r\n\r\nexport type AreaItem = {\r\n\tlink: LinkType;\r\n\tnumberOfPages: number | null;\r\n};\r\n\r\nexport type SubjectAreaLink = {\r\n\theading: string;\r\n\turl: string;\r\n};\r\n\r\nexport interface SubjectAreaListingPageItem {\r\n\tname: string;\r\n\turl: string;\r\n\timage?: ImageFragmentModel;\r\n}\r\nexport type SubjectAreaListingPageItemsModel = {\r\n\t[key: string]: SubjectAreaListingPageItem[];\r\n};\r\n\r\nexport type LinkExtendedType = {\r\n\ttext: string;\r\n\ttitle: string | null;\r\n\ttarget: string | null;\r\n\turl: string;\r\n\tisFile?: boolean;\r\n};\r\n\r\nexport type ChapterListType = {\r\n\titems: FragmentModelTypes[];\r\n};\r\n\r\nexport type SiblingsList = {\r\n\theading: string;\r\n\titems: LinkType[];\r\n};\r\n\r\nexport const getIsDarkTheme = (theme: any): boolean => {\r\n\tswitch (theme) {\r\n\t\tcase PuffTheme.Black:\r\n\t\tcase PuffTheme.BlueDark:\r\n\t\tcase PuffTheme.BrownDark:\r\n\t\tcase PuffTheme.GreenDark:\r\n\t\t\treturn true;\r\n\t\tdefault:\r\n\t\t\treturn false;\r\n\t}\r\n};\r\nexport const getThemePrimaryButton = (\r\n\ttheme: PuffTheme | null | undefined\r\n): ButtonVariant => {\r\n\tswitch (theme) {\r\n\t\tdefault:\r\n\t\tcase PuffTheme.NeutralWhite:\r\n\t\t\treturn ButtonVariant.Primary;\r\n\t\tcase PuffTheme.BlueDark:\r\n\t\t\treturn ButtonVariant.Secondary;\r\n\t\tcase PuffTheme.BlueLight:\r\n\t\t\treturn ButtonVariant.Primary;\r\n\t\tcase PuffTheme.GreenDark:\r\n\t\t\treturn ButtonVariant.Secondary;\r\n\t\tcase PuffTheme.GreenLight:\r\n\t\t\treturn ButtonVariant.Primary;\r\n\t\tcase PuffTheme.BrownDark:\r\n\t\t\treturn ButtonVariant.Secondary;\r\n\t\tcase PuffTheme.BrownLight:\r\n\t\t\treturn ButtonVariant.Primary;\r\n\t}\r\n};\r\nexport const getThemeSecondaryButton = (\r\n\ttheme: PuffTheme | null | undefined\r\n): ButtonVariant => {\r\n\tswitch (theme) {\r\n\t\tdefault:\r\n\t\tcase PuffTheme.NeutralWhite:\r\n\t\t\treturn ButtonVariant.Secondary;\r\n\t\tcase PuffTheme.BlueDark:\r\n\t\t\treturn ButtonVariant.Secondary;\r\n\t\tcase PuffTheme.BlueLight:\r\n\t\t\treturn ButtonVariant.Secondary;\r\n\t\tcase PuffTheme.GreenDark:\r\n\t\t\treturn ButtonVariant.Secondary;\r\n\t\tcase PuffTheme.GreenLight:\r\n\t\t\treturn ButtonVariant.Secondary;\r\n\t\tcase PuffTheme.BrownDark:\r\n\t\t\treturn ButtonVariant.Secondary;\r\n\t\tcase PuffTheme.BrownLight:\r\n\t\t\treturn ButtonVariant.Secondary;\r\n\t}\r\n};\r\nexport const getThemeBackground = (\r\n\tthemeContext: ThemeType,\r\n\ttheme: PuffTheme | null | undefined\r\n) => {\r\n\tswitch (theme) {\r\n\t\tdefault:\r\n\t\tcase PuffTheme.NeutralWhite:\r\n\t\t\treturn themeContext.colors.white;\r\n\t\tcase PuffTheme.BlueDark:\r\n\t\t\treturn themeContext.colors.primary;\r\n\t\tcase PuffTheme.BlueLight:\r\n\t\t\treturn themeContext.colors.blue1;\r\n\t\tcase PuffTheme.GreenDark:\r\n\t\t\treturn themeContext.colors.secondaryGreen;\r\n\t\tcase PuffTheme.GreenLight:\r\n\t\t\treturn themeContext.colors.green1;\r\n\t\tcase PuffTheme.BrownDark:\r\n\t\t\treturn themeContext.colors.secondaryBrown;\r\n\t\tcase PuffTheme.BrownLight:\r\n\t\t\treturn themeContext.colors.brown1;\r\n\t\tcase PuffTheme.Black:\r\n\t\t\treturn themeContext.colors.black;\r\n\t\tcase PuffTheme.MicrositeMainTheme:\r\n\t\t\treturn themeContext.colors.tertiary;\r\n\t}\r\n};\r\nexport const getThemeHeadingColor = (\r\n\tthemeContext: ThemeType,\r\n\ttheme: PuffTheme | null | undefined\r\n) => {\r\n\tswitch (theme) {\r\n\t\tdefault:\r\n\t\t\treturn themeContext.colors.primary;\r\n\t\tcase PuffTheme.NeutralWhite:\r\n\t\t\treturn themeContext.colors.secondaryBlue;\r\n\t\tcase PuffTheme.BlueDark:\r\n\t\t\treturn themeContext.colors.brown1;\r\n\t\tcase PuffTheme.BlueLight:\r\n\t\t\treturn themeContext.colors.secondaryBlue;\r\n\t\tcase PuffTheme.GreenDark:\r\n\t\t\treturn themeContext.colors.brown1;\r\n\t\tcase PuffTheme.GreenLight:\r\n\t\t\treturn themeContext.colors.primary;\r\n\t\tcase PuffTheme.BrownDark:\r\n\t\t\treturn themeContext.colors.brown1;\r\n\t\tcase PuffTheme.BrownLight:\r\n\t\t\treturn themeContext.colors.secondaryBlue;\r\n\t\tcase PuffTheme.Black:\r\n\t\t\treturn themeContext.colors.brown1;\r\n\t\tcase PuffTheme.MicrositeMainTheme:\r\n\t\t\treturn themeContext.colors.primary;\r\n\t}\r\n};\r\nexport const getThemeTextColor = (\r\n\tthemeContext: ThemeType,\r\n\ttheme: PuffTheme | null | undefined\r\n) => {\r\n\tswitch (theme) {\r\n\t\tdefault:\r\n\t\tcase PuffTheme.NeutralWhite:\r\n\t\t\treturn themeContext.palette.text.primary;\r\n\t\tcase PuffTheme.BlueDark:\r\n\t\t\treturn themeContext.colors.white;\r\n\t\tcase PuffTheme.BlueLight:\r\n\t\t\treturn themeContext.colors.primary;\r\n\t\tcase PuffTheme.GreenDark:\r\n\t\t\treturn themeContext.colors.white;\r\n\t\tcase PuffTheme.GreenLight:\r\n\t\t\treturn themeContext.colors.primary;\r\n\t\tcase PuffTheme.BrownDark:\r\n\t\t\treturn themeContext.colors.white;\r\n\t\tcase PuffTheme.BrownLight:\r\n\t\t\treturn themeContext.colors.primary;\r\n\t\tcase PuffTheme.Black:\r\n\t\t\treturn themeContext.colors.white;\r\n\t\tcase PuffTheme.MicrositeMainTheme:\r\n\t\t\treturn themeContext.colors.primary;\r\n\t}\r\n};\r\nexport const getThemeBorderColor = (\r\n\tthemeContext: ThemeType,\r\n\ttheme: PuffTheme | null | undefined\r\n) => {\r\n\treturn getThemeTextColor(themeContext, theme);\r\n};\r\nexport const getThemeSettings = (\r\n\tthemeName: PuffTheme | null | undefined,\r\n\tthemeContext: ThemeType\r\n) => {\r\n\t// TODO: theme context and ThemeProps collide\r\n\tif (themeName && themeName.length) {\r\n\t\treturn css`\r\n\t\t\tbackground-color: ${getThemeBackground(themeContext, themeName)};\r\n\t\t\tpadding-top: ${(props) => props.theme.spacing.space5}rem;\r\n\t\t\tpadding-bottom: ${(props) => props.theme.spacing.space5}rem;\r\n\t\t`;\r\n\t}\r\n};\r\nexport type NumberRange = {\r\n\tfrom: number | null;\r\n\tto: number | null;\r\n};\r\n\r\nexport type searchModel = {\r\n\tquery: string;\r\n\tpage: number;\r\n\ttotalPages: number;\r\n\tsize: number;\r\n\tnumberOfHits: number;\r\n\tresults: searchResultItemModel[];\r\n\taggregations: aggregationsModel[];\r\n};\r\n\r\ntype aggregationsModel = {\r\n\ttype: string;\r\n\tbuckets: bucketsModel[];\r\n};\r\n\r\ntype bucketsModel = {\r\n\tcount: number;\r\n\tterm: string;\r\n};\r\n\r\ntype searchResultItemModel = {\r\n\tmodelType: '';\r\n\tdocumentId: string;\r\n\tscore: number;\r\n\tdecal: string;\r\n\turl: string;\r\n\timage?: ImageFragmentModel;\r\n\tshowReviewDate: boolean;\r\n\theading: string;\r\n\texcerpt: string;\r\n\tlastUpdated: string;\r\n\tbreadcrumbs: ModelBreadcrumbs;\r\n\tpublished: string;\r\n\tcategories: any;\r\n};\r\n","import { configureStore, combineReducers, Action } from '@reduxjs/toolkit';\r\nimport { ThunkAction } from 'redux-thunk';\r\nimport epiReducer from './modules/epi';\r\nimport reactReducer from './modules/react';\r\nimport modelReducer from './modules/model';\r\n/* PLOP_INJECT_IMPORT */\r\n\r\nconst rootReducer = combineReducers({\r\n\tepi: epiReducer,\r\n\treact: reactReducer,\r\n\tmodel: modelReducer,\r\n\t/* PLOP_INJECT_REDUCER */\r\n});\r\nexport type RootState = ReturnType<typeof rootReducer>;\r\n\r\nconst configStore = (preloadedState: any) => {\r\n\treturn configureStore({\r\n\t\treducer: rootReducer,\r\n\t\tpreloadedState,\r\n\t});\r\n};\r\n\r\nexport default configStore;\r\n\r\n// export type AppDispatch = typeof store.dispatch\r\nexport type AppThunk = ThunkAction<void, RootState, unknown, Action<string>>;\r\n","import { math } from 'polished';\r\n\r\nexport interface Breakpoints {\r\n\t[device: string]: string;\r\n}\r\n\r\nexport interface BreakpointsNumber {\r\n\t[device: string]: number;\r\n}\r\n\r\n// Must be set in numbers\r\nexport const breakpointsNumber: BreakpointsNumber = {\r\n\tdesktop: 1132,\r\n\ttablet: 480,\r\n\tphone: 0,\r\n};\r\n\r\n// Must be set in pixels\r\nexport const breakpoints: Breakpoints = {\r\n\tdesktop: `${breakpointsNumber.desktop}px`,\r\n\ttablet: `${breakpointsNumber.tablet}px`,\r\n\tphone: `${breakpointsNumber.phone}px`,\r\n};\r\n\r\nconst mediaQueryValues = {\r\n\tdesktop: `@media screen and (min-width: ${breakpoints.desktop})`,\r\n\ttabletOrLarger: `@media screen and (min-width: ${breakpoints.tablet})`,\r\n\tphoneOrTablet: `@media screen and (min-width: ${\r\n\t\tbreakpoints.phone\r\n\t}) and (max-width: ${math(`${breakpoints.desktop} - 1px`)})`,\r\n\ttablet: `@media screen and (min-width: ${\r\n\t\tbreakpoints.tablet\r\n\t}) and (max-width: ${math(`${breakpoints.desktop} - 1px`)})`,\r\n\tphone: `@media screen and (min-width: ${\r\n\t\tbreakpoints.phone\r\n\t}) and (max-width: ${math(`${breakpoints.tablet} - 1px`)})`,\r\n} as const;\r\ntype MediaQueries = typeof mediaQueryValues;\r\nexport const mediaQueries: MediaQueries = mediaQueryValues;\r\n","import { breakpoints } from 'theme/media-queries';\r\n\r\nexport interface Grid {\r\n\tbreakpoints: Breakpoints;\r\n\tcolumns: Columns;\r\n\tmargin: Breakpoints;\r\n\tgutter: Breakpoints;\r\n\tdefaultColumnSpan: number;\r\n\tmaxWidth: string;\r\n}\r\n\r\ninterface Breakpoints {\r\n\t[device: string]: string;\r\n}\r\n\r\nexport interface Columns {\r\n\t[device: string]: number;\r\n}\r\n\r\nconst columns: Columns = {\r\n\tdesktop: 12,\r\n\ttablet: 8,\r\n\tphone: 4,\r\n};\r\n\r\nconst margin: Breakpoints = {\r\n\tdesktop: '16px',\r\n\ttablet: '16px',\r\n\tphone: '16px',\r\n};\r\n\r\nconst gutter: Breakpoints = {\r\n\tdesktop: '16px',\r\n\ttablet: '16px',\r\n\tphone: '16px',\r\n};\r\n\r\nconst defaultColumnSpan = 4;\r\n\r\nexport const gridMaxWidth = 1132;\r\n\r\nconst maxWidth = gridMaxWidth + 'px';\r\n\r\nexport const grid: Grid = {\r\n\tbreakpoints,\r\n\tcolumns,\r\n\tmargin,\r\n\tgutter,\r\n\tdefaultColumnSpan,\r\n\tmaxWidth,\r\n};\r\n","import { css } from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\n\r\nexport const getLinkArrowStyle = () => {\r\n\treturn css`\r\n\t\t&::after {\r\n\t\t\tcontent: '\\u00a0\\u00a0\\u203a';\r\n\t\t\tmargin-left: 0px;\r\n\t\t\topacity: 0.6;\r\n\t\t\tmargin-top: 6px;\r\n\t\t}\r\n\t`;\r\n};\r\n\r\nexport const styleForLink = css`\r\n\t${(props) => props.theme.typography.style6.getStyle()};\r\n\tcolor: ${(props) =>\r\n\t\tprops.theme.isMicrositeActive ? props.theme.colors.primary : '#0039A2'};\r\n\ttext-decoration: none;\r\n\toutline-color: transparent;\r\n\r\n\t&:hover {\r\n\t\ttext-decoration: underline;\r\n\r\n\t\t&::after {\r\n\t\t\topacity: 1;\r\n\t\t}\r\n\t}\r\n\r\n\t${mediaQueries.phone} {\r\n\t\t${(props) =>\r\n\t\t\tprops.theme.isMicrositeActive\r\n\t\t\t\t? props.theme.typography.style10.getStyle()\r\n\t\t\t\t: props.theme.typography.style6.getStyle()}\r\n\t}\r\n\r\n\t${getLinkArrowStyle()}\r\n`;\r\n\r\nexport const styleForLinkDark = css`\r\n\t${(props) => props.theme.typography.style5.getStyle()};\r\n\tcolor: ${(props) => props.theme.colors.white};\r\n\ttext-decoration: none;\r\n\toutline-color: transparent;\r\n`;\r\n\r\n// outline: 2px transparent solid;\r\n// outline-color: currentColor;\r\n// box-shadow: ${direction} 0 0 0 2px black, 0 0 1px 5px white;\r\n\r\nexport const accessibilityFocus = (direction?: string) => {\r\n\treturn css`\r\n\t\toutline: 2px solid;\r\n\t\toutline-offset: 2px;\r\n\t\toutline-color: currentColor;\r\n\t\ttransition: outline-color 200ms ease-in-out;\r\n\t\t//\t\ttransition: all .3s ease;\r\n\t\t//\t\ttransition: color 1s, outline-color 1s ease-out;\r\n\t`;\r\n};\r\n\r\nexport const resetAccessibilityFocus = (direction?: string) => {\r\n\treturn css`\r\n\t\toutline: unset;\r\n\t\tbox-shadow: unset;\r\n\t`;\r\n};\r\n","export enum ViewType {\r\n\tCard = 'Card',\r\n\tList = 'List',\r\n\tCompactCard = 'CompactCard',\r\n\tCompactList = 'CompactList',\r\n}\r\n\r\nexport enum Rotate {\r\n\tUp = 0,\r\n\tRight = 90,\r\n\tDown = 180,\r\n\tLeft = 270,\r\n}\r\n","/**\r\n * Link\r\n */\r\n\r\nimport React from 'react';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport styled from 'styled-components';\r\nimport { styleForLink, styleForLinkDark } from 'theme/styles';\r\nimport { selectEpi } from 'store/modules/epi';\r\nimport { getIsDarkTheme } from 'pages/sharedModelTypes';\r\nimport { useSelector } from 'react-redux';\r\n\r\nexport interface Props {\r\n\t/** The url the link should navigate to */\r\n\tto?: string;\r\n\r\n\t/** The url the link should navigate to */\r\n\thref?: string;\r\n\r\n\t/** Pass optional classnames for the html */\r\n\tclassName?: string;\r\n\r\n\texternal?: boolean;\r\n\r\n\ttarget?: string;\r\n\r\n\t/** pass html attr for exmaple aria label */\r\n\t[htmlAttributes: string]: any;\r\n}\r\n\r\nexport const hideIcon = () => {\r\n\treturn '&::after {content: none;}';\r\n};\r\n\r\nconst LinkBasicStyle = styled.a<linkProps>`\r\n\t${({ $isDarkTheme }) => ($isDarkTheme ? styleForLinkDark : styleForLink)};\r\n\t${({ $showLinkIcon }) => !$showLinkIcon && hideIcon};\r\n`;\r\n\r\nconst RouterLinkBasicStyle = styled(RouterLink)<linkProps>`\r\n\t${({ $isDarkTheme }) => ($isDarkTheme ? styleForLinkDark : styleForLink)};\r\n\t${({ $showLinkIcon }) => !$showLinkIcon && hideIcon};\r\n`;\r\n\r\ntype linkProps = {\r\n\t$showLinkIcon: boolean;\r\n\tclassName?: string;\r\n\t$isDarkTheme?: boolean;\r\n};\r\n\r\nconst Link = React.forwardRef<any, Props>(\r\n\t(\r\n\t\t{\r\n\t\t\tto,\r\n\t\t\thref,\r\n\t\t\tchildren,\r\n\t\t\tshowLinkIcon = true,\r\n\t\t\tclassName,\r\n\t\t\texternal,\r\n\t\t\ttarget = '_self',\r\n\t\t\ttabIndex,\r\n\t\t\tpuffTheme,\r\n\t\t\t...htmlAttributes\r\n\t\t},\r\n\t\tref\r\n\t) => {\r\n\t\tconst url = to || href || '#';\r\n\r\n\t\tconst { inEditMode } = useSelector(selectEpi);\r\n\r\n\t\tconst isDarkTheme = getIsDarkTheme(puffTheme);\r\n\r\n\t\tif (\r\n\t\t\t(url && url.charAt(0) !== '/') ||\r\n\t\t\turl.includes('#') ||\r\n\t\t\tinEditMode ||\r\n\t\t\texternal\r\n\t\t) {\r\n\t\t\treturn (\r\n\t\t\t\t<LinkBasicStyle\r\n\t\t\t\t\ttabIndex={tabIndex}\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\t$showLinkIcon={showLinkIcon}\r\n\t\t\t\t\tclassName={className}\r\n\t\t\t\t\ttarget={target}\r\n\t\t\t\t\thref={url}\r\n\t\t\t\t\t$isDarkTheme={isDarkTheme}\r\n\t\t\t\t\t{...htmlAttributes}\r\n\t\t\t\t>\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</LinkBasicStyle>\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\treturn (\r\n\t\t\t\t<RouterLinkBasicStyle\r\n\t\t\t\t\ttabIndex={tabIndex}\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\t$showLinkIcon={showLinkIcon}\r\n\t\t\t\t\tclassName={className}\r\n\t\t\t\t\ttarget={target}\r\n\t\t\t\t\tto={url}\r\n\t\t\t\t\t$isDarkTheme={isDarkTheme}\r\n\t\t\t\t\t{...htmlAttributes}\r\n\t\t\t\t>\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</RouterLinkBasicStyle>\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n);\r\n\r\nexport default Link;\r\n","const baseFontSize: number = 16;\r\n\r\nexport const px = (sizeInPx: number) => sizeInPx / baseFontSize;\r\nexport const px2rem = (sizeInPx: number) => `${px(sizeInPx)}rem`;\r\nexport const rem2px = (sizeInRem: number) => sizeInRem * baseFontSize;\r\n\r\nexport const hashCode = (str: string) => {\r\n\tvar hash = 0,\r\n\t\ti,\r\n\t\tchr;\r\n\tfor (i = 0; i < str.length; i++) {\r\n\t\tchr = str.charCodeAt(i);\r\n\t\thash = (hash << 5) - hash + chr;\r\n\t\thash |= 0; // Convert to 32bit integer\r\n\t}\r\n\treturn hash;\r\n};\r\n\r\nexport const generateAnchorId = (str: string) => {\r\n\treturn 'E' + hashCode('prefix' + str);\r\n};\r\n","/**\r\n * Typography - styles\r\n */\r\n\r\nimport styled, { css } from 'styled-components';\r\nimport { px2rem } from 'theme/utils';\r\nimport { mediaQueries } from 'theme';\r\nimport { resetAccessibilityFocus, styleForLink } from 'theme/styles';\r\n\r\nexport const zeroMarginPadding = css`\r\n\tmargin: 0px;\r\n\tpadding: 0px;\r\n`;\r\n\r\n/**\r\n * Span\r\n */\r\nexport const Span = styled.span`\r\n\t${(props) => props.theme.typography.style8.getStyle()};\r\n`;\r\n\r\n/**\r\n * Div\r\n */\r\nexport const Div = styled.div`\r\n\t${(props) => props.theme.typography.style8.getStyle()};\r\n`;\r\n\r\n/**\r\n * H1\r\n */\r\nexport const styleForH1 = css`\r\n\t${zeroMarginPadding};\r\n\t${(props) => props.theme.typography.style1.getStyle()};\r\n\tcolor: ${(props) => props.theme.colors.primary};\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space2}rem;\r\n`;\r\n\r\nexport const H1 = styled.h1`\r\n\t${styleForH1};\r\n`;\r\n\r\n/**\r\n * H2\r\n */\r\nexport const styleForH2 = css`\r\n\t${zeroMarginPadding};\r\n\tcolor: ${(props) => props.theme.colors.primary};\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space3}rem;\r\n\t${(props) => props.theme.typography.style2.getStyle()};\r\n`;\r\n\r\nexport const H2 = styled.h2`\r\n\t${styleForH2};\r\n`;\r\n\r\n/**\r\n * H3\r\n */\r\nexport const styleForH3 = css`\r\n\t${zeroMarginPadding};\r\n\t${(props) => props.theme.typography.style3.getStyle()};\r\n\tcolor: ${(props) => props.theme.colors.primary};\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space3}rem;\r\n`;\r\n\r\nexport const H3 = styled.h3`\r\n\t${styleForH3};\r\n`;\r\n\r\n/**\r\n * H4\r\n */\r\nexport const styleForH4 = css`\r\n\t${zeroMarginPadding};\r\n\t${(props) => props.theme.typography.style4.getStyle()};\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space3}rem;\r\n`;\r\n\r\nexport const H4 = styled.h4`\r\n\t${styleForH4};\r\n`;\r\n\r\n/**\r\n * H5\r\n */\r\nexport const styleForH5 = css`\r\n\t${zeroMarginPadding};\r\n\t${(props) => props.theme.typography.style5.getStyle()};\r\n\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space1}rem;\r\n`;\r\n\r\nexport const H5 = styled.h5`\r\n\t${styleForH5};\r\n`;\r\n\r\n/**\r\n * H6\r\n */\r\nexport const styleForH6 = css`\r\n\t${zeroMarginPadding};\r\n\t${(props) => props.theme.typography.style6.getStyle()};\r\n\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space3}rem;\r\n`;\r\n\r\nexport const H6 = styled.h6`\r\n\t${styleForH6};\r\n`;\r\n\r\n/**\r\n * P\r\n */\r\nexport const styleForP = css`\r\n\t${zeroMarginPadding};\r\n\t${(props) => props.theme.typography.style8.getStyle()};\r\n\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\tmax-width: 65ch;\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space3}rem;\r\n`;\r\n\r\nexport const P = styled.p`\r\n\t${styleForP};\r\n`;\r\n\r\n/**\r\n * Preamble\r\n */\r\nexport const styleForPreamble = css`\r\n\t${zeroMarginPadding};\r\n\t${(props) => props.theme.typography.style7.getStyle()};\r\n\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\tmax-width: 65ch;\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space3}rem;\r\n`;\r\n\r\nexport const Preamble = styled.p`\r\n\t${styleForPreamble};\r\n`;\r\n\r\n/**\r\n * Button\r\n */\r\nexport const styleForButton = css`\r\n\t${(props) => props.theme.typography.style11.getStyle()};\r\n\tcolor: ${(props) => props.theme.palette.text.primary};\r\n`;\r\n\r\nexport const Button = styled.p`\r\n\t${styleForButton};\r\n`;\r\n\r\n/**\r\n * Input\r\n */\r\nexport const styleForInput = css`\r\n\t${(props) => props.theme.typography.style8.getStyle()};\r\n\tborder-radius: 8px;\r\n\tborder: 1px solid rgba(0, 0, 0, 0.32);\r\n\tbackground-color: ${(props) => props.theme.colors.white};\r\n\tpadding-left: ${(props) => props.theme.spacing.space2}rem;\r\n\tpadding-right: ${(props) => props.theme.spacing.space2}rem;\r\n\tpadding-top: 10px;\r\n\tpadding-bottom: 10px;\r\n\tmargin-right: ${(props) => props.theme.spacing.space2}rem;\r\n\r\n\t&:focus {\r\n\t\t${resetAccessibilityFocus()}\r\n\t\tbox-shadow: 0 0 0 2px ${(props) => props.theme.colors.secondaryBlue};\r\n\t\ttransition: box-shadow 200ms ease-in-out;\r\n\t}\r\n`;\r\n\r\n/**\r\n * Label\r\n */\r\nexport const styleForLabel = css`\r\n\t${(props) => props.theme.typography.style9.getStyle()};\r\n\tcolor: ${(props) => props.theme.palette.text.primary};\r\n`;\r\n\r\n/**\r\n * Select\r\n */\r\nexport const styleForSelect = css`\r\n\t${(props) => props.theme.typography.style9.getStyle()};\r\n\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\tfont-family: 'Arial'; // Hack for fixing cropping 'ÅÄÖ...'\r\n\tborder-radius: 8px;\r\n\tpadding: 10px;\r\n\tpadding-bottom: 9px;\r\n\tborder: 1px solid rgba(0, 0, 0, 0.32);\r\n\tbackground-color: ${(props) => props.theme.colors.white};\r\n`;\r\n\r\nexport const Select = styled.select`\r\n\t${styleForSelect};\r\n`;\r\n\r\nexport const ScreenReaderText = styled.span`\r\n\tborder: 0;\r\n\tclip: rect(0 0 0 0);\r\n\theight: 0.1rem;\r\n\tmargin: -0.1rem;\r\n\toverflow: hidden;\r\n\tpadding: 0;\r\n\tposition: absolute;\r\n\twidth: 0.1rem;\r\n`;\r\n\r\nexport const styleForTable = css`\r\n\tborder: 1px solid ${(p) => p.theme.colors.black}15;\r\n\tborder-spacing: 0;\r\n\tborder-radius: 0.25rem;\r\n\tfont-size: 1rem;\r\n\tline-height: 1.5;\r\n\twidth: 100%;\r\n\tmargin: 0 auto;\r\n\r\n\tcaption {\r\n\t\t${styleForH2}\r\n\t\ttext-align: left;\r\n\t\t${mediaQueries.phone} {\r\n\t\t\twidth: 90vw;\r\n\t\t\ttext-align: left;\r\n\t\t\t${styleForH2}\r\n\t\t}\r\n\t}\r\n\r\n\t& tbody tr:last-child {\r\n\t\tth,\r\n\t\ttd {\r\n\t\t\tborder-bottom: 0;\r\n\t\t}\r\n\t}\r\n\r\n\t& thead th {\r\n\t\tborder-bottom: 1px solid ${(p) => p.theme.colors.black}15;\r\n\t}\r\n\r\n\tth,\r\n\ttd {\r\n\t\tpadding: 1rem 1.5rem;\r\n\t\tborder: 0;\r\n\t\tfont-family: Tiempos Text;\r\n\t\tfont-size: 1.125rem;\r\n\t\tborder-bottom: 1px solid ${(p) => p.theme.colors.black}15;\r\n\t\tborder-right: 1px solid ${(p) => p.theme.colors.black}15;\r\n\t\t& p {\r\n\t\t\tpadding: 0;\r\n\t\t\tmargin: 0;\r\n\t\t}\r\n\t}\r\n\tth {\r\n\t\ttext-align: left;\r\n\t}\r\n`;\r\n\r\nexport const Table = styled.table`\r\n\t${styleForTable}\r\n`;\r\n\r\nexport const styleForScrollableTableWrapper = css`\r\n\t${mediaQueries.phone} {\r\n\t\twidth: 100%;\r\n\t\toverflow-y: auto;\r\n\t\tmargin-top: 2.5rem;\r\n\t\tmargin-bottom: 2.5rem;\r\n\t\tposition: relative;\r\n\r\n\t\t> table {\r\n\t\t\tmargin-top: 0;\r\n\t\t\tmargin-bottom: 0;\r\n\t\t\twidth: auto;\r\n\t\t\tmax-width: none;\r\n\t\t}\r\n\r\n\t\t&::-webkit-scrollbar {\r\n\t\t\t-webkit-appearance: none;\r\n\t\t\twidth: ${px2rem(14)};\r\n\t\t\theight: ${px2rem(14)};\r\n\t\t}\r\n\r\n\t\t&::-webkit-scrollbar-thumb {\r\n\t\t\tborder-radius: ${px2rem(8)};\r\n\t\t\tborder: ${px2rem(3)} solid #fff;\r\n\t\t\tbackground-color: rgba(0, 0, 0, 0.3);\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nexport const ScrollableTableWrapper = styled.div`\r\n\t${styleForScrollableTableWrapper}\r\n\r\n\ttable {\r\n\t\t${styleForTable}\r\n\t}\r\n`;\r\n\r\n// prettier-ignore\r\nexport const styleForRichText = css`\r\nh1 {\r\n\t${styleForH1}\r\n}\r\nh2 {\r\n\t${styleForH2}\r\n}\r\nh3 {\r\n\t${styleForH3}\r\n}\r\nh4 {\r\n\t${styleForH4}\r\n}\r\nh5 {\r\n\t${styleForH5}\r\n}\r\nh6 {\r\n\t${styleForH6}\r\n}\r\nbutton {\r\n\t${styleForButton}\r\n}\r\np {\r\n\t${styleForP}\r\n}\r\n\r\nul {\r\n\tlist-style-position: outside;\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n\tpadding-left: ${props => props.theme.spacing.space2 + 0.25}rem;\r\n}\r\n\r\nli > ul {\r\n\tmargin-top: ${props => props.theme.spacing.space3}rem;\r\n}\r\n\r\nli {\r\n\t${styleForP}\r\n}\r\n\r\na {\r\n\t${styleForLink}\r\n}\r\n\r\n\r\ntable {\r\n\t${styleForTable}\r\n\tmargin: 2.5rem 0;\r\n}\r\n\t.table-scrollable {\r\n\t${styleForScrollableTableWrapper}\r\n}\r\n\t.icon {\r\n\tdisplay: inline-block;\r\n\twidth: ${px2rem(12)};\r\n\theight: ${px2rem(12)};\r\n\tmargin-left: 0.5rem;\r\n\tmargin-right: 0.3rem;\r\n\tbackground-repeat: no-repeat;\r\n}\r\n`;\r\n\r\nexport const RichText = styled.div`\r\n\t${styleForRichText};\r\n\r\n\t> div > *:last-child {\r\n\t\tmargin-bottom: 0rem;\r\n\t}\r\n\r\n\t> div > p:last-child,\r\n\t> div > ul > li,\r\n\t> div > ol > li {\r\n\t\tmargin-bottom: ${(props) => props.theme.spacing.space2}rem;\r\n\t}\r\n`;\r\n","/**\r\n * Typography\r\n */\r\n\r\nimport Link from 'components/Boilerplate/Link';\r\nimport React from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport {\r\n\tH1,\r\n\tH2,\r\n\tH3,\r\n\tH4,\r\n\tH5,\r\n\tH6,\r\n\tButton,\r\n\tP,\r\n\tPreamble,\r\n\tSpan,\r\n\tDiv,\r\n\tScreenReaderText,\r\n\tstyleForH1,\r\n\tstyleForH2,\r\n\tstyleForH3,\r\n\tstyleForH4,\r\n\tstyleForH5,\r\n\tstyleForP,\r\n} from './Typography.styles';\r\n\r\nexport type Tags =\r\n\t| 'h1'\r\n\t| 'h2'\r\n\t| 'h3'\r\n\t| 'h4'\r\n\t| 'h5'\r\n\t| 'h6'\r\n\t| 'button'\r\n\t| 'p'\r\n\t| 'preamble'\r\n\t| 'span'\r\n\t| 'div'\r\n\t| 'screenReader';\r\n\r\nexport interface TypographyProps {\r\n\t/** The text to render (if no children are present) */\r\n\ttext?: string;\r\n\r\n\t/** The html-tag/Component that will be outputted */\r\n\tas: Tags;\r\n\r\n\t/** The style that will be used (instead of the tag default style) */\r\n\tstyleAs?: any;\r\n\r\n\t/** Pass optional classnames for the html */\r\n\tclassName?: string;\r\n\r\n\t/** Optional other html props will be spread on the component */\r\n\t[htmlAttributes: string]: any;\r\n\r\n\t/** Optional text color */\r\n\tcolor?: string;\r\n}\r\n\r\nconst tagMapper = {\r\n\th1: H1,\r\n\th2: H2,\r\n\th3: H3,\r\n\th4: H4,\r\n\th5: H5,\r\n\th6: H6,\r\n\tpreamble: Preamble,\r\n\tbutton: Button,\r\n\tp: P,\r\n\ta: Link,\r\n\tspan: Span,\r\n\tdiv: Div,\r\n\tscreenReader: ScreenReaderText,\r\n};\r\n\r\n/** Typography component render texts */\r\nconst Typography: React.FC<TypographyProps> = ({\r\n\tchildren,\r\n\ttext,\r\n\tstyleAs,\r\n\tas,\r\n\tclassName = '',\r\n\tcolor = '',\r\n\t...htmlAttributes\r\n}) => {\r\n\tconst content = children || text;\r\n\tconst Component = styleAs || tagMapper[as];\r\n\tconst ComponentAs: any = as;\r\n\r\n\tif (!content) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tif (styleAs) {\r\n\t\treturn (\r\n\t\t\t<Component\r\n\t\t\t\tas={ComponentAs}\r\n\t\t\t\tclassName={className}\r\n\t\t\t\t{...htmlAttributes}\r\n\t\t\t\tcolor={color}\r\n\t\t\t>\r\n\t\t\t\t{content}\r\n\t\t\t</Component>\r\n\t\t);\r\n\t} else {\r\n\t\treturn (\r\n\t\t\t<Component className={className} {...htmlAttributes} color={color}>\r\n\t\t\t\t{content}\r\n\t\t\t</Component>\r\n\t\t);\r\n\t}\r\n};\r\n\r\nexport default Typography;\r\n\r\ntype HeadingProps = {\r\n\tlevel: number | undefined;\r\n\tstyleLevel?: number | undefined;\r\n\tcolor?: string;\r\n\tzeroBottom?: boolean;\r\n\thtmlAttributes?: any;\r\n\tid?: string;\r\n\tclassName?: any;\r\n};\r\n\r\nexport const Heading: React.FC<HeadingProps> = ({\r\n\tlevel,\r\n\tstyleLevel,\r\n\tcolor,\r\n\tchildren,\r\n\tzeroBottom = false,\r\n\tid,\r\n\thtmlAttributes = {},\r\n\tclassName,\r\n}) => {\r\n\tif (!children) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tconst safeLevel =\r\n\t\tlevel === 0 || level === undefined || level >= headerThemeTagMapper.length\r\n\t\t\t? 6\r\n\t\t\t: level;\r\n\r\n\tconst Component = headerThemeTagMapper[safeLevel - 1];\r\n\r\n\tconst safeStyleLevel =\r\n\t\tstyleLevel === undefined || styleLevel === null ? safeLevel : styleLevel;\r\n\treturn (\r\n\t\t<Component\r\n\t\t\tid={id}\r\n\t\t\tcolor={color}\r\n\t\t\tlevel={level}\r\n\t\t\tstyleLevel={safeStyleLevel}\r\n\t\t\tzeroBottom={zeroBottom}\r\n\t\t\tclassName={className}\r\n\t\t\t{...htmlAttributes}\r\n\t\t>\r\n\t\t\t{children}\r\n\t\t</Component>\r\n\t);\r\n};\r\n\r\nconst getTypographyStyle = (\r\n\tstyleLevel: number | undefined,\r\n\tcolor: string | undefined,\r\n\tzeroBottom: boolean | undefined\r\n) => {\r\n\tconst safeStyleLevel =\r\n\t\tstyleLevel && styleLevel > 0 && styleLevel < 7 ? styleLevel : 1;\r\n\r\n\tif (styleLevel && styleLevel > 6) {\r\n\t\tswitch (styleLevel) {\r\n\t\t\tdefault:\r\n\t\t\tcase 7:\r\n\t\t\t\treturn css`\r\n\t\t\t\t\t${(props) => props.theme.typography.style7.getStyle()};\r\n\t\t\t\t\t${color && `color: ${color};`}\r\n\t\t\t\t\t${zeroBottom && `margin-bottom:0px;`}\r\n\t\t\t\t`;\r\n\t\t\tcase 8:\r\n\t\t\t\treturn css`\r\n\t\t\t\t\t${(props) => props.theme.typography.style8.getStyle()};\r\n\t\t\t\t\t${color && `color: ${color};`}\r\n\t\t\t\t\t${zeroBottom && `margin-bottom:0px;`}\r\n\t\t\t\t`;\r\n\t\t\tcase 9:\r\n\t\t\t\treturn css`\r\n\t\t\t\t\t${(props) => props.theme.typography.style9.getStyle()};\r\n\t\t\t\t\t${color && `color: ${color};`}\r\n\t\t\t\t\t${zeroBottom && `margin-bottom:0px;`}\r\n\t\t\t\t`;\r\n\t\t\tcase 10:\r\n\t\t\t\treturn css`\r\n\t\t\t\t\t${(props) => props.theme.typography.style10.getStyle()};\r\n\t\t\t\t\t${color && `color: ${color};`}\r\n\t\t\t\t\t${zeroBottom && `margin-bottom:0px;`}\r\n\t\t\t\t`;\r\n\t\t\tcase 11:\r\n\t\t\t\treturn css`\r\n\t\t\t\t\t${(props) => props.theme.typography.style11.getStyle()};\r\n\t\t\t\t\t${color && `color: ${color};`}\r\n\t\t\t\t\t${zeroBottom && `margin-bottom:0px;`}\r\n\t\t\t\t`;\r\n\t\t\tcase 12:\r\n\t\t\t\treturn css`\r\n\t\t\t\t\t${(props) => props.theme.typography.style12.getStyle()};\r\n\t\t\t\t\t${color && `color: ${color};`}\r\n\t\t\t\t\t${zeroBottom && `margin-bottom:0px;`}\r\n\t\t\t\t`;\r\n\t\t}\r\n\t}\r\n\r\n\treturn css`\r\n\t\t${headerStyleMapper[safeStyleLevel - 1]};\r\n\t\t${color && `color: ${color};`}\r\n\t\t${zeroBottom && `margin-bottom:0px;`}\r\n\t`;\r\n};\r\n\r\n/**\r\n * Use when invalid heading level 0 or > 6\r\n */\r\n\r\nconst HeaderStyle1 = styled.h1<HeadingProps>`\r\n\t${({ styleLevel, color, zeroBottom }) =>\r\n\t\tgetTypographyStyle(styleLevel, color, zeroBottom)};\r\n`;\r\nconst HeaderStyle2 = styled.h2<HeadingProps>`\r\n\t${({ styleLevel, color, zeroBottom }) =>\r\n\t\tgetTypographyStyle(styleLevel, color, zeroBottom)};\r\n`;\r\nconst HeaderStyle3 = styled.h3<HeadingProps>`\r\n\t${({ styleLevel, color, zeroBottom }) =>\r\n\t\tgetTypographyStyle(styleLevel, color, zeroBottom)};\r\n`;\r\nconst HeaderStyle4 = styled.h4<HeadingProps>`\r\n\t${({ styleLevel, color, zeroBottom }) =>\r\n\t\tgetTypographyStyle(styleLevel, color, zeroBottom)};\r\n`;\r\nconst HeaderStyle5 = styled.h5<HeadingProps>`\r\n\t${({ styleLevel, color, zeroBottom }) =>\r\n\t\tgetTypographyStyle(styleLevel, color, zeroBottom)};\r\n`;\r\nconst HeaderStyleAsP = styled.p<HeadingProps>`\r\n\t${({ styleLevel, color, zeroBottom }) =>\r\n\t\tgetTypographyStyle(styleLevel, color, zeroBottom)};\r\n`;\r\n\r\nconst headerThemeTagMapper = [\r\n\tHeaderStyle1,\r\n\tHeaderStyle2,\r\n\tHeaderStyle3,\r\n\tHeaderStyle4,\r\n\tHeaderStyle5,\r\n\tHeaderStyleAsP,\r\n];\r\n\r\nconst headerStyleMapper = [\r\n\tstyleForH1,\r\n\tstyleForH2,\r\n\tstyleForH3,\r\n\tstyleForH4,\r\n\tstyleForH5,\r\n\tstyleForP,\r\n];\r\n","import Typography, { TypographyProps } from './Typography';\r\nexport default Typography;\r\nexport type { TypographyProps };\r\nexport * from './Typography.styles';\r\n","export default __webpack_public_path__ + \"static/media/GT-Walsheim-Regular.e7d96dc5.woff\";","export default __webpack_public_path__ + \"static/media/GT-Walsheim-Regular.c4f8cd15.woff2\";","export default __webpack_public_path__ + \"static/media/GT-Walsheim-Medium.b2d48248.woff\";","export default __webpack_public_path__ + \"static/media/GT-Walsheim-Medium.9ff6d23b.woff2\";","export default __webpack_public_path__ + \"static/media/GT-Walsheim-Bold.e9a3833e.woff\";","export default __webpack_public_path__ + \"static/media/GT-Walsheim-Bold.1bcdcd82.woff2\";","export default __webpack_public_path__ + \"static/media/NotoSans-Regular.09ae578f.woff\";","export default __webpack_public_path__ + \"static/media/NotoSans-Regular.d1821692.woff2\";","export default __webpack_public_path__ + \"static/media/NotoSans-Bold.cc72672b.woff\";","export default __webpack_public_path__ + \"static/media/NotoSans-Bold.cb3e3371.woff2\";","export default __webpack_public_path__ + \"static/media/LibreFranklin-Light.37ef8868.ttf\";","export default __webpack_public_path__ + \"static/media/PlayfairDisplay-Bold.c5eee0d4.ttf\";","export default __webpack_public_path__ + \"static/media/Oswald-Light.8716983b.ttf\";","export default __webpack_public_path__ + \"static/media/Oswald-SemiBold.b4a2943e.ttf\";","import { createGlobalStyle } from 'styled-components';\r\nimport {\r\n\tstyleForInput,\r\n\tstyleForLabel,\r\n\tstyleForP,\r\n\tstyleForSelect,\r\n} from 'components/Typography';\r\nimport { mediaQueries } from 'theme';\r\nimport { accessibilityFocus } from './styles';\r\n\r\n// Microsite Fonts for Delegationen För Circulär Ekonomi\r\nimport gtWalsheimRegularWoff from 'fonts/GT-Walsheim-Regular.woff';\r\nimport gtWalsheimRegularWoff2 from 'fonts/GT-Walsheim-Regular.woff2';\r\nimport gtWalsheimMediumWoff from 'fonts/GT-Walsheim-Medium.woff';\r\nimport gtWalsheimMediumWoff2 from 'fonts/GT-Walsheim-Medium.woff2';\r\nimport gtWalsheimBoldWoff from 'fonts/GT-Walsheim-Bold.woff';\r\nimport gtWalsheimBoldWoff2 from 'fonts/GT-Walsheim-Bold.woff2';\r\n\r\nimport notoSansRegularWoff from 'fonts/NotoSans-Regular.woff';\r\nimport notoSansRegularWoff2 from 'fonts/NotoSans-Regular.woff2';\r\nimport notoSansBoldWoff from 'fonts/NotoSans-Bold.woff';\r\nimport notoSansBoldWoff2 from 'fonts/NotoSans-Bold.woff2';\r\n\r\n// Microsite Fonts for Fjallsakerhetsradet.se\r\nimport libreFranklinLight from 'fonts/LibreFranklin-Light.ttf';\r\nimport playfairDisplay from 'fonts/PlayfairDisplay-Bold.ttf';\r\nimport oswaldLight from 'fonts/Oswald-Light.ttf';\r\nimport oswaldSemiBold from 'fonts/Oswald-SemiBold.ttf';\r\n\r\nexport type modalWindow = {\r\n\tisOpen?: boolean;\r\n};\r\n\r\nexport const MicrositeGlobalStyle = createGlobalStyle<any>`\t\r\n\r\n\t@font-face {\r\n\t\tfont-family: 'Noto Sans';\r\n\t\tsrc: url(${notoSansRegularWoff2}) format('woff2'),\r\n\t\t\turl(${notoSansRegularWoff}) format('woff');\r\n\t\tfont-weight: 400;\r\n\t\tfont-style: normal;\r\n\t}\r\n\t\r\n\t@font-face {\r\n\t\tfont-family: 'Noto Sans';\r\n\t\tsrc: url(${notoSansBoldWoff2}) format('woff2'),\r\n\t\t\turl(${notoSansBoldWoff}) format('woff');\r\n\t\tfont-weight: 700;\r\n\t\tfont-style: normal;\r\n\t}\r\n\r\n\t@font-face {\r\n\t\tfont-family: 'GT Walsheim';\r\n\t\tsrc: url(${gtWalsheimRegularWoff2}) format('woff2'),\r\n\t\t\turl(${gtWalsheimRegularWoff}) format('woff');\r\n\t\tfont-weight: 400;\r\n\t\tfont-style: normal;\r\n\t}\r\n\r\n\t@font-face {\r\n\t\tfont-family: 'GT Walsheim';\r\n\t\tsrc: url(${gtWalsheimMediumWoff2}) format('woff2'),\r\n\t\t\turl(${gtWalsheimMediumWoff}) format('woff');\r\n\t\tfont-weight: 500;\r\n\t\tfont-style: normal;\r\n\t}\r\n\r\n @font-face {\r\n\t\tfont-family: 'GT Walsheim';\r\n\t\tsrc: url(${gtWalsheimBoldWoff2}) format('woff2'),\r\n\t\t\turl(${gtWalsheimBoldWoff}) format('woff');\r\n\t\tfont-weight: 700;\r\n\t\tfont-style: normal;\r\n\t}\r\n\r\n\t@font-face {\r\n\t\tfont-family: 'Libre Franklin';\r\n\t\tsrc: url(${libreFranklinLight}) format('truetype');\r\n\t\tfont-weight: 300;\r\n\t\tfont-style: normal;\r\n\t}\r\n\r\n\t@font-face {\r\n\t\tfont-family: 'Playfair Display';\r\n\t\tsrc: url(${playfairDisplay}) format('truetype');\r\n\t\tfont-weight: 700;\r\n\t\tfont-style: normal;\r\n\t}\r\n\t\r\n\t@font-face {\r\n\t\tfont-family: 'Oswald';\r\n\t\tsrc: url(${oswaldSemiBold}) format('truetype');\r\n\t\tfont-weight: 600;\r\n\t\tfont-style: normal;\r\n\t}\r\n\t\r\n\t@font-face {\r\n\t\tfont-family: 'Oswald-Light';\r\n\t\tsrc: url(${oswaldLight}) ) format('truetype');\r\n\t\tfont-weight: 100;\r\n\t\tfont-style: normal;\r\n\t}\r\n\r\n\t*,\r\n\t*:before,\r\n\t*:after {\r\n\t\tbox-sizing: inherit;\r\n\t}\r\n\thtml {\r\n\t\tbox-sizing: border-box;\r\n\t\tmargin: 0;\r\n\t\tpadding: 0;\r\n\t\twidth: 100vw;\r\n\t\toverflow-x: hidden;\r\n\r\n\t\t/* Font smoothing */\r\n\t\ttext-rendering: optimizeLegibility;\r\n\t\t-moz-osx-font-smoothing: grayscale;\r\n\t\tfont-smooth: antialiased;\r\n\t\t-webkit-font-smoothing: antialiased;\r\n\t\ttext-shadow: rgba(0, 0, 0, 0.01) 0 0 1px;\r\n\t}\r\n\tbody {\r\n\t\tmargin: 0;\r\n\t\tpadding: 0;\r\n\t\tbackground-color: ${(props) => props.theme.colors.commonBgColor}; \r\n\t\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\r\n\t\t${(p) => p.isOpen && `top: -${window.scrollY}px`};\r\n\t\t${(p) => p.isOpen && 'position: fixed; right:0;left:0; overflow-y: hidden'};\r\n\r\n\t\t& label,& input, & textarea, & a, & select, & button, & li {\r\n\t\t\toutline-color:transparent;\r\n\t\t}\r\n\r\n\t\t& input:focus, & textarea:focus, & a:focus, & select:focus, & button:focus {\r\n\t\t\t${accessibilityFocus()};\r\n\t\t}\r\n\r\n\t}\r\n\th1,h2,h3,h4,h5,h6,a,p {\r\n\t\tword-break: normal;\r\n\t\toverflow-wrap: break-word;\r\n\t\thyphens: manual;\r\n\t}\r\n\r\n\timg {\r\n\t\tborder: 0 none;\r\n\t\theight: auto;\r\n\t\tmax-width: 100%;\r\n\t\tvertical-align: middle;\r\n\t}\r\n\t.usability--tab-focus {\r\n\t\toutline: 0.2rem solid ${(props) => props.theme.colors.primary};\r\n\t}\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t.microsite-skip-to-content-link {\r\n\t\t${(props) => props.theme.typography.style8.getStyle()};\r\n\t\tcolor: ${(props) => props.theme.palette.text.secondary};\r\n\t\tpadding: 8px;\r\n\t\tposition: absolute;\r\n\t\tbackground-color: ${(props) => props.theme.colors.primary};\r\n\t\tleft: 0%;\r\n\t\ttransform: translateY(-100%);\r\n\t\ttransition: transform 200ms;\r\n\t\tclip: rect(0 0 0 0);\r\n\t\toutline: none;\r\n\t}\t\r\n\t.microsite-skip-to-content-link:focus {\r\n \t\ttransform: translateY(0%);\r\n\t\t width: 100%;\r\n \ttext-align: center;\t\t \r\n\t z-index: 1;\t\t \r\n\t\tclip: auto;\r\n\t\toutline: 2px solid;\r\n \toutline-offset: 0px;\r\n \toutline-color: white;\r\n\t}\t\t\t\t\t\t\r\n\r\n\tform {\r\n\r\n\t\theader {\r\n\t\t\tmargin-bottom: ${(props) => props.theme.spacing.space3}rem;\r\n\t\t}\r\n\r\n\t\tbutton {\r\n\t\t\t${(props) => props.theme.typography.style11.getStyle()};\r\n\t\t\tborder-radius: 24px;\r\n\t\t\tborder: 1px solid transparent;\r\n\t\t\tpadding:0;\r\n\r\n\t\t\tpadding-top: 16px;\r\n\t\t\tpadding-bottom: 11px;\r\n\r\n\t\t\tpadding-left: 20px;\r\n\t\t\tpadding-right: 20px;\r\n\t\t\tbackground-color: ${(props) => props.theme.colors.white};\r\n\t\t\tcolor: ${(props) => props.theme.palette.primary};\r\n\r\n\t\t\t&:hover {\r\n\t\t\t\tbackground-color: ${(props) => props.theme.colors.primary};\r\n\t\t\t}\r\n\t\t\tmargin-right: ${(props) => props.theme.spacing.space2}rem;\r\n\t\t}\r\n\r\n\t\tinput, textarea {\r\n\t\t\t${styleForInput}\t\t\t\r\n\t\t\tborder: 1px solid ${(props) => props.theme.colors.commonAccentHue};\r\n\t\t}\r\n\r\n\t\tinput[type=\"file\"] {\r\n\t\t\t${styleForInput}\r\n\t\t\tborder: none;\r\n\t\t\tpadding: 0;\r\n\t\t\twidth: 100%;\r\n\t\t}\t\t\r\n\r\n\t\tfieldset {\r\n\t\t\tborder: none;\r\n\t \tpadding: 0;\t\t\r\n\t\t}\r\n\r\n\t\tabbr[title], acronym[title] {\r\n\t\t\ttext-decoration: unset;\r\n\t\t}\r\n\r\n\t\tlabel, legend { \r\n\t\t\tdisplay: block;\r\n\t\t\ttext-align: left;\r\n\t\t\t${(props) => props.theme.typography.style11.getStyle()};\r\n\t\t\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\t\t\t\r\n\t\t\tmargin-right: ${(props) => props.theme.spacing.space1}rem;\r\n\t\t\tmargin-bottom: ${(props) => props.theme.spacing.space1}rem;\r\n\t\t}\r\n\r\n\t\tselect {\r\n\t\t\t${styleForSelect}\r\n\t\t\tmargin-right: ${(props) => props.theme.spacing.space2}rem;\r\n\t\t}\r\n\r\n\t\t.usability--tab-focus {\r\n\r\n\t\t}\r\n\r\n\t\t.radio {\r\n\t\t\r\n\t\t\tposition: relative;\r\n\t\t\tdisplay: flex;\r\n\r\n\t\t\t&:focus-within {\r\n\t\t\t\t${accessibilityFocus()};\r\n\t\t\t}\r\n\r\n\t\t\tlabel {\r\n\t\t\t\t${(props) => props.theme.typography.style6.getStyle()};\r\n \t\t\tdisplay: block;\r\n \t\t\tpadding: 0px 0 0px 32px;\r\n\t\t\t\tmargin:0px 0px 5px 0px;\r\n\t\r\n\t\t\t}\r\n\t\r\n\r\n\r\n\t\t\t/*style and hide original checkbox*/\r\n\t\t\tinput {\r\n\t\t\t\theight: 10px;\r\n\t\t\t\tleft: 0;\r\n\t\t\t\topacity: 0;\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\ttop: 0;\r\n\t\t\t\twidth: 10px;\r\n\t\t\t}\r\n\r\n\t\t\t/*position new box*/\r\n\t\t\tinput + label::before {\r\n\t\t\t\tborder: 2px solid ${(props) => props.theme.colors.primary};\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\theight: 24px;\r\n\t\t\t\tleft: 0;\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\ttop: 0;\r\n\t\t\t\twidth: 24px;\r\n\t\t\t\tborder-radius: 50%;\r\n\t\t\t}\r\n\r\n\t\t\t/*radio pseudo element styles*/\r\n\t\t\tinput + label::after {\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\topacity: 0;\r\n\t\t\t\tborder: 5px solid ${(props) => props.theme.colors.primary};\r\n\t\t\t\tborder-radius: 50%;\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tleft: 7px;\r\n\t\t\t\ttop: 7px;\r\n\t\t\t\ttransition: opacity 0.2s ease-in-out;\r\n\t\t\t}\r\n\r\n\t\t\t/*reveal check for 'on' state*/\r\n\t\t\tinput:checked + label::after {\r\n\t\t\t\topacity: 1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.block {\r\n\t\t\tdisplay:block;\r\n\t\t}\r\n\r\n\t\t.text-description {\r\n\t\t\t${(props) => props.theme.typography.style9.getStyle()};\r\n\t\t\tmargin-bottom:${(props) => props.theme.spacing.space1}rem;\r\n\r\n\t\t}\r\n\t\t\r\n\t\t// Epi forms\r\n\t\t.text-red-600 {\r\n\t\t\t${(props) => props.theme.typography.style9.getStyle()};\r\n\t\t\tcolor: ${(props) => props.theme.palette.text.error};\r\n\t\t\tmargin-top:${(props) => props.theme.spacing.space1}rem;\r\n\t\t\t${mediaQueries.phone} {\r\n\t\t\t\tcolor: ${(props) => props.theme.palette.text.error};\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\t.warning-symbol::before {\r\n\t\t\tcontent:\"\\u2022\\u00a0\"\r\n\t\t}\r\n\r\n\t\t.border-red-400 {\r\n\t\t\tpadding: ${(props) => props.theme.spacing.space3}rem;\r\n\t\t\tborder: 2px solid ${(props) => props.theme.colors.accentRed};\r\n\t\t\tborder-left: 8px solid ${(props) => props.theme.colors.accentRed};\r\n\t\t\tbackground-color: ${(props) => props.theme.colors.white};\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tbox-shadow: 0 12px 18px 0 rgba(0, 0, 0, 0.03);\r\n\t\t}\r\n\r\n\t\t.border-green-400 {\r\n\t\t\tpadding: ${(props) => props.theme.spacing.space3}rem;\r\n\t\t\tborder: 2px solid ${(props) => props.theme.colors.primary};\r\n\t\t\tborder-left: 8px solid ${(props) => props.theme.colors.primary};\r\n\t\t\tbackground-color: ${(props) => props.theme.colors.white};\r\n\t\t\tdisplay: block;\r\n\t\t\tbox-shadow: 0 12px 18px 0 rgba(0, 0, 0, 0.03);\r\n\t\t}\r\n\r\n\t\t.border-green-400 > div {\r\n\t\t\t${styleForP}\r\n\t\t}\r\n\r\n\t\t// Epi forms error ul list\r\n\t\tul {\r\n\t\t\tlist-style-position: outside;\r\n\t\t\tmargin: 0;\r\n\t\t\tpadding: 0;\r\n\t\t\tpadding-left: ${(props) => props.theme.spacing.space2 + 0.25}rem;\r\n\t\t}\r\n\r\n\t\tli {\r\n\t\t\t${styleForP}\r\n\t\t\tmargin-bottom: 0;\r\n\t\t}\r\n\r\n\r\n\t\tli > span {\r\n\t\t\tcolor: ${(props) => props.theme.palette.text.error};\r\n\t\t\t${mediaQueries.phone} {\r\n\t\t\t\tcolor: ${(props) => props.theme.palette.text.error};\r\n\t\t\t}\r\n\r\n\t\t}\r\n}\r\n\r\n\r\n`;\r\n","/**\r\n * Breadcrumbs - styles\r\n */\r\n\r\nimport Link from 'components/Boilerplate/Link';\r\nimport styled, { css } from 'styled-components';\r\nimport { MediaQueryProps } from './Breadcrumbs';\r\n\r\nexport const BreadcrumbStyled = styled.ol`\r\n\tdisplay: flex;\r\n\tflex-wrap: wrap;\r\n\tpadding: 0px;\r\n\tpadding-top: 12px;\r\n\tpadding-bottom: 12px;\r\n\tmargin: 0px;\r\n\tlist-style: none;\r\n`;\r\n\r\ntype ItemCustomProps = {\r\n\t$active: boolean;\r\n};\r\n\r\nconst addAfterSymbol = () => {\r\n\treturn css`\r\n\t\t&:first-child::before {\r\n\t\t\t${getSymbol()};\r\n\t\t\ttransform: rotate(225deg);\r\n\t\t\tmargin-left: 0;\r\n\t\t\tmargin-right: 8px;\r\n\t\t}\r\n\t`;\r\n};\r\nconst addBeforeSymbol = () => {\r\n\treturn css`\r\n\t\t&:not(:first-child)::before {\r\n\t\t\t${getSymbol()}\r\n\t\t}\r\n\t`;\r\n};\r\n\r\nconst getSymbol = () => {\r\n\treturn css`\r\n\t\tdisplay: inline-block;\r\n\t\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\t\tcontent: '';\r\n\t\twidth: 0.55em;\r\n\t\theight: 0.55em;\r\n\t\tborder-right: 0.15em solid ${(props) => props.theme.palette.text.primary};\r\n\t\tborder-top: 0.15em solid ${(props) => props.theme.palette.text.primary};\r\n\t\ttransform: rotate(45deg);\r\n\t\tmargin-left: 0.8em;\r\n\t\tmargin-right: 1em;\r\n\t\tmargin-bottom: 0.1em;\r\n\t`;\r\n};\r\n\r\nexport const BreadcrumbItemWarpper = styled.li<MediaQueryProps>`\r\n\t${(p) => p.isPhone && addAfterSymbol()};\r\n\t${(p) => !p.isPhone && addBeforeSymbol()};\r\n`;\r\n\r\nexport const BreadcrumbLink = styled(Link)<\r\n\tItemCustomProps & React.HTMLProps<HTMLInputElement>\r\n>`\r\n\tfont-size: 18px;\r\n\t${(props) =>\r\n\t\tprops.theme.isMicrositeActive ? props.theme.typography.style8 : null};\r\n\r\n\ttext-decoration: none;\r\n\r\n\t& + &:hover::before {\r\n\t\ttext-decoration: none;\r\n\t}\r\n\r\n\t${({ $active }) => $active && `aria-current:page;`}\r\n\r\n\tcolor: ${({ $active, theme }) =>\r\n\t\t$active\r\n\t\t\t? theme.isMicrositeActive\r\n\t\t\t\t? theme.colors.commonAccentHue\r\n\t\t\t\t: theme.palette.text.primary\r\n\t\t\t: theme.colors.secondaryBlue};\r\n\r\n\tpointer-events: ${({ $active }) => ($active ? 'none' : 'auto')};\r\n\tcursor: ${({ $active }) => ($active ? 'default' : 'pointer')};\r\n\r\n\ttext-decoration: none;\r\n`;\r\n","/**\r\n * Helper utils\r\n */\r\n\r\nimport { dateFormat } from 'highcharts';\r\nimport { Category } from 'pages/microsite/MicrositeArticlePage/MicrositeArticlePage.model';\r\nimport { Rotate } from 'types/enums';\r\nimport { ModelLocalization } from 'types/epi';\r\n\r\n//#region Date and Time\r\n\r\nexport const convertDateToLocalFormat = (dateIsoStr: string): string => {\r\n\tconst date = new Date(dateIsoStr);\r\n\treturn date.toLocaleDateString();\r\n};\r\n\r\nconst enTxt = 'Last reviewed'; // Granskad\r\nexport const convertDateWithMonthWrittenOut = (\r\n\tdateIsoStr: string | null | undefined,\r\n\tlastReviewedText?: string | null | undefined\r\n): string | null => {\r\n\tif (dateIsoStr) {\r\n\t\tlet validDate = '';\r\n\t\ttry {\r\n\t\t\tconst date = new Date(dateIsoStr);\r\n\t\t\tif (lastReviewedText && lastReviewedText === enTxt) {\r\n\t\t\t\tconst enDate = date.toLocaleDateString('en-GB', {\r\n\t\t\t\t\tday: 'numeric',\r\n\t\t\t\t\tmonth: 'long',\r\n\t\t\t\t\tyear: 'numeric',\r\n\t\t\t\t});\r\n\r\n\t\t\t\tconst monthIndex = enDate.indexOf(' ') + 1;\r\n\t\t\t\tconst capitalizedMonth =\r\n\t\t\t\t\tenDate.substring(monthIndex, monthIndex + 1).toUpperCase() +\r\n\t\t\t\t\tenDate.substring(monthIndex + 1);\r\n\r\n\t\t\t\tconst formattedDate =\r\n\t\t\t\t\tenDate.substring(0, monthIndex) +\r\n\t\t\t\t\tcapitalizedMonth +\r\n\t\t\t\t\tenDate.substring(monthIndex + capitalizedMonth.length);\r\n\r\n\t\t\t\tvalidDate = formattedDate;\r\n\t\t\t} else {\r\n\t\t\t\t// default time\r\n\t\t\t\tconst swDate = date.toLocaleString('sv-SE', {\r\n\t\t\t\t\tday: 'numeric',\r\n\t\t\t\t\tmonth: 'long',\r\n\t\t\t\t\tyear: 'numeric',\r\n\t\t\t\t});\r\n\t\t\t\tvalidDate = swDate;\r\n\t\t\t}\r\n\r\n\t\t\treturn validDate;\r\n\t\t} catch (err) {\r\n\t\t\tconsole.error(err);\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\r\n\treturn null;\r\n};\r\n\r\nfunction isValidDate(d: any) {\r\n\treturn d instanceof Date && !isNaN(d as any);\r\n}\r\n\r\nexport const convertDateWithShortMonthWrittenOut = (\r\n\tdateIsoStr: string | null | undefined\r\n): string | null => {\r\n\tif (dateIsoStr) {\r\n\t\ttry {\r\n\t\t\tconst date = new Date(dateIsoStr);\r\n\t\t\tif (!isValidDate(date)) return null;\r\n\t\t\treturn date.toLocaleDateString('default', {\r\n\t\t\t\tday: 'numeric',\r\n\t\t\t\tmonth: 'short',\r\n\t\t\t\tyear: 'numeric',\r\n\t\t\t});\r\n\t\t} catch (err) {\r\n\t\t\tconsole.error(err);\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\r\n\treturn null;\r\n};\r\n\r\nexport const getTimeFromDate = (\r\n\tdateIsoStr: string | null | undefined\r\n): string | null => {\r\n\tif (dateIsoStr) {\r\n\t\ttry {\r\n\t\t\treturn new Date(dateIsoStr).toLocaleTimeString('default', {\r\n\t\t\t\ttimeStyle: 'short',\r\n\t\t\t});\r\n\t\t} catch (err) {\r\n\t\t\tconsole.error(err);\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\r\n\treturn null;\r\n};\r\n\r\nexport enum FormatType {\r\n\tshort = 'short',\r\n\tlong = 'long',\r\n\tshort_prettified = 'short_prettified',\r\n\tlong_prettified = 'long_prettified',\r\n}\r\n\r\nexport const getMonthNames = (format?: FormatType): string[] => {\r\n\treturn [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map(function (month) {\r\n\t\treturn getMonthName(new Date(2000, month), format);\r\n\t});\r\n};\r\n\r\nexport const getMonthName = (date: Date, format?: FormatType) => {\r\n\t// TODO: Use language settings in model\r\n\r\n\tconst formatStr =\r\n\t\tformat === FormatType.short_prettified || format === FormatType.short\r\n\t\t\t? 'short'\r\n\t\t\t: 'long';\r\n\tconst name = date.toLocaleString('default', { month: formatStr });\r\n\r\n\tif (\r\n\t\tformat === FormatType.short_prettified ||\r\n\t\tformat === FormatType.long_prettified\r\n\t) {\r\n\t\treturn capitalizeFirstLetter(name);\r\n\t}\r\n\treturn name;\r\n};\r\n\r\nexport const getWeekDayNames = (format?: FormatType): string[] => {\r\n\treturn [0, 1, 2, 3, 4, 5, 6].map(function (day) {\r\n\t\treturn getWeekdayName(new Date(2000, 1, day), format);\r\n\t});\r\n};\r\n\r\nexport const getWeekdayName = (date: Date, format?: FormatType) => {\r\n\t// TODO: Use language settings in model\r\n\tconst formatStr =\r\n\t\tformat === FormatType.short_prettified || format === FormatType.short\r\n\t\t\t? 'short'\r\n\t\t\t: 'long';\r\n\r\n\tconst name = date.toLocaleString('default', { weekday: formatStr });\r\n\tif (\r\n\t\tformat === FormatType.short_prettified ||\r\n\t\tformat === FormatType.long_prettified\r\n\t) {\r\n\t\treturn capitalizeFirstLetter(name);\r\n\t}\r\n\treturn name;\r\n};\r\n\r\nexport const getShortTimeName = (date: Date) => {\r\n\t// TODO: Use language settings in model\r\n\t// Example: returns \"11:26\"\r\n\treturn date.toLocaleString('default', { timeStyle: 'short' });\r\n};\r\n\r\nexport const getShortWeekdayName = (date: Date) => {\r\n\t// TODO: Use language settings in model\r\n\r\n\treturn date.toLocaleString('default', { weekday: 'long' });\r\n};\r\n\r\nexport const getLongWeekdayName = (date: Date) => {\r\n\t// TODO: Use language settings in model\r\n\r\n\treturn date.toLocaleString('default', { weekday: 'long' });\r\n};\r\n\r\nexport const getShortMonthName = (date: Date) => {\r\n\t// TODO: Use language settings in model\r\n\r\n\treturn date.toLocaleString('default', { month: 'short' });\r\n};\r\n\r\nexport const getLongMonthName = (date: Date) => {\r\n\t// TODO: Use language settings in model\r\n\treturn date.toLocaleString('default', { month: 'long' });\r\n};\r\n\r\n//#endregion\r\n\r\nexport const capitalizeFirstLetter = (text: string) => {\r\n\treturn text ? text.charAt(0).toUpperCase() + text.slice(1) : text;\r\n};\r\n\r\nexport const buildQueryString = (params: any) => {\r\n\tvar queryString = Object.keys(params)\r\n\t\t.filter((key: string) => {\r\n\t\t\tconst value = (params as any)[key];\r\n\t\t\treturn value && value !== undefined && value !== null;\r\n\t\t})\r\n\t\t.map((key: string) => {\r\n\t\t\treturn (\r\n\t\t\t\tencodeURIComponent(key) + '=' + encodeURIComponent((params as any)[key])\r\n\t\t\t);\r\n\t\t})\r\n\t\t.join('&');\r\n\r\n\treturn queryString;\r\n};\r\n\r\nexport const formatText = (format: string, total: number, filtered: number) => {\r\n\tif (format) {\r\n\t\tlet temp = format;\r\n\t\ttemp = temp.split('{0}').join(filtered.toString());\r\n\t\ttemp = temp.split('{1}').join(total.toString());\r\n\t\treturn temp;\r\n\t}\r\n\treturn '';\r\n};\r\n\r\nexport const translate = (\r\n\tid: string,\r\n\tfallback: string,\r\n\tlocalization: ModelLocalization | undefined\r\n) => {\r\n\tif (localization && id in localization.translations) {\r\n\t\treturn localization.translations[id];\r\n\t}\r\n\r\n\treturn fallback;\r\n};\r\n\r\nexport const getRotationDegrees = (trend: number) => {\r\n\tif (trend === -1) {\r\n\t\treturn Rotate.Down;\r\n\t}\r\n\r\n\tif (trend === 1) {\r\n\t\treturn Rotate.Up;\r\n\t}\r\n\r\n\tif (trend === 2) {\r\n\t\treturn Rotate.Right;\r\n\t}\r\n\r\n\tif (trend === 3) {\r\n\t\treturn Rotate.Left;\r\n\t}\r\n};\r\n\r\nexport const formatCategories = (categories: Category[] | undefined) => {\r\n\t// Map the array to cat.name\r\n\tconst categoryNames = categories?.map((cat) => cat.name);\r\n\r\n\t// Use join to concatenate with commas\r\n\tconst result = categoryNames?.join(', ');\r\n\r\n\treturn result;\r\n};\r\n\r\nexport const debounce = (func: (...args: any[]) => void, delay: number) => {\r\n\tlet timeoutId: ReturnType<typeof setTimeout>;\r\n\r\n\treturn (...args: any[]) => {\r\n\t\tclearTimeout(timeoutId);\r\n\t\ttimeoutId = setTimeout(() => {\r\n\t\t\tfunc(...args);\r\n\t\t}, delay);\r\n\t};\r\n};\r\n","/**\r\n * Highcharts\r\n */\r\nimport React, { useEffect, useRef, useState } from 'react';\r\n\r\nimport HighchartsModule from 'highcharts';\r\nimport HighchartsReact from 'highcharts-react-official';\r\nimport { Options } from 'highcharts';\r\nimport exporting from 'highcharts/modules/exporting';\r\nimport exportData from 'highcharts/modules/export-data';\r\nimport dataModule from 'highcharts/modules/data';\r\nimport accessibility from 'highcharts/modules/accessibility';\r\n\r\nimport {\r\n\tHighchartAndTable,\r\n\tHighchartsLegendsActions,\r\n\tHighchartsLegendsStyle,\r\n\tHighchartsLegendsSymbols,\r\n\tHighchartsStyle,\r\n} from './Highcharts.styles';\r\n\r\nimport { EpiEvent } from 'types/epi';\r\nimport Button from 'components/Button';\r\nimport Tab, { TabProps } from 'components/Tab/Tab';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\n\r\nimport Checkbox from 'components/Checkbox';\r\nimport { Cell, Grid } from 'components/Boilerplate/Grid';\r\nimport DropdownMenu, {\r\n\tDropdownMenuItem,\r\n} from 'components/Banners/DropdownMenu/DropdownMenu';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\n\r\nexport interface HighchartsProps {\r\n\tdata?: Options;\r\n\tshowLegends?: boolean;\r\n\tshowAsChartLabel?: string;\r\n\tshowAsTableLabel?: string;\r\n\tdownloadLabel?: string;\r\n\texportAsLabel?: string;\r\n\tlegendHeading?: string;\r\n\tlegendSelectAllLabel?: string;\r\n\tlegendSelectNoneLabel?: string;\r\n\tcategoryLabel?: string;\r\n\tuseShortDate: boolean;\r\n\tstatisticsClassificationsLink?: LinkType;\r\n\tclassificationList: string[];\r\n\tepi?: EpiEvent; // deprecated\r\n\tid?: string;\r\n}\r\n\r\nexport type ChartVisibleProps = {\r\n\tshowChartMode: boolean;\r\n};\r\n\r\nenum MimeTypes {\r\n\tpdf = 'application/pdf',\r\n\tpng = 'image/png',\r\n\tjpg = 'image/jpeg',\r\n\tsvg = 'image/svg+xml',\r\n\tcsv = 'excel',\r\n}\r\n\r\nexport const Highcharts: React.FC<HighchartsProps> = ({\r\n\tdata,\r\n\tshowAsChartLabel = 'Visa som graf',\r\n\tshowAsTableLabel = 'Visa som tabell',\r\n\tdownloadLabel = 'Ladda ner',\r\n\texportAsLabel = 'Spara som',\r\n\tlegendHeading = 'Filtrering',\r\n\tlegendSelectAllLabel = 'Tänd alla',\r\n\tlegendSelectNoneLabel = 'Släck alla',\r\n\tcategoryLabel = null,\r\n\tshowLegends = true,\r\n\tuseShortDate,\r\n\tstatisticsClassificationsLink,\r\n\tclassificationList,\r\n\tepi,\r\n\tid = 'hc',\r\n}) => {\r\n\tconst chartId = `${id}-chart`;\r\n\tconst tableId = `${id}-table`;\r\n\r\n\tconst [selectedTabPage, setSelectedTabPage] = useState<string>(chartId);\r\n\tconst [chartOptions, setChartOptions] = useState<Highcharts.Options>();\r\n\tconst [showFilterLegends, setShowFilterLegends] = useState<boolean>(true);\r\n\tconst [legends, setLegends] = useState<HighchartsLegendItem[]>([]);\r\n\tconst [classificationLegends, setClassificationLegends] = useState<\r\n\t\tHighchartsLegendItem[]\r\n\t>(\r\n\t\tclassificationList?.map((item, index) => {\r\n\t\t\treturn {\r\n\t\t\t\tid: item,\r\n\t\t\t\tname: item,\r\n\t\t\t\tchecked: true,\r\n\t\t\t\tsymbolType: 'circle' as SymbolType,\r\n\t\t\t\tsymbolColor: 'red',\r\n\t\t\t} as HighchartsLegendItem;\r\n\t\t})\r\n\t);\r\n\tconst tabPops = {\r\n\t\tlabel: 'Utforska',\r\n\t\tdefaultTabId: selectedTabPage,\r\n\t\tautoSelect: false,\r\n\t\titems: [\r\n\t\t\t{\r\n\t\t\t\theading: showAsChartLabel,\r\n\t\t\t\tid: chartId,\r\n\t\t\t\ticonName: null,\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\theading: showAsTableLabel,\r\n\t\t\t\tid: tableId,\r\n\t\t\t\ticonName: null,\r\n\t\t\t},\r\n\t\t],\r\n\t} as TabProps;\r\n\r\n\tconst stateRef = useRef<Highcharts.Options>();\r\n\tstateRef.current = chartOptions;\r\n\r\n\tconst chartRef = React.createRef();\r\n\r\n\tuseEffect(() => {\r\n\t\tif (typeof HighchartsModule === 'object') {\r\n\t\t\t// Initialize the modules\r\n\t\t\texporting(HighchartsModule);\r\n\t\t\texportData(HighchartsModule);\r\n\t\t\tdataModule(HighchartsModule);\r\n\t\t\taccessibility(HighchartsModule);\r\n\r\n\t\t\tHighchartsModule.setOptions({\r\n\t\t\t\texporting: {\r\n\t\t\t\t\tfilename: window.location.pathname.replace('/', ''),\r\n\t\t\t\t},\r\n\t\t\t\tlang: {\r\n\t\t\t\t\tloading: 'Laddar...',\r\n\t\t\t\t\tresetZoom: 'Ã…terställ zoom',\r\n\t\t\t\t\tnumericSymbols: [\r\n\t\t\t\t\t\t' Tusen',\r\n\t\t\t\t\t\t' Miljoner',\r\n\t\t\t\t\t\t' Miljarder',\r\n\t\t\t\t\t\t' Biljoner',\r\n\t\t\t\t\t\t' Biljarder',\r\n\t\t\t\t\t\t' Triljoner',\r\n\t\t\t\t\t],\r\n\t\t\t\t\tdecimalPoint: ',',\r\n\t\t\t\t\tmonths: [\r\n\t\t\t\t\t\t'Januari',\r\n\t\t\t\t\t\t'Februari',\r\n\t\t\t\t\t\t'Mars',\r\n\t\t\t\t\t\t'April',\r\n\t\t\t\t\t\t'Maj',\r\n\t\t\t\t\t\t'Juni',\r\n\t\t\t\t\t\t'Juli',\r\n\t\t\t\t\t\t'Augusti',\r\n\t\t\t\t\t\t'September',\r\n\t\t\t\t\t\t'Oktober',\r\n\t\t\t\t\t\t'November',\r\n\t\t\t\t\t\t'December',\r\n\t\t\t\t\t],\r\n\t\t\t\t\tweekdays: [\r\n\t\t\t\t\t\t'Söndag',\r\n\t\t\t\t\t\t'MÃ¥ndag',\r\n\t\t\t\t\t\t'Tisdag',\r\n\t\t\t\t\t\t'Onsdag',\r\n\t\t\t\t\t\t'Torsdag',\r\n\t\t\t\t\t\t'Fredag',\r\n\t\t\t\t\t\t'Lördag',\r\n\t\t\t\t\t],\r\n\t\t\t\t\tshortMonths: [\r\n\t\t\t\t\t\t'Jan',\r\n\t\t\t\t\t\t'Feb',\r\n\t\t\t\t\t\t'Mar',\r\n\t\t\t\t\t\t'Apr',\r\n\t\t\t\t\t\t'Maj',\r\n\t\t\t\t\t\t'Jun',\r\n\t\t\t\t\t\t'Jul',\r\n\t\t\t\t\t\t'Aug',\r\n\t\t\t\t\t\t'Sep',\r\n\t\t\t\t\t\t'Okt',\r\n\t\t\t\t\t\t'Nov',\r\n\t\t\t\t\t\t'Dec',\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t}\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (selectedTabPage === tableId) {\r\n\t\t\t// Controlling the location of the Table when using showTable\r\n\t\t\t// https://www.highcharts.com/forum/viewtopic.php?t=41596\r\n\r\n\t\t\tconst newOptions = { ...chartOptions };\r\n\t\t\tconst showTable = true;\r\n\r\n\t\t\tif (!newOptions.exporting) {\r\n\t\t\t\tnewOptions.exporting = {};\r\n\t\t\t}\r\n\r\n\t\t\tnewOptions.exporting.showTable = showTable;\r\n\t\t\tnewOptions.exporting.tableCaption = newOptions.title?.text;\r\n\r\n\t\t\tif (newOptions.exporting.csv != null) {\r\n\t\t\t\tif (useShortDate) {\r\n\t\t\t\t\tnewOptions.exporting.csv.dateFormat = '%Y-%m-%d';\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnewOptions.exporting.csv.dateFormat = '%Y-%m-%d %H:%M';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tsetChartOptions(newOptions);\r\n\t\t}\r\n\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [selectedTabPage]);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst legendItemClick = (event: any) => {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tconst serie = event.target\r\n\t\t\t\t.userOptions as HighchartsModule.SeriesOptionsType;\r\n\t\t\t// toggle state\r\n\t\t\tif (serie && serie.id) {\r\n\t\t\t\tsetVisibilityOnSerie(stateRef.current, serie.id, !serie.visible);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst enhanceOptions = (data: Highcharts.Options) => {\r\n\t\t\t// Set defaults\r\n\t\t\tif (data.chart) {\r\n\t\t\t\tdata.chart.backgroundColor = 'transparent';\r\n\t\t\t\tdata.chart.marginTop = 30;\r\n\t\t\t} else {\r\n\t\t\t\tdata.chart = {\r\n\t\t\t\t\tbackgroundColor: 'transparent',\r\n\t\t\t\t\tmarginTop: 30,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\t// undefined = visar set(true)\r\n\t\t\t// true\t\t = visar set(true)\r\n\t\t\t// false = hide set(false)\r\n\r\n\t\t\tif (!showLegends || (data.legend && data.legend.enabled === false)) {\r\n\t\t\t\tsetShowFilterLegends(false);\r\n\t\t\t} else {\r\n\t\t\t\tsetShowFilterLegends(true);\r\n\t\t\t}\r\n\r\n\t\t\t// Hide build in legends\r\n\t\t\tif (showLegends) {\r\n\t\t\t\tif (data.legend) {\r\n\t\t\t\t\tdata.legend.enabled = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdata.legend = {\r\n\t\t\t\t\t\tenabled: false,\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Customize \"Category\" name\r\n\t\t\tif (data.exporting === undefined) {\r\n\t\t\t\tdata.exporting = {};\r\n\t\t\t}\r\n\r\n\t\t\tif (data.exporting.chartOptions) {\r\n\t\t\t\tif (data.exporting.chartOptions.legend) {\r\n\t\t\t\t\tdata.exporting.chartOptions.legend = {\r\n\t\t\t\t\t\t...data.exporting.chartOptions.legend,\r\n\t\t\t\t\t\tenabled: true,\r\n\t\t\t\t\t};\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdata.exporting.chartOptions = {\r\n\t\t\t\t\t\t...data.exporting.chartOptions,\r\n\t\t\t\t\t\tlegend: {\r\n\t\t\t\t\t\t\tenabled: true,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tdata.exporting.chartOptions = {\r\n\t\t\t\t\tlegend: {\r\n\t\t\t\t\t\tenabled: true,\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\tif (data.exporting.csv === undefined) {\r\n\t\t\t\tdata.exporting.csv = {};\r\n\t\t\t}\r\n\r\n\t\t\tdata.exporting.csv.columnHeaderFormatter = (item: any, key: any) => {\r\n\t\t\t\tif (!item || item instanceof HighchartsModule.Axis) {\r\n\t\t\t\t\treturn categoryLabel;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn item.name;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t// Add event\r\n\t\t\tif (data.plotOptions) {\r\n\t\t\t\tif (data.plotOptions.series) {\r\n\t\t\t\t\tif (data.plotOptions.series.events) {\r\n\t\t\t\t\t\tdata.plotOptions.series.events.legendItemClick = legendItemClick;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdata.plotOptions.series.events = {\r\n\t\t\t\t\t\t\tlegendItemClick: legendItemClick,\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdata.plotOptions.series = {\r\n\t\t\t\t\t\tevents: {\r\n\t\t\t\t\t\t\tlegendItemClick: legendItemClick,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tdata.plotOptions = {\r\n\t\t\t\t\tseries: {\r\n\t\t\t\t\t\tevents: {\r\n\t\t\t\t\t\t\tlegendItemClick: legendItemClick,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tif (data) {\r\n\t\t\tenhanceOptions(data);\r\n\t\t\tsetChartOptions(data);\r\n\t\t}\r\n\t}, [data, showLegends]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (chartOptions) {\r\n\t\t\tconst legends = chartOptions.series?.map((item, index) => {\r\n\t\t\t\titem.id = index.toString();\r\n\t\t\t\tif (item.visible === undefined) {\r\n\t\t\t\t\titem.visible = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet a = (chartRef.current as any).chart;\r\n\t\t\t\tconst symbolType = a.series[index].symbol;\r\n\t\t\t\tconst symbolColor = a.series[index].color;\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\tid: item.id,\r\n\t\t\t\t\tname: item.name,\r\n\t\t\t\t\tchecked: item.visible,\r\n\t\t\t\t\tsymbolType: symbolType as SymbolType,\r\n\t\t\t\t\tsymbolColor: symbolColor,\r\n\t\t\t\t} as HighchartsLegendItem;\r\n\t\t\t});\r\n\t\t\tsetLegends(legends ? legends : []);\r\n\t\t}\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [chartOptions]);\r\n\r\n\tconst onTabPageSelected = (panelId: string) => {\r\n\t\tsetSelectedTabPage(panelId);\r\n\t};\r\n\r\n\tconst onLegendsCheckAll = () => {\r\n\t\tsetAllLegenSelect(true);\r\n\t};\r\n\r\n\tconst onLegendsUnCheckAll = () => {\r\n\t\tsetAllLegenSelect(false);\r\n\t};\r\n\r\n\tconst setAllLegenSelect = (show: boolean) => {\r\n\t\tif (chartOptions && chartOptions.series) {\r\n\t\t\tchartOptions.series.forEach((chartSerieitem) => {\r\n\t\t\t\tchartSerieitem.visible = show;\r\n\t\t\t});\r\n\r\n\t\t\tsetChartOptions({\r\n\t\t\t\t...chartOptions,\r\n\t\t\t});\r\n\t\t}\r\n\t\tif (classificationLegends) {\r\n\t\t\tconst groups = classificationLegends.map((item) => {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tid: item.id,\r\n\t\t\t\t\tname: item.name,\r\n\t\t\t\t\tchecked: show,\r\n\t\t\t\t\tsymbolType: 'circle' as SymbolType,\r\n\t\t\t\t\tsymbolColor: 'red',\r\n\t\t\t\t} as HighchartsLegendItem;\r\n\t\t\t});\r\n\t\t\tsetClassificationLegends(groups);\r\n\t\t}\r\n\t};\r\n\r\n\tconst legendCheckedChanged = (\r\n\t\titem: HighchartsLegendItem,\r\n\t\tchecked: boolean\r\n\t) => {\r\n\t\tsetVisibilityOnSerie(chartOptions, item.id, checked);\r\n\t};\r\n\r\n\tconst classificationLegendCheckedChanged = (\r\n\t\titem: HighchartsLegendItem,\r\n\t\tclassification: string,\r\n\t\tchecked: boolean\r\n\t) => {\r\n\t\tsetVisibilityOnClassificationSeries(chartOptions, classification, checked);\r\n\t};\r\n\r\n\tconst setVisibilityOnSerie = (\r\n\t\toptions: Highcharts.Options | undefined,\r\n\t\tid: string,\r\n\t\tenabled: boolean | undefined\r\n\t) => {\r\n\t\tif (options && options.series) {\r\n\t\t\tconst pos = options.series.findIndex((chartSerieitem) => {\r\n\t\t\t\treturn chartSerieitem.id === id;\r\n\t\t\t});\r\n\t\t\tif (pos !== -1) {\r\n\t\t\t\tif (options && options.series) {\r\n\t\t\t\t\toptions.series[pos].visible = enabled ? enabled : false;\r\n\t\t\t\t\tsetChartOptions({\r\n\t\t\t\t\t\t...options,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tconsole.error('Missing serie:' + id);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tconsole.error('chartOptions not set');\r\n\t\t}\r\n\t};\r\n\r\n\tconst setVisibilityOnClassificationSeries = (\r\n\t\toptions: Highcharts.Options | undefined,\r\n\t\tclassification: string,\r\n\t\tenabled: boolean | undefined\r\n\t) => {\r\n\t\tif (classificationLegends) {\r\n\t\t\tconst groups = classificationLegends.map((item) => {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tid: item.id,\r\n\t\t\t\t\tname: item.name,\r\n\t\t\t\t\tchecked: item.name == classification ? enabled : item.checked,\r\n\t\t\t\t\tsymbolType: item.symbolType,\r\n\t\t\t\t\tsymbolColor: item.symbolColor,\r\n\t\t\t\t} as HighchartsLegendItem;\r\n\t\t\t});\r\n\t\t\tsetClassificationLegends(groups);\r\n\t\t}\r\n\r\n\t\tif (options && options.series) {\r\n\t\t\toptions.series.forEach((chartSerieitem) => {\r\n\t\t\t\tif (chartSerieitem.custom?.classification == classification) {\r\n\t\t\t\t\tchartSerieitem.visible = enabled;\r\n\t\t\t\t\tsetChartOptions({\r\n\t\t\t\t\t\t...options,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tconsole.error('chartOptions not set');\r\n\t\t}\r\n\t};\r\n\r\n\t// const onExportSelected = (event: React.ChangeEvent<HTMLSelectElement>) => {\r\n\t// \tconst exportFormat = event.target.value as MimeTypes;\r\n\r\n\t// \tif (exportFormat === MimeTypes.xls) {\r\n\t// \t\t(chartRef.current as any).chart.downloadXLS();\r\n\t// \t} else {\r\n\t// \t\tconst mimeType = {\r\n\t// \t\t\ttype: exportFormat,\r\n\t// \t\t\tfilename: undefined,\r\n\t// \t\t} as any;\r\n\t// \t\t(chartRef.current as any).chart.exportChart(mimeType); // This works (save a png file)\r\n\t// \t}\r\n\r\n\t// \tsetSelectedDownload(\"\");\r\n\t// };\r\n\r\n\tconst onExportSelect = (value: string) => {\r\n\t\tif (value === MimeTypes.csv) {\r\n\t\t\t(chartRef.current as any).chart.downloadCSV();\r\n\t\t} else {\r\n\t\t\tconst mimeType = {\r\n\t\t\t\ttype: value,\r\n\t\t\t\tfilename: undefined,\r\n\t\t\t} as any;\r\n\t\t\t(chartRef.current as any).chart.exportChart(mimeType); // This works (save a png file)\r\n\t\t}\r\n\t};\r\n\r\n\tconst chartElement = (\r\n\t\t<HighchartAndTable showChartMode={selectedTabPage === chartId}>\r\n\t\t\t{chartOptions && (\r\n\t\t\t\t<HighchartsReact\r\n\t\t\t\t\tid={chartId}\r\n\t\t\t\t\tref={chartRef as any}\r\n\t\t\t\t\thighcharts={HighchartsModule}\r\n\t\t\t\t\toptions={chartOptions}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{/* todo, the id should be placed on the inserted div by highchart */}\r\n\t\t\t<div id={chartId}></div>\r\n\t\t</HighchartAndTable>\r\n\t);\r\n\r\n\tconst withLegends = (\r\n\t\t<Grid inner={true}>\r\n\t\t\t<Cell span={7} tablet={8} phone={4}>\r\n\t\t\t\t{chartElement}\r\n\t\t\t</Cell>\r\n\r\n\t\t\t<Cell span={1} tablet={0} phone={0}>\r\n\t\t\t\t{' '}\r\n\t\t\t</Cell>\r\n\r\n\t\t\t<Cell span={4} tablet={4} phone={4}>\r\n\t\t\t\t{showFilterLegends && (\r\n\t\t\t\t\t<HighchartsLegends\r\n\t\t\t\t\t\titems={legends}\r\n\t\t\t\t\t\tclassificationItems={classificationLegends}\r\n\t\t\t\t\t\theading={legendHeading}\r\n\t\t\t\t\t\tselectAllLabel={legendSelectAllLabel}\r\n\t\t\t\t\t\tselectNoneLabel={legendSelectNoneLabel}\r\n\t\t\t\t\t\tonCheckAll={onLegendsCheckAll}\r\n\t\t\t\t\t\tonUncheckAll={onLegendsUnCheckAll}\r\n\t\t\t\t\t\tonCheckedChanged={legendCheckedChanged}\r\n\t\t\t\t\t\tonClassificationsCheckedChanged={classificationLegendCheckedChanged}\r\n\t\t\t\t\t\tstatisticsClassificationsLink={statisticsClassificationsLink}\r\n\t\t\t\t\t></HighchartsLegends>\r\n\t\t\t\t)}\r\n\t\t\t</Cell>\r\n\t\t</Grid>\r\n\t);\r\n\r\n\tlet renderOutput = chartElement;\r\n\t// Only render legends in chart tap page.\r\n\tif (showFilterLegends && selectedTabPage === chartId) {\r\n\t\trenderOutput = withLegends;\r\n\t}\r\n\r\n\tconst exportItems: DropdownMenuItem[] = [\r\n\t\t{ heading: `${exportAsLabel} PDF...`, value: MimeTypes.pdf },\r\n\t\t{ heading: `${exportAsLabel} PNG...`, value: MimeTypes.png },\r\n\t\t{ heading: `${exportAsLabel} JPG...`, value: MimeTypes.jpg },\r\n\t\t{ heading: `${exportAsLabel} SVG...`, value: MimeTypes.svg },\r\n\t\t{ heading: `${exportAsLabel} CSV...`, value: MimeTypes.csv },\r\n\t];\r\n\r\n\treturn (\r\n\t\t<HighchartsStyle id={id}>\r\n\t\t\t<Tab onSelect={onTabPageSelected} {...tabPops}>\r\n\t\t\t\t<DropdownMenu\r\n\t\t\t\t\theading={downloadLabel}\r\n\t\t\t\t\titems={exportItems}\r\n\t\t\t\t\tonSelect={onExportSelect}\r\n\t\t\t\t></DropdownMenu>\r\n\t\t\t</Tab>\r\n\t\t\t{renderOutput}\r\n\t\t</HighchartsStyle>\r\n\t);\r\n};\r\n\r\nexport default Highcharts;\r\n\r\n/**\r\n * Legends\r\n */\r\n\r\nexport type SymbolType =\r\n\t| 'circle'\r\n\t| 'diamond'\r\n\t| 'square'\r\n\t| 'triangle'\r\n\t| 'triangle-down';\r\n\r\nexport interface HighchartsLegendItem {\r\n\tid: string;\r\n\tname: string;\r\n\tchecked: boolean;\r\n\tsymbolType: SymbolType;\r\n\tsymbolColor: string;\r\n}\r\n\r\ninterface HighchartsLegendsProps {\r\n\theading?: string;\r\n\tselectAllLabel?: string;\r\n\tselectNoneLabel?: string;\r\n\tonCheckAll?: () => void;\r\n\tonUncheckAll?: () => void;\r\n\tonCheckedChanged?: (item: HighchartsLegendItem, checked: boolean) => void;\r\n\tonClassificationsCheckedChanged?: (\r\n\t\titem: HighchartsLegendItem,\r\n\t\tclassification: string,\r\n\t\tchecked: boolean\r\n\t) => void;\r\n\r\n\titems: HighchartsLegendItem[];\r\n\tclassificationItems?: HighchartsLegendItem[];\r\n\tstatisticsClassificationsLink?: LinkType;\r\n}\r\n\r\nconst HighchartsLegends: React.FC<HighchartsLegendsProps> = ({\r\n\theading = 'Filter',\r\n\tselectAllLabel = 'Select all',\r\n\tselectNoneLabel = 'Select none',\r\n\tonCheckAll,\r\n\tonUncheckAll,\r\n\tonCheckedChanged,\r\n\tonClassificationsCheckedChanged,\r\n\titems,\r\n\tclassificationItems,\r\n\tstatisticsClassificationsLink,\r\n}) => {\r\n\tconst toggleSeries = (e: any) => {};\r\n\r\n\tconst itemCheckedChanged = (item: HighchartsLegendItem, checked: boolean) => {\r\n\t\tif (onCheckedChanged) {\r\n\t\t\tonCheckedChanged(item, checked);\r\n\t\t}\r\n\t};\r\n\r\n\tconst classificationCheckedChanged = (\r\n\t\titem: HighchartsLegendItem,\r\n\t\tchecked: boolean\r\n\t) => {\r\n\t\tif (onClassificationsCheckedChanged) {\r\n\t\t\tonClassificationsCheckedChanged(item, item.name, checked);\r\n\t\t}\r\n\t};\r\n\r\n\t// \"circle\" â—\r\n\t// \"diamond\" ♦\r\n\t// \"square\" â– \r\n\t// \"triangle\" â–²\r\n\t// \"triangle-down\" â–¼\r\n\r\n\treturn (\r\n\t\t<HighchartsLegendsStyle>\r\n\t\t\t<label>{heading}</label>\r\n\t\t\t<HighchartsLegendsActions>\r\n\t\t\t\t<Button onClick={onCheckAll} variant={ButtonVariant.Tertiary}>\r\n\t\t\t\t\t{selectAllLabel}\r\n\t\t\t\t</Button>\r\n\t\t\t\t<Button onClick={onUncheckAll} variant={ButtonVariant.Tertiary}>\r\n\t\t\t\t\t{selectNoneLabel}\r\n\t\t\t\t</Button>\r\n\t\t\t</HighchartsLegendsActions>\r\n\t\t\t{/* Rendering the classification categories (stationstyp, Gaturum, Urban bakgrund, Regional Bakgrund, Förortsmiljö) */}\r\n\t\t\t<ul>\r\n\t\t\t\t{classificationItems?.map((item, index) => {\r\n\t\t\t\t\tlet symbolChar: string;\r\n\t\t\t\t\tswitch (item.symbolType) {\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tcase 'circle':\r\n\t\t\t\t\t\t\tsymbolChar = 'â—';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'diamond':\r\n\t\t\t\t\t\t\tsymbolChar = '♦';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'square':\r\n\t\t\t\t\t\t\tsymbolChar = 'â– ';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'triangle':\r\n\t\t\t\t\t\t\tsymbolChar = 'â–²';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'triangle-down':\r\n\t\t\t\t\t\t\tsymbolChar = 'â–¼';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<li key={index} onClick={() => toggleSeries(item)}>\r\n\t\t\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\t\t\tonCheckedChanged={(checked) =>\r\n\t\t\t\t\t\t\t\t\tclassificationCheckedChanged(item, checked)\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tchecked={item.checked}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{item.name}\r\n\t\t\t\t\t\t\t</Checkbox>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t</ul>\r\n\t\t\t<ul>\r\n\t\t\t\t<li>\r\n\t\t\t\t\t{statisticsClassificationsLink &&\r\n\t\t\t\t\t\tstatisticsClassificationsLink.url &&\r\n\t\t\t\t\t\tstatisticsClassificationsLink.heading && (\r\n\t\t\t\t\t\t\t<a href={statisticsClassificationsLink.url}>\r\n\t\t\t\t\t\t\t\t{statisticsClassificationsLink.heading}\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t<p></p>\r\n\t\t\t\t</li>\r\n\t\t\t</ul>\r\n\t\t\t<ul>\r\n\t\t\t\t{items.map((item, index) => {\r\n\t\t\t\t\tlet symbolChar: string;\r\n\t\t\t\t\tswitch (item.symbolType) {\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tcase 'circle':\r\n\t\t\t\t\t\t\tsymbolChar = 'â—';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'diamond':\r\n\t\t\t\t\t\t\tsymbolChar = '♦';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'square':\r\n\t\t\t\t\t\t\tsymbolChar = 'â– ';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'triangle':\r\n\t\t\t\t\t\t\tsymbolChar = 'â–²';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'triangle-down':\r\n\t\t\t\t\t\t\tsymbolChar = 'â–¼';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<li key={index} onClick={() => toggleSeries(item)}>\r\n\t\t\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\t\t\tonCheckedChanged={(checked) =>\r\n\t\t\t\t\t\t\t\t\titemCheckedChanged(item, checked)\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tchecked={item.checked}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<HighchartsLegendsSymbols {...item}>\r\n\t\t\t\t\t\t\t\t\t{symbolChar}\r\n\t\t\t\t\t\t\t\t</HighchartsLegendsSymbols>\r\n\t\t\t\t\t\t\t\t{item.name}\r\n\t\t\t\t\t\t\t</Checkbox>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t</ul>\r\n\t\t</HighchartsLegendsStyle>\r\n\t);\r\n};\r\n","import { LinkType } from 'pages/sharedModelTypes';\r\n\r\nexport interface SiblingsList {\r\n\theading: string;\r\n\titems: LinkType[];\r\n}\r\n\r\nexport const ListingPageURLs = [\r\n\t'/data-och-statistik/',\r\n\t'/en/data-and-statistics/',\r\n\t'/vagledning-och-stod/',\r\n\t'/en/guidance/',\r\n\t'/publikationer/',\r\n\t'/en/publications/',\r\n\t'/lagar-och-regler/foreskrifter-och-allmanna-rad/',\r\n];\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport {\r\n\tBreadcrumbStyled,\r\n\tBreadcrumbLink,\r\n\tBreadcrumbItemWarpper,\r\n} from './Breadcrumbs.styles';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectLocalization } from 'store/modules/model';\r\nimport { translate } from 'utils/helper-utils';\r\nimport { ListingPageURLs } from 'types/common';\r\n\r\n/**\r\n * Breadcrumbs\r\n *\r\n * todo:\r\n * \t- WAI-ARIA: The landmark region is labelled via aria-label or aria-labelledby.\r\n */\r\n\r\nexport type BreadcrumbItemtype = {\r\n\turl: string;\r\n\ttext: string;\r\n\tisActive: boolean;\r\n};\r\n\r\ntype Props = {\r\n\titems?: BreadcrumbItemtype[];\r\n};\r\n\r\nexport type MediaQueryProps = {\r\n\tisPhone: boolean;\r\n};\r\n\r\nconst Breadcrumbs = ({ items }: Props) => {\r\n\tconst [breadcrumbs, setBreadcrumbs] = useState<BreadcrumbItemtype[]>([]);\r\n\r\n\tconst isPhone = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.tablet - 1,\r\n\t});\r\n\r\n\tuseEffect(() => {\r\n\t\tif (items && items.length > 0) {\r\n\t\t\tif (isPhone) {\r\n\t\t\t\tif (items.length > 1) {\r\n\t\t\t\t\t// show second last -1\r\n\t\t\t\t\tconst secondLastItem = { ...items[items.length - 2] };\r\n\t\t\t\t\tsetBreadcrumbs([secondLastItem]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Show text (no link)\r\n\t\t\t\t\tconst firstItem = { ...items[0] };\r\n\t\t\t\t\tsetBreadcrumbs([firstItem]);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tsetBreadcrumbs([...items]);\r\n\t\t\t}\r\n\t\t}\r\n\t}, [items, isPhone]);\r\n\r\n\tconst localization = useSelector(selectLocalization);\r\n\r\n\tconst ariaLabel = translate(\r\n\t\t'/frontend/components/breadcrumbs/arialabel',\r\n\t\t'You are here',\r\n\t\tlocalization\r\n\t);\r\n\r\n\treturn (\r\n\t\t<nav aria-label={ariaLabel}>\r\n\t\t\t<BreadcrumbStyled>\r\n\t\t\t\t{breadcrumbs.map((item, index) => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<BreadcrumbItemWarpper isPhone={isPhone} key={index}>\r\n\t\t\t\t\t\t\t<BreadcrumbLink\r\n\t\t\t\t\t\t\t\tshowLinkIcon={false}\r\n\t\t\t\t\t\t\t\t$active={item.isActive}\r\n\t\t\t\t\t\t\t\tto={item.url}\r\n\t\t\t\t\t\t\t\texternal={ListingPageURLs.includes(item.url)}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{item.text}\r\n\t\t\t\t\t\t\t</BreadcrumbLink>\r\n\t\t\t\t\t\t</BreadcrumbItemWarpper>\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t</BreadcrumbStyled>\r\n\t\t</nav>\r\n\t);\r\n};\r\n\r\nexport default Breadcrumbs;\r\n","/**\r\n * Grid\r\n */\r\n\r\nimport React from 'react';\r\nimport styled from 'styled-components';\r\nimport { math } from 'polished';\r\nimport { Grid as GridType, Columns, grid } from 'theme/grid';\r\n\r\n// Interfaces\r\ninterface GridProps {\r\n\t/** Mandatory, when wrapping grid cells */\r\n\tinner?: boolean;\r\n\r\n\t/** Option to remove default grid padding */\r\n\tpadding?: boolean;\r\n\r\n\t/** Option to remove default grid top padding */\r\n\tpaddingTop?: boolean;\r\n\r\n\t/** Option to remove default grid right padding */\r\n\tpaddingRight?: boolean;\r\n\r\n\t/** Option to remove default grid bottom padding */\r\n\tpaddingBottom?: boolean;\r\n\r\n\t/** Option to remove default grid left padding */\r\n\tpaddingLeft?: boolean;\r\n\r\n\t/** Specifies the alignment of the whole grid */\r\n\talign?: 'left' | 'right';\r\n\r\n\t/** Pass optional classnames for the html */\r\n\tclassName?: string;\r\n\r\n\t/** Pass optional style-object (TRY don't use this) */\r\n\tstyle?: any;\r\n}\r\n\r\ninterface CellProps {\r\n\t/** Specifies the order of the cell (not currently working) */\r\n\torder?: number;\r\n\r\n\t/** Specifies the alignment of cell */\r\n\talign?: 'top' | 'middle' | 'bottom';\r\n\r\n\t/** Specifies the number of columns the cell spans */\r\n\tspan?: number;\r\n\r\n\t/** Specifies the number of columns the cell spans on a type of device (desktop) */\r\n\tdesktop?: number;\r\n\r\n\t/** Specifies the number of columns the cell spans on a type of device (tablet) */\r\n\ttablet?: number;\r\n\r\n\t/** Specifies the number of columns the cell spans on a type of device (phone) */\r\n\tphone?: number;\r\n\r\n\t/** Pass optional classnames for the html */\r\n\tclassName?: string;\r\n\r\n\t/** Pass optional style-object (don't use this) */\r\n\tstyle?: any;\r\n}\r\n\r\n// Variables\r\nconst CellPropsList = {\r\n\tspan: 1,\r\n\tdesktop: 1,\r\n\ttablet: 1,\r\n\tphone: 1,\r\n};\r\n\r\n// Functions\r\nconst breakpointMin = (size: string, gridConf: GridType): string | null => {\r\n\tconst min = gridConf.breakpoints[size];\r\n\tif (parseInt(min, 10) === 0) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn min;\r\n};\r\n\r\nconst breakpointMax = (size: string, gridConf: GridType): string | null => {\r\n\tconst sizeIndex = Object.keys(gridConf.columns).indexOf(size);\r\n\r\n\tif (sizeIndex > 0) {\r\n\t\treturn math(\r\n\t\t\t`${\r\n\t\t\t\tgridConf.breakpoints[Object.keys(gridConf.columns)[sizeIndex - 1]]\r\n\t\t\t} - 1px`\r\n\t\t);\r\n\t}\r\n\r\n\treturn null;\r\n};\r\n\r\nconst getDeviceProps = (props: any) => {\r\n\tconst deviceProps: Columns = {};\r\n\r\n\tObject.keys(CellPropsList).forEach((key: string) => {\r\n\t\tif (\r\n\t\t\tkey !== undefined &&\r\n\t\t\tprops.hasOwnProperty(key) &&\r\n\t\t\tprops[key] !== undefined\r\n\t\t) {\r\n\t\t\tdeviceProps[key] = props[key];\r\n\t\t}\r\n\t});\r\n\r\n\treturn deviceProps;\r\n};\r\n\r\n// Css generation methods\r\nconst getGridCss = (size: string, gridConf: GridType, props: any): string => {\r\n\tconst margins = gridConf.margin[size];\r\n\tlet paddingTop =\r\n\t\tprops.paddingTop === false || props.padding === false ? 0 : margins;\r\n\tlet paddingRight =\r\n\t\tprops.paddingRight === false || props.padding === false ? 0 : margins;\r\n\tlet paddingBottom =\r\n\t\tprops.paddingBottom === false || props.padding === false ? 0 : margins;\r\n\tlet paddingLeft =\r\n\t\tprops.paddingLeft === false || props.padding === false ? 0 : margins;\r\n\r\n\treturn `\r\n\t\tbox-sizing: border-box;\r\n\t\tpadding: ${paddingTop} ${paddingRight} ${paddingBottom} ${paddingLeft};\r\n\r\n\t\t${gridConf.maxWidth && `max-width: ${gridConf.maxWidth};`}\r\n `;\r\n};\r\n\r\nconst getInnerGridCss = (size: string, gridConf: GridType): string => {\r\n\tconst gutters = gridConf.gutter[size];\r\n\r\n\treturn `\r\n\t\tdisplay: flex;\r\n\t\tflex-flow: row wrap;\r\n\t\talign-items: stretch;\r\n\t\tmargin: -${math(`${gutters} / 2`)};\r\n\r\n\t\t@supports (display: grid) {\r\n\t\t\tdisplay: grid;\r\n\t\t\tmargin: 0;\r\n\t\t\tgrid-gap: ${gutters};\r\n\t\t\tgrid-template-columns: repeat(${gridConf.columns[size]}, minmax(0, 1fr));\r\n\t\t}\r\n `;\r\n};\r\n\r\nconst getMediaQueriesCss = (\r\n\tsize: string,\r\n\tfn: any,\r\n\tgridConf: GridType,\r\n\t...props: any\r\n): string => {\r\n\tlet data = '';\r\n\r\n\tconst min = breakpointMin(size, gridConf);\r\n\tconst max = breakpointMax(size, gridConf);\r\n\r\n\tif (min === null && max !== null) {\r\n\t\tdata += `\r\n\t\t\t\t@media (max-width: ${max}) {\r\n\t\t\t\t\t${fn(size, gridConf, ...props)}\r\n\t\t\t\t}\r\n\t\t\t`;\r\n\t} else if (min !== null && max !== null) {\r\n\t\tdata += `\r\n\t\t\t\t@media (min-width: ${min}) and (max-width: ${max}) {\r\n\t\t\t\t\t${fn(size, gridConf, ...props)}\r\n\t\t\t\t}\r\n\t\t\t`;\r\n\t} else if (min !== null && max === null) {\r\n\t\tdata += `\r\n\t\t\t\t@media (min-width: ${min}) {\r\n\t\t\t\t\t${fn(size, gridConf, ...props)}\r\n\t\t\t\t}\r\n\t\t\t`;\r\n\t} else {\r\n\t\tdata += `\r\n\t\t\t\t${fn(size, gridConf, ...props)}\r\n\t\t\t`;\r\n\t}\r\n\r\n\treturn data;\r\n};\r\n\r\nconst getMediaQueries = (\r\n\tfn: any,\r\n\tgridConf: GridType,\r\n\t...props: any\r\n): string => {\r\n\tlet data = '';\r\n\r\n\tfor (let key in gridConf.columns) {\r\n\t\tconst size = key;\r\n\t\tdata += getMediaQueriesCss(size, fn, gridConf, ...props);\r\n\t}\r\n\r\n\treturn data;\r\n};\r\n\r\nconst getCellCss = (size: string, gridConf: GridType, devices: any): string => {\r\n\tconst gutters = gridConf.gutter[size];\r\n\tlet span = devices[size] || gridConf.defaultColumnSpan;\r\n\r\n\tif (devices[size] === 0) {\r\n\t\treturn `display: none;`;\r\n\t}\r\n\r\n\tif (!devices[size]) {\r\n\t\tconst dev = Object.keys(devices)[0];\r\n\t\tif (dev === 'span') {\r\n\t\t\tspan = devices[dev];\r\n\t\t}\r\n\t}\r\n\r\n\tlet percent = (span / gridConf.columns[size]) * 100;\r\n\r\n\tif (percent > 100) {\r\n\t\tpercent = 100;\r\n\t}\r\n\r\n\treturn `\r\n\t\twidth: calc(${percent}% - ${gutters});\r\n\r\n\t\t@supports (display: grid) {\r\n\t\t\twidth: auto;\r\n\t\t\tgrid-column-end: span ${\r\n\t\t\t\tspan < gridConf.columns[size] ? span : gridConf.columns[size]\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tbox-sizing: border-box;\r\n\t\tmargin: ${math(`${gutters} / 2`)};\r\n\r\n\t\t@supports (display: grid) {\r\n\t\t\tmargin: 0;\r\n\t\t}\r\n\r\n\t`;\r\n};\r\n\r\nconst getAlignCellCss = (align: string) => {\r\n\tlet data = '';\r\n\r\n\tif (align === 'top') {\r\n\t\tdata = `\r\n\t\t\talign-self: flex-start;\r\n\t\t\t@supports (display: grid) {\r\n\t\t\t\talign-self: start;\r\n\t\t\t}\r\n\t\t`;\r\n\t} else if (align === 'middle') {\r\n\t\tdata = `align-self: center;`;\r\n\t} else if (align === 'bottom') {\r\n\t\tdata = `\r\n\t\t\talign-self: flex-end;\r\n\t\t\t@supports (display: grid) {\r\n\t\t\t\talign-self: end;\r\n\t\t\t}\r\n\t\t`;\r\n\t}\r\n\r\n\treturn data;\r\n};\r\n\r\nconst getAlignGridCss = (align: string) => {\r\n\tlet data = '';\r\n\r\n\tif (align === 'left') {\r\n\t\tdata = `\r\n\t\t\tmargin-right: auto;\r\n\t\t\tmargin-left: 0;\r\n\t\t`;\r\n\t} else if (align === 'right') {\r\n\t\tdata = `\r\n\t\t\tmargin-right: 0;\r\n\t\t\tmargin-left: auto;\r\n\t\t`;\r\n\t}\r\n\r\n\treturn data;\r\n};\r\n\r\n// Styled components\r\nconst GridComponent: React.FunctionComponent<GridProps> = (props) => (\r\n\t<div className={props.className} style={props.style}>\r\n\t\t{props.children}\r\n\t</div>\r\n);\r\n/** This grid is an Styled Components variant of the [Material Design Grid](https://material.io/develop/web/components/layout-grid/). */\r\nexport const Grid = styled(GridComponent)`\r\n\tmargin: 0 auto;\r\n\t${({ inner, ...props }) =>\r\n\t\tgetMediaQueries(inner ? getInnerGridCss : getGridCss, grid, props)}\r\n\t${(props) => props.align && getAlignGridCss(props.align)}\r\n`;\r\n\r\nconst CellComponent: React.FunctionComponent<CellProps> = (props) => (\r\n\t<div className={props.className} style={props.style}>\r\n\t\t{props.children}\r\n\t</div>\r\n);\r\n\r\nexport const Cell = styled(CellComponent)`\r\n\t${(props) => getMediaQueries(getCellCss, grid, getDeviceProps(props))}\r\n\t${(props) => props.order && `order: ${props.order};`}\r\n\t${(props) => props.align && getAlignCellCss(props.align)}\r\n`;\r\n","/**\r\n * Space\r\n */\r\n\r\nimport styled from 'styled-components';\r\n\r\nexport interface SpaceProps {\r\n\t/** Spacing after the component (top-bottom) */\r\n\ttop?: number;\r\n\r\n\t/** Spacing after the component (margin-bottom) */\r\n\tbottom?: number;\r\n\r\n\t/** Spacing right of the component (margin-right) */\r\n\tright?: number;\r\n\r\n\t/** Spacing left of the component (margin-left) */\r\n\tleft?: number;\r\n\r\n\t/** Spacing between the children */\r\n\tstack?: number;\r\n}\r\n\r\n/** Space component for handling spacing between other components. */\r\nconst Space = styled.div<SpaceProps>`\r\n\t${({ top }) =>\r\n\t\ttop !== undefined &&\r\n\t\t`\r\n\t\t\t> *:first-child {\r\n\t\t\t\tmargin-top: ${top}rem;\r\n\t\t\t}\r\n\t\t`}\r\n\r\n\t${({ bottom }) =>\r\n\t\tbottom !== undefined &&\r\n\t\t`\r\n\t\t\t> *:last-child {\r\n\t\t\t\tmargin-bottom: ${bottom}rem;\r\n\t\t\t}\r\n\t\t`}\r\n\t\r\n\t${({ right }) =>\r\n\t\tright !== undefined &&\r\n\t\t`\r\n\t\t\tmargin-right: ${right}rem;\r\n\t\t\t> * {\r\n\t\t\t\tmargin-right: 0;\r\n\t\t\t}\r\n\t\t`}\r\n\r\n\t${({ left }) =>\r\n\t\tleft !== undefined &&\r\n\t\t`\r\n\t\t\tmargin-left: ${left}rem;\r\n\t\t\t> * {\r\n\t\t\t\tmargin-left: 0;\r\n\t\t\t}\r\n\t\t`}\r\n\r\n\t${({ stack }) =>\r\n\t\tstack !== undefined &&\r\n\t\t`\r\n\t\t\t> * + * {\r\n\t\t\t\tmargin-top: ${stack}rem;\r\n\t\t\t}\r\n\t\t`}\r\n`;\r\n\r\nexport default Space;\r\n","/**\r\n * HeaderTextActionPanel - styles\r\n */\r\n\r\nimport { getThemeTextColor } from 'pages/sharedModelTypes';\r\nimport styled, { css } from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\nimport { BannerPanelProps } from './BannerPanel';\r\n\r\nconst getPositionCss = (centerd: boolean) => {\r\n\tif (centerd) {\r\n\t\treturn css`\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\tflex-direction: column;\r\n\t\t\talign-items: center;\r\n\t\t\ttext-align: center;\r\n\t\t`;\r\n\t} else {\r\n\t\treturn css`\r\n\t\t\tdisplay: inline-block;\r\n\t\t\talign-items: flex-start;\r\n\t\t`;\r\n\t}\r\n};\r\n\r\nconst setAlignBottomCss = () => {\r\n\treturn css`\r\n\t\tdisplay: inline-flex;\r\n\t\tflex-direction: column;\r\n\t\theight: 100%;\r\n\r\n\t\t> span {\r\n\t\t\tflex: 1 1 auto;\r\n\t\t}\r\n\t`;\r\n};\r\n\r\nexport const BannerPanelHeaderStyle = styled.div`\r\n\t> *:last-child {\r\n\t\tmargin-bottom: 0rem;\r\n\t}\r\n`;\r\n\r\nexport const BannerPanelStyle = styled.div<BannerPanelProps>`\r\n\t${(p) => getPositionCss(p.center ? true : false)};\r\n\t${(p) => p.alignbottom && setAlignBottomCss()};\r\n\r\n\t> a {\r\n\t\tmargin-top: ${props => props.theme.spacing.space4}rem;\r\n\t\tpadding-left: ${props => props.theme.spacing.space4}rem;\r\n\t\tpadding-right: ${props => props.theme.spacing.space4}rem;\r\n\t}\r\n\r\n\t> *:last-child {\r\n\t\tmargin-bottom: ${0}rem;\r\n\t}\r\n\r\n\tp {\r\n\t\t${(p) => p.center && `margin-left: auto;margin-right: auto;`};\r\n\t\tmargin-right: auto;\r\n\t\t${props => props.theme.typography.style5.getStyle()};\t\t\r\n\t\ttext-transform: none;\r\n\t\t${mediaQueries.phone} {\r\n\t\t\ttext-transform: none;\r\n\t\t}\r\n\t\tcolor: ${(p) => getThemeTextColor(p.theme, p.themeName)};\r\n\t}\r\n`;\r\n\r\nexport const DecalStyle = styled.div<BannerPanelProps>`\r\n\t\t${props => props.theme.typography.style9.getStyle()};\t\t\r\n\tcolor: ${(p) => getThemeTextColor(p.theme, p.themeName)};\r\n\r\n\tletter-spacing: 1.07px;\r\n\ttext-transform: uppercase;\r\n\tmargin-bottom: ${props => props.theme.spacing.space1}rem;\r\n`;\r\n","/**\r\n * Icon - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\n\r\ninterface IconProps {\r\n\t/** Set the size of the icon. <br/>1 = 24px<br/> 2 = 32px<br/> 3 = 40px <br/> 4 = 48px*/\r\n\tsize: 1 | 2 | 3 | 4;\r\n\r\n\t/** Set the color of the icon */\r\n\tcolor: string;\r\n\r\n\t/** Set the direction of the icon. */\r\n\tdirection: 'left' | 'up' | 'right' | 'down';\r\n\r\n\t/** Animate the icon. */\r\n\tanimate?: 'spin';\r\n}\r\n\r\nexport const iconSize: any = {\r\n\t1: '16px',\r\n\t2: '24px',\r\n\t3: '32px',\r\n\t4: '48px',\r\n};\r\n\r\nexport const iconSizes: any = {\r\n\t1: '1.5rem',\r\n\t2: '2rem',\r\n\t3: '2.5rem',\r\n\t4: '3rem',\r\n};\r\n\r\nconst iconDirections: any = {\r\n\tright: '1turn',\r\n\tdown: '0.25turn',\r\n\tleft: '0.5turn',\r\n\tup: '0.75turn',\r\n};\r\n\r\n// CSS för :hover pÃ¥ ikoner, färg white?\r\n\r\nexport const StyledIcon = styled.div<IconProps>`\r\n\tvertical-align: middle;\r\n\tfill: ${(props) => props.color};\r\n\twidth: ${(props) => iconSizes[props.size]};\r\n\theight: ${(props) => iconSizes[props.size]};\r\n\ttransform: rotate(${(props) => iconDirections[props.direction]});\r\n\ttransition: all 0.2s;\r\n\tanimation: ${(props) =>\r\n\t\tprops.animate === 'spin' ? 'spin 2000ms infinite linear' : 'none'};\r\n\r\n\t@keyframes spin {\r\n\t\tfrom {\r\n\t\t\ttransform: rotate(0deg);\r\n\t\t}\r\n\t\tto {\r\n\t\t\ttransform: rotate(360deg);\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nexport const StyledIcon2 = styled.div<IconProps>`\r\n\tvertical-align: middle;\r\n\tfill: ${(props) => props.color};\r\n\twidth: ${(props) => iconSizes[props.size]};\r\n\theight: ${(props) => iconSizes[props.size]};\r\n\ttransform: rotate(${(props) => iconDirections[props.direction]});\r\n\ttransition: all 0.2s;\r\n\tanimation: ${(props) =>\r\n\t\tprops.animate === 'spin' ? 'spin 2000ms infinite linear' : 'none'};\r\n\r\n\t@keyframes spin {\r\n\t\tfrom {\r\n\t\t\ttransform: rotate(0deg);\r\n\t\t}\r\n\t\tto {\r\n\t\t\ttransform: rotate(360deg);\r\n\t\t}\r\n\t}\r\n`;\r\n","import React from 'react';\r\nimport { IconProps } from './Icon';\r\n\r\nexport const IconClock = ({\r\n\twidth,\r\n\theight,\r\n\tfill,\r\n\t...extraProps\r\n}: IconProps) => {\r\n\treturn (\r\n\t\t<svg\r\n\t\t\twidth={width}\r\n\t\t\theight={height}\r\n\t\t\tviewBox=\"0 0 24 24\"\r\n\t\t\tfill={fill}\r\n\t\t\t{...extraProps}\r\n\t\t>\r\n\t\t\t<title>Clock</title>\r\n\t\t\t<g stroke=\"none\" strokeWidth=\"1\" fillRule=\"evenodd\">\r\n\t\t\t\t<path d=\"M12,2 C17.5228475,2 22,6.4771525 22,12 C22,17.5228475 17.5228475,22 12,22 C6.4771525,22 2,17.5228475 2,12 C2,6.4771525 6.4771525,2 12,2 Z M12,4 C16.418278,4 20,7.581722 20,12 C20,16.418278 16.418278,20 12,20 C7.581722,20 4,16.418278 4,12 C4,7.581722 7.581722,4 12,4 Z M13,6 L11,6 L11,12.4142136 L14.1020719,15.5162855 L15.5162855,14.1020719 L13,11.585 L13,6 Z\" />\r\n\t\t\t</g>\r\n\t\t</svg>\r\n\t);\r\n};\r\n\r\nexport const IconListview = ({\r\n\twidth,\r\n\theight,\r\n\tfill,\r\n\tstroke,\r\n\t...extraProps\r\n}: IconProps) => {\r\n\treturn (\r\n\t\t<svg\r\n\t\t\twidth={width}\r\n\t\t\theight={height}\r\n\t\t\tviewBox=\"0 0 24 24\"\r\n\t\t\tfill={fill}\r\n\t\t\t{...extraProps}\r\n\t\t>\r\n\t\t\t<title>Listview</title>\r\n\t\t\t<g stroke=\"none\" strokeWidth=\"1\" fillRule=\"evenodd\">\r\n\t\t\t\t<g transform=\"translate(4.000000, 7.000000)\">\r\n\t\t\t\t\t<path d=\"M17,8 L17,11 L5,11 L5,8 L17,8 Z M4,8 L4,11 L0,11 L0,8 L4,8 Z M17,4 L17,7 L5,7 L5,4 L17,4 Z M4,4 L4,7 L0,7 L0,4 L4,4 Z M4,0 L4,3 L0,3 L0,0 L4,0 Z M17,0 L17,3 L5,3 L5,0 L17,0 Z\" />\r\n\t\t\t\t</g>\r\n\t\t\t</g>\r\n\t\t</svg>\r\n\t);\r\n};\r\n\r\nexport const IconChevron = ({\r\n\twidth,\r\n\theight,\r\n\tfill,\r\n\t...extraProps\r\n}: IconProps) => {\r\n\treturn (\r\n\t\t<svg\r\n\t\t\twidth={width}\r\n\t\t\theight={height}\r\n\t\t\tviewBox=\"0 0 24 24\"\r\n\t\t\tfill=\"currentColor\"\r\n\t\t\t{...extraProps}\r\n\t\t>\r\n\t\t\t<g stroke=\"none\" strokeWidth=\"1\" fillRule=\"evenodd\">\r\n\t\t\t\t<path d=\"M7 6.7279L8.58391 5L16.5585 12.31L8.58391 19.62L7 17.8921L13.0883 12.31L7 6.7279Z\" />\r\n\t\t\t</g>\r\n\t\t</svg>\r\n\t);\r\n};\r\n\r\nexport const IconLink = ({ width, height, fill, ...extraProps }: IconProps) => {\r\n\treturn (\r\n\t\t<svg\r\n\t\t\twidth={width}\r\n\t\t\theight={height}\r\n\t\t\tfill={fill}\r\n\t\t\tviewBox=\"0 0 24 24\"\r\n\t\t\t{...extraProps}\r\n\t\t>\r\n\t\t\t<title>Link</title>\r\n\t\t\t<g stroke=\"none\" strokeWidth=\"1\" fillRule=\"evenodd\">\r\n\t\t\t\t<polygon\r\n\t\t\t\t\ttransform=\"translate(13.000000, 12.000000) scale(-1, 1) rotate(-270.000000) translate(-13.000000, -12.000000) \"\r\n\t\t\t\t\tpoints=\"17 8.58578644 18.4142136 10 13 15.4142136 7.58578644 10 9 8.58578644 13 12.585\"\r\n\t\t\t\t/>\r\n\t\t\t</g>\r\n\t\t</svg>\r\n\t);\r\n};\r\n\r\nexport const IconArrowDown = ({\r\n\twidth,\r\n\theight,\r\n\tfill,\r\n\tstroke,\r\n\t...extraProps\r\n}: IconProps) => {\r\n\treturn (\r\n\t\t<svg\r\n\t\t\twidth={width}\r\n\t\t\theight={height}\r\n\t\t\tviewBox=\"0 0 24 24\"\r\n\t\t\tfill={fill}\r\n\t\t\t{...extraProps}\r\n\t\t>\r\n\t\t\t<title>Down arrow</title>\r\n\t\t\t<g stroke=\"none\" strokeWidth=\"1\" fillRule=\"evenodd\">\r\n\t\t\t\t<polygon\r\n\t\t\t\t\ttransform=\"translate(12.308232, 12.159084) rotate(-270.000000) translate(-12.308232, -12.159084) \"\r\n\t\t\t\t\tpoints=\"12.4573793 19.3181682 19.6164633 12.1590841 12.4573793 5 10.8096536 6.64062344 15.1349335 10.9588011 5 10.9588011 5 13.359367 15.1349335 13.359367 10.8096536 17.684647\"\r\n\t\t\t\t/>\r\n\t\t\t</g>\r\n\t\t</svg>\r\n\t);\r\n};\r\n\r\nexport const IconArrowUp = ({\r\n\twidth,\r\n\theight,\r\n\tfill,\r\n\tstroke,\r\n\t...extraProps\r\n}: IconProps) => {\r\n\treturn (\r\n\t\t<svg\r\n\t\t\twidth={width}\r\n\t\t\theight={height}\r\n\t\t\tviewBox=\"0 0 24 24\"\r\n\t\t\tfill={fill}\r\n\t\t\t{...extraProps}\r\n\t\t>\r\n\t\t\t<g stroke=\"none\" strokeWidth=\"1\" fillRule=\"evenodd\">\r\n\t\t\t\t<polygon\r\n\t\t\t\t\tpoints=\"12.457379341125488,19.31816864013672 19.616461753845215,12.15908432006836 12.457379341125488,5 10.809653282165527,6.640623092651367 15.134932518005371,10.95880126953125 4.999999046325684,10.95880126953125 4.999999046325684,13.359367370605469 15.134932518005371,13.359367370605469 10.809653282165527,17.684646606445312 \"\r\n\t\t\t\t\ttransform=\"rotate(-90 12.308231353759767,12.15908432006836) \"\r\n\t\t\t\t/>\r\n\t\t\t</g>\r\n\t\t</svg>\r\n\t);\r\n};\r\n\r\nexport const IconCross = ({\r\n\twidth,\r\n\theight,\r\n\tfill,\r\n\tstroke,\r\n\t...extraProps\r\n}: IconProps) => {\r\n\treturn (\r\n\t\t<svg\r\n\t\t\twidth={width}\r\n\t\t\theight={height}\r\n\t\t\tviewBox=\"0 0 24 24\"\r\n\t\t\tfill={fill}\r\n\t\t\t{...extraProps}\r\n\t\t>\r\n\t\t\t<g stroke=\"none\" strokeWidth=\"1\" fillRule=\"evenodd\">\r\n\t\t\t\t<g transform=\"translate(12.071068, 12.000000) rotate(-270.000000) translate(-12.071068, -12.000000) translate(7.071068, 7.000000)\">\r\n\t\t\t\t\t<polygon\r\n\t\t\t\t\t\ttransform=\"translate(4.949747, 5.050253) rotate(45.000000) translate(-4.949747, -5.050253) \"\r\n\t\t\t\t\t\tpoints=\"10.9497475 4.05025253 10.9497475 6.05025253 -1.05025253 6.05025253 -1.05025253 4.05025253\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<polygon\r\n\t\t\t\t\t\ttransform=\"translate(4.949747, 5.050253) scale(-1, 1) rotate(45.000000) translate(-4.949747, -5.050253) \"\r\n\t\t\t\t\t\tpoints=\"10.9497475 4.05025253 10.9497475 6.05025253 -1.05025253 6.05025253 -1.05025253 4.05025253\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t</g>\r\n\t\t\t</g>\r\n\t\t</svg>\r\n\t);\r\n};\r\n\r\nexport const IconPlus = ({\r\n\twidth,\r\n\theight,\r\n\tfill,\r\n\tstroke,\r\n\t...extraProps\r\n}: IconProps) => {\r\n\treturn (\r\n\t\t<svg width={width} height={height} viewBox=\"0 0 24 24\" {...extraProps}>\r\n\t\t\t<title>Plus</title>\r\n\t\t\t<g stroke=\"none\" strokeWidth=\"1\" fill={fill} fillRule=\"evenodd\">\r\n\t\t\t\t<g transform=\"translate(12.071068, 12.000000) rotate(-315.000000) translate(-12.071068, -12.000000) translate(7.071068, 7.000000)\">\r\n\t\t\t\t\t<polygon\r\n\t\t\t\t\t\ttransform=\"translate(4.949747, 5.050253) rotate(45.000000) translate(-4.949747, -5.050253) \"\r\n\t\t\t\t\t\tpoints=\"10.9497475 4.05025253 10.9497475 6.05025253 -1.05025253 6.05025253 -1.05025253 4.05025253\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<polygon\r\n\t\t\t\t\t\ttransform=\"translate(4.949747, 5.050253) scale(-1, 1) rotate(45.000000) translate(-4.949747, -5.050253) \"\r\n\t\t\t\t\t\tpoints=\"10.9497475 4.05025253 10.9497475 6.05025253 -1.05025253 6.05025253 -1.05025253 4.05025253\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t</g>\r\n\t\t\t</g>\r\n\t\t</svg>\r\n\t);\r\n};\r\n\r\nexport const IconSearch = ({\r\n\twidth,\r\n\theight,\r\n\tfill,\r\n\tstroke,\r\n\t...extraProps\r\n}: IconProps) => {\r\n\treturn (\r\n\t\t<svg\r\n\t\t\twidth={width}\r\n\t\t\theight={height}\r\n\t\t\tviewBox=\"0 0 24 24\"\r\n\t\t\tfill=\"currentColor\"\r\n\t\t\t{...extraProps}\r\n\t\t>\r\n\t\t\t<g stroke=\"none\" strokeWidth=\"1\" fillRule=\"evenodd\">\r\n\t\t\t\t<path d=\"M11.5,3 C15.6421356,3 19,6.35786438 19,10.5 C19,12.3882064 18.3022281,14.1134394 17.1504741,15.4319094 L20.7353039,19.3222625 L19.2646961,20.6777375 L15.6460056,16.7508231 C14.4583701,17.5401288 13.0328894,18 11.5,18 C7.35786438,18 4,14.6421356 4,10.5 C4,6.35786438 7.35786438,3 11.5,3 Z M11.5,5 C14.5375661,5 17,7.46243388 17,10.5 C17,13.5375661 14.5375661,16 11.5,16 C8.46243388,16 6,13.5375661 6,10.5 C6,7.46243388 8.46243388,5 11.5,5 Z\" />\r\n\t\t\t</g>\r\n\t\t</svg>\r\n\t);\r\n};\r\n\r\nexport const IconMenu = ({ width, height, fill, ...extraProps }: IconProps) => {\r\n\treturn (\r\n\t\t<svg\r\n\t\t\twidth={width}\r\n\t\t\theight={height}\r\n\t\t\tfill={fill}\r\n\t\t\tviewBox=\"0 0 24 24\"\r\n\t\t\t{...extraProps}\r\n\t\t>\r\n\t\t\t<g stroke=\"none\" fill=\"currentColor\">\r\n\t\t\t\t<path d=\"M19,16 L19,18 L5,18 L5,16 L19,16 Z M19,11 L19,13 L5,13 L5,11 L19,11 Z M19,6 L19,8 L5,8 L5,6 L19,6 Z\"></path>\r\n\t\t\t</g>\r\n\t\t</svg>\r\n\t);\r\n};\r\n\r\nexport const IconArrow = ({\r\n\twidth,\r\n\theight,\r\n\tfill,\r\n\tstroke,\r\n\t...extraProps\r\n}: IconProps) => {\r\n\treturn (\r\n\t\t<svg width={width} height={height} viewBox=\"0 0 24 24\" {...extraProps}>\r\n\t\t\t<title>Arrow</title>\r\n\t\t\t<g stroke=\"none\" strokeWidth=\"1\" fill={fill} fillRule=\"evenodd\">\r\n\t\t\t\t<path\r\n\t\t\t\t\td=\"M9.51555027,-2.98983061e-13 L15.999,7.999 L16,8 L16,8 C15.9787734,8.02618776 13.9042323,10.585592 9.77622454,15.6784007 L9.51555027,16 L8,14.6970696 L12.674,8.999 L-1.02282627e-11,9 L-1.02282627e-11,7 L12.675,6.999 L8,1.30293044 L9.51555027,-2.98983061e-13 Z\"\r\n\t\t\t\t\ttransform=\"translate(8.000000, 8.000000) scale(-1, -1) rotate(-180.000000) translate(-8.000000, -8.000000) \"\r\n\t\t\t\t/>\r\n\t\t\t</g>\r\n\t\t</svg>\r\n\t);\r\n};\r\n\r\nexport const IconCardView = ({\r\n\twidth,\r\n\theight,\r\n\tfill,\r\n\tstroke,\r\n\t...extraProps\r\n}: IconProps) => {\r\n\treturn (\r\n\t\t<svg\r\n\t\t\twidth={width}\r\n\t\t\theight={height}\r\n\t\t\tviewBox=\"0 0 24 24\"\r\n\t\t\tfill={fill}\r\n\t\t\t{...extraProps}\r\n\t\t>\r\n\t\t\t<title>Cardview</title>\r\n\t\t\t<g stroke=\"none\" strokeWidth=\"1\" fillRule=\"evenodd\">\r\n\t\t\t\t<g transform=\"translate(12.000000, 12.000000) rotate(-270.000000) translate(-12.000000, -12.000000) translate(5.500000, 5.000000)\">\r\n\t\t\t\t\t<path d=\"M6,10 L6,14 L-1.02318154e-12,14 L-1.02318154e-12,10 L6,10 Z M13,10 L13,14 L7,14 L7,10 L13,10 Z M6,5 L6,9 L-1.25055521e-12,9 L-1.25055521e-12,5 L6,5 Z M13,5 L13,9 L7,9 L7,5 L13,5 Z M6,0 L6,4 L-7.95807864e-13,4 L-7.95807864e-13,0 L6,0 Z M13,0 L13,4 L7,4 L7,0 L13,0 Z\" />\r\n\t\t\t\t</g>\r\n\t\t\t</g>\r\n\t\t</svg>\r\n\t);\r\n};\r\n\r\nexport const IconWarning = ({\r\n\twidth,\r\n\theight,\r\n\tfill,\r\n\tstroke,\r\n\t...extraProps\r\n}: IconProps) => {\r\n\treturn (\r\n\t\t<svg width={width} height={height} viewBox=\"0 0 24 24\" {...extraProps}>\r\n\t\t\t<title>Warning</title>\r\n\t\t\t<g stroke=\"none\" strokeWidth=\"1\" fill={fill} fillRule=\"evenodd\">\r\n\t\t\t\t<path d=\"M23.8042476,21 L12,2.11320377 L0.195752358,21 L23.8042476,21 Z M12,5.885 L20.196,19 L3.803,19 L12,5.885 Z M13.008,15.404 L11.424,15.404 L11.424,17 L13.008,17 L13.008,15.404 Z M12.996,10 L11.424,10 L11.424,11.156 L11.76,14.456 L12.66,14.456 L12.996,11.156 L12.996,10 Z\"></path>\r\n\t\t\t</g>\r\n\t\t</svg>\r\n\t);\r\n};\r\n\r\nexport const IconInfo = ({ width, height, fill, stroke }: IconProps) => {\r\n\treturn (\r\n\t\t<svg\r\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\r\n\t\t\twidth={width}\r\n\t\t\theight={height}\r\n\t\t\tviewBox=\"0 0 24 24\"\r\n\t\t\tfill=\"none\"\r\n\t\t\tstroke=\"currentColor\"\r\n\t\t\tstroke-width=\"2\"\r\n\t\t\tstroke-linecap=\"round\"\r\n\t\t\tstroke-linejoin=\"round\"\r\n\t\t>\r\n\t\t\t<title>Info</title>\r\n\t\t\t<circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\r\n\t\t\t<line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line>\r\n\t\t\t<line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line>\r\n\t\t</svg>\r\n\t);\r\n};\r\n\r\nexport const IconPlay = ({\r\n\twidth,\r\n\theight,\r\n\tfill,\r\n\tstroke,\r\n\t...extraProps\r\n}: IconProps) => {\r\n\treturn (\r\n\t\t<svg\r\n\t\t\taria-hidden=\"true\"\r\n\t\t\tfocusable=\"false\"\r\n\t\t\tdata-prefix=\"fas\"\r\n\t\t\tdata-icon=\"play\"\r\n\t\t\trole=\"img\"\r\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\r\n\t\t\tviewBox=\"0 0 448 512\"\r\n\t\t\t{...extraProps}\r\n\t\t>\r\n\t\t\t<path\r\n\t\t\t\tfill=\"currentColor\"\r\n\t\t\t\td=\"M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z\"\r\n\t\t\t></path>\r\n\t\t</svg>\r\n\t);\r\n};\r\n\r\nexport const IconCopy = ({\r\n\twidth,\r\n\theight,\r\n\tfill,\r\n\tstroke,\r\n\t...extraProps\r\n}: IconProps) => {\r\n\treturn (\r\n\t\t<svg\r\n\t\t\twidth={width}\r\n\t\t\theight={height}\r\n\t\t\tfill={fill}\r\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\r\n\t\t\tviewBox=\"0 0 24 24\"\r\n\t\t\t{...extraProps}\r\n\t\t>\r\n\t\t\t<rect fill=\"none\" height=\"24\" width=\"24\" x=\"0\" />\r\n\t\t\t<path d=\"M11.88,9.14c1.28,0.06,1.61,1.15,1.63,1.66h1.79c-0.08-1.98-1.49-3.19-3.45-3.19C9.64,7.61,8,9,8,12.14 c0,1.94,0.93,4.24,3.84,4.24c2.22,0,3.41-1.65,3.44-2.95h-1.79c-0.03,0.59-0.45,1.38-1.63,1.44C10.55,14.83,10,13.81,10,12.14 C10,9.25,11.28,9.16,11.88,9.14z M12,2C6.48,2,2,6.48,2,12s4.48,10,10,10s10-4.48,10-10S17.52,2,12,2z M12,20c-4.41,0-8-3.59-8-8 s3.59-8,8-8s8,3.59,8,8S16.41,20,12,20z\" />\r\n\t\t</svg>\r\n\t);\r\n};\r\n\r\nexport const IconCheck = ({\r\n\twidth,\r\n\theight,\r\n\tfill,\r\n\tstroke,\r\n\t...extraProps\r\n}: IconProps) => {\r\n\treturn (\r\n\t\t<svg\r\n\t\t\twidth={width}\r\n\t\t\theight={height}\r\n\t\t\tfill={fill}\r\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\r\n\t\t\tviewBox=\"0 0 24 24\"\r\n\t\t\t{...extraProps}\r\n\t\t>\r\n\t\t\t<path fill=\"none\" d=\"M0 0h24v24H0z\" />\r\n\t\t\t<path d=\"M10 15.172l9.192-9.193 1.415 1.414L10 18l-6.364-6.364 1.414-1.414z\" />\r\n\t\t</svg>\r\n\t);\r\n};\r\n","/**\r\n * Icon\r\n */\r\n\r\nimport React from 'react';\r\nimport { iconSize } from './Icon.styles';\r\nimport {\r\n\tIconArrow,\r\n\tIconArrowDown,\r\n\tIconCardView,\r\n\tIconChevron,\r\n\tIconClock,\r\n\tIconCross,\r\n\tIconLink,\r\n\tIconListview,\r\n\tIconMenu,\r\n\tIconPlus,\r\n\tIconSearch,\r\n\tIconWarning,\r\n\tIconPlay,\r\n\tIconCopy,\r\n\tIconArrowUp,\r\n\tIconCheck,\r\n} from './IconCollection';\r\n\r\nexport type IconProps = {\r\n\twidth?: string;\r\n\theight?: string;\r\n\tfill?: string;\r\n\tstroke?: string;\r\n};\r\n\r\ninterface Props {\r\n\t/** Set the size of the icon. <br/>1 = 24px<br/> 2 = 32px<br/> 3 = 40px <br/> 4 = 48px*/\r\n\tsize?: 0.5 | 1 | 2 | 3 | 4;\r\n\r\n\t/** Icon name */\r\n\ticon: IconNames;\r\n\r\n\t/** Set the color of the icon */\r\n\tcolor?: string;\r\n}\r\n\r\n/** This is the icon component that handles all the icons in the project. <br /> The user will be able to set the <strong>color</strong>, <strong>size</strong>, <strong>direction</strong> and <strong>animation</strong> for all the icons. */\r\nconst Icon: React.FC<Props> = ({\r\n\ticon,\r\n\tcolor = 'black',\r\n\tsize = 1,\r\n\t...extraProps\r\n}) => {\r\n\tconst iProp = {\r\n\t\twidth: iconSize[size],\r\n\t\theight: iconSize[size],\r\n\t\tfill: color,\r\n\t\tstroke: 'none',\r\n\t\t...extraProps,\r\n\t} as IconProps;\r\n\r\n\treturn React.createElement(IconCollection[icon], {\r\n\t\t'aria-hidden': 'true',\r\n\t\t...iProp,\r\n\t});\r\n};\r\n\r\nexport default Icon;\r\n\r\nexport type IconNames =\r\n\t| 'listview'\r\n\t| 'cardview'\r\n\t| 'link'\r\n\t| 'arrowdown'\r\n\t| 'arrowup'\r\n\t| 'cross'\r\n\t| 'chevron'\r\n\t| 'arrow'\r\n\t| 'plus'\r\n\t| 'search'\r\n\t| 'warning'\r\n\t| 'menu'\r\n\t| 'play'\r\n\t| 'clock'\r\n\t| 'copy'\r\n\t| 'check';\r\n\r\nexport const IconCollection = {\r\n\tarrow: IconArrow,\r\n\tlistview: IconListview,\r\n\tcardview: IconCardView,\r\n\tchevron: IconChevron,\r\n\tlink: IconLink,\r\n\tarrowdown: IconArrowDown,\r\n\tarrowup: IconArrowUp,\r\n\tcross: IconCross,\r\n\tplus: IconPlus,\r\n\tsearch: IconSearch,\r\n\twarning: IconWarning,\r\n\tmenu: IconMenu,\r\n\tclock: IconClock,\r\n\tplay: IconPlay,\r\n\tcopy: IconCopy,\r\n\tcheck: IconCheck,\r\n};\r\n","/**\r\n * Button - styles\r\n */\r\n\r\nimport styled, { css } from 'styled-components';\r\nimport { ButtonProps } from './Button';\r\nimport Link from 'components/Boilerplate/Link';\r\nimport { styleForLink } from 'theme/styles';\r\nimport { hideIcon } from 'components/Boilerplate/Link/Link';\r\nimport { ButtonVariant, ButtonColors } from 'pages/sharedModelTypes';\r\n\r\nexport const getCommonStyle = () => {\r\n\treturn css`\r\n\t\tborder-radius: 24px;\r\n\t\tcursor: pointer;\r\n\r\n\t\tdisplay: inline-flex;\r\n\t\talign-items: center;\r\n\t\tborder: 1px solid transparent;\r\n\t\t${(props) => props.theme.typography.style11.getStyle()};\r\n\r\n\t\tpadding: 0;\r\n\r\n\t\tpadding-top: ${(props) => (props.theme.isMicrositeActive ? '8px' : '10px')};\r\n\t\tpadding-bottom: ${(props) =>\r\n\t\t\tprops.theme.isMicrositeActive ? '8px' : '10px'};\r\n\r\n\t\tpadding-left: 16px;\r\n\t\tpadding-right: 16px;\r\n\r\n\t\tsvg {\r\n\t\t\tfill: inherit;\r\n\t\t\tmargin-top: 0px;\r\n\t\t\tmargin-bottom: 0px;\r\n\r\n\t\t\tmargin-left: 2px;\r\n\t\t\tmargin-right: 2px;\r\n\t\t}\r\n\r\n\t\tspan {\r\n\t\t\tmargin-top: ${(props) => (props.theme.isMicrositeActive ? '0' : '6px')};\r\n\t\t\tmargin-bottom: ${(props) =>\r\n\t\t\t\tprops.theme.isMicrositeActive ? '0' : '1px'};\r\n\t\t\tmargin-left: 4px;\r\n\t\t\tmargin-right: 4px;\r\n\t\t}\r\n\t`;\r\n};\r\n\r\nconst getVariant = (\r\n\tvariant: ButtonVariant | undefined,\r\n\tshowLinkIcon: boolean | undefined\r\n) => {\r\n\tswitch (variant) {\r\n\t\tdefault:\r\n\t\tcase ButtonVariant.Primary:\r\n\t\t\treturn css`\r\n\t\t\t\t${getCommonStyle()};\r\n\t\t\t\tbackground-color: ${(props) => props.theme.colors.secondaryBlue};\r\n\t\t\t\tcolor: ${(props) =>\r\n\t\t\t\t\tprops.theme.isMicrositeActive\r\n\t\t\t\t\t\t? props.theme.palette.primary\r\n\t\t\t\t\t\t: props.theme.colors.white};\r\n\t\t\t\tfill: ${(props) => props.theme.colors.white};\r\n\r\n\t\t\t\t&:hover {\r\n\t\t\t\t\ttransition: background-color 100ms ease;\r\n\t\t\t\t\tbackground-color: ${(props) => props.theme.colors.secondaryBlue}a0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:focus {\r\n\t\t\t\t\toutline-color: ${(props) => props.theme.colors.secondaryBlue};\r\n\t\t\t\t}\r\n\t\t\t`;\r\n\t\tcase ButtonVariant.Secondary:\r\n\t\t\treturn css`\r\n\t\t\t\t${getCommonStyle()};\r\n\t\t\t\tbackground-color: ${(props) => props.theme.colors.white};\r\n\t\t\t\tcolor: ${(props) => props.theme.colors.secondaryBlue};\r\n\t\t\t\tfill: ${(props) => props.theme.colors.secondaryBlue};\r\n\r\n\t\t\t\t&:hover {\r\n\t\t\t\t\ttransition: background-color 100ms ease;\r\n\t\t\t\t\tbackground-color: ${(props) => props.theme.colors.white}a0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:focus {\r\n\t\t\t\t\toutline-color: ${(props) => props.theme.colors.white};\r\n\t\t\t\t}\r\n\t\t\t`;\r\n\t\tcase ButtonVariant.Tertiary:\r\n\t\t\treturn css`\r\n\t\t\t\t${getCommonStyle()};\r\n\r\n\t\t\t\tbackground-color: ${(props) => props.theme.colors.white};\r\n\t\t\t\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\t\t\t\tfill: ${(props) => props.theme.palette.text.primary};\r\n\r\n\t\t\t\tborder-color: ${(props) => props.theme.colors.grey1};\r\n\t\t\t\t&:hover {\r\n\t\t\t\t\tfill: ${(props) => props.theme.palette.text.primary};\r\n\t\t\t\t\ttransition: background-color 100ms ease;\r\n\t\t\t\t\tbackground-color: ${(props) => props.theme.colors.blue2}60;\r\n\t\t\t\t}\r\n\t\t\t`;\r\n\t\tcase ButtonVariant.Link:\r\n\t\t\tif (showLinkIcon === false) {\r\n\t\t\t\treturn css`\r\n\t\t\t\t\t${styleForLink};\r\n\t\t\t\t\t${hideIcon};\r\n\t\t\t\t`;\r\n\t\t\t}\r\n\r\n\t\t\treturn styleForLink;\r\n\t\tcase ButtonVariant.Microsite:\r\n\t\t\treturn css`\r\n\t\t\t\t${getCommonStyle()};\r\n\t\t\t\tbackground-color: ${(props) => props.theme.colors.white};\r\n\t\t\t\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\t\t\t\tfill: ${(props) => props.theme.palette.text.primary};\r\n\r\n\t\t\t\tborder-color: ${(props) => props.theme.palette.text.primary};\r\n\t\t\t\t&:hover {\r\n\t\t\t\t\ttransition: background-color 100ms ease;\r\n\t\t\t\t\tborder: none;\r\n\t\t\t\t\tfill: ${(props) => props.theme.palette.text.secondary};\r\n\t\t\t\t\tbackground-color: ${(props) => props.theme.colors.primary};\r\n\t\t\t\t\tcolor: ${(props) => props.theme.palette.text.secondary};\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:focus {\r\n\t\t\t\t\toutline-color: 'currentColor';\r\n\t\t\t\t}\r\n\t\t\t\tspan {\r\n\t\t\t\t\tpadding-right: 2px;\r\n\t\t\t\t}\r\n\t\t\t`;\r\n\t}\r\n};\r\n\r\nconst getLinkButtonStyle = (variant: ButtonVariant | undefined) => {\r\n\tif (variant === ButtonVariant.Link) {\r\n\t\treturn css`\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\tspan {\r\n\t\t\t\tmargin-top: 2px;\r\n\t\t\t\tline-height: normal;\r\n\t\t\t}\r\n\t\t\talign-items: center;\r\n\t\t`;\r\n\t}\r\n\r\n\treturn css`\r\n\t\t&:hover {\r\n\t\t\ttext-decoration: none;\r\n\t\t}\r\n\t`;\r\n};\r\n\r\nexport const StandardButton = styled.button<ExtendedButtonProps>`\r\n\t${({ variant, showLinkIcon }) => getVariant(variant, showLinkIcon)};\r\n\r\n\t${({ variant }) =>\r\n\t\tvariant === ButtonVariant.Link &&\r\n\t\t`cursor:pointer;\r\n\t\tborder:none;\r\n\t\tdisplay: inline-flex;\r\n\t\tspan {\r\n\t\t\tmargin-top: 2px;\r\n\t\t\tline-height: normal;\r\n\t\t}\r\n \talign-items: center;\r\n\t\tpadding:0px;\r\n\t\tbackground-color:transparent;`}\r\n\r\n\t${({ $fill }) => $fill && `width:100%;max-width:none;text-align: center;`}\r\n\r\n\t${({ disabled, theme }) =>\r\n\t\t`\r\n opacity: ${disabled ? '0.35' : '1'};\r\n \r\n ${\r\n\t\t\tdisabled &&\r\n\t\t\t!theme.isMicrositeActive &&\r\n\t\t\t`\r\n &:hover {\r\n color: ${theme.palette.text.primary};\r\n border: 1px solid transparent;\r\n cursor: not-allowed;\r\n box-shadow: none;\r\n transition: none;\r\n fill: none;\r\n border-color: ${theme.colors.grey1};\r\n }\r\n `\r\n\t\t}\r\n `}\r\n`;\r\n\r\nexport const LinkButton = styled(Link)<ExtendedButtonProps>`\r\n\t${({ variant, showLinkIcon }) => getVariant(variant, showLinkIcon)};\r\n\r\n\t${({ variant }) => getLinkButtonStyle(variant)};\r\n\r\n\t${({ $fill }) => $fill && `width:100%;max-width:none;text-align: center;`}\r\n`;\r\n\r\ninterface ExtendedButtonProps extends ButtonProps {\r\n\t$color?: ButtonColors; // transient props (we do want these to be rendered in the DOM)\r\n\t$fill?: boolean;\r\n\tshowLinkIcon?: boolean;\r\n}\r\n","/**\r\n * Button\r\n */\r\n\r\nimport Icon from 'components/Boilerplate/Icon';\r\nimport { IconNames } from 'components/Boilerplate/Icon/Icon';\r\nimport React from 'react';\r\nimport { StandardButton, LinkButton } from './Button.styles';\r\nimport { ButtonVariant, ButtonColors } from 'pages/sharedModelTypes';\r\n\r\nexport interface ButtonProps {\r\n\ttype?: 'submit' | 'button' | 'reset';\r\n\tvariant?: ButtonVariant;\r\n\tcolor?: ButtonColors;\r\n\tfill?: boolean;\r\n\ticonName?: IconNames;\r\n\ticonColor?: string;\r\n\ticonPosition?: number;\r\n\tonClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n\tclassName?: any;\r\n\ttabIndex?: number;\r\n\tchildren?: any;\r\n\tdisabled?: boolean;\r\n\tto?: string;\r\n\texternal?: boolean;\r\n\tshowLinkIcon?: boolean;\r\n}\r\n\r\nexport type PlayIconProps = {\r\n\thover: boolean;\r\n};\r\n\r\n//\tsize?: 'large' | 'medium' | 'small';\r\n\r\n/** A button / link component. */\r\nconst Button = React.forwardRef<any, ButtonProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tvariant = ButtonVariant.Primary,\r\n\t\t\tcolor,\r\n\t\t\tto,\r\n\t\t\tfill,\r\n\t\t\ttype = 'button',\r\n\t\t\tonClick,\r\n\t\t\ttabIndex,\r\n\t\t\tchildren,\r\n\t\t\ticonName,\r\n\t\t\ticonColor,\r\n\t\t\ticonPosition = 0,\r\n\t\t\tclassName,\r\n\t\t\tdisabled,\r\n\t\t\tshowLinkIcon,\r\n\t\t\texternal,\r\n\t\t\t...propsToTransfer\r\n\t\t},\r\n\t\tref\r\n\t) => {\r\n\t\tlet content;\r\n\t\tif (iconName) {\r\n\t\t\tif (iconPosition === 0) {\r\n\t\t\t\tcontent = (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<Icon color={iconColor} size={2} icon={iconName} />\r\n\t\t\t\t\t\t{children && <span>{children}</span>}\r\n\t\t\t\t\t</>\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\tcontent = (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t{children && <span>{children}</span>}\r\n\t\t\t\t\t\t<Icon color={iconColor} size={2} icon={iconName} />\r\n\t\t\t\t\t</>\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tcontent = <span>{children}</span>;\r\n\t\t}\r\n\r\n\t\tif (to) {\r\n\t\t\treturn (\r\n\t\t\t\t<LinkButton\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\ttabIndex={tabIndex}\r\n\t\t\t\t\tvariant={variant}\r\n\t\t\t\t\t$fill={fill}\r\n\t\t\t\t\tto={to}\r\n\t\t\t\t\t$color={color}\r\n\t\t\t\t\tshowLinkIcon={showLinkIcon}\r\n\t\t\t\t\texternal={external}\r\n\t\t\t\t\t{...propsToTransfer}\r\n\t\t\t\t>\r\n\t\t\t\t\t{content}\r\n\t\t\t\t</LinkButton>\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn (\r\n\t\t\t<StandardButton\r\n\t\t\t\tref={ref}\r\n\t\t\t\tclassName={className}\r\n\t\t\t\tonClick={onClick}\r\n\t\t\t\tvariant={variant}\r\n\t\t\t\t$fill={fill}\r\n\t\t\t\t$color={color}\r\n\t\t\t\ttabIndex={tabIndex}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\t{...propsToTransfer}\r\n\t\t\t>\r\n\t\t\t\t{content}\r\n\t\t\t</StandardButton>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nexport default Button;\r\n","/**\r\n * BannerPanel\r\n */\r\nimport React, { useContext } from 'react';\r\nimport {\r\n\tBannerPanelHeaderStyle,\r\n\tBannerPanelStyle,\r\n\tDecalStyle,\r\n} from './BannerPanel.styles';\r\nimport Button from 'components/Button';\r\nimport Typography from 'components/Typography';\r\nimport {\r\n\tgetThemeHeadingColor,\r\n\tgetThemePrimaryButton,\r\n\tLinkType,\r\n\tPuffTheme,\r\n} from 'pages/sharedModelTypes';\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport { ThemeContext } from 'styled-components';\r\n\r\n/** Text panel with header, text and an action */\r\nexport type BannerPanelProps = {\r\n\tthemeName?: PuffTheme | null;\r\n\t/**\r\n\t * Decal\r\n\t */\r\n\tdecal?: string | null;\r\n\r\n\t/**\r\n\t * Heading level\r\n\t */\r\n\theadingLevel?: number;\r\n\r\n\t/**\r\n\t * Heading text\r\n\t */\r\n\theading?: string | null;\r\n\t/**\r\n\t * text\r\n\t */\r\n\ttext?: string | null;\r\n\t/**\r\n\t * Link\r\n\t */\r\n\tlink?: LinkType | null;\r\n\r\n\t/**\r\n\t * Link to bottom\r\n\t */\r\n\talignbottom?: boolean;\r\n\r\n\t/**\r\n\t * Center text\r\n\t */\r\n\tcenter?: boolean;\r\n};\r\n\r\n/** This is the HeaderTextActionPanel component */\r\nexport const BannerPanel: React.FC<BannerPanelProps> = ({\r\n\tthemeName,\r\n\tdecal,\r\n\theadingLevel,\r\n\theading,\r\n\ttext,\r\n\tlink,\r\n\tcenter,\r\n\talignbottom,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\tconst primaryButtonVariant = getThemePrimaryButton(themeName);\r\n\r\n\treturn (\r\n\t\t<BannerPanelStyle\r\n\t\t\talignbottom={alignbottom}\r\n\t\t\tthemeName={themeName}\r\n\t\t\tcenter={center}\r\n\t\t>\r\n\t\t\t<BannerPanelHeaderStyle>\r\n\t\t\t\t{decal && <DecalStyle themeName={themeName}>{decal}</DecalStyle>}\r\n\t\t\t\t{heading && (\r\n\t\t\t\t\t<Heading\r\n\t\t\t\t\t\tlevel={headingLevel}\r\n\t\t\t\t\t\tstyleLevel={2}\r\n\t\t\t\t\t\tcolor={getThemeHeadingColor(themeContext, themeName)}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{heading}\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t)}\r\n\t\t\t\t{text && <Typography as=\"p\">{text}</Typography>}\r\n\t\t\t</BannerPanelHeaderStyle>\r\n\t\t\t{alignbottom && <span></span>}\r\n\t\t\t{link && link.url && link.heading && (\r\n\t\t\t\t<Button\r\n\t\t\t\t\tvariant={primaryButtonVariant}\r\n\t\t\t\t\tto={link.url}\r\n\t\t\t\t\texternal={link.isFile ?? false}\r\n\t\t\t\t>\r\n\t\t\t\t\t{link.heading}\r\n\t\t\t\t</Button>\r\n\t\t\t)}\r\n\t\t</BannerPanelStyle>\r\n\t);\r\n};\r\n\r\nexport default BannerPanel;\r\n","/**\r\n * BannerTextLinks - styles\r\n * https://styled-components.com/docs/advanced#referring-to-other-components\r\n */\r\n\r\nimport { ThemeProps } from 'components/Banner/Banner';\r\nimport { getThemeBackground, getThemeTextColor } from 'pages/sharedModelTypes';\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme/media-queries';\r\nimport { BannerTextLinksProps } from './BannerTextLinks';\r\n\r\nexport const BannerTextLinksStyle = styled.div<BannerTextLinksProps>`\r\n\tpadding: ${props => props.theme.spacing.space6}rem 0rem;\r\n\t${mediaQueries.tablet} {\r\n\t\tpadding: ${props => props.theme.spacing.space4}rem ${props => props.theme.spacing.space2}rem;\r\n\t}\r\n\t${mediaQueries.phone} {\r\n\t\tpadding: ${props => props.theme.spacing.space4}rem 0;\r\n\t}\r\n\r\n\tbackground-color: ${(p) => getThemeBackground(p.theme, p.themeName)};\r\n`;\r\n\r\nexport const BannerTextLinksListStyle = styled.ul`\r\n\tlist-style-type: none;\r\n\tpadding: 0px;\r\n\tmargin: 0px;\r\n\talign-self: center;\r\n\r\n\t> li:last-child {\r\n\t\tmargin-bottom: ${0}rem;\r\n\t}\r\n\r\n\t${mediaQueries.tablet} {\r\n\t\talign-self: auto;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t${mediaQueries.phone} {\r\n\t\talign-self: auto;\r\n\t\ttext-align: center;\r\n\t}\r\n`;\r\n\r\nexport const BannerTextLinksListItemStyle = styled.li<ThemeProps>`\r\n\ta {\r\n\t\tcolor: ${(p) => getThemeTextColor(p.theme, p.themeName)};\r\n\t}\r\n\tmargin-bottom: ${props => props.theme.spacing.space2}rem;\r\n`;\r\n","/**\r\n * Panels - styles\r\n */\r\n\r\nimport { ThemeProps } from 'components/Banner/Banner';\r\nimport { getThemeBorderColor } from 'pages/sharedModelTypes';\r\nimport styled, { css } from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\nimport { px2rem } from 'theme/utils';\r\nimport { listViewMode } from './Panels';\r\n\r\nexport const Div = styled.div``;\r\n\r\nexport type Placement = {\r\n\ttextToRight: boolean;\r\n};\r\n\r\nexport const ColumnContainerDevider = styled.div<ThemeProps>`\r\n\topacity: 0.25;\r\n\twidth: 1px;\r\n\tbackground-color: ${(p) => getThemeBorderColor(p.theme, p.themeName)};\r\n\tjustify-self: center;\r\n`;\r\n\r\nexport const ColumnContainerWithDevider = styled.div<Placement>`\r\n\tdisplay: grid;\r\n\r\n\tgrid-template-columns: 1fr ${(props) => props.theme.spacing.space5 * 2}rem 1fr;\r\n\r\n\t> :last-child {\r\n\t\t${(p) => p.textToRight && 'grid-column: 1;grid-row: 1;'};\r\n\t}\r\n\t> :first-child {\r\n\t\t${(p) => p.textToRight && 'grid-column: 3;grid-row: 1;'};\r\n\t}\r\n\r\n\t${mediaQueries.phoneOrTablet} {\r\n\t\tgrid-template-columns: 100%;\r\n\t\t> :first-child {\r\n\t\t\tgrid-row: 1;\r\n\t\t\tgrid-column: 1;\r\n\t\t}\r\n\t\t> :last-child {\r\n\t\t\tgrid-row: 3;\r\n\t\t\tgrid-column: 1;\r\n\t\t}\r\n\r\n\t\t${ColumnContainerDevider as any} {\r\n\t\t\tmargin: ${(props) => props.theme.spacing.space2 * 2}rem 0rem;\r\n\t\t\theight: 1px;\r\n\t\t\twidth: 100%;\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nexport const LabelContainer = styled.div<any>`\r\n\tdisplay: inline-flex;\r\n\tflex-direction: ${(props) => (props.flexRow ? 'row' : 'column')};\r\n\talign-items: ${(props) => (props.flexRow ? 'baseline' : null)};\r\n\t> :first-child {\r\n\t\tdisplay: block;\r\n\t\tmargin-right: ${(props) => (props.flexRow ? '0.5rem' : '0px')};\r\n\t}\r\n`;\r\n\r\nexport const FieldsetContainer = styled.fieldset<any>`\r\n\tdisplay: inline-flex;\r\n\talign-items: ${(props) => (props.flexRow ? 'baseline' : null)};\r\n\tflex-direction: ${(props) => (props.flexRow ? 'row' : 'column')} !important;\r\n\t> :first-child {\r\n\t\tdisplay: block;\r\n\t\tmargin-right: ${(props) => (props.flexRow ? '0.5rem' : '0px')};\r\n\t}\r\n\tflex-wrap: wrap;\r\n\tmargin-right: ${(props) => props.theme.spacing.space3}rem !important;\r\n`;\r\n\r\nexport const LabelWrapper = styled.div`\r\n\tlegend,\r\n\tlabel {\r\n\t\tfont-family: 'Akkurat Pro';\r\n\t\tfont-weight: bold;\r\n\t\tmargin-bottom: 6px;\r\n\t}\r\n`;\r\n\r\nconst getListStyle = () => {\r\n\treturn css`\r\n\t\tflex-direction: column;\r\n\t\tflex-wrap: nowrap;\r\n\t`;\r\n};\r\n\r\nexport const ListItemsStyle = styled.div<listViewMode>`\r\n\tdisplay: flex;\r\n\tflex-wrap: wrap;\r\n\t${(p) => p.cardView === false && getListStyle()};\r\n\r\n\t& > * {\r\n\t\tmargin-bottom: ${(props) => props.theme.spacing.space2}rem;\r\n\t}\r\n\r\n\t${mediaQueries.phone} {\r\n\t\t> :last-child {\r\n\t\t\tmargin-bottom: ${(props) =>\r\n\t\t\t\tprops.theme.isMicrositeActive ? '1' : '0'}rem;\r\n\t\t}\r\n\t}\r\n\r\n\t${mediaQueries.tabletOrLarger} {\r\n\t\tmargin-bottom: ${(props) =>\r\n\t\t\tprops.theme.isMicrositeActive ? '0' : '-1'}rem;\r\n\r\n\t\tmargin-right: -${(props) => props.theme.spacing.space2}rem;\r\n\t\t& > * {\r\n\t\t\tmargin-bottom: ${(props) => props.theme.spacing.space2}rem;\r\n\t\t\tmargin-right: ${(props) => props.theme.spacing.space2}rem;\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nexport const CommonDecalStyle = styled.span`\r\n\t${(props) => props.theme.typography.style13.getStyle()};\r\n\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\tletter-spacing: 1.07px;\r\n\ttext-transform: uppercase;\r\n`;\r\n\r\nexport const NFSText = styled.div`\r\n\t${(props) => props.theme.typography.style9.getStyle()};\r\n\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\tletter-spacing: 1.07px;\r\n\ttext-transform: uppercase;\r\n\tmargin-top: 0.5rem;\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tfont-size: ${px2rem(14)};\r\n\t}\r\n`;\r\n\r\nexport const ListingPageDecalStyle = styled.div`\r\n\t${(props) => props.theme.typography.style13.getStyle()};\r\n\tcolor: ${(props) => props.theme.colors.secondaryBrown};\r\n\tletter-spacing: 1.07px;\r\n\ttext-transform: uppercase;\r\n\tpadding-bottom: 4px;\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tfont-size: ${px2rem(14)};\r\n\t}\r\n`;\r\n","/**\r\n * BannerTextLinks\r\n */\r\nimport React from 'react';\r\nimport { LinkType, PuffTheme } from 'pages/sharedModelTypes';\r\nimport BannerPanel from 'components/BannerPanel';\r\nimport Link from 'components/Boilerplate/Link';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport {\r\n\tBannerTextLinksListItemStyle,\r\n\tBannerTextLinksListStyle,\r\n\tBannerTextLinksStyle,\r\n} from './BannerTextLinks.styles';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport {\r\n\tColumnContainerDevider,\r\n\tColumnContainerWithDevider,\r\n} from 'components/Panels/Panels.styles';\r\n\r\nexport interface BannerTextLinksProps {\r\n\tthemeName?: PuffTheme;\r\n\t/**\r\n\t * Heading level\r\n\t */\r\n\theadingLevel?: number;\r\n\t/**\r\n\t * Heading text\r\n\t */\r\n\theading?: string;\r\n\r\n\tpreamble?: string;\r\n\tlink?: LinkType;\r\n\ttextToRight?: boolean;\r\n\r\n\t/**\r\n\t * Links\r\n\t */\r\n\tlinks?: LinkType[];\r\n}\r\n\r\n/** This is the banner component */\r\nconst BannerTextLinks: React.FC<BannerTextLinksProps> = ({\r\n\tthemeName,\r\n\theadingLevel,\r\n\theading,\r\n\tpreamble,\r\n\tlink,\r\n\tlinks = [],\r\n\ttextToRight = false,\r\n}) => {\r\n\tconst isPhone = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.tablet - 1,\r\n\t});\r\n\r\n\tconst isTablet = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.tablet,\r\n\t\tmaxWidth: breakpointsNumber.desktop - 1,\r\n\t});\r\n\treturn (\r\n\t\t<BannerTextLinksStyle themeName={themeName}>\r\n\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t<ColumnContainerWithDevider textToRight={textToRight}>\r\n\t\t\t\t\t<BannerPanel\r\n\t\t\t\t\t\theadingLevel={headingLevel}\r\n\t\t\t\t\t\tcenter={isPhone || isTablet ? true : false}\r\n\t\t\t\t\t\tthemeName={themeName}\r\n\t\t\t\t\t\theading={heading}\r\n\t\t\t\t\t\ttext={preamble}\r\n\t\t\t\t\t\tlink={link}\r\n\t\t\t\t\t></BannerPanel>\r\n\r\n\t\t\t\t\t<ColumnContainerDevider\r\n\t\t\t\t\t\tthemeName={themeName}\r\n\t\t\t\t\t></ColumnContainerDevider>\r\n\r\n\t\t\t\t\t{links.length > 0 && (\r\n\t\t\t\t\t\t<BannerTextLinksListStyle>\r\n\t\t\t\t\t\t\t{links?.map((item, index) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<BannerTextLinksListItemStyle\r\n\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\tthemeName={themeName}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<Link\r\n\t\t\t\t\t\t\t\t\t\t\tto={item.url}\r\n\t\t\t\t\t\t\t\t\t\t\ttarget={item.target}\r\n\t\t\t\t\t\t\t\t\t\t\texternal={item.isFile}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{item.heading}\r\n\t\t\t\t\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t\t\t\t\t</BannerTextLinksListItemStyle>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t</BannerTextLinksListStyle>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</ColumnContainerWithDevider>\r\n\t\t\t</Grid>\r\n\t\t</BannerTextLinksStyle>\r\n\t);\r\n};\r\n\r\nexport default BannerTextLinks;\r\n","/**\r\n * BannerPuffText - styles\r\n */\r\n\r\nimport { getThemeBackground } from 'pages/sharedModelTypes';\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme/media-queries';\r\nimport { BannerPuffTextProps } from './BannerPuffText';\r\n\r\nexport const BannerPuffTextStyle = styled.div<BannerPuffTextProps>`\r\n\tdisplay: flex;\r\n\tjustify-content: center;\r\n\r\n\tpadding: ${props => props.theme.spacing.space7}rem ${props => props.theme.spacing.space6}rem;\r\n\t${mediaQueries.phoneOrTablet} {\r\n\t\tpadding: ${props => props.theme.spacing.space6}rem ${props => props.theme.spacing.space2}rem;\r\n\t}\r\n\r\n\tbackground-color: ${(p) => getThemeBackground(p.theme, p.themeName)};\r\n`;\r\n","/**\r\n * BannerPuffText\r\n */\r\nimport React from 'react';\r\nimport { BannerPuffTextStyle } from './BannerPuffText.styles';\r\nimport { LinkType, PuffTheme } from 'pages/sharedModelTypes';\r\nimport BannerPanel from 'components/BannerPanel';\r\n\r\nexport interface BannerPuffTextProps {\r\n\tthemeName?: PuffTheme;\r\n\t/**\r\n\t * Heading level\r\n\t */\r\n\theadingLevel?: number;\r\n\t/**\r\n\t * Heading text\r\n\t */\r\n\theading?: string;\r\n\tpreamble?: string | null;\r\n\tlink?: LinkType | null;\r\n\tdecal?: string;\r\n\tcenter?: boolean;\r\n}\r\n\r\n/** This is the banner component */\r\nconst BannerPuffText: React.FC<BannerPuffTextProps> = ({\r\n\tthemeName,\r\n\theadingLevel,\r\n\theading,\r\n\tpreamble,\r\n\tlink,\r\n\tdecal,\r\n\tcenter = true,\r\n}) => {\r\n\treturn (\r\n\t\t<BannerPuffTextStyle themeName={themeName}>\r\n\t\t\t<BannerPanel\r\n\t\t\t\theadingLevel={headingLevel}\r\n\t\t\t\tcenter={center}\r\n\t\t\t\tdecal={decal}\r\n\t\t\t\tthemeName={themeName}\r\n\t\t\t\theading={heading}\r\n\t\t\t\ttext={preamble}\r\n\t\t\t\tlink={link}\r\n\t\t\t></BannerPanel>\r\n\t\t</BannerPuffTextStyle>\r\n\t);\r\n};\r\n\r\nexport default BannerPuffText;\r\n","/**\r\n * BannerPuffTextImage - styles\r\n */\r\n\r\nimport { BannerPanelStyle } from 'components/BannerPanel/BannerPanel.styles';\r\nimport { getThemeBackground } from 'pages/sharedModelTypes';\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme/media-queries';\r\nimport { BannerPuffTextImageProps } from './BannerPuffTextImage';\r\n\r\nexport const BannerPuffTextImageStyle = styled.div<BannerPuffTextImageProps>`\r\n\tbackground-color: ${(p) => getThemeBackground(p.theme, p.themeName)};\r\n\r\n\t${mediaQueries.tabletOrLarger} {\r\n\t\tmin-height: 25rem;\r\n\t}\r\n\r\n\t${BannerPanelStyle as any} {\r\n\t\tpadding: ${props => props.theme.spacing.space5}rem ${props => props.theme.spacing.space6}rem;\r\n\t\t${mediaQueries.phoneOrTablet} {\r\n\t\t\tpadding: ${props => props.theme.spacing.space4}rem ${props => props.theme.spacing.space2}rem;\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nexport const BannerPuffTextImageImage = styled.img`\r\n\twidth: 100%;\r\n\theight:100%;\r\n\tobject-fit: cover;\r\n`;\r\n\r\nexport const ColumnContainer = styled.div<BannerPuffTextImageProps>`\r\n\tdisplay: grid;\r\n\tgrid-template-columns:50% 50%;\r\n\r\n\t> :last-child {\r\n\t\t${(p) => p.textToRight && 'grid-row: 1'};\r\n\t}\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tgrid-template-columns: 100%;\r\n\t\t> :last-child {\r\n\t\t\tgrid-row: 1;\r\n\t\t}\r\n\t}\r\n\t${mediaQueries.tabletOrLarger} {\r\n\t\tmin-height: 25rem;\r\n\t}\t\r\n`;\r\n\r\n","import { useSelector } from \"react-redux\";\r\nimport { selectLocalization } from \"store/modules/model\";\r\nimport { translate } from \"utils/helper-utils\";\r\n\r\nexport const useImageTitle = (photographer?: string, agency?: string, illustrator?: string) => {\r\n \r\n const localization = useSelector(selectLocalization);\r\n\tconst photographerLabel = translate(\r\n\t\t'/frontend/image/photographer',\r\n\t\t'Photographer',\r\n\t\tlocalization\r\n\t);\r\n\r\n\tconst agencyLabel = translate(\r\n\t\t'/frontend/image/agency',\r\n\t\t'Agency',\r\n\t\tlocalization\r\n\t);\r\n\r\n\tconst illustratorLabel = translate(\r\n\t\t'/frontend/image/illustrator',\r\n\t\t'Illustrator',\r\n\t\tlocalization\r\n\t);\r\n\r\n let parts: string[] = [];\r\n let labels: string[] = [];\r\n const separator = \":\";\r\n\r\n if (photographer) {\r\n parts = [photographer ?? \"\", agency ?? \"\"];\r\n labels = [photographerLabel, agencyLabel];\r\n }\r\n\r\n if (illustrator) {\r\n parts = [illustrator ?? \"\", agency ?? \"\"];\r\n labels = [illustratorLabel, agencyLabel];\r\n }\r\n\r\n if (parts.length != labels.length) {\r\n\t\treturn \"\";\r\n\t}\r\n\r\n\tconst sb: string[] = [];\r\n\r\n\tfor (let i: number = 0; i < parts.length; i++) {\r\n\t\tif (parts[i] && labels[i]) {\r\n sb.push(`${labels[i]}${separator} ${parts[i]}`);\r\n }\r\n\t}\r\n\r\n\treturn sb.join(\"\\n\");\r\n};","/**\r\n * BannerPuffTextImage\r\n */\r\nimport React from 'react';\r\nimport {\r\n\tBannerPuffTextImageImage,\r\n\tBannerPuffTextImageStyle,\r\n\tColumnContainer,\r\n} from './BannerPuffTextImage.styles';\r\nimport { LinkType, PuffTheme } from 'pages/sharedModelTypes';\r\nimport BannerPanel from 'components/BannerPanel';\r\nimport { ImageFragmentModel } from 'types/fragments';\r\nimport { useImageTitle } from 'hooks/useImageTitle';\r\n\r\nexport interface BannerPuffTextImageProps {\r\n\ttextToRight?: boolean;\r\n\tthemeName?: PuffTheme;\r\n\tdecal?: string;\r\n\r\n\t/**\r\n\t * Heading text\r\n\t */\r\n\theadingLevel?: number;\r\n\theading?: string;\r\n\ttext?: string | null;\r\n\tlink?: LinkType | null;\r\n\timage?: ImageFragmentModel;\r\n}\r\n\r\n// Todo: textToRight (switch column order )\r\n\r\n// Todo: Adapt so we also can show Video\r\n// Todo: Remove to BannerPuffTextMedia\r\n\r\nconst BannerPuffTextImage: React.FC<BannerPuffTextImageProps> = ({\r\n\ttextToRight = false,\r\n\tthemeName,\r\n\tdecal,\r\n\theadingLevel,\r\n\theading,\r\n\ttext,\r\n\tlink,\r\n\timage,\r\n}) => {\r\n\r\n\tconst title = useImageTitle(image?.photographer, image?.agency, image?.illustrator);\r\n\r\n\treturn (\r\n\t\t<BannerPuffTextImageStyle themeName={themeName}>\r\n\t\t\t<ColumnContainer textToRight={textToRight}>\r\n\t\t\t\t<BannerPanel\r\n\t\t\t\t\theadingLevel={headingLevel}\r\n\t\t\t\t\talignbottom={true}\r\n\t\t\t\t\tthemeName={themeName}\r\n\t\t\t\t\tdecal={decal}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\ttext={text}\r\n\t\t\t\t\tlink={link}\r\n\t\t\t\t></BannerPanel>\r\n\t\t\t\t{image && (\r\n\t\t\t\t\t<BannerPuffTextImageImage\r\n\t\t\t\t\t\tsrc={image.src}\r\n\t\t\t\t\t\talt={image.alt}\r\n\t\t\t\t\t\tsrcSet={image.srcSet}\r\n\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t></BannerPuffTextImageImage>\r\n\t\t\t\t)}\r\n\t\t\t</ColumnContainer>\r\n\t\t</BannerPuffTextImageStyle>\r\n\t);\r\n};\r\n\r\nexport default BannerPuffTextImage;\r\n","/**\r\n * BannerPuffTextYoutube - styles\r\n */\r\n\r\nimport { BannerPanelStyle } from 'components/BannerPanel/BannerPanel.styles';\r\nimport { getThemeBackground } from 'pages/sharedModelTypes';\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme/media-queries';\r\nimport { BannerPuffTextYoutubeProps } from './BannerPuffTextYoutube';\r\n\r\nexport const BannerPuffTextYoutubeStyle = styled.div<BannerPuffTextYoutubeProps>`\r\n\tbackground-color: ${(p) => getThemeBackground(p.theme, p.themeName)};\r\n\r\n\t${mediaQueries.tabletOrLarger} {\r\n\t\tmin-height: 25rem;\r\n\t}\r\n\r\n\t${BannerPanelStyle as any} {\r\n\t\tpadding: ${props => props.theme.spacing.space5}rem ${props => props.theme.spacing.space6}rem;\r\n\t\t${mediaQueries.phoneOrTablet} {\r\n\t\t\tpadding: ${props => props.theme.spacing.space4}rem ${props => props.theme.spacing.space2}rem;\r\n\t\t}\r\n\t}\r\n`;\r\n","/**\r\n * YouTube - styles\r\n */\r\n\r\nimport { PlayIconProps } from 'components/Button/Button';\r\nimport Icon from 'components/Boilerplate/Icon';\r\nimport styled from 'styled-components';\r\n\r\nexport const YoutubeContainer = styled.div`\r\n\toverflow: hidden;\r\n\tposition: relative;\r\n\twidth: 100%;\r\n\r\n\t::after {\r\n\t\tpadding-top: 56.25%;\r\n\t\tdisplay: block;\r\n\t\tcontent: '';\r\n\t}\r\n\r\n\tiframe {\r\n\t\tposition: absolute;\r\n\t\ttop: 0;\r\n\t\tleft: 0;\r\n\t\twidth: 100%;\r\n\t\theight: 100%;\r\n\t}\r\n`;\r\n\r\nexport const Overlay = styled.img`\r\n\tposition: absolute;\r\n\tdisplay: block;\r\n\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\tobject-fit: cover;\r\n\r\n\tcursor: pointer;\r\n`;\r\n\r\nexport const PlayIconArea = styled.div<PlayIconProps>`\r\n\tmargin: 0;\r\n\tposition: absolute;\r\n\ttop: 50%;\r\n\tleft: 50%;\r\n\t-ms-transform: translate(-50%, -50%);\r\n\ttransform: translate(-50%, -50%);\r\n\t${(props) => props.theme.typography.style11.getStyle()};\r\n\r\n\tbutton > span {\r\n\t\tmargin: 0;\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t}\r\n\r\n\t${(p) =>\r\n\t\tp.hover === true &&\r\n\t\t`\r\n\t\tbutton, button:hover {\r\n\t\t\tcolor:white;\r\n\t\t\ttransition: background-color 200ms ease;\r\n\t\t\tbackground-color: ${p.theme.colors.secondaryBlue};\r\n\t\t}\r\n\t`};\r\n`;\r\n\r\nexport const PlayIcon = styled(Icon)`\r\n\twidth: 1rem;\r\n\theight: 1rem;\r\n`;\r\n","/**\r\n * YouTube\r\n */\r\n\r\nimport Button from 'components/Button';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport React, { useEffect, useState } from 'react';\r\nimport {\r\n\tYoutubeContainer,\r\n\tPlayIconArea,\r\n\tPlayIcon,\r\n\tOverlay,\r\n} from './YouTube.styles';\r\nimport Icon from 'components/Boilerplate/Icon';\r\n\r\nexport interface YouTubeProps {\r\n\tvideoId: string;\r\n\ttitle: string;\r\n\tallowfullscreen: boolean;\r\n}\r\n\r\n/** A YouTube / link component. */\r\nconst YouTube: React.FC<YouTubeProps> = ({\r\n\tvideoId = 'Kuh2um0DS8E',\r\n\ttitle = 'Movie',\r\n\tallowfullscreen = true,\r\n}) => {\r\n\tconst getSourceUrl = (videoId: string): string => {\r\n\t\treturn `https://www.youtube-nocookie.com/embed/${videoId}?autoplay=1`;\r\n\t};\r\n\r\n\tconst getImageForOverlay = (videoId: string): string => {\r\n\t\treturn `https://i.ytimg.com/vi/${videoId}/hqdefault.jpg`;\r\n\t};\r\n\r\n\tconst [videoSource, setVideoSource] = useState(getSourceUrl(videoId));\r\n\tconst [titleState, setTitleState] = useState(title);\r\n\tconst [allowfullscreenState, setAllowfullscreenState] = useState(\r\n\t\tallowfullscreen\r\n\t);\r\n\tconst [playVideo, setPlayVideo] = useState<boolean>(false);\r\n\tconst [onHover, setOnHover] = useState<boolean>(false);\r\n\r\n\tuseEffect(() => {\r\n\t\tsetVideoSource(getSourceUrl(videoId));\r\n\t\tsetTitleState(title);\r\n\t\tsetAllowfullscreenState(allowfullscreen);\r\n\t}, [videoId, title, allowfullscreen]);\r\n\r\n\tconst onClick = () => {\r\n\t\tsetPlayVideo(true);\r\n\t};\r\n\tconst btnText = `Spela video`;\r\n\r\n\treturn (\r\n\t\t<YoutubeContainer>\r\n\t\t\t{playVideo ? (\r\n\t\t\t\t<iframe\r\n\t\t\t\t\ttitle={titleState}\r\n\t\t\t\t\tsrc={videoSource}\r\n\t\t\t\t\tframeBorder=\"0\"\r\n\t\t\t\t\tallow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\r\n\t\t\t\t\tallowFullScreen={allowfullscreenState}\r\n\t\t\t\t></iframe>\r\n\t\t\t) : (\r\n\t\t\t\t<div\r\n\t\t\t\t\tonClick={onClick}\r\n\t\t\t\t\tonMouseEnter={() => setOnHover(true)}\r\n\t\t\t\t\tonMouseLeave={() => setOnHover(false)}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Overlay\r\n\t\t\t\t\t\tsrc={getImageForOverlay(videoId)}\r\n\t\t\t\t\t\talt=\"Youtube video\"\r\n\t\t\t\t\t></Overlay>\r\n\r\n\t\t\t\t\t<PlayIconArea hover={onHover}>\r\n\t\t\t\t\t\t<Button variant={ButtonVariant.Secondary}>\r\n\t\t\t\t\t\t\t<span>{btnText}</span>\r\n\t\t\t\t\t\t\t<PlayIcon icon=\"play\" size={1} aria-hidden=\"true\" />\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</PlayIconArea>\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t</YoutubeContainer>\r\n\t);\r\n};\r\n\r\nexport default YouTube;\r\n","/**\r\n * BannerPuffTextYoutube\r\n */\r\nimport React from 'react';\r\nimport {\r\n\tBannerPuffTextYoutubeStyle,\r\n} from './BannerPuffTextYoutube.styles';\r\nimport { LinkType, PuffTheme } from 'pages/sharedModelTypes';\r\nimport BannerPanel from 'components/BannerPanel';\r\nimport YouTube from 'components/YouTube';\r\nimport { YouTubeFragmentModel } from 'types/fragments';\r\nimport { ColumnContainer } from '../BannerPuffTextImage/BannerPuffTextImage.styles';\r\n\r\nexport interface BannerPuffTextYoutubeProps {\r\n\ttextToRight?: boolean;\r\n\tthemeName?: PuffTheme;\r\n\tdecal?: string;\r\n\t/**\r\n\t * Heading level\r\n\t */\r\n\theadingLevel?: number;\r\n\theading?: string;\r\n\ttext?: string | null;\r\n\tlink?: LinkType | null;\r\n\tyoutube?: YouTubeFragmentModel;\r\n}\r\n\r\nconst BannerPuffTextYoutube: React.FC<BannerPuffTextYoutubeProps> = ({\r\n\ttextToRight = false,\r\n\tthemeName,\r\n\tdecal,\r\n\theading,\r\n\theadingLevel,\r\n\ttext,\r\n\tlink,\r\n\tyoutube,\r\n}) => {\r\n\treturn (\r\n\t\t<BannerPuffTextYoutubeStyle themeName={themeName}>\r\n\t\t\t<ColumnContainer textToRight={textToRight}>\r\n\t\t\t\t<BannerPanel\r\n\t\t\t\t\theadingLevel={headingLevel}\r\n\t\t\t\t\talignbottom={true}\r\n\t\t\t\t\tthemeName={themeName}\r\n\t\t\t\t\tdecal={decal}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\ttext={text}\r\n\t\t\t\t\tlink={link}\r\n\t\t\t\t></BannerPanel>\r\n\r\n\t\t\t\t{youtube && (\r\n\t\t\t\t\t<YouTube\r\n\t\t\t\t\t\ttitle={youtube.title}\r\n\t\t\t\t\t\tvideoId={youtube.videoID}\r\n\t\t\t\t\t\tallowfullscreen={youtube.allowFullScreen}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\t\t\t</ColumnContainer>\r\n\t\t</BannerPuffTextYoutubeStyle>\r\n\t);\r\n};\r\n\r\nexport default BannerPuffTextYoutube;\r\n","/**\r\n * RichText\r\n */\r\n\r\nimport React, { useRef, useEffect } from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { RichText as RichTextStyle } from 'components/Typography';\r\nimport { EpiEvent } from 'types/epi';\r\n\r\ntype Props = {\r\n\tepi?: EpiEvent;\r\n};\r\n\r\n/** Richtext components which handles links. */\r\nconst RichText: React.FC<Props> = ({ epi, children }) => {\r\n\tconst history = useHistory();\r\n\tconst nodeRef = useRef<HTMLDivElement>(null);\r\n\r\n\tfunction handleLinkClick(this: HTMLAnchorElement, event: MouseEvent): void {\r\n\t\tconst href = this.getAttribute('href');\r\n\t\tconst target = this.getAttribute('target');\r\n\t\tconst isFile = this.getAttribute('data-type') === 'file';\r\n\t\tif (href && href.charAt(0) === '/' && target !== '_blank' && !isFile) {\r\n\t\t\tconst isAImage = /\\.(jpe?g|png|gif|bmp|svg)$/i.test(href) ? true : false;\r\n\t\t\tif (!isAImage) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\thistory.push(href);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\tconst nodeRefRef = nodeRef;\r\n\t\tif (nodeRef.current && !epi?.inEditMode) {\r\n\t\t\tnodeRef.current.querySelectorAll('a').forEach((a) => {\r\n\t\t\t\ta.addEventListener('click', handleLinkClick);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\tif (nodeRefRef.current) {\r\n\t\t\t\tnodeRefRef.current.querySelectorAll('a').forEach((a) => {\r\n\t\t\t\t\ta.removeEventListener('click', handleLinkClick);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\t\t// eslint-disable-next-line\r\n\t}, []);\r\n\r\n\treturn <RichTextStyle ref={nodeRef}>{children}</RichTextStyle>;\r\n};\r\n\r\nexport default RichText;\r\n","/**\r\n * Puff - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\n\r\nexport const Block = styled.div`\r\n\tdisplay: block;\r\n\tpadding: 1rem;\r\n\tword-wrap: break-word;\r\n`;\r\n","/**\r\n * Image - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\n\r\nexport const Img = styled.img`\r\n\tdisplay: block;\r\n\twidth: 100%;\r\n`;\r\n\r\nexport const Figure = styled.figure`\r\n\tmargin: 0 0 1rem;\r\n\tmargin-top: 2.5rem;\r\n\tmargin-block-end: 0;\r\n\r\n\t${Img} {\r\n\t\tmargin-bottom: 0;\r\n\t}\r\n`;\r\n\r\nexport const FigCaption = styled.figcaption`\r\n\t\t\t${props => props.theme.typography.style13.getStyle()};\t\t\r\n\r\n\tpadding: 10px 0px;\r\n\tcolor: ${props => props.theme.palette.text.primary};\t\t\t\r\n\twidth: 100%;\r\n`;\r\n","import React from 'react';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport { Img } from './Image.styles';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\n\r\ninterface LinkableImageProps {\r\n\tsrc?: string;\r\n\tsrcSet?: string;\r\n\talt?: string;\r\n\t/** Pass optional css class names for the html */\r\n\tclassName?: string;\r\n\ttitle?: string;\r\n\tlink?: LinkType;\r\n\t/** Optional other html props will be spread on the component */\r\n\t[htmlAttributes: string]: any;\r\n}\r\n\r\nconst LinkableImage: React.FC<LinkableImageProps> = ({\r\n\tsrc,\r\n\tsrcSet,\r\n\talt,\r\n\tclassName,\r\n\ttitle,\r\n\thtmlAttributes,\r\n\tlink,\r\n}) => {\r\n\tif (link) {\r\n\t\tif (link.isFile) {\r\n\t\t\treturn (\r\n\t\t\t\t<a\r\n\t\t\t\t\thref={link.url}\r\n\t\t\t\t\ttarget=\"_self\"\r\n\t\t\t\t\trel={link.rel ?? undefined}\r\n\t\t\t\t\ttitle={link.heading}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Img\r\n\t\t\t\t\t\tsrc={src}\r\n\t\t\t\t\t\tsrcSet={srcSet}\r\n\t\t\t\t\t\talt={alt}\r\n\t\t\t\t\t\tclassName={className}\r\n\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t\t{...htmlAttributes}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</a>\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<RouterLink\r\n\t\t\t\t\tto={link.url}\r\n\t\t\t\t\ttarget={link.target ?? '_self'}\r\n\t\t\t\t\trel={link.rel ?? undefined}\r\n\t\t\t\t\ttitle={link.heading}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Img\r\n\t\t\t\t\t\tsrc={src}\r\n\t\t\t\t\t\tsrcSet={srcSet}\r\n\t\t\t\t\t\talt={alt}\r\n\t\t\t\t\t\tclassName={className}\r\n\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t\t{...htmlAttributes}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</RouterLink>\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t<Img\r\n\t\t\tsrc={src}\r\n\t\t\tsrcSet={srcSet}\r\n\t\t\talt={alt}\r\n\t\t\tclassName={className}\r\n\t\t\ttitle={title}\r\n\t\t\t{...htmlAttributes}\r\n\t\t/>\r\n\t);\r\n};\r\n\r\nexport default LinkableImage;\r\n","/**\r\n * Image\r\n */\r\n\r\nimport React from 'react';\r\nimport { Figure, FigCaption } from './Image.styles';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport LinkableImage from './LinkableImage';\r\n\r\nexport interface ImageProps {\r\n\t/** The image src */\r\n\tsrc?: string;\r\n\r\n\tsrcSet?: string;\r\n\r\n\t/** The image alt */\r\n\talt?: string;\r\n\r\n\t/** Pass optional classnames for the html */\r\n\tclassName?: string;\r\n\r\n\t/** The image figure caption */\r\n\tfigCaption?: string;\r\n\r\n\ttitle?: string;\r\n\r\n\t/**\r\n\t * Link object\r\n\t */\r\n\tlink?: LinkType;\r\n\r\n\t/** Optional other html props will be spread on the component */\r\n\t[htmlAttributes: string]: any;\r\n}\r\n\r\n/** The image component with or without the figure caption. */\r\nconst Image: React.FC<ImageProps> = ({\r\n\tsrc,\r\n\tsrcSet,\r\n\talt,\r\n\tclassName,\r\n\tfigCaption,\r\n\ttitle,\r\n\tlink,\r\n\t...htmlAttributes\r\n}) => {\r\n\tif (!src) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{!figCaption && (\r\n\t\t\t\t<LinkableImage\r\n\t\t\t\t\tsrc={src}\r\n\t\t\t\t\tsrcSet={srcSet}\r\n\t\t\t\t\talt={alt}\r\n\t\t\t\t\tclassName={className}\r\n\t\t\t\t\ttitle={title}\r\n\t\t\t\t\thtmlAttributes={{ ...htmlAttributes }}\r\n\t\t\t\t\tlink={link}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{figCaption && (\r\n\t\t\t\t<Figure>\r\n\t\t\t\t\t<LinkableImage\r\n\t\t\t\t\t\tsrc={src}\r\n\t\t\t\t\t\tsrcSet={srcSet}\r\n\t\t\t\t\t\talt={alt}\r\n\t\t\t\t\t\tclassName={className}\r\n\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t\thtmlAttributes={{ ...htmlAttributes }}\r\n\t\t\t\t\t\tlink={link}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<FigCaption>{figCaption}</FigCaption>\r\n\t\t\t\t</Figure>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default Image;\r\n","import Image, { ImageProps } from './Image';\r\nexport default Image;\r\nexport type { ImageProps };\r\n","/**\r\n * Puff\r\n */\r\n\r\nimport React from 'react';\r\nimport { PuffWithImageModel } from 'types/blocks';\r\nimport { Block } from './Puff.styles';\r\n\r\nimport Link from 'components/Boilerplate/Link';\r\nimport Image from 'components/Boilerplate/Image';\r\nimport Typography from 'components/Typography';\r\n\r\n/** Puff with image, text and link. */\r\nexport const PuffWithImage: React.FC<PuffWithImageModel> = ({\r\n\tid,\r\n\theading,\r\n\timage,\r\n\turl,\r\n\tlinkText,\r\n\ttext,\r\n\t_properties = {},\r\n}) => {\r\n\treturn (\r\n\t\t<Block id={id} key={id} {..._properties?.block}>\r\n\t\t\t<div {..._properties?.image}>\r\n\t\t\t\t<Image src={image} alt={heading} />\r\n\t\t\t</div>\r\n\t\t\t<Typography as=\"h2\" {..._properties?.heading}>\r\n\t\t\t\t{heading}\r\n\t\t\t</Typography>\r\n\t\t\t<Typography as=\"p\" {..._properties?.text}>\r\n\t\t\t\t{text}\r\n\t\t\t</Typography>\r\n\r\n\t\t\t{url && linkText && (\r\n\t\t\t\t<Link to={url} {..._properties?.url}>\r\n\t\t\t\t\t{linkText}\r\n\t\t\t\t</Link>\r\n\t\t\t)}\r\n\r\n\t\t\t{_properties?.linkText && (\r\n\t\t\t\t<Typography as=\"p\" {..._properties?.linkText}>\r\n\t\t\t\t\t{linkText}\r\n\t\t\t\t</Typography>\r\n\t\t\t)}\r\n\t\t</Block>\r\n\t);\r\n};\r\n\r\nexport default PuffWithImage;\r\n","import { ImageFragmentModel } from 'types/fragments';\r\nimport Image from 'components/Boilerplate/Image';\r\nimport { Options } from '../EpiFragments';\r\nimport { ModelLocalization } from 'types/epi';\r\nimport { translate } from 'utils/helper-utils';\r\n\r\nexport const GetImageElement = (\r\n\timgData: ImageFragmentModel,\r\n\tlocalization: ModelLocalization | undefined,\r\n\toptions?: Options\r\n) => {\r\n\tconst title = getTitle(imgData, localization);\r\n\r\n\treturn (\r\n\t\t<Image\r\n\t\t\tsrc={imgData.src}\r\n\t\t\tsrcSet={imgData.srcSet}\r\n\t\t\talt={imgData.alt}\r\n\t\t\tfigCaption={imgData.caption}\r\n\t\t\ttitle={title}\r\n\t\t\tlink={imgData.link}\r\n\t\t/>\r\n\t);\r\n};\r\n\r\nconst getTitle = (\r\n\timgData: ImageFragmentModel,\r\n\tlocalization: ModelLocalization | undefined\r\n) => {\r\n\tconst photographerLabel = translate(\r\n\t\t'/frontend/image/photographer',\r\n\t\t'Photographer',\r\n\t\tlocalization\r\n\t);\r\n\r\n\tconst agencyLabel = translate(\r\n\t\t'/frontend/image/agency',\r\n\t\t'Agency',\r\n\t\tlocalization\r\n\t);\r\n\r\n\tconst illustratorLabel = translate(\r\n\t\t'/frontend/image/illustrator',\r\n\t\t'Illustrator',\r\n\t\tlocalization\r\n\t);\r\n\r\n\tlet parts: string[] = [];\r\n\tlet labels: string[] = [];\r\n\tconst separator = ':';\r\n\r\n\tif (imgData.photographer) {\r\n\t\tparts = [imgData.photographer ?? '', imgData.agency ?? ''];\r\n\t\tlabels = [photographerLabel, agencyLabel];\r\n\t}\r\n\r\n\tif (imgData.illustrator) {\r\n\t\tparts = [imgData.illustrator ?? '', imgData.agency ?? ''];\r\n\t\tlabels = [illustratorLabel, agencyLabel];\r\n\t}\r\n\r\n\tif (parts.length != labels.length) {\r\n\t\treturn '';\r\n\t}\r\n\r\n\tconst sb: string[] = [];\r\n\r\n\tfor (let i: number = 0; i < parts.length; i++) {\r\n\t\tif (parts[i] && labels[i]) {\r\n\t\t\tsb.push(`${labels[i]}${separator} ${parts[i]}`);\r\n\t\t}\r\n\t}\r\n\r\n\treturn sb.join('\\n');\r\n};\r\n","/**\r\n * ResponsiveIframe - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\n\r\nexport interface ResponsiveIframeWrapperProps {\r\n\t/** The aspect ratio of the video:\r\n\t *\r\n\t * - 16:9 - most common format, used by YouTube videos.\r\n\t * - 4:3 - used mostly by older videos.\r\n\t */\r\n\taspectRatio?: '16:9' | '4:3';\r\n}\r\n\r\nexport const ResponsiveIframeWrapper = styled.div<ResponsiveIframeWrapperProps>`\r\n\tposition: relative;\r\n\toverflow: hidden;\r\n\twidth: 100%;\r\n\tpadding-top: ${({ aspectRatio = '16:9' }) =>\r\n\t\taspectRatio === '16:9' ? '56.25%' : '75%'};\r\n`;\r\n\r\nexport const Iframe = styled.iframe`\r\n\tposition: absolute;\r\n\ttop: 0;\r\n\tleft: 0;\r\n\tbottom: 0;\r\n\tright: 0;\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\tborder: 0;\r\n`;\r\n","/**\r\n * ResponsiveIframe\r\n */\r\n\r\nimport React from 'react';\r\nimport {\r\n\tResponsiveIframeWrapperProps,\r\n\tResponsiveIframeWrapper,\r\n\tIframe,\r\n} from './ResponsiveIframe.styles';\r\n\r\ninterface Props extends ResponsiveIframeWrapperProps {\r\n\t/** Iframe src */\r\n\tsrc: string;\r\n\r\n\t/** Aria-label for the component */\r\n\t'aria-label': string;\r\n}\r\n\r\n/** Used to render a responsive iframe. */\r\nconst ResponsiveIframe: React.FC<Props> = ({\r\n\tsrc,\r\n\t'aria-label': ariaLabel,\r\n\taspectRatio = '16:9',\r\n}) => {\r\n\treturn (\r\n\t\t<ResponsiveIframeWrapper aspectRatio={aspectRatio}>\r\n\t\t\t<Iframe src={src} aria-label={ariaLabel} />\r\n\t\t</ResponsiveIframeWrapper>\r\n\t);\r\n};\r\n\r\nexport default ResponsiveIframe;\r\n","/**\r\n * ExpanderPrototype - styles\r\n */\r\nimport {\r\n\tPuffTheme,\r\n\tgetThemeBackground,\r\n\tgetThemeHeadingColor,\r\n\tgetThemeTextColor,\r\n} from 'pages/sharedModelTypes';\r\nimport styled from 'styled-components';\r\nimport { ExpanderPrototypeStyleProps } from './ExpanderPrototype';\r\n\r\nexport const IconElement = styled.div`\r\n\talign-self: center;\r\n`;\r\n\r\nexport const ExpanderPrototypeHeader = styled.div<ExpanderPrototypeStyleProps>`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tbackground-color: ${(p) => getThemeBackground(p.theme, p.themeName)};\r\n\tcolor: ${(p) => getThemeHeadingColor(p.theme, p.themeName)};\r\n\t${(p) => p.isEnabled && `cursor: pointer;`}\r\n\t&:focus {\r\n\t\toutline-offset: 0px;\r\n\t\toutline: 2px solid;\r\n\t\toutline-color: currentcolor;\r\n\t}\r\n\tscroll-margin-top: 150px;\r\n`;\r\n\r\nexport const ExpanderPrototypeHeaderContent = styled.div<ExpanderPrototypeStyleProps>`\r\n\tdisplay: flex;\r\n\tjustify-content: space-between;\r\n\r\n\tpadding: ${(props) => props.theme.spacing.space4}rem;\r\n\r\n\tsvg {\r\n\t\ttransform: ${({ isOpen }) => (isOpen ? 'rotate(270deg)' : 'rotate(90deg)')};\r\n\t\talign-self: center;\r\n\t\tflex: 0 0 auto;\r\n\t\tmargin-left: 1rem;\r\n\t}\r\n`;\r\n\r\nexport const ExpanderPrototypeContent = styled.div<ExpanderPrototypeStyleProps>`\r\n\tdisplay: ${(p) => (p.isOpen ? 'inherit' : 'none')};\r\n\tpadding-top: ${(props) => props.theme.spacing.space4}rem;\r\n\tpadding-bottom: ${(props) => props.theme.spacing.space4}rem;\r\n\t${(p) =>\r\n\t\tp.themeName &&\r\n\t\t`padding-left: ${p.theme.spacing.space4}rem;padding-right: ${\r\n\t\t\tp.theme.spacing.space4\r\n\t\t}rem;background-color: ${getThemeBackground(p.theme, p.themeName)};`}\r\n\t${(p) => !p.themeName && `padding-bottom: 0;`}\r\n\r\n\th1,h2,h3,h4,h5,h6 {\r\n\t\tcolor: ${(p) => getThemeHeadingColor(p.theme, p.themeName)};\r\n\t}\r\n\r\n\t${(p) =>\r\n\t\t(p.themeName === PuffTheme.GreenDark ||\r\n\t\t\tp.themeName === PuffTheme.BlueDark ||\r\n\t\t\tp.themeName === PuffTheme.BrownDark) &&\r\n\t\t`\r\n\t\tp, li {\r\n\t\t\tcolor: ${getThemeTextColor(p.theme, p.themeName)}; \r\n\t\t}\r\n\t`}\r\n\r\n\ta {\r\n\t\tcolor: ${(p) => getThemeTextColor(p.theme, p.themeName)};\r\n\t}\r\n`;\r\nexport const HeaderDevider = styled.div`\r\n\tborder-bottom: 1px solid ${(props) => props.theme.colors.primary};\r\n\topacity: 0.24;\r\n`;\r\n","/**\r\n * ExpanderPrototype\r\n */\r\n\r\nimport React, { useEffect, useState } from 'react';\r\nimport {\r\n\tExpanderPrototypeHeader,\r\n\tExpanderPrototypeHeaderContent,\r\n\tExpanderPrototypeContent,\r\n\tHeaderDevider,\r\n} from './ExpanderPrototype.styles';\r\nimport Icon from 'components/Boilerplate/Icon';\r\nimport { PuffTheme } from 'pages/sharedModelTypes';\r\n\r\nexport type ExpanderPrototypeContainerProps = {\r\n\tisOpen: boolean;\r\n};\r\n\r\nexport type ExpanderPrototypeStyleProps = {\r\n\tisEnabled?: boolean;\r\n\tisOpen?: boolean;\r\n\tthemeName?: PuffTheme;\r\n};\r\n\r\nexport interface ExpanderPrototypeProps {\r\n\theading: string | JSX.Element | null;\r\n\tisOpen?: boolean;\r\n\tisEnabled?: boolean;\r\n\tthemeHeader?: PuffTheme;\r\n\tid?: string;\r\n\tthemeContent?: PuffTheme | undefined;\r\n}\r\n\r\n/** A ExpanderPrototype component. */\r\nconst ExpanderPrototype: React.FC<ExpanderPrototypeProps> = ({\r\n\theading,\r\n\tisOpen = true,\r\n\tisEnabled = true,\r\n\tchildren,\r\n\tid = 'expander',\r\n\tthemeHeader,\r\n\tthemeContent,\r\n}) => {\r\n\tconst [isOpenState, setIsOpenState] = useState(isOpen);\r\n\tconst [isEnabledState, setIsEnabledState] = useState(isEnabled);\r\n\r\n\tconst elementId = `${id}-content`;\r\n\r\n\tuseEffect(() => {\r\n\t\tsetIsOpenState(isOpen);\r\n\t}, [isOpen]);\r\n\r\n\tuseEffect(() => {\r\n\t\tsetIsEnabledState(isEnabled);\r\n\t}, [isEnabled]);\r\n\r\n\tconst headerClicked = () => {\r\n\t\tsetIsOpenState(!isOpenState);\r\n\t};\r\n\r\n\tconst handleContainerKeyPress = (\r\n\t\tevent: React.KeyboardEvent<HTMLDivElement>\r\n\t) => {\r\n\t\tswitch (event.key) {\r\n\t\t\tcase 'Enter':\r\n\t\t\tcase ' ':\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tsetIsOpenState(!isOpenState);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t};\r\n\r\n\t// Todo.. wrap header content in a heading element <h2,h3, etc..>\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<ExpanderPrototypeHeader\r\n\t\t\t\taria-expanded={isOpenState}\r\n\t\t\t\taria-controls={elementId}\r\n\t\t\t\ttabIndex={0}\r\n\t\t\t\trole=\"button\"\r\n\t\t\t\taria-disabled={!isEnabled}\r\n\t\t\t\tonKeyDown={handleContainerKeyPress}\r\n\t\t\t\tonClick={isEnabledState ? headerClicked : undefined}\r\n\t\t\t\tthemeName={themeHeader}\r\n\t\t\t\tisOpen={isOpenState}\r\n\t\t\t\tisEnabled={isEnabledState}\r\n\t\t\t>\r\n\t\t\t\t<ExpanderPrototypeHeaderContent isOpen={isOpenState}>\r\n\t\t\t\t\t{heading && heading}\r\n\t\t\t\t\t{children && isEnabledState && <Icon icon=\"chevron\" size={1} />}\r\n\t\t\t\t</ExpanderPrototypeHeaderContent>\r\n\r\n\t\t\t\t{isOpenState && themeHeader === themeContent && (\r\n\t\t\t\t\t<HeaderDevider></HeaderDevider>\r\n\t\t\t\t)}\r\n\t\t\t</ExpanderPrototypeHeader>\r\n\r\n\t\t\t<ExpanderPrototypeContent\r\n\t\t\t\trole=\"region\"\r\n\t\t\t\tid={elementId}\r\n\t\t\t\tisOpen={isOpenState}\r\n\t\t\t\tthemeName={themeContent}\r\n\t\t\t>\r\n\t\t\t\t{children}\r\n\t\t\t</ExpanderPrototypeContent>\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default ExpanderPrototype;\r\n","import { ThemeProps } from 'components/Banner/Banner';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport Button from 'components/Button/Button';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport ExpanderPrototype from 'components/ExpanderPrototype';\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport { getThemeHeadingColor, PuffTheme } from 'pages/sharedModelTypes';\r\nimport React, { useContext } from 'react';\r\nimport styled, { ThemeContext } from 'styled-components';\r\nimport { px2rem } from 'theme/utils';\r\nimport { LegalBoxModel } from 'types/fragments';\r\nimport EpiFragments, { Options } from '../EpiFragments';\r\nimport { IconInfo } from 'components/Boilerplate/Icon/IconCollection';\r\n\r\nexport const GetLegalBoxModelElement = (\r\n\tlegalBoxData: LegalBoxModel,\r\n\toptions: Options,\r\n\tdisableCustomHeadingLogic: boolean\r\n) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst themeName = PuffTheme.BrownLight;\r\n\r\n\tconst headingElement = (\r\n\t\t<LegalBoxHeaderContainer>\r\n\t\t\t<LegalParagraphStyle themeName={themeName}>\r\n\t\t\t\t{legalBoxData.showIcon ? <IconInfo width=\"36\" height=\"36\" /> : '§'}\r\n\t\t\t</LegalParagraphStyle>\r\n\t\t\t<Heading\r\n\t\t\t\tlevel={options.headingLevel}\r\n\t\t\t\tcolor={getThemeHeadingColor(themeContext, themeName)}\r\n\t\t\t\tstyleLevel={4}\r\n\t\t\t\tzeroBottom={true}\r\n\t\t\t>\r\n\t\t\t\t{legalBoxData.name}\r\n\t\t\t\t{legalBoxData.sfsNumber && <br />}\r\n\t\t\t\t{legalBoxData.sfsNumber && legalBoxData.sfsNumber}\r\n\t\t\t</Heading>\r\n\t\t</LegalBoxHeaderContainer>\r\n\t);\r\n\treturn (\r\n\t\t<ExpanderPrototype\r\n\t\t\theading={headingElement}\r\n\t\t\tthemeHeader={themeName}\r\n\t\t\tthemeContent={PuffTheme.BrownLight}\r\n\t\t\tisOpen={!legalBoxData.showAsClosed}\r\n\t\t>\r\n\t\t\t<EpiFragments\r\n\t\t\t\tfragments={legalBoxData.textAsModel.fragments}\r\n\t\t\t\tinsideCell={options.insideCell}\r\n\t\t\t\tinsideGrid={options.insideGrid}\r\n\t\t\t\tinsideInnerGrid={options.insideInnerGrid}\r\n\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t></EpiFragments>\r\n\r\n\t\t\t{legalBoxData.link && (\r\n\t\t\t\t<Space top={themeContext.spacing.space5}>\r\n\t\t\t\t\t<Button variant={ButtonVariant.Secondary} to={legalBoxData.link.url}>\r\n\t\t\t\t\t\t{legalBoxData.link.heading}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t</Space>\r\n\t\t\t)}\r\n\t\t</ExpanderPrototype>\r\n\t);\r\n};\r\n\r\nconst LegalBoxHeaderContainer = styled.div`\r\n\tdisplay: flex;\r\n`;\r\n\r\nconst LegalParagraphStyle = styled.div<ThemeProps>`\r\n\t${(props) => props.theme.typography.style5.getStyle()};\r\n\tline-height: unset;\r\n\tfont-size: ${px2rem(52)};\r\n\tcolor: ${(p) => getThemeHeadingColor(p.theme, p.themeName)};\r\n\r\n\tmargin-right: ${(props) => props.theme.spacing.space3}rem;\r\n\r\n\tsvg {\r\n\t\ttransform: rotate(0deg);\r\n\t}\r\n`;\r\n","/**\r\n * ListHeader - styles\r\n */\r\n\r\nimport styled, { css } from 'styled-components';\r\nimport Link from 'components/Boilerplate/Link';\r\nimport { mediaQueries } from 'theme';\r\nimport { Heading } from 'components/Typography/Typography';\r\n\r\nexport const ListHeaderStyle = styled.div`\r\n\tdisplay: flex;\r\n\tflex-wrap: wrap;\r\n\talign-items: baseline;\r\n\r\n\t@media (max-width: 768px) {\r\n\t\tflex-direction: column;\r\n\t}\r\n`;\r\n\r\ntype AddRightMargin = {\r\n\taddRightMargin: boolean;\r\n};\r\n\r\nconst getightMargin = () => {\r\n\treturn css`\r\n\t\tmargin-right: ${(props) => props.theme.spacing.space2}rem;\r\n\t`;\r\n};\r\n\r\nexport const ListHeadingStyle = styled(Heading)<AddRightMargin>`\r\n\t${({ addRightMargin }) => addRightMargin && getightMargin()}\r\n`;\r\n\r\nexport const ListHeaderLinkStyle = styled(Link)`\r\n\tmargin-top: ${(props) => props.theme.spacing.space1}rem;\r\n`;\r\n\r\nexport const ListHeaderMetadataStyle = styled.div`\r\n\tflex-grow: 1;\r\n\tdisplay: flex;\r\n\talign-self: stretch;\r\n\r\n\t@media (max-width: 768px) {\r\n\t\tflex-wrap: wrap;\r\n\t\tflex-direction: column;\r\n\t\tmargin-top: 1rem;\r\n\t}\r\n`;\r\n\r\nexport const ListHeaderControllsContainerStyle = styled.div`\r\n\tdisplay: flex;\r\n\tflex-grow: 1;\r\n\talign-items: baseline;\r\n`;\r\n\r\nexport const ListHeaderSwitchesStyle = styled.div`\r\n\t${mediaQueries.phone} {\r\n\t\tdisplay: none;\r\n\t}\r\n\r\n\t*:not(:last-child) {\r\n\t\tmargin-right: ${(props) => props.theme.spacing.space2}rem;\r\n\t}\r\n\r\n\tinput[type='radio'] {\r\n\t\topacity: 0;\r\n\t\tposition: fixed;\r\n\t\twidth: 0;\r\n\t}\r\n\r\n\tinput[type='radio']:checked + label {\r\n\t\tborder: 2px solid ${(props) => props.theme.colors.secondaryBlue};\r\n\t\tsvg {\r\n\t\t\tfill: ${(props) => props.theme.colors.secondaryBlue};\r\n\t\t}\r\n\t}\r\n\r\n\tlabel {\r\n\t\tcursor: pointer;\r\n\t\tdisplay: inline-flex;\r\n\t\tjustify-content: center;\r\n\t\talign-items: center;\r\n\t\tbackground-color: #ffffff;\r\n\t\tborder: 1px solid rgba(0, 0, 0, 0.25);\r\n\t\tborder-radius: 10px;\r\n\t\theight: 42px;\r\n\t\twidth: 42px;\r\n\t}\r\n`;\r\n","import React from 'react';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport {\r\n\tListHeaderControllsContainerStyle,\r\n\tListHeaderLinkStyle,\r\n\tListHeaderMetadataStyle,\r\n\tListHeaderStyle,\r\n\tListHeaderSwitchesStyle,\r\n\tListHeadingStyle,\r\n} from './ListHeader.styles';\r\nimport { ViewType } from 'types/enums';\r\nimport Icon from 'components/Boilerplate/Icon';\r\n\r\nexport interface ListHeaderProps {\r\n\t/**\r\n\t * Heading level\r\n\t */\r\n\theading?: string | undefined | null;\r\n\t/**\r\n\t * Heading level\r\n\t */\r\n\theadingLevel?: number | undefined;\r\n\t/**\r\n\t * Heading level\r\n\t */\r\n\tsectionStyle?: boolean;\r\n\t/**\r\n\t * Link\r\n\t */\r\n\tlink?: LinkType | null;\r\n\r\n\t/**\r\n\t * Color\r\n\t */\r\n\tcolor?: string;\r\n\r\n\t/**\r\n\t * show Card/List options\r\n\t */\r\n\tshowOptions?: boolean;\r\n\r\n\tonViewChange?: (value: ViewType) => void;\r\n\tdefaultValue?: ViewType;\r\n}\r\n\r\n/**\r\n * # ListHeader\r\n *\r\n * ListHeader\r\n */\r\nconst ListHeader: React.FC<ListHeaderProps> = ({\r\n\theadingLevel,\r\n\tsectionStyle,\r\n\theading,\r\n\tlink,\r\n\tcolor,\r\n\tonViewChange,\r\n\tdefaultValue,\r\n\tshowOptions,\r\n\tchildren,\r\n}) => {\r\n\tconst getStyleLevel = (): number => {\r\n\t\treturn headingLevel ? headingLevel : 2;\r\n\t};\r\n\treturn (\r\n\t\t<ListHeaderStyle>\r\n\t\t\t{heading && (\r\n\t\t\t\t<ListHeadingStyle\r\n\t\t\t\t\taddRightMargin={link ? true : false}\r\n\t\t\t\t\tcolor={color}\r\n\t\t\t\t\tzeroBottom={true}\r\n\t\t\t\t\tlevel={headingLevel}\r\n\t\t\t\t\tstyleLevel={getStyleLevel()}\r\n\t\t\t\t>\r\n\t\t\t\t\t{heading}\r\n\t\t\t\t</ListHeadingStyle>\r\n\t\t\t)}\r\n\r\n\t\t\t{link && (\r\n\t\t\t\t<ListHeaderLinkStyle to={link.url} external={link.isFile}>\r\n\t\t\t\t\t{link.heading}\r\n\t\t\t\t</ListHeaderLinkStyle>\r\n\t\t\t)}\r\n\t\t\t{children ||\r\n\t\t\t\t(showOptions && (\r\n\t\t\t\t\t<ListHeaderControllsContainerStyle>\r\n\t\t\t\t\t\t{children && (\r\n\t\t\t\t\t\t\t<ListHeaderMetadataStyle>{children}</ListHeaderMetadataStyle>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showOptions && onViewChange && (\r\n\t\t\t\t\t\t\t<ListHeaderSwitchesStyle>\r\n\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\taria-label=\"List\"\r\n\t\t\t\t\t\t\t\t\ttype=\"radio\"\r\n\t\t\t\t\t\t\t\t\tid=\"radioList\"\r\n\t\t\t\t\t\t\t\t\tname=\"radioViewType\"\r\n\t\t\t\t\t\t\t\t\tchecked={defaultValue === ViewType.List}\r\n\t\t\t\t\t\t\t\t\tonChange={(e) => onViewChange(e.target.value as ViewType)}\r\n\t\t\t\t\t\t\t\t\tvalue={ViewType.List}\r\n\t\t\t\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t\t\t\t<label htmlFor=\"radioList\">\r\n\t\t\t\t\t\t\t\t\t<Icon size={2} icon=\"listview\"></Icon>\r\n\t\t\t\t\t\t\t\t</label>\r\n\r\n\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\taria-label=\"Card\"\r\n\t\t\t\t\t\t\t\t\ttype=\"radio\"\r\n\t\t\t\t\t\t\t\t\tid=\"radioCard\"\r\n\t\t\t\t\t\t\t\t\tname=\"radioViewType\"\r\n\t\t\t\t\t\t\t\t\tonChange={(e) => onViewChange(e.target.value as ViewType)}\r\n\t\t\t\t\t\t\t\t\tchecked={defaultValue === ViewType.Card}\r\n\t\t\t\t\t\t\t\t\tvalue={ViewType.Card}\r\n\t\t\t\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t\t\t\t<label htmlFor=\"radioCard\">\r\n\t\t\t\t\t\t\t\t\t<Icon size={2} icon=\"cardview\"></Icon>\r\n\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t</ListHeaderSwitchesStyle>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</ListHeaderControllsContainerStyle>\r\n\t\t\t\t))}\r\n\t\t</ListHeaderStyle>\r\n\t);\r\n};\r\n\r\nexport default ListHeader;\r\n","import { ThemeProps } from 'components/Banner/Banner';\r\nimport { getThemeSettings } from 'pages/sharedModelTypes';\r\nimport Link from 'components/Boilerplate/Link';\r\nimport styled from 'styled-components';\r\n\r\nexport const FragmentPuffListStyle = styled.div<ThemeProps>`\r\n\t${(p) => p && getThemeSettings(p.themeName, p.theme)};\r\n`;\r\n\r\nexport const MicrositeLinkStyle = styled(Link)`\r\n\t${(props) => props.theme.typography.style6.getStyle()};\r\n`;\r\n","import React, { PropsWithChildren } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectEpi } from 'store/modules/epi';\r\n\r\ntype Props = {\r\n\tclassName?: string;\r\n\tinline?: boolean;\r\n\topeProperty: string[];\r\n};\r\n\r\nconst EditableField: React.FC<PropsWithChildren<Props>> = ({\r\n\tclassName,\r\n\tinline,\r\n\topeProperty,\r\n\tchildren,\r\n}) => {\r\n\tconst { isEditable } = useSelector(selectEpi);\r\n\r\n\tconst cssClass = `${className ?? ''} opti-edit-container`;\r\n\tif (!isEditable) return <>{children}</>;\r\n\r\n\treturn inline ? (\r\n\t\t<span className={`${cssClass} opti-edit-container-inline`} {...opeProperty}>\r\n\t\t\t{children}\r\n\t\t</span>\r\n\t) : (\r\n\t\t<div className={`${cssClass} opti-edit-container-block`} {...opeProperty}>\r\n\t\t\t{children}\r\n\t\t</div>\r\n\t);\r\n};\r\n\r\nexport default EditableField;\r\n","import EpiFragments, {\r\n\tBlockType,\r\n\tOptions,\r\n\twrapElementInGrid,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { Cell, Grid } from 'components/Boilerplate/Grid';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport Button from 'components/Button';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport Typography from 'components/Typography';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport React, { useContext } from 'react';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { FragmentListModel, FragmentModelTypes } from 'types/fragments';\r\nimport { MicrositeLinkStyle } from './FragmentPuffList.styles';\r\nimport EditableField from 'components/EditableField/EditableField';\r\n\r\n/**\r\n * ColumnPageWithSidebar\r\n */\r\ntype ColumnPageWithSidebarProps = {\r\n\ttextAsModel: FragmentListModel;\r\n\tlink: LinkType | null;\r\n\tbottomItems: FragmentModelTypes[];\r\n\tpreviousBlockType?: BlockType | null;\r\n\toptions: Options;\r\n\tpreamble?: string | null;\r\n\tpreamble_htmlAttributes?: any;\r\n\tmainBody_htmlAttributes?: any;\r\n\ttextAsModel_htmlAttributes?: any;\r\n\tdisableCustomHeadingLogic: boolean;\r\n};\r\n\r\nexport const ColumnPageWithSidebar: React.FC<ColumnPageWithSidebarProps> = ({\r\n\toptions,\r\n\ttextAsModel,\r\n\tlink,\r\n\tbottomItems,\r\n\tchildren,\r\n\tpreviousBlockType,\r\n\tpreamble,\r\n\tpreamble_htmlAttributes,\r\n\ttextAsModel_htmlAttributes,\r\n\tmainBody_htmlAttributes,\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\tlet secondPreviousBlockType =\r\n\t\ttextAsModel.fragments.length > 0 || link ? BlockType.Element : undefined;\r\n\r\n\t// TODO: do not create cell or grid if we already are in one\r\n\tlet mainContent = (\r\n\t\t<Grid inner={true}>\r\n\t\t\t<Cell span={8} tablet={8}>\r\n\t\t\t\t<EditableField opeProperty={preamble_htmlAttributes}>\r\n\t\t\t\t\t{preamble && (\r\n\t\t\t\t\t\t<Typography as=\"preamble\" {...preamble_htmlAttributes}>\r\n\t\t\t\t\t\t\t{preamble}\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</EditableField>\r\n\r\n\t\t\t\t<EditableField opeProperty={mainBody_htmlAttributes}>\r\n\t\t\t\t\t{textAsModel.fragments.length > 0 && (\r\n\t\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\t\tpreviousBlockType={previousBlockType}\r\n\t\t\t\t\t\t\tinsideGrid={true}\r\n\t\t\t\t\t\t\tinsideCell={true}\r\n\t\t\t\t\t\t\tinsideInnerGrid={true}\r\n\t\t\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\t\t\tfragments={textAsModel.fragments}\r\n\t\t\t\t\t\t\thtmlAttributes={textAsModel_htmlAttributes}\r\n\t\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</EditableField>\r\n\r\n\t\t\t\t{link && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t{themeContext.isMicrositeActive && link ? (\r\n\t\t\t\t\t\t\t<Space top={themeContext.spacing.space2}>\r\n\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t<MicrositeLinkStyle to={link.url} external={link.isFile}>\r\n\t\t\t\t\t\t\t\t\t\t{link.heading}\r\n\t\t\t\t\t\t\t\t\t</MicrositeLinkStyle>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<Space\r\n\t\t\t\t\t\t\t\ttop={\r\n\t\t\t\t\t\t\t\t\ttextAsModel.fragments.length > 0\r\n\t\t\t\t\t\t\t\t\t\t? themeContext.spacing.space5\r\n\t\t\t\t\t\t\t\t\t\t: 0\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\tvariant={ButtonVariant.Tertiary}\r\n\t\t\t\t\t\t\t\t\tto={link.url}\r\n\t\t\t\t\t\t\t\t\texternal={link.isFile}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{link.heading}\r\n\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t</Cell>\r\n\r\n\t\t\t{children && (\r\n\t\t\t\t<>\r\n\t\t\t\t\t<Cell span={4}>{children}</Cell>\r\n\t\t\t\t</>\r\n\t\t\t)}\r\n\t\t</Grid>\r\n\t);\r\n\r\n\tif (!options.insideGrid) {\r\n\t\tmainContent = wrapElementInGrid(mainContent);\r\n\t}\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{mainContent}\r\n\r\n\t\t\t{bottomItems && bottomItems.length > 0 && (\r\n\t\t\t\t<EpiFragments\r\n\t\t\t\t\tpreviousBlockType={secondPreviousBlockType}\r\n\t\t\t\t\tinsideGrid={options.insideGrid}\r\n\t\t\t\t\tinsideCell={options.insideCell}\r\n\t\t\t\t\tinsideInnerGrid={options.insideInnerGrid}\r\n\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\tfragments={bottomItems}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n","import styled from 'styled-components';\r\n\r\nexport const ImagePuffContainer = styled.div``;\r\n\r\nexport const ImagePuffContent = styled.div`\r\n\tbackground-color: ${props => props.theme.colors.white};\r\n\tpadding: ${props => props.theme.spacing.space4}rem;\r\n`;\r\n","/**\r\n * SidebarPuff\r\n */\r\n\r\nimport Typography, { Heading } from 'components/Typography/Typography';\r\nimport React from 'react';\r\nimport { ImageFragmentModel } from 'types/fragments';\r\nimport { ImagePuffContainer, ImagePuffContent } from './SidebarPuff.styles';\r\nimport Image from 'components/Boilerplate/Image';\r\nimport { useImageTitle } from 'hooks/useImageTitle';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport Link from 'components/Boilerplate/Link';\r\n\r\ntype SidebarPuffProps = {\r\n\timage?: ImageFragmentModel | null;\r\n\theadingLevel?: number;\r\n\theading?: string | null;\r\n\ttext?: string | null;\r\n\tlink?: LinkType | null;\r\n};\r\n\r\nexport const SidebarPuff: React.FC<SidebarPuffProps> = ({\r\n\timage,\r\n\theadingLevel,\r\n\theading,\r\n\ttext,\r\n\tlink,\r\n}) => {\r\n\tconst title = useImageTitle(\r\n\t\timage?.photographer,\r\n\t\timage?.agency,\r\n\t\timage?.illustrator\r\n\t);\r\n\r\n\treturn (\r\n\t\t<ImagePuffContainer>\r\n\t\t\t{image && (\r\n\t\t\t\t<Image\r\n\t\t\t\t\talt={image.alt}\r\n\t\t\t\t\tsrc={image.src}\r\n\t\t\t\t\tsrcSet={image.srcSet}\r\n\t\t\t\t\ttitle={title}\r\n\t\t\t\t></Image>\r\n\t\t\t)}\r\n\r\n\t\t\t{(heading || text || link) && (\r\n\t\t\t\t<ImagePuffContent>\r\n\t\t\t\t\t{heading && (\r\n\t\t\t\t\t\t<Heading level={headingLevel} styleLevel={4}>\r\n\t\t\t\t\t\t\t{heading}\r\n\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{text && <Typography as=\"p\">{text}</Typography>}\r\n\t\t\t\t\t{link && link.url && link.heading && (\r\n\t\t\t\t\t\t<Link to={link.url} external={link.isFile}>\r\n\t\t\t\t\t\t\t{link.heading}\r\n\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</ImagePuffContent>\r\n\t\t\t)}\r\n\t\t</ImagePuffContainer>\r\n\t);\r\n};\r\n","/**\r\n * NVseArticlePage - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\n\r\nexport const Div = styled.div``;\r\n\r\nexport const TopImage = styled.img`\r\n\twidth: 100%;\r\n\tobject-fit: cover;\r\n\tmax-height: 640px;\r\n`;\r\n\r\nexport const ContentBlockModelWrapper = styled.div`\r\n\tmax-width: 1132px;\r\n\tmargin: 0 auto;\r\n\tpadding: 0 1rem;\r\n`;\r\n","/**\r\n * Carousel - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\n\r\nexport const CarouselContainer = styled.div`\r\n\twidth: 100%;\r\n`;\r\n","/**\r\n * Pagination - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\n\r\nexport const PaginationContainer = styled.div`\r\n\tdisplay: flex;\r\n\tjustify-content: space-between;\r\n\tcolor: ${props => props.theme.palette.text.primary};\t\t\t\r\n\r\n\tbutton:first-child {\r\n\t\t&::before {\r\n\t\t\tcontent: '';\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 7px;\r\n\t\t\theight: 7px;\r\n\t\t\tborder-right: 2px solid;\r\n\t\t\tborder-top: 2px solid;\r\n\t\t\ttransform: rotate(225deg);\r\n\t\t\tmargin-top: 0px;\r\n\t\t\tmargin-bottom: 0px;\r\n\t\t\tmargin-left: 5px;\r\n\t\t\tmargin-right: 1px;\r\n\t\t\tvertical-align: middle;\r\n\t\t\tcolor: ${props => props.theme.palette.text.primary};\t\t\t\r\n\t\t}\r\n\t}\r\n\r\n\tbutton:last-child {\r\n\t\t&::after {\r\n\t\t\tcontent: '';\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 7px;\r\n\t\t\theight: 7px;\r\n\t\t\tborder-right: 2px solid;\r\n\t\t\tborder-top: 2px solid;\r\n\t\t\ttransform: rotate(45deg);\r\n\t\t\tmargin-top: 0px;\r\n\t\t\tmargin-bottom: 0px;\r\n\t\t\tmargin-left: 5px;\r\n\t\t\tmargin-right: 1px;\r\n\t\t\tvertical-align: middle;\r\n\t\t\tcolor: ${props => props.theme.palette.text.primary};\t\t\t\r\n\t\t}\r\n\t}\r\n`;\r\n","import React, { useContext } from 'react';\r\nimport Button from 'components/Button';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport { PaginationContainer } from './Pagination.styles';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectLocalization } from 'store/modules/model';\r\nimport { translate } from 'utils/helper-utils';\r\nimport { ThemeContext } from 'styled-components';\r\n\r\nexport interface Props {\r\n\tforwardButtonText?: string;\r\n\tbackwardButtonText?: string;\r\n\tonPreviousSlide: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n\tonNextSlide: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n\tinactivateForwardButton: boolean;\r\n\tinactivateBackwardButton: boolean;\r\n}\r\n\r\nconst Pagination = ({\r\n\tforwardButtonText,\r\n\tbackwardButtonText,\r\n\tonPreviousSlide,\r\n\tonNextSlide,\r\n\tinactivateForwardButton,\r\n\tinactivateBackwardButton,\r\n}: Props) => {\r\n\tconst localization = useSelector(selectLocalization);\r\n\tconst themeContext = useContext(ThemeContext);\r\n\tconst paginationNextLabel = forwardButtonText\r\n\t\t? forwardButtonText\r\n\t\t: translate('/frontend/components/pagination/next', 'Next', localization);\r\n\tconst paginationPreviousLabel = backwardButtonText\r\n\t\t? backwardButtonText\r\n\t\t: translate(\r\n\t\t\t\t'/frontend/components/pagination/prev',\r\n\t\t\t\t'Previous',\r\n\t\t\t\tlocalization\r\n\t\t );\r\n\r\n\treturn (\r\n\t\t<PaginationContainer>\r\n\t\t\t<Button\r\n\t\t\t\tvariant={\r\n\t\t\t\t\tthemeContext.isMicrositeActive\r\n\t\t\t\t\t\t? ButtonVariant.Microsite\r\n\t\t\t\t\t\t: ButtonVariant.Tertiary\r\n\t\t\t\t}\r\n\t\t\t\tonClick={onPreviousSlide}\r\n\t\t\t\tdisabled={inactivateBackwardButton}\r\n\t\t\t>\r\n\t\t\t\t{paginationPreviousLabel}\r\n\t\t\t</Button>\r\n\r\n\t\t\t<Button\r\n\t\t\t\tvariant={\r\n\t\t\t\t\tthemeContext.isMicrositeActive\r\n\t\t\t\t\t\t? ButtonVariant.Microsite\r\n\t\t\t\t\t\t: ButtonVariant.Tertiary\r\n\t\t\t\t}\r\n\t\t\t\tonClick={onNextSlide}\r\n\t\t\t\tdisabled={inactivateForwardButton}\r\n\t\t\t>\r\n\t\t\t\t{paginationNextLabel}\r\n\t\t\t</Button>\r\n\t\t</PaginationContainer>\r\n\t);\r\n};\r\n\r\nexport default Pagination;\r\n","/**\r\n * Gallery - styles\r\n */\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\n\r\ninterface ListProps {\r\n\tcolumns: number;\r\n\ttransition: number;\r\n\tmyTranslate: number;\r\n}\r\n\r\ninterface ListWidthProps {\r\n\twidth: number;\r\n}\r\n\r\nexport const GalleryContainer = styled.div`\r\n\toverflow: hidden;\r\n`;\r\n\r\nexport const GalleryListStyle = styled.ul<ListProps>`\r\n\tlist-style-type: none;\r\n\tdisplay: inline-flex;\r\n\t\t\r\n\ttransform: translateX(-${(p) => p.myTranslate}%);\r\n\ttransition: transform ease-out ${(p) => p.transition}s;\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tcolumn-count: ${(p) => p.columns};\r\n\t}\r\n\r\n\tposition: relative;\r\n\twidth: ${(p) => p.columns * 100}%;\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n\r\n`;\r\n\r\n/**\r\n * TODO: QUICKFIX: Harcoded values for li width 1100px and item width.\r\n */\r\nexport const GalleryListItemStyle = styled.li<ListWidthProps>`\r\n\twidth: ${(p) => p.width}%;\r\n\t\r\n\t& >:focus-within {\r\n\t\toutline-offset: -2px;\r\n\t\toutline: 2px solid;\r\n\t\toutline-color:currentColor;\r\n\t}\t\t\t\r\n\r\n\t${mediaQueries.tabletOrLarger} {\r\n\t\tdisplay: inline-flex;\r\n\r\n\t\t & > a {\r\n\t\t\tflex-basis: 356px;\r\n\t\t\tmin-width: 356px;\r\n\t\t } \r\n\r\n\t\t & > *:not(:last-child) {\r\n\t\t\tmargin-right: ${props => props.theme.spacing.space2}rem;\r\n\t\t} \r\n\t}\r\n`;\r\n","import React from 'react';\r\nimport {\r\n\tGalleryListStyle,\r\n\tGalleryListItemStyle,\r\n\tGalleryContainer,\r\n} from './Gallery.styles';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport { FragmentModelTypes } from 'types/fragments';\r\n\r\nexport interface GalleryProps {\r\n\tpuffItems: FragmentModelTypes[];\r\n\ttranslate: number;\r\n\ttransition: number;\r\n\tisTablet: boolean;\r\n\theadingLevel?: number;\r\n\tdisableCustomHeadingLogic: boolean;\r\n}\r\n\r\nconst Gallery = ({\r\n\tpuffItems,\r\n\ttranslate,\r\n\ttransition,\r\n\tisTablet,\r\n\theadingLevel,\r\n\tdisableCustomHeadingLogic\r\n}: GalleryProps) => {\r\n\tconst listLength = puffItems.length;\r\n\tlet numberOfColumns = 0;\r\n\tlet numberOfItemsInColumns = 3;\r\n\r\n\tnumberOfColumns =\r\n\t\tlistLength % 3 === 0\r\n\t\t\t? Math.floor(listLength / 3)\r\n\t\t\t: Math.floor(listLength / 3) + 1;\r\n\r\n\tif (isTablet) {\r\n\t\tnumberOfColumns =\r\n\t\t\tlistLength % 2 === 0\r\n\t\t\t\t? Math.floor(listLength / 2)\r\n\t\t\t\t: Math.floor(listLength / 2) + 1;\r\n\r\n\t\tnumberOfItemsInColumns = 2;\r\n\t}\r\n\r\n\treturn (\r\n\t\t<GalleryContainer>\r\n\t\t\t<GalleryListStyle\r\n\t\t\t\tcolumns={numberOfColumns}\r\n\t\t\t\tmyTranslate={translate}\r\n\t\t\t\ttransition={transition}\r\n\t\t\t>\r\n\t\t\t\t<GalleryListItems\r\n\t\t\t\t\theadingLevel={headingLevel}\r\n\t\t\t\t\tpuffItems={puffItems}\r\n\t\t\t\t\tcolumns={numberOfColumns}\r\n\t\t\t\t\tnumberOfItemsInColumns={numberOfItemsInColumns}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t></GalleryListItems>\r\n\t\t\t</GalleryListStyle>\r\n\t\t</GalleryContainer>\r\n\t);\r\n};\r\n\r\nexport default Gallery;\r\n\r\ntype GalleryListItemsProps = {\r\n\tpuffItems: FragmentModelTypes[];\r\n\tcolumns: number;\r\n\tnumberOfItemsInColumns: number;\r\n\theadingLevel?: number;\r\n\tdisableCustomHeadingLogic: boolean;\r\n};\r\n\r\nexport const GalleryListItems: React.FC<GalleryListItemsProps> = ({\r\n\tpuffItems,\r\n\tcolumns,\r\n\theadingLevel,\r\n\tnumberOfItemsInColumns,\r\n\tdisableCustomHeadingLogic\r\n}) => {\r\n\tlet array1 = [];\r\n\tlet galleryItems = [];\r\n\tconst clonedPuffItems = [...puffItems];\r\n\r\n\tfor (let index = 0; index < columns; index++) {\r\n\t\tlet tempFragmentArray = clonedPuffItems.splice(0, numberOfItemsInColumns);\r\n\t\tarray1.push(tempFragmentArray);\r\n\t}\r\n\r\n\tfor (let j = 0; j < columns; j++) {\r\n\t\tvar galleryListItem = (\r\n\t\t\t<GalleryListItem\r\n\t\t\t\theadingLevel={headingLevel}\r\n\t\t\t\twidth={100 / columns}\r\n\t\t\t\tpuffItems={array1[j]}\r\n\t\t\t\tkey={j}\r\n\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t></GalleryListItem>\r\n\t\t);\r\n\t\tgalleryItems.push(galleryListItem);\r\n\t}\r\n\treturn <>{galleryItems}</>;\r\n};\r\n\r\ntype GalleryListItemProps = {\r\n\tpuffItems: FragmentModelTypes[];\r\n\twidth: number;\r\n\theadingLevel?: number;\r\n\tdisableCustomHeadingLogic: boolean;\r\n};\r\n\r\nexport const GalleryListItem: React.FC<GalleryListItemProps> = ({\r\n\tpuffItems,\r\n\twidth,\r\n\theadingLevel,\r\n\tdisableCustomHeadingLogic\r\n}) => {\r\n\tlet tempJSXArray = puffItems.map((puffItem, index) => (\r\n\t\t<EpiFragments\r\n\t\t\theadingLevel={headingLevel}\r\n\t\t\tfragments={[puffItem]} key={index}\r\n\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic} />\r\n\t));\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<GalleryListItemStyle width={width} key={0}>\r\n\t\t\t\t{tempJSXArray}\r\n\t\t\t</GalleryListItemStyle>\r\n\t\t</>\r\n\t);\r\n};\r\n","import React, { useContext, useEffect, useState } from 'react';\r\nimport { CarouselContainer } from './Carousel.styles';\r\nimport Pagination from '../Pagination';\r\nimport Gallery from 'components/Gallery';\r\nimport { FragmentModelTypes } from 'types/fragments';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { ThemeContext } from 'styled-components';\r\n\r\nexport interface Props {\r\n\tforwardButtonText: string;\r\n\tbackwardButtonText: string;\r\n\tpuffItems: FragmentModelTypes[];\r\n\tinactivateForwardButton?: boolean;\r\n\tinactivateBackwardButton?: boolean;\r\n\theadingLevel?: number;\r\n\tdisableCustomHeadingLogic: boolean;\r\n}\r\n\r\nconst Carousel = ({\r\n\tpuffItems,\r\n\theadingLevel,\r\n\tdisableCustomHeadingLogic\r\n}: Props) => {\r\n\tconst [cssState, setcssState] = useState({\r\n\t\ttranslate: 0,\r\n\t\ttransition: 0.4,\r\n\t});\r\n\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst isPhone = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.tablet - 1,\r\n\t});\r\n\r\n\tconst isTablet = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.tablet,\r\n\t\tmaxWidth: breakpointsNumber.desktop - 1,\r\n\t});\r\n\r\n\tconst { translate, transition } = cssState;\r\n\tconst [currentIndex, setCurrentIndex] = useState<number>(3);\r\n\tconst [slideWidth, setSlideWidth] = useState<number>(0);\r\n\tconst [numberOfPuffsToSlide, setNumberOfPuffsToSlide] = useState<number>(3);\r\n\r\n\tuseEffect(() => {\r\n\t\tgetSlideWidth(puffItems.length);\r\n\t}, [isPhone, isTablet, puffItems.length]);\r\n\r\n\tconst onPreviousSlide = () => {\r\n\t\tsetcssState({\r\n\t\t\t...cssState,\r\n\t\t\ttranslate: translate - slideWidth,\r\n\t\t});\r\n\r\n\t\tsetCurrentIndex((prev) => prev - numberOfPuffsToSlide);\r\n\t};\r\n\r\n\tconst onNextSlide = () => {\r\n\t\tsetcssState({\r\n\t\t\t...cssState,\r\n\t\t\ttranslate: translate + slideWidth,\r\n\t\t});\r\n\r\n\t\tsetCurrentIndex((prev) => prev + numberOfPuffsToSlide);\r\n\t};\r\n\r\n\tconst getSlideWidth = (listLength: number) => {\r\n\t\tlet numberOfColumns = 0;\r\n\r\n\t\tif (isTablet) {\r\n\t\t\tnumberOfColumns =\r\n\t\t\t\tlistLength % 2 === 0\r\n\t\t\t\t\t? Math.floor(listLength / 2)\r\n\t\t\t\t\t: Math.floor(listLength / 2) + 1;\r\n\t\t\tsetNumberOfPuffsToSlide(2);\r\n\t\t\tsetCurrentIndex(2);\r\n\t\t} else {\r\n\t\t\tnumberOfColumns =\r\n\t\t\t\tlistLength % 3 === 0\r\n\t\t\t\t\t? Math.floor(listLength / 3)\r\n\t\t\t\t\t: Math.floor(listLength / 3) + 1;\r\n\t\t}\r\n\r\n\t\tsetSlideWidth(100 / numberOfColumns);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<CarouselContainer>\r\n\t\t\t<Gallery\r\n\t\t\t\tpuffItems={puffItems}\r\n\t\t\t\ttranslate={translate}\r\n\t\t\t\ttransition={transition}\r\n\t\t\t\tisTablet={isTablet}\r\n\t\t\t\theadingLevel={headingLevel}\r\n\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t/>\r\n\t\t\t{puffItems.length > 3 &&\r\n\t\t\t\t<Space top={themeContext.spacing.space3}>\r\n\t\t\t\t\t<Pagination\r\n\t\t\t\t\t\tonPreviousSlide={onPreviousSlide}\r\n\t\t\t\t\t\tonNextSlide={onNextSlide}\r\n\t\t\t\t\t\tinactivateForwardButton={puffItems.length <= currentIndex}\r\n\t\t\t\t\t\tinactivateBackwardButton={currentIndex === 3 || currentIndex === 2}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</Space>}\r\n\t\t</CarouselContainer>\r\n\t);\r\n};\r\n\r\nexport default Carousel;\r\n","import styled from 'styled-components';\r\nimport Link from 'components/Boilerplate/Link';\r\n\r\nexport const SectionHeaderStyle = styled.div`\r\n\tdisplay: grid;\r\n\tplace-items: center;\r\n`;\r\n\r\nexport const SectionLinkStyle = styled(Link)`\r\n\tmargin-top: ${(props) => props.theme.spacing.space2}rem;\r\n`;\r\n","import { Heading } from 'components/Typography/Typography';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport React from 'react';\r\nimport { SectionHeaderStyle, SectionLinkStyle } from './SectionHeader.styles';\r\n\r\n/**\r\n * SectionHeader\r\n */\r\ntype SectionHeaderProps = {\r\n\theading: string;\r\n\theadingLevel?: number;\r\n\tstyleLevel?: number;\r\n\tlink?: LinkType | null;\r\n};\r\n\r\nexport const SectionHeader: React.FC<SectionHeaderProps> = ({\r\n\theading,\r\n\theadingLevel,\r\n\tstyleLevel = 2,\r\n\tlink,\r\n}) => {\r\n\tif (heading) {\r\n\t\treturn (\r\n\t\t\t<SectionHeaderStyle>\r\n\t\t\t\t<Heading zeroBottom level={headingLevel} styleLevel={styleLevel}>\r\n\t\t\t\t\t{heading}\r\n\t\t\t\t</Heading>\r\n\t\t\t\t{link && (\r\n\t\t\t\t\t<SectionLinkStyle to={link.url} external={link.isFile}>\r\n\t\t\t\t\t\t{link.heading}\r\n\t\t\t\t\t</SectionLinkStyle>\r\n\t\t\t\t)}\r\n\t\t\t</SectionHeaderStyle>\r\n\t\t);\r\n\t}\r\n\treturn null;\r\n};\r\n\r\nexport default SectionHeader;\r\n","import styled from 'styled-components';\r\n\r\nexport const ShowAllStyle = styled.div`\r\n\ttext-align: center;\r\n\r\n\tbutton::after {\r\n\t\tvertical-align: middle;\r\n\t}\r\n`;\r\n","import Button from 'components/Button';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport React, { useContext } from 'react';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { ShowAllStyle } from './ShowMoreButton.styles';\r\n\r\ntype ShowMoreButtonProps = {\r\n\theader: string | null;\r\n\tonClick?: () => void;\r\n};\r\n\r\nexport const ShowMoreButton: React.FC<ShowMoreButtonProps> = ({\r\n\theader,\r\n\tonClick,\r\n}) => {\r\n\tconst themecontext = useContext(ThemeContext);\r\n\treturn (\r\n\t\t<ShowAllStyle>\r\n\t\t\t<Button\r\n\t\t\t\tvariant={\r\n\t\t\t\t\tthemecontext.isMicrositeActive\r\n\t\t\t\t\t\t? ButtonVariant.Microsite\r\n\t\t\t\t\t\t: ButtonVariant.Link\r\n\t\t\t\t}\r\n\t\t\t\tonClick={onClick}\r\n\t\t\t>\r\n\t\t\t\t{header}\r\n\t\t\t</Button>\r\n\t\t</ShowAllStyle>\r\n\t);\r\n};\r\n","import EpiFragments, {\r\n\tOptions,\r\n\twrapElementInGrid,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport Carousel from 'components/Carousel';\r\nimport ListHeader from 'components/ListHeader';\r\nimport { LinkType, PuffTheme } from 'pages/sharedModelTypes';\r\nimport React, { useContext, useEffect, useState } from 'react';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport { ViewType } from 'types/enums';\r\nimport { FragmentModelTypes } from 'types/fragments';\r\nimport {\r\n\tFragmentPuffListStyle,\r\n\tMicrositeLinkStyle,\r\n} from './FragmentPuffList.styles';\r\nimport { ListItemsStyle } from './Panels.styles';\r\nimport SectionHeader from './SectionHeader';\r\nimport { ShowMoreButton } from './ShowMoreButton';\r\n\r\n/**\r\n * FragmentPuffList\r\n */\r\ntype FragmentPuffListProps = {\r\n\ttheme?: PuffTheme;\r\n\theading?: string | null;\r\n\tlink?: LinkType | null;\r\n\titems: FragmentModelTypes[];\r\n\tshowMoreLabel?: string;\r\n\tinitialMaxCount?: number;\r\n\trenderAsCarousel?: boolean;\r\n\tnextLabel?: string;\r\n\tpreviousLabel?: string;\r\n\toptions: Options;\r\n\tdisableCustomHeadingLogic: boolean;\r\n};\r\n\r\n// TODO: previousBlockType={BlockType.Element}\r\n\r\nexport const FragmentPuffList: React.FC<FragmentPuffListProps> = ({\r\n\ttheme,\r\n\theading,\r\n\tshowMoreLabel,\r\n\tinitialMaxCount,\r\n\titems,\r\n\tlink,\r\n\trenderAsCarousel = false,\r\n\tnextLabel,\r\n\tpreviousLabel,\r\n\toptions,\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\tconst isNarrowDisplay = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.desktop - 1,\r\n\t});\r\n\tconst [showItemsCount, setShowItemsCount] = useState<number | undefined>(\r\n\t\tinitialMaxCount\r\n\t);\r\n\tconst [filterdItems, setFilterdItems] = useState<FragmentModelTypes[]>([]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!initialMaxCount) {\r\n\t\t\tsetShowItemsCount(items.length);\r\n\t\t}\r\n\r\n\t\tsetFilterdItems(items.slice(0, showItemsCount));\r\n\t}, [initialMaxCount, items, showItemsCount]);\r\n\r\n\tlet stackItems: boolean;\r\n\tlet newViewOptions: ViewType = ViewType.Card;\r\n\r\n\tswitch (options?.view) {\r\n\t\tdefault:\r\n\t\tcase ViewType.Card:\r\n\t\t\tstackItems = false;\r\n\t\t\tnewViewOptions = ViewType.Card;\r\n\t\t\tbreak;\r\n\t\tcase ViewType.List:\r\n\t\t\tstackItems = true;\r\n\t\t\tnewViewOptions = ViewType.List;\r\n\t\t\tbreak;\r\n\t\tcase ViewType.CompactList:\r\n\t\t\tstackItems = true;\r\n\t\t\tnewViewOptions = ViewType.CompactList;\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\t// Special handling for the start page\r\n\tconst centeredHeading = options.modelType === 'NVseStartPage';\r\n\tlet contentHeadingLevel = options.headingLevel ? options.headingLevel : 1;\r\n\r\n\tlet headerElement = null;\r\n\tif (heading) {\r\n\t\tif (centeredHeading) {\r\n\t\t\t// TODO: Create a simple centered header, or rename SectionHeader\r\n\t\t\theaderElement = (\r\n\t\t\t\t<Space bottom={themeContext.spacing.space3}>\r\n\t\t\t\t\t<SectionHeader\r\n\t\t\t\t\t\theading={heading}\r\n\t\t\t\t\t\tlink={link}\r\n\t\t\t\t\t\theadingLevel={contentHeadingLevel}\r\n\t\t\t\t\t></SectionHeader>\r\n\t\t\t\t</Space>\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\theaderElement = (\r\n\t\t\t\t<Space bottom={themeContext.spacing.space3}>\r\n\t\t\t\t\t<ListHeader\r\n\t\t\t\t\t\theading={heading}\r\n\t\t\t\t\t\tlink={link}\r\n\t\t\t\t\t\tsectionStyle\r\n\t\t\t\t\t\theadingLevel={contentHeadingLevel}\r\n\t\t\t\t\t></ListHeader>\r\n\t\t\t\t</Space>\r\n\t\t\t);\r\n\t\t}\r\n\t\tcontentHeadingLevel = contentHeadingLevel + 1;\r\n\t}\r\n\r\n\tlet listElement;\r\n\tif (renderAsCarousel) {\r\n\t\tlistElement = (\r\n\t\t\t<Carousel\r\n\t\t\t\tforwardButtonText={nextLabel ? nextLabel : 'Next'}\r\n\t\t\t\tbackwardButtonText={previousLabel ? previousLabel : 'Previous'}\r\n\t\t\t\tpuffItems={filterdItems}\r\n\t\t\t\theadingLevel={contentHeadingLevel}\r\n\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t/>\r\n\t\t);\r\n\t} else {\r\n\t\tlistElement = (\r\n\t\t\t<>\r\n\t\t\t\t<ListItemsStyle cardView={!stackItems}>\r\n\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\tview={newViewOptions}\r\n\t\t\t\t\t\tinsideGrid={true}\r\n\t\t\t\t\t\theadingLevel={contentHeadingLevel}\r\n\t\t\t\t\t\tfragments={filterdItems}\r\n\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</ListItemsStyle>\r\n\r\n\t\t\t\t{showMoreLabel &&\r\n\t\t\t\t\tshowItemsCount !== undefined &&\r\n\t\t\t\t\tshowItemsCount < items.length && (\r\n\t\t\t\t\t\t<Space top={themeContext.spacing.space5}>\r\n\t\t\t\t\t\t\t<ShowMoreButton\r\n\t\t\t\t\t\t\t\theader={showMoreLabel}\r\n\t\t\t\t\t\t\t\tonClick={() => setShowItemsCount(items.length)}\r\n\t\t\t\t\t\t\t></ShowMoreButton>\r\n\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t)}\r\n\t\t\t</>\r\n\t\t);\r\n\t}\r\n\r\n\tlet element = (\r\n\t\t<>\r\n\t\t\t{headerElement}\r\n\t\t\t{listElement}\r\n\t\t</>\r\n\t);\r\n\r\n\tconst renderElement = () => {\r\n\t\tif (themeContext.isMicrositeActive) {\r\n\t\t\t// Microsite elements\r\n\t\t\tlet headerMicrositeElement = (\r\n\t\t\t\t<Space\r\n\t\t\t\t\tbottom={\r\n\t\t\t\t\t\tisNarrowDisplay\r\n\t\t\t\t\t\t\t? themeContext.spacing.space1\r\n\t\t\t\t\t\t\t: themeContext.spacing.space2\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttop={\r\n\t\t\t\t\t\tisNarrowDisplay\r\n\t\t\t\t\t\t\t? themeContext.spacing.space5\r\n\t\t\t\t\t\t\t: themeContext.spacing.space7\r\n\t\t\t\t\t}\r\n\t\t\t\t>\r\n\t\t\t\t\t<ListHeader\r\n\t\t\t\t\t\theading={heading}\r\n\t\t\t\t\t\tsectionStyle\r\n\t\t\t\t\t\theadingLevel={contentHeadingLevel}\r\n\t\t\t\t\t\tcolor={themeContext.palette.text.primary}\r\n\t\t\t\t\t></ListHeader>\r\n\t\t\t\t</Space>\r\n\t\t\t);\r\n\r\n\t\t\tlet listMicrositeElement = (\r\n\t\t\t\t<ListItemsStyle\r\n\t\t\t\t\tcardView={options.view === ViewType.Card ? true : false}\r\n\t\t\t\t>\r\n\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\tview={options.view}\r\n\t\t\t\t\t\tinsideGrid={true}\r\n\t\t\t\t\t\theadingLevel={contentHeadingLevel}\r\n\t\t\t\t\t\tfragments={filterdItems}\r\n\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</ListItemsStyle>\r\n\t\t\t);\r\n\r\n\t\t\tlet micrositeElement = (\r\n\t\t\t\t<>\r\n\t\t\t\t\t{headerMicrositeElement}\r\n\t\t\t\t\t{listMicrositeElement}\r\n\t\t\t\t\t{link && (\r\n\t\t\t\t\t\t<MicrositeLinkStyle to={link.url} external={link.isFile}>\r\n\t\t\t\t\t\t\t{link.heading}\r\n\t\t\t\t\t\t</MicrositeLinkStyle>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</>\r\n\t\t\t);\r\n\t\t\treturn (\r\n\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t{micrositeElement}\r\n\t\t\t\t</Grid>\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\treturn (\r\n\t\t\t\t<FragmentPuffListStyle themeName={theme}>\r\n\t\t\t\t\t{element}\r\n\t\t\t\t</FragmentPuffListStyle>\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!options?.insideGrid) {\r\n\t\telement = wrapElementInGrid(element);\r\n\t}\r\n\r\n\treturn <>{renderElement()}</>;\r\n};\r\n","/**\r\n * PuffListItem - styles\r\n */\r\n\r\nimport styled, { css } from 'styled-components';\r\nimport { getLinkArrowStyle } from 'theme/styles';\r\nimport Link from 'components/Boilerplate/Link';\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport { mediaQueries } from 'theme';\r\nimport { px2rem } from 'theme/utils';\r\n\r\nexport const ComponentWithBorderLeft = styled.div`\r\n\tposition: relative;\r\n\tpadding-left: 10px; /* Set padding to make space for border */\r\n\t&::before {\r\n\t\tcontent: '';\r\n\t\tposition: absolute;\r\n\t\tleft: 0;\r\n\t\ttop: 0;\r\n\t\theight: 100%;\r\n\t\tborder-left: 10px solid ${(props) => props.theme.colors.secondary};\r\n\t}\r\n`;\r\n\r\nexport const PuffListItemLinkStyle = styled(Link)`\r\n\tbackground-color: ${(props) => props.theme.colors.white};\r\n\tdisplay: flex;\r\n\tborder: ${(props) =>\r\n\t\tprops.theme.isMicrositeActive ? 'none' : '4px solid transparent'};\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tpadding: ${(props) =>\r\n\t\t\tprops.theme.isMicrositeActive ? '0' : props.theme.spacing.space2}rem;\r\n\t}\r\n\r\n\t&:after {\r\n\t\tcontent: none;\r\n\t}\r\n\r\n\t&:after {\r\n\t\tcontent: none;\r\n\t}\r\n\r\n\t&:hover {\r\n\t\ttext-decoration: none;\r\n\t}\r\n`;\r\n\r\nexport const PuffListItemTextStyle = styled.div`\r\n\tflex-grow: 1;\r\n\talign-self: center;\r\n\tpadding: ${(props) =>\r\n\t\t\tprops.theme.isMicrositeActive\r\n\t\t\t\t? props.theme.spacing.space4\r\n\t\t\t\t: props.theme.spacing.space2}rem\r\n\t\t${(props) => props.theme.spacing.space4}rem;\r\n\r\n\tcolor: ${(props) =>\r\n\t\tprops.theme.isMicrositeActive && props.theme.palette.text.primary};\r\n\t${mediaQueries.phone} {\r\n\t\tpadding: ${(props) => (props.theme.isMicrositeActive ? '1' : '0 1')}rem;\r\n\t}\r\n\r\n\t> *:first-child {\r\n\t\tmargin-top: 0;\r\n\t}\r\n`;\r\n\r\nexport const PuffTimeStyle = styled.span`\r\n\tfont-family: ${(props) => props.theme.typography.primaryFontFamily};\r\n\tfont-size: ${px2rem(16)};\r\n\tcolor: ${(props) => props.theme.colors.primary};\r\n`;\r\n\r\nexport const PuffListItemImageStyle = styled.div`\r\n\twidth: 240px;\r\n\tflex-shrink: 0;\r\n\tpadding: ${(props) => props.theme.spacing.space1}rem;\r\n`;\r\n\r\nexport const PuffListItemLink = styled(Heading)`\r\n\tmargin-top: ${(props) => props.theme.spacing.space1}rem;\r\n\tmax-width: 50ch;\r\n\t${getLinkArrowStyle()}\r\n\r\n\t${PuffListItemLinkStyle}:hover &,${PuffListItemLinkStyle}:focus & {\r\n\t\ttext-decoration: underline;\r\n\t\t&:after {\r\n\t\t\topacity: 1;\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nexport const PuffListItemPreamble = styled.div`\r\n\t${(props) => props.theme.typography.style9.getStyle()};\r\n\tcolor: ${(props) =>\r\n\t\tprops.theme.isMicrositeActive\r\n\t\t\t? props.theme.palette.text.primary\r\n\t\t\t: '#00000'};\r\n\tmargin-top: ${(props) => props.theme.spacing.space1}rem;\r\n\tmax-width: 65ch;\r\n\r\n\tdisplay: -webkit-box;\r\n\toverflow: hidden;\r\n\ttext-overflow: ellipsis;\r\n\t-webkit-box-orient: vertical;\r\n\t-webkit-line-clamp: 3;\r\n`;\r\n\r\nexport const PuffListItemMetadata = styled.div`\r\n\t${(props) => props.theme.typography.style9.getStyle()};\r\n\tmargin-top: ${(props) => props.theme.spacing.space2}rem;\r\n`;\r\n\r\nexport const PuffListItemMetadataCompact = styled.div`\r\n\t${(props) => props.theme.typography.style9.getStyle()};\r\n\r\n\t${mediaQueries.tabletOrLarger} {\r\n\t\talign-self: center;\r\n\t\tflex-shrink: 0;\r\n\t\tpadding-right: ${(props) => props.theme.spacing.space4}rem;\r\n\t}\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tmargin-top: ${(props) => props.theme.spacing.space1}rem;\r\n\t\tpadding: 0 ${(props) => props.theme.spacing.space4}rem;\r\n\t}\r\n`;\r\n","/**\r\n * PuffListItem\r\n */\r\nimport React, { useContext } from 'react';\r\nimport {\r\n\tComponentWithBorderLeft,\r\n\tPuffListItemImageStyle,\r\n\tPuffListItemLink,\r\n\tPuffListItemLinkStyle,\r\n\tPuffListItemMetadata,\r\n\tPuffListItemMetadataCompact,\r\n\tPuffListItemPreamble,\r\n\tPuffListItemTextStyle,\r\n\tPuffTimeStyle,\r\n} from './PuffListItem.styles';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport { ImageFragmentModel } from 'types/fragments';\r\nimport Image from 'components/Boilerplate/Image';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport {\r\n\tCommonDecalStyle,\r\n\tListingPageDecalStyle,\r\n\tNFSText,\r\n} from 'components/Panels/Panels.styles';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { useImageTitle } from 'hooks/useImageTitle';\r\n\r\nexport interface PuffListItemProps {\r\n\t/**\r\n\t * Preamble text\r\n\t */\r\n\tdecal?: string | null;\r\n\t/**\r\n\t * Heading level\r\n\t */\r\n\theadingLevel?: number | undefined;\r\n\t/**\r\n\t * Preamble text\r\n\t */\r\n\tpreamble?: string | null;\r\n\t/**\r\n\t * Link\r\n\t */\r\n\tlink?: LinkType | null;\r\n\r\n\t/**\r\n\t * Image\r\n\t */\r\n\timage?: ImageFragmentModel | null;\r\n\r\n\t/**\r\n\t * Compact view\r\n\t * (no image)\r\n\t */\r\n\tcompact?: boolean;\r\n\r\n\t/**\r\n\t * optional for microsite\r\n\t */\r\n\tpublicationDate?: string;\r\n\tnfsText?: string | null;\r\n}\r\n\r\n/**\r\n * # PuffListItem\r\n *\r\n * Puff List item\r\n */\r\nconst PuffListItem: React.FC<PuffListItemProps> = ({\r\n\tdecal,\r\n\theadingLevel,\r\n\tlink,\r\n\tpreamble,\r\n\timage,\r\n\tcompact,\r\n\tchildren,\r\n\tpublicationDate,\r\n\tnfsText,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst isPhone = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.tablet - 1,\r\n\t});\r\n\r\n\tconst title = useImageTitle(\r\n\t\timage?.photographer,\r\n\t\timage?.agency,\r\n\t\timage?.illustrator\r\n\t);\r\n\r\n\tconst showImage = image && !compact && !isPhone;\r\n\r\n\tif (!link) return null;\r\n\r\n\treturn (\r\n\t\t<PuffListItemLinkStyle\r\n\t\t\tto={link.url}\r\n\t\t\taria-label={link?.heading}\r\n\t\t\texternal={link.isFile}\r\n\t\t>\r\n\t\t\t{themeContext.isMicrositeActive && <ComponentWithBorderLeft />}\r\n\r\n\t\t\t<PuffListItemTextStyle>\r\n\t\t\t\t{decal && <CommonDecalStyle>{decal}</CommonDecalStyle>}\r\n\t\t\t\t{publicationDate && (\r\n\t\t\t\t\t<PuffTimeStyle>\r\n\t\t\t\t\t\t<time dateTime={publicationDate}>{publicationDate}</time>\r\n\t\t\t\t\t</PuffTimeStyle>\r\n\t\t\t\t)}\r\n\t\t\t\t{link && (\r\n\t\t\t\t\t<PuffListItemLink\r\n\t\t\t\t\t\tzeroBottom={true}\r\n\t\t\t\t\t\tcolor={\r\n\t\t\t\t\t\t\tthemeContext.isMicrositeActive\r\n\t\t\t\t\t\t\t\t? themeContext.colors.primary\r\n\t\t\t\t\t\t\t\t: themeContext.colors.secondaryBlue\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tstyleLevel={4}\r\n\t\t\t\t\t\tlevel={headingLevel}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{link.heading}\r\n\t\t\t\t\t</PuffListItemLink>\r\n\t\t\t\t)}\r\n\t\t\t\t{preamble && <PuffListItemPreamble>{preamble}</PuffListItemPreamble>}\r\n\t\t\t\t{children && !compact && (\r\n\t\t\t\t\t<PuffListItemMetadata>{children}</PuffListItemMetadata>\r\n\t\t\t\t)}\r\n\t\t\t\t{nfsText && !isPhone && <NFSText>{nfsText}</NFSText>}\r\n\t\t\t</PuffListItemTextStyle>\r\n\r\n\t\t\t{showImage && (\r\n\t\t\t\t<PuffListItemImageStyle>\r\n\t\t\t\t\t<Image\r\n\t\t\t\t\t\talt={image?.alt}\r\n\t\t\t\t\t\tsrc={image?.src}\r\n\t\t\t\t\t\tsrcSet={image?.srcSet}\r\n\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t></Image>\r\n\t\t\t\t</PuffListItemImageStyle>\r\n\t\t\t)}\r\n\r\n\t\t\t{children && compact && (\r\n\t\t\t\t<PuffListItemMetadataCompact>{children}</PuffListItemMetadataCompact>\r\n\t\t\t)}\r\n\t\t</PuffListItemLinkStyle>\r\n\t);\r\n};\r\n\r\nexport default PuffListItem;\r\n","/**\r\n * StandardPuff - styles\r\n */\r\n\r\nimport Image from 'components/Boilerplate/Image';\r\nimport Link from 'components/Boilerplate/Link';\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport styled, { css } from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\nimport { gridMaxWidth } from 'theme/grid';\r\nimport { getLinkArrowStyle } from 'theme/styles';\r\nimport { px, px2rem } from 'theme/utils';\r\n\r\nexport const StandardPuffStyle = styled(Link)`\r\n\tdisplay: flex;\r\n\tflex-direction: column-reverse;\r\n\tjustify-content: flex-end;\r\n\tflex-basis: 300px;\r\n\tflex-shrink: 1;\r\n\tflex-grow: 1;\r\n\r\n\t${mediaQueries.tabletOrLarger} {\r\n\t\tflex-basis: calc(33.33% - 16px);\r\n\t\tmin-width: 300px;\r\n\t\tflex-shrink: 0;\r\n\t\tflex-grow: 0;\r\n\t}\r\n\r\n\t&:after {\r\n\t\tcontent: none;\r\n\t}\r\n\r\n\t&:hover {\r\n\t\ttext-decoration: none;\r\n\t}\r\n`;\r\n\r\nexport const StandardPuffImageStyle = styled.div`\r\n\timg {\r\n\t\theight: 100%;\r\n\t\twidth: 100%;\r\n\t\tobject-fit: contain;\r\n\t}\r\n`;\r\n\r\nexport const StandardPuffColumnReverse = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: column-reverse;\r\n\tflex-grow: 1;\r\n`;\r\n\r\nexport const StandardPuffTextContainerStyle = styled.div`\r\n\tposition: relative;\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tflex-grow: 1;\r\n`;\r\n\r\nexport const StandardPuffTimeStyle = styled.span<HasImgBool>`\r\n\tbackground: ${(props) => props.theme.colors.commonBgColor};\r\n\tfont-family: ${(props) => props.theme.typography.primaryFontFamily};\r\n\tfont-size: ${px2rem(16)};\r\n\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\t${(props) =>\r\n\t\tprops.hasImage\r\n\t\t\t? css`\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tpadding: 2px 5px;\r\n\t\t\t\t\tleft: 8px;\r\n\t\t\t\t\ttop: -1.5rem;\r\n\t\t\t `\r\n\t\t\t: css`\r\n\t\t\t\t\tposition: relative;\r\n\t\t\t `};\r\n`;\r\n\r\nexport type HasImgBool = {\r\n\thasImage?: boolean;\r\n};\r\n\r\nexport const StandardPuffHeaderStyle = styled(Heading)`\r\n\tmargin-top: ${(props) => props.theme.spacing.space2}rem;\r\n\r\n\t${getLinkArrowStyle()}\r\n\r\n\t${StandardPuffStyle}:hover &,${StandardPuffStyle}:focus & {\r\n\t\ttext-decoration: underline;\r\n\t\t&:after {\r\n\t\t\topacity: 1;\r\n\t\t}\r\n\t}\r\n`;\r\nexport const StandardPuffPreambleStyle = styled.div`\r\n\t${(props) => props.theme.typography.style9.getStyle()};\r\n\tmargin-top: ${(props) => props.theme.spacing.space2}rem;\r\n\tmax-width: 65ch;\r\n`;\r\nexport const StandardPuffMetadataStyle = styled.div``;\r\n\r\n//-------\r\nexport type puffContent = {\r\n\tpreamble: string | null;\r\n};\r\nexport const StandardPuffContainer = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\twidth: ${(props) =>\r\n\t\t(px(gridMaxWidth - 16 * 2) - props.theme.spacing.space2 * 2) / 3}rem;\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tflex-direction: row;\r\n\t\tmin-height: unset;\r\n\t\tborder-bottom: 1px solid ${(props) => props.theme.colors.grey3};\r\n\t\talign-items: flex-start;\r\n\t\tpadding: ${(props) => props.theme.spacing.space2}rem 0\r\n\t\t\t${(props) => props.theme.spacing.space2}rem 0;\r\n\t\twidth: 100%;\r\n\t}\r\n`;\r\n\r\nexport const StandardPuffImage = styled(Image)<puffContent>`\r\n\tmargin: 0px;\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space2}rem;\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tmargin-top: ${(props) => props.theme.spacing.space1}rem;\r\n\t\tflex: 1;\r\n\t\theight: unset;\r\n\t\twidth: 122px;\r\n\t\t${(p) =>\r\n\t\t\t!p.preamble &&\r\n\t\t\t`\r\n\t\tmargin: 0; \r\n\t\t`};\r\n\t}\r\n`;\r\n\r\nexport const StandardPuffContent = styled.div<puffContent>`\r\n\t${mediaQueries.phone} {\r\n\t\t${(p) =>\r\n\t\t\t!p.preamble &&\r\n\t\t\t`\r\n\t\talign-self: center; \r\n\t\t`};\r\n\t\tflex: 2;\r\n\t\tpadding: 0 0 0 ${(props) => props.theme.spacing.space2}rem;\r\n\t}\r\n`;\r\n\r\nexport const StandardPuffTitleLink = styled(Link)`\r\n\t${(props) => props.theme.typography.style4.getStyle()};\r\n\tcolor: ${(props) => props.theme.palette.text.primary};\r\n`;\r\n\r\nexport const StandardPuffPreamble = styled.div`\r\n\t${(props) => props.theme.typography.style9.getStyle()};\r\n\tmargin-top: ${(props) => props.theme.spacing.space1}rem;\r\n\tpadding: 0;\r\n`;\r\n","/**\r\n * PuffCardMobile - styles\r\n */\r\n\r\nimport styled, { css } from 'styled-components';\r\nimport { getLinkArrowStyle } from 'theme/styles';\r\nimport Link from 'components/Boilerplate/Link';\r\nimport { CommonDecalStyle } from 'components/Panels/Panels.styles';\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport { px2rem } from 'theme/utils';\r\nimport { mediaQueries } from 'theme';\r\n\r\nexport const PuffCardMobileStyle = styled(Link)`\r\n\tdisplay: flex;\r\n\tflex-direction: row-reverse;\r\n\tflex-grow: 1;\r\n\r\n\tpadding-bottom: ${(props) => props.theme.spacing.space1}rem;\r\n\tborder-bottom: 1px solid ${(props) => props.theme.colors.black}20;\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space2}rem;\r\n\r\n\t&:after {\r\n\t\tcontent: none;\r\n\t}\r\n\r\n\t&:hover {\r\n\t\ttext-decoration: none;\r\n\t}\r\n`;\r\n\r\n// TODO: Do we need object-fit: contain;\r\nexport const PuffCardMobileImageStyle = styled.div`\r\n\tflex-basis: 123px;\r\n\tmin-width: 123px;\r\n\talign-self: start;\r\n\r\n\timg {\r\n\t\theight: 100%;\r\n\t\twidth: 100%;\r\n\t\tobject-fit: contain;\r\n\t}\r\n`;\r\n\r\nexport const PuffCardMobileTimeStyle = styled.span`\r\n\tfont-size: ${px2rem(14)};\r\n\tcolor: ${(props) => props.theme.palette.text.primary};\r\n`;\r\n\r\n// TODO: Do we need object-fit: contain;\r\nexport const PuffCardMobileTextContainerStyle = styled.div<TimeBool>`\r\n\tflex-grow: 1;\r\n\r\n\tpadding: 0 ${(props) => props.theme.spacing.space2}rem;\r\n\talign-self: center;\r\n\tmargin-top: ${(props) => props.hasDate && '-10px'};\r\n`;\r\n\r\nexport const PuffCardMobileDecalStyle = styled(CommonDecalStyle)``;\r\n\r\nexport type CompactType = {\r\n\tcompact: boolean;\r\n};\r\n\r\nexport type TimeBool = {\r\n\thasDate?: boolean;\r\n};\r\n\r\nexport const getHeaderCompactStyle = (compact: boolean) => {\r\n\tif (!compact) {\r\n\t\treturn css`\r\n\t\t\t&:after {\r\n\t\t\t\tcontent: none;\r\n\t\t\t}\r\n\t\t\t${PuffCardMobileStyle}:hover &,${PuffCardMobileStyle}:focus & {\r\n\t\t\t\ttext-decoration: none;\r\n\t\t\t}\r\n\t\t`;\r\n\t}\r\n\r\n\treturn css`\r\n\t\t${getLinkArrowStyle()};\r\n\r\n\t\t${PuffCardMobileStyle}:hover &,${PuffCardMobileStyle}:focus & {\r\n\t\t\ttext-decoration: underline;\r\n\t\t\t&:after {\r\n\t\t\t\topacity: 1;\r\n\t\t\t}\r\n\t\t}\r\n\t`;\r\n};\r\n\r\nexport const PuffCardMobileHeaderStyle = styled(Heading)<CompactType>`\r\n\t${mediaQueries.phone} {\r\n\t\tfont-size: ${px2rem(18)};\r\n\t}\r\n\r\n\t${({ compact }) => getHeaderCompactStyle(compact)}\r\n`;\r\n\r\nexport const PuffCardMobilePreambleStyle = styled.div`\r\n\t${(props) => props.theme.typography.style9.getStyle()};\r\n\tmargin-top: ${(props) => props.theme.spacing.space1}rem;\r\n\tmax-width: 65ch;\r\n\r\n\tdisplay: -webkit-box;\r\n\toverflow: hidden;\r\n\ttext-overflow: ellipsis;\r\n\t-webkit-box-orient: vertical;\r\n\t-webkit-line-clamp: 3;\r\n`;\r\n\r\nexport const PuffCardMobileMetadataStyle = styled.div`\r\n\tmargin-top: ${(props) => props.theme.spacing.space2}rem;\r\n`;\r\n\r\nexport const PuffCardMobileLinkStyle = styled.div`\r\n\t${(props) => props.theme.typography.style6.getStyle()};\r\n\tcolor: ${(props) => props.theme.colors.secondaryBlue};\r\n\tmargin-top: ${(props) => props.theme.spacing.space1}rem;\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tfont-size: ${px2rem(16)};\r\n\t}\r\n\r\n\t${getLinkArrowStyle()};\r\n\r\n\t${PuffCardMobileStyle}:hover &,${PuffCardMobileStyle}:focus & {\r\n\t\ttext-decoration: underline;\r\n\t\t&:after {\r\n\t\t\topacity: 1;\r\n\t\t}\r\n\t}\r\n`;\r\n","import { PuffCardProps } from 'components/PuffCard/PuffCard';\r\nimport { useImageTitle } from 'hooks/useImageTitle';\r\nimport React, { useContext } from 'react';\r\nimport { ThemeContext } from 'styled-components';\r\nimport {\r\n\tPuffCardMobileDecalStyle,\r\n\tPuffCardMobileHeaderStyle,\r\n\tPuffCardMobileImageStyle,\r\n\tPuffCardMobileLinkStyle,\r\n\tPuffCardMobileMetadataStyle,\r\n\tPuffCardMobilePreambleStyle,\r\n\tPuffCardMobileStyle,\r\n\tPuffCardMobileTextContainerStyle,\r\n\tPuffCardMobileTimeStyle,\r\n} from './PuffCardMobile.styles';\r\n\r\n/**\r\n * # PuffCard\r\n *\r\n * Puff List item\r\n */\r\nexport const PuffCardMobile: React.FC<PuffCardProps> = ({\r\n\tdecal,\r\n\theadingLevel,\r\n\theading,\r\n\tlink,\r\n\tpreamble,\r\n\timage,\r\n\tcompact,\r\n\tchildren,\r\n\tpublicationDate,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst title = useImageTitle(\r\n\t\timage?.photographer,\r\n\t\timage?.agency,\r\n\t\timage?.illustrator\r\n\t);\r\n\r\n\tif (!link) return null;\r\n\r\n\treturn (\r\n\t\t<PuffCardMobileStyle\r\n\t\t\tto={link.url}\r\n\t\t\taria-label={link?.heading}\r\n\t\t\texternal={link.isFile}\r\n\t\t>\r\n\t\t\t<PuffCardMobileTextContainerStyle\r\n\t\t\t\thasDate={typeof publicationDate === 'string'}\r\n\t\t\t>\r\n\t\t\t\t{decal && <PuffCardMobileDecalStyle>{decal}</PuffCardMobileDecalStyle>}\r\n\t\t\t\t{publicationDate && (\r\n\t\t\t\t\t<PuffCardMobileTimeStyle>\r\n\t\t\t\t\t\t<time dateTime={publicationDate}>{publicationDate}</time>\r\n\t\t\t\t\t</PuffCardMobileTimeStyle>\r\n\t\t\t\t)}\r\n\t\t\t\t{heading && (\r\n\t\t\t\t\t<PuffCardMobileHeaderStyle\r\n\t\t\t\t\t\tcompact={compact ? compact : false}\r\n\t\t\t\t\t\tcolor={compact ? undefined : themeContext.palette.text.primary}\r\n\t\t\t\t\t\tzeroBottom={true}\r\n\t\t\t\t\t\tstyleLevel={4}\r\n\t\t\t\t\t\tlevel={headingLevel}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{heading}\r\n\t\t\t\t\t</PuffCardMobileHeaderStyle>\r\n\t\t\t\t)}\r\n\t\t\t\t{!compact && preamble && (\r\n\t\t\t\t\t<PuffCardMobilePreambleStyle>{preamble}</PuffCardMobilePreambleStyle>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{children && (\r\n\t\t\t\t\t<PuffCardMobileMetadataStyle>{children}</PuffCardMobileMetadataStyle>\r\n\t\t\t\t)}\r\n\t\t\t</PuffCardMobileTextContainerStyle>\r\n\t\t\t{image && (\r\n\t\t\t\t<PuffCardMobileImageStyle>\r\n\t\t\t\t\t<img\r\n\t\t\t\t\t\tsrc={image.src}\r\n\t\t\t\t\t\tsrcSet={image.srcSet}\r\n\t\t\t\t\t\talt={image.alt}\r\n\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</PuffCardMobileImageStyle>\r\n\t\t\t)}\r\n\t\t</PuffCardMobileStyle>\r\n\t);\r\n};\r\n\r\nexport default PuffCardMobile;\r\n","/**\r\n * StandardPuff\r\n */\r\nimport React, { useContext } from 'react';\r\nimport { ImageFragmentModel } from 'types/fragments';\r\nimport {\r\n\tStandardPuffColumnReverse,\r\n\tStandardPuffHeaderStyle,\r\n\tStandardPuffImageStyle,\r\n\tStandardPuffMetadataStyle,\r\n\tStandardPuffPreambleStyle,\r\n\tStandardPuffStyle,\r\n\tStandardPuffTextContainerStyle,\r\n\tStandardPuffTimeStyle,\r\n} from './StandardPuff.styles';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport PuffCardMobile from 'components/PuffCardMobile';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { useImageTitle } from 'hooks/useImageTitle';\r\n\r\nexport interface StandardPuffProps {\r\n\t/**\r\n\t * Heading\r\n\t */\r\n\theading?: string | undefined;\r\n\t/**\r\n\t * Heading level\r\n\t */\r\n\theadingLevel?: number | undefined;\r\n\t/**\r\n\t * Link\r\n\t */\r\n\tlink?: LinkType | null;\r\n\t/**\r\n\t * Preamble\r\n\t */\r\n\tpreamble?: string | null;\r\n\t/**\r\n\t * Image\r\n\t */\r\n\timage?: ImageFragmentModel | null;\r\n\t/**\r\n\t * Compact view\r\n\t * (no bottom link on 'mobile')\r\n\t */\r\n\tcompact?: boolean;\r\n\r\n\t/**\r\n\t * optional for microsite\r\n\t */\r\n\tpublicationDate?: string;\r\n}\r\n\r\nconst StandardPuff: React.FC<StandardPuffProps> = ({\r\n\timage,\r\n\theading,\r\n\theadingLevel,\r\n\tlink,\r\n\tpreamble,\r\n\tcompact,\r\n\tchildren,\r\n\tpublicationDate,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst isPhone = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.tablet - 1,\r\n\t});\r\n\r\n\tconst title = useImageTitle(\r\n\t\timage?.photographer,\r\n\t\timage?.agency,\r\n\t\timage?.illustrator\r\n\t);\r\n\r\n\tif (!link) return null;\r\n\r\n\tif (isPhone) {\r\n\t\treturn (\r\n\t\t\t<PuffCardMobile\r\n\t\t\t\timage={image}\r\n\t\t\t\theadingLevel={headingLevel}\r\n\t\t\t\theading={heading}\r\n\t\t\t\tpreamble={preamble}\r\n\t\t\t\tcompact={false}\r\n\t\t\t\tlink={link}\r\n\t\t\t\tpublicationDate={publicationDate}\r\n\t\t\t>\r\n\t\t\t\t{children}\r\n\t\t\t</PuffCardMobile>\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t<StandardPuffStyle\r\n\t\t\tto={link.url}\r\n\t\t\taria-label={link?.heading}\r\n\t\t\texternal={link.isFile}\r\n\t\t>\r\n\t\t\t<StandardPuffColumnReverse>\r\n\t\t\t\t<StandardPuffTextContainerStyle>\r\n\t\t\t\t\t{publicationDate && (\r\n\t\t\t\t\t\t<StandardPuffTimeStyle\r\n\t\t\t\t\t\t\thasImage={image !== null && image !== undefined}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<time dateTime={publicationDate}>{publicationDate}</time>\r\n\t\t\t\t\t\t</StandardPuffTimeStyle>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t<StandardPuffHeaderStyle\r\n\t\t\t\t\t\tcolor={themeContext.palette.text.primary}\r\n\t\t\t\t\t\tzeroBottom={true}\r\n\t\t\t\t\t\tstyleLevel={4}\r\n\t\t\t\t\t\tlevel={headingLevel}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{link.heading}\r\n\t\t\t\t\t</StandardPuffHeaderStyle>\r\n\t\t\t\t\t{preamble && (\r\n\t\t\t\t\t\t<StandardPuffPreambleStyle>{preamble}</StandardPuffPreambleStyle>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</StandardPuffTextContainerStyle>\r\n\r\n\t\t\t\t{image && (\r\n\t\t\t\t\t<StandardPuffImageStyle>\r\n\t\t\t\t\t\t<img\r\n\t\t\t\t\t\t\tsrc={image.src}\r\n\t\t\t\t\t\t\tsrcSet={image.srcSet}\r\n\t\t\t\t\t\t\talt={image.alt}\r\n\t\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</StandardPuffImageStyle>\r\n\t\t\t\t)}\r\n\t\t\t</StandardPuffColumnReverse>\r\n\r\n\t\t\t{children && (\r\n\t\t\t\t<StandardPuffMetadataStyle>{children}</StandardPuffMetadataStyle>\r\n\t\t\t)}\r\n\t\t</StandardPuffStyle>\r\n\t);\r\n};\r\n\r\nexport default StandardPuff;\r\n","import PuffListItem from 'components/PuffListItem';\r\nimport StandardPuff from 'components/StandardPuffModel';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport { ViewType } from 'types/enums';\r\nimport { StandardPuffModel } from 'types/fragments';\r\nimport { Options } from '../EpiFragments';\r\n\r\nexport const GetStandardPuffElement = (\r\n\tstandardPuffModel: StandardPuffModel,\r\n\toptions: Options\r\n) => {\r\n\tconst newLink: LinkType = {\r\n\t\turl: standardPuffModel.url,\r\n\t\theading: standardPuffModel.heading,\r\n\t};\r\n\r\n\t// assign default view type in Microsite\r\n\tconst viewType =\r\n\t\toptions.themeContext.isMicrositeActive && options.view === null\r\n\t\t\t? (options.view = ViewType.List)\r\n\t\t\t: options.view;\r\n\r\n\tswitch (viewType) {\r\n\t\tdefault:\r\n\t\tcase ViewType.Card: {\r\n\t\t\treturn (\r\n\t\t\t\t<StandardPuff\r\n\t\t\t\t\tkey={options.index}\r\n\t\t\t\t\timage={standardPuffModel.image}\r\n\t\t\t\t\theading={standardPuffModel.heading}\r\n\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\tlink={newLink}\r\n\t\t\t\t\tpublicationDate={standardPuffModel.publicationDate}\r\n\t\t\t\t\tpreamble={standardPuffModel.preamble}\r\n\t\t\t\t></StandardPuff>\r\n\t\t\t);\r\n\t\t}\r\n\t\tcase ViewType.List:\r\n\t\tcase ViewType.CompactList:\r\n\t\t\treturn (\r\n\t\t\t\t<PuffListItem\r\n\t\t\t\t\tkey={options.index}\r\n\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\tpreamble={standardPuffModel.preamble}\r\n\t\t\t\t\tlink={newLink.url && newLink.heading ? newLink : undefined}\r\n\t\t\t\t\tpublicationDate={standardPuffModel.publicationDate}\r\n\t\t\t\t\timage={standardPuffModel.image}\r\n\t\t\t\t\tcompact={viewType === ViewType.CompactList}\r\n\t\t\t\t></PuffListItem>\r\n\t\t\t);\r\n\t}\r\n};\r\n","/**\r\n * SubjectAreaIconPuff - styles\r\n */\r\n\r\nimport Image from 'components/Boilerplate/Image';\r\nimport Link from 'components/Boilerplate/Link';\r\nimport styled from 'styled-components';\r\nimport { gridMaxWidth } from 'theme/grid';\r\nimport { px } from 'theme/utils';\r\n\r\nexport const SubjectAreaIconPuffMobileContainer = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tmin-height: unset;\r\n\tborder-bottom: 1px solid ${props => props.theme.colors.grey3};\r\n\talign-items: flex-start;\r\n\tpadding: 0 0 ${props => props.theme.spacing.space2}rem 0;\r\n\twidth: 100%;\r\n`;\r\n\r\nexport const SubjectAreaIconPuffMobileImage = styled(Image)`\r\n\tmargin-top: ${props => props.theme.spacing.space1}rem 0 ${props => props.theme.spacing.space2}rem 0;\r\n\theight: unset;\r\n\twidth: 64px;\r\n`;\r\n\r\nexport const SubjectAreaIconPuffMobileContent = styled.div`\r\n\tflex: 2;\r\n\tpadding: 0 0 0 ${props => props.theme.spacing.space2}rem;\r\n\talign-self: center;\r\n`;\r\n\r\n// TODO: H2??\r\nexport const SubjectAreaIconPuffMobileTitleLink = styled(Link)`\r\n\t\t${props => props.theme.typography.style4.getStyle()};\t\t\r\n\tcolor: ${props => props.theme.palette.text.primary};\t\t\t\r\n\th2 {\r\n\t\tdisplay: inline;\r\n\t}\r\n`;\r\n\r\nexport const SubjectAreaIconPuffContainer = styled.div``;\r\n\r\nexport const SubjectAreaIconPuffLink = styled(Link)`\r\n\theight: 204px;\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\twidth: ${props => (px(gridMaxWidth - 16 * 2) - props.theme.spacing.space2 * 3) / 4}rem;\r\n\r\n\talign-items: center;\r\n\tbackground-color: ${props => props.theme.colors.white};\r\n\tpadding: ${props => props.theme.spacing.space4}rem ${props => props.theme.spacing.space2}rem\r\n\t${props => props.theme.spacing.space1}rem ${props => props.theme.spacing.space2}rem;\r\n\tborder: 3px solid transparent;\r\n\tcolor: ${props => props.theme.palette.text.primary};\t\t\t\r\n\r\n\t&:hover {\r\n\t\tborder: 3px solid ${props => props.theme.colors.secondaryBlue};\r\n\t}\r\n\r\n\th2 {\r\n\t\tflex: 1 1 auto;\r\n\t\tmargin-bottom: 0;\r\n\t\ttext-align: center;\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t}\r\n`;\r\n\r\nexport const SubjectAreaIconPuffImage = styled(Image)`\r\n\tmargin: 0px;\r\n\twidth: 64px;\r\n\tflex: 0;\r\n`;\r\n","/**\r\n * SubjectAreaIconPuff\r\n */\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport React from 'react';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport { EpiEvent } from 'types/epi';\r\nimport { ImageFragmentModel } from 'types/fragments';\r\nimport {\r\n\tSubjectAreaIconPuffMobileContainer,\r\n\tSubjectAreaIconPuffMobileContent,\r\n\tSubjectAreaIconPuffMobileImage,\r\n\tSubjectAreaIconPuffMobileTitleLink,\r\n\tSubjectAreaIconPuffContainer,\r\n\tSubjectAreaIconPuffImage,\r\n\tSubjectAreaIconPuffLink,\r\n} from './SubjectAreaIconPuff.styles';\r\n\r\nexport interface StandardPuffProps {\r\n\tlink: LinkType;\r\n\timage: ImageFragmentModel;\r\n\theadingLevel?: number;\r\n\tepi?: EpiEvent; // deprecated\r\n}\r\n\r\nconst SubjectAreaIconPuff: React.FC<StandardPuffProps> = ({\r\n\timage,\r\n\tlink,\r\n\theadingLevel,\r\n\tepi,\r\n}) => {\r\n\tconst isPhone = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.tablet - 1,\r\n\t});\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{isPhone ? (\r\n\t\t\t\t<>\r\n\t\t\t\t\t<SubjectAreaIconPuffMobileContainer>\r\n\t\t\t\t\t\t{image && (\r\n\t\t\t\t\t\t\t<SubjectAreaIconPuffMobileImage\r\n\t\t\t\t\t\t\t\talt={image.alt}\r\n\t\t\t\t\t\t\t\tsrc={image.src}\r\n\t\t\t\t\t\t\t></SubjectAreaIconPuffMobileImage>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t<SubjectAreaIconPuffMobileContent>\r\n\t\t\t\t\t\t\t{link && (\r\n\t\t\t\t\t\t\t\t<SubjectAreaIconPuffMobileTitleLink to={link.url}>\r\n\t\t\t\t\t\t\t\t\t{link.heading && (\r\n\t\t\t\t\t\t\t\t\t\t<Heading level={headingLevel} styleLevel={4}>\r\n\t\t\t\t\t\t\t\t\t\t\t{link.heading}\r\n\t\t\t\t\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</SubjectAreaIconPuffMobileTitleLink>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</SubjectAreaIconPuffMobileContent>\r\n\t\t\t\t\t</SubjectAreaIconPuffMobileContainer>\r\n\t\t\t\t</>\r\n\t\t\t) : (\r\n\t\t\t\t<>\r\n\t\t\t\t\t{link && (\r\n\t\t\t\t\t\t<SubjectAreaIconPuffContainer>\r\n\t\t\t\t\t\t\t<SubjectAreaIconPuffLink\r\n\t\t\t\t\t\t\t\tto={link.url}\r\n\t\t\t\t\t\t\t\tshowLinkIcon={false}\r\n\t\t\t\t\t\t\t\texternal={link.isFile}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{image && (\r\n\t\t\t\t\t\t\t\t\t<SubjectAreaIconPuffImage\r\n\t\t\t\t\t\t\t\t\t\talt={image.alt}\r\n\t\t\t\t\t\t\t\t\t\tsrc={image.src}\r\n\t\t\t\t\t\t\t\t\t></SubjectAreaIconPuffImage>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t<Heading level={headingLevel} styleLevel={4}>\r\n\t\t\t\t\t\t\t\t\t{link.heading}\r\n\t\t\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t\t</SubjectAreaIconPuffLink>\r\n\t\t\t\t\t\t</SubjectAreaIconPuffContainer>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default SubjectAreaIconPuff;\r\n","/**\r\n * PuffCard - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\nimport { getLinkArrowStyle } from 'theme/styles';\r\nimport Link from 'components/Boilerplate/Link';\r\nimport { CommonDecalStyle } from 'components/Panels/Panels.styles';\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport { mediaQueries } from 'theme';\r\n\r\nexport const PuffCardStyle = styled(Link)`\r\n\tbackground-color: ${(props) => props.theme.colors.white};\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tflex-basis: 300px;\r\n\tflex-shrink: 1;\r\n\tflex-grow: 1;\r\n\r\n\t${mediaQueries.tabletOrLarger} {\r\n\t\tflex-basis: calc(33.33% - 16px);\r\n\t\tmin-width: 300px;\r\n\t\tflex-shrink: 0;\r\n\t\tflex-grow: 0;\r\n\t}\r\n\r\n\t&:after {\r\n\t\tcontent: none;\r\n\t}\r\n\r\n\t&:hover {\r\n\t\ttext-decoration: none;\r\n\t}\r\n`;\r\n\r\n// TODO: Do we need object-fit: contain;\r\nexport const PuffCardImageStyle = styled.div`\r\n\timg {\r\n\t\theight: 100%;\r\n\t\twidth: 100%;\r\n\t\tobject-fit: contain;\r\n\t}\r\n`;\r\n\r\nexport const PuffColumnReverse = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: column-reverse;\r\n\tflex-grow: 1;\r\n`;\r\n\r\nexport const PuffColumn = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tflex-grow: 1;\r\n`;\r\n\r\nexport const PuffCardDecalStyle = styled(CommonDecalStyle)`\r\n\tmargin-top: ${(props) => props.theme.spacing.space2}rem;\r\n\ttext-align: center;\r\n\tpadding: 0 ${(props) => props.theme.spacing.space2}rem;\r\n`;\r\n\r\nexport const PuffCardTextContainerStyle = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tflex-grow: 1;\r\n\tpadding: ${(props) => props.theme.spacing.space2}rem;\r\n\ttext-align: center;\r\n\talign-self: center;\r\n\tjustify-content: center;\r\n`;\r\n\r\nexport const PuffCardHeaderStyle = styled(Heading)``;\r\n\r\nexport const PuffCardPreambleStyle = styled.div`\r\n\t${(props) => props.theme.typography.style9.getStyle()};\r\n\tmargin-top: ${(props) => props.theme.spacing.space2}rem;\r\n\tmax-width: 65ch;\r\n`;\r\n\r\nexport const PuffCardMetadataStyle = styled.div``;\r\n\r\nexport const PuffCardLinkStyle = styled.div`\r\n\t${(props) => props.theme.typography.style6.getStyle()};\r\n\tcolor: ${(props) => props.theme.colors.secondaryBlue};\r\n\r\n\tborder-top: 1px solid ${(props) => props.theme.colors.grey3};\r\n\tpadding: ${(props) => props.theme.spacing.space2}rem\r\n\t\t${(props) => props.theme.spacing.space2}rem;\r\n\tmargin: 0 ${(props) => props.theme.spacing.space2}rem;\r\n\r\n\ttext-align: center;\r\n\r\n\t${getLinkArrowStyle()};\r\n\r\n\t${PuffCardStyle}:hover &,${PuffCardStyle}:focus & {\r\n\t\ttext-decoration: underline;\r\n\t\t&:after {\r\n\t\t\topacity: 1;\r\n\t\t}\r\n\t}\r\n`;\r\n","import React, { useContext } from 'react';\r\nimport {\r\n\tPuffCardDecalStyle,\r\n\tPuffCardHeaderStyle,\r\n\tPuffCardImageStyle,\r\n\tPuffCardLinkStyle,\r\n\tPuffCardMetadataStyle,\r\n\tPuffCardPreambleStyle,\r\n\tPuffCardStyle,\r\n\tPuffCardTextContainerStyle,\r\n\tPuffColumn,\r\n\tPuffColumnReverse,\r\n} from './PuffCard.styles';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport { ImageFragmentModel } from 'types/fragments';\r\nimport Icon from 'components/Boilerplate/Icon';\r\nimport styled, { ThemeContext } from 'styled-components';\r\nimport PuffCardMobile from 'components/PuffCardMobile';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { breakpointsNumber, mediaQueries } from 'theme/media-queries';\r\nimport { useImageTitle } from 'hooks/useImageTitle';\r\n\r\nexport interface PuffCardProps {\r\n\t/**\r\n\t * decal\r\n\t */\r\n\tdecal?: string | null;\r\n\t/**\r\n\t * Heading\r\n\t */\r\n\theading?: string | undefined;\r\n\t/**\r\n\t * Heading level\r\n\t */\r\n\theadingLevel?: number | undefined;\r\n\t/**\r\n\t * Preamble\r\n\t */\r\n\tpreamble?: string | null;\r\n\t/**\r\n\t * Link\r\n\t */\r\n\tlink?: LinkType | null;\r\n\t/**\r\n\t * Image\r\n\t */\r\n\timage?: ImageFragmentModel | null;\r\n\t/**\r\n\t * Compact view\r\n\t * (no bottom link on 'mobile')\r\n\t */\r\n\tcompact?: boolean;\r\n\t/**\r\n\t * optional for microsite\r\n\t */\r\n\tpublicationDate?: string;\r\n}\r\n\r\n/**\r\n * # PuffCard\r\n *\r\n * Puff List item\r\n */\r\nconst PuffCard: React.FC<PuffCardProps> = ({\r\n\tdecal,\r\n\theadingLevel,\r\n\theading,\r\n\tlink,\r\n\tpreamble,\r\n\timage,\r\n\tcompact,\r\n\tchildren,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst isPhone = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.tablet - 1,\r\n\t});\r\n\r\n\tconst title = useImageTitle(\r\n\t\timage?.photographer,\r\n\t\timage?.agency,\r\n\t\timage?.illustrator\r\n\t);\r\n\r\n\tif (isPhone) {\r\n\t\treturn (\r\n\t\t\t<PuffCardMobile\r\n\t\t\t\timage={image}\r\n\t\t\t\tdecal={decal}\r\n\t\t\t\theadingLevel={headingLevel}\r\n\t\t\t\theading={heading}\r\n\t\t\t\tpreamble={preamble}\r\n\t\t\t\tcompact={compact}\r\n\t\t\t\tlink={link}\r\n\t\t\t>\r\n\t\t\t\t{children}\r\n\t\t\t</PuffCardMobile>\r\n\t\t);\r\n\t}\r\n\r\n\tif (!link) return null;\r\n\r\n\treturn (\r\n\t\t<PuffCardStyle to={link.url} aria-label={link?.heading}>\r\n\t\t\t<PuffColumnReverse>\r\n\t\t\t\t<PuffColumn>\r\n\t\t\t\t\t{decal && <PuffCardDecalStyle>{decal}</PuffCardDecalStyle>}\r\n\r\n\t\t\t\t\t<PuffCardTextContainerStyle>\r\n\t\t\t\t\t\t{heading && (\r\n\t\t\t\t\t\t\t<PuffCardHeaderStyle\r\n\t\t\t\t\t\t\t\tcolor={themeContext.palette.text.primary}\r\n\t\t\t\t\t\t\t\tzeroBottom={true}\r\n\t\t\t\t\t\t\t\tstyleLevel={4}\r\n\t\t\t\t\t\t\t\tlevel={headingLevel}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{heading}\r\n\t\t\t\t\t\t\t</PuffCardHeaderStyle>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{preamble && (\r\n\t\t\t\t\t\t\t<PuffCardPreambleStyle>{preamble}</PuffCardPreambleStyle>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</PuffCardTextContainerStyle>\r\n\t\t\t\t</PuffColumn>\r\n\r\n\t\t\t\t{image && (\r\n\t\t\t\t\t<PuffCardImageStyle>\r\n\t\t\t\t\t\t<img\r\n\t\t\t\t\t\t\tsrc={image.src}\r\n\t\t\t\t\t\t\tsrcSet={image.srcSet}\r\n\t\t\t\t\t\t\talt={image.alt}\r\n\t\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</PuffCardImageStyle>\r\n\t\t\t\t)}\r\n\t\t\t</PuffColumnReverse>\r\n\r\n\t\t\t{children && <PuffCardMetadataStyle>{children}</PuffCardMetadataStyle>}\r\n\r\n\t\t\t{link && link.heading && (\r\n\t\t\t\t<PuffCardLinkStyle>{link.heading}</PuffCardLinkStyle>\r\n\t\t\t)}\r\n\t\t</PuffCardStyle>\r\n\t);\r\n};\r\n\r\nexport default PuffCard;\r\n\r\n/**\r\n * TODO: Move to seperate file\r\n */\r\nexport interface CardClockStatusProps {\r\n\t/**\r\n\t * Color\r\n\t */\r\n\tcolor: string;\r\n\t/**\r\n\t * Text\r\n\t */\r\n\ttext?: string | null;\r\n}\r\n\r\n/**\r\n * TODO: Move to seperate file\r\n */\r\nexport const CardClockStatus: React.FC<CardClockStatusProps> = ({\r\n\tcolor,\r\n\ttext,\r\n}) => {\r\n\treturn (\r\n\t\t<CardClockStatusStyle color={color}>\r\n\t\t\t<Icon icon=\"clock\" color={color}></Icon>\r\n\t\t\t<span>{text}</span>\r\n\t\t</CardClockStatusStyle>\r\n\t);\r\n};\r\n\r\ntype ColorProp = {\r\n\tcolor: string;\r\n};\r\n\r\nconst CardClockStatusStyle = styled.div<ColorProp>`\r\n\t${(props) => props.theme.typography.style11.getStyle()};\r\n\tletter-spacing: -0.3px;\r\n\ttext-align: center;\r\n\tcolor: ${({ color }) => color};\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space1}rem;\r\n\r\n\tpadding: 0 ${(props) => props.theme.spacing.space2}rem;\r\n\r\n\t${mediaQueries.phone} {\r\n\t\ttext-align: inherit;\r\n\t\tpadding: 0;\r\n\t}\r\n\r\n\tsvg {\r\n\t\tvertical-align: middle;\r\n\t\tmargin-right: ${(props) => props.theme.spacing.space1}rem;\r\n\t\tmargin-bottom: 1px;\r\n\t}\r\n`;\r\n","/**\r\n * FaqPuff - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\n\r\nexport const StandardFaqPuff = styled.div``;\r\n\r\nexport const QuestionContainer = styled.div`\r\n\t${props => props.theme.typography.style4.getStyle()};\t\t\r\n\tmargin-bottom: ${props => props.theme.spacing.space1}rem;\r\n`;\r\n\r\nexport const AnswerContainer = styled.div`\r\n\t\t${props => props.theme.typography.style6.getStyle()};\t\t\r\n`;\r\n","/**\r\n * FaqPuff\r\n */\r\n\r\nimport { RichText } from 'components/Typography';\r\nimport React from 'react';\r\nimport {\r\n\tAnswerContainer,\r\n\tQuestionContainer,\r\n\tStandardFaqPuff,\r\n} from './FaqPuff.styles';\r\n\r\nexport type FaqPuffProps = {\r\n\tquestion: string;\r\n\tanswerRaw: string;\r\n};\r\n\r\n/** A FaqPuff */\r\nconst FaqPuff = ({ question, answerRaw }: FaqPuffProps) => {\r\n\treturn (\r\n\t\t<StandardFaqPuff>\r\n\t\t\t<QuestionContainer>{question}</QuestionContainer>\r\n\t\t\t<AnswerContainer>\r\n\t\t\t\t<RichText>\r\n\t\t\t\t\t<span dangerouslySetInnerHTML={{ __html: answerRaw }} />\r\n\t\t\t\t</RichText>\r\n\t\t\t</AnswerContainer>\r\n\t\t</StandardFaqPuff>\r\n\t);\r\n};\r\n\r\nexport default FaqPuff;\r\n","import PuffCard from 'components/PuffCard';\r\nimport PuffListItem from 'components/PuffListItem';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport { ViewType } from 'types/enums';\r\nimport { GuidancePuffModel } from 'types/fragments';\r\nimport { Options } from '../EpiFragments';\r\n\r\nexport const GetGuidancePuffModelElement = (\r\n\tguidancePuffModel: GuidancePuffModel,\r\n\toptions: Options\r\n) => {\r\n\tswitch (options?.view) {\r\n\t\tdefault:\r\n\t\tcase ViewType.Card:\r\n\t\t\treturn (\r\n\t\t\t\t<PuffCard\r\n\t\t\t\t\timage={guidancePuffModel.image}\r\n\t\t\t\t\tdecal={guidancePuffModel.decal}\r\n\t\t\t\t\theading={guidancePuffModel.heading}\r\n\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\tpreamble={guidancePuffModel.areaNames.join(' ')}\r\n\t\t\t\t\tlink={guidancePuffModel.link}\r\n\t\t\t\t></PuffCard>\r\n\t\t\t);\r\n\t\tcase ViewType.List:\r\n\t\t\tconst newLink: LinkType = {\r\n\t\t\t\turl: guidancePuffModel.link.url,\r\n\t\t\t\theading: guidancePuffModel.heading,\r\n\t\t\t\tisFile: guidancePuffModel.link.isFile,\r\n\t\t\t};\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<PuffListItem\r\n\t\t\t\t\tdecal={guidancePuffModel.decal}\r\n\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\tlink={newLink}\r\n\t\t\t\t\timage={guidancePuffModel.image}\r\n\t\t\t\t\tcompact={false}\r\n\t\t\t\t>\r\n\t\t\t\t\t{guidancePuffModel.areaNames.length > 0 && (\r\n\t\t\t\t\t\t<span>{guidancePuffModel.areaNames.join(' ')}</span>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</PuffListItem>\r\n\t\t\t);\r\n\r\n\t\tcase ViewType.CompactList:\r\n\t\t\treturn (\r\n\t\t\t\t<PuffListItem\r\n\t\t\t\t\tdecal={guidancePuffModel.decal}\r\n\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\tlink={guidancePuffModel.link}\r\n\t\t\t\t\timage={guidancePuffModel.image}\r\n\t\t\t\t\tcompact={true}\r\n\t\t\t\t>\r\n\t\t\t\t\t{guidancePuffModel.areaNames.length > 0 && (\r\n\t\t\t\t\t\t<span>{guidancePuffModel.areaNames.join(' ')}</span>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</PuffListItem>\r\n\t\t\t);\r\n\t}\r\n};\r\n","/**\r\n * HeroBanner - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\nimport { ImageFragmentModel } from 'types/fragments';\r\n\r\nexport const HeroBannerStyle = styled.div<ImageFragmentModel>`\r\n\tbackground-image: url(${(props) => props.src});\r\n\tbackground-repeat: no-repeat;\r\n\tbackground-size: cover;\r\n`;\r\n\r\nexport const HeroBannerTextBlockStyle = styled.div`\r\n\tdisplay: inline-block;\r\n\tbackground-color: ${props => props.theme.colors.white};\r\n\r\n\tmargin-top: ${props => props.theme.spacing.space7}rem;\r\n\tmargin-bottom: ${props => props.theme.spacing.space8}rem;\r\n\tpadding: ${props => props.theme.spacing.space3}rem ${props => props.theme.spacing.space5}rem;\r\n\t${mediaQueries.phone} {\r\n\t\tmargin-top: ${props => props.theme.spacing.space3}rem;\r\n\t\tmargin-bottom: ${props => props.theme.spacing.space7}rem;\r\n\t\tpadding: ${props => props.theme.spacing.space3}rem ${props => props.theme.spacing.space3}rem;\r\n\t}\r\n`;\r\n\r\n","/**\r\n * HeroBanner\r\n */\r\nimport { Cell, Grid } from 'components/Boilerplate/Grid';\r\nimport Link from 'components/Boilerplate/Link';\r\nimport Typography from 'components/Typography';\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport { useImageTitle } from 'hooks/useImageTitle';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport React from 'react';\r\nimport { ImageFragmentModel } from 'types/fragments';\r\nimport { HeroBannerStyle, HeroBannerTextBlockStyle } from './HeroBanner.styles';\r\n\r\nexport interface HeroBannerProps {\r\n\ttextToRight: boolean;\r\n\timage: ImageFragmentModel;\r\n\t/**\r\n\t * Heading level\r\n\t */\r\n\theadingLevel?: number;\r\n\theading: string;\r\n\ttext: string;\r\n\tlink: LinkType;\r\n}\r\n\r\n/** This is the banner component */\r\nconst HeroBanner: React.FC<HeroBannerProps> = ({\r\n\ttextToRight,\r\n\timage,\r\n\theadingLevel,\r\n\theading,\r\n\ttext,\r\n\tlink,\r\n}) => {\r\n\tconst title = useImageTitle(\r\n\t\timage?.photographer,\r\n\t\timage?.agency,\r\n\t\timage?.illustrator\r\n\t);\r\n\r\n\treturn (\r\n\t\t<HeroBannerStyle {...image} title={title}>\r\n\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t<Grid inner={true}>\r\n\t\t\t\t\t{textToRight && <Cell span={7} tablet={3} phone={0}></Cell>}\r\n\r\n\t\t\t\t\t<Cell span={5} tablet={5} phone={4}>\r\n\t\t\t\t\t\t<HeroBannerTextBlockStyle>\r\n\t\t\t\t\t\t\t{heading && (\r\n\t\t\t\t\t\t\t\t<Heading level={headingLevel} styleLevel={3}>\r\n\t\t\t\t\t\t\t\t\t{heading}\r\n\t\t\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t{text && <Typography as=\"p\">{text}</Typography>}\r\n\t\t\t\t\t\t\t{link && (\r\n\t\t\t\t\t\t\t\t<Link to={link.url} external={link.isFile}>\r\n\t\t\t\t\t\t\t\t\t{link.heading}\r\n\t\t\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</HeroBannerTextBlockStyle>\r\n\t\t\t\t\t</Cell>\r\n\t\t\t\t</Grid>\r\n\t\t\t</Grid>\r\n\t\t</HeroBannerStyle>\r\n\t);\r\n};\r\n\r\nexport default HeroBanner;\r\n","/**\r\n * DashboardBlock - styles\r\n */\r\n\r\nimport { ThemeProps } from 'components/Banner/Banner';\r\nimport { getThemeBackground, getThemeTextColor } from 'pages/sharedModelTypes';\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\n\r\nexport const DashboardBlockStyle = styled.div<ThemeProps>`\r\n\tbackground-color: ${(p) => getThemeBackground(p.theme, p.themeName)};\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n`;\r\n\r\nexport const DashboardLineStyle = styled.div<ThemeProps>`\r\n\tbackground-color: ${(p) => getThemeBackground(p.theme, p.themeName)};\r\n\tdisplay: grid;\r\n\tgrid-template-columns: 25% 25% 25% 25%;\r\n\r\n\t> :not(:last-child) {\r\n\t\tborder-right: 1px solid ${(p) => getThemeTextColor(p.theme, p.themeName)}65;\r\n\t}\r\n\r\n\tpadding: ${props => props.theme.spacing.space4}rem 0;\r\n\r\n\t${mediaQueries.tablet} {\r\n\t\tgrid-template-columns: 50% 50%;\r\n\r\n\t\t> :nth-child(2) {\r\n\t\t\tborder-right: none;\r\n\t\t}\r\n\t\t> :nth-child(4) {\r\n\t\t\tborder-right: none;\r\n\t\t}\r\n\r\n\t\t> :nth-child(-n + 2) {\r\n\t\t\tmargin-bottom: ${props => props.theme.spacing.space4 * 2}rem;\r\n\t\t}\r\n\r\n\t\t> :nth-child(1)::after {\r\n\t\t\tcontent: '';\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: relative;\r\n\t\t\tmargin-left: 50px;\r\n\t\t\ttop: ${props => props.theme.spacing.space4}rem;\r\n\t\t\theight: 1px;\r\n\t\t\tbackground: ${(p) => getThemeTextColor(p.theme, p.themeName)}45;\r\n\t\t}\r\n\r\n\t\t> :nth-child(2)::after {\r\n\t\t\tcontent: '';\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: relative;\r\n\t\t\tmargin-right: 50px;\r\n\t\t\ttop: ${props => props.theme.spacing.space4}rem;\r\n\t\t\theight: 1px;\r\n\t\t\tbackground: ${(p) => getThemeTextColor(p.theme, p.themeName)}45;\r\n\t\t}\r\n\t}\r\n\t// TODO: this is a quick fix for making dashboards render two-and-two in mobile. Not the best fix.\r\n\t${mediaQueries.phone} {\r\n\t\tgrid-template-columns: 50% 50%;\r\n\r\n\t\t> :nth-child(2) {\r\n\t\t\tborder-right: none;\r\n\t\t}\r\n\t\t> :nth-child(4) {\r\n\t\t\tborder-right: none;\r\n\t\t}\r\n\r\n\t\t> :nth-child(-n + 2) {\r\n\t\t\tmargin-bottom: ${props => props.theme.spacing.space4 * 2}rem;\r\n\t\t}\r\n\r\n\t\t> :nth-child(1)::after {\r\n\t\t\tcontent: '';\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: relative;\r\n\t\t\tmargin-left: 25px;\r\n\t\t\ttop: ${props => props.theme.spacing.space4}rem;\r\n\t\t\theight: 1px;\r\n\t\t\tbackground: ${(p) => getThemeTextColor(p.theme, p.themeName)}45;\r\n\t\t}\r\n\r\n\t\t> :nth-child(2)::after {\r\n\t\t\tcontent: '';\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: relative;\r\n\t\t\tmargin-right: 25px;\r\n\t\t\ttop: ${props => props.theme.spacing.space4}rem;\r\n\t\t\theight: 1px;\r\n\t\t\tbackground: ${(p) => getThemeTextColor(p.theme, p.themeName)}45;\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nexport const DashboardLineDeviderStyle = styled.div<ThemeProps>`\r\n\topacity: 0.25;\r\n\theight: 1px;\r\n\tbackground-color: ${(p) => getThemeTextColor(p.theme, p.themeName)};\r\n\tjustify-self: center;\r\n\tmargin: 0 ${props => props.theme.spacing.space5}rem;\r\n`;\r\n","/**\r\n * DashboardBlock\r\n */\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport { Options, wrapElementInGrid } from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { PuffTheme } from 'pages/sharedModelTypes';\r\nimport React, { useContext, useEffect, useState } from 'react';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { FragmentModelTypes } from 'types/fragments';\r\nimport {\r\n\tDashboardBlockStyle,\r\n\tDashboardLineDeviderStyle,\r\n\tDashboardLineStyle,\r\n} from './DashboardBlock.styles';\r\n\r\n\r\nexport type DashboardBlockProps = {\r\n\ttheme: string;\r\n\titems: FragmentModelTypes[];\r\n\toptions: Options;\r\n\tdisableCustomHeadingLogic: boolean;\r\n}\r\n\r\n/** This is the banner component */\r\nconst DashboardBlock: React.FC<DashboardBlockProps> = ({\r\n\ttheme,\r\n\titems,\r\n\toptions,\r\n\tdisableCustomHeadingLogic\r\n}) => {\r\n\tconst puffTheme = theme as PuffTheme;\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst [preparedItems, setPreparedItems] = useState<FragmentModelTypes[][]>();\r\n\r\n\tuseEffect(() => {\r\n\t\t// Add theme property to each item\r\n\t\tconst newItems = items.map((item) => {\r\n\t\t\treturn { ...item, theme: theme };\r\n\t\t});\r\n\r\n\t\tlet chunkList: FragmentModelTypes[][] = [];\r\n\r\n\t\tvar i,\r\n\t\t\tj,\r\n\t\t\ttemparray,\r\n\t\t\tchunk = 4;\r\n\t\tfor (i = 0, j = newItems.length; i < j; i += chunk) {\r\n\t\t\ttemparray = newItems.slice(i, i + chunk);\r\n\t\t\tchunkList.push(temparray as FragmentModelTypes[]);\r\n\t\t}\r\n\r\n\t\tsetPreparedItems(chunkList);\r\n\t}, [items, theme]);\r\n\r\n\tconst element = <DashboardBlockStyle themeName={puffTheme}>\r\n\t\t{preparedItems?.map((item, index) => {\r\n\t\t\treturn (\r\n\t\t\t\t<div key={index}>\r\n\t\t\t\t\t<DashboardLine\r\n\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\toptions={{ ...options, insideGrid: true, themeContext: themeContext }}\r\n\t\t\t\t\t\titems={item}\r\n\t\t\t\t\t\ttheme={theme}\r\n\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\r\n\t\t\t\t\t></DashboardLine>\r\n\t\t\t\t\t{index < preparedItems.length - 1 && (\r\n\t\t\t\t\t\t<DashboardLineDeviderStyle\r\n\t\t\t\t\t\t\tthemeName={puffTheme}\r\n\t\t\t\t\t\t></DashboardLineDeviderStyle>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</div>\r\n\t\t\t);\r\n\t\t})}\r\n\t</DashboardBlockStyle>\r\n\r\n\tif (options?.insideGrid) {\r\n\t\treturn element;\r\n\t}\r\n\treturn wrapElementInGrid(element);\r\n};\r\n\r\nexport default DashboardBlock;\r\n\r\ntype DashboardLineProps = {\r\n\ttheme: string;\r\n\titems: FragmentModelTypes[];\r\n\toptions: Options;\r\n\tdisableCustomHeadingLogic: boolean;\r\n};\r\n\r\n/** This is the DashboardLine component\r\n * 4 Widget blocks\r\n */\r\nconst DashboardLine: React.FC<DashboardLineProps> = ({\r\n\ttheme,\r\n\titems,\r\n\toptions,\r\n\tdisableCustomHeadingLogic\r\n}) => {\r\n\tconst puffTheme = theme as PuffTheme;\r\n\treturn (\r\n\t\t<DashboardLineStyle themeName={puffTheme}>\r\n\t\t\t<EpiFragments\r\n\t\t\t\tinsideGrid={options.insideGrid}\r\n\t\t\t\tinsideCell={options.insideCell}\r\n\t\t\t\tinsideInnerGrid={options.insideInnerGrid}\r\n\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\tfragments={items}\r\n\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t/>\r\n\t\t</DashboardLineStyle>\r\n\t);\r\n};\r\n","/**\r\n * PuffContainer - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\n\r\nexport interface ContactBlockStyles {\r\n\tjobTitle: string | null;\r\n}\r\n\r\nexport const ContactBlockContainer = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tbackground-color: ${props => props.theme.colors.white};\r\n\timg {\r\n\t\twidth: 102px;\r\n\t\tobject-fit: cover;\r\n\t}\r\n`;\r\n\r\nexport const ContactBlockContentWrapper = styled.div<ContactBlockStyles>`\r\n\tflex-direction: column;\r\n\tpadding: ${props => props.theme.spacing.space4}rem;\r\n\talign-items: flex-start;\r\n\tdisplay: flex;\r\n\tjustify-content: center;\r\n`;\r\n\r\nexport const ContactBlockHeader = styled.div`\r\n\t\t${props => props.theme.typography.style8.getStyle()};\t\t\r\n\tcolor: ${props => props.theme.palette.text.primary};\t\t\t\r\n\tmargin-bottom: ${props => props.theme.spacing.space1}rem;\r\n`;\r\n\r\nexport const ContactBlockSubTitle = styled.div`\r\n\t\t${props => props.theme.typography.style9.getStyle()};\t\t\r\n`;\r\n","/**\r\n * ContactBlock\r\n */\r\nimport Image from 'components/Boilerplate/Image';\r\nimport { useImageTitle } from 'hooks/useImageTitle';\r\nimport React from 'react';\r\nimport { ImageFragmentModel } from 'types/fragments';\r\nimport {\r\n\tContactBlockContainer,\r\n\tContactBlockContentWrapper,\r\n\tContactBlockHeader,\r\n\tContactBlockSubTitle,\r\n} from './ContactBlock.styles';\r\n\r\nexport interface ContactBlockProps {\r\n\timage: ImageFragmentModel;\r\n\tfullName: string;\r\n\tjobTitle: string | null;\r\n}\r\n\r\nconst ContactBlock: React.FC<ContactBlockProps> = ({\r\n\timage,\r\n\tfullName,\r\n\tjobTitle,\r\n}) => {\r\n\r\n\tconst title = useImageTitle(image?.photographer, image?.agency, image?.illustrator);\r\n\r\n\treturn (\r\n\t\t<ContactBlockContainer>\r\n\t\t\t{image && <Image\r\n\t\t\t\t\t\talt={image.alt}\r\n\t\t\t\t\t\tsrc={image.src}\r\n\t\t\t\t\t\tsrcSet={image.srcSet}\r\n\t\t\t\t\t\ttitle={title}>\r\n\t\t\t\t</Image>}\r\n\r\n\t\t\t<ContactBlockContentWrapper jobTitle={jobTitle}>\r\n\t\t\t\t{fullName && <ContactBlockHeader>{fullName}</ContactBlockHeader>}\r\n\t\t\t\t{jobTitle && <ContactBlockSubTitle>{jobTitle}</ContactBlockSubTitle>}\r\n\t\t\t</ContactBlockContentWrapper>\r\n\t\t</ContactBlockContainer>\r\n\t);\r\n};\r\n\r\nexport default ContactBlock;\r\n","/**\r\n * WidgetNumericBlock - styles\r\n */\r\n\r\nimport { ThemeProps } from 'components/Banner/Banner';\r\nimport {\r\n\tgetThemeHeadingColor,\r\n\tgetThemeTextColor,\r\n} from 'pages/sharedModelTypes';\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\nimport { px2rem } from 'theme/utils';\r\nimport { Rotate } from 'types/enums';\r\n\r\ninterface ArrowProps {\r\n\trotate: Rotate | undefined;\r\n}\r\n\r\nexport const WidgetNumericBlockStyle = styled.div`\r\n\ttext-align: center;\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tflex: 1 1 0px;\r\n\r\n\t${mediaQueries.phone} {\r\n\t\ta {\r\n\t\t\tfont-size: ${px2rem(16)};\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nexport const WidgetNumericBlockHeader = styled.div<ThemeProps>`\r\n\t\t${props => props.theme.typography.style9.getStyle()};\t\t\r\n\tcolor: ${(p) => getThemeTextColor(p.theme, p.themeName)};\r\n\tpadding: 0 ${props => props.theme.spacing.space2}rem;\r\n\tletter-spacing: 1.07px;\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tletter-spacing: 1.07px;\r\n\t\th1,\r\n\t\th2,\r\n\t\th3,\r\n\t\th4,\r\n\t\th5,\r\n\t\th6 {\r\n\t\t\tspan {\r\n\t\t\t\tfont-size: ${px2rem(14)};\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\ttext-transform: uppercase;\r\n\tmargin-bottom: ${props => props.theme.spacing.space1}rem;\r\n\tflex: 1 1 auto;\r\n\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n`;\r\nexport const WidgetNumericBlockText = styled.div<ThemeProps>`\r\n\t\t${props => props.theme.typography.style2.getStyle()};\t\t\r\n\tcolor: ${(p) => getThemeHeadingColor(p.theme, p.themeName)};\r\n\tmargin-bottom: ${props => props.theme.spacing.space1}rem;\r\n\tpadding: 0 ${props => props.theme.spacing.space2}rem;\r\n`;\r\n\r\nexport const WidgetNumericBlockSubText = styled.div<ThemeProps>`\r\n\t\t${props => props.theme.typography.style5.getStyle()};\t\t\r\n\tcolor: ${(p) => getThemeTextColor(p.theme, p.themeName)};\r\n\tpadding: 0 ${props => props.theme.spacing.space2}rem;\r\n\ttext-transform: none;\r\n\tletter-spacing: 1.2px;\r\n\t${mediaQueries.phone} {\r\n\t\ttext-transform: none;\r\n\t\tletter-spacing: 1.2px;\r\n\t}\r\n`;\r\n\r\nexport const CharRotator = styled.span<ArrowProps>`\r\n\tfont-family: 'Akkurat Pro';\r\n\tfont-size: 16px;\r\n\tvertical-align: text-top;\r\n\tmargin-left: 5px;\r\n\r\n\ttransform: rotate(${(p) => p.rotate + 'deg'});\r\n\tdisplay: inline-block;\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tvertical-align: middle;\r\n\t}\r\n`;\r\n","/**\r\n * DashboardBlock\r\n */\r\nimport Link from 'components/Boilerplate/Link';\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport { getThemeTextColor, PuffTheme } from 'pages/sharedModelTypes';\r\nimport React, { useContext } from 'react';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { WidgetNumericBlockModel } from 'types/fragments';\r\nimport { getRotationDegrees } from 'utils/helper-utils';\r\nimport {\r\n\tWidgetNumericBlockHeader,\r\n\tWidgetNumericBlockStyle,\r\n\tWidgetNumericBlockSubText,\r\n\tWidgetNumericBlockText,\r\n\tCharRotator,\r\n} from './WidgetNumericBlock.styles';\r\n\r\n/** This is the banner component */\r\nconst WidgetNumericBlock: React.FC<WidgetNumericBlockModel> = ({\r\n\theading,\r\n\ttext,\r\n\tsubtext,\r\n\tlink,\r\n\ttheme,\r\n\ttrend,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst triangleChar = '\\u25B2';\r\n\tconst puffTheme = theme as PuffTheme;\r\n\treturn (\r\n\t\t<WidgetNumericBlockStyle>\r\n\t\t\t<WidgetNumericBlockHeader themeName={puffTheme}>\r\n\t\t\t\t{heading !== null && heading !== undefined ? (\r\n\t\t\t\t\t<Heading\r\n\t\t\t\t\t\tlevel={2}\r\n\t\t\t\t\t\tcolor={getThemeTextColor(themeContext, theme)}\r\n\t\t\t\t\t\tstyleLevel={5}\r\n\t\t\t\t\t\tzeroBottom={true}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<span>{heading}</span>\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<span>{'\\u00A0'}</span>\r\n\t\t\t\t)}\r\n\t\t\t</WidgetNumericBlockHeader>\r\n\r\n\t\t\t<WidgetNumericBlockText themeName={puffTheme}>\r\n\t\t\t\t<span>\r\n\t\t\t\t\t{text ? text : '\\u00A0'}\r\n\r\n\t\t\t\t\t{text && trend !== null && trend !== undefined && trend !== 0 ? (\r\n\t\t\t\t\t\t<CharRotator rotate={getRotationDegrees(trend)}>\r\n\t\t\t\t\t\t\t{triangleChar}\r\n\t\t\t\t\t\t</CharRotator>\r\n\t\t\t\t\t) : null}\r\n\t\t\t\t</span>\r\n\t\t\t</WidgetNumericBlockText>\r\n\t\t\t<WidgetNumericBlockSubText themeName={puffTheme}>\r\n\t\t\t\t<span>{subtext ? subtext : '\\u00A0'}</span>\r\n\t\t\t</WidgetNumericBlockSubText>\r\n\t\t\t{link && (\r\n\t\t\t\t<Link to={link.url} puffTheme={puffTheme} external={link.isFile}>\r\n\t\t\t\t\t{link.heading}\r\n\t\t\t\t</Link>\r\n\t\t\t)}\r\n\t\t</WidgetNumericBlockStyle>\r\n\t);\r\n};\r\n\r\nexport default WidgetNumericBlock;\r\n","/**\r\n * LogoBanner - styles\r\n */\r\n\r\nimport { ThemeProps } from 'components/Banner/Banner';\r\nimport { getThemeBackground, getThemeTextColor } from 'pages/sharedModelTypes';\r\nimport styled from 'styled-components';\r\nimport Link from 'components/Boilerplate/Link';\r\n\r\nexport const LogoBannerStyle = styled.div<ThemeProps>`\r\n\tbackground-color: ${(p) => getThemeBackground(p.theme, p.themeName)};\r\n\tcolor: ${(p) => getThemeTextColor(p.theme, p.themeName)};\r\n\tpadding: ${props => props.theme.spacing.space4}rem 0;\r\n`;\r\n\r\nexport const LogoBannerImageContainer = styled.div`\r\n\tdisplay: flex;\r\n\tflex-wrap: wrap;\r\n\tjustify-content: center;\r\n`;\r\n\r\nexport const LogoBannerImage = styled.img`\r\n\tmargin: ${props => props.theme.spacing.space2}rem ${props => props.theme.spacing.space3}rem;\r\n\tdisplay: block;\r\n\theight: 50px;\r\n\tobject-fit: cover;\r\n\tobject-position: 50% 50%;\r\n`;\r\n\r\nexport const LogoBannerFooter = styled.div`\r\n\tmargin-top: ${props => props.theme.spacing.space2}rem;\r\n\tdisplay: flex;\r\n\tjustify-content: center;\r\n`;\r\n\r\n\r\nexport const LogoBannerLink = styled(Link) <ThemeProps>`\r\n\tcolor: ${(p) => getThemeTextColor(p.theme, p.themeName)};\r\n\r\n`;\r\n","/**\r\n * LogoBanner\r\n */\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport { LinkType, PuffTheme } from 'pages/sharedModelTypes';\r\nimport React from 'react';\r\nimport { ImageFragmentModel, LogoBannerModel } from 'types/fragments';\r\nimport {\r\n\tLogoBannerFooter,\r\n\tLogoBannerImage,\r\n\tLogoBannerImageContainer,\r\n\tLogoBannerLink,\r\n\tLogoBannerStyle,\r\n} from './LogoBanner.styles';\r\n\r\nexport type LogoBannerProps = {\r\n\tlogoItems: ImageFragmentModel[];\r\n\tlink?: LinkType;\r\n\tthemeName?: PuffTheme;\r\n};\r\n\r\nconst LogoBanner: React.FC<LogoBannerProps> = ({\r\n\tthemeName,\r\n\tlogoItems = [],\r\n\tlink,\r\n}) => {\r\n\treturn (\r\n\t\t<LogoBannerStyle themeName={themeName}>\r\n\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t<LogoBannerImageContainer>\r\n\t\t\t\t\t{logoItems.map((item, index) => {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t(item.url && (\r\n\t\t\t\t\t\t\t\t<a href={item.url}>\r\n\t\t\t\t\t\t\t\t\t<LogoBannerImage\r\n\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\tsrc={item.src}\r\n\t\t\t\t\t\t\t\t\t\tsrcSet={item.srcSet}\r\n\t\t\t\t\t\t\t\t\t\talt={item.alt}\r\n\t\t\t\t\t\t\t\t\t></LogoBannerImage>\r\n\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t)) || (\r\n\t\t\t\t\t\t\t\t<LogoBannerImage\r\n\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\tsrc={item.src}\r\n\t\t\t\t\t\t\t\t\tsrcSet={item.srcSet}\r\n\t\t\t\t\t\t\t\t\talt={item.alt}\r\n\t\t\t\t\t\t\t\t></LogoBannerImage>\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\t\t\t\t</LogoBannerImageContainer>\r\n\t\t\t\t{link && (\r\n\t\t\t\t\t<LogoBannerFooter>\r\n\t\t\t\t\t\t<LogoBannerLink themeName={themeName} to={link?.url}>\r\n\t\t\t\t\t\t\t{link?.heading}{' '}\r\n\t\t\t\t\t\t</LogoBannerLink>\r\n\t\t\t\t\t</LogoBannerFooter>\r\n\t\t\t\t)}\r\n\t\t\t</Grid>\r\n\t\t</LogoBannerStyle>\r\n\t);\r\n};\r\n\r\nexport default LogoBanner;\r\n","/**\r\n * HighlightBlock - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\n\r\nexport const HighlightBlockContainer = styled.div`\r\n\tborder: 1px solid ${props => props.theme.colors.grey3};\r\n\tpadding: ${props => props.theme.spacing.space3}rem;\r\n`;\r\n","/**\r\n * HighlightBlock\r\n */\r\nimport React from 'react';\r\nimport { HighlightBlockContainer } from './HighlightBlock.styles';\r\nimport { FragmentListModel } from 'types/fragments';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport { Options } from 'components/Boilerplate/EpiFragments/EpiFragments';\r\n\r\nexport interface HighlightBlockProps {\r\n\ttextAsModel: FragmentListModel;\r\n\toptions: Options;\r\n\tdisableCustomHeadingLogic: boolean;\r\n}\r\n\r\nconst HighlightBlock: React.FC<HighlightBlockProps> = ({\r\n\ttextAsModel,\r\n\toptions,\r\n\tdisableCustomHeadingLogic\r\n}) => {\r\n\r\n\treturn <HighlightBlockContainer>\r\n\t\t<EpiFragments\r\n\t\t\tinsideGrid={options?.insideGrid}\r\n\t\t\tinsideCell={options?.insideCell}\r\n\t\t\tinsideInnerGrid={options?.insideInnerGrid}\r\n\t\t\theadingLevel={options?.headingLevel}\r\n\t\t\tfragments={textAsModel.fragments}\r\n\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t/>\r\n\t</HighlightBlockContainer>\r\n\r\n\r\n\t// if (options?.insideGrid) {\r\n\t// \tif (options?.insideCell) {\r\n\t// \t\treturn (\r\n\t// \t\t\t<HighlightBlockContainer>\r\n\t// \t\t\t\t<EpiFragments\r\n\t// \t\t\t\t\tinsideCell={options?.insideCell}\r\n\t// \t\t\t\t\tinsideGrid={options?.insideGrid}\r\n\t// \t\t\t\t\tepi={options?.epi}\r\n\t// \t\t\t\t\tfragments={textAsModel.fragments}\r\n\t// \t\t\t\t/>\r\n\t// \t\t\t</HighlightBlockContainer>\r\n\t// \t\t);\r\n\t// \t} else {\r\n\t// \t\treturn (\r\n\t// \t\t\t<Cell span={8}>\r\n\t// \t\t\t\t<HighlightBlockContainer>\r\n\t// \t\t\t\t\t<EpiFragments\r\n\t// \t\t\t\t\t\tinsideCell={options?.insideCell}\r\n\t// \t\t\t\t\t\tinsideGrid={options?.insideGrid}\r\n\t// \t\t\t\t\t\tepi={options?.epi}\r\n\t// \t\t\t\t\t\tfragments={textAsModel.fragments}\r\n\t// \t\t\t\t\t/>\r\n\t// \t\t\t\t</HighlightBlockContainer>\r\n\t// \t\t\t</Cell>\r\n\t// \t\t);\r\n\t// \t}\r\n\t// }\r\n\t// return (\r\n\t// \t<Grid paddingTop={false} paddingBottom={false}>\r\n\t// \t\t<Grid inner={true}>\r\n\t// \t\t\t<Cell span={8}>\r\n\t// \t\t\t\t<HighlightBlockContainer>\r\n\t// \t\t\t\t\t<EpiFragments\r\n\t// \t\t\t\t\t\tinsideCell={true}\r\n\t// \t\t\t\t\t\tinsideGrid={true}\r\n\t// \t\t\t\t\t\tepi={options?.epi}\r\n\t// \t\t\t\t\t\tfragments={textAsModel.fragments}\r\n\t// \t\t\t\t\t/>\r\n\t// \t\t\t\t</HighlightBlockContainer>\r\n\t// \t\t\t</Cell>\r\n\t// \t\t</Grid>\r\n\t// \t</Grid>\r\n\t//);\r\n};\r\n\r\nexport default HighlightBlock;\r\n","/**\r\n * BannerTextWidget - styles\r\n * https://styled-components.com/docs/advanced#referring-to-other-components\r\n */\r\n\r\nimport { ThemeProps } from 'components/Banner/Banner';\r\nimport {\r\n\tgetThemeBackground,\r\n\tgetThemeHeadingColor,\r\n\tgetThemeTextColor,\r\n} from 'pages/sharedModelTypes';\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\nimport { px2rem } from 'theme/utils';\r\n\r\nexport const BannerTextWidgetStyle = styled.div<ThemeProps>`\r\n\tpadding: ${props => props.theme.spacing.space6}rem 0rem;\r\n\t${mediaQueries.tablet} {\r\n\t\tpadding: ${props => props.theme.spacing.space4}rem ${props => props.theme.spacing.space2}rem;\r\n\t}\r\n\t${mediaQueries.phone} {\r\n\t\tpadding: ${props => props.theme.spacing.space4}rem 0;\r\n\t}\r\n\r\n\tbackground-color: ${(p) => getThemeBackground(p.theme, p.themeName)};\r\n`;\r\n\r\nexport const BannerWidgetContainerStyle = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tpadding: 0 ${props => props.theme.spacing.space2}rem;\r\n\ttext-align: center;\r\n\tjustify-content: center;\r\n`;\r\n\r\nexport const BannerWidgetSubTextStyle = styled.div<ThemeProps>`\r\n\t\t${props => props.theme.typography.style5.getStyle()};\t\t\r\n\tcolor: ${(p) => getThemeTextColor(p.theme, p.themeName)};\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tmargin-top: ${props => props.theme.spacing.space2}rem;\r\n\t}\r\n\r\n`;\r\n\r\nexport const BannerWidgetTextStyle = styled.div<ThemeProps>`\r\n\t\t${props => props.theme.typography.style2.getStyle()};\t\t\r\n\tfont-size: ${px2rem(132)};\r\n\tletter-spacing: 1px;\r\n\tline-height: unset;\r\n\tpadding: 0px;\r\n\t${mediaQueries.phone} {\r\n\t\tfont-size: ${px2rem(60)};\r\n\t}\r\n\r\n\tcolor: ${(p) => getThemeHeadingColor(p.theme, p.themeName)};\r\n`;\r\n","/**\r\n * BannerTextWidget\r\n */\r\nimport React from 'react';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport {\r\n\tBannerTextWidgetStyle,\r\n\tBannerWidgetContainerStyle,\r\n\tBannerWidgetSubTextStyle,\r\n\tBannerWidgetTextStyle,\r\n} from './BannerTextWidget.styles';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport BannerPanel from 'components/BannerPanel';\r\nimport {\r\n\tColumnContainerDevider,\r\n\tColumnContainerWithDevider,\r\n} from 'components/Panels/Panels.styles';\r\nimport { LinkType, PuffTheme } from 'pages/sharedModelTypes';\r\n\r\nexport interface BannerTextWidgetProps {\r\n\tthemeName?: PuffTheme;\r\n\ttextToRight?: boolean;\r\n\t/**\r\n\t * Heading text\r\n\t */\r\n\theadingLevel?: number;\r\n\theading?: string | null;\r\n\tpreamble?: string | null;\r\n\ttext?: string | null;\r\n\tsubtext?: string | null;\r\n\tlink?: LinkType | null;\r\n\ttrend?: number | null;\r\n}\r\n\r\nconst BannerTextWidget: React.FC<BannerTextWidgetProps> = ({\r\n\tthemeName,\r\n\theadingLevel,\r\n\theading,\r\n\tpreamble,\r\n\tlink,\r\n\ttext,\r\n\tsubtext,\r\n\ttrend,\r\n\ttextToRight = false,\r\n}) => {\r\n\tconst isPhone = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.tablet - 1,\r\n\t});\r\n\r\n\tlet widgetText = text;\r\n\r\n\tif (widgetText) {\r\n\t\tif (trend === 1) {\r\n\t\t\twidgetText = `${widgetText}\\u25b4`;\r\n\t\t}\r\n\t\tif (trend === -1) {\r\n\t\t\twidgetText = `${widgetText}\\u25be`;\r\n\t\t}\r\n\t}\r\n\r\n\treturn (\r\n\t\t<BannerTextWidgetStyle themeName={themeName}>\r\n\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t<ColumnContainerWithDevider textToRight={textToRight}>\r\n\t\t\t\t\t<BannerWidgetContainerStyle>\r\n\t\t\t\t\t\t{widgetText && (\r\n\t\t\t\t\t\t\t<BannerWidgetTextStyle themeName={themeName}>\r\n\t\t\t\t\t\t\t\t<span>{widgetText}</span>\r\n\t\t\t\t\t\t\t</BannerWidgetTextStyle>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{subtext && (\r\n\t\t\t\t\t\t\t<BannerWidgetSubTextStyle themeName={themeName}>\r\n\t\t\t\t\t\t\t\t{subtext}\r\n\t\t\t\t\t\t\t</BannerWidgetSubTextStyle>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</BannerWidgetContainerStyle>\r\n\r\n\t\t\t\t\t<ColumnContainerDevider\r\n\t\t\t\t\t\tthemeName={themeName}\r\n\t\t\t\t\t></ColumnContainerDevider>\r\n\r\n\t\t\t\t\t<BannerPanel\r\n\t\t\t\t\t\tcenter={isPhone}\r\n\t\t\t\t\t\tthemeName={themeName}\r\n\t\t\t\t\t\theadingLevel={headingLevel}\r\n\t\t\t\t\t\theading={heading}\r\n\t\t\t\t\t\ttext={preamble}\r\n\t\t\t\t\t\tlink={link}\r\n\t\t\t\t\t></BannerPanel>\r\n\t\t\t\t</ColumnContainerWithDevider>\r\n\t\t\t</Grid>\r\n\t\t</BannerTextWidgetStyle>\r\n\t);\r\n};\r\n\r\nexport default BannerTextWidget;\r\n","/**\r\n * Highcharts - styles\r\n */\r\n\r\nimport { styleForSelect } from 'components/Typography';\r\nimport styled, { css } from 'styled-components';\r\nimport { ChartVisibleProps, HighchartsLegendItem } from './Highcharts';\r\n\r\n// TODO: Hardcoded widh for selected box\r\nexport const HighchartsStyle = styled.div`\r\n\tselect {\r\n\t\t${styleForSelect}\r\n\t\twidth: 130px;\r\n\t\tmargin-bottom: ${(props) => props.theme.spacing.space1}rem;\r\n\t}\r\n`;\r\n\r\nexport const HighchartsContentStyle = styled.div`\r\n\tdisplay: flex;\r\n`;\r\n\r\nconst showIndex = (chartMode: boolean) => {\r\n\tif (chartMode) {\r\n\t\treturn css`\r\n\t\t\t> :nth-child(2) {\r\n\t\t\t\tdisplay: none !important;\r\n\t\t\t}\r\n\t\t`;\r\n\t}\r\n\r\n\treturn css`\r\n\t\t> :nth-child(1) {\r\n\t\t\tdisplay: none !important;\r\n\t\t}\r\n\t\t> :nth-child(2) {\r\n\t\t\toverflow: auto;\r\n\t\t}\r\n\t`;\r\n};\r\n\r\nexport const HighchartAndTable = styled.div<ChartVisibleProps>`\r\n\tflex: 1 1 auto;\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\t> div {\r\n\t\tflex: 1;\r\n\t}\r\n\r\n\t${(p) => showIndex(p.showChartMode)}\r\n\r\n\ttable {\r\n\t\twidth: 100%;\r\n\t\t${(props) => props.theme.typography.style11.getStyle()};\r\n\r\n\t\tborder-collapse: collapse;\r\n\t\twhite-space: nowrap;\r\n\t}\r\n\r\n\t.text {\r\n\t\ttext-align: left;\r\n\t}\r\n\r\n\t.highcharts-number {\r\n\t\ttext-align: right;\r\n\t\tfont-weight: normal;\r\n\t}\r\n\r\n\ttable,\r\n\ttd,\r\n\tth {\r\n\t\tborder: 1px solid ${(p) => p.theme.colors.black}15;\r\n\t}\r\n\r\n\tthead > tr > th {\r\n\t\ttext-align: center;\r\n\t\tfont-weight: bold;\r\n\t}\r\n\r\n\ttbody > tr > th {\r\n\t\tfont-weight: normal;\r\n\t}\r\n\r\n\ttd,\r\n\tth {\r\n\t\tpadding: ${(props) => props.theme.spacing.space1}rem;\r\n\t}\r\n\r\n\ttable > caption {\r\n\t\tpadding-bottom: ${(props) => props.theme.spacing.space1}rem;\r\n\t}\r\n\r\n\ttable > thead {\r\n\t}\r\n`;\r\n\r\nexport const HighchartsDebugStyle = styled.div`\r\n\tmargin: 10px;\r\n\tborder: 1px solid red;\r\n`;\r\n\r\nexport const HighchartsLegendsStyle = styled.div`\r\n\tflex: 0 0 auto;\r\n\r\n\tmargin-left: ${(props) => props.theme.spacing.space2}rem;\r\n\t& > label {\r\n\t\tdisplay: inline-block;\r\n\t\t${(props) => props.theme.typography.style12.getStyle()};\r\n\t\ttext-transform: uppercase;\r\n\t\tmargin-bottom: ${(props) => props.theme.spacing.space2}rem;\r\n\t}\r\n\r\n\tul {\r\n\t\tlist-style-type: none;\r\n\t\tpadding: 0px;\r\n\t\tmargin: 0px;\r\n\t}\r\n\r\n\tli {\r\n\t\tpadding: 2px ${(props) => props.theme.spacing.space2}rem;\r\n\r\n\t\tlabel {\r\n\t\t\tfont-size: 14px;\r\n\t\t}\r\n\t}\r\n\r\n\tli:nth-child(odd) {\r\n\t\tbackground-color: #0000000d;\r\n\t}\r\n`;\r\n\r\nexport const HighchartsLegendsActions = styled.div`\r\n\tflex: 1 1 auto;\r\n\t> :not(:last-child) {\r\n\t\tmargin-right: ${(props) => props.theme.spacing.space1}rem;\r\n\t}\r\n\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space4}rem;\r\n\r\n\tbutton {\r\n\t\t${(props) => props.theme.typography.style11.getStyle()};\r\n\t\tpadding-top: 6px;\r\n\t\tpadding-bottom: 6px;\r\n\t\tpadding-left: 8px;\r\n\t\tpadding-right: 8px;\r\n\r\n\t\tborder: 1px solid rgba(0, 0, 0, 0.32);\r\n\t\tborder-radius: 8px;\r\n\r\n\t\tmin-width: 146px;\r\n\t\tjustify-content: center;\r\n\t}\r\n`;\r\n\r\nexport const HighchartsLegendsSymbols = styled.div<HighchartsLegendItem>`\r\n\tdisplay: inline-block;\r\n\tmargin-right: 8px;\r\n\tfont-family: 'Courier New', monospace;\r\n\tcolor: ${(p) => p.symbolColor};\r\n`;\r\n","/**\r\n * Tab - styles\r\n */\r\n\r\nimport styled, { css } from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\nimport { accessibilityFocus } from 'theme/styles';\r\nimport { ThemeType } from 'theme/theme';\r\nimport { SelectedItem } from './Tab';\r\n\r\nconst TopPanelStyle = () => {\r\n\treturn css`\r\n\t\tborder-bottom: 1px solid #d7d7d7;\r\n\t\tdisplay: flex;\r\n\t\tflex-wrap: wrap;\r\n\r\n\t\t> :not(:last-child) {\r\n\t\t\tmargin-right: ${props => props.theme.spacing.space4}rem;\r\n\t\t}\r\n\t`;\r\n};\r\n\r\nexport const TabListStyle = styled.div`\r\n\t${TopPanelStyle};\r\n\tcolor: ${props => props.theme.palette.text.primary};\t\t\t\r\n\tmargin-bottom: ${props => props.theme.spacing.space5}rem;\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tmargin-bottom: ${props => props.theme.spacing.space2}rem;\r\n\t}\r\n`;\r\n\r\nexport const TabListActionsStyle = styled.div`\r\n\tdisplay: flex;\r\n\tjustify-content: flex-end;\r\n\talign-items: center;\r\n\tflex: 1;\r\n`;\r\n\r\nconst TabItemStyle = (themeContext: ThemeType, selected: boolean) => {\r\n\r\n\treturn css`\r\n\t\tdisplay: inline-flex;\r\n\t\talign-items: center;\r\n\t\tcursor: pointer;\r\n\t\t${props => props.theme.typography.style6.getStyle()};\t\t\r\n\t\ttext-transform: uppercase;\r\n\t\tletter-spacing: 1.2px;\r\n\t\tborder-bottom: 5px solid transparent;\r\n\t\t${selected && `border-bottom: 5px solid ${themeContext.colors.primary}`};\r\n\r\n\t\tfont-weight: ${selected ? 'bold' : 'normal'};\r\n\r\n\t\toutline-color:transparent;\r\n\t\tsvg {\r\n\t\t\tvertical-align: text-bottom;\r\n\t\t\tmargin-right: ${themeContext.spacing.space1 / 2}rem;\r\n\t\t}\r\n\t\t&:focus {\r\n\t\t\t${accessibilityFocus()}\r\n\t\t\toutline-color:${themeContext.colors.primary};\r\n\r\n\t\t}\r\n\t`;\r\n};\r\n\r\nexport const TabListItemContainerStyle = styled.div<SelectedItem>`\r\n\t${(props) => TabItemStyle(props.theme, props.selected)};\r\n`;\r\n\r\nexport const TabPanelContainerStyle = styled.div``;\r\n\r\nexport const TabPanelStyle = styled.div`\r\n\twidth: 100%;\r\n`;\r\n","/**\r\n * Tab\r\n */\r\n\r\nimport Icon from 'components/Boilerplate/Icon';\r\nimport React, { useEffect, useRef, useState } from 'react';\r\n\r\nimport {\r\n\tTabListActionsStyle,\r\n\tTabListItemContainerStyle,\r\n\tTabListStyle,\r\n\tTabPanelStyle,\r\n} from './Tab.styles';\r\n\r\nexport type TabProps = {\r\n\tdefaultTabId: string;\r\n\tlabel: string;\r\n\tautoSelect?: boolean;\r\n\tonSelect?: (panelId: string) => void;\r\n\titems: TabItem1[];\r\n};\r\n\r\nexport type TabItem1 = {\r\n\theading: string;\r\n\tid: string;\r\n\ticonName: any;\r\n};\r\n\r\n/** A Tab Component */\r\nconst Tab: React.FC<TabProps> = ({\r\n\tdefaultTabId,\r\n\tlabel,\r\n\tautoSelect = false,\r\n\titems = [],\r\n\tonSelect,\r\n\tchildren,\r\n}) => {\r\n\tconst onTabListClick = (panelId: string) => {\r\n\t\tif (onSelect) {\r\n\t\t\tonSelect(panelId);\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<TabList\r\n\t\t\tautoSelect={autoSelect}\r\n\t\t\tselectedId={defaultTabId}\r\n\t\t\tlabel={label}\r\n\t\t\tonClick={onTabListClick}\r\n\t\t>\r\n\t\t\t{items.map((item, index) => {\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<TabItem key={index} panelId={item.id} text={item.heading}>\r\n\t\t\t\t\t\t{item.iconName && <Icon size={2} icon={item.iconName} />}\r\n\t\t\t\t\t</TabItem>\r\n\t\t\t\t);\r\n\t\t\t})}\r\n\t\t\t{children && <TabListActionsStyle>{children}</TabListActionsStyle>}\r\n\t\t</TabList>\r\n\t);\r\n};\r\n\r\nexport default Tab;\r\n\r\n/**\r\n * TabList\r\n */\r\n\r\ntype TabListProps = {\r\n\tlabel: string;\r\n\tonClick?: (panelId: string) => void;\r\n\tselectedId: string;\r\n\tautoSelect: boolean;\r\n};\r\n\r\nconst TabList: React.FC<TabListProps> = ({\r\n\tonClick,\r\n\tselectedId,\r\n\tlabel,\r\n\tautoSelect,\r\n\tchildren,\r\n}) => {\r\n\tconst [selectedPanelId, setSelectedPanelId] = useState<string | undefined>(\r\n\t\tselectedId\r\n\t);\r\n\tconst [focusedPanelId, setFocusedPanelId] = useState<string | undefined>();\r\n\tconst [panelIds, setPanelIds] = useState<string[]>([]);\r\n\tconst [elements, setElements] = useState<any>([]);\r\n\r\n\tuseEffect(() => {\r\n\t\tsetSelectedPanelId(selectedId);\r\n\t}, [selectedId]);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst onTabItemClick = (panelId: string) => {\r\n\t\t\tsetSelectedPanelId(panelId);\r\n\r\n\t\t\tif (onClick) {\r\n\t\t\t\tonClick(panelId);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst handleChildGotFocus = (panelId: string) => {\r\n\t\t\tsetFocusedPanelId(panelId);\r\n\t\t};\r\n\t\tconst handleChildOnFocused = (panelId: string, value: boolean) => {\r\n\t\t\tif (focusedPanelId === panelId && !value) {\r\n\t\t\t\tsetFocusedPanelId(undefined);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst updateChildren = () => {\r\n\t\t\tconst panels: string[] = [];\r\n\t\t\tconst result = React.Children.map(\r\n\t\t\t\tchildren as any,\r\n\t\t\t\t(child: React.ReactElement) => {\r\n\t\t\t\t\tif (!child) return child;\r\n\t\t\t\t\tif (!child.props.panelId) {\r\n\t\t\t\t\t\treturn child;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tpanels.push(child.props.panelId);\r\n\t\t\t\t\tconst newChild = React.cloneElement(child as any, {\r\n\t\t\t\t\t\tselected: selectedPanelId === child.props.panelId,\r\n\t\t\t\t\t\tfocused: focusedPanelId === child.props.panelId,\r\n\t\t\t\t\t\tonClick: onTabItemClick,\r\n\t\t\t\t\t\tgotFocus: handleChildGotFocus,\r\n\t\t\t\t\t\tonFocused: handleChildOnFocused,\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn newChild;\r\n\t\t\t\t}\r\n\t\t\t);\r\n\r\n\t\t\tsetPanelIds(panels);\r\n\t\t\tsetElements(result);\r\n\t\t};\r\n\r\n\t\tupdateChildren();\r\n\t}, [focusedPanelId, selectedPanelId, children, onClick]);\r\n\r\n\tconst handleContainerKeyPress = (\r\n\t\tevent: React.KeyboardEvent<HTMLDivElement>\r\n\t) => {\r\n\t\tif (panelIds.length === 0) return;\r\n\t\tif (focusedPanelId === undefined) return;\r\n\t\tlet currentFocusIndex = -1;\r\n\t\tlet newFocusIndex = 0;\r\n\r\n\t\t// TODO: Only handle key events when focus in on a tab\r\n\r\n\t\tswitch (event.key) {\r\n\t\t\tcase 'Enter':\r\n\t\t\tcase ' ':\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\tsetSelectedPanelId(focusedPanelId);\r\n\t\t\t\tsetFocusedPanelId(focusedPanelId);\r\n\r\n\t\t\t\tif (onClick && focusedPanelId) {\r\n\t\t\t\t\tonClick(focusedPanelId);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Home':\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tsetFocusedPanelId(panelIds[0]);\r\n\t\t\t\tif (autoSelect) {\r\n\t\t\t\t\tsetSelectedPanelId(panelIds[newFocusIndex]);\r\n\t\t\t\t\tif (onClick) {\r\n\t\t\t\t\t\tonClick(panelIds[newFocusIndex]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'End':\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tsetFocusedPanelId(panelIds[panelIds.length - 1]);\r\n\t\t\t\tif (autoSelect) {\r\n\t\t\t\t\tsetSelectedPanelId(panelIds[newFocusIndex]);\r\n\t\t\t\t\tif (onClick) {\r\n\t\t\t\t\t\tonClick(panelIds[newFocusIndex]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'ArrowLeft':\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\tcurrentFocusIndex = focusedPanelId\r\n\t\t\t\t\t? panelIds.indexOf(focusedPanelId)\r\n\t\t\t\t\t: -1;\r\n\t\t\t\tnewFocusIndex = 0;\r\n\r\n\t\t\t\tif (currentFocusIndex !== -1) {\r\n\t\t\t\t\tif (currentFocusIndex === 0) {\r\n\t\t\t\t\t\tnewFocusIndex = panelIds.length - 1;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tnewFocusIndex = currentFocusIndex - 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsetFocusedPanelId(panelIds[newFocusIndex]);\r\n\t\t\t\tif (autoSelect) {\r\n\t\t\t\t\tsetSelectedPanelId(panelIds[newFocusIndex]);\r\n\t\t\t\t\tif (onClick) {\r\n\t\t\t\t\t\tonClick(panelIds[newFocusIndex]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'ArrowRight':\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tcurrentFocusIndex = focusedPanelId\r\n\t\t\t\t\t? panelIds.indexOf(focusedPanelId)\r\n\t\t\t\t\t: -1;\r\n\t\t\t\tnewFocusIndex = 0;\r\n\r\n\t\t\t\tif (currentFocusIndex !== -1) {\r\n\t\t\t\t\tif (currentFocusIndex < panelIds.length - 1) {\r\n\t\t\t\t\t\tnewFocusIndex = currentFocusIndex + 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsetFocusedPanelId(panelIds[newFocusIndex]);\r\n\t\t\t\tif (autoSelect) {\r\n\t\t\t\t\tsetSelectedPanelId(panelIds[newFocusIndex]);\r\n\t\t\t\t\tif (onClick) {\r\n\t\t\t\t\t\tonClick(panelIds[newFocusIndex]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<TabListStyle\r\n\t\t\t\tonKeyDown={handleContainerKeyPress}\r\n\t\t\t\trole=\"tablist\"\r\n\t\t\t\taria-label={label}\r\n\t\t\t>\r\n\t\t\t\t{elements}\r\n\t\t\t</TabListStyle>\r\n\t\t</>\r\n\t);\r\n};\r\n\r\n/**\r\n * TabItem\r\n */\r\n\r\nexport type SelectedItem = {\r\n\tselected: boolean;\r\n};\r\n\r\nexport type TabItemProps = {\r\n\tpanelId: string;\r\n\ttext: string;\r\n\tselected?: boolean;\r\n\tfocused?: boolean;\r\n\tonClick?: (panelId: string) => void;\r\n\tgotFocus?: (panelId: string) => void;\r\n\tonFocused?: (panelId: string, value: boolean) => void;\r\n};\r\n\r\nexport const TabItem: React.FC<TabItemProps> = ({\r\n\tchildren,\r\n\ttext,\r\n\tpanelId,\r\n\tselected = false,\r\n\tfocused = false,\r\n\tonClick,\r\n\tonFocused,\r\n\tgotFocus,\r\n}) => {\r\n\tconst [isSelected, setIsSelected] = useState(selected);\r\n\tconst [hasFocus, setHasFocus] = useState(focused);\r\n\r\n\tconst prevAmount = useRef({ isSelected, hasFocus }).current;\r\n\r\n\tlet reference = React.createRef<HTMLDivElement>();\r\n\r\n\tuseEffect(() => {\r\n\t\tif (prevAmount.isSelected !== isSelected) {\r\n\t\t\t// nothing\r\n\t\t}\r\n\t\tif (prevAmount.hasFocus !== hasFocus) {\r\n\t\t\tif (hasFocus) {\r\n\t\t\t\tif (gotFocus) {\r\n\t\t\t\t\tgotFocus(panelId);\r\n\t\t\t\t}\r\n\t\t\t\t(reference.current as any).focus();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn () => {\r\n\t\t\tprevAmount.isSelected = isSelected;\r\n\t\t\tprevAmount.hasFocus = hasFocus;\r\n\t\t};\r\n\t}, [\r\n\t\tgotFocus,\r\n\t\treference,\r\n\t\tpanelId,\r\n\t\tprevAmount,\r\n\t\tisSelected,\r\n\t\thasFocus,\r\n\t\tonFocused,\r\n\t]);\r\n\r\n\tuseEffect(() => {\r\n\t\tsetIsSelected(selected);\r\n\t\tsetHasFocus(focused);\r\n\t}, [selected, focused]);\r\n\r\n\tconst onTabItemClick = () => {\r\n\t\tif (onClick) {\r\n\t\t\tonClick(panelId);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleOnFocus = () => {\r\n\t\tsetHasFocus(true);\r\n\t\tif (onFocused) {\r\n\t\t\tonFocused(panelId, true);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleOnBlur = (event: any) => {\r\n\t\tsetHasFocus(false);\r\n\t\tif (onFocused) {\r\n\t\t\tonFocused(panelId, false);\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<TabListItemContainerStyle\r\n\t\t\tref={reference}\r\n\t\t\tselected={selected ? true : false}\r\n\t\t\tonClick={onTabItemClick}\r\n\t\t\tonFocus={handleOnFocus}\r\n\t\t\tonBlur={handleOnBlur}\r\n\t\t\ttabIndex={selected ? 0 : -1}\r\n\t\t\trole=\"tab\"\r\n\t\t\taria-selected={selected}\r\n\t\t\taria-controls={panelId}\r\n\t\t>\r\n\t\t\t<>\r\n\t\t\t\t{children}\r\n\t\t\t\t{text}\r\n\t\t\t</>\r\n\t\t</TabListItemContainerStyle>\r\n\t);\r\n};\r\n\r\n/**\r\n * TabPanel\r\n *\r\n * When active or selected\r\n * aria-expanded : true\r\n * hidden : false\r\n * otherwise the reverse\r\n */\r\ntype TabPanelProps = {\r\n\tpanelId: string;\r\n\tselected?: boolean;\r\n};\r\nexport const TabPanel: React.FC<TabPanelProps> = ({\r\n\tpanelId,\r\n\tselected = false,\r\n\tchildren,\r\n}) => {\r\n\treturn (\r\n\t\t// aria-expanded={selected}\r\n\r\n\t\t<TabPanelStyle id={panelId} role=\"tabpanel\" hidden={!selected}>\r\n\t\t\t{children}\r\n\t\t</TabPanelStyle>\r\n\t);\r\n};\r\n\r\ntype TabListMobileProps = {\r\n\tpanelId: string;\r\n\tselected?: boolean;\r\n};\r\nexport const TabListMobile: React.FC<TabListMobileProps> = ({\r\n\tpanelId,\r\n\tselected = false,\r\n\tchildren,\r\n}) => {\r\n\treturn (\r\n\t\t// aria-expanded={selected}\r\n\r\n\t\t<TabPanelStyle id={panelId} role=\"tabpanel\" hidden={!selected}>\r\n\t\t\t{children}\r\n\t\t</TabPanelStyle>\r\n\t);\r\n};\r\n","/**\r\n * Checkbox - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\nimport { CheckboxProps } from './Checkbox';\r\nimport { accessibilityFocus } from 'theme/styles';\r\nimport { mediaQueries } from 'theme';\r\n\r\nexport const HiddenCheckbox = styled.input.attrs({ type: 'checkbox' })`\r\n\tborder: 0;\r\n\tclip: rect(0 0 0 0);\r\n\tclippath: inset(50%);\r\n\theight: 1px;\r\n\tmargin: -1px;\r\n\toverflow: hidden;\r\n\tpadding: 0;\r\n\tposition: absolute;\r\n\twhite-space: nowrap;\r\n\twidth: 1px;\r\n`;\r\nexport const Icon = styled.svg`\r\n\tfill: none;\r\n\tstroke: ${(props) => props.theme.colors.primary};\r\n\tstroke-width: 3px;\r\n`;\r\n\r\ntype IsRegulationPageProps = {\r\n\tisRegulationPage?: boolean;\r\n};\r\n\r\nexport const CheckboxContainer = styled.div<IsRegulationPageProps>`\r\n\t${mediaQueries.phone} {\r\n\t\tpadding: ${(props) => (props.isRegulationPage ? '0' : '12px 1rem')};\r\n\t}\r\n\tlabel {\r\n\t\tcursor: pointer;\r\n\r\n\t\tdisplay: inline-flex;\r\n\r\n\t\t${(props) => props.theme.typography.style6.getStyle()};\r\n\t\t${mediaQueries.phone} {\r\n\t\t\talign-items: center;\r\n\t\t\tfont-size: 0.125rem;\r\n\t\t}\r\n\t}\r\n\r\n\tlabel:focus-within {\r\n\t\t${accessibilityFocus()};\r\n\t}\r\n\r\n\tspan {\r\n\t\t${(props) => props.theme.typography.style9.getStyle()};\r\n\t\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\t}\r\n`;\r\nexport const StyledCheckbox = styled.div<CheckboxProps>`\r\n\tflex: 0 0 auto;\r\n\twidth: 24px;\r\n\theight: 24px;\r\n\tborder: 2px solid ${(props) => props.theme.colors.primary};\r\n\tborder-radius: 0px;\r\n\tmargin-right: 10px;\r\n\r\n\tbackground-color: ${(props) => props.theme.colors.white};\r\n\r\n\t${HiddenCheckbox}:hover + & {\r\n\t\toutline: 1px solid ${(props) => props.theme.colors.primary};\r\n\t}\r\n\t${Icon} {\r\n\t\tvisibility: ${(props) => (props.checked ? 'visible' : 'hidden')};\r\n\t}\r\n\r\n\t${mediaQueries.phone} {\r\n\t\twidth: 20px;\r\n\t\theight: 20px;\r\n\t}\r\n`;\r\n","/**\r\n * CheckBox\r\n */\r\n\r\nimport React, { useEffect, useState } from 'react';\r\nimport {\r\n\tCheckboxContainer,\r\n\tHiddenCheckbox,\r\n\tIcon,\r\n\tStyledCheckbox,\r\n} from './Checkbox.styles';\r\n\r\nexport type CheckboxProps = {\r\n\tchecked?: boolean;\r\n\tdisabled?: boolean; // TODO: Not implemented\r\n\tchildren?: any;\r\n\trequired?: boolean;\r\n\tname?: string;\r\n\tvalue?: any; // Used for FormData\r\n\tid?: string;\r\n\tonCheckedChanged?: (checked: boolean) => void;\r\n\r\n\tisRegulationPage?: boolean;\r\n};\r\n\r\n/** A Checkbox */\r\nconst Checkbox = React.forwardRef<any, CheckboxProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tchecked = false,\r\n\t\t\tchildren,\r\n\t\t\tonCheckedChanged,\r\n\t\t\trequired,\r\n\t\t\tvalue,\r\n\t\t\tisRegulationPage,\r\n\t\t\t...props\r\n\t\t},\r\n\t\tref\r\n\t) => {\r\n\t\tconst [checkedState, setCheckedState] = useState(checked);\r\n\r\n\t\tconst handleCheckboxChange = (event: any) => {\r\n\t\t\tsetCheckedState(event.target.checked);\r\n\r\n\t\t\tif (onCheckedChanged) {\r\n\t\t\t\tonCheckedChanged(event.target.checked);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tsetCheckedState(checked);\r\n\t\t}, [checked]);\r\n\r\n\t\treturn (\r\n\t\t\t<CheckboxContainer isRegulationPage={isRegulationPage}>\r\n\t\t\t\t<label>\r\n\t\t\t\t\t<HiddenCheckbox\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\tchecked={checkedState}\r\n\t\t\t\t\t\tvalue={value}\r\n\t\t\t\t\t\t{...props}\r\n\t\t\t\t\t\tonChange={handleCheckboxChange}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<StyledCheckbox checked={checkedState}>\r\n\t\t\t\t\t\t<Icon viewBox=\"0 0 24 24\">\r\n\t\t\t\t\t\t\t<polyline points=\"19 7 11 16 5 11\" />\r\n\t\t\t\t\t\t</Icon>\r\n\t\t\t\t\t</StyledCheckbox>\r\n\t\t\t\t\t<span>{children}</span>\r\n\t\t\t\t\t{required && <abbr title=\"Obligatoriskt\">*</abbr>}\r\n\t\t\t\t</label>\r\n\t\t\t</CheckboxContainer>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nexport default Checkbox;\r\n","import { styleForSelect } from 'components/Typography';\r\nimport styled from 'styled-components';\r\n\r\nexport const DropdownMenuContainer = styled.div`\r\n\tmargin-bottom: ${props => props.theme.spacing.space1}rem;\r\n\r\n\t> button {\r\n\t\t${styleForSelect};\r\n\t\tpadding-top: 7px;\r\n\t\tpadding-bottom: 7px;\r\n\r\n\r\n\t\tsvg {\r\n\t\t\tmargin-left: ${props => props.theme.spacing.space1}rem;\r\n\t\t\ttransform: rotate(90deg);\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tvertical-align: middle;\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nexport const DropdownMenuStyle = styled.ul`\r\n\tposition: absolute;\r\n\tz-index: 1;\r\n\tlist-style-type: none;\r\n\tpadding: 0px;\r\n\tmargin: 0px;\r\n\tborder: 1px solid ${props => props.theme.colors.grey4};\r\n\tbox-shadow: 0px 5px 5px #00000020;\r\n\r\n\tli {\r\n\t\tborder-bottom: 1px solid ${props => props.theme.colors.grey4};\r\n\t}\r\n\r\n\tli > button:hover {\r\n\t\tbackground-color: ${props => props.theme.colors.grey4};\r\n\t}\r\n\r\n\tli > button {\r\n\t\tborder: none;\r\n\t\twidth: 100%;\r\n\t\tbackground-color: ${props => props.theme.colors.white};\r\n\t\tcolor: ${props => props.theme.palette.text.primary};\t\t\t\r\n\t\tpadding: 12px 12px;\r\n\t}\r\n\r\n\tli > button:focus {\r\n\t\tbackground-color: ${props => props.theme.colors.primary};\r\n\t\tcolor: ${props => props.theme.palette.text.secondary};\r\n\t}\r\n\r\n\t> :last-child {\r\n\t\tborder: none;\r\n\t}\r\n`;\r\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\r\nimport Icon from 'components/Boilerplate/Icon';\r\nimport {\r\n\tDropdownMenuContainer,\r\n\tDropdownMenuStyle,\r\n} from './DropdownMenu.styles';\r\n\r\n/**\r\n * Dropdown menu\r\n */\r\nexport type DropdownMenuItem = {\r\n\theading: string;\r\n\tvalue: string;\r\n};\r\n\r\nexport type DropdownMenuProps = {\r\n\theading?: string;\r\n\titems: DropdownMenuItem[];\r\n\tonSelect?: (value: string) => void;\r\n};\r\n\r\nconst DropdownMenu: React.FC<DropdownMenuProps> = ({\r\n\theading,\r\n\titems,\r\n\tonSelect,\r\n}) => {\r\n\tconst [openState, setOpenState] = useState(false);\r\n\tconst [focusIndex, setFocusIndex] = useState(0);\r\n\r\n\tconst itemRefs = useMemo(() => {\r\n\t\treturn [] as React.RefObject<any>[];\r\n\t}, []);\r\n\tconst wrapperRef = useRef<HTMLDivElement>(null);\r\n\tconst buttonRef = useRef<HTMLButtonElement>(null);\r\n\r\n\tconst toggleMenu = () => {\r\n\t\tif (!openState) {\r\n\t\t\tsetFocusIndex(0);\r\n\t\t}\r\n\t\tsetOpenState(!openState);\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tfunction handleClickOutside(event: any) {\r\n\t\t\tif (wrapperRef.current && !wrapperRef.current.contains(event.target)) {\r\n\t\t\t\tsetOpenState(false);\r\n\t\t\t}\r\n\t\t}\r\n\t\tdocument.addEventListener('click', handleClickOutside);\r\n\t\treturn () => {\r\n\t\t\tdocument.removeEventListener('click', handleClickOutside);\r\n\t\t};\r\n\t}, [wrapperRef]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (focusIndex === -1 && buttonRef.current) {\r\n\t\t\tbuttonRef.current.focus();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tfocusIndex >= 0 &&\r\n\t\t\tfocusIndex <= itemRefs.length - 1 &&\r\n\t\t\titemRefs[focusIndex] &&\r\n\t\t\titemRefs[focusIndex].current\r\n\t\t) {\r\n\t\t\titemRefs[focusIndex].current.focus();\r\n\t\t}\r\n\t}, [focusIndex, itemRefs, openState]);\r\n\r\n\tconst onItemClicked = (value: string) => {\r\n\t\tif (onSelect) {\r\n\t\t\tonSelect(value);\r\n\t\t}\r\n\r\n\t\tsetOpenState(false);\r\n\t\tsetFocusIndex(-1);\r\n\t};\r\n\r\n\tconst handleContainerKeyPress = (\r\n\t\tevent: React.KeyboardEvent<HTMLDivElement>\r\n\t) => {\r\n\t\t// TODO: KeyboardEvent.key, Browser not supported QQ and Baidu\r\n\t\tlet newFocusIndex = 0;\r\n\r\n\t\tswitch (event.key) {\r\n\t\t\tcase 'Space':\r\n\t\t\tcase 'Enter':\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\tif (openState && focusIndex >= 0) {\r\n\t\t\t\t\tonItemClicked(items[focusIndex].value);\r\n\t\t\t\t}\r\n\t\t\t\ttoggleMenu();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'ArrowDown':\r\n\t\t\t\t// moves focus to the next item, optionally wrapping from the last to the first.\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tnewFocusIndex = focusIndex >= items.length - 1 ? 0 : focusIndex + 1;\r\n\t\t\t\tsetFocusIndex(newFocusIndex);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'ArrowUp':\r\n\t\t\t\t// moves focus to the previous item, optionally wrapping from the first to the last.\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tnewFocusIndex = focusIndex <= 0 ? items.length - 1 : focusIndex - 1;\r\n\t\t\t\tsetFocusIndex(newFocusIndex);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'ArrowRight':\r\n\t\t\t\t// Closes the submenu and any parent menus.\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tsetOpenState(false);\r\n\t\t\t\tsetFocusIndex(-1);\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'ArrowLeft':\r\n\t\t\t\t// Closes the submenu and any parent menus.\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tsetOpenState(false);\r\n\t\t\t\tsetFocusIndex(-1);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'Home':\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tsetFocusIndex(0);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'End':\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tsetFocusIndex(items.length - 1);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Tab':\r\n\t\t\t\tsetOpenState(false);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Escape':\r\n\t\t\t\tsetOpenState(false);\r\n\t\t\t\tsetFocusIndex(-1);\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<DropdownMenuContainer onKeyDown={handleContainerKeyPress} ref={wrapperRef}>\r\n\t\t\t<button\r\n\t\t\t\tref={buttonRef}\r\n\t\t\t\tonClick={toggleMenu}\r\n\t\t\t\taria-haspopup=\"true\"\r\n\t\t\t\taria-expanded={openState}\r\n\t\t\t>\r\n\t\t\t\t{heading}\r\n\t\t\t\t<Icon size={1} icon=\"chevron\"></Icon>\r\n\t\t\t</button>\r\n\t\t\t{openState && (\r\n\t\t\t\t<DropdownMenuStyle role=\"menu\" aria-label=\"Export meny\">\r\n\t\t\t\t\t{items.map((item, index) => {\r\n\t\t\t\t\t\tconst ref = React.createRef<any>();\r\n\t\t\t\t\t\titemRefs[index] = ref;\r\n\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<li key={index} role=\"none\">\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\tref={itemRefs[index]}\r\n\t\t\t\t\t\t\t\t\ttabIndex={index === focusIndex ? 1 : -1}\r\n\t\t\t\t\t\t\t\t\trole=\"menuitem\"\r\n\t\t\t\t\t\t\t\t\tonClick={() => onItemClicked(item.value)}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{item.heading}\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\t\t\t\t</DropdownMenuStyle>\r\n\t\t\t)}\r\n\t\t</DropdownMenuContainer>\r\n\t);\r\n};\r\n\r\nexport default DropdownMenu;\r\n","/**\r\n * EpiFragments\r\n */\r\n\r\nimport React, { useContext } from 'react';\r\nimport { PuffWithImageModel } from 'types/blocks';\r\nimport {\r\n\tFragmentModelTypes,\r\n\tRawFragmentModel,\r\n\tHeadingFragmentModel,\r\n\tImageFragmentModel,\r\n\tVideoFragmentModel,\r\n\tTableFragmentModel,\r\n\tBannerFragmentModel,\r\n\tYouTubeFragmentModel,\r\n\tFaqFragmentModel,\r\n\tMediaBannerFragmentModel,\r\n\tLegalBoxModel,\r\n\tLogoBannerModel,\r\n\tPuffContainerModel,\r\n\tCollapsibleContainerModel,\r\n\tStandardPuffModel,\r\n\tGrantPuffModel,\r\n\tEventPuffItemModel,\r\n\tGuidancePuffModel,\r\n\tHeroBannerModel,\r\n\tDashboardBlockModel,\r\n\tCollapsibleBlockModel,\r\n\tWidgetNumericBlockModel,\r\n\tStatisticsPuffModel,\r\n\tNumericBannerBlockModel,\r\n\tContactBlockModel,\r\n\tPublicationPuffModel,\r\n\tHighlightModel,\r\n\tStatisticsBlockModel,\r\n\tSubjectAreaIconPuffModel,\r\n\tRegulationPuffModel,\r\n\tBlockBaseFragmentModelTypes,\r\n\tContentBlockModel,\r\n} from 'types/fragments';\r\n\r\nimport Space from 'components/Boilerplate/Space';\r\nimport { EpiEvent, ModelLocalization } from 'types/epi';\r\nimport { Cell, Grid } from '../Grid';\r\nimport { ThemeType } from 'theme/theme';\r\nimport { GetBannerModelElement } from './fragments/BannerModel';\r\nimport { GetMediaBannerElement } from './fragments/MediaBanner';\r\nimport { GetRawFragmentElement } from './fragments/RawFragment';\r\nimport { GetHeadingFragmentElement } from './fragments/HeadingFragment';\r\nimport { GetPuffWithLargeImageElement } from './fragments/PuffWithLargeImage';\r\nimport { GetImageElement } from './fragments/Image';\r\nimport { GetVideoElement } from './fragments/Video';\r\nimport { GetYouTubeModelElement } from './fragments/YouTubeModel';\r\nimport { GetTableFragmentElement } from './fragments/TableFragment';\r\nimport { GetLegalBoxModelElement } from './fragments/LegalBoxModel';\r\nimport { GetContentBlockModelElement } from './fragments/ContentBlockModel';\r\nimport { GetPuffContainerElement } from './fragments/PuffContainer';\r\nimport { GetCollapsibleContainerElement } from './fragments/CollapsibleContainer';\r\nimport { GetStandardPuffElement } from './fragments/StandardPuffModel';\r\nimport { GetSubjectAreaIconPuffElement } from './fragments/SubjectAreaIconPuffModel';\r\nimport { GetGrantPuffModelElement } from './fragments/GrantPuffModel';\r\nimport { GetEventPuffItemModelElement } from './fragments/EventPuffItemModel';\r\nimport { GetPublicationPuffModelElement } from './fragments/PublicationPuffModel';\r\nimport { GetFaqModelElement } from './fragments/FaqModel';\r\nimport { GetGuidancePuffModelElement } from './fragments/GuidancePuffModel';\r\nimport { GetHeroBannerModelElement } from './fragments/HeroBannerModel';\r\nimport { GetDashboardBlockModelElement } from './fragments/DashboardBlockModel';\r\nimport { GetCollapsibleBlockModelElement } from './fragments/CollapsibleBlockModel';\r\nimport { GetContactModelElement } from './fragments/ContactModel';\r\nimport { GetWidgetNumericBlockElement } from './fragments/WidgetNumericBlockModel';\r\nimport { GetLogoBannerModelElement } from './fragments/LogoBannerModel';\r\nimport { GetHighlightModelElement } from './fragments/HighlightModel';\r\nimport BannerTextWidget from 'components/Banners/BannerTextWidget';\r\nimport { GetStatisticsBlockModelElement } from './fragments/StatisticsBlockModel';\r\nimport { ViewType } from 'types/enums';\r\nimport EpiForms from 'components/EpiForms';\r\nimport { EpiFormsProps } from 'components/EpiForms/EpiForms';\r\nimport { GetRegulationPuffModelElement } from './fragments/RegulationPuffModel';\r\nimport { selectLocalization } from 'store/modules/model';\r\nimport { useSelector } from 'react-redux';\r\nimport { generateAnchorId } from 'theme/utils';\r\nimport { ElementContainer } from 'components/Panels/PageOverviewPuff.styles';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { PuffTheme } from 'pages/sharedModelTypes';\r\n\r\nexport enum BlockType {\r\n\tSectionNew = 'SectionNew', // New Section\r\n\tSectionBanner = 'SectionBanner', // New self contained section (0 space between them)\r\n\tElement = 'Element', // Element\r\n\tItem = 'Item', // ex. item in a list\r\n\t_Reserved_Heading = '_Reserved_Heading', // Only for: HeadingFragment\r\n\t_Reserved_HtmlContent = '_Reserved_HtmlContent', // Only for: RawFragment\r\n\tUnknown = 'Unknown',\r\n}\r\n\r\ntype BlockInformation = {\r\n\tmodelType: string;\r\n\tblockType: BlockType;\r\n\trenderElement: JSX.Element | null;\r\n\thasFragments: boolean;\r\n\tfragments: FragmentModelTypes[];\r\n};\r\n\r\nconst removeBottomMargin = (element: any) => {\r\n\treturn <Space bottom={0}>{element}</Space>;\r\n};\r\n\r\nconst wrapFragmentInSpace = (element: any, topSpace: number = 0) => {\r\n\treturn <Space top={topSpace}>{element}</Space>;\r\n};\r\n\r\nexport const wrapElementInGrid = (element: any) => {\r\n\treturn (\r\n\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t{element}\r\n\t\t</Grid>\r\n\t);\r\n};\r\n\r\nconst wrapElementWithIdElement = (\r\n\tmodel: BlockBaseFragmentModelTypes,\r\n\telement: any\r\n) => {\r\n\tif (model.onPageMenuVisibility && model.onPageMenuHeading) {\r\n\t\tconst anchorId = generateAnchorId(model.onPageMenuHeading);\r\n\t\treturn <ElementContainer id={anchorId}>{element}</ElementContainer>;\r\n\t}\r\n\treturn element;\r\n};\r\n\r\nconst wrapElementInInnerGrid = (element: any) => {\r\n\treturn <Grid inner={true}>{element}</Grid>;\r\n};\r\n\r\nconst wrapElementInCell = (element: any) => {\r\n\treturn <Cell span={8}>{element}</Cell>;\r\n};\r\n\r\nexport const wrapElement = (element: JSX.Element, options: Options) => {\r\n\tif (!options.insideCell) {\r\n\t\telement = wrapElementInCell(element);\r\n\t}\r\n\r\n\tif (!options.insideInnerGrid) {\r\n\t\telement = wrapElementInInnerGrid(element);\r\n\t}\r\n\r\n\tif (!options.insideGrid) {\r\n\t\telement = wrapElementInGrid(element);\r\n\t}\r\n\r\n\treturn element;\r\n};\r\n\r\nexport const getLastItemBlockType = (\r\n\tfragments: FragmentModelTypes[],\r\n\tthemeContext: ThemeType,\r\n\tdisableCustomHeadingLogic: boolean\r\n): BlockType => {\r\n\tif (fragments.length > 0) {\r\n\t\tconst options = {\r\n\t\t\tinsideGrid: false,\r\n\t\t\tinsideInnerGrid: false,\r\n\t\t\tinsideCell: false,\r\n\t\t\tthemeContext: themeContext,\r\n\t\t} as Options;\r\n\t\tconst lastBlockMetaData = getFragmentMetadata(\r\n\t\t\tfragments[fragments.length - 1],\r\n\t\t\toptions,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\r\n\t\tif (lastBlockMetaData.hasFragments) {\r\n\t\t\treturn getLastItemBlockType(\r\n\t\t\t\tlastBlockMetaData.fragments,\r\n\t\t\t\tthemeContext,\r\n\t\t\t\tdisableCustomHeadingLogic\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn lastBlockMetaData.blockType;\r\n\t}\r\n\r\n\treturn BlockType.Unknown;\r\n};\r\n\r\nexport const getFirstItemBlockType = (\r\n\tfragments: FragmentModelTypes[],\r\n\tthemeContext: ThemeType,\r\n\tdisableCustomHeadingLogic: boolean\r\n): BlockType => {\r\n\tif (fragments.length > 0) {\r\n\t\tconst options = {\r\n\t\t\tinsideGrid: false,\r\n\t\t\tinsideInnerGrid: false,\r\n\t\t\tinsideCell: false,\r\n\t\t\tthemeContext: themeContext,\r\n\t\t} as Options;\r\n\t\tconst lastBlockMetaData = getFragmentMetadata(\r\n\t\t\tfragments[0],\r\n\t\t\toptions,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\treturn lastBlockMetaData.blockType;\r\n\t}\r\n\r\n\treturn BlockType.Unknown;\r\n};\r\n\r\nexport const getSpaceToAddBefore = (\r\n\tprevious: BlockType | null,\r\n\tcurrent: BlockType | null,\r\n\tthemeContext: ThemeType\r\n): number => {\r\n\tif (!previous) return 0;\r\n\r\n\tconst spaceBetween_Sections = themeContext.spacing.getSection(); // 5\r\n\tconst spaceBetween_Elements = themeContext.spacing.getElement(); // 4\r\n\tconst spaceBetween_TextAndElements = themeContext.spacing.getTextAndElement(); // 3\r\n\tconst spaceBetween_Texts = themeContext.spacing.getText(); // 1\r\n\r\n\t// New section\r\n\tif (current === BlockType.SectionNew) {\r\n\t\treturn spaceBetween_TextAndElements;\r\n\t}\r\n\r\n\t// New self contained section, lika a fullwith banner\r\n\tif (current === BlockType.SectionBanner) {\r\n\t\t// No space between two SectionBanners\r\n\t\tif (previous === BlockType.SectionBanner) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t// Default space between sections\r\n\t\treturn spaceBetween_Sections;\r\n\t}\r\n\r\n\t// Element\r\n\tif (current === BlockType.Element) {\r\n\t\tif (previous === BlockType.Element) {\r\n\t\t\treturn spaceBetween_Elements;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tprevious === BlockType.SectionNew ||\r\n\t\t\tprevious === BlockType.SectionBanner\r\n\t\t) {\r\n\t\t\treturn spaceBetween_Sections;\r\n\t\t}\r\n\r\n\t\tif (previous === BlockType._Reserved_Heading) {\r\n\t\t\treturn spaceBetween_TextAndElements;\r\n\t\t}\r\n\r\n\t\tif (previous === BlockType._Reserved_HtmlContent) {\r\n\t\t\treturn spaceBetween_Elements;\r\n\t\t}\r\n\r\n\t\tif (previous === BlockType.Item) {\r\n\t\t\treturn spaceBetween_Elements;\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t}\r\n\r\n\t// ArticleHeading Rules\r\n\tif (current === BlockType._Reserved_Heading) {\r\n\t\tif (\r\n\t\t\tprevious === BlockType.SectionNew ||\r\n\t\t\tprevious === BlockType.SectionBanner\r\n\t\t) {\r\n\t\t\treturn spaceBetween_Sections;\r\n\t\t}\r\n\r\n\t\treturn spaceBetween_Elements;\r\n\t}\r\n\r\n\t// Raw (html) content\r\n\tif (current === BlockType._Reserved_HtmlContent) {\r\n\t\tif (\r\n\t\t\tprevious === BlockType.SectionNew ||\r\n\t\t\tprevious === BlockType.SectionBanner\r\n\t\t) {\r\n\t\t\treturn spaceBetween_Sections;\r\n\t\t}\r\n\r\n\t\tif (previous === BlockType._Reserved_Heading) {\r\n\t\t\treturn spaceBetween_Texts;\r\n\t\t}\r\n\r\n\t\tif (previous === BlockType.Element) {\r\n\t\t\treturn spaceBetween_TextAndElements;\r\n\t\t}\r\n\r\n\t\tif (previous === BlockType.Item) {\r\n\t\t\treturn spaceBetween_Elements;\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t}\r\n\r\n\treturn 0;\r\n};\r\n\r\nexport const getFragmentMetadata = (\r\n\tdata: FragmentModelTypes,\r\n\toptions: Options,\r\n\tdisableCustomHeadingLogic: boolean,\r\n\tlocalization?: ModelLocalization | undefined\r\n): BlockInformation => {\r\n\tconst information = {\r\n\t\tmodelType: data.modelType,\r\n\t\tblockType: BlockType.Unknown,\r\n\t\trenderElement: null,\r\n\t\thasFragments: false,\r\n\t\tfragments: [],\r\n\t} as BlockInformation;\r\n\r\n\t/**\r\n\t * Blocks that should get full browser widht\r\n\t * The componeny may add Grid and or a Cell base on given options\r\n\t */\r\n\tswitch (data.modelType) {\r\n\t\tcase 'HeroBannerModel': {\r\n\t\t\tconst model = data as HeroBannerModel;\r\n\t\t\tinformation.renderElement = GetHeroBannerModelElement(model, options);\r\n\t\t\tinformation.renderElement = wrapElementWithIdElement(\r\n\t\t\t\tmodel,\r\n\t\t\t\tinformation.renderElement\r\n\t\t\t);\r\n\t\t\tinformation.blockType = BlockType.SectionBanner;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'LogoBannerModel': {\r\n\t\t\tconst model = data as LogoBannerModel;\r\n\t\t\tinformation.renderElement = GetLogoBannerModelElement(model);\r\n\t\t\tinformation.renderElement = wrapElementWithIdElement(\r\n\t\t\t\tmodel,\r\n\t\t\t\tinformation.renderElement\r\n\t\t\t);\r\n\t\t\tinformation.blockType = BlockType.SectionBanner;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'BannerModel': {\r\n\t\t\tconst model = data as BannerFragmentModel;\r\n\r\n\t\t\tinformation.renderElement = GetBannerModelElement(model, options);\r\n\t\t\tinformation.renderElement = wrapElementWithIdElement(\r\n\t\t\t\tmodel,\r\n\t\t\t\tinformation.renderElement\r\n\t\t\t);\r\n\t\t\tinformation.blockType = BlockType.SectionBanner;\r\n\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'NumericBannerBlockModel': {\r\n\t\t\tconst model = data as NumericBannerBlockModel;\r\n\t\t\tinformation.renderElement = (\r\n\t\t\t\t<BannerTextWidget\r\n\t\t\t\t\tthemeName={model.theme}\r\n\t\t\t\t\ttextToRight={model.textToRight}\r\n\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\theading={model.heading}\r\n\t\t\t\t\tpreamble={model.preamble}\r\n\t\t\t\t\ttext={model.text}\r\n\t\t\t\t\tsubtext={model.subtext}\r\n\t\t\t\t\tlink={model.link}\r\n\t\t\t\t\ttrend={model.trend}\r\n\t\t\t\t></BannerTextWidget>\r\n\t\t\t);\r\n\t\t\tinformation.renderElement = wrapElementWithIdElement(\r\n\t\t\t\tmodel,\r\n\t\t\t\tinformation.renderElement\r\n\t\t\t);\r\n\t\t\tinformation.blockType = BlockType.SectionBanner;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'FaqModel': {\r\n\t\t\tconst model = data as FaqFragmentModel;\r\n\t\t\tinformation.renderElement = GetFaqModelElement(model);\r\n\t\t\tinformation.renderElement = wrapElementWithIdElement(\r\n\t\t\t\tmodel,\r\n\t\t\t\tinformation.renderElement\r\n\t\t\t);\r\n\t\t\tinformation.blockType = BlockType.SectionNew;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'ContentBlockModel': {\r\n\t\t\tconst model = data as ContentBlockModel;\r\n\t\t\tinformation.renderElement = GetContentBlockModelElement(\r\n\t\t\t\tmodel,\r\n\t\t\t\toptions,\r\n\t\t\t\tdisableCustomHeadingLogic\r\n\t\t\t);\r\n\t\t\tinformation.renderElement = wrapElementWithIdElement(\r\n\t\t\t\tmodel,\r\n\t\t\t\tinformation.renderElement\r\n\t\t\t);\r\n\r\n\t\t\tinformation.hasFragments =\r\n\t\t\t\tmodel.bottomItems.length > 0 || model.textAsModel.fragments.length > 0;\r\n\t\t\t// Easy but not correct way to get last item blocktype from textAsModel and bottomItems,\r\n\t\t\t// We can not be 100% sure that bottomItems is rendered last.\r\n\t\t\tinformation.fragments = [\r\n\t\t\t\t...model.textAsModel.fragments,\r\n\t\t\t\t...model.bottomItems,\r\n\t\t\t];\r\n\t\t\tinformation.blockType = BlockType.SectionNew;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'CollapsibleContainerModel': {\r\n\t\t\tconst model = data as CollapsibleContainerModel;\r\n\t\t\tinformation.renderElement = GetCollapsibleContainerElement(\r\n\t\t\t\tmodel,\r\n\t\t\t\toptions,\r\n\t\t\t\tdisableCustomHeadingLogic\r\n\t\t\t);\r\n\t\t\tinformation.renderElement = wrapElementWithIdElement(\r\n\t\t\t\tmodel,\r\n\t\t\t\tinformation.renderElement\r\n\t\t\t);\r\n\t\t\tinformation.blockType = BlockType.SectionNew;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'MediaBanner': {\r\n\t\t\tconst model = data as MediaBannerFragmentModel;\r\n\t\t\tinformation.renderElement = GetMediaBannerElement(model, options);\r\n\t\t\tinformation.renderElement = wrapElementWithIdElement(\r\n\t\t\t\tmodel,\r\n\t\t\t\tinformation.renderElement\r\n\t\t\t);\r\n\t\t\tinformation.blockType = BlockType.SectionNew;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'DashboardBlockModel': {\r\n\t\t\tconst model = data as DashboardBlockModel;\r\n\t\t\tinformation.renderElement = GetDashboardBlockModelElement(\r\n\t\t\t\tmodel,\r\n\t\t\t\toptions,\r\n\t\t\t\tdisableCustomHeadingLogic\r\n\t\t\t);\r\n\t\t\tinformation.renderElement = wrapElementWithIdElement(\r\n\t\t\t\tmodel,\r\n\t\t\t\tinformation.renderElement\r\n\t\t\t);\r\n\r\n\t\t\tinformation.blockType = BlockType.SectionNew;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'StatisticsBlockModel': {\r\n\t\t\tconst model = data as StatisticsBlockModel;\r\n\t\t\tinformation.renderElement = GetStatisticsBlockModelElement(\r\n\t\t\t\tmodel,\r\n\t\t\t\toptions\r\n\t\t\t);\r\n\t\t\tinformation.renderElement = wrapElementWithIdElement(\r\n\t\t\t\tmodel,\r\n\t\t\t\tinformation.renderElement\r\n\t\t\t);\r\n\t\t\tinformation.blockType = BlockType.SectionNew;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'PuffContainer': {\r\n\t\t\tconst model = data as PuffContainerModel;\r\n\t\t\tinformation.renderElement = GetPuffContainerElement(\r\n\t\t\t\tdata as PuffContainerModel,\r\n\t\t\t\toptions,\r\n\t\t\t\tdisableCustomHeadingLogic\r\n\t\t\t);\r\n\t\t\tinformation.renderElement = wrapElementWithIdElement(\r\n\t\t\t\tmodel,\r\n\t\t\t\tinformation.renderElement\r\n\t\t\t);\r\n\t\t\tinformation.hasFragments = model.puffItems.length > 0;\r\n\t\t\tinformation.fragments = model.puffItems;\r\n\t\t\tinformation.blockType = BlockType.SectionNew;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Blocks that should exist in a cell (centered page with)\r\n\t * If not then add needed Cell and Grid element\r\n\t */\r\n\tswitch (data.modelType) {\r\n\t\tcase 'HeadingFragment': {\r\n\t\t\tlet element = GetHeadingFragmentElement(\r\n\t\t\t\tdata as HeadingFragmentModel,\r\n\t\t\t\t{\r\n\t\t\t\t\t...options,\r\n\t\t\t\t\tinsideCell: true,\r\n\t\t\t\t\tinsideInnerGrid: true,\r\n\t\t\t\t\tinsideGrid: true,\r\n\t\t\t\t},\r\n\t\t\t\tdisableCustomHeadingLogic\r\n\t\t\t);\r\n\r\n\t\t\telement = removeBottomMargin(element);\r\n\r\n\t\t\tinformation.renderElement = wrapElement(element, options);\r\n\t\t\tinformation.blockType = BlockType._Reserved_Heading;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'RawFragment': {\r\n\t\t\tlet element = GetRawFragmentElement(data as RawFragmentModel);\r\n\r\n\t\t\tinformation.renderElement = wrapElement(element, options);\r\n\t\t\tinformation.blockType = BlockType._Reserved_HtmlContent;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'ContactModel': {\r\n\t\t\tlet element = GetContactModelElement(data as ContactBlockModel);\r\n\r\n\t\t\tinformation.renderElement = wrapElement(element, options);\r\n\t\t\tinformation.blockType = BlockType.Element;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'YouTubeModel': {\r\n\t\t\tlet element = GetYouTubeModelElement(data as YouTubeFragmentModel);\r\n\r\n\t\t\tinformation.renderElement = wrapElement(element, options);\r\n\t\t\tinformation.blockType = BlockType.Element;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'LegalBoxModel': {\r\n\t\t\tlet element = GetLegalBoxModelElement(\r\n\t\t\t\tdata as LegalBoxModel,\r\n\t\t\t\t{\r\n\t\t\t\t\t...options,\r\n\t\t\t\t\tinsideCell: true,\r\n\t\t\t\t\tinsideInnerGrid: true,\r\n\t\t\t\t\tinsideGrid: true,\r\n\t\t\t\t},\r\n\t\t\t\tdisableCustomHeadingLogic\r\n\t\t\t);\r\n\r\n\t\t\tinformation.renderElement = wrapElement(element, options);\r\n\t\t\tinformation.blockType = BlockType.Element;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'CollapsibleBlockModel': {\r\n\t\t\tlet element = GetCollapsibleBlockModelElement(\r\n\t\t\t\tdata as CollapsibleBlockModel,\r\n\t\t\t\t{\r\n\t\t\t\t\t...options,\r\n\t\t\t\t\tinsideCell: true,\r\n\t\t\t\t\tinsideInnerGrid: true,\r\n\t\t\t\t\tinsideGrid: true,\r\n\t\t\t\t},\r\n\t\t\t\tdisableCustomHeadingLogic\r\n\t\t\t);\r\n\r\n\t\t\tinformation.renderElement = wrapElement(element, options);\r\n\t\t\tinformation.blockType = BlockType.Element;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'TableFragment': {\r\n\t\t\tlet element = GetTableFragmentElement(data as TableFragmentModel);\r\n\t\t\tinformation.renderElement = wrapElement(element, options);\r\n\t\t\tinformation.blockType = BlockType.Element;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'FormContainer': {\r\n\t\t\tconst model = data as EpiFormsProps;\r\n\t\t\tconst opt = {\r\n\t\t\t\t...options,\r\n\t\t\t\tinsideCell: true,\r\n\t\t\t\tinsideInnerGrid: true,\r\n\t\t\t\tinsideGrid: true,\r\n\t\t\t};\r\n\t\t\tlet element = <EpiForms key={options.index} {...model} options={opt} />;\r\n\t\t\tinformation.renderElement = wrapElement(element, options);\r\n\t\t\tinformation.blockType = BlockType.Element;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'HighlightModel': {\r\n\t\t\tlet element = GetHighlightModelElement(\r\n\t\t\t\tdata as HighlightModel,\r\n\t\t\t\t{\r\n\t\t\t\t\t...options,\r\n\t\t\t\t\tinsideCell: true,\r\n\t\t\t\t\tinsideInnerGrid: true,\r\n\t\t\t\t\tinsideGrid: true,\r\n\t\t\t\t},\r\n\t\t\t\tdisableCustomHeadingLogic\r\n\t\t\t);\r\n\t\t\tinformation.renderElement = wrapElement(element, options);\r\n\t\t\tinformation.blockType = BlockType.Element;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'Image': {\r\n\t\t\tlet element = GetImageElement(data as ImageFragmentModel, localization);\r\n\t\t\tinformation.renderElement = wrapElement(element, options);\r\n\t\t\tinformation.blockType = BlockType.Element;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t}\r\n\r\n\t/***\r\n\t * Block that should not add any margins and grids around them\r\n\t * These block can for example be placed in a cell or grid or something else\r\n\t */\r\n\tswitch (data.modelType) {\r\n\t\tcase 'GuidancePuffModel': {\r\n\t\t\tlet element = GetGuidancePuffModelElement(data as GuidancePuffModel, {\r\n\t\t\t\t...options,\r\n\t\t\t\tinsideCell: true,\r\n\t\t\t\tinsideInnerGrid: true,\r\n\t\t\t\tinsideGrid: true,\r\n\t\t\t});\r\n\r\n\t\t\tinformation.renderElement = element;\r\n\t\t\tinformation.blockType = BlockType.Item;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'GrantPuffModel': {\r\n\t\t\tlet element = GetGrantPuffModelElement(data as GrantPuffModel, options);\r\n\r\n\t\t\tinformation.renderElement = element;\r\n\t\t\tinformation.blockType = BlockType.Item;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'EventPuffItemModel': {\r\n\t\t\tlet element = GetEventPuffItemModelElement(\r\n\t\t\t\tdata as EventPuffItemModel,\r\n\t\t\t\toptions\r\n\t\t\t);\r\n\r\n\t\t\tinformation.renderElement = element;\r\n\t\t\tinformation.blockType = BlockType.Item;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'StatisticsPuffModel': {\r\n\t\t\tlet element = GetGuidancePuffModelElement(\r\n\t\t\t\tdata as StatisticsPuffModel,\r\n\t\t\t\toptions\r\n\t\t\t);\r\n\r\n\t\t\tinformation.renderElement = element;\r\n\t\t\tinformation.blockType = BlockType.Item;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'MicrositeArticlePuffModel': {\r\n\t\t\tlet element = GetStandardPuffElement(data as StandardPuffModel, options);\r\n\r\n\t\t\tinformation.renderElement = element;\r\n\t\t\tinformation.blockType = BlockType.Item;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'StandardPuffModel': {\r\n\t\t\tlet element = GetStandardPuffElement(data as StandardPuffModel, options);\r\n\r\n\t\t\tinformation.renderElement = element;\r\n\t\t\tinformation.blockType = BlockType.Item;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'SubjectAreaIconPuffModel': {\r\n\t\t\tlet element = GetSubjectAreaIconPuffElement(\r\n\t\t\t\tdata as SubjectAreaIconPuffModel,\r\n\t\t\t\toptions\r\n\t\t\t);\r\n\r\n\t\t\tinformation.renderElement = element;\r\n\t\t\tinformation.blockType = BlockType.Item;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'WidgetNumericBlockModel': {\r\n\t\t\tlet element = GetWidgetNumericBlockElement(\r\n\t\t\t\tdata as WidgetNumericBlockModel\r\n\t\t\t);\r\n\r\n\t\t\tinformation.renderElement = element;\r\n\t\t\tinformation.blockType = BlockType.Item;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'Video': {\r\n\t\t\t// Not currently used\r\n\t\t\tlet element = GetVideoElement(data as VideoFragmentModel);\r\n\t\t\tinformation.renderElement = element;\r\n\t\t\tinformation.blockType = BlockType.Item;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'PublicationPuffModel': {\r\n\t\t\tlet element = GetPublicationPuffModelElement(\r\n\t\t\t\tdata as PublicationPuffModel,\r\n\t\t\t\toptions\r\n\t\t\t);\r\n\t\t\tinformation.renderElement = element;\r\n\t\t\tinformation.blockType = BlockType.Item;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'RegulationPuffModel': {\r\n\t\t\tlet element = GetRegulationPuffModelElement(\r\n\t\t\t\tdata as RegulationPuffModel,\r\n\t\t\t\toptions,\r\n\t\t\t\tlocalization\r\n\t\t\t);\r\n\t\t\tinformation.renderElement = element;\r\n\t\t\tinformation.blockType = BlockType.Item;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t\tcase 'PuffWithLargeImage': {\r\n\t\t\t// Not currently used\r\n\t\t\tlet element = GetPuffWithLargeImageElement(data as PuffWithImageModel);\r\n\t\t\tinformation.renderElement = element;\r\n\t\t\tinformation.blockType = BlockType.Item;\r\n\t\t\treturn information;\r\n\t\t}\r\n\t}\r\n\r\n\t/***\r\n\t * Fallback\r\n\t */\r\n\tinformation.renderElement = (\r\n\t\t<Space bottom={0}>\r\n\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t<p style={{ color: 'red' }}>\r\n\t\t\t\t\tThere is an unsupported fragment type '{data.modelType}', Please\r\n\t\t\t\t\treport this to the system administrator.\r\n\t\t\t\t</p>\r\n\t\t\t</Grid>\r\n\t\t</Space>\r\n\t);\r\n\tinformation.blockType = BlockType.Unknown;\r\n\treturn information;\r\n};\r\n\r\nexport type Options = {\r\n\tindex?: number; // todo Move this to Props\r\n\tepi?: EpiEvent; // todo Move this to Props\r\n\theadingLevel: number; // What level we are on.\r\n\tinsideGrid: boolean;\r\n\tinsideInnerGrid: boolean;\r\n\tinsideCell: boolean;\r\n\tview: ViewType; // Prefered view type\r\n\tmodelType?: string; // Used to know if it's the startpage\r\n\tthemeContext: ThemeType;\r\n};\r\n\r\ninterface EpiFragmentsProps {\r\n\tfragments?: FragmentModelTypes[];\r\n\tpreviousBlockType?: BlockType | null;\r\n\theadingLevel?: number; // What level we are on.\r\n\tinsideGrid?: boolean;\r\n\tinsideInnerGrid?: boolean;\r\n\tinsideCell?: boolean;\r\n\tview?: ViewType; // Prefered view type\r\n\tmodelType?: string; // Used to know if it's the startpage\r\n\tindex?: number; // todo: check usage\r\n\toverrideSpacing?: number;\r\n\tepi?: EpiEvent; // todo: check usage\r\n\thtmlAttributes?: any;\r\n\tdisableCustomHeadingLogic?: boolean;\r\n\tpuffTheme?: PuffTheme;\r\n}\r\n\r\n/** Component for rendering Episerver fragments. */\r\nconst EpiFragments: React.FC<EpiFragmentsProps> = ({\r\n\tfragments,\r\n\tpreviousBlockType = null,\r\n\tinsideGrid = false,\r\n\tinsideInnerGrid = false,\r\n\tinsideCell = false,\r\n\tmodelType,\r\n\theadingLevel = 1,\r\n\tview,\r\n\toverrideSpacing,\r\n\thtmlAttributes,\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst localization = useSelector(selectLocalization);\r\n\tconst themeContext = useContext<ThemeType>(ThemeContext);\r\n\r\n\tif (!fragments) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tconst options = {\r\n\t\tinsideGrid: insideGrid,\r\n\t\tinsideInnerGrid: insideInnerGrid,\r\n\t\tinsideCell: insideCell,\r\n\t\theadingLevel: headingLevel,\r\n\t\tview: view,\r\n\t\tmodelType: modelType,\r\n\t\tindex: 0,\r\n\t\tthemeContext: themeContext,\r\n\t} as Options;\r\n\r\n\tlet content = fragments.map((fragment, index) => {\r\n\t\tconst elementInformation = getFragmentMetadata(\r\n\t\t\tfragment,\r\n\t\t\t{\r\n\t\t\t\t...options,\r\n\t\t\t\tindex,\r\n\t\t\t},\r\n\t\t\tdisableCustomHeadingLogic ?? false,\r\n\t\t\tlocalization\r\n\t\t);\r\n\r\n\t\tlet element = elementInformation.renderElement;\r\n\r\n\t\tlet spaceBefore = getSpaceToAddBefore(\r\n\t\t\tpreviousBlockType,\r\n\t\t\telementInformation.blockType,\r\n\t\t\tthemeContext\r\n\t\t);\r\n\r\n\t\tif (spaceBefore > 0) {\r\n\t\t\t// If previous block is SectionBanner, then ignore overrideSpacing\r\n\t\t\t// this is not an optimal solution.\r\n\t\t\tspaceBefore =\r\n\t\t\t\toverrideSpacing !== undefined &&\r\n\t\t\t\tpreviousBlockType !== BlockType.SectionBanner &&\r\n\t\t\t\telementInformation.blockType !== BlockType.SectionBanner\r\n\t\t\t\t\t? overrideSpacing\r\n\t\t\t\t\t: spaceBefore;\r\n\r\n\t\t\telement = wrapFragmentInSpace(element, spaceBefore);\r\n\t\t}\r\n\r\n\t\tpreviousBlockType = elementInformation.blockType;\r\n\r\n\t\treturn <React.Fragment key={index}>{element}</React.Fragment>;\r\n\t});\r\n\r\n\t// Wrap element in a div with needed attributes when editing the page inside epi-server\r\n\tif (htmlAttributes) {\r\n\t\treturn <div {...htmlAttributes}>{content}</div>;\r\n\t}\r\n\r\n\treturn <>{content}</>;\r\n};\r\n\r\nexport default EpiFragments;\r\n","import React from 'react';\r\nimport { StatisticsBlockModel } from 'types/fragments';\r\nimport { Options, wrapElementInGrid } from '../EpiFragments';\r\nimport Highcharts from 'components/Highcharts/Highcharts';\r\nimport styled from 'styled-components';\r\nimport {\r\n\tgetThemeBackground,\r\n\tgetThemeHeadingColor,\r\n\tPuffTheme,\r\n} from 'pages/sharedModelTypes';\r\nimport { ThemeProps } from 'components/Banner/Banner';\r\nimport ListHeader from 'components/ListHeader';\r\nimport Space from 'components/Boilerplate/Space';\r\n\r\nexport const GetStatisticsBlockModelElement = (\r\n\tmodel: StatisticsBlockModel,\r\n\toptions: Options\r\n) => {\r\n\tconst highChartPptions = JSON.parse(model.highChartsOptions);\r\n\r\n\tconst useShortDate = model.useShortDate;\r\n\r\n\tconst classificationList = model.classificationList;\r\n\r\n\tconst theme = PuffTheme.NeutralWhite;\r\n\tconst showHeader = model.heading ? true : false;\r\n\tconst element = (\r\n\t\t<>\r\n\t\t\t<HighchartsContainer themeName={theme}>\r\n\t\t\t\t{showHeader && (\r\n\t\t\t\t\t<Space bottom={options.themeContext.spacing.space2}>\r\n\t\t\t\t\t\t<ListHeader\r\n\t\t\t\t\t\t\theading={model.heading}\r\n\t\t\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\t\t\tlink={model.link}\r\n\t\t\t\t\t\t\tcolor={getThemeHeadingColor(options.themeContext, theme)}\r\n\t\t\t\t\t\t></ListHeader>\r\n\t\t\t\t\t</Space>\r\n\t\t\t\t)}\r\n\t\t\t\t<Highcharts\r\n\t\t\t\t\tshowLegends={false}\r\n\t\t\t\t\tdata={highChartPptions}\r\n\t\t\t\t\tuseShortDate={useShortDate}\r\n\t\t\t\t\tclassificationList={classificationList}\r\n\t\t\t\t></Highcharts>\r\n\t\t\t</HighchartsContainer>\r\n\t\t</>\r\n\t);\r\n\r\n\tif (options.insideGrid) {\r\n\t\treturn element;\r\n\t}\r\n\r\n\treturn wrapElementInGrid(element);\r\n};\r\n\r\nexport const HighchartsContainer = styled.div<ThemeProps>`\r\n\tpadding: ${(props) => props.theme.spacing.space4}rem;\r\n\tbackground-color: ${(p) => getThemeBackground(p.theme, p.themeName)};\r\n`;\r\n","interface Option {\r\n\tvalue: string;\r\n\tcaption: string;\r\n\tchecked?: boolean;\r\n}\r\n\r\n/**\r\n * Extracts the initial form values for the Form-component.\r\n */\r\nexport const getInitialFormValues = (fields: any, currentStep: number): any => {\r\n\tconst formValues: any = {};\r\n\r\n\t// eslint-disable-next-line\r\n\tObject.keys(fields).map((key) => {\r\n\t\tconst el = fields[key];\r\n\r\n\t\tif (\r\n\t\t\tel.type === 'select' ||\r\n\t\t\tel.type === 'radio' ||\r\n\t\t\tel.type === 'checkbox' ||\r\n\t\t\tel.type === 'multiselect'\r\n\t\t) {\r\n\t\t\tformValues[el.name] = [];\r\n\r\n\t\t\tel.options.forEach((opt: Option) => {\r\n\t\t\t\tif (opt.checked) {\r\n\t\t\t\t\tformValues[el.name].push(opt.value);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif (el.type === 'select') {\r\n\t\t\t\tformValues[el.name] = formValues[el.name][0]\r\n\t\t\t\t\t? formValues[el.name][0]\r\n\t\t\t\t\t: '';\r\n\t\t\t}\r\n\t\t} else if (el.predefinedValue) {\r\n\t\t\tif (el.name === '__FormCurrentStepIndex') {\r\n\t\t\t\tformValues[el.name] = currentStep;\r\n\t\t\t} else {\r\n\t\t\t\tformValues[el.name] = el.predefinedValue;\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\treturn formValues;\r\n};\r\n\r\n/**\r\n * Returns data and visible fields for current form step\r\n */\r\nexport const getStepFields = (currentStep: number, formId: string) => {\r\n\tconst stepId = `form-${formId}-step-${currentStep}`;\r\n\tconst currentStepNode = document.getElementById(stepId);\r\n\tlet formData = new FormData();\r\n\tlet currentStepFields: any = [];\r\n\r\n\tformData = getHiddenFieldValues(formData, formId);\r\n\r\n\tif (currentStepNode) {\r\n\t\tcurrentStepFields = currentStepNode.querySelectorAll(\r\n\t\t\t'input, select, textarea'\r\n\t\t);\r\n\t\tconst visibleFields: string[] = [];\r\n\r\n\t\tcurrentStepFields.forEach((field: any) => {\r\n\t\t\tconst type = field.getAttribute('type');\r\n\t\t\tconst fieldId = field.getAttribute('id') || field.getAttribute('name');\r\n\r\n\t\t\tif (fieldId.indexOf('-') !== -1) {\r\n\t\t\t\tvisibleFields.push(fieldId.slice(0, fieldId.indexOf('-')));\r\n\t\t\t} else {\r\n\t\t\t\tvisibleFields.push(fieldId);\r\n\t\t\t}\r\n\r\n\t\t\tif (field.options) {\r\n\t\t\t\tformData = getSelectValue(field, formData);\r\n\t\t\t} else if (type === 'checkbox' || type === 'radio') {\r\n\t\t\t\tformData = getCheckboxAndRadioValue(field, formData);\r\n\t\t\t} else if (type === 'file') {\r\n\t\t\t\tformData = getUploadedFiles(field, formData);\r\n\t\t\t} else {\r\n\t\t\t\tformData = getFieldValue(field, formData);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn [formData, currentStep, visibleFields];\r\n\t}\r\n};\r\n\r\n/**\r\n * Appends values of hidden fields to formData\r\n */\r\nconst getHiddenFieldValues = (formData: FormData, formId: string) => {\r\n\tconst hiddenFieldHolder = document.getElementById(\r\n\t\t`form-${formId}-hiddenfields`\r\n\t);\r\n\r\n\tif (hiddenFieldHolder) {\r\n\t\tconst hiddenFields = hiddenFieldHolder.querySelectorAll('input, select');\r\n\r\n\t\thiddenFields.forEach((field: any) => {\r\n\t\t\tformData.append(field.getAttribute('name'), field.value);\r\n\t\t});\r\n\t}\r\n\treturn formData;\r\n};\r\n\r\n/**\r\n * Appends value of select element to formData\r\n */\r\nconst getSelectValue = (field: any, formData: FormData) => {\r\n\tfor (var i = 0; i < field.options.length; i++) {\r\n\t\tif (field.options[i].selected) {\r\n\t\t\tformData.append(field.getAttribute('name'), field.options[i].value);\r\n\t\t}\r\n\t}\r\n\treturn formData;\r\n};\r\n\r\n/**\r\n * Appends value of checkbox or radio button to formData\r\n */\r\nconst getCheckboxAndRadioValue = (field: any, formData: FormData) => {\r\n\tif (field.checked) {\r\n\t\tformData.append(field.getAttribute('name'), field.value);\r\n\t}\r\n\treturn formData;\r\n};\r\n\r\n/**\r\n * Appends value of uploaded files to formData\r\n */\r\nconst getUploadedFiles = (field: any, formData: FormData) => {\r\n\tfor (var j = 0; j < field.files.length; j++) {\r\n\t\tformData.append(field.getAttribute('name'), field.files[j]);\r\n\t}\r\n\treturn formData;\r\n};\r\n\r\n/**\r\n * Appends value of input field to formData\r\n */\r\nconst getFieldValue = (field: any, formData: FormData) => {\r\n\tformData.append(field.getAttribute('name'), field.value);\r\n\treturn formData;\r\n};\r\n","// import fetch from 'unfetch';\r\n\r\n/**\r\n * Submits an Episerver form\r\n */\r\nexport const submitForm = (\r\n\tvalues: any,\r\n\tstepIndex: number,\r\n\tdispatch: any,\r\n\tsteps: any[],\r\n\tform: any\r\n) => {\r\n\tconst { currentStep, submissionId, action, method, redirectUrl } = form;\r\n\r\n\tconst multiStep = steps.length > 2 && stepIndex !== steps.length - 2;\r\n\tconst nextStep = multiStep ? stepIndex + 1 : currentStep + 1;\r\n\r\n\tvalues.set('__FormCurrentStepIndex', currentStep);\r\n\tvalues.set('__FormSubmissionId', submissionId);\r\n\r\n\tdispatch({\r\n\t\ttype: 'UPDATE_STATE',\r\n\t\tpayload: { isLoading: true, serverValidationError: false },\r\n\t});\r\n\r\n\tfetch(action, {\r\n\t\tbody: values,\r\n\t\tcache: 'no-cache',\r\n\t\theaders: {\r\n\t\t\t'X-Requested-With': 'XMLHttpRequest',\r\n\t\t},\r\n\t\tmethod,\r\n\t\tcredentials: 'same-origin',\r\n\t\tredirect: 'follow',\r\n\t\treferrer: 'no-referrer',\r\n\t})\r\n\t\t.then((response) => {\r\n\t\t\tif (response.ok) {\r\n\t\t\t\treturn response;\r\n\t\t\t} else {\r\n\t\t\t\tthrow new Error(response.statusText);\r\n\t\t\t}\r\n\t\t})\r\n\t\t.then((response) => response.json())\r\n\t\t.then((response) => {\r\n\t\t\treturn handleResponse(\r\n\t\t\t\tresponse,\r\n\t\t\t\tmultiStep,\r\n\t\t\t\tnextStep,\r\n\t\t\t\tdispatch,\r\n\t\t\t\tredirectUrl\r\n\t\t\t);\r\n\t\t})\r\n\t\t.catch((error) => {\r\n\t\t\tconst message =\r\n\t\t\t\ttypeof error === 'string'\r\n\t\t\t\t\t? error\r\n\t\t\t\t\t: 'An error occurred, try again later';\r\n\r\n\t\t\talert(message);\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: 'UPDATE_STATE',\r\n\t\t\t\tpayload: { isLoading: false },\r\n\t\t\t});\r\n\t\t});\r\n};\r\n\r\n/**\r\n * Handles the submission response\r\n */\r\nconst handleResponse = (\r\n\tresponse: any,\r\n\tmultiStep: boolean,\r\n\tnextStep: number,\r\n\tdispatch: any,\r\n\tredirectUrl: string\r\n) => {\r\n\tdispatch({\r\n\t\ttype: 'UPDATE_STATE',\r\n\t\tpayload: {\r\n\t\t\tisLoading: false,\r\n\t\t\tinvalidFields: [],\r\n\t\t\tvalidationMessages: {},\r\n\t\t\tcurrentStep: nextStep,\r\n\t\t},\r\n\t});\r\n\r\n\tif (!response.IsSuccess) {\r\n\t\thandleServerValidationError(\r\n\t\t\tresponse.AdditionalParams.__FormField,\r\n\t\t\tdispatch\r\n\t\t);\r\n\t}\r\n\r\n\tif (multiStep && response.IsSuccess) {\r\n\t\tdispatch({\r\n\t\t\ttype: 'UPDATE_STATE',\r\n\t\t\tpayload: {\r\n\t\t\t\tsubmissionId: response.Data ? response.Data.SubmissionId : '',\r\n\t\t\t},\r\n\t\t});\r\n\t} else if (response.Message && response.Message !== '') {\r\n\t\tif (\r\n\t\t\t(response.RedirectUrl && response.RedirectUrl.length > 0) ||\r\n\t\t\t(redirectUrl && redirectUrl.length > 0)\r\n\t\t) {\r\n\t\t\twindow.location.href = response.RedirectUrl || redirectUrl;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tdispatch({\r\n\t\t\ttype: 'UPDATE_STATE',\r\n\t\t\tpayload: { successMessage: response.Message },\r\n\t\t});\r\n\t}\r\n};\r\n\r\n/**\r\n * Sums up server validation errors with fields and validationmessages\r\n */\r\nconst handleServerValidationError = (fieldErrors: any[], dispatch: any) => {\r\n\tconst invalidFields: string[] = [];\r\n\tconst validationMessages: any = {};\r\n\r\n\tfieldErrors.forEach((field) => {\r\n\t\tinvalidFields.push(field.InvalidElement);\r\n\t\tvalidationMessages[field.InvalidElement] = {\r\n\t\t\tlabel: field.InvalidElementLabel,\r\n\t\t\tmessage: field.ValidationMessage,\r\n\t\t};\r\n\t});\r\n\r\n\tdispatch({\r\n\t\ttype: 'UPDATE_STATE',\r\n\t\tpayload: {\r\n\t\t\tinvalidFields,\r\n\t\t\tvalidationMessages,\r\n\t\t\tserverValidationError: true,\r\n\t\t},\r\n\t});\r\n};\r\n","interface Props {\r\n\tid: string;\r\n\tlabel: string;\r\n\trequired?: boolean;\r\n\tpattern?: string;\r\n\ttype?: string;\r\n\tvalidationMessage?: string;\r\n\tpatternMessage?: string;\r\n\tsingle?: boolean;\r\n\tmultiple?: boolean;\r\n}\r\ninterface FieldValidation {\r\n\t(fieldRef: any, fieldProps: Props): [\r\n\t\tValidateField,\r\n\t\tShowFieldError,\r\n\t\tHideFieldError\r\n\t];\r\n}\r\ninterface ValidateField {\r\n\t(value: string[] | string | number | boolean): Field;\r\n}\r\ninterface ShowFieldError {\r\n\t(field: Field): void;\r\n}\r\ninterface HideFieldError {\r\n\t(): void;\r\n}\r\ninterface Field {\r\n\tlabel: string;\r\n\tid: string;\r\n\tmessage?: string;\r\n}\r\n\r\n/**\r\n * Custom hook for validating a field\r\n */\r\nexport const useFieldValidation: FieldValidation = (fieldRef, fieldProps) => {\r\n\tconst {\r\n\t\trequired,\r\n\t\tpattern,\r\n\t\tlabel,\r\n\t\tid,\r\n\t\ttype,\r\n\t\tvalidationMessage,\r\n\t\tpatternMessage,\r\n\t\tsingle,\r\n\t} = fieldProps;\r\n\r\n\tconst validateField: ValidateField = (value) => {\r\n\t\tlet field: Field = { id, label };\r\n\r\n\t\tconst fieldIsNotValid = value !== '' && !fieldRef.current.checkValidity();\r\n\t\tconst requiredFieldIsNotFilledIn =\r\n\t\t\t(required && value === '') ||\r\n\t\t\t(required && value === 'fieldset' && !fieldsetHasOneCheckedInput());\r\n\t\tconst fieldDoesNotMatchPattern =\r\n\t\t\tpattern && !value.toString().match(pattern) && value !== '';\r\n\t\tconst singleInputIsNotChecked = single && required && !value;\r\n\r\n\t\tif (type === 'url' && fieldIsNotValid) {\r\n\t\t\tfield.message = validationMessage || 'TillhandahÃ¥ll en giltig url.';\r\n\t\t} else if (type === 'email' && fieldIsNotValid) {\r\n\t\t\tfield.message =\r\n\t\t\t\tpatternMessage ||\r\n\t\t\t\tvalidationMessage ||\r\n\t\t\t\t'TillhandahÃ¥ll en giltig e-postadress.';\r\n\t\t} else if (requiredFieldIsNotFilledIn || singleInputIsNotChecked) {\r\n\t\t\tfield.message =\r\n\t\t\t\tvalidationMessage ||\r\n\t\t\t\t'Du mÃ¥ste fylla i det här fältet för att gÃ¥ vidare.';\r\n\t\t} else if (pattern && fieldDoesNotMatchPattern) {\r\n\t\t\tfield.message =\r\n\t\t\t\tpatternMessage || 'Vänligen matcha det förväntade formatet.';\r\n\t\t}\r\n\r\n\t\treturn field;\r\n\t};\r\n\r\n\t/**\r\n\t * Checks if any input (radio/checkbox) within the fieldset group has been checked\r\n\t */\r\n\tconst fieldsetHasOneCheckedInput = () => {\r\n\t\tconst allInputs = fieldRef.current.querySelectorAll('input');\r\n\t\tlet hasOneValidInput = false;\r\n\r\n\t\tallInputs.forEach((field: any) => {\r\n\t\t\tif (field.checked) {\r\n\t\t\t\thasOneValidInput = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn hasOneValidInput;\r\n\t};\r\n\r\n\t/**\r\n\t * Displays a field error with message\r\n\t */\r\n\tconst showFieldError: ShowFieldError = (field) => {\r\n\t\tlet label: any = document.querySelector(`#form${id}__desc`);\r\n\t\tfieldRef.current.classList.add('invalid');\r\n\r\n\t\tif (label) {\r\n\t\t\tlabel.textContent = field.message;\r\n\t\t\tlabel.removeAttribute('hidden');\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Hides field error and clears message\r\n\t */\r\n\tconst hideFieldError: HideFieldError = () => {\r\n\t\tlet label = document.querySelector(`#form${id}__desc`);\r\n\t\tfieldRef.current.classList.remove('invalid');\r\n\r\n\t\tif (label) {\r\n\t\t\tlabel.textContent = '';\r\n\t\t\tlabel.setAttribute('hidden', 'true');\r\n\t\t}\r\n\t};\r\n\r\n\treturn [validateField, showFieldError, hideFieldError];\r\n};\r\n","import React, { createContext, useContext, useReducer } from 'react';\r\n\r\nconst FORM_UPDATE = 'FORM_UPDATE';\r\nconst FIELD_INVALID = 'FIELD_INVALID';\r\nconst FIELD_VALID = 'FIELD_VALID';\r\n\r\ntype InitialState = {\r\n\tvalues: any;\r\n\tvalidationMessages: any;\r\n\tinvalidFields: string[];\r\n};\r\n\r\ninterface Props {\r\n\tchildren?: any;\r\n\tinitialState: InitialState;\r\n}\r\n\r\ntype State = {\r\n\tvalues: any;\r\n\tvalidationMessages: any;\r\n\tinvalidFields: string[];\r\n};\r\n\r\ntype Action =\r\n\t| { type: 'FORM_UPDATE'; values: any }\r\n\t| { type: 'FIELD_INVALID'; field: any }\r\n\t| { type: 'FIELD_VALID'; field: any };\r\n\r\nconst FormReducer = (state: State, action: Action) => {\r\n\tswitch (action.type) {\r\n\t\tcase FORM_UPDATE:\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tvalues: action.values,\r\n\t\t\t};\r\n\t\tcase FIELD_INVALID:\r\n\t\t\tconst validationMessageHasNotChanged =\r\n\t\t\t\tstate.validationMessages.hasOwnProperty(action.field.id) &&\r\n\t\t\t\tstate.validationMessages[action.field.id].message &&\r\n\t\t\t\tstate.validationMessages[action.field.id].message ===\r\n\t\t\t\t\taction.field.message;\r\n\r\n\t\t\tif (\r\n\t\t\t\tstate.invalidFields.includes(action.field.id) &&\r\n\t\t\t\tvalidationMessageHasNotChanged\r\n\t\t\t) {\r\n\t\t\t\treturn state;\r\n\t\t\t}\r\n\r\n\t\t\tconst currentInvalidFields = state.invalidFields\r\n\t\t\t\t.slice(0)\r\n\t\t\t\t.filter((item: any) => {\r\n\t\t\t\t\treturn item !== action.field.id;\r\n\t\t\t\t});\r\n\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tinvalidFields: [...currentInvalidFields, action.field.id],\r\n\t\t\t\tvalidationMessages: {\r\n\t\t\t\t\t...state.validationMessages,\r\n\t\t\t\t\t[action.field.id]: action.field,\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\tcase FIELD_VALID:\r\n\t\t\tconst updatedFields = state.invalidFields.slice(0).filter((item: any) => {\r\n\t\t\t\treturn item !== action.field.id;\r\n\t\t\t});\r\n\r\n\t\t\tconst updatedMessages = { ...state.validationMessages };\r\n\r\n\t\t\tif (updatedMessages[action.field.id]) {\r\n\t\t\t\tdelete updatedMessages[action.field.id];\r\n\t\t\t}\r\n\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tinvalidFields: updatedFields,\r\n\t\t\t\tvalidationMessages: updatedMessages,\r\n\t\t\t};\r\n\t\tdefault:\r\n\t\t\treturn state;\r\n\t}\r\n};\r\n\r\nexport const FormContext = createContext<Partial<any[]>>([]);\r\n\r\nexport const FormProvider: React.FC<Props> = ({ initialState, children }) => (\r\n\t<FormContext.Provider value={useReducer(FormReducer, initialState)}>\r\n\t\t{children}\r\n\t</FormContext.Provider>\r\n);\r\n\r\nexport const useFormValue = () => useContext(FormContext);\r\n","/**\r\n * Field\r\n */\r\n\r\nimport React, { useState, useRef, useEffect } from 'react';\r\nimport { useFieldValidation } from '../hooks/useFieldValidation';\r\nimport { FieldProps } from '../types';\r\n\r\nimport { useFormValue } from '../context/Form.context';\r\nimport clsx from 'clsx';\r\n\r\nconst Field: React.FC<FieldProps> = (props) => {\r\n\tconst {\r\n\t\tclassName,\r\n\t\tplaceholder,\r\n\t\tdescription,\r\n\t\tonFieldChange,\r\n\t\tdefaultValue,\r\n\t\tautoSubmit,\r\n\t\tname,\r\n\t\tid,\r\n\t\tshowError,\r\n\t\tsetFocus,\r\n\t\tvisibleFields,\r\n\t\tnoValidate,\r\n\t\ttype,\r\n\t\tlabel,\r\n\t\tdescribedby,\r\n\t\trequired,\r\n\t\tresetForm,\r\n\t\tpatternMessage,\r\n\t\tvalidationMessage,\r\n\t\t...allProps\r\n\t} = props;\r\n\r\n\tconst [{ invalidFields }, dispatch] = useFormValue();\r\n\tconst [value, setValue] = useState(defaultValue || '');\r\n\tconst [valid, setValid] = useState(false);\r\n\tconst [touched, setTouched] = useState(false);\r\n\tconst fieldRef = useRef<any>(null);\r\n\tconst [validateField, showFieldError, hideFieldError] = useFieldValidation(\r\n\t\tfieldRef,\r\n\t\tprops\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst validatedField = validateField(value);\r\n\t\tconst fieldIsValid = !validatedField.message;\r\n\r\n\t\tif (validatedField.message) {\r\n\t\t\tsetValid(false);\r\n\t\t\tdispatch({ type: 'FIELD_INVALID', field: validatedField });\r\n\t\t} else {\r\n\t\t\tsetValid(true);\r\n\r\n\t\t\tif (invalidFields.includes(validatedField.id)) {\r\n\t\t\t\tdispatch({ type: 'FIELD_VALID', field: validatedField });\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!noValidate) {\r\n\t\t\tif (touched && !fieldIsValid) {\r\n\t\t\t\tshowFieldError(validatedField);\r\n\t\t\t} else if (\r\n\t\t\t\t(showError &&\r\n\t\t\t\t\t!fieldIsValid &&\r\n\t\t\t\t\tvisibleFields &&\r\n\t\t\t\t\tvisibleFields.includes(id)) ||\r\n\t\t\t\t(showError && !fieldIsValid && !visibleFields)\r\n\t\t\t) {\r\n\t\t\t\tsetTouched(true);\r\n\t\t\t\tshowFieldError(validatedField);\r\n\t\t\t} else {\r\n\t\t\t\thideFieldError();\r\n\t\t\t}\r\n\r\n\t\t\tif (setFocus) {\r\n\t\t\t\tfieldRef.current.focus();\r\n\t\t\t}\r\n\t\t}\r\n\t\t// eslint-disable-next-line\r\n\t}, [touched, showError, value, setFocus, visibleFields, required]);\r\n\r\n\tconst onChange = (e: React.FormEvent<HTMLElement>) => {\r\n\t\tconst target = e.target as HTMLFormElement;\r\n\r\n\t\tsetValue(target.value);\r\n\t\tonFieldChange({\r\n\t\t\tname,\r\n\t\t\tvalue: target.value,\r\n\t\t\ttype: 'Field',\r\n\t\t\tautoSubmit,\r\n\t\t});\r\n\t};\r\n\r\n\tconst describedByAttribute = `form${id}__desc${\r\n\t\tdescribedby ? ` ${describedby}` : ''\r\n\t}`;\r\n\r\n\treturn (\r\n\t\t<input\r\n\t\t\tclassName={clsx(\r\n\t\t\t\tclassName,\r\n\t\t\t\t'h-8',\r\n\t\t\t\t'p-1',\r\n\t\t\t\t'border-2',\r\n\t\t\t\t'border-gray-400',\r\n\t\t\t\t'border-solid'\r\n\t\t\t)}\r\n\t\t\ttitle={description}\r\n\t\t\tplaceholder={placeholder || ''}\r\n\t\t\taria-invalid={!valid}\r\n\t\t\tvalue={value}\r\n\t\t\tname={name}\r\n\t\t\trequired={required}\r\n\t\t\tonChange={onChange}\r\n\t\t\tonBlur={() => setTouched(true)}\r\n\t\t\tref={fieldRef}\r\n\t\t\tid={id}\r\n\t\t\taria-describedby={!noValidate ? describedByAttribute : undefined}\r\n\t\t\ttype={type === null ? 'text' : type}\r\n\t\t\t{...allProps}\r\n\t\t/>\r\n\t);\r\n};\r\n\r\nexport default Field;\r\n","/**\r\n * TextArea\r\n */\r\n\r\nimport React, { useState, useRef, useEffect } from 'react';\r\nimport { TextAreaProps } from '../types';\r\nimport { useFieldValidation } from '../hooks/useFieldValidation';\r\nimport { useFormValue } from '../context/Form.context';\r\nimport clsx from 'clsx';\r\n\r\nconst TextArea: React.FC<TextAreaProps> = (props) => {\r\n\tconst {\r\n\t\tclassName,\r\n\t\tid,\r\n\t\tdescription,\r\n\t\tname,\r\n\t\tplaceholder,\r\n\t\tdefaultValue,\r\n\t\trequired,\r\n\t\tdisabled,\r\n\t\tautoSubmit,\r\n\t\tonFieldChange,\r\n\t\tshowError,\r\n\t\tvisibleFields,\r\n\t} = props;\r\n\r\n\tconst [{ invalidFields }, dispatch] = useFormValue();\r\n\tconst [value, setValue] = useState(defaultValue || '');\r\n\tconst [valid, setValid] = useState(false);\r\n\tconst [touched, setTouched] = useState(false);\r\n\tconst fieldRef = useRef(null);\r\n\tconst [validateField, showFieldError, hideFieldError] = useFieldValidation(\r\n\t\tfieldRef,\r\n\t\tprops\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst validatedField = validateField(value);\r\n\t\tconst fieldIsValid = !validatedField.message;\r\n\r\n\t\tif (validatedField.message) {\r\n\t\t\tsetValid(false);\r\n\t\t\tdispatch({ type: 'FIELD_INVALID', field: validatedField });\r\n\t\t} else {\r\n\t\t\tsetValid(true);\r\n\r\n\t\t\tif (invalidFields.includes(validatedField.id)) {\r\n\t\t\t\tdispatch({ type: 'FIELD_VALID', field: validatedField });\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (touched && !fieldIsValid) {\r\n\t\t\tshowFieldError(validatedField);\r\n\t\t} else if (\r\n\t\t\t(showError &&\r\n\t\t\t\t!fieldIsValid &&\r\n\t\t\t\tvisibleFields &&\r\n\t\t\t\tvisibleFields.includes(id)) ||\r\n\t\t\t(showError && !fieldIsValid && !visibleFields)\r\n\t\t) {\r\n\t\t\tsetTouched(true);\r\n\t\t\tshowFieldError(validatedField);\r\n\t\t} else {\r\n\t\t\thideFieldError();\r\n\t\t}\r\n\t\t// eslint-disable-next-line\r\n\t}, [touched, showError, value]);\r\n\r\n\tconst onChange = (e: React.FormEvent<HTMLElement>) => {\r\n\t\tconst target = e.target as HTMLFormElement;\r\n\r\n\t\tsetValue(target.value);\r\n\t\tonFieldChange({\r\n\t\t\tname,\r\n\t\t\tvalue: target.value,\r\n\t\t\ttype: 'TextArea',\r\n\t\t\tautoSubmit,\r\n\t\t});\r\n\t};\r\n\r\n\treturn (\r\n\t\t<textarea\r\n\t\t\tclassName={clsx(\r\n\t\t\t\tclassName,\r\n\t\t\t\t'h-8',\r\n\t\t\t\t'p-1',\r\n\t\t\t\t'border-2',\r\n\t\t\t\t'border-gray-400',\r\n\t\t\t\t'border-solid'\r\n\t\t\t)}\r\n\t\t\tid={id}\r\n\t\t\ttitle={description}\r\n\t\t\taria-invalid={!valid}\r\n\t\t\tname={name}\r\n\t\t\trequired={required}\r\n\t\t\tdisabled={disabled}\r\n\t\t\tplaceholder={placeholder || ''}\r\n\t\t\tvalue={value}\r\n\t\t\tonChange={onChange}\r\n\t\t\tonBlur={() => setTouched(true)}\r\n\t\t\tref={fieldRef}\r\n\t\t\taria-describedby={`form${id}__desc`}\r\n\t\t/>\r\n\t);\r\n};\r\n\r\nexport default TextArea;\r\n","/**\r\n * Checkbox\r\n */\r\n\r\nimport React, { useState, useEffect, useRef } from 'react';\r\nimport { useFieldValidation } from '../hooks/useFieldValidation';\r\nimport { useFormValue } from '../context/Form.context';\r\nimport { CheckboxProps } from '../types';\r\nimport { default as CheckboxComponent } from '../../Checkbox/Checkbox';\r\n\r\n/**\r\n * Checks if the checkbox should be checked.\r\n */\r\nexport const shouldBeChecked = (value: string, defaultValue: any) => {\r\n\tif (Array.isArray(defaultValue)) {\r\n\t\treturn defaultValue.indexOf(value) !== -1;\r\n\t} else {\r\n\t\treturn value === defaultValue;\r\n\t}\r\n};\r\n\r\nconst Checkbox: React.FC<CheckboxProps> = (props) => {\r\n\tconst {\r\n\t\tid,\r\n\t\tname,\r\n\t\tonFieldChange,\r\n\t\tautoSubmit,\r\n\t\tvalue,\r\n\t\trequired,\r\n\t\tsingle,\r\n\t\tshowError,\r\n\t\tclassName,\r\n\t\tvisibleFields,\r\n\t\tdisabled,\r\n\t\tlabel,\r\n\t\tindex,\r\n\t} = props;\r\n\tconst [checked, setChecked] = useState(\r\n\t\tshouldBeChecked(props.value, props.defaultValue)\r\n\t);\r\n\r\n\tconst [{ invalidFields }, dispatch] = useFormValue();\r\n\tconst [valid, setValid] = useState(false);\r\n\tconst [touched, setTouched] = useState(false);\r\n\tconst fieldRef = useRef(null);\r\n\tconst [validateField, showFieldError, hideFieldError] = useFieldValidation(\r\n\t\tfieldRef,\r\n\t\tprops\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (single) {\r\n\t\t\tconst validatedField = validateField(checked);\r\n\r\n\t\t\tif (validatedField.message) {\r\n\t\t\t\tsetValid(false);\r\n\t\t\t\tdispatch({ type: 'FIELD_INVALID', field: validatedField });\r\n\t\t\t} else {\r\n\t\t\t\tsetValid(true);\r\n\r\n\t\t\t\tif (invalidFields.includes(validatedField.id)) {\r\n\t\t\t\t\tdispatch({ type: 'FIELD_VALID', field: validatedField });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (touched && !valid) {\r\n\t\t\t\tshowFieldError(validatedField);\r\n\t\t\t} else if (\r\n\t\t\t\t(showError && !valid && visibleFields && visibleFields.includes(id)) ||\r\n\t\t\t\t(showError && !valid && !visibleFields)\r\n\t\t\t) {\r\n\t\t\t\tsetTouched(true);\r\n\t\t\t\tshowFieldError(validatedField);\r\n\t\t\t} else {\r\n\t\t\t\thideFieldError();\r\n\t\t\t}\r\n\t\t}\r\n\t\t// eslint-disable-next-line\r\n\t}, [touched, showError, invalidFields, visibleFields, checked]);\r\n\r\n\t// const onChange = (e: React.FormEvent<HTMLElement>) => {\r\n\t// \tconst target = e.target as HTMLFormElement;\r\n\r\n\t// \tsetChecked(target.checked);\r\n\t// \tif (!touched) {\r\n\t// \t\tsetTouched(true);\r\n\t// \t}\r\n\r\n\t// \tonFieldChange({\r\n\t// \t\tname,\r\n\t// \t\tvalue: target.value,\r\n\t// \t\tchecked: target.checked,\r\n\t// \t\tautoSubmit,\r\n\t// \t\ttype: 'Checkbox',\r\n\t// \t});\r\n\t// };\r\n\r\n\tconst onCheckedChanged = (checked: boolean) => {\r\n\t\tsetChecked(checked);\r\n\t\tif (!touched) {\r\n\t\t\tsetTouched(true);\r\n\t\t}\r\n\r\n\t\tonFieldChange({\r\n\t\t\tname,\r\n\t\t\tvalue: value,\r\n\t\t\tchecked: checked,\r\n\t\t\tautoSubmit,\r\n\t\t\ttype: 'Checkbox',\r\n\t\t});\r\n\t}\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<CheckboxComponent ref={fieldRef}\r\n\t\t\t\tid={index && index >= 0 ? `${id}-${index}` : id}\r\n\t\t\t\tchecked={checked}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\tname={name}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tvalue={value}\r\n\t\t\t\taria-invalid={single ? !valid : undefined}\r\n\t\t\t\taria-describedby={`form${id}__desc`}\r\n\t\t\t\tonCheckedChanged={onCheckedChanged}>\r\n\t\t\t\t{label}\r\n\t\t\t</CheckboxComponent>\r\n\t\t\t{/* <input\r\n\t\t\t\ttype=\"checkbox\"\r\n\t\t\t\tid={index && index >= 0 ? `${id}-${index}` : id}\r\n\t\t\t\tname={name}\r\n\t\t\t\tclassName={className}\r\n\t\t\t\tvalue={value}\r\n\t\t\t\tchecked={checked}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\tonChange={onChange}\r\n\t\t\t\tref={fieldRef}\r\n\t\t\t\taria-describedby={`form${id}__desc`}\r\n\t\t\t\taria-invalid={single ? !valid : undefined}\r\n\t\t\t/> */}\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default Checkbox;\r\n","/**\r\n * RadioButton\r\n */\r\n\r\nimport React, { useState, useEffect, useRef } from 'react';\r\nimport { useFieldValidation } from '../hooks/useFieldValidation';\r\nimport { useFormValue } from '../context/Form.context';\r\nimport { RadioButtonProps } from '../types';\r\nimport { shouldBeChecked } from './Checkbox';\r\n\r\n\r\n\r\nconst RadioButton: React.FC<RadioButtonProps> = (props) => {\r\n\tconst {\r\n\t\tid,\r\n\t\tname,\r\n\t\tdefaultValue,\r\n\t\tonFieldChange,\r\n\t\tautoSubmit,\r\n\t\tvalue,\r\n\t\tsingle,\r\n\t\tshowError,\r\n\t\tdisabled,\r\n\t\tclassName,\r\n\t\tvisibleFields,\r\n\t\tindex,\r\n\t} = props;\r\n\r\n\tconst [checked, setChecked] = useState('');\r\n\r\n\tconst [{ invalidFields }, dispatch] = useFormValue();\r\n\tconst [valid, setValid] = useState(false);\r\n\tconst [touched, setTouched] = useState(false);\r\n\tconst fieldRef = useRef(null);\r\n\tconst [validateField, showFieldError, hideFieldError] = useFieldValidation(\r\n\t\tfieldRef,\r\n\t\tprops\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (single) {\r\n\t\t\tconst validatedField = validateField(checked);\r\n\r\n\t\t\tif (validatedField.message) {\r\n\t\t\t\tsetValid(false);\r\n\t\t\t\tdispatch({ type: 'FIELD_INVALID', field: validatedField });\r\n\t\t\t} else {\r\n\t\t\t\tsetValid(true);\r\n\r\n\t\t\t\tif (invalidFields.includes(validatedField.id)) {\r\n\t\t\t\t\tdispatch({ type: 'FIELD_VALID', field: validatedField });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (touched && !valid) {\r\n\t\t\t\tshowFieldError(validatedField);\r\n\t\t\t} else if (\r\n\t\t\t\t(showError && !valid && visibleFields && visibleFields.includes(id)) ||\r\n\t\t\t\t(showError && !valid && !visibleFields)\r\n\t\t\t) {\r\n\t\t\t\tsetTouched(true);\r\n\t\t\t\tshowFieldError(validatedField);\r\n\t\t\t} else {\r\n\t\t\t\thideFieldError();\r\n\t\t\t}\r\n\t\t}\r\n\t\t// eslint-disable-next-line\r\n\t}, [touched, showError, invalidFields, visibleFields, checked]);\r\n\r\n\tconst onChange = (e: React.FormEvent<HTMLElement>) => {\r\n\t\tconst target = e.target as HTMLFormElement;\r\n\t\tsetChecked(target.value);\r\n\t\tif (!touched) {\r\n\t\t\tsetTouched(true);\r\n\t\t}\r\n\r\n\t\tonFieldChange({\r\n\t\t\tname,\r\n\t\t\tvalue: target.value,\r\n\t\t\ttype: 'RadioButton',\r\n\t\t\tautoSubmit,\r\n\t\t});\r\n\t};\r\n\r\n\treturn (\r\n\t\t<input\r\n\t\t\ttype=\"radio\"\r\n\t\t\tid={index !== undefined && index >= 0 ? `${id}-${index}` : id}\r\n\t\t\tname={name}\r\n\t\t\tvalue={value}\r\n\t\t\tdisabled={disabled}\r\n\t\t\tclassName={className}\r\n\t\t\tdefaultChecked={shouldBeChecked(value, defaultValue)}\r\n\t\t\tref={fieldRef}\r\n\t\t\tonChange={onChange}\r\n\t\t\taria-describedby={`form${id}__desc`}\r\n\t\t/>\r\n\r\n\t\t// aria-invalid={single ? !valid : undefined}\r\n\r\n\t);\r\n};\r\n\r\nexport default RadioButton;\r\n","/**\r\n * Select\r\n */\r\n\r\nimport React, { useRef, useState, useEffect } from 'react';\r\nimport { useFieldValidation } from '../hooks/useFieldValidation';\r\nimport { useFormValue } from '../context/Form.context';\r\nimport { SelectProps } from '../types';\r\n\r\nconst Select: React.FC<SelectProps> = (props) => {\r\n\tconst {\r\n\t\tid,\r\n\t\tname,\r\n\t\toptions,\r\n\t\tdefaultValue,\r\n\t\tdescription,\r\n\t\tonFieldChange,\r\n\t\tautoSubmit,\r\n\t\tshowError,\r\n\t\tvisibleFields,\r\n\t\tclassName,\r\n\t} = props;\r\n\r\n\tconst [{ invalidFields }, dispatch] = useFormValue();\r\n\tconst [value, setValue] = useState<any>(defaultValue || options[0] || '');\r\n\tconst [valid, setValid] = useState(false);\r\n\tconst [touched, setTouched] = useState(false);\r\n\tconst fieldRef = useRef(null);\r\n\r\n\tconst [validateField, showFieldError, hideFieldError] = useFieldValidation(\r\n\t\tfieldRef,\r\n\t\tprops\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst validatedField: any = validateField(value);\r\n\r\n\t\tif (validatedField.message) {\r\n\t\t\tsetValid(false);\r\n\t\t\tdispatch({ type: 'FIELD_INVALID', field: validatedField });\r\n\t\t} else {\r\n\t\t\tsetValid(true);\r\n\r\n\t\t\tif (invalidFields.includes(validatedField.id)) {\r\n\t\t\t\tdispatch({ type: 'FIELD_VALID', field: validatedField });\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (touched && !valid) {\r\n\t\t\tshowFieldError(validatedField);\r\n\t\t} else if (\r\n\t\t\t(showError && !valid && visibleFields && visibleFields.includes(id)) ||\r\n\t\t\t(showError && !valid && !visibleFields)\r\n\t\t) {\r\n\t\t\tsetTouched(true);\r\n\t\t\tshowFieldError(validatedField);\r\n\t\t} else {\r\n\t\t\thideFieldError();\r\n\t\t}\r\n\t\t// eslint-disable-next-line\r\n\t}, [touched, showError, value, invalidFields, visibleFields]);\r\n\r\n\tconst onChange = (e: React.FormEvent<HTMLElement>) => {\r\n\t\tconst target = e.target as HTMLFormElement;\r\n\t\tconst selectedOption = target.options[target.selectedIndex];\r\n\r\n\t\tsetValue(selectedOption.value || selectedOption.caption);\r\n\t\tonFieldChange({\r\n\t\t\tname,\r\n\t\t\tvalue: selectedOption.value || selectedOption.caption,\r\n\t\t\ttype: 'Select',\r\n\t\t\tautoSubmit,\r\n\t\t});\r\n\t};\r\n\r\n\treturn (\r\n\t\t<select\r\n\t\t\tid={id}\r\n\t\t\tname={name}\r\n\t\t\ttitle={description}\r\n\t\t\taria-invalid={!valid}\r\n\t\t\tdefaultValue={defaultValue}\r\n\t\t\tonChange={onChange}\r\n\t\t\tonBlur={() => setTouched(true)}\r\n\t\t\tref={fieldRef}\r\n\t\t\taria-describedby={`form${id}__desc`}\r\n\t\t\tclassName={className}\r\n\t\t>\r\n\t\t\t{options.map(({ value, caption }) => {\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<option value={value} key={value}>\r\n\t\t\t\t\t\t{caption}\r\n\t\t\t\t\t</option>\r\n\t\t\t\t);\r\n\t\t\t})}\r\n\t\t</select>\r\n\t);\r\n};\r\n\r\nexport default Select;\r\n","/**\r\n * Multiselect\r\n */\r\n\r\nimport React from 'react';\r\nimport { MultiselectProps, Option } from '../types';\r\nimport { Fieldset, Checkbox } from '../index';\r\n\r\nconst Multiselect: React.FC<MultiselectProps> = ({\r\n\tid,\r\n\tdescription,\r\n\trequired,\r\n\tlabel,\r\n\tisInvalid,\r\n\tvalidationMessage,\r\n\toptions,\r\n\tonFieldChange,\r\n}) => {\r\n\treturn (\r\n\t\t<Fieldset\r\n\t\t\tid={id}\r\n\t\t\tdescription={description}\r\n\t\t\trequired={required}\r\n\t\t\tlabel={label}\r\n\t\t\tisInvalid={isInvalid}\r\n\t\t\tvalidationMessage={validationMessage}\r\n\t\t>\r\n\t\t\t{options.map((opt: Option, index: number) => {\r\n\t\t\t\treturn (<Checkbox\r\n\t\t\t\t\tkey={`${id}-${index}`}\r\n\t\t\t\t\tid={id}\r\n\t\t\t\t\tindex={index}\r\n\t\t\t\t\tname={id}\r\n\t\t\t\t\tvalue={opt.value}\r\n\t\t\t\t\tlabel={opt.caption}\r\n\t\t\t\t\tonFieldChange={onFieldChange}\r\n\t\t\t\t/>\r\n\r\n\r\n\t\t\t\t\t// <label htmlFor={`${id}-${index}`} key={`${id}-${index}`}>\r\n\t\t\t\t\t// \t<Checkbox\r\n\t\t\t\t\t// \t\tid={id}\r\n\t\t\t\t\t// \t\tindex={index}\r\n\t\t\t\t\t// \t\tname={id}\r\n\t\t\t\t\t// \t\tvalue={opt.value}\r\n\t\t\t\t\t// \t\tlabel={opt.caption}\r\n\t\t\t\t\t// \t\tonFieldChange={onFieldChange}\r\n\t\t\t\t\t// \t/>\r\n\t\t\t\t\t// \t<span>{opt.caption}</span>\r\n\t\t\t\t\t// </label>\r\n\t\t\t\t);\r\n\t\t\t})}\r\n\t\t</Fieldset>\r\n\t);\r\n};\r\n\r\nexport default Multiselect;\r\n","/**\r\n * Button\r\n */\r\n\r\nimport React from 'react';\r\nimport { ButtonProps } from '../types';\r\n\r\nconst Button: React.FC<ButtonProps> = ({\r\n\ttype = 'button',\r\n\tonFieldChange,\r\n\tresetForm,\r\n\tshowError,\r\n\tvisibleFields,\r\n\tchildren,\r\n\t...propsToTransfer\r\n}) => {\r\n\tif (type === 'reset') {\r\n\t\treturn (\r\n\t\t\t<button type={type} {...propsToTransfer} onClick={resetForm}>\r\n\t\t\t\t{children}\r\n\t\t\t</button>\r\n\t\t);\r\n\t} else {\r\n\t\treturn (\r\n\t\t\t<button type={type} {...propsToTransfer}>\r\n\t\t\t\t{children}\r\n\t\t\t</button>\r\n\t\t);\r\n\t}\r\n};\r\n\r\nexport default Button;\r\n","import React from 'react';\r\nimport { LabelProps, ErrorSpanProps, DescriptionSpanProps } from './types';\r\nimport clsx from 'clsx';\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\n\r\nexport const Label: React.FC<LabelProps> = ({\r\n\thtmlFor,\r\n\trequired,\r\n\tchildren,\r\n}) => (\r\n\t<label className=\"block font-bold mb-1\" htmlFor={htmlFor}>\r\n\t\t{children}\r\n\t\t{required && <abbr title=\"Obligatoriskt\">*</abbr>}\r\n\t</label>\r\n);\r\n\r\nexport const ErrorSpan: React.FC<ErrorSpanProps> = ({\r\n\tfieldId,\r\n\tinvalid,\r\n\tchildren,\r\n\tclassName,\r\n\t...props\r\n}) => (\r\n\t<span\r\n\t\tclassName={clsx(className, `text-red-600`, 'warning-symbol')}\r\n\t\tid={`form${fieldId}__desc`}\r\n\t\taria-live=\"polite\"\r\n\t\thidden={!invalid}\r\n\t\t{...props}\r\n\t>\r\n\t\t{children}\r\n\t</span>\r\n);\r\n\r\nexport const DescriptionSpan: React.FC<DescriptionSpanProps> = ({\r\n\tclassName,\r\n\tchildren,\r\n\t...props\r\n}) => (\r\n\t<span className={clsx(className, 'block', 'text-description')} {...props}>\r\n\t\t{children}\r\n\t</span>\r\n);\r\n\r\ntype FieldContainerProps = {\r\n\tfield: any;\r\n\tid?: string;\r\n};\r\n\r\nexport const FieldContainer: React.FC<FieldContainerProps> = ({\r\n\tfield,\r\n\tid,\r\n\tchildren,\r\n}) => {\r\n\tconst preferedWidth = field.displayOptions?.WideScreenColspan\r\n\t\t? field.displayOptions.WideScreenColspan\r\n\t\t: '100%';\r\n\r\n\treturn (\r\n\t\t<FieldContainerStyle id={id} preferedWidth={preferedWidth}>\r\n\t\t\t{children}\r\n\t\t</FieldContainerStyle>\r\n\t);\r\n};\r\n\r\ntype FieldContainerStyleProp = {\r\n\tpreferedWidth: string;\r\n};\r\n\r\nconst FieldContainerStyle = styled.div<FieldContainerStyleProp>`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tmargin-bottom: ${props => props.theme.spacing.space3}rem;\r\n\tflex-basis: ${(p) => p.preferedWidth};\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tflex-basis: 100%;\r\n\t\tmargin-right: 0;\r\n\t}\r\n`;\r\n","/**\r\n * Fieldset\r\n */\r\n\r\nimport React, { useState, useRef, useEffect } from 'react';\r\nimport { useFieldValidation } from '../hooks/useFieldValidation';\r\nimport { useFormValue } from '../context/Form.context';\r\nimport { FieldsetProps } from '../types';\r\nimport { DescriptionSpan, ErrorSpan } from '../Labels';\r\n\r\nconst Fieldset: React.FC<FieldsetProps> = (props) => {\r\n\tconst {\r\n\t\tlabel,\r\n\t\tdescription,\r\n\t\tchildren,\r\n\t\tid,\r\n\t\trequired,\r\n\t\tvalidationMessage,\r\n\t\tisInvalid,\r\n\t\tshowError,\r\n\t\tvisibleFields,\r\n\t\tclassName,\r\n\t} = props;\r\n\r\n\tconst [{ invalidFields }, dispatch] = useFormValue();\r\n\tconst [valid, setValid] = useState(false);\r\n\tconst [touched, setTouched] = useState(false);\r\n\tconst fieldRef = useRef(null);\r\n\tconst [validateField, showFieldError, hideFieldError] = useFieldValidation(\r\n\t\tfieldRef,\r\n\t\tprops\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst validatedField = validateField('fieldset');\r\n\r\n\t\tif (validatedField.message) {\r\n\t\t\tsetValid(false);\r\n\t\t\tdispatch({ type: 'FIELD_INVALID', field: validatedField });\r\n\t\t} else {\r\n\t\t\tsetValid(true);\r\n\r\n\t\t\tif (invalidFields.includes(validatedField.id)) {\r\n\t\t\t\tdispatch({ type: 'FIELD_VALID', field: validatedField });\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst partOfVisibleFields =\r\n\t\t\tvisibleFields &&\r\n\t\t\tvisibleFields.filter((fieldName) => fieldName.includes(id));\r\n\r\n\t\tif (touched && !valid) {\r\n\t\t\tshowFieldError(validatedField);\r\n\t\t} else if (\r\n\t\t\t(showError &&\r\n\t\t\t\t!valid &&\r\n\t\t\t\tvisibleFields &&\r\n\t\t\t\tpartOfVisibleFields &&\r\n\t\t\t\tpartOfVisibleFields.length > 0) ||\r\n\t\t\t(showError && !valid && !visibleFields)\r\n\t\t) {\r\n\t\t\tsetTouched(true);\r\n\t\t\tshowFieldError(validatedField);\r\n\t\t} else {\r\n\t\t\thideFieldError();\r\n\t\t}\r\n\t}, [\r\n\t\tvalid,\r\n\t\tdispatch,\r\n\t\ttouched,\r\n\t\tshowError,\r\n\t\tsetValid,\r\n\t\tvalidateField,\r\n\t\tshowFieldError,\r\n\t\thideFieldError,\r\n\t\tinvalidFields,\r\n\t\tvisibleFields,\r\n\t\tid,\r\n\t]);\r\n\r\n\treturn (\r\n\t\t<fieldset\r\n\t\t\tclassName={className}\r\n\t\t\taria-invalid={!valid}\r\n\t\t\tid={id}\r\n\t\t\ttitle={description || undefined}\r\n\t\t\tref={fieldRef}\r\n\t\t\tonBlur={() => setTouched(true)}\r\n\t\t>\r\n\t\t\t<legend className=\"block font-bold mb-1\">\r\n\t\t\t\t{label}\r\n\t\t\t\t{required && <abbr title=\"Obligatoriskt\">*</abbr>}\r\n\t\t\t</legend>\r\n\r\n\t\t\t{description && <DescriptionSpan>{description}</DescriptionSpan>}\r\n\r\n\t\t\t<div>{children}</div>\r\n\r\n\t\t\t<ErrorSpan fieldId={id} invalid={isInvalid} tabIndex={-1}>\r\n\t\t\t\t{validationMessage || ''}\r\n\t\t\t</ErrorSpan>\r\n\t\t</fieldset>\r\n\t);\r\n};\r\n\r\nexport default Fieldset;\r\n","/**\r\n * Button\r\n */\r\n\r\nimport React from 'react';\r\nimport clsx from 'clsx';\r\nimport Link from 'components/Boilerplate/Link';\r\n\r\ninterface Props {\r\n\t/** Sets the size of the button */\r\n\tsize?: 'large' | 'medium' | 'small';\r\n\r\n\t/** Sets the variant of the button */\r\n\tvariant?: 'primary' | 'secondary';\r\n\r\n\t/** Sets the width of the button */\r\n\tdisplayWidth?: 'dynamic' | 'fixed' | 'full';\r\n\r\n\t/** Pass optional classnames for the html */\r\n\tclassName?: string;\r\n\r\n\t/** If component should render as a link or a button */\r\n\ttype?: 'link' | 'button';\r\n\r\n\t/** On click handler */\r\n\tonClick?: (e: any) => void;\r\n\r\n\t/** Should the button be disabled */\r\n\tdisabled?: boolean;\r\n\r\n\t[htmlAttributes: string]: any;\r\n}\r\n\r\n/** A reusable button component. */\r\nconst Button: React.FC<Props> = ({\r\n\tchildren,\r\n\tclassName = '',\r\n\tsize = 'medium',\r\n\tvariant = 'primary',\r\n\tdisabled = false,\r\n\ttype = 'button',\r\n\tdisplayWidth = 'dynamic',\r\n\tonClick,\r\n\t...htmlAttributes\r\n}) => {\r\n\tconst Tag = type === 'link' ? Link : 'button';\r\n\treturn (\r\n\t\t<Tag\r\n\t\t\tdisabled={disabled}\r\n\t\t\tclassName={clsx(\r\n\t\t\t\tclassName,\r\n\t\t\t\t'inline-block',\r\n\t\t\t\t'outline-none',\r\n\t\t\t\t'rounded-full',\r\n\t\t\t\t'font-alt',\r\n\t\t\t\tvariant === 'primary' && 'font-bold',\r\n\t\t\t\tdisabled && ['bg-gray-300', 'text-white'],\r\n\t\t\t\tvariant === 'primary' &&\r\n\t\t\t\t!disabled && ['bg-blue', 'text-white', 'hover:bg-blue-dark'],\r\n\t\t\t\tvariant === 'secondary' &&\r\n\t\t\t\t!disabled && [\r\n\t\t\t\t\t'bg-white',\r\n\t\t\t\t\t'border-2',\r\n\t\t\t\t\t'border-gray-300',\r\n\t\t\t\t\t'text-gray-600',\r\n\t\t\t\t\t'hover:bg-white-hover',\r\n\t\t\t\t],\r\n\t\t\t\tsize === 'small' && ['h-10', 'px-4', 'text-base', 'leading-5'],\r\n\t\t\t\tsize === 'medium' && ['h-14', 'px-6', 'text-lg'],\r\n\t\t\t\tsize === 'large' && ['h-16', 'px-8', 'text-lg'],\r\n\t\t\t\tdisplayWidth === 'full' && 'w-full',\r\n\t\t\t\tdisplayWidth === 'fixed' && 'w-full md:w-button'\r\n\t\t\t)}\r\n\t\t\tonClick={onClick}\r\n\t\t\t{...htmlAttributes}\r\n\t\t>\r\n\t\t\t{children}\r\n\t\t</Tag>\r\n\t);\r\n};\r\n\r\nexport default Button;\r\n","/**\r\n * FormButtons\r\n */\r\n\r\nimport React from 'react';\r\nimport { Button } from 'components/Form';\r\nimport StandardButton from 'components/Boilerplate/Button';\r\n\r\ninterface NextButtonProps {\r\n\tnextId?: string;\r\n\tisExpanded: boolean;\r\n\tid: string | number;\r\n}\r\n\r\ninterface PrevButtonProps {\r\n\tpreviousIndex?: number;\r\n\tpreviousId?: string;\r\n\tisExpanded: boolean;\r\n\tid: string | number;\r\n\tonPrevious: any;\r\n}\r\n\r\nconst NextButton: React.FC<NextButtonProps> = ({ nextId, isExpanded, id }) => {\r\n\treturn (\r\n\t\t<Button\r\n\t\t\ttype=\"submit\"\r\n\t\t\tname=\"submit\"\r\n\t\t\taria-controls={nextId}\r\n\t\t\taria-expanded={isExpanded}\r\n\t\t\tid={id}\r\n\t\t>\r\n\t\t\tNästa\r\n\t\t</Button>\r\n\t);\r\n};\r\n\r\nconst PreviousButton: React.FC<PrevButtonProps> = ({\r\n\tpreviousIndex,\r\n\tpreviousId,\r\n\tisExpanded,\r\n\tid,\r\n\tonPrevious,\r\n}) => (\r\n\t<StandardButton\r\n\t\ttype=\"button\"\r\n\t\tcolor=\"blue\"\r\n\t\tid={id}\r\n\t\taria-controls={previousId}\r\n\t\taria-expanded={isExpanded}\r\n\t\tonClick={() =>\r\n\t\t\tonPrevious({\r\n\t\t\t\tcurrentStep: previousIndex,\r\n\t\t\t\tinvalidFields: [],\r\n\t\t\t})\r\n\t\t}\r\n\t>\r\n\t\tTillbaka\r\n\t</StandardButton>\r\n);\r\n\r\nexport { PreviousButton, NextButton };\r\n","/**\r\n * FormStep\r\n */\r\n\r\nimport React from 'react';\r\nimport { NextButton, PreviousButton } from './FormButtons';\r\n\r\ntype Step = {\r\n\ttitle: string;\r\n\tdescription?: string;\r\n\tindex: number;\r\n};\r\n\r\ninterface FormStepProps {\r\n\t/** Current step data */\r\n\tstep: Step;\r\n\r\n\t/** Current step number */\r\n\tcurrentStep: number;\r\n\r\n\t/** Number of steps in Form */\r\n\tnrOfSteps: number;\r\n\r\n\t/** Form id */\r\n\tformId: string;\r\n\r\n\t/** Callback function when PreviousButton is clicked */\r\n\tonPrevious: any;\r\n}\r\n\r\nconst FormStep: React.FC<FormStepProps> = ({\r\n\tstep,\r\n\tformId,\r\n\tnrOfSteps,\r\n\tcurrentStep,\r\n\tchildren,\r\n\tonPrevious,\r\n}) => {\r\n\tconst { title, description, index } = step;\r\n\r\n\tconst stepId = `form-${formId}-step-${index}`;\r\n\tconst isFirstStep = index === 0;\r\n\tconst isLastStep = index + 2 === nrOfSteps;\r\n\r\n\tconst previousIndex = isFirstStep ? undefined : index - 1;\r\n\tconst previousId = isFirstStep\r\n\t\t? undefined\r\n\t\t: `form-${formId}-step-${previousIndex}`;\r\n\r\n\tconst nextIndex = isLastStep ? undefined : index + 1;\r\n\tconst nextId = isLastStep ? undefined : `form-${formId}-step-${nextIndex}`;\r\n\r\n\treturn (\r\n\t\t<section\r\n\t\t\tid={stepId}\r\n\t\t\tkey={stepId}\r\n\t\t\taria-hidden={index !== currentStep}\r\n\t\t\thidden={index !== currentStep}\r\n\t\t>\r\n\t\t\t{title && (\r\n\t\t\t\t<header>\r\n\t\t\t\t\t<h1 tabIndex={-1}>{title}</h1>\r\n\t\t\t\t\t{description && <p>{description}</p>}\r\n\t\t\t\t</header>\r\n\t\t\t)}\r\n\t\t\t{children}\r\n\r\n\t\t\t<div>\r\n\t\t\t\t{!isFirstStep && (\r\n\t\t\t\t\t<PreviousButton\r\n\t\t\t\t\t\tisExpanded={currentStep === previousIndex}\r\n\t\t\t\t\t\tpreviousIndex={previousIndex}\r\n\t\t\t\t\t\tpreviousId={previousId}\r\n\t\t\t\t\t\tid={`${formId}-step-${index}-prev-button`}\r\n\t\t\t\t\t\tonPrevious={onPrevious}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\t\t\t\t{!isLastStep && (\r\n\t\t\t\t\t<NextButton\r\n\t\t\t\t\t\tisExpanded={currentStep === nextIndex}\r\n\t\t\t\t\t\tnextId={nextId}\r\n\t\t\t\t\t\tid={`${formId}-step-${index}-next-button`}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t</section>\r\n\t);\r\n};\r\n\r\nexport default FormStep;\r\n","import React from 'react';\r\nimport {\r\n\tField,\r\n\tTextArea,\r\n\tCheckbox,\r\n\tRadioButton,\r\n\tSelect,\r\n\tMultiselect,\r\n\tButton,\r\n\tFieldset,\r\n} from '../index';\r\nimport FormStep from 'components/EpiForms/FormStep';\r\n\r\nconst isValidFormElement = (element: JSX.Element) => {\r\n\tswitch (element.type) {\r\n\t\tcase Checkbox:\r\n\t\tcase Field:\r\n\t\tcase TextArea:\r\n\t\tcase RadioButton:\r\n\t\tcase Button:\r\n\t\tcase Select:\r\n\t\tcase Multiselect:\r\n\t\tcase Fieldset:\r\n\t\tcase FormStep:\r\n\t\t\treturn true;\r\n\t\tdefault:\r\n\t\t\treturn false;\r\n\t}\r\n};\r\n\r\n/**\r\n * Custom hook for cloning pand rendering children with custom props in form\r\n */\r\nexport const useChildClones = (\r\n\tshowError: boolean,\r\n\tvisibleFields: string[] | boolean\r\n) => {\r\n\tconst formFieldNameCounter: any = {};\r\n\r\n\tconst renderChildren = (\r\n\t\tchildren: any,\r\n\t\tinitialValues: any,\r\n\t\tresetForm: any,\r\n\t\tonFieldChange: any\r\n\t) => {\r\n\t\tif (!children) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst renderedChildren = React.Children.map(children, (child) => {\r\n\t\t\tconst props: any = child && child.props ? { ...child.props } : {};\r\n\r\n\t\t\tif (!React.isValidElement(child)) {\r\n\t\t\t\treturn child;\r\n\t\t\t}\r\n\r\n\t\t\tif (isValidFormElement(child)) {\r\n\t\t\t\tconst { name } = props;\r\n\r\n\t\t\t\tprops.onFieldChange = onFieldChange;\r\n\t\t\t\tprops.resetForm = resetForm;\r\n\t\t\t\tprops.showError = showError;\r\n\t\t\t\tprops.visibleFields = visibleFields;\r\n\r\n\t\t\t\tif (initialValues[name]) {\r\n\t\t\t\t\tprops.defaultValue = initialValues[name];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!formFieldNameCounter[name]) {\r\n\t\t\t\t\tformFieldNameCounter[name] = 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tformFieldNameCounter[name] += 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (props && props.children) {\r\n\t\t\t\tprops.children = renderChildren(\r\n\t\t\t\t\tprops.children,\r\n\t\t\t\t\tinitialValues,\r\n\t\t\t\t\tresetForm,\r\n\t\t\t\t\tonFieldChange\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\treturn React.cloneElement(child, props);\r\n\t\t});\r\n\r\n\t\treturn renderedChildren.length === 1\r\n\t\t\t? renderedChildren[0]\r\n\t\t\t: renderedChildren;\r\n\t};\r\n\r\n\treturn [renderChildren, formFieldNameCounter];\r\n};\r\n","import styled from 'styled-components';\r\n\r\nexport const FormStyle = styled.form`\r\n\tbackground-color: ${props => props.theme.colors.white};\r\n\tpadding: ${props => props.theme.spacing.space4}rem;\r\n\tpadding-right: ${props => props.theme.spacing.space2}rem;\r\n`;\r\n","/**\r\n * Form\r\n */\r\n\r\nimport React, { useState, useRef } from 'react';\r\nimport { useFormValue } from './context/Form.context';\r\nimport { useChildClones } from './hooks/useChildClones';\r\nimport { FormProps } from './types';\r\nimport { FormStyle } from './Form.styles';\r\n\r\ninterface Field {\r\n\tname: string;\r\n\tvalue: string;\r\n\ttype?: string;\r\n\tautoSubmit?: boolean;\r\n\tchecked?: boolean;\r\n}\r\n\r\n// Generates a unique key (used by the reset-method).\r\nconst getUniqueKey = () => '_' + Math.random().toString(36).substr(2, 9);\r\n\r\nconst Form: React.FC<FormProps> = ({\r\n\tchildren,\r\n\tmethod = 'post',\r\n\taction = '',\r\n\tenctype = 'application/x-www-form-urlencoded',\r\n\tinitialValues,\r\n\tclassName,\r\n\tid,\r\n\tonChange,\r\n\tonSubmit,\r\n\tsendDataType,\r\n\tdefaultSubmit,\r\n\tmultiStep,\r\n\tcurrentStep,\r\n\tgetStepFields,\r\n}) => {\r\n\tconst [formKey, setFormKey] = useState(getUniqueKey());\r\n\tconst [showError, setShowError] = useState(false);\r\n\tconst [visibleFields, setVisibleFields] = useState(false);\r\n\tconst formRef = useRef<any>(null);\r\n\tlet [\r\n\t\t{ values, invalidFields, validationMessages },\r\n\t\tdispatch,\r\n\t] = useFormValue();\r\n\tconst [renderChildren, formFieldNameCounter] = useChildClones(\r\n\t\tshowError,\r\n\t\tvisibleFields\r\n\t);\r\n\r\n\tconst resetForm = () => setFormKey(getUniqueKey());\r\n\r\n\tconst onFieldChange = (field: Field) => {\r\n\t\tconst { name, value, type, autoSubmit, checked } = field;\r\n\r\n\t\tconst valueIsArray =\r\n\t\t\tvalues[name] && Array.isArray(values[name]) && checked !== undefined;\r\n\r\n\t\tlet newValue: string[] | string = value;\r\n\r\n\t\t// Handle checkboxes when they have array values\r\n\t\tif (type === 'Checkbox') {\r\n\t\t\tif (valueIsArray) {\r\n\t\t\t\tnewValue = checked\r\n\t\t\t\t\t? [...values[name], value]\r\n\t\t\t\t\t: values[name].filter((item: string) => item !== value);\r\n\t\t\t} else if (formFieldNameCounter[name] > 1 && checked !== undefined) {\r\n\t\t\t\tnewValue = [value];\r\n\t\t\t} else if (checked === false) {\r\n\t\t\t\tnewValue = '';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdispatch({ type: 'FORM_UPDATE', values: { ...values, [name]: newValue } });\r\n\r\n\t\tif (autoSubmit) {\r\n\t\t\tonSubmit();\r\n\t\t}\r\n\t\tif (onChange) {\r\n\t\t\tonChange({ name, value: newValue }, { ...values, [name]: newValue });\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleOnSubmit = (e: React.FormEvent<HTMLElement>) => {\r\n\t\tif (sendDataType === 'formdata' && typeof FormData === 'undefined') {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif (e && !defaultSubmit) {\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\tlet index = null;\r\n\t\tlet messages = { ...validationMessages };\r\n\t\tlet updatedInvalidFields = invalidFields;\r\n\r\n\t\tif (multiStep) {\r\n\t\t\tconst [formData, stepIndex, currentStepFields] = getStepFields(\r\n\t\t\t\tcurrentStep,\r\n\t\t\t\tid\r\n\t\t\t);\r\n\t\t\tsetVisibleFields(currentStepFields);\r\n\r\n\t\t\tvalues = formData;\r\n\t\t\tindex = stepIndex;\r\n\t\t\tupdatedInvalidFields = invalidFields.filter((fieldId: string) =>\r\n\t\t\t\tcurrentStepFields.some((field: string) => field.indexOf(fieldId) >= 0)\r\n\t\t\t);\r\n\r\n\t\t\tmessages = Object.keys(validationMessages)\r\n\t\t\t\t.filter((key) =>\r\n\t\t\t\t\tcurrentStepFields.some((field: string) => field.indexOf(key) >= 0)\r\n\t\t\t\t)\r\n\t\t\t\t.reduce((obj, key) => {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\t...obj,\r\n\t\t\t\t\t\t[key]: validationMessages[key],\r\n\t\t\t\t\t};\r\n\t\t\t\t}, {});\r\n\t\t} else if (sendDataType === 'formdata') {\r\n\t\t\tvalues = new FormData(formRef.current);\r\n\t\t}\r\n\r\n\t\tif (updatedInvalidFields.length > 0) {\r\n\t\t\tsetShowError(true);\r\n\t\t}\r\n\r\n\t\tif (onSubmit) {\r\n\t\t\tonSubmit(values, index, messages, updatedInvalidFields);\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<FormStyle\r\n\t\t\tkey={formKey}\r\n\t\t\tclassName={className}\r\n\t\t\tmethod={method}\r\n\t\t\taction={action}\r\n\t\t\tencType={enctype}\r\n\t\t\tonSubmit={handleOnSubmit}\r\n\t\t\tref={formRef}\r\n\t\t\tid={id}\r\n\t\t\tnoValidate\r\n\t\t>\r\n\t\t\t{renderChildren(children, initialValues, resetForm, onFieldChange)}\r\n\t\t</FormStyle>\r\n\t);\r\n};\r\n\r\nexport default Form;\r\n","import React from 'react';\r\nimport { FormProvider } from './context/Form.context';\r\nimport Form from './Form';\r\nimport { FormProps } from './types';\r\n\r\nconst FormComponent: React.FC<FormProps> = ({\r\n\tinitialValues,\r\n\tchildren,\r\n\t...props\r\n}) => {\r\n\tconst initialState = {\r\n\t\tvalues: initialValues || {},\r\n\t\tvalidationMessages: {},\r\n\t\tinvalidFields: [],\r\n\t};\r\n\r\n\treturn (\r\n\t\t<FormProvider initialState={initialState}>\r\n\t\t\t<Form initialValues={initialValues || {}} {...props}>\r\n\t\t\t\t{children}\r\n\t\t\t</Form>\r\n\t\t</FormProvider>\r\n\t);\r\n};\r\n\r\nexport default FormComponent;\r\n","import { Heading } from 'components/Typography/Typography';\r\nimport React, { forwardRef } from 'react';\r\n\r\ntype State = {\r\n\tsuccessMessage: string;\r\n\tinvalidFields: string[];\r\n\tserverValidationError: string | boolean;\r\n\tvalidationMessages: any;\r\n};\r\n\r\ninterface FormMessageProps {\r\n\t/** Message to display when successfully submitted */\r\n\tconfirmationMessage: string | null;\r\n\r\n\t/** Current form state */\r\n\tstate: State;\r\n\r\n\t/** FormMessage ref to set */\r\n\tref: any;\r\n\theadingLevel?: number;\r\n\r\n}\r\n\r\n\r\ninterface ErrorSummaryProps {\r\n\tvalidationMessages: any;\r\n\theadingLevel?: number;\r\n}\r\n\r\nconst ErrorSummary: React.FC<ErrorSummaryProps> = ({ validationMessages, headingLevel }) => (\r\n\t<>\r\n\r\n\t\t<Heading level={headingLevel} styleLevel={3}>Formuläret innehÃ¥ller {Object.keys(validationMessages).length} fel:</Heading>\r\n\r\n\t\t<div className=\"text-sm\">\r\n\t\t\t<ul className=\"mt-0 pb-0\">\r\n\t\t\t\t{validationMessages &&\r\n\t\t\t\t\tObject.keys(validationMessages).map((key, i) => (\r\n\t\t\t\t\t\t<li key={i} className=\"text-sm mb-0\">\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tdangerouslySetInnerHTML={{\r\n\t\t\t\t\t\t\t\t\t__html: validationMessages[key].label,\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<span>{validationMessages[key].message}</span>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t))}\r\n\t\t\t</ul>\r\n\t\t</div>\r\n\t</>\r\n);\r\n\r\nconst FormMessage: React.FC<FormMessageProps> = forwardRef(\r\n\t({ confirmationMessage, state, headingLevel }, ref: any) => {\r\n\t\tconst {\r\n\t\t\tsuccessMessage,\r\n\t\t\tinvalidFields,\r\n\t\t\tserverValidationError,\r\n\t\t\tvalidationMessages,\r\n\t\t} = state;\r\n\t\tconst hasMessageToShow = confirmationMessage || successMessage;\r\n\t\tconst messageType =\r\n\t\t\tserverValidationError || invalidFields.length > 0 ? 'error' : 'success';\r\n\r\n\t\treturn (\r\n\t\t\t<div\r\n\t\t\t\tclassName=\"my-6\"\r\n\t\t\t\thidden={messageType === 'success' && !hasMessageToShow}\r\n\t\t\t>\r\n\t\t\t\t<div\r\n\t\t\t\t\tclassName={`pt-3 px-3 border-solid border-2 ${messageType === 'success' ? 'border-green-400' : 'border-red-400'\r\n\t\t\t\t\t\t}`}\r\n\t\t\t\t\ttabIndex={-1}\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t>\r\n\t\t\t\t\t{(serverValidationError || invalidFields.length > 0) && (\r\n\t\t\t\t\t\t<ErrorSummary validationMessages={validationMessages} headingLevel={headingLevel} />\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{confirmationMessage && <p>{confirmationMessage}</p>}\r\n\t\t\t\t\t{successMessage && (\r\n\t\t\t\t\t\t<div dangerouslySetInnerHTML={{ __html: successMessage }} />\r\n\t\t\t\t\t)}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nexport default FormMessage;\r\n","/**\r\n * Runs through and checks a field's conditions/dependencies\r\n */\r\nexport const checkDependency = (\r\n\tname: string,\r\n\tdependencies: any[],\r\n\tvalues: any\r\n) => {\r\n\tconst dependency = dependencies.filter(\r\n\t\t(field) => field.fieldName === name\r\n\t)[0];\r\n\r\n\tconst conditions = checkFieldConditions(dependency, values);\r\n\tlet conditionsFulFilled = null;\r\n\r\n\tif (dependency.type === 'any') {\r\n\t\tconditionsFulFilled = checkIfAnyConditionIsTrue(conditions);\r\n\t} else if (dependency.type === 'all') {\r\n\t\tconditionsFulFilled = checkIfAllConditionsAreTrue(conditions);\r\n\t}\r\n\r\n\treturn conditionsFulFilled\r\n\t\t? performAction(dependency.action)\r\n\t\t: performAction(dependency.action === 'show' ? 'hide' : 'show');\r\n};\r\n\r\n/**\r\n * Loops through all conditions and checks if they're fulfilled.\r\n */\r\nconst checkFieldConditions = (dependency: any, values: any) => {\r\n\tlet conditions: boolean[] = [];\r\n\r\n\tdependency.conditions.forEach((field: any) => {\r\n\t\tconst currentFieldValue = values[field.fieldName];\r\n\t\tconst expectedValue = field.fieldValue;\r\n\r\n\t\tswitch (field.operator) {\r\n\t\t\tcase 'equals':\r\n\t\t\t\tconditions.push(currentFieldValue === expectedValue);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'notEquals':\r\n\t\t\t\tconditions.push(currentFieldValue !== expectedValue);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'contains':\r\n\t\t\t\t!currentFieldValue\r\n\t\t\t\t\t? conditions.push(false)\r\n\t\t\t\t\t: conditions.push(currentFieldValue.includes(expectedValue));\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'notContains':\r\n\t\t\t\t!currentFieldValue\r\n\t\t\t\t\t? conditions.push(true)\r\n\t\t\t\t\t: conditions.push(!currentFieldValue.includes(expectedValue));\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'notApplicable':\r\n\t\t\t\tconditions.push(false);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tconsole.log(`The operator '${field.operator}' is not yet implemented.`);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn conditions;\r\n};\r\n\r\nconst checkIfAnyConditionIsTrue = (conditions: boolean[]) => {\r\n\treturn conditions.includes(true);\r\n};\r\n\r\nconst checkIfAllConditionsAreTrue = (conditions: boolean[]) => {\r\n\treturn conditions.includes(false) ? false : true;\r\n};\r\n\r\n/**\r\n * Performs the given action and returns true/false based on if field should be rendered\r\n */\r\nconst performAction = (action: string) => {\r\n\tswitch (action) {\r\n\t\tcase 'show':\r\n\t\t\treturn true;\r\n\t\tcase 'hide':\r\n\t\t\treturn false;\r\n\t\tdefault:\r\n\t\t\tconsole.log(`The action ${action} is not yet implemented.`);\r\n\t\t\tbreak;\r\n\t}\r\n};\r\n","/**\r\n * Checks and returns outcome of field actions the given field is dependent on\r\n * @param {Array} fieldActions - Actions the field is depending on\r\n * @param {Object} values - The current values in form\r\n */\r\nexport const checkFieldActions = (fieldActions: any[], values: any) => {\r\n\tlet actions = {};\r\n\tif (fieldActions && fieldActions.length > 0) {\r\n\t\tlet allActionOutcomes: any = {\r\n\t\t\trequired: [],\r\n\t\t};\r\n\r\n\t\tfieldActions.forEach((action) => {\r\n\t\t\tconst fieldId = `__field_${action.field}`;\r\n\r\n\t\t\tswitch (action.thenAction) {\r\n\t\t\t\tcase 'Hem.Features.Forms.Validators.IsRequiredValidator':\r\n\t\t\t\t\tconst operatorResult = checkOperator(\r\n\t\t\t\t\t\taction.operator,\r\n\t\t\t\t\t\tvalues[fieldId],\r\n\t\t\t\t\t\taction.whenValue\r\n\t\t\t\t\t);\r\n\t\t\t\t\tallActionOutcomes.required.push(operatorResult);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tObject.keys(allActionOutcomes).forEach((attribute) => {\r\n\t\t\tif (allActionOutcomes[attribute].includes(false)) {\r\n\t\t\t\tactions = { ...actions, [attribute]: false };\r\n\t\t\t} else {\r\n\t\t\t\tactions = { ...actions, [attribute]: true };\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\treturn actions;\r\n};\r\n\r\n/**\r\n * Checks the outcome of an operator\r\n * @param {String} operator - equal\r\n * @param {String/Number} dependencyField - Value of the field the action is connected to\r\n * @param {String} compareValue - Value to compare against/expected value\r\n */\r\nconst checkOperator = (\r\n\toperator: string,\r\n\tdependencyField: string,\r\n\tcompareValue: string\r\n) => {\r\n\tswitch (operator) {\r\n\t\tcase 'equal':\r\n\t\t\treturn dependencyField === compareValue;\r\n\t\tdefault:\r\n\t\t\tbreak;\r\n\t}\r\n};\r\n","import React from 'react';\r\n\r\nimport { checkDependency } from 'components/EpiForms/EpiForms.dependencies';\r\nimport { checkFieldActions } from 'components/EpiForms/EpiForms.actions';\r\nimport {\r\n\tField,\r\n\tTextArea,\r\n\tSelect,\r\n\tMultiselect,\r\n\tRadioButton,\r\n\tCheckbox,\r\n\tFieldset,\r\n\tButton,\r\n\tLabel,\r\n\tErrorSpan,\r\n} from 'components/Form';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport {\r\n\tBlockType,\r\n\tOptions,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { DescriptionSpan, FieldContainer } from 'components/Form/Labels';\r\n\r\ninterface Field {\r\n\tid: string;\r\n\tlabel: string;\r\n\trequired?: boolean;\r\n\t[htmlAttributes: string]: any;\r\n}\r\n\r\ninterface RenderFunction {\r\n\t(field: Field): JSX.Element | null;\r\n}\r\n\r\nexport const useFormRenderer = (\r\n\tfields: any,\r\n\tstate: any,\r\n\tdependencies: any,\r\n\tdisableCustomHeadingLogic: boolean,\r\n\toptions?: Options\r\n) => {\r\n\tconst { invalidFields, validationMessages, isLoading, values } = state;\r\n\tlet fieldActionExists = false;\r\n\r\n\tconst renderFormElement = (fieldName: string) => {\r\n\t\tconst field = fields[fieldName];\r\n\t\tconst { name, text } = fields[fieldName];\r\n\t\tlet { type } = fields[fieldName];\r\n\r\n\t\tif (type === null) {\r\n\t\t\ttype = 'text';\r\n\t\t}\r\n\r\n\t\tconst renderAsFieldset =\r\n\t\t\t(type === 'radio' || type === 'checkbox') && field.options.length > 1;\r\n\t\tconst singleCheckboxOrRadio =\r\n\t\t\t(type === 'radio' || type === 'checkbox') && field.options.length === 1;\r\n\r\n\t\tconst fieldHasDependency =\r\n\t\t\tdependencies &&\r\n\t\t\tdependencies.filter((field: any) => field.fieldName === name).length > 0;\r\n\r\n\t\tif (fieldHasDependency) {\r\n\t\t\tconst fieldShouldBeRendered = checkDependency(name, dependencies, values);\r\n\r\n\t\t\tif (!fieldShouldBeRendered) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (renderAsFieldset) {\r\n\t\t\treturn (\r\n\t\t\t\t<FieldContainer field={field} key={name}>\r\n\t\t\t\t\t{renderFieldset(field)}\r\n\t\t\t\t</FieldContainer>\r\n\t\t\t);\r\n\t\t} else if (singleCheckboxOrRadio) {\r\n\t\t\treturn (\r\n\t\t\t\t<FieldContainer field={field} key={name}>\r\n\t\t\t\t\t{renderSingleInput(field)}\r\n\t\t\t\t\t{renderFieldError(field.name)}\r\n\t\t\t\t</FieldContainer>\r\n\t\t\t);\r\n\t\t} else if (type === 'paragraphtext') {\r\n\t\t\treturn (\r\n\t\t\t\t<FieldContainer field={field}>\r\n\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\tkey={name}\r\n\t\t\t\t\t\tpreviousBlockType={BlockType.Unknown}\r\n\t\t\t\t\t\tfragments={field.paragraphText.fragments}\r\n\t\t\t\t\t\tinsideCell={options?.insideCell}\r\n\t\t\t\t\t\tinsideGrid={options?.insideGrid}\r\n\t\t\t\t\t\tinsideInnerGrid={options?.insideInnerGrid}\r\n\t\t\t\t\t\theadingLevel={\r\n\t\t\t\t\t\t\toptions?.headingLevel ? options?.headingLevel + 1 : undefined\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</FieldContainer>\r\n\t\t\t);\r\n\t\t} else if (type === 'ParagraphText') {\r\n\t\t\treturn (\r\n\t\t\t\t<FieldContainer field={field}>\r\n\t\t\t\t\t<div key={name} dangerouslySetInnerHTML={{ __html: text }} />\r\n\t\t\t\t</FieldContainer>\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\treturn (\r\n\t\t\t\t<FieldContainer field={field} key={name} id={`form${name}`}>\r\n\t\t\t\t\t{field.type !== 'multiselect' && renderLabel(field)}\r\n\t\t\t\t\t{field.type !== 'multiselect' &&\r\n\t\t\t\t\t\trenderDescriptionField(field.description)}\r\n\t\t\t\t\t{renderField(field)}\r\n\t\t\t\t\t{renderFieldError(field.name)}\r\n\t\t\t\t</FieldContainer>\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tconst renderLabel: RenderFunction = ({ name, label, required, type }) => {\r\n\t\tif (!label || type === 'submit' || type === 'reset') {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<Label htmlFor={name} required={required}>\r\n\t\t\t\t{label}\r\n\t\t\t</Label>\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderDescriptionField = (description: string) => {\r\n\t\tif (description) {\r\n\t\t\treturn <DescriptionSpan>{description}</DescriptionSpan>;\r\n\t\t}\r\n\t};\r\n\r\n\tconst renderFieldError = (id: string) => {\r\n\t\tconst validationMessage =\r\n\t\t\tvalidationMessages[id] && validationMessages[id].message;\r\n\t\tconst isInvalid = invalidFields.indexOf(id) !== -1;\r\n\r\n\t\treturn (\r\n\t\t\t<ErrorSpan fieldId={id} invalid={isInvalid}>\r\n\t\t\t\t{validationMessage}\r\n\t\t\t</ErrorSpan>\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderField: RenderFunction = ({\r\n\t\tname,\r\n\t\ttype,\r\n\t\trequired,\r\n\t\tpattern,\r\n\t\tplaceHolder,\r\n\t\tdisabled,\r\n\t\tdescription,\r\n\t\tmin,\r\n\t\tmax,\r\n\t\tlabel,\r\n\t\tfailedMessage,\r\n\t\tpatternMessage,\r\n\t\toptions,\r\n\t\tfieldActions,\r\n\t\tallowMultiple,\r\n\t}) => {\r\n\t\tlet buttonText = label || type;\r\n\r\n\t\tswitch (type) {\r\n\t\t\tcase 'submit':\r\n\t\t\tcase 'reset':\r\n\t\t\t\tif (type === 'submit' && isLoading) {\r\n\t\t\t\t\tbuttonText = 'Skickar...';\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<Button type={type} name={name} disabled={isLoading} id={name}>\r\n\t\t\t\t\t\t{buttonText}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t);\r\n\t\t\tcase 'textarea':\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<TextArea\r\n\t\t\t\t\t\tid={name}\r\n\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\tdescription={description}\r\n\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\tplaceholder={placeHolder}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\tvalidationMessage={failedMessage}\r\n\t\t\t\t\t/>\r\n\t\t\t\t);\r\n\t\t\tcase 'select':\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<Select\r\n\t\t\t\t\t\tid={name}\r\n\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\tdescription={description}\r\n\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\toptions={options}\r\n\t\t\t\t\t\tvalidationMessage={failedMessage}\r\n\t\t\t\t\t/>\r\n\t\t\t\t);\r\n\t\t\tcase 'multiselect':\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<Multiselect\r\n\t\t\t\t\t\tid={name}\r\n\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\tdescription={description}\r\n\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\toptions={options}\r\n\t\t\t\t\t\tvalidationMessage={failedMessage}\r\n\t\t\t\t\t\tisInvalid={invalidFields.indexOf(name) !== -1}\r\n\t\t\t\t\t/>\r\n\t\t\t\t);\r\n\t\t\tcase 'text':\r\n\t\t\tdefault:\r\n\t\t\t\tlet actions: any = {};\r\n\r\n\t\t\t\tif (fieldActions) {\r\n\t\t\t\t\tactions = checkFieldActions(fieldActions, values);\r\n\t\t\t\t\tfieldActionExists = true;\r\n\t\t\t\t}\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<Field\r\n\t\t\t\t\t\ttype={type}\r\n\t\t\t\t\t\tid={name}\r\n\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\tpattern={pattern}\r\n\t\t\t\t\t\trequired={(actions && actions.required) || required}\r\n\t\t\t\t\t\tplaceholder={placeHolder}\r\n\t\t\t\t\t\tdescription={description}\r\n\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\tmin={min}\r\n\t\t\t\t\t\tmax={max}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\tvalidationMessage={failedMessage}\r\n\t\t\t\t\t\tpatternMessage={patternMessage}\r\n\t\t\t\t\t\tmultiple={allowMultiple}\r\n\t\t\t\t\t/>\r\n\t\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tconst renderFieldset: RenderFunction = ({\r\n\t\tname,\r\n\t\ttype,\r\n\t\toptions,\r\n\t\tlabel,\r\n\t\trequired,\r\n\t\tdescription,\r\n\t\tvalidationMessage,\r\n\t}) => {\r\n\t\tconst isInvalid = invalidFields.indexOf(name) !== -1;\r\n\r\n\t\tconst FieldComponent = type === 'radio' ? RadioButton : Checkbox;\r\n\r\n\t\treturn (\r\n\t\t\t<Fieldset\r\n\t\t\t\tid={name}\r\n\t\t\t\tdescription={description}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tlabel={label}\r\n\t\t\t\tisInvalid={isInvalid}\r\n\t\t\t\tvalidationMessage={validationMessage}\r\n\t\t\t>\r\n\t\t\t\t{options.map((opt: any, index: number) => {\r\n\t\t\t\t\tconst element = (\r\n\t\t\t\t\t\t<FieldComponent\r\n\t\t\t\t\t\t\tid={name}\r\n\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\tindex={index}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tvalue={opt.value}\r\n\t\t\t\t\t\t\tlabel={opt.caption}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tif (type === 'radio') {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<div key={`${name}-${index}`} className=\"radio\">\r\n\t\t\t\t\t\t\t\t{element}\r\n\t\t\t\t\t\t\t\t<label htmlFor={`${name}-${index}`}>{opt.caption}</label>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t// return (\r\n\t\t\t\t\t\t// \t<label htmlFor={`${name}-${index}`} key={`${name}-${index}`}>\r\n\t\t\t\t\t\t// \t\t{element}\r\n\t\t\t\t\t\t// \t\t<span>{opt.caption}</span>\r\n\t\t\t\t\t\t// \t</label>\r\n\t\t\t\t\t\t// );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn element;\r\n\t\t\t\t})}\r\n\t\t\t</Fieldset>\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderSingleInput: RenderFunction = ({\r\n\t\tname,\r\n\t\ttype,\r\n\t\toptions,\r\n\t\trequired,\r\n\t\tdisabled,\r\n\t\tdescription,\r\n\t\tvalidationMessage,\r\n\t}) => {\r\n\t\tconst fieldLabel = options[0].caption;\r\n\t\tconst fieldValue = options[0].value;\r\n\r\n\t\tconst FieldComponent = type === 'radio' ? RadioButton : Checkbox;\r\n\r\n\t\tconst element = (\r\n\t\t\t<FieldComponent\r\n\t\t\t\tid={name}\r\n\t\t\t\tname={name}\r\n\t\t\t\tvalue={fieldValue}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\tsingle={true}\r\n\t\t\t\tlabel={fieldLabel}\r\n\t\t\t\tvalidationMessage={validationMessage}\r\n\t\t\t/>\r\n\t\t);\r\n\t\tif (type === 'radio') {\r\n\t\t\treturn (\r\n\t\t\t\t<label htmlFor={name} title={description}>\r\n\t\t\t\t\t{element}\r\n\t\t\t\t\t<span>\r\n\t\t\t\t\t\t{fieldLabel}\r\n\t\t\t\t\t\t{required && <abbr title=\"Obligatoriskt\">*</abbr>}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</label>\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn element;\r\n\t};\r\n\r\n\treturn [renderFormElement, fieldActionExists];\r\n};\r\n","import { useEffect, useRef } from 'react';\r\n\r\nexport const usePrevious = (value: any): any => {\r\n\tconst ref = useRef();\r\n\tuseEffect(() => {\r\n\t\tref.current = value;\r\n\t});\r\n\treturn ref.current;\r\n};\r\n","/**\r\n * EpiForms\r\n */\r\n\r\nimport React, { useReducer, useRef, useEffect, useContext } from 'react';\r\n\r\n//import { useForceUpdate, useFormRenderer, usePrevious } from 'hooks';\r\nimport { getInitialFormValues, getStepFields } from './EpiForms.helpers';\r\nimport { submitForm } from './EpiForms.submit';\r\n\r\nimport { Form } from 'components/Form';\r\nimport FormStep from './FormStep';\r\nimport FormMessage from './FormMessage';\r\nimport { useForceUpdate } from 'hooks/useForceUpdate';\r\nimport { useFormRenderer } from 'hooks/useFormRenderer';\r\nimport { usePrevious } from 'hooks/usePrevious';\r\nimport Typography, { Heading } from 'components/Typography/Typography';\r\nimport { getThemeHeadingColor, PuffTheme } from 'pages/sharedModelTypes';\r\nimport { Options } from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { ThemeContext } from 'styled-components';\r\n\r\nexport interface EpiFormsProps {\r\n\t/** Form id */\r\n\tid: string;\r\n\r\n\t/** Fields within the Form */\r\n\tfields: any;\r\n\r\n\t/** Form steps */\r\n\tsteps: any[];\r\n\r\n\t/** Message to show when successfully submitted */\r\n\tconfirmationMessage: string | null;\r\n\r\n\t/** Form method */\r\n\tmethod?: string;\r\n\r\n\t/** Form action */\r\n\taction?: string;\r\n\r\n\t/** Form encoding type */\r\n\tencodingType?: string;\r\n\r\n\t/** Form dependencies */\r\n\tdependencies?: any[];\r\n\r\n\t/** Form title h(n) */\r\n\ttitle?: string | null;\r\n\r\n\t/** Form title heading level h(n)*/\r\n\theadingLevel?: number;\r\n\r\n\t/** Form description (p) */\r\n\tdescription?: string | null;\r\n\r\n\t/** Url to redirect to when successfully submitted */\r\n\tredirectUrl?: string;\r\n\r\n\t/** Epi properties for on-page editing */\r\n\t_properties?: any;\r\n\r\n\toptions?: Options;\r\n\r\n\t[htmlAttributes: string]: any;\r\n}\r\n\r\nconst initialState = {\r\n\tisLoading: false,\r\n\tinvalidFields: [],\r\n\tvalidationMessages: {},\r\n\tsuccessMessage: '',\r\n\tcurrentStep: 0,\r\n\tvalues: {},\r\n\tsubmissionId: '',\r\n\tserverValidationError: false,\r\n};\r\n\r\nconst reducer = (state: any, action: any) => {\r\n\tswitch (action.type) {\r\n\t\tcase 'UPDATE_STATE':\r\n\t\t\treturn { ...state, ...action.payload };\r\n\t\tdefault:\r\n\t\t\treturn state;\r\n\t}\r\n};\r\n\r\n/** Rendering of an EpiForms block. */\r\nconst EpiForms: React.FC<EpiFormsProps> = ({\r\n\tfields,\r\n\tmethod = 'GET',\r\n\taction,\r\n\tencodingType = 'multipart/form-data',\r\n\tsteps,\r\n\tdependencies,\r\n\tid,\r\n\ttitle,\r\n\tdescription,\r\n\tconfirmationMessage,\r\n\tredirectUrl,\r\n\toptions,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\tconst { currentStep, successMessage, submissionId, invalidFields } = state;\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst forceUpdate = useForceUpdate();\r\n\tconst [renderFormElement, fieldActionExists] = useFormRenderer(\r\n\t\tfields,\r\n\t\tstate,\r\n\t\tdependencies,\r\n\t\tdisableCustomHeadingLogic,\r\n\t\toptions\r\n\t);\r\n\r\n\tconst showForm = !confirmationMessage && !successMessage;\r\n\tconst formValues = getInitialFormValues(fields, currentStep);\r\n\r\n\tconst messageHolderRef = useRef<any>(null);\r\n\tconst prevInvalidFields = usePrevious(invalidFields);\r\n\tlet prevStep = usePrevious(currentStep);\r\n\r\n\tif (prevStep === undefined) {\r\n\t\tprevStep = 0;\r\n\t}\r\n\r\n\t// Focus messageHolderRef if success or error\r\n\tuseEffect(() => {\r\n\t\tconst successfullySubmitted =\r\n\t\t\tinvalidFields.length > 0 || confirmationMessage || successMessage;\r\n\t\tconst formMessageElement = messageHolderRef && messageHolderRef.current;\r\n\r\n\t\tif (\r\n\t\t\t(successfullySubmitted && formMessageElement) ||\r\n\t\t\tprevInvalidFields !== invalidFields\r\n\t\t) {\r\n\t\t\tmessageHolderRef.current.focus();\r\n\t\t}\r\n\t\t// eslint-disable-next-line\r\n\t}, [invalidFields, messageHolderRef, successMessage, confirmationMessage]);\r\n\r\n\t// Jump back to top if step changes\r\n\tuseEffect(() => {\r\n\t\tif (window && prevStep !== currentStep && steps.length > 2) {\r\n\t\t\twindow.location.href = `#${id}`;\r\n\t\t}\r\n\t\t// eslint-disable-next-line\r\n\t}, [currentStep]);\r\n\r\n\t// If we have dependencies (conditional fields), we re-render.\r\n\tconst onChange = (field: any, values: any) => {\r\n\t\tif ((dependencies && dependencies.length > 0) || fieldActionExists) {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: 'UPDATE_STATE',\r\n\t\t\t\tpayload: { values },\r\n\t\t\t});\r\n\r\n\t\t\tif (dependencies && dependencies.length > 0) {\r\n\t\t\t\tforceUpdate();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tconst onSubmit = (\r\n\t\tvalues: any,\r\n\t\tstepIndex: number,\r\n\t\tcurrentValidationMessages: any,\r\n\t\tcurrentInvalidFields: string[]\r\n\t) => {\r\n\t\tif (currentInvalidFields && currentInvalidFields.length > 0) {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: 'UPDATE_STATE',\r\n\t\t\t\tpayload: {\r\n\t\t\t\t\tinvalidFields: currentInvalidFields,\r\n\t\t\t\t\tvalidationMessages: currentValidationMessages,\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsubmitForm(values, stepIndex, dispatch, steps, {\r\n\t\t\tcurrentStep,\r\n\t\t\tsubmissionId,\r\n\t\t\taction,\r\n\t\t\tmethod,\r\n\t\t\tredirectUrl,\r\n\t\t});\r\n\t};\r\n\r\n\treturn (\r\n\t\t<Form\r\n\t\t\tinitialValues={formValues}\r\n\t\t\tsendDataType=\"formdata\"\r\n\t\t\tmethod={method}\r\n\t\t\taction={action}\r\n\t\t\tenctype={encodingType}\r\n\t\t\tonSubmit={onSubmit}\r\n\t\t\tonChange={onChange}\r\n\t\t\tmultiStep={steps.length > 2}\r\n\t\t\tcurrentStep={currentStep}\r\n\t\t\tgetStepFields={getStepFields}\r\n\t\t\tid={id}\r\n\t\t>\r\n\t\t\t<header>\r\n\t\t\t\t{title && (\r\n\t\t\t\t\t<Heading\r\n\t\t\t\t\t\tlevel={options?.headingLevel}\r\n\t\t\t\t\t\tstyleLevel={2}\r\n\t\t\t\t\t\tcolor={getThemeHeadingColor(themeContext, PuffTheme.NeutralWhite)}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{title}\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t)}\r\n\t\t\t\t{description && <Typography as=\"p\">{description}</Typography>}\r\n\r\n\t\t\t\t<FormMessage\r\n\t\t\t\t\tref={messageHolderRef}\r\n\t\t\t\t\theadingLevel={\r\n\t\t\t\t\t\toptions?.headingLevel ? options?.headingLevel + 1 : undefined\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconfirmationMessage={confirmationMessage}\r\n\t\t\t\t\tstate={state}\r\n\t\t\t\t/>\r\n\t\t\t</header>\r\n\r\n\t\t\t{showForm && (\r\n\t\t\t\t<div\r\n\t\t\t\t\tstyle={{ display: 'flex', flexWrap: 'wrap' }}\r\n\t\t\t\t\t{..._properties?.fields}\r\n\t\t\t\t>\r\n\t\t\t\t\t{steps.map((step: any, i: number) =>\r\n\t\t\t\t\t\tstep.index === -1 ? (\r\n\t\t\t\t\t\t\t<div id={`form-${id}-hiddenfields`} key=\"-1\" hidden>\r\n\t\t\t\t\t\t\t\t{step.fields.map(renderFormElement)}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t) : steps.length === 2 ? (\r\n\t\t\t\t\t\t\tstep.fields.map(renderFormElement)\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<FormStep\r\n\t\t\t\t\t\t\t\tkey={i}\r\n\t\t\t\t\t\t\t\tstep={step}\r\n\t\t\t\t\t\t\t\tnrOfSteps={steps.length}\r\n\t\t\t\t\t\t\t\tformId={id}\r\n\t\t\t\t\t\t\t\tcurrentStep={currentStep}\r\n\t\t\t\t\t\t\t\tonPrevious={(state: any) => {\r\n\t\t\t\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\t\t\t\ttype: 'UPDATE_STATE',\r\n\t\t\t\t\t\t\t\t\t\tpayload: state,\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{step.fields.map(renderFormElement)}\r\n\t\t\t\t\t\t\t</FormStep>\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t)}\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t</Form>\r\n\t);\r\n};\r\n\r\nexport default EpiForms;\r\n","import EpiForms from './EpiForms';\r\n\r\nexport default EpiForms;\r\n","import { useState } from 'react';\r\n\r\nexport const useForceUpdate = () => {\r\n\t// eslint-disable-next-line\r\n\tconst [value, setValue] = useState(0);\r\n\treturn () => setValue((value) => ++value);\r\n};\r\n","import styled from 'styled-components';\r\n\r\nexport const PageOverview = styled.aside`\r\n\tbackground-color: ${props => props.theme.colors.white};\r\n\tpadding: ${props => props.theme.spacing.space4}rem ${props => props.theme.spacing.space3}rem;\r\n\r\n\tul {\r\n\t\tlist-style-type: none;\r\n\t\tpadding: 0px;\r\n\t\tmargin: 0px;\r\n\t\t> :not(:last-child) {\r\n\t\t\tmargin-bottom: ${props => props.theme.spacing.space2}rem;\r\n\t\t}\r\n\t}\r\n`;\r\n\r\n\r\nexport const ElementContainer = styled.div`\r\n\tscroll-margin-top: 80px;\r\n`;\r\n","import { ImageFragmentModel } from 'types/fragments';\r\n\r\nexport interface SearchListingModel {\r\n\tquery: string;\r\n\tpage: number;\r\n\tsize: number;\r\n\tnumberOfHits: number;\r\n\ttotalPages: number;\r\n\ttotalHits: number;\r\n\tresults: Result[];\r\n\tfacetModels: FacetModel[];\r\n\tsortModel: SortModel;\r\n}\r\n\r\nexport interface FacetModel {\r\n\tname: string;\r\n\tkey: string;\r\n\tfacetType: FacetTypeOf;\r\n\tfacetOptions: FacetOption[];\r\n}\r\n\r\nexport enum FacetTypeOf {\r\n\tsingleSelect = 'singleSelect',\r\n\tmultiSelect = 'multiSelect',\r\n\tdateSelect = 'dateSelect',\r\n\tbool = 'bool',\r\n}\r\n\r\nexport interface FacetOption {\r\n\tname: string;\r\n\tkey: string;\r\n\thits: number;\r\n\thelpText?: string;\r\n\tselected: boolean;\r\n\ttimeInterval?: TimeInterval;\r\n}\r\n\r\nexport interface TimeInterval {\r\n\tfromLabel: string;\r\n\ttoLabel: string;\r\n\tbtnResetLabel: string;\r\n\tbtnAddLabel: string;\r\n\tselectYearLabel: string;\r\n\tselectableYears: SelectableYear[];\r\n}\r\n\r\nexport interface SelectableYear {\r\n\tyear: number;\r\n\tselected: boolean;\r\n\thits: number;\r\n}\r\n\r\nexport interface Result {\r\n\tdocumentId: string;\r\n\tscore: number;\r\n\turl: string;\r\n\theading: string;\r\n\texcerpt: string;\r\n\tdecal: string | null;\r\n\tnfsText: string | null;\r\n\timage?: ImageFragmentModel;\r\n}\r\n\r\nexport interface SortModel {\r\n\tname: string;\r\n\tkey: string;\r\n\tsortOptionModels: SortOptionModel[];\r\n}\r\n\r\nexport interface SortOptionModel {\r\n\tname: string;\r\n\tkey: string;\r\n\tselected: boolean;\r\n}\r\n","import React from 'react';\r\nimport { TableFragmentModel } from 'types/fragments';\r\nimport { Options } from '../EpiFragments';\r\nimport { ScrollableTableWrapper } from 'components/Typography';\r\n\r\nexport const GetTableFragmentElement = (\r\n\ttableData: TableFragmentModel,\r\n\toptions?: Options\r\n) => {\r\n\treturn (\r\n\t\t<ScrollableTableWrapper\r\n\t\t\tdangerouslySetInnerHTML={{ __html: tableData.raw }}\r\n\t\t/>\r\n\t);\r\n};\r\n","import YouTube from 'components/YouTube';\r\nimport React from 'react';\r\nimport { YouTubeFragmentModel } from 'types/fragments';\r\nimport { Options } from '../EpiFragments';\r\n\r\nexport const GetYouTubeModelElement = (\r\n\tyoutubeData: YouTubeFragmentModel,\r\n\toptions?: Options\r\n) => {\r\n\treturn (\r\n\t\t<YouTube\r\n\t\t\ttitle={youtubeData.title}\r\n\t\t\tvideoId={youtubeData.videoID}\r\n\t\t\tallowfullscreen={youtubeData.allowFullScreen}\r\n\t\t/>\r\n\t);\r\n};\r\n","import React from 'react';\r\nimport { PuffWithImageModel } from 'types/blocks';\r\nimport { PuffWithImage } from 'components/Boilerplate/Puff';\r\nimport { Options } from '../EpiFragments';\r\n\r\nexport const GetPuffWithLargeImageElement = (\r\n\tpuff: PuffWithImageModel,\r\n\toptions?: Options\r\n) => {\r\n\treturn <PuffWithImage {...puff} />;\r\n};\r\n","import ResponsiveIframe from 'components/Boilerplate/ResponsiveIframe';\r\nimport React from 'react';\r\nimport { VideoFragmentModel } from 'types/fragments';\r\nimport { Options } from '../EpiFragments';\r\n\r\nexport const GetVideoElement = (\r\n\tvideoData: VideoFragmentModel,\r\n\toptions?: Options\r\n) => {\r\n\treturn (\r\n\t\t<ResponsiveIframe aria-label=\"Embedded video\" src={videoData.embedUrl} />\r\n\t);\r\n};\r\n","import WidgetNumericBlock from 'components/Banners/WidgetNumericBlock';\r\nimport React from 'react';\r\nimport { WidgetNumericBlockModel } from 'types/fragments';\r\n\r\nexport const GetWidgetNumericBlockElement = (\r\n\tbannerData: WidgetNumericBlockModel\r\n) => {\r\n\treturn <WidgetNumericBlock {...bannerData}></WidgetNumericBlock>;\r\n};\r\n","import HeroBanner from 'components/Banners/HeroBanner';\r\nimport { HeroBannerProps } from 'components/Banners/HeroBanner/HeroBanner';\r\nimport React from 'react';\r\nimport { HeroBannerModel } from 'types/fragments';\r\nimport { Options } from '../EpiFragments';\r\n\r\nexport const GetHeroBannerModelElement = (bannerData: HeroBannerModel, options: Options) => {\r\n\r\n\r\n\tconst heroBannerProps = { ...bannerData, headingLevel: options.headingLevel } as HeroBannerProps;\r\n\r\n\r\n\treturn <HeroBanner {...heroBannerProps}></HeroBanner>;\r\n};\r\n","import LogoBanner from 'components/Banners/LogoBanner';\r\nimport React from 'react';\r\nimport { LogoBannerModel } from 'types/fragments';\r\nimport { Options } from '../EpiFragments';\r\n\r\nexport const GetLogoBannerModelElement = (\r\n\tmodelData: LogoBannerModel,\r\n\toptions?: Options\r\n) => {\r\n\r\n\treturn <LogoBanner key={options?.index}\r\n\t\tlogoItems={modelData.logoItems}\r\n\t\tlink={modelData.link}\r\n\t\tthemeName={modelData.theme}\r\n\t></LogoBanner>;\r\n};\r\n","import React from 'react';\r\nimport { LinkExtendedType, LinkType, PuffTheme } from 'pages/sharedModelTypes';\r\nimport { BannerFragmentModel } from 'types/fragments';\r\nimport BannerTextLinks from 'components/Banners/BannerTextLinks';\r\nimport BannerPuffText from 'components/Banners/BannerPuffText';\r\nimport { Options } from '../EpiFragments';\r\n\r\nexport const GetBannerModelElement = (\r\n\tbannerData: BannerFragmentModel,\r\n\toptions: Options\r\n) => {\r\n\tif (bannerData.linkList && bannerData.linkList.length > 0) {\r\n\t\tconst links = bannerData.linkList.map((item: LinkExtendedType) => {\r\n\t\t\treturn {\r\n\t\t\t\theading: item.text,\r\n\t\t\t\turl: item.url,\r\n\t\t\t\tisFile: item.isFile,\r\n\t\t\t\ttarget: item.target,\r\n\t\t\t} as LinkType;\r\n\t\t});\r\n\r\n\t\treturn (\r\n\t\t\t<BannerTextLinks\r\n\t\t\t\tthemeName={bannerData.theme as PuffTheme}\r\n\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\theading={bannerData.heading}\r\n\t\t\t\tpreamble={bannerData.preamble}\r\n\t\t\t\tlink={bannerData.link}\r\n\t\t\t\tlinks={links}\r\n\t\t\t></BannerTextLinks>\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t<BannerPuffText\r\n\t\t\tthemeName={bannerData.theme as PuffTheme}\r\n\t\t\theadingLevel={options.headingLevel}\r\n\t\t\theading={bannerData.heading}\r\n\t\t\tpreamble={bannerData.preamble}\r\n\t\t\tlink={bannerData.link}\r\n\t\t></BannerPuffText>\r\n\t);\r\n};\r\n","import { Cell, Grid } from 'components/Boilerplate/Grid';\r\nimport FaqPuff from 'components/FaqPuff';\r\nimport React from 'react';\r\nimport { FaqFragmentModel } from 'types/fragments';\r\nimport { Options } from '../EpiFragments';\r\n\r\nexport const GetFaqModelElement = (\r\n\tfaqData: FaqFragmentModel,\r\n\toptions?: Options\r\n) => {\r\n\tconst content = (\r\n\t\t<Grid key={options?.index} inner={true}>\r\n\t\t\t{faqData.items.map((item, index) => {\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<Cell key={index} span={6}>\r\n\t\t\t\t\t\t<FaqPuff\r\n\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\tquestion={item.question}\r\n\t\t\t\t\t\t\tanswerRaw={item.answer}\r\n\t\t\t\t\t\t></FaqPuff>\r\n\t\t\t\t\t</Cell>\r\n\t\t\t\t);\r\n\t\t\t})}\r\n\t\t</Grid>\r\n\t);\r\n\r\n\tif (options?.insideGrid) {\r\n\t\treturn <>{content}</>;\r\n\t}\r\n\r\n\treturn (\r\n\t\t<Grid key={options?.index} paddingTop={false} paddingBottom={false}>\r\n\t\t\t{content}\r\n\t\t</Grid>\r\n\t);\r\n};\r\n","import { Cell, Grid } from 'components/Boilerplate/Grid';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport ListHeader from 'components/ListHeader';\r\nimport { ColumnPageWithSidebar } from 'components/Panels/ColumnPageWithSidebar';\r\nimport { SidebarPuff } from 'components/Panels/SidebarPuff';\r\nimport { ContentBlockModel } from 'types/fragments';\r\nimport { Options } from '../EpiFragments';\r\nimport { ContentBlockModelWrapper } from 'pages/NVseArticlePage/NVseArticlePage.styles';\r\n\r\n// ContentBlockModel\r\nexport const GetContentBlockModelElement = (\r\n\texpanderData: ContentBlockModel,\r\n\toptions: Options,\r\n\tdisableCustomHeadingLogic: boolean\r\n) => {\r\n\tconst colorHeading = options.themeContext.isMicrositeActive\r\n\t\t? options.themeContext.palette.text.primary\r\n\t\t: undefined;\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{expanderData.heading && (\r\n\t\t\t\t<ContentBlockModelWrapper>\r\n\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false} inner>\r\n\t\t\t\t\t\t<Cell span={8}>\r\n\t\t\t\t\t\t\t<ListHeader\r\n\t\t\t\t\t\t\t\tsectionStyle\r\n\t\t\t\t\t\t\t\tcolor={colorHeading}\r\n\t\t\t\t\t\t\t\theading={expanderData.heading}\r\n\t\t\t\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\t\t\t></ListHeader>\r\n\t\t\t\t\t\t</Cell>\r\n\t\t\t\t\t</Grid>\r\n\t\t\t\t</ContentBlockModelWrapper>\r\n\t\t\t)}\r\n\r\n\t\t\t<Space top={options.themeContext.spacing.space3}>\r\n\t\t\t\t<ColumnPageWithSidebar\r\n\t\t\t\t\ttextAsModel={expanderData.textAsModel}\r\n\t\t\t\t\tlink={expanderData.link}\r\n\t\t\t\t\tbottomItems={expanderData.bottomItems}\r\n\t\t\t\t\toptions={{ ...options, headingLevel: options.headingLevel + 1 }}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t>\r\n\t\t\t\t\t{expanderData.sidebar && (\r\n\t\t\t\t\t\t<SidebarPuff\r\n\t\t\t\t\t\t\timage={expanderData.sidebar?.image}\r\n\t\t\t\t\t\t\theading={expanderData.sidebar?.heading}\r\n\t\t\t\t\t\t\theadingLevel={options.headingLevel + 1}\r\n\t\t\t\t\t\t\ttext={expanderData.sidebar?.text}\r\n\t\t\t\t\t\t\tlink={expanderData.sidebar?.link}\r\n\t\t\t\t\t\t></SidebarPuff>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</ColumnPageWithSidebar>\r\n\t\t\t</Space>\r\n\t\t</>\r\n\t);\r\n};\r\n","import Space from 'components/Boilerplate/Space';\r\nimport ListHeader from 'components/ListHeader';\r\nimport React from 'react';\r\nimport { CollapsibleContainerModel } from 'types/fragments';\r\nimport EpiFragments, { Options, wrapElementInGrid } from '../EpiFragments';\r\n\r\nexport const GetCollapsibleContainerElement = (\r\n\tcollapsibleContainer: CollapsibleContainerModel,\r\n\toptions: Options,\r\n\tdisableCustomHeadingLogic: boolean\r\n) => {\r\n\tconst colorHeading = options.themeContext.isMicrositeActive\r\n\t\t? options.themeContext.palette.text.primary\r\n\t\t: undefined;\r\n\tlet header: JSX.Element | null = null;\r\n\tif (collapsibleContainer.heading) {\r\n\t\theader = (\r\n\t\t\t<Space bottom={options.themeContext.spacing.space3}>\r\n\t\t\t\t<ListHeader\r\n\t\t\t\t\tsectionStyle\r\n\t\t\t\t\theading={collapsibleContainer.heading}\r\n\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\tcolor={colorHeading}\r\n\t\t\t\t></ListHeader>\r\n\t\t\t</Space>\r\n\t\t);\r\n\r\n\t\tif (!options.insideCell) {\r\n\t\t\theader = wrapElementInGrid(header);\r\n\t\t}\r\n\t}\r\n\r\n\t// TODO: use previousBlockType instead of <Space bottom>\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{header}\r\n\t\t\t<EpiFragments\r\n\t\t\t\toverrideSpacing={options.themeContext.spacing.space2}\r\n\t\t\t\tfragments={collapsibleContainer.items}\r\n\t\t\t\tinsideCell={options.insideCell}\r\n\t\t\t\tinsideGrid={options.insideGrid}\r\n\t\t\t\tinsideInnerGrid={options.insideInnerGrid}\r\n\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t></EpiFragments>\r\n\t\t</>\r\n\t);\r\n};\r\n","import BannerPuffText from 'components/Banners/BannerPuffText';\r\nimport BannerPuffTextImage from 'components/Banners/BannerPuffTextImage';\r\nimport BannerPuffTextYoutube from 'components/Banners/BannerPuffTextYoutube';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport React from 'react';\r\nimport {\r\n\tImageFragmentModel,\r\n\tMediaBannerFragmentModel,\r\n\tYouTubeFragmentModel,\r\n} from 'types/fragments';\r\nimport { Options, wrapElementInGrid } from '../EpiFragments';\r\n\r\nexport const GetMediaBannerElement = (\r\n\tmediaBannerData: MediaBannerFragmentModel,\r\n\toptions: Options\r\n) => {\r\n\tlet link: LinkType | null = null;\r\n\tlet element = null;\r\n\r\n\tif (\r\n\t\tmediaBannerData.link &&\r\n\t\tmediaBannerData.link.heading &&\r\n\t\tmediaBannerData.link.url\r\n\t) {\r\n\t\tlink = {\r\n\t\t\theading: mediaBannerData.link.heading,\r\n\t\t\turl: mediaBannerData.link.url,\r\n\t\t\tisFile: mediaBannerData.link.isFile,\r\n\t\t} as LinkType;\r\n\t}\r\n\r\n\tif (mediaBannerData.mediaContent?.modelType === 'Image') {\r\n\t\telement = (\r\n\t\t\t<BannerPuffTextImage\r\n\t\t\t\ttextToRight={mediaBannerData.textToRight}\r\n\t\t\t\tthemeName={mediaBannerData.theme}\r\n\t\t\t\tdecal={mediaBannerData.title}\r\n\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\theading={mediaBannerData.heading}\r\n\t\t\t\ttext={mediaBannerData.text}\r\n\t\t\t\tlink={link}\r\n\t\t\t\timage={mediaBannerData.mediaContent as ImageFragmentModel}\r\n\t\t\t></BannerPuffTextImage>\r\n\t\t);\r\n\t}\r\n\r\n\tif (mediaBannerData.mediaContent?.modelType === 'YouTubeModel') {\r\n\t\telement = (\r\n\t\t\t<BannerPuffTextYoutube\r\n\t\t\t\ttextToRight={mediaBannerData.textToRight}\r\n\t\t\t\tthemeName={mediaBannerData.theme}\r\n\t\t\t\tdecal={mediaBannerData.title}\r\n\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\theading={mediaBannerData.heading}\r\n\t\t\t\ttext={mediaBannerData.text}\r\n\t\t\t\tlink={link}\r\n\t\t\t\tyoutube={mediaBannerData.mediaContent as YouTubeFragmentModel}\r\n\t\t\t></BannerPuffTextYoutube>\r\n\t\t);\r\n\t}\r\n\r\n\tif (!mediaBannerData.mediaContent) {\r\n\t\telement = (\r\n\t\t\t<BannerPuffText\r\n\t\t\t\tthemeName={mediaBannerData.theme}\r\n\t\t\t\tdecal={mediaBannerData.title}\r\n\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\theading={mediaBannerData.heading}\r\n\t\t\t\tpreamble={mediaBannerData.text}\r\n\t\t\t\tlink={link}\r\n\t\t\t></BannerPuffText>\r\n\t\t);\r\n\t}\r\n\r\n\tif (element === null) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tif (options?.insideGrid) {\r\n\t\treturn element;\r\n\t}\r\n\r\n\treturn wrapElementInGrid(element);\r\n};\r\n","import DashboardBlock from 'components/Banners/DashboardBlock';\r\nimport { DashboardBlockModel } from 'types/fragments';\r\nimport { Options } from '../EpiFragments';\r\n\r\nexport const GetDashboardBlockModelElement = (\r\n\tmodel: DashboardBlockModel,\r\n\toptions: Options,\r\n\tdisableCustomHeadingLogic: boolean\r\n) => {\r\n\r\n\treturn <DashboardBlock options={options} theme={model.theme} items={model.items} disableCustomHeadingLogic={disableCustomHeadingLogic}></DashboardBlock>;\r\n};\r\n","import { FragmentPuffList } from 'components/Panels/FragmentPuffList';\r\nimport React from 'react';\r\nimport { ViewType } from 'types/enums';\r\nimport { PuffContainerModel } from 'types/fragments';\r\nimport { Options } from '../EpiFragments';\r\n\r\nexport const GetPuffContainerElement = (\r\n\tpuffContainer: PuffContainerModel,\r\n\toptions: Options,\r\n\tdisableCustomHeadingLogic: boolean\r\n) => {\r\n\treturn (\r\n\t\t<FragmentPuffList\r\n\t\t\trenderAsCarousel={puffContainer.renderAsCarousel}\r\n\t\t\tnextLabel={puffContainer.forwardButtonText}\r\n\t\t\tpreviousLabel={puffContainer.backwardButtonText}\r\n\t\t\theading={puffContainer.heading}\r\n\t\t\tlink={puffContainer.link}\r\n\t\t\toptions={{\r\n\t\t\t\t...options,\r\n\t\t\t\tview: puffContainer.viewType ?? ViewType.Card,\r\n\t\t\t}}\r\n\t\t\titems={puffContainer.puffItems}\r\n\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t></FragmentPuffList>\r\n\t);\r\n};\r\n","import { Heading, Tags } from 'components/Typography/Typography';\r\nimport { HeadingFragmentModel } from 'types/fragments';\r\nimport { Options } from '../EpiFragments';\r\n\r\nexport const GetHeadingFragmentElement = (\r\n\tdata: HeadingFragmentModel,\r\n\toptions: Options,\r\n\tdisableCustomHeadingLogic?: boolean\r\n) => {\r\n\tlet headingLevel: number = options.headingLevel + 1;\r\n\tconst colorHeading = options.themeContext.isMicrositeActive\r\n\t\t? options.themeContext.palette.text.primary\r\n\t\t: undefined;\r\n\r\n\tconst getHeadingLevel = (data: HeadingFragmentModel) => {\r\n\t\tif (data.isPage || disableCustomHeadingLogic) {\r\n\t\t\treturn (headingLevel = data.level);\r\n\t\t} else {\r\n\t\t\treturn (headingLevel = data.level + data.blockLevel);\r\n\t\t}\r\n\t};\r\n\treturn (\r\n\t\t<Heading level={getHeadingLevel(data)} color={colorHeading}>\r\n\t\t\t<span dangerouslySetInnerHTML={{ __html: data.raw }} />\r\n\t\t</Heading>\r\n\t);\r\n};\r\n","import RichText from 'components/Boilerplate/RichText';\r\nimport React from 'react';\r\nimport { RawFragmentModel } from 'types/fragments';\r\nimport { Options } from '../EpiFragments';\r\n\r\nexport const GetRawFragmentElement = (\r\n\tfragment: RawFragmentModel,\r\n\toptions?: Options\r\n) => {\r\n\treturn (\r\n\t\t<RichText epi={options?.epi}>\r\n\t\t\t<div\r\n\t\t\t\tdangerouslySetInnerHTML={{\r\n\t\t\t\t\t__html: fragment.raw,\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t</RichText>\r\n\t);\r\n};\r\n","import ContactBlock from 'components/ContactBlock/ContactBlock';\r\nimport { ContactBlockModel } from 'types/fragments';\r\n\r\nexport const GetContactModelElement = (\r\n\tdata: ContactBlockModel,\r\n) => {\r\n\treturn (\r\n\t\t<ContactBlock\r\n\t\t\timage={data.image}\r\n\t\t\tfullName={data.fullName}\r\n\t\t\tjobTitle={data.jobTitle}\r\n\t\t/>\r\n\t);\r\n};\r\n","import ExpanderPrototype from 'components/ExpanderPrototype';\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport { PuffTheme, getThemeHeadingColor } from 'pages/sharedModelTypes';\r\nimport { CollapsibleBlockModel } from 'types/fragments';\r\nimport EpiFragments, { Options } from '../EpiFragments';\r\n\r\nexport const GetCollapsibleBlockModelElement = (\r\n\tmodel: CollapsibleBlockModel,\r\n\toptions: Options,\r\n\tdisableCustomHeadingLogic: boolean\r\n) => {\r\n\tconst colorHeading =\r\n\t\tmodel.colorTheme != null\r\n\t\t\t? getThemeHeadingColor(\r\n\t\t\t\t\toptions.themeContext,\r\n\t\t\t\t\tmodel.colorTheme as PuffTheme\r\n\t\t\t )\r\n\t\t\t: options.themeContext.isMicrositeActive\r\n\t\t\t? options.themeContext.colors.grey3\r\n\t\t\t: undefined;\r\n\r\n\tconst headingElement = (\r\n\t\t<Heading\r\n\t\t\tlevel={\r\n\t\t\t\toptions.headingLevel + (options.themeContext.isMicrositeActive ? 2 : 1)\r\n\t\t\t}\r\n\t\t\tstyleLevel={\r\n\t\t\t\toptions.headingLevel + (options.themeContext.isMicrositeActive ? 2 : 1)\r\n\t\t\t}\r\n\t\t\tzeroBottom={true}\r\n\t\t\tcolor={colorHeading}\r\n\t\t>\r\n\t\t\t{model.heading}\r\n\t\t</Heading>\r\n\t);\r\n\r\n\tconst expanderId = `expander${options.index}`;\r\n\r\n\tconst themeStyles =\r\n\t\tmodel.colorTheme != null\r\n\t\t\t? (model.colorTheme as PuffTheme)\r\n\t\t\t: options.themeContext.isMicrositeActive\r\n\t\t\t? PuffTheme.MicrositeMainTheme\r\n\t\t\t: PuffTheme.BlueLight;\r\n\r\n\treturn (\r\n\t\t<ExpanderPrototype\r\n\t\t\tid={expanderId}\r\n\t\t\tisOpen={!model.showAsClosed}\r\n\t\t\theading={headingElement}\r\n\t\t\tthemeHeader={themeStyles}\r\n\t\t\tthemeContent={themeStyles}\r\n\t\t>\r\n\t\t\t{model.textAsModel && model.textAsModel.fragments.length > 0 && (\r\n\t\t\t\t<EpiFragments\r\n\t\t\t\t\tfragments={model.textAsModel.fragments}\r\n\t\t\t\t\tinsideCell={options.insideCell}\r\n\t\t\t\t\tinsideGrid={options.insideGrid}\r\n\t\t\t\t\tinsideInnerGrid={options.insideInnerGrid}\r\n\t\t\t\t\theadingLevel={options.headingLevel + 1}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t></EpiFragments>\r\n\t\t\t)}\r\n\t\t</ExpanderPrototype>\r\n\t);\r\n};\r\n","import HighlightBlock from 'components/HighlightBlock/HighlightBlock';\r\nimport { HighlightModel } from 'types/fragments';\r\nimport { Options } from '../EpiFragments';\r\n\r\nexport const GetHighlightModelElement = (\r\n\tdata: HighlightModel,\r\n\toptions: Options,\r\n\tdisableCustomHeadingLogic: boolean\r\n) => {\r\n\treturn <HighlightBlock textAsModel={data.textAsModel} options={options} disableCustomHeadingLogic={disableCustomHeadingLogic}/>;\r\n};\r\n","import PuffCard from 'components/PuffCard';\r\nimport { CardClockStatus } from 'components/PuffCard/PuffCard';\r\nimport PuffListItem from 'components/PuffListItem';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport { ViewType } from 'types/enums';\r\nimport { GrantPuffModel, ImageFragmentModel } from 'types/fragments';\r\nimport { Options } from '../EpiFragments';\r\n\r\nexport const GetGrantPuffModelElement = (\r\n\tgrantPuffModel: GrantPuffModel,\r\n\toptions: Options\r\n) => {\r\n\tconst image = {\r\n\t\tmodelType: 'Image',\r\n\t\tsrc: grantPuffModel.image?.src,\r\n\t\tsrcSet: grantPuffModel.image?.srcSet,\r\n\t\talt: grantPuffModel.image?.alt,\r\n\t\tcaption: grantPuffModel.image?.caption,\r\n\t\tphotographer: grantPuffModel.image?.photographer,\r\n\t\tagency: grantPuffModel.image?.agency,\r\n\t\tillustrator: grantPuffModel.image?.illustrator,\r\n\t} as ImageFragmentModel;\r\n\r\n\tswitch (options?.view) {\r\n\t\tdefault:\r\n\t\tcase ViewType.Card:\r\n\t\t\tlet statusColor = options.themeContext.colors.accentRed;\r\n\t\t\tswitch (grantPuffModel.statusId) {\r\n\t\t\t\tcase 0: // Kommande\r\n\t\t\t\t\tstatusColor = options.themeContext.colors.secondaryBlue;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 1: // Aktuella\r\n\t\t\t\t\tstatusColor = options.themeContext.colors.green3;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 2: // Avslutade\r\n\t\t\t\t\tstatusColor = options.themeContext.colors.accentRed;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif (grantPuffModel.statusAlert) {\r\n\t\t\t\tstatusColor = options.themeContext.colors.accentRed;\r\n\t\t\t}\r\n\r\n\t\t\tconst metadata = (\r\n\t\t\t\t<CardClockStatus\r\n\t\t\t\t\tcolor={statusColor!}\r\n\t\t\t\t\ttext={grantPuffModel.statusText}\r\n\t\t\t\t></CardClockStatus>\r\n\t\t\t);\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<PuffCard\r\n\t\t\t\t\timage={image}\r\n\t\t\t\t\tdecal={grantPuffModel.decal}\r\n\t\t\t\t\theading={grantPuffModel.heading}\r\n\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\tlink={grantPuffModel.link}\r\n\t\t\t\t>\r\n\t\t\t\t\t{metadata}\r\n\t\t\t\t</PuffCard>\r\n\t\t\t);\r\n\t\tcase ViewType.List:\r\n\t\t\tconst newLink: LinkType = {\r\n\t\t\t\turl: grantPuffModel.link.url,\r\n\t\t\t\theading: grantPuffModel.heading,\r\n\t\t\t};\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<PuffListItem\r\n\t\t\t\t\tdecal={grantPuffModel.decal}\r\n\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\tlink={newLink}\r\n\t\t\t\t\timage={image}\r\n\t\t\t\t\tcompact={false}\r\n\t\t\t\t></PuffListItem>\r\n\t\t\t);\r\n\r\n\t\tcase ViewType.CompactList:\r\n\t\t\treturn (\r\n\t\t\t\t<PuffListItem\r\n\t\t\t\t\tdecal={grantPuffModel.decal}\r\n\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\tlink={grantPuffModel.link}\r\n\t\t\t\t\timage={image}\r\n\t\t\t\t\tcompact={true}\r\n\t\t\t\t></PuffListItem>\r\n\t\t\t);\r\n\t}\r\n};\r\n","import PuffCard from 'components/PuffCard';\r\nimport PuffListItem from 'components/PuffListItem';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport { ViewType } from 'types/enums';\r\nimport { EventPuffItemModel } from 'types/fragments';\r\nimport {\r\n\tconvertDateWithMonthWrittenOut,\r\n\tgetTimeFromDate,\r\n} from 'utils/helper-utils';\r\nimport { Options } from '../EpiFragments';\r\n\r\nexport const GetEventPuffItemModelElement = (\r\n\teventPuffItemModel: EventPuffItemModel,\r\n\toptions: Options\r\n) => {\r\n\tswitch (options?.view) {\r\n\t\tdefault:\r\n\t\tcase ViewType.Card:\r\n\t\t\tconst formattedSubtitle = `${\r\n\t\t\t\teventPuffItemModel.eventStartDate !== null\r\n\t\t\t\t\t? convertDateWithMonthWrittenOut(eventPuffItemModel.eventStartDate)\r\n\t\t\t\t\t: ''\r\n\t\t\t} ${\r\n\t\t\t\teventPuffItemModel.eventStartDate !== null\r\n\t\t\t\t\t? 'kl. ' + getTimeFromDate(eventPuffItemModel.eventStartDate)\r\n\t\t\t\t\t: ''\r\n\t\t\t}`;\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<PuffCard\r\n\t\t\t\t\timage={eventPuffItemModel.image}\r\n\t\t\t\t\tdecal={eventPuffItemModel.eventType}\r\n\t\t\t\t\theading={eventPuffItemModel.heading}\r\n\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\tpreamble={formattedSubtitle}\r\n\t\t\t\t\tlink={eventPuffItemModel.link}\r\n\t\t\t\t></PuffCard>\r\n\t\t\t);\r\n\t\tcase ViewType.List:\r\n\t\t\tconst newLink: LinkType = {\r\n\t\t\t\turl: eventPuffItemModel.link.url,\r\n\t\t\t\theading: eventPuffItemModel.heading,\r\n\t\t\t\tisFile: eventPuffItemModel.link.isFile,\r\n\t\t\t};\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<PuffListItem\r\n\t\t\t\t\tdecal={eventPuffItemModel.eventType}\r\n\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\tlink={newLink}\r\n\t\t\t\t\timage={eventPuffItemModel.image}\r\n\t\t\t\t\tcompact={false}\r\n\t\t\t\t></PuffListItem>\r\n\t\t\t);\r\n\t\tcase ViewType.CompactList:\r\n\t\t\treturn (\r\n\t\t\t\t<PuffListItem\r\n\t\t\t\t\tdecal={eventPuffItemModel.eventType}\r\n\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\tlink={eventPuffItemModel.link}\r\n\t\t\t\t\timage={eventPuffItemModel.image}\r\n\t\t\t\t\tcompact={true}\r\n\t\t\t\t></PuffListItem>\r\n\t\t\t);\r\n\t}\r\n};\r\n","import SubjectAreaIconPuff from 'components/SubjectAreaIconPuffModel';\r\nimport React from 'react';\r\nimport { SubjectAreaIconPuffModel } from 'types/fragments';\r\nimport { Options } from '../EpiFragments';\r\n\r\nexport const GetSubjectAreaIconPuffElement = (\r\n\tsubjectAreaIcondPuffModel: SubjectAreaIconPuffModel,\r\n\toptions: Options\r\n) => {\r\n\treturn (\r\n\t\t<SubjectAreaIconPuff\r\n\t\t\t{...subjectAreaIcondPuffModel}\r\n\t\t\theadingLevel={options.headingLevel}\r\n\t\t></SubjectAreaIconPuff>\r\n\t);\r\n};\r\n","import PuffCard from 'components/PuffCard';\r\nimport PuffListItem from 'components/PuffListItem';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport { ViewType } from 'types/enums';\r\nimport { ImageFragmentModel, PublicationPuffModel } from 'types/fragments';\r\nimport {\r\n\tconvertDateWithMonthWrittenOut,\r\n\tconvertDateWithShortMonthWrittenOut,\r\n} from 'utils/helper-utils';\r\nimport { Options } from '../EpiFragments';\r\n\r\nexport const GetPublicationPuffModelElement = (\r\n\tpublicationPuffModel: PublicationPuffModel,\r\n\toptions: Options\r\n) => {\r\n\tconst image = {\r\n\t\tmodelType: 'Image',\r\n\t\tsrc: publicationPuffModel.image?.src,\r\n\t\tsrcSet: publicationPuffModel.image?.srcSet,\r\n\t\talt: publicationPuffModel.image?.alt,\r\n\t\tcaption: publicationPuffModel.image?.caption,\r\n\t\tphotographer: publicationPuffModel.image?.photographer,\r\n\t\tagency: publicationPuffModel.image?.agency,\r\n\t\tillustrator: publicationPuffModel.image?.illustrator,\r\n\t} as ImageFragmentModel;\r\n\r\n\tswitch (options?.view) {\r\n\t\tdefault:\r\n\t\tcase ViewType.Card:\r\n\t\t\treturn (\r\n\t\t\t\t<PuffCard\r\n\t\t\t\t\timage={image}\r\n\t\t\t\t\tdecal={publicationPuffModel.decal}\r\n\t\t\t\t\theading={publicationPuffModel.heading}\r\n\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\tpreamble={convertDateWithShortMonthWrittenOut(\r\n\t\t\t\t\t\tpublicationPuffModel.publicationDate\r\n\t\t\t\t\t)}\r\n\t\t\t\t\tlink={publicationPuffModel.link}\r\n\t\t\t\t></PuffCard>\r\n\t\t\t);\r\n\t\tcase ViewType.List:\r\n\t\tcase ViewType.CompactList:\r\n\t\t\tconst newLink: LinkType = {\r\n\t\t\t\turl: publicationPuffModel.link.url,\r\n\t\t\t\theading: publicationPuffModel.heading,\r\n\t\t\t\tisFile: publicationPuffModel.link.isFile,\r\n\t\t\t};\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<PuffListItem\r\n\t\t\t\t\tdecal={publicationPuffModel.decal}\r\n\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\tlink={newLink}\r\n\t\t\t\t\timage={image}\r\n\t\t\t\t\tcompact={options.view === ViewType.CompactList}\r\n\t\t\t\t>\r\n\t\t\t\t\t{publicationPuffModel.publicationDate && (\r\n\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t{convertDateWithMonthWrittenOut(\r\n\t\t\t\t\t\t\t\tpublicationPuffModel.publicationDate\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</PuffListItem>\r\n\t\t\t);\r\n\t}\r\n};\r\n","import PuffCard from 'components/PuffCard';\r\nimport PuffListItem from 'components/PuffListItem';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport { ViewType } from 'types/enums';\r\nimport { ModelLocalization } from 'types/epi';\r\nimport { RegulationPuffModel } from 'types/fragments';\r\nimport {\r\n\tconvertDateWithShortMonthWrittenOut,\r\n\ttranslate,\r\n} from 'utils/helper-utils';\r\nimport { Options } from '../EpiFragments';\r\n\r\nexport const GetRegulationPuffModelElement = (\r\n\tregulationPuffModel: RegulationPuffModel,\r\n\toptions: Options,\r\n\tlocalization: ModelLocalization | undefined\r\n) => {\r\n\tconst validFromString = translate(\r\n\t\t'/frontend/puff/validfrom',\r\n\t\t'Valid from',\r\n\t\tlocalization\r\n\t);\r\n\r\n\tconst buildMetaDataString = (): string | null => {\r\n\t\tlet metadata = '';\r\n\r\n\t\tif (regulationPuffModel.validFromDate) {\r\n\t\t\tconst dateString = convertDateWithShortMonthWrittenOut(\r\n\t\t\t\tregulationPuffModel.validFromDate\r\n\t\t\t);\r\n\t\t\tif (dateString) {\r\n\t\t\t\tif (metadata) {\r\n\t\t\t\t\tmetadata += ', ';\r\n\t\t\t\t}\r\n\t\t\t\tmetadata += `${validFromString} ${dateString}`;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (regulationPuffModel.regulationId) {\r\n\t\t\tconst nfsString = `${regulationPuffModel.regulationId}`;\r\n\t\t\tif (nfsString) {\r\n\t\t\t\tif (metadata) {\r\n\t\t\t\t\tmetadata += ', ';\r\n\t\t\t\t}\r\n\t\t\t\tmetadata += nfsString;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (regulationPuffModel.tag) {\r\n\t\t\tif (metadata) {\r\n\t\t\t\tmetadata += `, ${regulationPuffModel.tag}`;\r\n\t\t\t} else {\r\n\t\t\t\tmetadata += regulationPuffModel.tag;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn metadata;\r\n\t};\r\n\r\n\tconst metadata = buildMetaDataString();\r\n\r\n\tswitch (options?.view) {\r\n\t\tdefault:\r\n\t\tcase ViewType.Card:\r\n\t\t\treturn (\r\n\t\t\t\t<PuffCard\r\n\t\t\t\t\tdecal={regulationPuffModel.decal}\r\n\t\t\t\t\theading={regulationPuffModel.heading}\r\n\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\tpreamble={regulationPuffModel.regulationId}\r\n\t\t\t\t\tlink={regulationPuffModel.link}\r\n\t\t\t\t></PuffCard>\r\n\t\t\t);\r\n\t\tcase ViewType.List:\r\n\t\t\tconst linkItem: LinkType | undefined = regulationPuffModel.link?.url\r\n\t\t\t\t? {\r\n\t\t\t\t\t\turl: regulationPuffModel.link?.url,\r\n\t\t\t\t\t\theading: regulationPuffModel.heading,\r\n\t\t\t\t\t\tisFile: regulationPuffModel.link.isFile,\r\n\t\t\t\t }\r\n\t\t\t\t: undefined;\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<PuffListItem\r\n\t\t\t\t\tdecal={regulationPuffModel.decal}\r\n\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\tlink={linkItem}\r\n\t\t\t\t\tcompact={false}\r\n\t\t\t\t>\r\n\t\t\t\t\t{metadata && <span>{metadata}</span>}\r\n\t\t\t\t</PuffListItem>\r\n\t\t\t);\r\n\r\n\t\tcase ViewType.CompactList: {\r\n\t\t\tconst linkItem: LinkType | undefined = regulationPuffModel.link?.url\r\n\t\t\t\t? {\r\n\t\t\t\t\t\turl: regulationPuffModel.link?.url,\r\n\t\t\t\t\t\theading: regulationPuffModel.heading,\r\n\t\t\t\t\t\tisFile: regulationPuffModel.link.isFile,\r\n\t\t\t\t }\r\n\t\t\t\t: undefined;\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<PuffListItem\r\n\t\t\t\t\tdecal={regulationPuffModel.decal}\r\n\t\t\t\t\theadingLevel={options.headingLevel}\r\n\t\t\t\t\tlink={linkItem}\r\n\t\t\t\t\tcompact={true}\r\n\t\t\t\t>\r\n\t\t\t\t\t{metadata && <span>{metadata}</span>}\r\n\t\t\t\t</PuffListItem>\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n};\r\n","/**\r\n * ListingPageGrantsHeader - styles\r\n */\r\n\r\nimport { getThemeBackground, getThemeTextColor } from 'pages/sharedModelTypes';\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\nimport { ListingPageGrantsHeaderProps } from './ListingPageGrantsHeader';\r\nimport { zeroMarginPadding } from 'components/Typography';\r\n\r\nexport const Div = styled.div<ListingPageGrantsHeaderProps>`\r\n\tbackground-color: ${(p) => getThemeBackground(p.theme, p.themeTop)};\r\n\tdisplay: flex;\r\n\theight: auto;\r\n\tmin-height: auto;\r\n\tpadding: ${(p) => (p.isSubjectAreaPage ? '64px 0 80px 0' : '64px 0 168px 0')};\r\n\r\n\t.preamble-w-mb {\r\n\t\tmax-width: 700px;\r\n\t}\r\n\r\n\t.w-list-page-grants-header {\r\n\t\twidth: 1100px;\r\n\t}\r\n\r\n\t${mediaQueries.phoneOrTablet} {\r\n\t\tpadding: 64px 0 148px 16px;\r\n\t\tpadding: ${(p) =>\r\n\t\t\tp.isSubjectAreaPage ? '64px 0 40px 16px' : '64px 0 148px 16px'};\r\n\t\t.w-list-page-grants-header {\r\n\t\t\twidth: 1100px;\r\n\t\t}\r\n\t}\r\n\r\n\t${mediaQueries.phone} {\r\n\t\t${(props) => props.theme.spacing.space2}rem;\r\n\t}\r\n`;\r\n\r\nexport const Preamble = styled.p<ListingPageGrantsHeaderProps>`\r\n\t${zeroMarginPadding};\r\n\t${(props) => props.theme.typography.style7.getStyle()};\r\n\tcolor: ${(p) => getThemeTextColor(p.theme, p.themeTop)};\r\n`;\r\n\r\nexport const PublicationLink = styled.p<ListingPageGrantsHeaderProps>`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\t${(props) => props.theme.typography.style8.getStyle()};\r\n\tcolor: ${(p) => getThemeTextColor(p.theme, p.themeTop)};\r\n\r\n\ta {\r\n\t\tdisplay: inline-block;\r\n\t\tcolor: ${(p) => getThemeTextColor(p.theme, p.themeTop)} !important;\r\n\t\t${(props) => props.theme.typography.style8.getStyle()};\r\n\t\tmargin-top: ${(p) => p.theme.spacing.space2}rem;\r\n\t}\r\n`;\r\n","/**\r\n * ListingPageGrantsHeader\r\n */\r\n\r\nimport React from 'react';\r\nimport {\r\n\tDiv,\r\n\tPreamble,\r\n\tPublicationLink,\r\n} from './ListingPageGrantsHeader.styles';\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport EditableField from 'components/EditableField/EditableField';\r\nimport {\r\n\tLinkExtendedType,\r\n\tPuffTheme,\r\n\tgetThemeHeadingColor,\r\n\tgetThemeTextColor,\r\n} from 'pages/sharedModelTypes';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport Link from 'components/Boilerplate/Link';\r\n\r\nexport interface ListingPageGrantsHeaderProps {\r\n\t/** Description of this property */\r\n\theading?: string | null;\r\n\theadingLevel?: number;\r\n\tpreamble?: string | null;\r\n\tthemeContext?: any;\r\n\theading_htmlAttributes?: any;\r\n\tpreamble_htmlAttributes?: any;\r\n\tthemeTop?: PuffTheme | null;\r\n\tpublicationLink?: LinkExtendedType | null;\r\n\tisSubjectAreaPage?: boolean;\r\n}\r\n\r\n/** Main description for this component. */\r\nconst ListingPageGrantsHeader: React.FC<ListingPageGrantsHeaderProps> = ({\r\n\tthemeTop,\r\n\theading,\r\n\theadingLevel,\r\n\tpreamble,\r\n\theading_htmlAttributes = {},\r\n\tpreamble_htmlAttributes = {},\r\n\tthemeContext,\r\n\tpublicationLink,\r\n\tisSubjectAreaPage = false,\r\n}) => {\r\n\treturn (\r\n\t\t<Div themeTop={themeTop} isSubjectAreaPage={isSubjectAreaPage}>\r\n\t\t\t<Grid\r\n\t\t\t\tpaddingTop={false}\r\n\t\t\t\tpaddingBottom={false}\r\n\t\t\t\tpadding={false}\r\n\t\t\t\tclassName=\"w-list-page-grants-header\"\r\n\t\t\t>\r\n\t\t\t\t<EditableField opeProperty={heading_htmlAttributes}>\r\n\t\t\t\t\t{heading && (\r\n\t\t\t\t\t\t<Heading\r\n\t\t\t\t\t\t\tlevel={headingLevel}\r\n\t\t\t\t\t\t\tcolor={getThemeHeadingColor(themeContext, themeTop)}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{heading}\r\n\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</EditableField>\r\n\t\t\t\t<Space bottom={0} className=\"preamble-w-mb\">\r\n\t\t\t\t\t<EditableField opeProperty={preamble_htmlAttributes}>\r\n\t\t\t\t\t\t{preamble && (\r\n\t\t\t\t\t\t\t<Space top={0} bottom={0}>\r\n\t\t\t\t\t\t\t\t<Preamble themeTop={themeTop} {...preamble_htmlAttributes}>\r\n\t\t\t\t\t\t\t\t\t{preamble}\r\n\t\t\t\t\t\t\t\t</Preamble>\r\n\t\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</EditableField>\r\n\t\t\t\t\t{publicationLink && (\r\n\t\t\t\t\t\t<Space top={1} bottom={1}>\r\n\t\t\t\t\t\t\t<PublicationLink themeTop={themeTop}>\r\n\t\t\t\t\t\t\t\t{publicationLink.title}\r\n\r\n\t\t\t\t\t\t\t\t<Link\r\n\t\t\t\t\t\t\t\t\tto={publicationLink.url}\r\n\t\t\t\t\t\t\t\t\ttarget={publicationLink.target}\r\n\t\t\t\t\t\t\t\t\texternal={publicationLink.isFile}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{publicationLink.text}\r\n\t\t\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t\t\t</PublicationLink>\r\n\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Space>\r\n\t\t\t</Grid>\r\n\t\t</Div>\r\n\t);\r\n};\r\n\r\nexport default ListingPageGrantsHeader;\r\n","/**\r\n * SearchByListngPage - styles\r\n */\r\n\r\nimport Button from 'components/Button';\r\nimport { styleForH3, styleForH4, styleForLabel } from 'components/Typography';\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme/media-queries';\r\nimport { px2rem } from 'theme/utils';\r\n\r\ntype IsRegulationPage = {\r\n\tisRegulationPage?: boolean;\r\n\ttheme: any;\r\n};\r\n\r\nexport const SearchOverlappBlock = styled.div<IsRegulationPage>`\r\n\tbackground-color: ${(p) =>\r\n\t\tp.isRegulationPage ? 'transparent' : p.theme.colors.white};\r\n\tpadding: ${(p) => (p.isRegulationPage ? 0 : p.theme.spacing.space4)}rem;\r\n\tmargin-top: ${(p) => (p.isRegulationPage ? 0 : -8)}rem;\r\n\tbox-shadow: ${(p) =>\r\n\t\tp.isRegulationPage ? 'none' : '0px 0px 20px 2px rgba(0, 0, 0, 0.1)'};\r\n\r\n\t.as-h3 {\r\n\t\t${styleForH3}\r\n\t\tcolor: ${(props) => props.theme.colors.primary};\r\n\t\tmargin-bottom: ${(props) => props.theme.spacing.space2}rem;\r\n\t}\r\n\r\n\t.as-h4 {\r\n\t\t${styleForH4}\r\n\t\tcolor: ${(props) => props.theme.colors.primary};\r\n\t\tmargin-bottom: 0;\r\n\t}\r\n\r\n\t${mediaQueries.phone} {\r\n\t\t.as-h3 {\r\n\t\t\tfont-size: 22px;\r\n\t\t\tmargin-bottom: ${(props) => props.theme.spacing.space1}rem;\r\n\t\t}\r\n\t\t.as-h4 {\r\n\t\t\tfont-size: 18px;\r\n\t\t\tmargin-bottom: ${(props) => props.theme.spacing.space1}rem;\r\n\t\t}\r\n\t\tmargin-top: ${(p) => p.isRegulationPage && '1'}rem;\r\n\t\tpadding: ${(p) =>\r\n\t\t\tp.isRegulationPage\r\n\t\t\t\t? '0'\r\n\t\t\t\t: `${p.theme.spacing.space3}rem ${p.theme.spacing.space2}rem`};\r\n\t}\r\n`;\r\n\r\nexport const FiltersContainer = styled.div`\r\n\tmargin-top: ${(props) => props.theme.spacing.space4}rem;\r\n`;\r\n\r\nexport const ResultMessageHelper = styled.div`\r\n\tbackground-color: ${(props) => props.theme.colors.grey5};\r\n\tpadding: ${(props) => props.theme.spacing.space2}rem\r\n\t\t${(props) => props.theme.spacing.space3}rem;\r\n\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space2}rem;\r\n\tborder-radius: 8px;\r\n\tspan {\r\n\t\t${styleForH4}\r\n\t\tmargin-bottom: 14px;\r\n\t}\r\n\r\n\t.span-flex {\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t}\r\n\t.as-label {\r\n\t\t${styleForLabel}\r\n\t\tmargin-bottom: 0;\r\n\t}\r\n`;\r\n\r\nexport const StyledSpan = styled.span`\r\n\tfont-weight: bold !important;\r\n`;\r\n\r\nexport const SearchInputWrapper = styled.div<IsRegulationPage>`\r\n\tdisplay: flex;\r\n\talign-items: flex-end;\r\n\tposition: relative;\r\n\tinput {\r\n\t\twidth: 100%;\r\n\t}\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space2}rem;\r\n\t.search-close-icon {\r\n\t\twidth: 24px;\r\n\t\theight: 24px;\r\n\t\tposition: absolute;\r\n\t\tright: 16px;\r\n\t\t${mediaQueries.phone} {\r\n\t\t\tright: '12px';\r\n\t\t}\r\n\t\ttop: 12px;\r\n\t\tcursor: pointer;\r\n\t}\r\n\t.autocomplete-section {\r\n\t\twidth: 100%;\r\n\t\tmargin-right: 1rem;\r\n\t\tposition: relative;\r\n\t\t${mediaQueries.phone} {\r\n\t\t\tmargin-right: 8px;\r\n\t\t}\r\n\t}\r\n\r\n\tbutton {\r\n\t\tmargin-right: 0;\r\n\t}\r\n`;\r\n\r\nexport const PillsBlock = styled.div`\r\n\tdisplay: flex;\r\n\tflex-wrap: wrap;\r\n\tmargin-top: ${(props) => props.theme.spacing.space3}rem;\r\n`;\r\n\r\nexport const PillResetButton = styled.button`\r\n\t${(props) => props.theme.typography.style9.getStyle()};\r\n\twidth: 100px;\r\n\tdisplay: flex;\r\n\tjustify-content: center;\r\n\talign-items: center;\r\n\tcolor: ${(props) => props.theme.colors.white};\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space1}rem;\r\n\tbackground-color: #6b6b6b;\r\n\tborder: 1px solid transparent;\r\n\tcursor: pointer;\r\n\tpadding: 4px 8px;\r\n\tspan {\r\n\t\tmargin-top: 3px;\r\n\t}\r\n\t&:hover {\r\n\t\tbackground-color: ${(props) => props.theme.palette.text.primary};\r\n\t}\r\n\t&:focus {\r\n\t\toutline-color: ${(props) => props.theme.palette.text.primary};\r\n\t}\r\n\t${mediaQueries.phone} {\r\n\t\twhite-space: nowrap;\r\n\t}\r\n`;\r\n\r\nexport const AllFilterButton = styled(Button)`\r\n\tdisplay: none;\r\n\twidth: 100%;\r\n\tmargin-top: ${(props) => props.theme.spacing.space1}rem;\r\n\tpadding-top: ${px2rem(12)};\r\n\tpadding-bottom: ${px2rem(12)};\r\n\t${mediaQueries.phone} {\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: center;\r\n\t}\r\n`;\r\n\r\nexport const InlineControlls = styled.div`\r\n\tdisplay: flex;\r\n\tflex-wrap: wrap;\r\n\tmargin-top: ${(props) => props.theme.spacing.space4}rem;\r\n`;\r\n\r\nexport const FieldsetInline = styled.div<IsRegulationPage>`\r\n\theight: 62px;\r\n\tpadding: 0px;\r\n\tborder: none;\r\n\tdisplay: inline-flex;\r\n\tmargin-left: 1.5rem;\r\n\t${mediaQueries.phone} {\r\n\t\tmargin-left: 0;\r\n\t\tmargin-top: 1.5rem;\r\n\t\twidth: ${(props) => props.isRegulationPage && '100%'};\r\n\t}\r\n`;\r\n","/**\r\n * MegaMenu\r\n */\r\nimport Icon from 'components/Boilerplate/Icon';\r\nimport Link from 'components/Boilerplate/Link';\r\nimport Button from 'components/Button';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport React, {\r\n\tMutableRefObject,\r\n\tuseContext,\r\n\tuseEffect,\r\n\tuseRef,\r\n\tuseState,\r\n} from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { useLocation } from 'react-router-dom';\r\nimport { Transition, TransitionGroup } from 'react-transition-group';\r\nimport { toggleMenuItem, selectLocalization } from 'store/modules/model';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport { NavigationItem } from 'types/epi';\r\nimport { translate } from 'utils/helper-utils';\r\nimport { useSelector } from 'react-redux';\r\n\r\nimport {\r\n\tBackgroundOverlayStyle,\r\n\tMegaMenuAlternativSiblingLinkItem,\r\n\tMegaMenuCloseContainer,\r\n\tMegaMenuErrorItem,\r\n\tMegaMenuHeaderContainer,\r\n\tMegaMenuListContainer,\r\n\tMegaMenuListsContainer,\r\n\tMegaMenuRootItem,\r\n\tMegaMenuRootLinkItem,\r\n\tMegaMenuSiblingItem,\r\n\tMegaMenuSiblingLinkItem,\r\n\tMicrositeMegaMenuRootItem,\r\n\tMicrositeMegaMenuSiblingLinkItem,\r\n} from './MegaMenu.styles';\r\nimport { ListingPageURLs } from 'types/common';\r\n\r\nexport enum AriaLabel {\r\n\tMENU = 'Menu',\r\n\tMENY = 'Meny',\r\n\tSIDEMENU = 'Side menu',\r\n\tSIDOMENY = 'Sidomeny',\r\n\tLEVEL = 'level',\r\n\tNIVA = 'nivÃ¥',\r\n}\r\n\r\ntype MenuList = {\r\n\theading: string | null;\r\n\tparent: NavigationItem | null;\r\n\titems: NavigationItem[];\r\n};\r\n\r\nexport interface MegaMenuProps {\r\n\titems: NavigationItem[];\r\n\theading?: string | null;\r\n\tonClose?: (focusOrigin: boolean) => void;\r\n}\r\n\r\nconst MegaMenu: React.FC<MegaMenuProps> = ({ items, heading, onClose }) => {\r\n\tconst location = useLocation();\r\n\tconst dispatch = useDispatch();\r\n\tconst isEnglish = location.pathname.startsWith('/en');\r\n\tconst [menus, setMenus] = useState<MenuList[]>([]);\r\n\tconst [currentLocation, setCurrentLocation] = useState<string>();\r\n\tconst [animate, setAnimate] = useState(false);\r\n\tconst [animate2, setAnimate2] = useState(false);\r\n\r\n\tconst animSpeed = 200;\r\n\tconst ariaLabel = isEnglish ? AriaLabel.MENU : AriaLabel.MENY;\r\n\r\n\tconst ref = useRef(null);\r\n\r\n\tconst getActiveItem = (\r\n\t\titems: NavigationItem[]\r\n\t): NavigationItem | undefined => {\r\n\t\treturn items.find((item) => {\r\n\t\t\treturn item.isActive === true;\r\n\t\t});\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tconst currentUrl = location.pathname + location.hash;\r\n\r\n\t\tsetCurrentLocation(currentUrl);\r\n\r\n\t\tif (currentLocation !== undefined) {\r\n\t\t\tif (onClose) {\r\n\t\t\t\tcloseMenu(false);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [location]);\r\n\r\n\tuseEffect(() => {\r\n\t\tsetAnimate(true);\r\n\t\tsetAnimate2(true);\r\n\r\n\t\tlet rootMenuList = {\r\n\t\t\titems: items,\r\n\t\t\theading: heading,\r\n\t\t\tparent: null,\r\n\t\t} as MenuList;\r\n\r\n\t\tlet rootMenues = [rootMenuList];\r\n\t\tlet currentLevel = items;\r\n\t\t// Add all \"first\" open menues\r\n\t\twhile (true) {\r\n\t\t\tlet activeItem = getActiveItem(currentLevel);\r\n\t\t\tif (activeItem === undefined || activeItem.children.length === 0) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcurrentLevel = activeItem.children;\r\n\r\n\t\t\t// Add level to menulist\r\n\t\t\tlet newMenuList = {\r\n\t\t\t\titems: activeItem.children,\r\n\t\t\t\theading: activeItem.text,\r\n\t\t\t\tparent: activeItem,\r\n\t\t\t} as MenuList;\r\n\r\n\t\t\trootMenues = [...rootMenues, newMenuList];\r\n\t\t}\r\n\r\n\t\tsetMenus(rootMenues);\r\n\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [items]);\r\n\r\n\tconst onToggleItem = (item: NavigationItem, level: number) => {\r\n\t\t// Only one item can be active in a menu list\r\n\t\t// toggle all active items\r\n\t\tconst menuList = menus[level];\r\n\t\tmenuList.items.forEach((item) => {\r\n\t\t\tif (item.isActive) {\r\n\t\t\t\tconst result = createNodeIndexPath(items, item, []);\r\n\t\t\t\tif (result) {\r\n\t\t\t\t\tdispatch(toggleMenuItem(result));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Toggle the clicked/activated item\r\n\t\tconst result = createNodeIndexPath(items, item, []);\r\n\t\tif (result) {\r\n\t\t\tdispatch(toggleMenuItem(result));\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * A menu list want to be closed\r\n\t * by keyboard (Left arrow) or close button if enabled\r\n\t */\r\n\tconst onMenuListClose = (level: number, focusOrigin: boolean) => {\r\n\t\tif (level === 0) {\r\n\t\t\tcloseMenu(focusOrigin);\r\n\t\t} else {\r\n\t\t\t// Fint parent node and toggle it.\r\n\t\t\tlet menuList = menus[level];\r\n\t\t\tif (menuList.parent) {\r\n\t\t\t\tconst result = createNodeIndexPath(items, menuList.parent, []);\r\n\t\t\t\tif (result) {\r\n\t\t\t\t\tdispatch(toggleMenuItem(result));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tconst onMouseClickOutside = (e: any) => {\r\n\t\tlet element = ref.current;\r\n\t\tif (element) {\r\n\t\t\tif (element === e.target && onClose) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tcloseMenu(false);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t/** Close down menu */\r\n\tconst closeMenu = (focusOrigin: boolean) => {\r\n\t\tif (onClose) {\r\n\t\t\tsetAnimate2(false);\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\ttoggleItemsToFalse(items);\r\n\t\t\t\tonClose(focusOrigin);\r\n\t\t\t}, animSpeed);\r\n\t\t}\r\n\t};\r\n\r\n\tconst createNodeIndexPath = (\r\n\t\titems: NavigationItem[],\r\n\t\tfind: NavigationItem,\r\n\t\tpath: number[]\r\n\t): number[] | null => {\r\n\t\tfor (let i = 0; i < items.length; i++) {\r\n\t\t\tlet item = items[i];\r\n\t\t\tif (item === find) {\r\n\t\t\t\treturn [...path, i];\r\n\t\t\t}\r\n\r\n\t\t\tif (item.children.length > 0) {\r\n\t\t\t\tlet result = createNodeIndexPath(item.children, find, [...path, i]);\r\n\t\t\t\tif (result) {\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\r\n\tconst toggleItemsToFalse = (children: NavigationItem[]) => {\r\n\t\tchildren.forEach((item) => {\r\n\t\t\tif (item.isActive) {\r\n\t\t\t\tconst result = createNodeIndexPath(items, item, []);\r\n\t\t\t\tif (result) {\r\n\t\t\t\t\tdispatch(toggleMenuItem(result));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (item.children.length > 0) {\r\n\t\t\t\ttoggleItemsToFalse(item.children);\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\treturn (\r\n\t\t<Transition in={animate2} timeout={animSpeed}>\r\n\t\t\t{(state2) => (\r\n\t\t\t\t<BackgroundOverlayStyle\r\n\t\t\t\t\trole=\"dialog\"\r\n\t\t\t\t\taria-label={ariaLabel}\r\n\t\t\t\t\taria-modal={true}\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tstate={state2}\r\n\t\t\t\t\tonClick={onMouseClickOutside}\r\n\t\t\t\t>\r\n\t\t\t\t\t<MegaMenuListsContainer state={state2} tabIndex={0}>\r\n\t\t\t\t\t\t<TransitionGroup component={null}>\r\n\t\t\t\t\t\t\t{menus.map((menuItem, index) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<Transition key={index} in={animate} timeout={animSpeed}>\r\n\t\t\t\t\t\t\t\t\t\t{(state) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<MegaMenuList\r\n\t\t\t\t\t\t\t\t\t\t\t\tisEnglish={isEnglish}\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate={state}\r\n\t\t\t\t\t\t\t\t\t\t\t\tshowCloseButton={index === 0}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonClose={onMenuListClose}\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\tparent={menuItem.parent}\r\n\t\t\t\t\t\t\t\t\t\t\t\theading={menuItem.heading}\r\n\t\t\t\t\t\t\t\t\t\t\t\titems={menuItem.items}\r\n\t\t\t\t\t\t\t\t\t\t\t\tlevel={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonSelectedChanged={onToggleItem}\r\n\t\t\t\t\t\t\t\t\t\t\t></MegaMenuList>\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t</Transition>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t</TransitionGroup>\r\n\t\t\t\t\t</MegaMenuListsContainer>\r\n\t\t\t\t</BackgroundOverlayStyle>\r\n\t\t\t)}\r\n\t\t</Transition>\r\n\t);\r\n};\r\n\r\nexport default MegaMenu;\r\n\r\n/**\r\n * MegaMenuList\r\n */\r\n\r\nexport interface MegaMenuListProps {\r\n\theading: string | null;\r\n\tparent: NavigationItem | null;\r\n\titems: NavigationItem[];\r\n\tstate: any;\r\n\tlevel: number;\r\n\tshowCloseButton?: boolean;\r\n\tonClose?: (level: number, mouseClick: boolean) => void;\r\n\tonSelectedChanged?: (child: NavigationItem, level: number) => void;\r\n\tisEnglish?: boolean;\r\n}\r\n\r\nconst MegaMenuList: React.FC<MegaMenuListProps> = ({\r\n\theading,\r\n\tparent,\r\n\titems,\r\n\tlevel,\r\n\tshowCloseButton = true,\r\n\tstate,\r\n\tonClose,\r\n\tonSelectedChanged,\r\n\tisEnglish,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\tconst isMicrositeActive = themeContext.isMicrositeActive;\r\n\r\n\t//\tconst [listItems, setListItems] = useState<NavigationItem[]>([]);\r\n\tconst [focusIndex, setFocusIndex] = useState<number>(0);\r\n\tconst [animate, setAnimate] = useState(state);\r\n\r\n\t// TODO:!!\r\n\t//const itemRefs = useMemo(() => { return [] }, [items]);\r\n\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\tconst itemRefs: React.RefObject<any>[] = [];\r\n\tconst closeElement = useRef<HTMLButtonElement>(\r\n\t\tnull\r\n\t) as MutableRefObject<HTMLButtonElement>;\r\n\r\n\tconst localization = useSelector(selectLocalization);\r\n\tconst closeLabel = translate(\r\n\t\t'/frontend/components/headerMenu/close',\r\n\t\t'Close',\r\n\t\tlocalization\r\n\t);\r\n\r\n\tconst ariaCloseLabel = translate(\r\n\t\t'/frontend/components/headerMenu/closeLabel',\r\n\t\t'Close menu',\r\n\t\tlocalization\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\tsetAnimate(state);\r\n\t}, [state]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (itemRefs[focusIndex] && itemRefs[focusIndex].current) {\r\n\t\t\titemRefs[focusIndex].current.focus();\r\n\t\t}\r\n\t}, [focusIndex, itemRefs]);\r\n\r\n\tconst isPhone = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.tablet - 1,\r\n\t});\r\n\r\n\tconst onMenuItemSelected = (child: NavigationItem) => {\r\n\t\tsetFocusIndex(items.indexOf(child));\r\n\t\tif (onSelectedChanged) {\r\n\t\t\tonSelectedChanged(child, level);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleContainerKeyPress = (\r\n\t\tevent: React.KeyboardEvent<HTMLDivElement>\r\n\t) => {\r\n\t\t// TODO: KeyboardEvent.key, Browser not supported QQ and Baidu\r\n\t\tlet newFocusIndex = 0;\r\n\r\n\t\tif (event.key.length === 1) {\r\n\t\t\tconst match = items.filter((item) => {\r\n\t\t\t\treturn item.text\r\n\t\t\t\t\t.toLocaleUpperCase()\r\n\t\t\t\t\t.startsWith(event.key.toUpperCase());\r\n\t\t\t});\r\n\r\n\t\t\tfor (let i = 0; i < match.length; i++) {\r\n\t\t\t\tlet matchIndex = items.indexOf(match[i]);\r\n\t\t\t\tif (matchIndex > focusIndex) {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tsetFocusIndex(matchIndex);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (matchIndex > focusIndex) {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tsetFocusIndex(matchIndex);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (match.length > 0) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tsetFocusIndex(items.indexOf(match[0]));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t\tswitch (event.key) {\r\n\t\t\tcase 'Escape':\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tevent.stopPropagation();\r\n\t\t\t\tif (onClose) {\r\n\t\t\t\t\tonClose(level, true);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Tab':\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tif (event.shiftKey) {\r\n\t\t\t\t\tif (showCloseButton) {\r\n\t\t\t\t\t\tif (focusIndex === 0) {\r\n\t\t\t\t\t\t\t// On first item\r\n\t\t\t\t\t\t\tsetFocusIndex(-1);\r\n\t\t\t\t\t\t\tcloseElement.current.focus();\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tnewFocusIndex = focusIndex <= 0 ? items.length - 1 : focusIndex - 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (showCloseButton) {\r\n\t\t\t\t\t\tif (focusIndex >= items.length - 1) {\r\n\t\t\t\t\t\t\t// On last item\r\n\t\t\t\t\t\t\tsetFocusIndex(-1);\r\n\t\t\t\t\t\t\tcloseElement.current.focus();\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tnewFocusIndex = focusIndex >= items.length - 1 ? 0 : focusIndex + 1;\r\n\t\t\t\t}\r\n\t\t\t\tsetFocusIndex(newFocusIndex);\r\n\t\t\t\titemRefs[newFocusIndex].current.focus();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleContainerKeyUpPress = (\r\n\t\te: React.KeyboardEvent<HTMLDivElement>\r\n\t) => {\r\n\t\t// Block all keyup\r\n\t\te.stopPropagation();\r\n\t};\r\n\r\n\tconst onFocus = (item: NavigationItem) => {\r\n\t\tsetFocusIndex(items.indexOf(item));\r\n\t};\r\n\r\n\tconst onCloseClick = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n\t\te.stopPropagation();\r\n\t\tif (onClose) {\r\n\t\t\tonClose(level, true);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleStyleLevels = () => {\r\n\t\tif (isMicrositeActive) {\r\n\t\t\treturn isPhone ? 2 : 3;\r\n\t\t} else {\r\n\t\t\treturn isPhone ? 2 : 4;\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<MegaMenuListContainer\r\n\t\t\tstate={animate}\r\n\t\t\tstyle={{ zIndex: 10 - level }}\r\n\t\t\tonKeyDown={handleContainerKeyPress}\r\n\t\t\tonKeyUp={handleContainerKeyUpPress}\r\n\t\t>\r\n\t\t\t<MegaMenuCloseContainer\r\n\t\t\t\tstyle={{ visibility: showCloseButton ? 'visible' : 'hidden' }}\r\n\t\t\t>\r\n\t\t\t\t{onClose && (\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\tref={closeElement}\r\n\t\t\t\t\t\ticonName=\"cross\"\r\n\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\tisMicrositeActive\r\n\t\t\t\t\t\t\t\t? ButtonVariant.Microsite\r\n\t\t\t\t\t\t\t\t: ButtonVariant.Tertiary\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tonClick={onCloseClick}\r\n\t\t\t\t\t\taria-label={ariaCloseLabel}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{closeLabel}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t)}\r\n\t\t\t</MegaMenuCloseContainer>\r\n\t\t\t{heading && (\r\n\t\t\t\t<MegaMenuHeaderContainer>\r\n\t\t\t\t\t<Heading\r\n\t\t\t\t\t\tzeroBottom={true}\r\n\t\t\t\t\t\tcolor={themeContext.palette.text.primary}\r\n\t\t\t\t\t\tstyleLevel={handleStyleLevels()}\r\n\t\t\t\t\t\tlevel={isMicrositeActive ? 3 : 2}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{heading}\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t</MegaMenuHeaderContainer>\r\n\t\t\t)}\r\n\t\t\t<nav\r\n\t\t\t\taria-label={`${\r\n\t\t\t\t\tisEnglish\r\n\t\t\t\t\t\t? AriaLabel.SIDEMENU + ' ' + AriaLabel.LEVEL\r\n\t\t\t\t\t\t: AriaLabel.SIDOMENY + ' ' + AriaLabel.NIVA\r\n\t\t\t\t} ${level + 1}${heading !== undefined ? ', ' + heading : ''}`}\r\n\t\t\t>\r\n\t\t\t\t<ul>\r\n\t\t\t\t\t{items.map((child, index) => {\r\n\t\t\t\t\t\tconst ref = React.createRef<any>();\r\n\t\t\t\t\t\titemRefs[index] = ref;\r\n\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<MenuListItem\r\n\t\t\t\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\tonSelect={onMenuItemSelected}\r\n\t\t\t\t\t\t\t\titem={child}\r\n\t\t\t\t\t\t\t\tlevel={level}\r\n\t\t\t\t\t\t\t\tref={itemRefs[index]}\r\n\t\t\t\t\t\t\t></MenuListItem>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\t\t\t\t</ul>\r\n\t\t\t</nav>\r\n\t\t</MegaMenuListContainer>\r\n\t);\r\n};\r\n\r\nexport type selectedProps = {\r\n\tselected?: boolean;\r\n};\r\n\r\nexport type isRedirectProps = {\r\n\tisRedirect: boolean;\r\n\tcolor?: string;\r\n};\r\n\r\n/*** ITEM */\r\n\r\n/**\r\n * Menu Item\r\n * Can be button or link\r\n * different styles depending of level\r\n */\r\n\r\nexport interface MenuListItemProps {\r\n\titem: NavigationItem;\r\n\tlevel: number;\r\n\tonSelect?: (child: NavigationItem) => void;\r\n\tonFocus?: (child: NavigationItem) => void;\r\n}\r\n\r\nconst MenuListItem = React.forwardRef<any, MenuListItemProps>(\r\n\t({ item, level, onSelect, onFocus }, ref) => {\r\n\t\tconst themeContext = useContext(ThemeContext);\r\n\t\tconst isMicrositeActive = themeContext.isMicrositeActive;\r\n\r\n\t\tconst getLinkItem = (item: NavigationItem, level: number) => {\r\n\t\t\tif (item.style === 1) {\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<MegaMenuAlternativSiblingLinkItem onFocus={onItemFocus}>\r\n\t\t\t\t\t\t<Link\r\n\t\t\t\t\t\t\ttabIndex={-1}\r\n\t\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\t\tto={item.url}\r\n\t\t\t\t\t\t\texternal={ListingPageURLs.includes(item.url)}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{item.text}\r\n\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t</MegaMenuAlternativSiblingLinkItem>\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (isMicrositeActive) {\r\n\t\t\t\tif (item.style === 2 || item.style === 3) {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<MicrositeMegaMenuSiblingLinkItem onFocus={onItemFocus}>\r\n\t\t\t\t\t\t\t{item.url && (\r\n\t\t\t\t\t\t\t\t<Link tabIndex={-1} ref={ref} to={item.url}>\r\n\t\t\t\t\t\t\t\t\t{item.text}\r\n\t\t\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t{!item.url && (\r\n\t\t\t\t\t\t\t\t<MegaMenuErrorItem>\r\n\t\t\t\t\t\t\t\t\tError:missing url:{item.text}\r\n\t\t\t\t\t\t\t\t</MegaMenuErrorItem>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</MicrositeMegaMenuSiblingLinkItem>\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (item.style === 2 || item.style === 3) {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<MegaMenuSiblingLinkItem\r\n\t\t\t\t\t\t\tcolor={\r\n\t\t\t\t\t\t\t\titem.isRedirect || item.style === 3\r\n\t\t\t\t\t\t\t\t\t? undefined\r\n\t\t\t\t\t\t\t\t\t: themeContext.palette.text.primary\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tisRedirect={item.isRedirect}\r\n\t\t\t\t\t\t\tonFocus={onItemFocus}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{item.url && (\r\n\t\t\t\t\t\t\t\t<Link\r\n\t\t\t\t\t\t\t\t\ttabIndex={-1}\r\n\t\t\t\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\t\t\t\tto={item.url}\r\n\t\t\t\t\t\t\t\t\texternal={ListingPageURLs.includes(item.url)}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{item.text}\r\n\t\t\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t{!item.url && (\r\n\t\t\t\t\t\t\t\t<MegaMenuErrorItem>\r\n\t\t\t\t\t\t\t\t\tError:missing url:{item.text}\r\n\t\t\t\t\t\t\t\t</MegaMenuErrorItem>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</MegaMenuSiblingLinkItem>\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (level === 0) {\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<MegaMenuRootLinkItem onFocus={onItemFocus}>\r\n\t\t\t\t\t\t{item.url && (\r\n\t\t\t\t\t\t\t<Link\r\n\t\t\t\t\t\t\t\ttabIndex={-1}\r\n\t\t\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\t\t\tshowLinkIcon={false}\r\n\t\t\t\t\t\t\t\tto={item.url}\r\n\t\t\t\t\t\t\t\texternal={ListingPageURLs.includes(item.url)}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{item.text}\r\n\t\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{!item.url && (\r\n\t\t\t\t\t\t\t<MegaMenuErrorItem>\r\n\t\t\t\t\t\t\t\tError:missing url:{item.text}\r\n\t\t\t\t\t\t\t</MegaMenuErrorItem>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</MegaMenuRootLinkItem>\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (isMicrositeActive) {\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<MicrositeMegaMenuSiblingLinkItem onFocus={onItemFocus}>\r\n\t\t\t\t\t\t{item.url && (\r\n\t\t\t\t\t\t\t<Link showLinkIcon={false} tabIndex={-1} ref={ref} to={item.url}>\r\n\t\t\t\t\t\t\t\t{item.text}\r\n\t\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{!item.url && (\r\n\t\t\t\t\t\t\t<MegaMenuErrorItem>\r\n\t\t\t\t\t\t\t\tError:missing url:{item.text}\r\n\t\t\t\t\t\t\t</MegaMenuErrorItem>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</MicrositeMegaMenuSiblingLinkItem>\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<MegaMenuSiblingLinkItem\r\n\t\t\t\t\t\tisRedirect={item.isRedirect}\r\n\t\t\t\t\t\tonFocus={onItemFocus}\r\n\t\t\t\t\t\tcolor={\r\n\t\t\t\t\t\t\titem.isRedirect ? undefined : themeContext.palette.text.primary\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{item.url && (\r\n\t\t\t\t\t\t\t<Link\r\n\t\t\t\t\t\t\t\tshowLinkIcon={false}\r\n\t\t\t\t\t\t\t\ttabIndex={-1}\r\n\t\t\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\t\t\tto={item.url}\r\n\t\t\t\t\t\t\t\taria-label={item.text}\r\n\t\t\t\t\t\t\t\texternal={ListingPageURLs.includes(item.url)}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{item.text}\r\n\t\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{!item.url && (\r\n\t\t\t\t\t\t\t<MegaMenuErrorItem>\r\n\t\t\t\t\t\t\t\tError:missing url:{item.text}\r\n\t\t\t\t\t\t\t</MegaMenuErrorItem>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</MegaMenuSiblingLinkItem>\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst getItemWithSubItems = (item: NavigationItem, level: number) => {\r\n\t\t\tif (level === 0) {\r\n\t\t\t\tif (isMicrositeActive) {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<MicrositeMegaMenuRootItem\r\n\t\t\t\t\t\t\tonFocus={onItemFocus}\r\n\t\t\t\t\t\t\tselected={item.isActive}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<div></div>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\taria-expanded={item.isActive}\r\n\t\t\t\t\t\t\t\taria-label={item.text}\r\n\t\t\t\t\t\t\t\tonClick={onSelected}\r\n\t\t\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\t\t\ttabIndex={-1}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span>{item.text}</span>\r\n\t\t\t\t\t\t\t\t<Icon size={1} icon=\"chevron\"></Icon>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</MicrositeMegaMenuRootItem>\r\n\t\t\t\t\t);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<MegaMenuRootItem onFocus={onItemFocus} selected={item.isActive}>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\taria-expanded={item.isActive}\r\n\t\t\t\t\t\t\t\taria-label={item.text}\r\n\t\t\t\t\t\t\t\tonClick={onSelected}\r\n\t\t\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\t\t\ttabIndex={-1}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span>{item.text}</span>\r\n\t\t\t\t\t\t\t\t<Icon size={1} icon=\"chevron\"></Icon>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</MegaMenuRootItem>\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<MegaMenuSiblingItem onFocus={onItemFocus} selected={item.isActive}>\r\n\t\t\t\t\t<button\r\n\t\t\t\t\t\taria-expanded={item.isActive}\r\n\t\t\t\t\t\taria-label={item.text}\r\n\t\t\t\t\t\ttabIndex={-1}\r\n\t\t\t\t\t\tonClick={onSelected}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<span>{item.text}</span>\r\n\t\t\t\t\t\t<Icon size={1} icon=\"chevron\"></Icon>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</MegaMenuSiblingItem>\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tconst onSelected = () => {\r\n\t\t\tif (onSelect) {\r\n\t\t\t\tonSelect(item);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst onItemFocus = () => {\r\n\t\t\tif (onFocus) {\r\n\t\t\t\tonFocus(item);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tif (item.children.length > 0) {\r\n\t\t\treturn getItemWithSubItems(item, level);\r\n\t\t}\r\n\r\n\t\treturn getLinkItem(item, level);\r\n\t}\r\n);\r\n","/**\r\n * FilterDropdown - styles\r\n */\r\n\r\nimport {\r\n\tstyleForButton,\r\n\tstyleForLabel,\r\n\tstyleForSelect,\r\n} from 'components/Typography';\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\n\r\ntype IsRegulationPageProps = {\r\n\tisRegulationPage?: boolean;\r\n};\r\n\r\nexport const FilterButtonContainer = styled.div<IsRegulationPageProps>`\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tmargin-top: ${(props) => (props.isRegulationPage ? '2.5' : '0.75')}rem;\r\n\tmargin-bottom: ${(props) => (props.isRegulationPage ? '2' : '0')}rem;\r\n\t${mediaQueries.phone} {\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\tmargin-top: ${(props) => props.isRegulationPage && '1.5'}rem;\r\n\t}\r\n`;\r\n\r\nexport const FilterBlock = styled.div<IsRegulationPageProps>`\r\n\tposition: relative;\r\n\t${mediaQueries.phone} {\r\n\t\twidth: ${(props) => props.isRegulationPage && '100%'};\r\n\t}\r\n`;\r\n\r\nexport const CheckboxWrapper = styled.div<IsRegulationPageProps>`\r\n\tmargin-top: ${(props) => !props.isRegulationPage && '-30px'};\r\n\theight: ${(props) => props.isRegulationPage && '62px'};\r\n`;\r\n\r\nexport const LabelButtonWrapper = styled.div<IsRegulationPageProps>`\r\n\tmargin-right: ${(props) =>\r\n\t\tprops.isRegulationPage ? props.theme.spacing.space3 : '0.75'}rem;\r\n\t${mediaQueries.phone} {\r\n\t\tmargin-bottom: 1.5rem;\r\n\t\tmargin-right: 0;\r\n\t}\r\n`;\r\n\r\ntype SelectFilterContainerProps = {\r\n\tisOpen?: boolean;\r\n};\r\n\r\nexport const FilterButton = styled.button<SelectFilterContainerProps>`\r\n\t${styleForSelect}\t\r\n\tpadding: 7px 9px;\t\r\n\tcursor: pointer;\r\n\tdisplay flex;\r\n\theight: 40px;\r\n\t&:hover {\r\n\t\ttransition: background-color 100ms ease;\r\n\t\tbackground-color: ${(props) => props.theme.colors.blue2}a0;\r\n\t\tborder: 1px solid ${(props) => props.theme.colors.primary};\r\n\t}\r\n\t\r\n\tsvg {\r\n\t\ttransform: ${({ isOpen }) => (isOpen ? 'rotate(270deg)' : 'rotate(90deg)')};\r\n\t\talign-self: center;\r\n\t\tflex: 0 0 auto;\r\n\t\tmargin-left: 10px;\r\n\t\tpointer-events: none;\r\n\t}\r\n\r\n\t.unselectable {\r\n \tpointer-events: none;\r\n\t}\r\n\t\r\n`;\r\n\r\ntype FilterKey = {\r\n\tfilterKey: string;\r\n};\r\n\r\ntype FilterButtonProps = SelectFilterContainerProps & FilterKey;\r\n\r\nexport const FilterRegPageButton = styled.button<FilterButtonProps>`\r\n\t${styleForSelect}\r\n\tpadding: 7px 9px;\r\n\tcursor: pointer;\r\n\tdisplay flex;\r\n\twidth: ${(props) => (props.filterKey === 'RevokedDate' ? '115px' : '300px')};\r\n\theight: 40px;\r\n\tjustify-content: space-between;\r\n\t&:hover {\r\n\t\ttransition: background-color 100ms ease;\r\n\t\tbackground-color: ${(props) => props.theme.colors.blue2}a0;\r\n\t\tborder: 1px solid ${(props) => props.theme.colors.primary};\r\n\t}\r\n\r\n\tsvg {\r\n\t\ttransform: ${({ isOpen }) => (isOpen ? 'rotate(270deg)' : 'rotate(90deg)')};\r\n\t\talign-self: center;\r\n\t\tflex: 0 0 auto;\r\n\t\tmargin-left: 10px;\r\n\t\tpointer-events: none;\r\n\t}\r\n\r\n\t.unselectable {\r\n\t\tpointer-events: none;\r\n\t}\r\n\r\n\t${mediaQueries.phone} {\r\n\t\twidth: 100%;\r\n\t}\r\n`;\r\n\r\nexport const FilterOptionsContainer = styled.fieldset`\r\n\tposition: absolute;\r\n\tmargin-top: 10px;\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tpadding: 0px;\r\n\tmin-width: 300px;\r\n\tmax-height: 397px;\r\n\toverflow-x: hidden;\r\n\toverflow-y: scroll;\r\n\tz-index: 100;\r\n\tborder: transparent;\r\n\tborder-radius: 8px;\r\n\tbackground-color: rgb(var(--colour-elevation-1, 255, 255, 255));\r\n\tbox-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.2);\r\n\r\n\tlegend {\r\n\t\tposition: absolute !important;\r\n\t\tdisplay: block;\r\n\t\twidth: 1px;\r\n\t\theight: 1px;\r\n\t\tpadding: 0;\r\n\t\tmargin: -1px;\r\n\t\toverflow: hidden;\r\n\t\tclip: rect(0, 0, 0, 0);\r\n\t\tclip-path: polygon(0 0, 0 0, 0 0, 0 0);\r\n\t\twhite-space: nowrap;\r\n\t\tvisibility: visible;\r\n\t\tborder: 0;\r\n\t}\r\n`;\r\n\r\nexport const TimeIntervalDropdown = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tpadding: 6px 12px;\r\n\twidth: 415px;\r\n\t.separator {\r\n\t\tborder-top: 1px solid #bfbfbf;\r\n\t\twidth: 95%;\r\n\t\tmargin-bottom: 16px;\r\n\t}\r\n\t${styleForButton}\r\n\t${mediaQueries.phone} {\r\n\t\twidth: auto;\r\n\t\t.separator {\r\n\t\t\twidth: 100%;\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nexport const CheckboxesInline = styled.div<IsRegulationPageProps>`\r\n\tmargin-top: ${(props) => (props.isRegulationPage ? '18px' : '15px')};\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tflex: 1 1 auto;\r\n\talign-items: center;\r\n\r\n\tspan {\r\n\t\t${mediaQueries.phone} {\r\n\t\t\tmargin-top: 2px;\r\n\t\t}\r\n\t}\r\n`;\r\n","import { styleForLabel } from 'components/Typography';\r\nimport styled from 'styled-components';\r\nimport { accessibilityFocus } from 'theme/styles';\r\nimport { MultiSelectCheckboxProps } from './MultiSelectCheckbox';\r\nimport { Icon } from 'components/Checkbox/Checkbox.styles';\r\nimport { mediaQueries } from 'theme';\r\n\r\nexport const FilterCheckboxGroup = styled.label<MultiSelectCheckboxProps>`\r\n\tcursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\r\n\tdisplay: flex;\r\n\twidth: 100%;\r\n\t${styleForLabel}\r\n\tpadding: 12px;\r\n\tmargin: 0;\r\n\tmax-height: 67px;\r\n\r\n\tspan {\r\n\t\tcolor: ${({ disabled, theme }) =>\r\n\t\t\tdisabled ? '#BFBFBF' : theme.colors.black};\r\n\t\ttext-decoration: ${({ checked }) => checked && 'underline'};\r\n\t}\r\n\r\n\t&:hover {\r\n\t\t${mediaQueries.desktop} {\r\n\t\t\ttransition: background-color 100ms ease;\r\n\t\t\tbackground-color: ${(props) =>\r\n\t\t\t\t!props.disabled && props.theme.colors.blue2}a0;\r\n\t\t\t.name {\r\n\t\t\t\ttext-decoration: underline;\r\n\t\t\t}\r\n\t\t\t.checkbox {\r\n\t\t\t\toutline: ${({ disabled, checked, theme }) =>\r\n\t\t\t\t\t!disabled && !checked && `1px solid ${theme.colors.primary}`};\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t&:focus-within {\r\n\t\tbackground-color: ${(props) =>\r\n\t\t\t!props.disabled && props.theme.colors.blue2}a0;\r\n\t\toutline: 1px solid ${(props) => props.theme.colors.primary};\r\n\t\toutline-offset: -1px;\r\n\t\t.name {\r\n\t\t\ttext-decoration: underline;\r\n\t\t}\r\n\t\t.checkbox {\r\n\t\t\toutline: ${({ disabled, checked, theme }) =>\r\n\t\t\t\t!disabled && !checked && `1px solid ${theme.colors.primary}`};\r\n\t\t}\r\n\t\t${mediaQueries.phone} {\r\n\t\t\tbackground-color: ${(props) =>\r\n\t\t\t\t!props.disabled && props.checked\r\n\t\t\t\t\t? `${props.theme.colors.blue2}a0`\r\n\t\t\t\t\t: 'white'};\r\n\t\t\toutline: ${(props) =>\r\n\t\t\t\t!props.disabled && props.checked\r\n\t\t\t\t\t? `1px solid ${props.theme.colors.primary}`\r\n\t\t\t\t\t: 'unset'};\r\n\t\t\t.checkbox {\r\n\t\t\t\toutline: ${({ disabled, checked, theme }) =>\r\n\t\t\t\t\t!disabled && checked ? `1px solid ${theme.colors.primary}` : 'unset'};\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t&.first:focus-within {\r\n\t\tborder-top-left-radius: 8px;\r\n\t\tborder-top-right-radius: 8px;\r\n\t}\r\n\r\n\t&.last:focus-within {\r\n\t\tborder-bottom-left-radius: 8px;\r\n\t\tborder-bottom-right-radius: 8px;\r\n\t}\r\n\tbackground-color: ${({ checked, disabled, theme }) =>\r\n\t\tchecked && !disabled ? `${theme.colors.blue2}a0` : 'white'};\r\n`;\r\n\r\nexport const ChildrenWrapper = styled.div`\r\n\twidth: 100%;\r\n\tdisplay: flex;\r\n\tjustify-content: space-between;\r\n\r\n\t.txt_wrapper {\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t}\r\n\r\n\t.help {\r\n\t\tfont-size: 12px;\r\n\t\ttext-decoration: none;\r\n\t\tcolor: #6b6b6b;\r\n\t}\r\n\r\n\t.hits {\r\n\t\ttext-decoration: none;\r\n\t}\r\n`;\r\n\r\nexport const HideCheckbox = styled.input.attrs({ type: 'checkbox' })`\r\n\tborder: 0;\r\n\tclip: rect(0 0 0 0);\r\n\tclippath: inset(50%);\r\n\theight: 1px;\r\n\tmargin: -1px;\r\n\toverflow: hidden;\r\n\tpadding: 0;\r\n\tposition: absolute;\r\n\twhite-space: nowrap;\r\n\twidth: 1px;\r\n`;\r\n\r\nexport const StyledCheckbox = styled.div<MultiSelectCheckboxProps>`\r\n\tflex: 0 0 auto;\r\n\twidth: 20px;\r\n\theight: 20px;\r\n\tborder: ${(props) =>\r\n\t\tprops.disabled\r\n\t\t\t? '1px solid #BFBFBF'\r\n\t\t\t: props.checked\r\n\t\t\t? `2px solid ${props.theme.colors.primary}`\r\n\t\t\t: `1px solid ${props.theme.colors.primary}`};\r\n\r\n\tborder-radius: 0px;\r\n\tmargin-left: 4px;\r\n\r\n\tbackground-color: ${(props) => props.theme.colors.white};\r\n\r\n\t${Icon} {\r\n\t\tline-height: 1rem;\r\n\t\tvisibility: ${(props) =>\r\n\t\t\tprops.checked && !props.disabled ? 'visible' : 'hidden'};\r\n\t}\r\n`;\r\nexport { Icon };\r\n","/**\r\n * MultiSelectCheckbox\r\n */\r\n\r\nimport React, { useEffect, useState } from 'react';\r\nimport {\r\n\tFilterCheckboxGroup,\r\n\tHideCheckbox,\r\n\tStyledCheckbox,\r\n} from './MultiSelectCheckbox.styles';\r\nimport { Icon } from 'components/Checkbox/Checkbox.styles';\r\n\r\nexport type MultiSelectCheckboxProps = {\r\n\tchecked?: boolean;\r\n\tdisabled?: boolean;\r\n\tchildren?: any;\r\n\trequired?: boolean;\r\n\tname?: string;\r\n\tvalue?: any; // Used for FormData\r\n\tid?: string;\r\n\thits?: number;\r\n\tonCheckedChanged?: (checked: boolean) => void;\r\n\tfocusStyle?: string;\r\n};\r\n\r\n/** Multi Filter Checkbox */\r\nconst MultiSelectCheckbox = React.forwardRef<any, MultiSelectCheckboxProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tchecked = false,\r\n\t\t\tchildren,\r\n\t\t\tonCheckedChanged,\r\n\t\t\trequired,\r\n\t\t\tvalue,\r\n\t\t\tdisabled,\r\n\t\t\tid,\r\n\t\t\thits,\r\n\t\t\tfocusStyle,\r\n\t\t\t...props\r\n\t\t},\r\n\t\tref\r\n\t) => {\r\n\t\tconst [checkedState, setCheckedState] = useState(checked);\r\n\r\n\t\tconst handleCheckChange = (event: any) => {\r\n\t\t\tif (!disabled) {\r\n\t\t\t\tsetCheckedState((prevValue) => !prevValue);\r\n\t\t\t\tif (onCheckedChanged) {\r\n\t\t\t\t\tonCheckedChanged(event);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tsetCheckedState(checked);\r\n\t\t}, [checked]);\r\n\r\n\t\treturn (\r\n\t\t\t<FilterCheckboxGroup\r\n\t\t\t\tdisabled={hits === 0}\r\n\t\t\t\tchecked={checkedState}\r\n\t\t\t\tonKeyDown={(event) => {\r\n\t\t\t\t\tif (event.key === 'Enter') {\r\n\t\t\t\t\t\thandleCheckChange(event);\r\n\t\t\t\t\t}\r\n\t\t\t\t}}\r\n\t\t\t\tclassName={focusStyle}\r\n\t\t\t>\r\n\t\t\t\t{children}\r\n\t\t\t\t<HideCheckbox\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tchecked={checkedState}\r\n\t\t\t\t\tvalue={value}\r\n\t\t\t\t\t{...props}\r\n\t\t\t\t\tonChange={handleCheckChange}\r\n\t\t\t\t\tdata-filter-typeof={id}\r\n\t\t\t\t\tdisabled={hits === 0 && !checked}\r\n\t\t\t\t/>\r\n\t\t\t\t<StyledCheckbox\r\n\t\t\t\t\tchecked={checkedState}\r\n\t\t\t\t\tdisabled={hits === 0 && !checked}\r\n\t\t\t\t\tclassName=\"checkbox\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<Icon viewBox=\"3 3 18 18\">\r\n\t\t\t\t\t\t<polyline points=\"18 6 11 16 5 12\" />\r\n\t\t\t\t\t</Icon>\r\n\t\t\t\t</StyledCheckbox>\r\n\t\t\t</FilterCheckboxGroup>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nexport default MultiSelectCheckbox;\r\n","import { styleForLabel } from 'components/Typography';\r\nimport styled from 'styled-components';\r\nimport { accessibilityFocus } from 'theme/styles';\r\nimport { MultiSelectCheckboxProps } from './MultiSelectCheckbox';\r\nimport { Icon } from 'components/Checkbox/Checkbox.styles';\r\n\r\nexport const SingleFilterCheckbox = styled.label<MultiSelectCheckboxProps>`\r\n\tcursor: pointer;\r\n\tdisplay: flex;\r\n\tjustify-content: space-between;\r\n\twidth: 100%;\r\n\t${styleForLabel}\r\n\r\n\tpadding: 6px 12px;\r\n\tmargin: 0;\r\n\tmax-height: 67px;\r\n\r\n\tspan {\r\n\t\tcolor: ${({ theme }) => theme.colors.black};\r\n\t\ttext-decoration: ${({ checked }) => checked && 'underline'};\r\n\t}\r\n\r\n\t&:hover {\r\n\t\ttransition: background-color 100ms ease;\r\n\t\tbackground-color: ${(props) => props.theme.colors.blue2}a0;\r\n\t\t.name {\r\n\t\t\ttext-decoration: underline;\r\n\t\t}\r\n\t}\r\n\t&:focus-within {\r\n\t\tbackground-color: ${(props) => props.theme.colors.blue2}a0;\r\n\t\toutline: 1px solid ${(props) => props.theme.colors.primary};\r\n\t\toutline-offset: -1px;\r\n\t\t.name {\r\n\t\t\ttext-decoration: underline;\r\n\t\t}\r\n\t}\r\n\t&.first:focus-within {\r\n\t\tborder-top-left-radius: 8px;\r\n\t\tborder-top-right-radius: 8px;\r\n\t}\r\n\r\n\t&.last:focus-within {\r\n\t\tborder-bottom-left-radius: 8px;\r\n\t\tborder-bottom-right-radius: 8px;\r\n\t}\r\n\tbackground-color: ${({ checked, theme }) =>\r\n\t\tchecked ? `${theme.colors.blue2}a0` : 'white'};\r\n`;\r\n\r\nexport const StyledCheckbox = styled.div<MultiSelectCheckboxProps>`\r\n\tflex: 0 0 auto;\r\n\twidth: 20px;\r\n\theight: 20px;\r\n\tborder: none;\r\n\tbackground-color: transparent;\r\n\r\n\t${Icon} {\r\n\t\tline-height: 1rem;\r\n\t\tvisibility: ${(props) =>\r\n\t\t\tprops.checked && !props.disabled ? 'visible' : 'hidden'};\r\n\t}\r\n`;\r\n","/**\r\n * SingleSelectCheckbox\r\n */\r\n\r\nimport React, { useEffect, useState } from 'react';\r\nimport {\r\n\tSingleFilterCheckbox,\r\n\tStyledCheckbox,\r\n} from './SingleSelectCheckbox.styles';\r\nimport { HideCheckbox } from './MultiSelectCheckbox.styles';\r\nimport { Icon } from 'components/Checkbox/Checkbox.styles';\r\nimport { log } from 'console';\r\n\r\nexport type SingleSelectCheckboxProps = {\r\n\tchecked?: boolean;\r\n\tchildren?: any;\r\n\tname?: string;\r\n\tvalue?: any;\r\n\tid?: string;\r\n\thits?: number;\r\n\tonCheckedChanged?: (checked: boolean) => void;\r\n\tfocusStyle?: string;\r\n};\r\n\r\n/** Single Filter Checkbox */\r\nconst SingleSelectCheckbox = React.forwardRef<any, SingleSelectCheckboxProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tchecked = false,\r\n\t\t\tchildren,\r\n\t\t\tonCheckedChanged,\r\n\t\t\tvalue,\r\n\t\t\tid,\r\n\t\t\thits,\r\n\t\t\tfocusStyle,\r\n\t\t\t...props\r\n\t\t},\r\n\t\tref\r\n\t) => {\r\n\t\tconst [checkedState, setCheckedState] = useState(checked);\r\n\r\n\t\tconst handleCheckChange = (event: any) => {\r\n\t\t\tif (onCheckedChanged) {\r\n\t\t\t\tonCheckedChanged(event);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tsetCheckedState(checked);\r\n\t\t}, [checked]);\r\n\r\n\t\treturn (\r\n\t\t\t<SingleFilterCheckbox\r\n\t\t\t\tchecked={checkedState}\r\n\t\t\t\tonKeyDown={(event) => {\r\n\t\t\t\t\tif (event.key === 'Enter') {\r\n\t\t\t\t\t\thandleCheckChange(event);\r\n\t\t\t\t\t}\r\n\t\t\t\t}}\r\n\t\t\t\tclassName={focusStyle}\r\n\t\t\t>\r\n\t\t\t\t{children}\r\n\t\t\t\t<HideCheckbox\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tchecked={checkedState}\r\n\t\t\t\t\tvalue={value}\r\n\t\t\t\t\t{...props}\r\n\t\t\t\t\tonChange={handleCheckChange}\r\n\t\t\t\t\tdata-filter-typeof={id}\r\n\t\t\t\t/>\r\n\t\t\t\t<StyledCheckbox checked={checkedState} className=\"checkbox\">\r\n\t\t\t\t\t<Icon viewBox=\"3 3 18 18\">\r\n\t\t\t\t\t\t<polyline points=\"18 6 11 16 5 12\" />\r\n\t\t\t\t\t</Icon>\r\n\t\t\t\t</StyledCheckbox>\r\n\t\t\t</SingleFilterCheckbox>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nexport default SingleSelectCheckbox;\r\n","/**\r\n * DateSelectDropdown - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\n\r\nexport const DateSelectDropdownStyle = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n\twidth: 100%;\r\n\tmargin: 16px 0;\r\n`;\r\n\r\nexport const SelectContainer = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\twidth: 100%;\r\n`;\r\n\r\nexport const SelectLabel = styled.span`\r\n\t${(props) => props.theme.typography.style13.getStyle()};\r\n\tfont-weight: 400;\r\n`;\r\n\r\nexport const Separator = styled.div`\r\n\tbackground-color: #979797;\r\n\theight: 2px;\r\n\twidth: 25px;\r\n\tmargin: 16px 10px 0 0;\r\n\t${mediaQueries.phone} {\r\n\t\tmargin: 16px 10px 0 10px;\r\n\t}\r\n`;\r\n\r\nexport const CTAButtons = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tjustify-content: flex-end;\r\n\talign-items: center;\r\n\twidth: 100%;\r\n\tmargin-bottom: 8px;\r\n\tpadding-right: 14px;\r\n\t${mediaQueries.phone} {\r\n\t\tpadding-right: 4px;\r\n\t}\r\n\r\n\t.btnResetDisabledStyle {\r\n\t\tbackground-color: ${(props) => props.theme.colors.white};\r\n\t\tcolor: ${(props) => props.theme.colors.grey3};\r\n\t\tcursor: not-allowed;\r\n\t\t${mediaQueries.phone} {\r\n\t\t\tborder: 1px solid ${(props) => props.theme.colors.grey3};\r\n\t\t}\r\n\t}\r\n\r\n\t.btnAddDisabledStyle {\r\n\t\tbackground-color: ${(props) => props.theme.colors.white};\r\n\t\tcolor: ${(props) => props.theme.colors.grey3};\r\n\t\tborder: 1px solid ${(props) => props.theme.colors.grey3};\r\n\t\tcursor: not-allowed;\r\n\t\t&:hover {\r\n\t\t\tbackground-color: ${(props) => props.theme.colors.white};\r\n\t\t\tcolor: ${(props) => props.theme.colors.grey3};\r\n\t\t\tborder: 1px solid ${(props) => props.theme.colors.grey3};\r\n\t\t}\r\n\t}\r\n\r\n\t.btnAddStyle {\r\n\t\tfont-weight: 700;\r\n\t\tfont-size: 12px;\r\n\t\twidth: 83px;\r\n\t\theight: 36px;\r\n\t\tpadding: 0;\r\n\t\tpadding-left: 16px;\r\n\t\tspan {\r\n\t\t\tmargin: 0;\r\n\t\t\tline-height: 0;\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nexport const ButtonReset = styled.button`\r\n\t${(props) => props.theme.typography.style13.getStyle()};\r\n\tfont-weight: 400;\r\n\tcolor: ${(props) => props.theme.colors.secondaryBlue};\r\n\tborder: none;\r\n\tbackground-color: transparent;\r\n\tmargin-right: 8px;\r\n\tcursor: pointer;\r\n\ttext-decoration: none;\r\n\t&:hover {\r\n\t\ttext-decoration: underline;\r\n\t}\r\n\t${mediaQueries.phone} {\r\n\t\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\t\tborder: 1px solid ${(props) => props.theme.colors.grey1};\r\n\t\tpadding: 6px 24px;\r\n\t\tborder-radius: 25px;\r\n\t\tmargin-right: 4px;\r\n\t}\r\n`;\r\n","/* \r\n DateSelectDropdown\r\n\r\n This component is used to create a dropdown for date range filter\r\n*/\r\n\r\nimport React, { useEffect, useState } from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { Select, Span } from 'components/Typography';\r\nimport Button from 'components/Button';\r\nimport { NumberRange } from 'pages/sharedModelTypes';\r\nimport {\r\n\tSelectContainer,\r\n\tSelectLabel,\r\n\tButtonReset,\r\n\tCTAButtons,\r\n\tDateSelectDropdownStyle,\r\n\tSeparator,\r\n} from './DateSelectDropdown.styles';\r\nimport {\r\n\tSelectableYear,\r\n\tTimeInterval,\r\n} from 'components/SearchByListngPage/SearchByListngPage.model';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\n\r\ninterface DateSelectDropdownProps {\r\n\tonSubmit: (range: any) => void;\r\n\tflexRow?: boolean;\r\n\ttimeInterval: TimeInterval;\r\n\t/**optional property for mobile */\r\n\tselectedDates?: NumberRange;\r\n}\r\n\r\nexport const DateSelectDropdown: React.FC<DateSelectDropdownProps> = ({\r\n\ttimeInterval,\r\n\tselectedDates,\r\n\tonSubmit,\r\n}) => {\r\n\tconst {\r\n\t\tfromLabel,\r\n\t\ttoLabel,\r\n\t\tbtnResetLabel,\r\n\t\tbtnAddLabel,\r\n\t\tselectableYears,\r\n\t\tselectYearLabel,\r\n\t} = timeInterval;\r\n\r\n\tconst history = useHistory();\r\n\r\n\tconst isNarrowDisplay = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.tablet - 1,\r\n\t});\r\n\r\n\tconst [state, setState] = useState<NumberRange>({ from: null, to: null });\r\n\r\n\tconst [yearRanges, setYearRanges] = useState<SelectableYear[]>(\r\n\t\ttimeInterval.selectableYears\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\tsetYearRanges(timeInterval.selectableYears);\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!isNarrowDisplay) udpatedYearRanges();\r\n\t\telse updateYearRangeStateMobile(selectableYears);\r\n\t}, [selectableYears]);\r\n\r\n\tconst updateYearRangeStateMobile = (selectableYears: SelectableYear[]) => {\r\n\t\t// Find selected years\r\n\t\tconst selectedYears = selectableYears.filter((el) => el.selected === true);\r\n\r\n\t\t// If exactly one year is selected, check for the ReleaseDate facet\r\n\t\tif (selectedYears.length === 1) {\r\n\t\t\tconst urlParams = new URLSearchParams(history.location.search);\r\n\t\t\tconst facets = urlParams.get('facets');\r\n\r\n\t\t\t// Extract ReleaseDate value if present\r\n\t\t\tif (facets) {\r\n\t\t\t\tconst releaseDateFacet = facets\r\n\t\t\t\t\t.split(';')\r\n\t\t\t\t\t.find((facet) => facet.startsWith('ReleaseDate:'));\r\n\t\t\t\tconst releaseDateValue = releaseDateFacet\r\n\t\t\t\t\t? releaseDateFacet.split(':')[1]\r\n\t\t\t\t\t: null;\r\n\r\n\t\t\t\tif (releaseDateValue) {\r\n\t\t\t\t\tconst year = parseInt(releaseDateValue.slice(1)); // Extract the year number\r\n\t\t\t\t\tconst type = releaseDateValue.charAt(0); // 'T' or 'F'\r\n\r\n\t\t\t\t\tsetState({\r\n\t\t\t\t\t\tfrom: type === 'F' ? year : null,\r\n\t\t\t\t\t\tto: type === 'T' ? year : null,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tsetState({\r\n\t\t\t\t\tfrom: selectedDates && selectedDates.from ? selectedDates.from : null,\r\n\t\t\t\t\tto: selectedDates && selectedDates.to ? selectedDates.to : null,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\t// If more than one year is selected, return the default logic for mobile\r\n\t\telse {\r\n\t\t\tsetState({\r\n\t\t\t\tfrom:\r\n\t\t\t\t\t[...selectableYears].reverse().find((el) => el.selected)?.year ??\r\n\t\t\t\t\tnull,\r\n\t\t\t\tto: selectableYears.find((el) => el.selected)?.year ?? null,\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tconst udpatedYearRanges = () => {\r\n\t\tconst urlParams = new URLSearchParams(history.location.search);\r\n\t\tconst facets = urlParams.get('facets');\r\n\r\n\t\t// Check if facets contain \"ReleaseDate\"\r\n\t\tif (facets && facets.includes('ReleaseDate')) {\r\n\t\t\tconst newRangeState = { ...state };\r\n\t\t\t// Extract the years after \"ReleaseDate:\"\r\n\t\t\tconst releaseDatePart = facets\r\n\t\t\t\t.split(';')\r\n\t\t\t\t.find((part) => part.includes('ReleaseDate'));\r\n\r\n\t\t\t// Get the date range or keyword after \"ReleaseDate:\"\r\n\t\t\tconst dateRange = releaseDatePart?.split(':')[1];\r\n\r\n\t\t\t// Initialize variables to hold the start and end years\r\n\t\t\tlet startYear = '';\r\n\t\t\tlet endYear = '';\r\n\r\n\t\t\tif (dateRange?.includes('-')) {\r\n\t\t\t\t// Check if the range is in the format FYYYY-TYYYY\r\n\t\t\t\tstartYear = dateRange.substring(1, 5);\r\n\t\t\t\tendYear = dateRange.substring(7, 11);\r\n\t\t\t\tnewRangeState.from =\r\n\t\t\t\t\t[...selectableYears]\r\n\t\t\t\t\t\t.reverse()\r\n\t\t\t\t\t\t.find(\r\n\t\t\t\t\t\t\t(el) => el.selected === true && el.year === parseInt(startYear)\r\n\t\t\t\t\t\t)?.year ?? null;\r\n\t\t\t\tnewRangeState.to =\r\n\t\t\t\t\tselectableYears.find(\r\n\t\t\t\t\t\t(el) => el.selected === true && el.year === parseInt(endYear)\r\n\t\t\t\t\t)?.year ?? null;\r\n\t\t\t} else {\r\n\t\t\t\tif (dateRange?.startsWith('F')) {\r\n\t\t\t\t\tstartYear = dateRange.substring(1, 5);\r\n\t\t\t\t\tnewRangeState.from =\r\n\t\t\t\t\t\t[...selectableYears]\r\n\t\t\t\t\t\t\t.reverse()\r\n\t\t\t\t\t\t\t.find(\r\n\t\t\t\t\t\t\t\t(el) => el.selected === true && el.year === parseInt(startYear)\r\n\t\t\t\t\t\t\t)?.year ?? null;\r\n\t\t\t\t} else if (dateRange?.startsWith('T')) {\r\n\t\t\t\t\tendYear = dateRange.substring(1, 5);\r\n\t\t\t\t\tnewRangeState.to =\r\n\t\t\t\t\t\tselectableYears.find(\r\n\t\t\t\t\t\t\t(el) => el.selected === true && el.year === parseInt(endYear)\r\n\t\t\t\t\t\t)?.year ?? null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tsetState(newRangeState as NumberRange);\r\n\t\t}\r\n\t};\r\n\r\n\tconst onStartYearRangeSelected = (\r\n\t\tevent: React.ChangeEvent<HTMLSelectElement>\r\n\t) => {\r\n\t\tconst newRangeState = { ...state };\r\n\r\n\t\tif (event.target.value) {\r\n\t\t\tnewRangeState.from = parseInt(event.target.value);\r\n\t\t\tif (newRangeState.to && newRangeState.from > newRangeState.to) {\r\n\t\t\t\tnewRangeState.to = newRangeState.from;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tnewRangeState.from = null;\r\n\t\t}\r\n\r\n\t\tsetState(newRangeState as NumberRange);\r\n\t\tif (isNarrowDisplay) handleSubmitMobile(newRangeState);\r\n\t};\r\n\r\n\tconst onEndYearRangeSelected = (\r\n\t\tevent: React.ChangeEvent<HTMLSelectElement>\r\n\t) => {\r\n\t\tconst newRangeState = { ...state };\r\n\t\tif (event.target.value) {\r\n\t\t\tnewRangeState.to = parseInt(event.target.value);\r\n\t\t\tif (newRangeState.from && newRangeState.to < newRangeState.from) {\r\n\t\t\t\tnewRangeState.from = newRangeState.to;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tnewRangeState.to = null;\r\n\t\t}\r\n\r\n\t\tsetState(newRangeState as NumberRange);\r\n\t\tif (isNarrowDisplay) handleSubmitMobile(newRangeState);\r\n\t};\r\n\r\n\tconst handleSubmitAndClose = () => {\r\n\t\tlet newState = { ...state };\r\n\t\t/* if (state.from === null) {\r\n\t\t\tnewState.from = selectableYears[0].year;\r\n\t\t}\r\n\t\tif (state.to === null) {\r\n\t\t\tnewState.to = selectableYears[selectableYears.length - 1].year;\r\n\t\t} */\r\n\r\n\t\tonSubmit(newState);\r\n\t};\r\n\tconst handleSubmitMobile = (newState: NumberRange) => {\r\n\t\tonSubmit(newState);\r\n\t};\r\n\r\n\tconst handleReset = () => {\r\n\t\tsetState({ from: null, to: null });\r\n\t\tonSubmit({ from: null, to: null });\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<DateSelectDropdownStyle>\r\n\t\t\t\t<SelectContainer>\r\n\t\t\t\t\t<SelectLabel>{fromLabel}</SelectLabel>\r\n\t\t\t\t\t<Select\r\n\t\t\t\t\t\taria-label={fromLabel}\r\n\t\t\t\t\t\tonChange={onStartYearRangeSelected}\r\n\t\t\t\t\t\tstyle={!isNarrowDisplay ? { maxWidth: '170px' } : {}}\r\n\t\t\t\t\t\tvalue={state.from ? state.from : ''}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<option value=\"\">{selectYearLabel}</option>\r\n\t\t\t\t\t\t{yearRanges.map((year, index) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t<option value={year.year} key={index.toString() + 'from'}>\r\n\t\t\t\t\t\t\t\t\t{year.year}\r\n\t\t\t\t\t\t\t\t</option>\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t</Select>\r\n\t\t\t\t</SelectContainer>\r\n\t\t\t\t<Separator />\r\n\t\t\t\t<SelectContainer>\r\n\t\t\t\t\t<SelectLabel>{toLabel}</SelectLabel>\r\n\t\t\t\t\t<Select\r\n\t\t\t\t\t\taria-label={toLabel}\r\n\t\t\t\t\t\tonChange={onEndYearRangeSelected}\r\n\t\t\t\t\t\tstyle={!isNarrowDisplay ? { maxWidth: '170px' } : {}}\r\n\t\t\t\t\t\tvalue={state.to ? state.to : ''}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<option value=\"\">{selectYearLabel}</option>\r\n\t\t\t\t\t\t{yearRanges.map((year, index) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t<option value={year.year} key={index.toString() + 'to'}>\r\n\t\t\t\t\t\t\t\t\t{year.year}\r\n\t\t\t\t\t\t\t\t</option>\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t</Select>\r\n\t\t\t\t</SelectContainer>\r\n\t\t\t</DateSelectDropdownStyle>\r\n\r\n\t\t\t<CTAButtons>\r\n\t\t\t\t<ButtonReset\r\n\t\t\t\t\tid={btnResetLabel}\r\n\t\t\t\t\tonClick={handleReset}\r\n\t\t\t\t\tclassName={\r\n\t\t\t\t\t\tstate.from === null && state.to === null\r\n\t\t\t\t\t\t\t? 'btnResetDisabledStyle'\r\n\t\t\t\t\t\t\t: ''\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdisabled={state.from === null && state.to === null}\r\n\t\t\t\t>\r\n\t\t\t\t\t{btnResetLabel}\r\n\t\t\t\t</ButtonReset>\r\n\t\t\t\t{!isNarrowDisplay && (\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\tdisabled={state.from === null && state.to === null}\r\n\t\t\t\t\t\tonClick={handleSubmitAndClose}\r\n\t\t\t\t\t\tclassName={\r\n\t\t\t\t\t\t\tstate.from === null && state.to === null\r\n\t\t\t\t\t\t\t\t? 'btnAddStyle btnAddDisabledStyle'\r\n\t\t\t\t\t\t\t\t: 'btnAddStyle'\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{btnAddLabel}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t)}\r\n\t\t\t</CTAButtons>\r\n\t\t</>\r\n\t);\r\n};\r\n","/**\r\n * NVsePublicationsListingPage - styles\r\n */\r\n\r\nimport {\r\n\tstyleForInput,\r\n\tstyleForLabel,\r\n\tstyleForSelect,\r\n} from 'components/Typography';\r\nimport styled from 'styled-components';\r\n\r\nexport const Div = styled.div``;\r\n\r\nexport const IndexLabel = styled.h2`\r\n\t${(props) => props.theme.typography.style2.getStyle()};\r\n`;\r\nexport const PublicationHeading = styled.div`\r\n\tdisplay: flex;\r\n\tjustify-content: space-between;\r\n`;\r\n\r\nexport const SearchContainer = styled.div`\r\n\tborder: 2px solid red;\r\n\tdisplay: none;\r\n`;\r\n\r\nexport const SearchLabel = styled.div`\r\n\t${(props) => props.theme.typography.style9.getStyle()};\r\n\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space1}rem;\r\n`;\r\n\r\nexport const SearchWrapper = styled.div`\r\n\tjustify-content: space-between;\r\n\tdisplay: flex;\r\n\r\n\tinput {\r\n\t\t${(props) => props.theme.typography.style8.getStyle()};\r\n\t\tflex: 1;\r\n\t\tvertical-align: top;\r\n\t\tborder-radius: 8px;\r\n\t\tborder: 2px solid #afafaf;\r\n\t\tbackground-color: ${(props) => props.theme.colors.white};\r\n\t\tpadding-left: ${(props) => props.theme.spacing.space2}rem;\r\n\t\tpadding-right: ${(props) => props.theme.spacing.space2}rem;\r\n\t\tpadding-top: 7px;\r\n\t\tpadding-bottom: 9px;\r\n\t\tmargin-right: ${(props) => props.theme.spacing.space2}rem;\r\n\t}\r\n`;\r\n\r\nexport const LabelStyle = styled.label`\r\n\t${(props) => props.theme.typography.style9.getStyle()};\r\n\tcolor: ${(props) => props.theme.palette.text.primary};\r\n`;\r\n\r\nexport const FormStyle = styled.form`\r\n\tinput {\r\n\t\t${styleForInput}\r\n\t\tmargin-right: ${(props) => props.theme.spacing.space1}rem;\r\n\t}\r\n\r\n\tlabel,\r\n\tlegend {\r\n\t\t${styleForLabel}\r\n\t\tmargin-right: ${(props) => props.theme.spacing.space1}rem;\r\n\t}\r\n\r\n\tselect {\r\n\t\t${styleForSelect}\r\n\t\tmargin-right: ${(props) => props.theme.spacing.space1}rem;\r\n\t}\r\n`;\r\n\r\nexport const FieldsetInline = styled.div`\r\n\tpadding: 0px;\r\n\tborder: none;\r\n\tdisplay: inline-flex;\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space1}rem;\r\n`;\r\n\r\nexport const InputContainerFieldSet = styled.fieldset`\r\n\tborder: none;\r\n\tpadding: 0px;\r\n\tdisplay: flex;\r\n\tdisplay: flex;\r\n\talign-items: flex-end;\r\n\t> :first-child {\r\n\t\tflex: 1 1 auto;\r\n\t}\r\n`;\r\n\r\nexport const InlineControlls = styled.div`\r\n\tdisplay: flex;\r\n\tflex-wrap: wrap;\r\n\tmargin-top: ${(props) => props.theme.spacing.space2}rem;\r\n`;\r\n\r\nexport const CheckboxesInline = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tflex: 1 1 auto;\r\n\talign-items: center;\r\n`;\r\n\r\nexport const PaginationContainer = styled.div`\r\n\tdisplay: flex;\r\n`;\r\n\r\nexport const CategoriesContainer = styled.div`\r\n\tdisplay: inline-flex;\r\n\tflex-direction: column;\r\n\tmargin-right: ${(props) => props.theme.spacing.space1}rem;\r\n`;\r\n\r\nexport const RadioButtonContainer = styled.div`\r\n\twidth: auto;\r\n\tmargin-top: 10px;\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n\tul:first-child {\r\n\t\tpadding-right: 0.5rem;\r\n\t}\r\n\tspan {\r\n\t\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\t}\r\n`;\r\n","/**\r\n * Radio - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\nimport { accessibilityFocus } from 'theme/styles';\r\n\r\nexport const Wrap = styled.div`\r\n\t${(props) => props.theme.typography.style8.getStyle()};\r\n`;\r\n\r\nexport const Icon = styled.svg`\r\n\tflex: 0 0 auto;\r\n\twidth: 24px;\r\n\theight: 24px;\r\n\tmargin-top: 2px;\r\n\tmargin-right: 10px;\r\n`;\r\n\r\nexport const RadioOption = styled.li`\r\n\tcursor: pointer;\r\n\tdisplay: inline-block;\r\n\tmargin-right: 40px;\r\n\r\n\t&:focus {\r\n\t\t${accessibilityFocus()};\r\n\t}\r\n\t&:hover {\r\n\t\tsvg circle {\r\n\t\t\tstroke-width: 3px;\r\n\t\t}\r\n\t}\r\n\tspan {\r\n\t\t${(props) => props.theme.typography.style9.getStyle()};\r\n\t}\r\n\tsvg {\r\n\t\tvertical-align: top;\r\n\t}\r\n`;\r\n\r\nexport const Container = styled.ul`\r\n\tpadding: 0;\r\n\tmargin: 0;\r\n\tlist-style: none;\r\n\t& > ${RadioOption}:last-child {\r\n\t\tmargin-right: 0px;\r\n\t}\r\n`;\r\n","/**\r\n * Radio\r\n * Inspiration from\r\n * https://medium.com/better-programming/lets-make-a-react-radio-that-will-pass-a11y-part-2-932ac911a3e2\r\n * https://medium.com/@elfi_y/react-callback-refs-a-4bd2da317269\r\n */\r\n\r\nimport React, {\r\n\tuseState,\r\n\tuseEffect,\r\n\tKeyboardEvent,\r\n\tSyntheticEvent,\r\n\tuseRef,\r\n\tuseCallback,\r\n\tuseContext,\r\n} from 'react';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { Wrap, Container, RadioOption, Icon } from './Radio.styles';\r\n\r\nexport type Option = {\r\n\tid: string | number;\r\n\tvalue: string;\r\n};\r\n\r\nexport type RadioProps = {\r\n\tid: string;\r\n\tlabel: string;\r\n\toptions: Option[];\r\n\tselectedId?: string | number;\r\n\tonSelectedChanged?: (id: string | number | undefined) => void;\r\n};\r\n\r\n/** A Radio */\r\nconst Radio = ({\r\n\tid,\r\n\tlabel,\r\n\toptions,\r\n\tselectedId,\r\n\tonSelectedChanged,\r\n}: RadioProps) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst [focusId, setFocusId] = useState<string | number | undefined>(\r\n\t\tundefined\r\n\t);\r\n\tconst [selectedIdState, setSelectedStateId] = useState(selectedId);\r\n\tconst [optionsState, setOptionsState] = useState(options);\r\n\tconst [labelState, setLabelState] = useState(label);\r\n\r\n\tconst [hasFocus, setHasFocus] = useState(false);\r\n\r\n\tuseEffect(() => {\r\n\t\tsetLabelState(label);\r\n\t\tsetOptionsState(options);\r\n\t\tsetSelectedStateId(selectedId);\r\n\t}, [options, label, id, selectedId]);\r\n\r\n\tconst handleInitialContainerFocus = () => {\r\n\t\tsetHasFocus(true);\r\n\r\n\t\tif (!focusId) {\r\n\t\t\tconst focusedOption = optionsState.find(\r\n\t\t\t\t(option, index) => option.id === selectedIdState\r\n\t\t\t);\r\n\t\t\tif (focusedOption) {\r\n\t\t\t\tsetFocusId(focusedOption.id);\r\n\t\t\t} else {\r\n\t\t\t\tsetFocusId(optionsState[0].id);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tconst changeSelected = (id: string | number | undefined) => {\r\n\t\tsetSelectedStateId(id);\r\n\t\tif (onSelectedChanged) {\r\n\t\t\tonSelectedChanged(id);\r\n\t\t}\r\n\t};\r\n\r\n\tconst hasDoneInitialDrawRef = useRef(false);\r\n\tconst lastListSectionRef = useCallback(\r\n\t\t(lastListSectionElement) => {\r\n\t\t\tif (hasFocus && hasDoneInitialDrawRef.current && lastListSectionElement) {\r\n\t\t\t\tlastListSectionElement.focus();\r\n\t\t\t}\r\n\t\t\thasDoneInitialDrawRef.current = true;\r\n\t\t},\r\n\t\t[hasDoneInitialDrawRef, hasFocus]\r\n\t);\r\n\r\n\tconst handleOptionClick = (option: Option) => {\r\n\t\treturn (event: SyntheticEvent) => {\r\n\t\t\tsetFocusId(option.id);\r\n\t\t\tchangeSelected(option.id);\r\n\t\t};\r\n\t};\r\n\r\n\tconst handleOnBlur = (event: any) => {\r\n\t\tsetHasFocus(false);\r\n\t};\r\n\r\n\tconst handleContainerKeyPress = (event: KeyboardEvent) => {\r\n\t\t// TODO: KeyboardEvent.key, Browser not supported QQ and Baidu\r\n\t\tvar nextOption: string | number;\r\n\r\n\t\tswitch (event.key) {\r\n\t\t\tcase 'ArrowLeft':\r\n\t\t\tcase 'ArrowUp':\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tconst previousOptionIndex =\r\n\t\t\t\t\toptionsState.findIndex((option) => option.id === selectedIdState) - 1;\r\n\t\t\t\tnextOption =\r\n\t\t\t\t\tpreviousOptionIndex >= 0\r\n\t\t\t\t\t\t? optionsState[previousOptionIndex].id\r\n\t\t\t\t\t\t: optionsState[optionsState.length - 1].id;\r\n\r\n\t\t\t\tchangeSelected(nextOption);\r\n\t\t\t\tsetFocusId(nextOption);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'ArrowDown':\r\n\t\t\tcase 'ArrowRight':\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tconst currentSelectedOptionIndex = optionsState.findIndex(\r\n\t\t\t\t\t(option) => option.id === selectedIdState\r\n\t\t\t\t);\r\n\t\t\t\tconst nextOptionIndex =\r\n\t\t\t\t\tcurrentSelectedOptionIndex === -1\r\n\t\t\t\t\t\t? 1\r\n\t\t\t\t\t\t: currentSelectedOptionIndex + 1;\r\n\t\t\t\tnextOption =\r\n\t\t\t\t\tnextOptionIndex < optionsState.length\r\n\t\t\t\t\t\t? optionsState[nextOptionIndex].id\r\n\t\t\t\t\t\t: (nextOption = optionsState[0].id);\r\n\r\n\t\t\t\tchangeSelected(nextOption);\r\n\t\t\t\tsetFocusId(nextOption);\r\n\t\t\t\tbreak;\r\n\t\t\tcase ' ':\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tconst focusedOption = optionsState.find(\r\n\t\t\t\t\t(option, index) => option.id === focusId\r\n\t\t\t\t);\r\n\t\t\t\tif (focusedOption) {\r\n\t\t\t\t\tchangeSelected(focusedOption.id);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<Wrap>\r\n\t\t\t<Container\r\n\t\t\t\trole={optionsState.length > 0 ? 'radiogroup' : undefined}\r\n\t\t\t\taria-label={labelState}\r\n\t\t\t\t//aria-labelledby={id}\r\n\t\t\t\t// aria-activedescendant={focusElementId}\r\n\t\t\t\tonFocus={handleInitialContainerFocus}\r\n\t\t\t\tonKeyDown={handleContainerKeyPress}\r\n\t\t\t\tonBlur={handleOnBlur}\r\n\t\t\t>\r\n\t\t\t\t{optionsState.map((option, index) => {\r\n\t\t\t\t\tconst focusSelect =\r\n\t\t\t\t\t\tselectedIdState === option.id || (index === 0 && !selectedIdState);\r\n\t\t\t\t\tconst selected = selectedIdState === option.id;\r\n\t\t\t\t\tconst elementId = `${id}-option-${index}`;\r\n\t\t\t\t\tvar opt = (\r\n\t\t\t\t\t\t<RadioOption\r\n\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\tid={elementId}\r\n\t\t\t\t\t\t\tref={focusSelect ? lastListSectionRef : undefined}\r\n\t\t\t\t\t\t\trole=\"radio\"\r\n\t\t\t\t\t\t\ttabIndex={focusSelect ? 0 : -1}\r\n\t\t\t\t\t\t\taria-checked={selected}\r\n\t\t\t\t\t\t\tonClick={handleOptionClick(option)}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{selected ? (\r\n\t\t\t\t\t\t\t\t<Icon viewBox=\"0 0 24 24\">\r\n\t\t\t\t\t\t\t\t\t<g>\r\n\t\t\t\t\t\t\t\t\t\t<circle\r\n\t\t\t\t\t\t\t\t\t\t\tcx=\"12\"\r\n\t\t\t\t\t\t\t\t\t\t\tcy=\"12\"\r\n\t\t\t\t\t\t\t\t\t\t\tr=\"10\"\r\n\t\t\t\t\t\t\t\t\t\t\tstroke={themeContext.colors.primary}\r\n\t\t\t\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\r\n\t\t\t\t\t\t\t\t\t\t\tfill=\"transparent\"\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t<circle\r\n\t\t\t\t\t\t\t\t\t\t\tcx=\"12\"\r\n\t\t\t\t\t\t\t\t\t\t\tcy=\"12\"\r\n\t\t\t\t\t\t\t\t\t\t\tr=\"6\"\r\n\t\t\t\t\t\t\t\t\t\t\tfill={themeContext.colors.primary}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t</g>\r\n\t\t\t\t\t\t\t\t</Icon>\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t<Icon viewBox=\"0 0 24 24\">\r\n\t\t\t\t\t\t\t\t\t<circle\r\n\t\t\t\t\t\t\t\t\t\tcx=\"12\"\r\n\t\t\t\t\t\t\t\t\t\tcy=\"12\"\r\n\t\t\t\t\t\t\t\t\t\tr=\"10\"\r\n\t\t\t\t\t\t\t\t\t\tstroke={themeContext.colors.primary}\r\n\t\t\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\r\n\t\t\t\t\t\t\t\t\t\tfill=\"transparent\"\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</Icon>\r\n\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t<span>{option.value}</span>\r\n\t\t\t\t\t\t</RadioOption>\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\treturn opt;\r\n\t\t\t\t})}\r\n\t\t\t</Container>\r\n\t\t</Wrap>\r\n\t);\r\n};\r\n\r\nexport default Radio;\r\n","/**\r\n * FilterDropdown\r\n */\r\n\r\nimport React, { useEffect, useState, useRef } from 'react';\r\nimport {\r\n\tFilterButtonContainer,\r\n\tFilterOptionsContainer,\r\n\tFilterButton,\r\n\tFilterBlock,\r\n\tCheckboxWrapper,\r\n\tTimeIntervalDropdown,\r\n\tCheckboxesInline,\r\n\tLabelButtonWrapper,\r\n\tFilterRegPageButton,\r\n} from './FilterDropdown.styles';\r\nimport Icon from 'components/Boilerplate/Icon';\r\nimport {\r\n\tFacetModel,\r\n\tFacetOption,\r\n\tFacetTypeOf,\r\n\tSortModel,\r\n} from 'components/SearchByListngPage/SearchByListngPage.model';\r\nimport MultiSelectCheckbox from './MultiSelectCheckbox';\r\nimport { ChildrenWrapper } from './MultiSelectCheckbox.styles';\r\nimport SingleSelectCheckbox from './SingleSelectCheckbox';\r\nimport { DateSelectDropdown } from './DateSelectDropdown';\r\nimport Checkbox from 'components/Checkbox';\r\nimport { LabelContainer, LabelWrapper } from 'components/Panels/Panels.styles';\r\nimport { FieldsetInline } from 'components/SearchByListngPage/SearchByListngPage.styles';\r\nimport { RadioButtonContainer } from 'pages/NVsePublicationsListingPage/NVsePublicationsListingPage.styles';\r\nimport Radio from 'components/Radio';\r\n\r\ninterface Props {\r\n\t/** Facets & sort by */\r\n\tfacetModels?: FacetModel[];\r\n\tonChange?: (filter: any, type: FacetTypeOf) => void;\r\n\tonDateSelectChanged?: (\r\n\t\trange: { from: number; to: number },\r\n\t\tfilterTypeOf: string\r\n\t) => void;\r\n\tonCheckboxChanged?: (checked: boolean, type: string) => void;\r\n\tsortModel?: SortModel;\r\n\tonSortChanged?: (sort: any) => void;\r\n\tisRegulationPage?: boolean;\r\n}\r\n\r\n/** Main description for this component. */\r\nconst FilterDropdown: React.FC<Props> = ({\r\n\tfacetModels,\r\n\tonChange,\r\n\tonDateSelectChanged,\r\n\tonCheckboxChanged,\r\n\tsortModel,\r\n\tonSortChanged,\r\n\tisRegulationPage,\r\n}) => {\r\n\tinterface FacetObj {\r\n\t\t[key: string]: boolean;\r\n\t}\r\n\r\n\tconst initFiltersByKey = () => {\r\n\t\tconst obj: FacetObj = {};\r\n\t\t// added facets\r\n\t\tfacetModels?.forEach((i) => {\r\n\t\t\tobj[i.key] = false;\r\n\t\t});\r\n\t\treturn obj;\r\n\t};\r\n\r\n\tconst [fKey, setFKey] = useState(initFiltersByKey());\r\n\tconst [sSF, setSSF] = useState<string | null>();\r\n\r\n\tconst wrapperRef = useRef<HTMLFieldSetElement | null>(null);\r\n\tconst radioBtnRef = useRef<HTMLFieldSetElement | null>(null);\r\n\r\n\t/* useEffect to handle events on filters */\r\n\tuseEffect(() => {\r\n\t\tconst handleClickOutside = (event: MouseEvent) => {\r\n\t\t\tconst isOutsideWrapper =\r\n\t\t\t\twrapperRef?.current &&\r\n\t\t\t\t'contains' in wrapperRef.current &&\r\n\t\t\t\t!wrapperRef.current.contains(event.target as Node) &&\r\n\t\t\t\t(event.target as HTMLElement).tagName !== 'BUTTON';\r\n\r\n\t\t\t/* const isOutsideRadio =\r\n\t\t\t\tradioBtnRef?.current &&\r\n\t\t\t\t'contains' in radioBtnRef.current &&\r\n\t\t\t\t!radioBtnRef.current.contains(event.target as Node) &&\r\n\t\t\t\t(event.target as HTMLElement).tagName !== 'BUTTON'; */\r\n\r\n\t\t\tif (isOutsideWrapper) {\r\n\t\t\t\t/* close all filters */\r\n\t\t\t\tsetFKey((prevK) => {\r\n\t\t\t\t\tconst updFKey = { ...prevK };\r\n\t\t\t\t\tfor (const filterKey in updFKey) {\r\n\t\t\t\t\t\tupdFKey[filterKey] = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn updFKey;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst handleKeyDown = (event: { key: string }) => {\r\n\t\t\tif (event.key === 'Escape') {\r\n\t\t\t\t/* close all filters */\r\n\t\t\t\tsetFKey((prevK) => {\r\n\t\t\t\t\tconst updFKey = { ...prevK };\r\n\t\t\t\t\tfor (const filterKey in updFKey) {\r\n\t\t\t\t\t\tupdFKey[filterKey] = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn updFKey;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Bind the event listeners\r\n\t\tdocument.addEventListener('mousedown', handleClickOutside);\r\n\t\tdocument.addEventListener('keydown', handleKeyDown);\r\n\r\n\t\treturn () => {\r\n\t\t\t// Unbind the event listeners on clean up\r\n\t\t\tdocument.removeEventListener('mousedown', handleClickOutside);\r\n\t\t\tdocument.removeEventListener('keydown', handleKeyDown);\r\n\t\t};\r\n\t}, [wrapperRef, radioBtnRef]);\r\n\r\n\tconst toggleFOpts = (modelKey: string) => {\r\n\t\tsetFKey((prevK) => {\r\n\t\t\tconst updFKey = { ...prevK };\r\n\t\t\tupdFKey[modelKey] = !prevK[modelKey];\r\n\r\n\t\t\tfor (const filterKey in updFKey) {\r\n\t\t\t\tif (filterKey !== modelKey) {\r\n\t\t\t\t\tupdFKey[filterKey] = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn updFKey;\r\n\t\t});\r\n\t};\r\n\r\n\t/* toggle select single filter */\r\n\tconst toggleSSF = (\r\n\t\tevent: any,\r\n\t\ttype: FacetTypeOf,\r\n\t\tfacetKey: string,\r\n\t\tselected: boolean\r\n\t) => {\r\n\t\tconst key = event.target.value;\r\n\t\tsetSSF(key);\r\n\t\tif (onChange) onChange(event, type);\r\n\t\tsetFKey((prevK) => {\r\n\t\t\tconst updFKey = { ...prevK };\r\n\t\t\tif (key === sSF && selected) {\r\n\t\t\t\tupdFKey[facetKey] = true;\r\n\t\t\t} else {\r\n\t\t\t\tupdFKey[facetKey] = false;\r\n\t\t\t}\r\n\t\t\treturn updFKey;\r\n\t\t});\r\n\t};\r\n\r\n\tconst handleDateSelectChanged = (range: any, filterTypeOf: string) => {\r\n\t\t// ask here if you want to close the dropdown\r\n\t\t// ask if there is other filter selected (help from backend)\r\n\t\tif (onDateSelectChanged) {\r\n\t\t\tonDateSelectChanged(range, filterTypeOf);\r\n\t\t}\r\n\t\t/* close all filters */\r\n\t\tsetFKey((prevK) => {\r\n\t\t\tconst updFKey = { ...prevK };\r\n\t\t\tfor (const filterKey in updFKey) {\r\n\t\t\t\tupdFKey[filterKey] = false;\r\n\t\t\t}\r\n\t\t\treturn updFKey;\r\n\t\t});\r\n\t};\r\n\r\n\treturn (\r\n\t\t<FilterButtonContainer isRegulationPage={isRegulationPage}>\r\n\t\t\t{facetModels &&\r\n\t\t\t\tfacetModels.map((facet, i: number) => {\r\n\t\t\t\t\tconst selectedName =\r\n\t\t\t\t\t\tfacet.facetOptions.find((option) => option.selected)?.name || '';\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<React.Fragment key={facet.key + 'filterDropdown'}>\r\n\t\t\t\t\t\t\t{facet.key && (\r\n\t\t\t\t\t\t\t\t<FilterBlock isRegulationPage={isRegulationPage}>\r\n\t\t\t\t\t\t\t\t\t{facet.facetType !== FacetTypeOf.bool && (\r\n\t\t\t\t\t\t\t\t\t\t<LabelButtonWrapper isRegulationPage={isRegulationPage}>\r\n\t\t\t\t\t\t\t\t\t\t\t{isRegulationPage ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<LabelWrapper>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<legend aria-label={facet.key}>{facet.name}</legend>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</LabelWrapper>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<FilterRegPageButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilterKey={facet.key}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata-facet-key={facet.key}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-haspopup=\"true\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => toggleFOpts(facet.key)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-expanded={fKey[facet.key]}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisOpen={fKey[facet.key]}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tMath.random().toString() + facet.key + facet.name\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"unselectable\">{selectedName}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon size={1} icon=\"chevron\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</FilterRegPageButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<FilterButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata-facet-key={facet.key}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-haspopup=\"true\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => toggleFOpts(facet.key)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-expanded={fKey[facet.key]}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tisOpen={fKey[facet.key]}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tMath.random().toString() + facet.key + facet.name\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"unselectable\">{facet.name}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon size={1} icon=\"chevron\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t</FilterButton>\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</LabelButtonWrapper>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t\t{fKey[facet.key] &&\r\n\t\t\t\t\t\t\t\t\t\tfacet.facetType === FacetTypeOf.multiSelect && (\r\n\t\t\t\t\t\t\t\t\t\t\t<FilterOptionsContainer id={facet.key} ref={wrapperRef}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<legend>{facet.name}</legend>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{facet.facetOptions &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfacet.facetOptions.map(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(option: FacetOption, index: number) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst isFirst = index === 0;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst isLast =\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tindex === facet.facetOptions.length - 1;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<MultiSelectCheckbox\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={option.key + index.toString() + 'msf'}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={option.selected}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonCheckedChanged={(event) =>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange(event, FacetTypeOf.multiSelect)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tid={facet.key}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={option.key}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname={option.name}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thits={option.hits}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfocusStyle={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisFirst ? 'first' : isLast ? 'last' : ''\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ChildrenWrapper>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"txt_wrapper\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"name\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{option.name}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{option.helpText && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"help\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{option.helpText}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"hits\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t({option.hits})\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ChildrenWrapper>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</MultiSelectCheckbox>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t</FilterOptionsContainer>\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t\t{fKey[facet.key] &&\r\n\t\t\t\t\t\t\t\t\t\tfacet.facetType === FacetTypeOf.singleSelect && (\r\n\t\t\t\t\t\t\t\t\t\t\t<FilterOptionsContainer id={facet.key} ref={wrapperRef}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<legend>{facet.name}</legend>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{facet.facetOptions &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfacet.facetOptions.map(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(option: FacetOption, index: number) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst isFirst = index === 0;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst isLast =\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tindex === facet.facetOptions.length - 1;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<SingleSelectCheckbox\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={option.key + index.toString() + 'ssf'}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={option.selected}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonCheckedChanged={(event) =>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoggleSSF(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tFacetTypeOf.singleSelect,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfacet.key,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toption.selected\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tid={facet.key}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={option.key}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname={option.name}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfocusStyle={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisFirst ? 'first' : isLast ? 'last' : ''\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"name\">{option.name}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</SingleSelectCheckbox>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t</FilterOptionsContainer>\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t\t{fKey[facet.key] &&\r\n\t\t\t\t\t\t\t\t\t\tfacet.facetType === FacetTypeOf.dateSelect && (\r\n\t\t\t\t\t\t\t\t\t\t\t<FilterOptionsContainer id={facet.key} ref={wrapperRef}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<legend>{facet.name}</legend>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{facet.facetOptions &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfacet.facetOptions.map(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(option: FacetOption, index: number) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst isFirst = index === 0;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst isLast =\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tindex === facet.facetOptions.length - 1;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{!option.timeInterval && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<SingleSelectCheckbox\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toption.name + index.toString() + 'dsf'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={option.selected}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonCheckedChanged={(event) =>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoggleSSF(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tFacetTypeOf.singleSelect,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfacet.key,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toption.selected\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tid={facet.key}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={option.key}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname={option.name}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfocusStyle={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisFirst ? 'first' : isLast ? 'last' : ''\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"name\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{option.name}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</SingleSelectCheckbox>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{option.timeInterval && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TimeIntervalDropdown>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"separator\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{option.name}</span>\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<DateSelectDropdown\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonSubmit={(range) =>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleDateSelectChanged &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleDateSelectChanged(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trange,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfacet.key\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttimeInterval={option.timeInterval}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TimeIntervalDropdown>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t</FilterOptionsContainer>\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t\t{facet.facetType === FacetTypeOf.bool && (\r\n\t\t\t\t\t\t\t\t\t\t<CheckboxWrapper isRegulationPage={isRegulationPage}>\r\n\t\t\t\t\t\t\t\t\t\t\t<LabelWrapper>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<legend>{facet.name}</legend>\r\n\t\t\t\t\t\t\t\t\t\t\t</LabelWrapper>\r\n\t\t\t\t\t\t\t\t\t\t\t<CheckboxesInline isRegulationPage={isRegulationPage}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={facet.facetOptions[0].selected}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tonCheckedChanged={(value: boolean) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonCheckboxChanged &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonCheckboxChanged(value, facet.key);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tisRegulationPage={isRegulationPage}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{facet.facetOptions[0].name}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Checkbox>\r\n\t\t\t\t\t\t\t\t\t\t\t</CheckboxesInline>\r\n\t\t\t\t\t\t\t\t\t\t</CheckboxWrapper>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</FilterBlock>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</React.Fragment>\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\r\n\t\t\t{isRegulationPage && sortModel && (\r\n\t\t\t\t<FieldsetInline isRegulationPage={isRegulationPage}>\r\n\t\t\t\t\t<LabelContainer>\r\n\t\t\t\t\t\t<LabelWrapper>\r\n\t\t\t\t\t\t\t<legend aria-label={sortModel.key}>{sortModel.name}</legend>\r\n\t\t\t\t\t\t</LabelWrapper>\r\n\t\t\t\t\t\t<RadioButtonContainer>\r\n\t\t\t\t\t\t\t{sortModel.sortOptionModels.map((option, index) => {\r\n\t\t\t\t\t\t\t\tconst selectedOpt = option.selected ? option.key : '';\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<Radio\r\n\t\t\t\t\t\t\t\t\t\tkey={option.key}\r\n\t\t\t\t\t\t\t\t\t\tid={option.key}\r\n\t\t\t\t\t\t\t\t\t\tlabel={option.name}\r\n\t\t\t\t\t\t\t\t\t\toptions={[{ id: option.key, value: option.name }]}\r\n\t\t\t\t\t\t\t\t\t\tselectedId={selectedOpt}\r\n\t\t\t\t\t\t\t\t\t\tonSelectedChanged={(option) =>\r\n\t\t\t\t\t\t\t\t\t\t\tonSortChanged && onSortChanged(option)\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t</RadioButtonContainer>\r\n\t\t\t\t\t</LabelContainer>\r\n\t\t\t\t</FieldsetInline>\r\n\t\t\t)}\r\n\t\t</FilterButtonContainer>\r\n\t);\r\n};\r\n\r\nexport default FilterDropdown;\r\n","/**\r\n * Pills - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\n\r\nexport const PillWrapper = styled.div`\r\n\tdisplay: flex;\r\n\tflex-wrap: wrap;\r\n`;\r\n\r\nexport const PillButton = styled.button`\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\t${(props) => props.theme.typography.style9.getStyle()};\r\n\tcolor: ${(props) => props.theme.colors.black};\r\n\tmargin-right: ${(props) => props.theme.spacing.space1}rem;\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space1}rem;\r\n\tpadding: 4px 16px 4px 8px;\r\n\tcursor: pointer;\r\n\tbackground-color: ${(props) => props.theme.colors.grey5};\r\n\tborder: 1px solid transparent;\r\n\r\n\tspan {\r\n\t\tpadding-top: 3px;\r\n\t}\r\n\r\n\tbutton::after {\r\n\t\tcontent: none;\r\n\t}\r\n\t&:hover {\r\n\t\tbackground-color: ${(props) => props.theme.colors.blue2};\r\n\t\tborder: 1px solid ${(props) => props.theme.colors.grey5};\r\n\t}\r\n`;\r\n","import { PillButton, PillWrapper } from './Pills.styles';\r\nimport Icon from 'components/Boilerplate/Icon';\r\n\r\n/**\r\n * Pills\r\n */\r\nexport type PillItem = {\r\n\tlabel: string;\r\n\tTypeFilter: string;\r\n\tkeyPill: string;\r\n};\r\n\r\nexport type PillsProps = {\r\n\titems: PillItem[];\r\n\tonRemove?: (item: string) => void;\r\n};\r\n\r\nexport const Pills: React.FC<PillsProps> = ({ items, onRemove }) => {\r\n\tconst ariaLabel = 'Ta bort sökord';\r\n\r\n\tconst onItemClicked = (item: string) => {\r\n\t\tif (onRemove) {\r\n\t\t\tonRemove(item);\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<PillWrapper>\r\n\t\t\t{items.map((p) => {\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<PillButton\r\n\t\t\t\t\t\tonClick={() => onItemClicked(p.label)}\r\n\t\t\t\t\t\tkey={p.keyPill}\r\n\t\t\t\t\t\taria-label={p.label ?? ariaLabel}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Icon size={2} icon=\"cross\" />\r\n\t\t\t\t\t\t<span>{p.label}</span>\r\n\t\t\t\t\t</PillButton>\r\n\t\t\t\t);\r\n\t\t\t})}\r\n\t\t</PillWrapper>\r\n\t);\r\n};\r\n\r\nexport default Pills;\r\n","import styled from 'styled-components';\r\nimport { accessibilityFocus } from 'theme/styles';\r\nimport { px2rem } from 'theme/utils';\r\n\r\nexport const AutocompleteContainer = styled.div`\r\n\tposition: relative;\r\n\twidth: 100%;\r\n`;\r\n\r\nexport const SuggestionsList = styled.ul`\r\n\tposition: absolute;\r\n\twidth: 100%;\r\n\tmax-height: 300px;\r\n\toverflow-y: hidden;\r\n\tbackground-color: #fff;\r\n\tlist-style-type: none;\r\n\tborder-radius: 8px;\r\n\tpadding: 0;\r\n\tmargin: 0;\r\n\tz-index: 1000;\r\n\tmargin-top: 4px;\r\n\tbox-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.25);\r\n\tpadding-top: ${px2rem(10)};\r\n\tpadding-bottom: ${px2rem(10)};\r\n\tli {\r\n\t\twidth: 100%;\r\n\t\tmax-width: none;\r\n\t}\r\n`;\r\n\r\nexport const SuggestionItem = styled.p<{\r\n\tisfocused: boolean;\r\n}>`\r\n\tcursor: pointer;\r\n\tmax-width: none;\r\n\twidth: 100%;\r\n\tmargin: 0;\r\n\tpadding: ${px2rem(2)} ${px2rem(12)} ${px2rem(2)} ${px2rem(12)};\r\n\tdisplay: block;\r\n\tspan {\r\n\t\t${(props) => props.theme.typography.style9.getStyle()};\r\n\t\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\t}\r\n\r\n\t&:hover {\r\n\t\tbackground-color: #f0f0f0;\r\n\t}\r\n\t${(props) => props.isfocused && accessibilityFocus()};\r\n`;\r\n\r\nexport const RegularText = styled.span`\r\n\tfont-weight: 400 !important;\r\n`;\r\n\r\nexport const HighlightedText = styled.span`\r\n\tfont-weight: 700 !important;\r\n\tcolor: ${(props) => props.theme.colors.primary} !important;\r\n`;\r\n","// Autocomplete.tsx\r\nimport React, { useState, useEffect, useRef, useCallback } from 'react';\r\nimport { fetchSuggestions } from 'api/epiApi';\r\nimport { ApiPath } from 'api/epiApi';\r\nimport { buildQueryString } from 'utils/helper-utils';\r\nimport { queryParameters } from 'components/SearchByListngPage/SearchByListngPage';\r\nimport {\r\n\tAutocompleteContainer,\r\n\tSuggestionsList,\r\n\tSuggestionItem,\r\n\tRegularText,\r\n\tHighlightedText,\r\n} from './Autocomplete.styles';\r\n\r\ninterface Props {\r\n\tquery: string;\r\n\tcurrentState: queryParameters;\r\n\tautoCompleteApi: string;\r\n\tonSubmit: (suggestion: string) => void;\r\n}\r\nconst Autocomplete: React.FC<Props> = ({\r\n\tquery,\r\n\tcurrentState,\r\n\tautoCompleteApi,\r\n\tonSubmit,\r\n}) => {\r\n\tconst [suggestions, setSuggestions] = useState<string[]>([]);\r\n\tconst [showSuggestions, setShowSuggestions] = useState(false);\r\n\tconst containerRef = useRef<HTMLDivElement>(null);\r\n\tconst [listIndex, setListIndex] = useState<number>(-1);\r\n\r\n\t/**checking if the query lenght is >= and getting suggestions from backend*/\r\n\tuseEffect(() => {\r\n\t\tif (query && query.length >= 3) {\r\n\t\t\tlet query = buildQueryParam(currentState);\r\n\t\t\tconst fetchAndSetSuggestions = async () => {\r\n\t\t\t\tconst suggestions = await fetchSuggestions('/', autoCompleteApi, query);\r\n\t\t\t\tsetSuggestions(suggestions);\r\n\t\t\t\tsuggestions && suggestions.length > 0\r\n\t\t\t\t\t? setShowSuggestions(true)\r\n\t\t\t\t\t: setShowSuggestions(false);\r\n\r\n\t\t\t\tsetListIndex(-1);\r\n\t\t\t};\r\n\t\t\tfetchAndSetSuggestions();\r\n\t\t} else {\r\n\t\t\tsetShowSuggestions(false);\r\n\t\t}\r\n\t}, [query]);\r\n\r\n\t/**focus helper */\r\n\tuseEffect(() => {\r\n\t\tif (showSuggestions) {\r\n\t\t\tif (containerRef.current) {\r\n\t\t\t\tcontainerRef.current.focus();\r\n\t\t\t}\r\n\t\t}\r\n\t}, [showSuggestions]);\r\n\r\n\tconst handleClickOutside = useCallback((event: MouseEvent) => {\r\n\t\tif (\r\n\t\t\tcontainerRef.current &&\r\n\t\t\t!containerRef.current.contains(event.target as Node)\r\n\t\t) {\r\n\t\t\tsetShowSuggestions(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst handleKeyDown = useCallback(\r\n\t\t(event: KeyboardEvent) => {\r\n\t\t\tif (event.key === 'Escape') {\r\n\t\t\t\tsetShowSuggestions(false);\r\n\t\t\t} else if (event.key === 'ArrowDown') {\r\n\t\t\t\tsetListIndex((prevIndex) =>\r\n\t\t\t\t\tprevIndex < suggestions.length - 1 ? prevIndex + 1 : prevIndex\r\n\t\t\t\t);\r\n\t\t\t} else if (event.key === 'ArrowUp') {\r\n\t\t\t\tsetListIndex((prevIndex) =>\r\n\t\t\t\t\tprevIndex > 0 ? prevIndex - 1 : prevIndex\r\n\t\t\t\t);\r\n\t\t\t} else if (event.key === 'Enter') {\r\n\t\t\t\tif (listIndex >= 0 && listIndex < suggestions.length) {\r\n\t\t\t\t\tonSubmit(suggestions[listIndex]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t[listIndex, suggestions?.length]\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\tdocument.addEventListener('mousedown', handleClickOutside);\r\n\t\tdocument.addEventListener('keydown', handleKeyDown);\r\n\r\n\t\treturn () => {\r\n\t\t\tdocument.removeEventListener('mousedown', handleClickOutside);\r\n\t\t\tdocument.removeEventListener('keydown', handleKeyDown);\r\n\t\t};\r\n\t}, [handleClickOutside, handleKeyDown]);\r\n\r\n\tconst escapeRegex = (s: string) => {\r\n\t\treturn s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n\t};\r\n\r\n\t/**we are styling the matched and unmatched suggestion text fragment */\r\n\tconst getStyledSuggestion = (suggestion: string) => {\r\n\t\tconst escapedQuery = escapeRegex(query);\r\n\t\tconst regex = new RegExp(`(${escapedQuery})`, 'gi'); // regex to match the query case-insensitively\r\n\r\n\t\tconst parts = suggestion.split(regex); // Split the suggestion by the query\r\n\t\t// Check if there is at least one match\r\n\t\tconst hasMatch = parts.some(\r\n\t\t\t(part) => part.toLowerCase() === query.toLowerCase()\r\n\t\t);\r\n\r\n\t\tif (!hasMatch) {\r\n\t\t\treturn <RegularText>{suggestion}</RegularText>;\r\n\t\t}\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t{parts.map((part, index) =>\r\n\t\t\t\t\tpart.toLowerCase() === query.toLowerCase() ? (\r\n\t\t\t\t\t\t<RegularText key={index}>{part}</RegularText>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<HighlightedText key={index}>{part}</HighlightedText>\r\n\t\t\t\t\t)\r\n\t\t\t\t)}\r\n\t\t\t</>\r\n\t\t);\r\n\t};\r\n\r\n\t/**building final query param for autocomplete api call */\r\n\tconst buildQueryParam = (params: queryParameters) => {\r\n\t\tconst queryParams = {} as queryParameters;\r\n\t\tconst searchURL = {} as queryParameters;\r\n\r\n\t\tqueryParams.p = params.p;\r\n\t\tsearchURL.p = params.p && params.p > 1 ? params.p : null;\r\n\t\tqueryParams.s = params.s ? params.s : 12;\r\n\t\tqueryParams.id = params.id;\r\n\t\tqueryParams.lang = params.lang;\r\n\t\tif (params.sortBy !== null) {\r\n\t\t\tqueryParams.sortBy = params.sortBy;\r\n\t\t\tsearchURL.sortBy = params.sortBy;\r\n\t\t}\r\n\t\tif (query) {\r\n\t\t\tsearchURL.q = query;\r\n\t\t\tqueryParams.q = query;\r\n\t\t}\r\n\r\n\t\t/* special treatment for facets */\r\n\t\tconst facetsArray = Object.entries(params.facets);\r\n\r\n\t\tconst encodesFilters = facetsArray\r\n\t\t\t.map(([key, values]) => {\r\n\t\t\t\tif (values.length > 0) {\r\n\t\t\t\t\tconst formattedValues = values.map((value) =>\r\n\t\t\t\t\t\tencodeURIComponent(value)\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn `${key}:${formattedValues.join(':')}`;\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t})\r\n\t\t\t.filter((filter) => filter !== null) // Remove null values\r\n\t\t\t.join(';');\r\n\r\n\t\tconst filtersURL = encodesFilters !== '' ? `facets=${encodesFilters}` : '';\r\n\r\n\t\t/* build URL */\r\n\t\tconst queryFormated = buildQueryString(searchURL);\r\n\r\n\t\tlet queryURL = '';\r\n\t\tif (filtersURL.length > 0) {\r\n\t\t\tqueryURL += filtersURL;\r\n\t\t}\r\n\t\tif (queryFormated.length > 0) {\r\n\t\t\tqueryURL += (queryURL.length > 0 ? '&' : '') + queryFormated;\r\n\t\t}\r\n\r\n\t\t/* fetch results */\r\n\t\tconst queryParamsURL =\r\n\t\t\tfiltersURL.length > 0\r\n\t\t\t\t? filtersURL + '&' + buildQueryString(queryParams)\r\n\t\t\t\t: buildQueryString(queryParams);\r\n\r\n\t\treturn queryParamsURL;\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{showSuggestions && (\r\n\t\t\t\t<AutocompleteContainer ref={containerRef}>\r\n\t\t\t\t\t<SuggestionsList tabIndex={0} aria-label=\"autocomplete suggestions\">\r\n\t\t\t\t\t\t{suggestions.map((suggestion, index) => (\r\n\t\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t\t<SuggestionItem\r\n\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\ttabIndex={0}\r\n\t\t\t\t\t\t\t\t\tisfocused={index === listIndex}\r\n\t\t\t\t\t\t\t\t\tonClick={() => onSubmit(suggestion)}\r\n\t\t\t\t\t\t\t\t\tonKeyDown={(event) => {\r\n\t\t\t\t\t\t\t\t\t\tif (event.key === 'Enter') {\r\n\t\t\t\t\t\t\t\t\t\t\tonSubmit(suggestion);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{getStyledSuggestion(suggestion)}\r\n\t\t\t\t\t\t\t\t</SuggestionItem>\r\n\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</SuggestionsList>\r\n\t\t\t\t</AutocompleteContainer>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default Autocomplete;\r\n","/**\r\n * SearchByListngPage\r\n */\r\n\r\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { fetchSearchResult, selectLocalization } from 'store/modules/model';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport { buildQueryString, debounce } from 'utils/helper-utils';\r\nimport {\r\n\tFacetOption,\r\n\tFacetTypeOf,\r\n\tSearchListingModel,\r\n} from './SearchByListngPage.model';\r\nimport {\r\n\tFiltersContainer,\r\n\tPillResetButton,\r\n\tPillsBlock,\r\n\tResultMessageHelper,\r\n\tSearchInputWrapper,\r\n\tSearchOverlappBlock,\r\n\tStyledSpan,\r\n} from './SearchByListngPage.styles';\r\nimport FilterDropdown from 'components/FilterDropdown';\r\nimport Button from 'components/Button';\r\nimport Pills from 'components/Pills';\r\nimport Autocomplete from 'components/Autocomplete';\r\nimport { PillItem } from 'components/Pills/Pills';\r\nimport { IconCross } from 'components/Boilerplate/Icon/IconCollection';\r\n\r\ninterface UpdatedFacets {\r\n\tfacets: {\r\n\t\t[key: string]: string[];\r\n\t};\r\n}\r\n\r\ninterface FacetsTypes {\r\n\t[key: string]: string[];\r\n}\r\n\r\nexport type queryParameters = {\r\n\tid: string;\r\n\tp: number | null;\r\n\ts: number;\r\n\tlang: string;\r\n\tq?: string;\r\n\tfacets: FacetsTypes;\r\n\tsortBy: string | null;\r\n};\r\n\r\ninterface Props {\r\n\t/** Description of this property */\r\n\tfilterLabel: string;\r\n\tsearchActionText: string;\r\n\tsearchTopic: string;\r\n\tsearchResultLabel: string | null;\r\n\tsearchResultLabelNoMatchesHint: string;\r\n\tsearchResultLabelNoMatches: string;\r\n\tsearchPlaceholder: string | null;\r\n\tsearchModel: SearchListingModel;\r\n\turl?: string;\r\n\trootPageId: string;\r\n\tclearAllFiltersText: string;\r\n\tpageChanged?: boolean;\r\n\tmodelType: string;\r\n\tsearchApi: string;\r\n\tautoCompleteApi: string;\r\n\t/**use this flag to hide/show clear all link */\r\n\tshowClearAll?: boolean;\r\n\t/**use this flag to hide/show no result feedback under search field */\r\n\tfilterEnabled?: boolean;\r\n}\r\n\r\n/** Main description for this component. */\r\nconst SearchByListngPage: React.FC<Props> = ({\r\n\tfilterLabel,\r\n\tsearchActionText,\r\n\tsearchTopic,\r\n\tsearchResultLabel,\r\n\tsearchPlaceholder,\r\n\tsearchResultLabelNoMatchesHint,\r\n\tsearchResultLabelNoMatches,\r\n\tsearchModel,\r\n\turl,\r\n\trootPageId,\r\n\tpageChanged = false,\r\n\tclearAllFiltersText,\r\n\tmodelType,\r\n\tsearchApi,\r\n\tautoCompleteApi,\r\n\tshowClearAll = false,\r\n\tfilterEnabled = false,\r\n}) => {\r\n\tconst history = useHistory();\r\n\tconst dispatch = useDispatch();\r\n\tconst localization = useSelector(selectLocalization);\r\n\tconst isNarrowDisplay = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.tablet - 1,\r\n\t});\r\n\tconst searchRef = useRef<HTMLInputElement | null>(null);\r\n\tconst [userQuery, setUserQuery] = useState<string>('');\r\n\tconst [pillItem, setPillItems] = useState<PillItem[]>([]);\r\n\tconst [showAutocomplete, setShowAutocomplete] = useState(true);\r\n\tconst isRegulationPage = modelType === 'NVseRegulationsListingPage';\r\n\r\n\t// destrcture seachModel //\r\n\tconst { query, page, size, facetModels, sortModel } = searchModel;\r\n\r\n\tconst getInitialParameters = (): queryParameters => {\r\n\t\treturn {\r\n\t\t\tq: query ?? '',\r\n\t\t\tp: page,\r\n\t\t\ts: size,\r\n\t\t\tid: rootPageId,\r\n\t\t\tlang: localization ? localization?.culture : 'sv',\r\n\t\t\tfacets: {},\r\n\t\t\tsortBy: null,\r\n\t\t};\r\n\t};\r\n\tconst [searchState, setSearchState] = useState<queryParameters>(\r\n\t\tgetInitialParameters()\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\thandleURLParameters(history.location);\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst handlePopState = (event: any) => {\r\n\t\t\tconst newSearchState = {\r\n\t\t\t\t...searchState,\r\n\t\t\t\tfacets: {},\r\n\t\t\t\tq: '',\r\n\t\t\t\tsortBy: null,\r\n\t\t\t\tp: 1,\r\n\t\t\t};\r\n\t\t\tconst currentURL = window.location.pathname;\r\n\t\t\tsetSearchState(newSearchState);\r\n\t\t\tsetPillItems([]);\r\n\t\t\texecuteSearch(newSearchState, currentURL);\r\n\t\t};\r\n\r\n\t\twindow.addEventListener('popstate', handlePopState);\r\n\r\n\t\t// Cleanup the event listener when the component unmounts\r\n\t\treturn () => {\r\n\t\t\twindow.removeEventListener('popstate', handlePopState);\r\n\t\t};\r\n\t}, [history]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (pageChanged) {\r\n\t\t\tconst newSearchState = {\r\n\t\t\t\t...searchState,\r\n\t\t\t\tp: searchModel.page,\r\n\t\t\t};\r\n\t\t\texecuteSearch(newSearchState);\r\n\t\t}\r\n\t}, [pageChanged]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (showClearAll) {\r\n\t\t\tresetAll();\r\n\t\t}\r\n\t}, [showClearAll]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!isRegulationPage) {\r\n\t\t\tupdatedPills();\r\n\t\t}\r\n\t}, [facetModels]);\r\n\r\n\t/** update date select pills */\r\n\tconst updatedDateSelectPills = (\r\n\t\tTypeFilter: string,\r\n\t\tfacetOptions: FacetOption[],\r\n\t\texistingPill: Set<string>,\r\n\t\tnewPillItems: PillItem[]\r\n\t) => {\r\n\t\t// Remove all pills associated with the current TypeFilter if facetType is dateSelect or singleSelect\r\n\t\tnewPillItems = newPillItems.filter(\r\n\t\t\t(pill) => pill.TypeFilter !== TypeFilter\r\n\t\t);\r\n\t\texistingPill.clear(); // Reset existing labels for this TypeFilter\r\n\r\n\t\tfacetOptions.forEach((option) => {\r\n\t\t\tif (option.key === 'selectableYears') {\r\n\t\t\t\tconst { timeInterval } = option;\r\n\t\t\t\tconst selectedYears = timeInterval?.selectableYears.filter(\r\n\t\t\t\t\t(year) => year.selected\r\n\t\t\t\t);\r\n\r\n\t\t\t\tif (selectedYears === undefined) return;\r\n\t\t\t\tif (selectedYears && selectedYears.length > 1) {\r\n\t\t\t\t\tconst minYear = Math.min(...selectedYears.map((year) => year.year));\r\n\t\t\t\t\tconst maxYear = Math.max(...selectedYears.map((year) => year.year));\r\n\r\n\t\t\t\t\t// Create a single pill with the combined years\r\n\t\t\t\t\tnewPillItems.push({\r\n\t\t\t\t\t\tlabel: `${minYear}-${maxYear}`,\r\n\t\t\t\t\t\tTypeFilter,\r\n\t\t\t\t\t\tkeyPill: `${minYear}-${maxYear}`,\r\n\t\t\t\t\t});\r\n\t\t\t\t\texistingPill.add(`${minYear}-${maxYear}`);\r\n\t\t\t\t} else if (selectedYears && selectedYears.length === 1) {\r\n\t\t\t\t\tlet kPLabel = selectedYears[0]?.year.toString();\r\n\t\t\t\t\tlet dateLabel: string = '';\r\n\t\t\t\t\tlet facets = getFacetsFromUrl();\r\n\t\t\t\t\tfacets &&\r\n\t\t\t\t\t\tfacets['ReleaseDate']?.map((item: string, index: number) => {\r\n\t\t\t\t\t\t\tif (option && option.timeInterval) {\r\n\t\t\t\t\t\t\t\tconst fromLabel = `${\r\n\t\t\t\t\t\t\t\t\toption.timeInterval.fromLabel ?? 'FrÃ¥n och med'\r\n\t\t\t\t\t\t\t\t} ${kPLabel}`;\r\n\t\t\t\t\t\t\t\tconst toLabel = `${\r\n\t\t\t\t\t\t\t\t\toption.timeInterval.toLabel ?? 'Till och med'\r\n\t\t\t\t\t\t\t\t} ${kPLabel}`;\r\n\r\n\t\t\t\t\t\t\t\tdateLabel =\r\n\t\t\t\t\t\t\t\t\titem.includes('F') && item.includes('T')\r\n\t\t\t\t\t\t\t\t\t\t? kPLabel\r\n\t\t\t\t\t\t\t\t\t\t: item.startsWith('F')\r\n\t\t\t\t\t\t\t\t\t\t? fromLabel\r\n\t\t\t\t\t\t\t\t\t\t: item.startsWith('T')\r\n\t\t\t\t\t\t\t\t\t\t? toLabel\r\n\t\t\t\t\t\t\t\t\t\t: '';\r\n\r\n\t\t\t\t\t\t\t\tkPLabel =\r\n\t\t\t\t\t\t\t\t\titem.includes('F') && item.includes('T')\r\n\t\t\t\t\t\t\t\t\t\t? `${kPLabel}-${kPLabel}`\r\n\t\t\t\t\t\t\t\t\t\t: kPLabel;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// Create a pill with that single year\r\n\t\t\t\t\tnewPillItems.push({\r\n\t\t\t\t\t\tlabel: dateLabel,\r\n\t\t\t\t\t\tTypeFilter,\r\n\t\t\t\t\t\tkeyPill: kPLabel,\r\n\t\t\t\t\t});\r\n\t\t\t\t\texistingPill.add(kPLabel);\r\n\t\t\t\t} else if (\r\n\t\t\t\t\tselectedYears !== undefined &&\r\n\t\t\t\t\tselectedYears.length > 0 &&\r\n\t\t\t\t\t!selectedYears[0].selected &&\r\n\t\t\t\t\texistingPill.has(selectedYears[0]?.year.toString())\r\n\t\t\t\t) {\r\n\t\t\t\t\tconst kPLabel = selectedYears[0]?.year.toString();\r\n\t\t\t\t\t// If no years are selected, remove any existing pills for this facet\r\n\t\t\t\t\tconst index = newPillItems.findIndex(\r\n\t\t\t\t\t\t(pill) => pill.keyPill === kPLabel\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (index > -1) {\r\n\t\t\t\t\t\tnewPillItems.splice(index, 1);\r\n\t\t\t\t\t\texistingPill.delete(kPLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tconst { name: optionName, selected, key: keyPill } = option;\r\n\r\n\t\t\t\tif (selected && !existingPill.has(keyPill)) {\r\n\t\t\t\t\tnewPillItems.push({\r\n\t\t\t\t\t\tlabel: optionName,\r\n\t\t\t\t\t\tTypeFilter,\r\n\t\t\t\t\t\tkeyPill: keyPill,\r\n\t\t\t\t\t});\r\n\t\t\t\t\texistingPill.add(keyPill);\r\n\t\t\t\t} else if (!selected && existingPill.has(keyPill)) {\r\n\t\t\t\t\tconst index = newPillItems.findIndex(\r\n\t\t\t\t\t\t(pill) => pill.keyPill === keyPill\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (index > -1) {\r\n\t\t\t\t\t\tnewPillItems.splice(index, 1);\r\n\t\t\t\t\t\texistingPill.delete(keyPill);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn newPillItems;\r\n\t};\r\n\r\n\t/* get pill if exist a selected filter */\r\n\tconst updatedPills = () => {\r\n\t\tif (!facetModels) return;\r\n\r\n\t\tconst existingPill = new Set(pillItem.map((item) => item.keyPill));\r\n\t\tlet newPillItems = [...pillItem];\r\n\r\n\t\tfacetModels.forEach((item) => {\r\n\t\t\tconst { key: TypeFilter, facetType, facetOptions } = item;\r\n\t\t\tif (facetType === 'bool') {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (facetType === 'dateSelect') {\r\n\t\t\t\tnewPillItems = updatedDateSelectPills(\r\n\t\t\t\t\tTypeFilter,\r\n\t\t\t\t\tfacetOptions,\r\n\t\t\t\t\texistingPill,\r\n\t\t\t\t\tnewPillItems\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (facetType === 'singleSelect') {\r\n\t\t\t\t// Remove all pills associated with the current TypeFilter if facetType is dateSelect or singleSelect\r\n\t\t\t\tnewPillItems = newPillItems.filter(\r\n\t\t\t\t\t(pill) => pill.TypeFilter !== TypeFilter\r\n\t\t\t\t);\r\n\t\t\t\texistingPill.clear(); // Reset existing labels for this TypeFilter\r\n\t\t\t}\r\n\r\n\t\t\tif (facetType !== 'dateSelect') {\r\n\t\t\t\tfacetOptions.forEach((option) => {\r\n\t\t\t\t\tconst { name: optionName, selected, key: keyPill } = option;\r\n\r\n\t\t\t\t\tif (selected && !existingPill.has(keyPill)) {\r\n\t\t\t\t\t\tnewPillItems.push({\r\n\t\t\t\t\t\t\tlabel: optionName,\r\n\t\t\t\t\t\t\tTypeFilter,\r\n\t\t\t\t\t\t\tkeyPill: option.key,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\texistingPill.add(keyPill);\r\n\t\t\t\t\t} else if (!selected && existingPill.has(keyPill)) {\r\n\t\t\t\t\t\tconst index = newPillItems.findIndex(\r\n\t\t\t\t\t\t\t(pill) => pill.keyPill === keyPill\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tif (index > -1) {\r\n\t\t\t\t\t\t\tnewPillItems.splice(index, 1);\r\n\t\t\t\t\t\t\texistingPill.delete(keyPill);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tsetPillItems(newPillItems);\r\n\t};\r\n\r\n\tconst onPillRemove = (pill: PillItem, flag: boolean) => {\r\n\t\tconst updatePills = pillItem.filter(\r\n\t\t\t(item) => item.keyPill !== pill.keyPill\r\n\t\t);\r\n\t\tconst updatedFacets: UpdatedFacets = { facets: { ...searchState.facets } };\r\n\t\tif (pill) {\r\n\t\t\tif (updatedFacets.facets.hasOwnProperty(pill.TypeFilter)) {\r\n\t\t\t\tif (pill.TypeFilter === 'ReleaseDate') {\r\n\t\t\t\t\t// Remove 'F' and 'T' from the string and update the value in updatedFacets\r\n\t\t\t\t\tupdatedFacets.facets[pill.TypeFilter] = updatedFacets.facets[\r\n\t\t\t\t\t\tpill.TypeFilter\r\n\t\t\t\t\t].map((date) => date.replace('F', '').replace('T', ''));\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (updatedFacets.facets[pill.TypeFilter].includes(pill.keyPill)) {\r\n\t\t\t\t\tupdatedFacets.facets[pill.TypeFilter] = updatedFacets.facets[\r\n\t\t\t\t\t\tpill.TypeFilter\r\n\t\t\t\t\t].filter((opt) => opt !== pill.keyPill);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst newSearchState = {\r\n\t\t\t...searchState,\r\n\t\t\t...updatedFacets,\r\n\t\t};\r\n\t\tsetPillItems(updatePills);\r\n\t\tsetSearchState(newSearchState);\r\n\t\t// flag tell if make request update or not. If it comes from onFilterChanged no need\r\n\t\tif (flag) {\r\n\t\t\tdebouncedExecuteSearch(newSearchState, '');\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleURLParameters = (location: any) => {\r\n\t\tif (location.search.length < 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// Decode URL parameters\r\n\t\tconst urlParams = new URLSearchParams(location.search);\r\n\t\tconst facets = urlParams.get('facets');\r\n\t\tconst query = urlParams.get('q');\r\n\t\tconst sortBy = urlParams.get('sortBy');\r\n\t\tconst page = urlParams.get('p');\r\n\r\n\t\tconst p = page ? parseInt(page, 10) : 1;\r\n\r\n\t\t// Split facets\r\n\t\tlet splitedFacets = facets?.split(';') || [];\r\n\t\tlet ff: { [key: string]: string[] } = {};\r\n\r\n\t\tsplitedFacets.forEach((facet) => {\r\n\t\t\tconst [key, ...values] = facet.split(':');\r\n\t\t\tconst decodedValues = values.map((value) => decodeURIComponent(value));\r\n\r\n\t\t\tif (!ff[key]) {\r\n\t\t\t\tff[key] = [];\r\n\t\t\t}\r\n\t\t\tff[key] = ff[key].concat(decodedValues);\r\n\t\t});\r\n\r\n\t\t// Update search bar if query exists\r\n\t\tsetUserQuery(query ?? '');\r\n\r\n\t\t// Update newSearchState with URL params\r\n\t\tconst newSearchState = {\r\n\t\t\t...searchState,\r\n\t\t\tfacets: ff,\r\n\t\t\tq: query ?? '',\r\n\t\t\tsortBy: sortBy ?? searchState.sortBy,\r\n\t\t\tp: p,\r\n\t\t};\r\n\t\tsetSearchState(newSearchState);\r\n\r\n\t\t// need compare if newSearchState is same as const { query, page, size, facetModels } = searchModel;\r\n\t\tif (\r\n\t\t\tnewSearchState.q !== searchModel.query ||\r\n\t\t\tnewSearchState.p !== searchModel.page\r\n\t\t) {\r\n\t\t\texecuteSearch(newSearchState);\r\n\t\t} else {\r\n\t\t\tconst keys = Object.keys(newSearchState.facets);\r\n\r\n\t\t\t// contemplate facetModels\r\n\t\t\tsearchModel.facetModels.forEach((facetModel) => {\r\n\t\t\t\tconst facetKey = facetModel.key;\r\n\t\t\t\tif (keys.includes(facetKey)) {\r\n\t\t\t\t\tfacetModel.facetOptions.forEach((facetOption) => {\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t!facetOption.selected &&\r\n\t\t\t\t\t\t\tfacetOption.key === newSearchState.facets[facetKey]?.[0]\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\texecuteSearch(newSearchState);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\t/* search actions */\r\n\r\n\tconst handleUserQuery = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n\t\tsetUserQuery(event.target.value);\r\n\t\tsetShowAutocomplete(true);\r\n\t};\r\n\r\n\tconst handleSubmit = (event: any) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tif (userQuery.length > 0) {\r\n\t\t\tconst params = {\r\n\t\t\t\t...searchState,\r\n\t\t\t\tq: userQuery,\r\n\t\t\t\tp: 1,\r\n\t\t\t};\r\n\t\t\tsetSearchState(params);\r\n\t\t\texecuteSearch(params);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleCheckboxChange = (checked: boolean, filterTypeOf: string) => {\r\n\t\tconst updatedFacets: UpdatedFacets = {\r\n\t\t\tfacets: { ...searchState.facets },\r\n\t\t};\r\n\t\tif (checked) {\r\n\t\t\t// If checked, add or update the facet with the boolean as a string\r\n\t\t\tupdatedFacets.facets[filterTypeOf] = [checked.toString()];\r\n\t\t} else {\r\n\t\t\t// If unchecked, remove only the specific facet\r\n\t\t\tdelete updatedFacets.facets[filterTypeOf];\r\n\t\t}\r\n\r\n\t\tconst params = {\r\n\t\t\t...searchState,\r\n\t\t\t...updatedFacets,\r\n\t\t\tp: 1,\r\n\t\t};\r\n\t\tsetSearchState(params);\r\n\t\texecuteSearch(params);\r\n\t};\r\n\r\n\tconst resetSearch = () => {\r\n\t\tsetUserQuery('');\r\n\r\n\t\tif (searchState.q) {\r\n\t\t\tconst params = {\r\n\t\t\t\t...searchState,\r\n\t\t\t\tq: '',\r\n\t\t\t\tp: searchState.p ?? 1,\r\n\t\t\t};\r\n\t\t\tsetSearchState(params);\r\n\t\t\texecuteSearch(params);\r\n\t\t}\r\n\t};\r\n\r\n\t/* filters actions */\r\n\r\n\tconst resetFilters = () => {\r\n\t\tsetPillItems([]);\r\n\t\tconst newSearchState = {\r\n\t\t\t...searchState,\r\n\t\t\tfacets: {},\r\n\t\t\tsortBy: null,\r\n\t\t};\r\n\r\n\t\tsetSearchState(newSearchState);\r\n\t\texecuteSearch(newSearchState);\r\n\t};\r\n\r\n\tconst resetAll = () => {\r\n\t\tsetPillItems([]);\r\n\t\tsetUserQuery('');\r\n\t\tconst newSearchState = {\r\n\t\t\t...searchState,\r\n\t\t\tfacets: {},\r\n\t\t\tsortBy: null,\r\n\t\t\tq: '',\r\n\t\t\tp: 1,\r\n\t\t};\r\n\t\tsetSearchState(newSearchState);\r\n\t\texecuteSearch(newSearchState);\r\n\t};\r\n\r\n\tconst onFilterChanged = (filter: any, typeOfFacet: FacetTypeOf) => {\r\n\t\tconst target = filter.target;\r\n\t\tconst filterTypeOf = target.getAttribute('data-filter-typeof');\r\n\t\tconst checkboxValue = target.value.trim();\r\n\t\tconst pillName = target.name;\r\n\t\tconst updatedFacets: UpdatedFacets = {\r\n\t\t\tfacets: { ...searchState.facets },\r\n\t\t};\r\n\r\n\t\tif (updatedFacets.facets.hasOwnProperty(filterTypeOf)) {\r\n\t\t\tif (updatedFacets.facets[filterTypeOf].includes(checkboxValue)) {\r\n\t\t\t\t// if true > user click unchecked existing opt & remove pill\r\n\t\t\t\tupdatedFacets.facets[filterTypeOf] = updatedFacets.facets[\r\n\t\t\t\t\tfilterTypeOf\r\n\t\t\t\t].filter((opt) => opt !== checkboxValue);\r\n\t\t\t\tonPillRemove(\r\n\t\t\t\t\t{ label: pillName, TypeFilter: filterTypeOf, keyPill: checkboxValue },\r\n\t\t\t\t\tfalse\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\t// add the opt to array\r\n\t\t\t\tif (typeOfFacet === FacetTypeOf.multiSelect) {\r\n\t\t\t\t\tupdatedFacets.facets[filterTypeOf] = [\r\n\t\t\t\t\t\t...updatedFacets.facets[filterTypeOf],\r\n\t\t\t\t\t\tcheckboxValue,\r\n\t\t\t\t\t];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tupdatedFacets.facets[filterTypeOf] = [checkboxValue];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// if not exist i create it\r\n\t\t\tupdatedFacets.facets[filterTypeOf] = [checkboxValue];\r\n\t\t}\r\n\r\n\t\tconst newSearchState = {\r\n\t\t\t...searchState,\r\n\t\t\t...updatedFacets,\r\n\t\t\tp: 1,\r\n\t\t};\r\n\r\n\t\tsetSearchState(newSearchState);\r\n\t\texecuteSearch(newSearchState);\r\n\t};\r\n\r\n\tconst onDateSelectChanged = (\r\n\t\trange: { from: number; to: number },\r\n\t\tfilterTypeOf: string\r\n\t) => {\r\n\t\tconst updatedFacets: any = {\r\n\t\t\tfacets: { ...searchState.facets },\r\n\t\t};\r\n\r\n\t\tconst startYear = 'F';\r\n\t\tconst endYear = 'T';\r\n\r\n\t\t// Build the facet string\r\n\t\tif (range.from && range.to) {\r\n\t\t\tupdatedFacets.facets[filterTypeOf] = [\r\n\t\t\t\tstartYear + range.from + '-' + endYear + range.to,\r\n\t\t\t];\r\n\t\t} else if (range.from) {\r\n\t\t\tupdatedFacets.facets[filterTypeOf] = [startYear + range.from];\r\n\t\t} else if (range.to) {\r\n\t\t\tupdatedFacets.facets[filterTypeOf] = [endYear + range.to];\r\n\t\t} else if (range.from === null && range.to === null) {\r\n\t\t\tupdatedFacets.facets = {};\r\n\t\t}\r\n\r\n\t\tconst newSearchState = {\r\n\t\t\t...searchState,\r\n\t\t\t...updatedFacets,\r\n\t\t\tp: 1,\r\n\t\t};\r\n\r\n\t\tsetSearchState(newSearchState);\r\n\t\texecuteSearch(newSearchState);\r\n\t};\r\n\r\n\t/**autocomplete submit function */\r\n\tconst handleAutocompleteSubmit = (suggestion: string) => {\r\n\t\tif (suggestion.length > 0) {\r\n\t\t\tconst params = {\r\n\t\t\t\t...searchState,\r\n\t\t\t\tq: suggestion,\r\n\t\t\t\tp: 1,\r\n\t\t\t};\r\n\t\t\tsetSearchState(params);\r\n\t\t\texecuteSearch(params);\r\n\t\t\tsetUserQuery(suggestion);\r\n\t\t}\r\n\t};\r\n\r\n\tconst executeSearch = (params: queryParameters, currentURL: string = '') => {\r\n\t\tconst queryParams = {} as queryParameters;\r\n\t\tconst searchURL = {} as queryParameters;\r\n\r\n\t\tqueryParams.p = params.p;\r\n\t\tsearchURL.p = params.p && params.p > 1 ? params.p : null;\r\n\t\tqueryParams.s = params.s ? params.s : 12;\r\n\t\tqueryParams.id = params.id;\r\n\t\tqueryParams.lang = params.lang;\r\n\t\tqueryParams.sortBy = params.sortBy ? params.sortBy : null;\r\n\r\n\t\tif (params.q) {\r\n\t\t\tqueryParams.q = params.q.trimStart();\r\n\t\t\tsearchURL.q = queryParams.q;\r\n\t\t}\r\n\r\n\t\t/* special treatment for facets */\r\n\t\tconst facetsArray = Object.entries(params.facets);\r\n\r\n\t\tconst encodesFilters = facetsArray\r\n\t\t\t.map(([key, values]) => {\r\n\t\t\t\tif (values.length > 0) {\r\n\t\t\t\t\tconst formattedValues = values.map((value) =>\r\n\t\t\t\t\t\tencodeURIComponent(value)\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\treturn `${key}:${formattedValues.join(':')}`;\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t})\r\n\t\t\t.filter((filter) => filter !== null) // Remove null values\r\n\t\t\t.join(';');\r\n\r\n\t\tconst filtersURL = encodesFilters !== '' ? `facets=${encodesFilters}` : '';\r\n\t\tconst sortURL = params.sortBy ? `sortBy=${params.sortBy}` : null;\r\n\r\n\t\t/* build URL */\r\n\t\tconst queryFormated = searchURL ? buildQueryString(searchURL) : '';\r\n\r\n\t\tlet queryURL = '';\r\n\t\tif (filtersURL.length > 0) {\r\n\t\t\tqueryURL += filtersURL;\r\n\t\t}\r\n\t\tif (queryFormated.length > 0) {\r\n\t\t\tqueryURL += (queryURL.length > 0 ? '&' : '') + queryFormated;\r\n\t\t}\r\n\r\n\t\tif (sortURL) {\r\n\t\t\tqueryURL += (queryURL.length > 0 ? '&' : '') + sortURL;\r\n\t\t}\r\n\r\n\t\tlet URL = currentURL.length > 0 && currentURL !== url ? currentURL : url;\r\n\t\thistory.push({ pathname: URL, search: queryURL });\r\n\r\n\t\t/* fetch results */\r\n\t\tconst queryParamsURL =\r\n\t\t\tfiltersURL.length > 0\r\n\t\t\t\t? filtersURL + '&' + buildQueryString(queryParams)\r\n\t\t\t\t: buildQueryString(queryParams);\r\n\r\n\t\tsetShowAutocomplete(false);\r\n\t\tdispatch(\r\n\t\t\tfetchSearchResult(\r\n\t\t\t\tmodelType,\r\n\t\t\t\trootPageId,\r\n\t\t\t\t'searchResponse',\r\n\t\t\t\t'/',\r\n\t\t\t\tsearchApi,\r\n\t\t\t\tqueryParamsURL\r\n\t\t\t)\r\n\t\t);\r\n\t};\r\n\r\n\t/** debounce function to execute search after 350ms */\r\n\tconst debouncedExecuteSearch = useCallback(\r\n\t\tdebounce((params: queryParameters, currentURL: string) => {\r\n\t\t\texecuteSearch(params, currentURL);\r\n\t\t}, 350),\r\n\t\t[]\r\n\t);\r\n\t/* \r\n\r\n\tconst debouncedSetPillItems = debounce(\r\n\t\t(updateFunction: (prevPillItems: any[]) => any[]) => {\r\n\t\t\tsetPillItems(updateFunction);\r\n\t\t},\r\n\t\t150\r\n\t); */\r\n\r\n\t// #radio button\r\n\tconst toogleRadioBtn = (optSelected: string | null) => {\r\n\t\tconst newSearchState = {\r\n\t\t\t...searchState,\r\n\t\t\tsortBy: optSelected,\r\n\t\t\tpage: 1,\r\n\t\t};\r\n\t\tsetSearchState(newSearchState);\r\n\t\texecuteSearch(newSearchState);\r\n\t};\r\n\r\n\tconst getFacetsFromUrl = () => {\r\n\t\tlet urlParams = new URLSearchParams(history.location.search);\r\n\t\tlet facets: any = urlParams.get('facets');\r\n\r\n\t\tlet splitedFacets = facets?.split(';') || [];\r\n\t\tlet ff: { [key: string]: string[] } = {};\r\n\r\n\t\tsplitedFacets.forEach((facet: string) => {\r\n\t\t\tconst [key, ...values] = facet.split(':');\r\n\t\t\tconst decodedValues = values.map((value) => decodeURIComponent(value));\r\n\r\n\t\t\tif (!ff[key]) {\r\n\t\t\t\tff[key] = [];\r\n\t\t\t}\r\n\t\t\tff[key] = ff[key].concat(decodedValues);\r\n\t\t});\r\n\r\n\t\treturn ff;\r\n\t};\r\n\r\n\treturn (\r\n\t\t<SearchOverlappBlock isRegulationPage={isRegulationPage}>\r\n\t\t\t<form onSubmit={handleSubmit} role=\"search\">\r\n\t\t\t\t{/* SEARCH */}\r\n\t\t\t\t<label\r\n\t\t\t\t\tclassName={!isRegulationPage ? 'as-h3' : undefined}\r\n\t\t\t\t\thtmlFor=\"userListingInputQuery\"\r\n\t\t\t\t>\r\n\t\t\t\t\t{searchTopic}\r\n\t\t\t\t</label>\r\n\t\t\t\t<SearchInputWrapper isRegulationPage={isRegulationPage}>\r\n\t\t\t\t\t<div className=\"autocomplete-section\">\r\n\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\tid=\"userListingInputQuery\"\r\n\t\t\t\t\t\t\tplaceholder={searchPlaceholder ?? ''}\r\n\t\t\t\t\t\t\taria-label={searchActionText}\r\n\t\t\t\t\t\t\tmaxLength={200}\r\n\t\t\t\t\t\t\tvalue={userQuery}\r\n\t\t\t\t\t\t\tref={searchRef}\r\n\t\t\t\t\t\t\tonChange={(event) => handleUserQuery(event)}\r\n\t\t\t\t\t\t\tautoComplete=\"off\"\r\n\t\t\t\t\t\t\tenterKeyHint=\"search\"\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t{userQuery.length >= 1 && (\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclassName=\"search-close-icon\"\r\n\t\t\t\t\t\t\t\tonClick={resetSearch}\r\n\t\t\t\t\t\t\t\ttabIndex={0}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<IconCross\r\n\t\t\t\t\t\t\t\t\twidth=\"24px\"\r\n\t\t\t\t\t\t\t\t\theight=\"24px\"\r\n\t\t\t\t\t\t\t\t\taria-label=\"clean input field\"\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showAutocomplete && (\r\n\t\t\t\t\t\t\t<Autocomplete\r\n\t\t\t\t\t\t\t\tquery={userQuery}\r\n\t\t\t\t\t\t\t\tonSubmit={handleAutocompleteSubmit}\r\n\t\t\t\t\t\t\t\tcurrentState={searchState}\r\n\t\t\t\t\t\t\t\tautoCompleteApi={autoCompleteApi}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<Button aria-label={searchActionText} type=\"submit\">\r\n\t\t\t\t\t\t\t{searchActionText}\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</>\r\n\t\t\t\t</SearchInputWrapper>\r\n\t\t\t\t{query && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t{searchResultLabel?.length && searchModel.numberOfHits > 0 ? (\r\n\t\t\t\t\t\t\t<ResultMessageHelper>\r\n\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t{searchResultLabel.split('{0}').map((part, index) => {\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t<React.Fragment key={index}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{part}\r\n\t\t\t\t\t\t\t\t\t\t\t\t{index > 0 && <StyledSpan>\"{query}\"</StyledSpan>}\r\n\t\t\t\t\t\t\t\t\t\t\t</React.Fragment>\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t</ResultMessageHelper>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t!filterEnabled && (\r\n\t\t\t\t\t\t\t\t<ResultMessageHelper>\r\n\t\t\t\t\t\t\t\t\t<span className=\"span-flex\">\r\n\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t{searchResultLabelNoMatches.replace('{0}', query)}\r\n\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t<span className=\"as-label\">\r\n\t\t\t\t\t\t\t\t\t\t\t{searchResultLabelNoMatchesHint}\r\n\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t</ResultMessageHelper>\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t</form>\r\n\r\n\t\t\t{/* FILTERS */}\r\n\t\t\t{!isRegulationPage && (\r\n\t\t\t\t<FiltersContainer>\r\n\t\t\t\t\t<label className=\"as-h4\" htmlFor=\"userListingFilter\">\r\n\t\t\t\t\t\t{filterLabel}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t</FiltersContainer>\r\n\t\t\t)}\r\n\r\n\t\t\t<FilterDropdown\r\n\t\t\t\tfacetModels={facetModels}\r\n\t\t\t\tonChange={onFilterChanged}\r\n\t\t\t\tonDateSelectChanged={onDateSelectChanged}\r\n\t\t\t\tonCheckboxChanged={handleCheckboxChange}\r\n\t\t\t\tsortModel={sortModel}\r\n\t\t\t\tonSortChanged={toogleRadioBtn}\r\n\t\t\t\tisRegulationPage={isRegulationPage}\r\n\t\t\t/>\r\n\r\n\t\t\t{!isRegulationPage && (\r\n\t\t\t\t<PillsBlock>\r\n\t\t\t\t\t{pillItem.length > 0 &&\r\n\t\t\t\t\t\tpillItem.map((pill, index) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t<Pills\r\n\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\titems={[pill]}\r\n\t\t\t\t\t\t\t\t\tonRemove={() => onPillRemove(pill, true)}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t{pillItem.length > 1 && (\r\n\t\t\t\t\t\t<PillResetButton onClick={resetFilters}>\r\n\t\t\t\t\t\t\t<span>{clearAllFiltersText}</span>\r\n\t\t\t\t\t\t</PillResetButton>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</PillsBlock>\r\n\t\t\t)}\r\n\t\t</SearchOverlappBlock>\r\n\t);\r\n};\r\n\r\nexport default SearchByListngPage;\r\n","import Button from 'components/Button';\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\nimport { px2rem } from 'theme/utils';\r\n\r\nexport const ListPageShowMoreButton = styled(Button)`\r\n\tpadding: ${px2rem(12)} ${px2rem(50)};\r\n`;\r\n\r\nexport const ListPageShowMoreButtonContainer = styled.div`\r\n\tjustify-content: center;\r\n\tdisplay: flex;\r\n\tpadding-top: ${(props) => props.theme.spacing.space5}rem;\r\n\t${mediaQueries.phone} {\r\n\t\tpadding-top: ${(props) => props.theme.spacing.space6}rem;\r\n\t}\r\n\tbutton {\r\n\t\t${mediaQueries.phone} {\r\n\t\t\twidth: 100%;\r\n\t\t\tdisplay: flex;\r\n\t\t\tjustify-content: center;\r\n\t\t}\r\n\t}\r\n`;\r\n","import { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport React from 'react';\r\nimport {\r\n\tListPageShowMoreButton,\r\n\tListPageShowMoreButtonContainer,\r\n} from './ListPageShowMoreButton.styles';\r\n\r\ntype ShowMoreButtonProps = {\r\n\theader: string | null;\r\n\tonClick?: () => void;\r\n};\r\n\r\nexport const ListingPageShowMoreButton: React.FC<ShowMoreButtonProps> = ({\r\n\theader,\r\n\tonClick,\r\n}) => {\r\n\treturn (\r\n\t\t<ListPageShowMoreButtonContainer>\r\n\t\t\t<ListPageShowMoreButton\r\n\t\t\t\tvariant={ButtonVariant.Tertiary}\r\n\t\t\t\tonClick={onClick}\r\n\t\t\t>\r\n\t\t\t\t{header}\r\n\t\t\t</ListPageShowMoreButton>\r\n\t\t</ListPageShowMoreButtonContainer>\r\n\t);\r\n};\r\n","/**\r\n * NVseStandardListingPage - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\nimport { accessibilityFocus } from 'theme/styles';\r\nimport { px2rem } from 'theme/utils';\r\n\r\ntype IsRegulationPageProps = {\r\n\tisRegulationPage?: boolean;\r\n};\r\nexport const ClearAllLinkContainer = styled.div`\r\n\t${(props) => props.theme.typography.style4.getStyle()};\r\n\r\n\tpadding-left: ${(props) => props.theme.spacing.space4}rem;\r\n\t${mediaQueries.phone} {\r\n\t\tpadding-left: ${(props) => props.theme.spacing.space2}rem;\r\n\t}\r\n\th4 {\r\n\t\tmargin-bottom: ${px2rem(8)};\r\n\t\tmargin-top: ${px2rem(16)};\r\n\t}\r\n\tspan {\r\n\t\tline-height: ${px2rem(48)};\r\n\t\t&:hover {\r\n\t\t\ttext-decoration: underline;\r\n\t\t\tcursor: pointer;\r\n\t\t}\r\n\t\t&:focus {\r\n\t\t\ttext-decoration: underline;\r\n\t\t\t${accessibilityFocus()};\r\n\t\t}\r\n\t\tcolor: ${(props) => props.theme.colors.secondaryBlue};\r\n\t}\r\n`;\r\n\r\nexport const IndexLabel = styled.h2`\r\n\t${(props) => props.theme.typography.style2.getStyle()};\r\n`;\r\n\r\nexport const TotalCountDisplay = styled.div<IsRegulationPageProps>`\r\n\tmargin-top: ${(props) => props.theme.spacing.space2}rem;\r\n\tpadding-left: ${(props) => props.theme.spacing.space4}rem;\r\n\tcolor: ${(props) => props.theme.colors.primary};\r\n\t${mediaQueries.phone} {\r\n\t\tpadding-left: ${(props) =>\r\n\t\t\tprops.isRegulationPage ? 0 : props.theme.spacing.space2}rem;\r\n\t\tmargin-top: ${(props) => props.theme.spacing.space1}rem;\r\n\t}\r\n\th4 {\r\n\t\tmargin-bottom: 0;\r\n\t\t${mediaQueries.phone} {\r\n\t\t\t${(props) =>\r\n\t\t\t\tprops.isRegulationPage\r\n\t\t\t\t\t? props.theme.typography.style2.getStyle()\r\n\t\t\t\t\t: props.theme.typography.style4.getStyle()}\r\n\t\t}\r\n\t}\r\n`;\r\n","import styled from 'styled-components';\r\nimport { px2rem } from 'theme/utils';\r\n\r\nexport const FilterModalContainer = styled.div<{ state: string }>`\r\n\tposition: fixed;\r\n\tbottom: ${({ state }) => (state === 'entered' ? '0' : '-100%')};\r\n\tleft: 0;\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\tbackground-color: ${(props) => props.theme.colors.white};\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tjustify-content: space-between;\r\n\ttransition: bottom 0.3s ease-in-out;\r\n\tz-index: 1000;\r\n`;\r\n\r\nexport const FilterModalContent = styled.div`\r\n\tbackground-color: ${(props) => props.theme.colors.white};\r\n\tpadding-bottom: ${(props) => props.theme.spacing.space3}rem;\r\n\toverflow: auto;\r\n\tflex-grow: 1;\r\n`;\r\n\r\nexport const FilterModalHeader = styled.div`\r\n\tbackground-color: ${(props) => props.theme.colors.primary};\r\n\tcolor: ${(props) => props.theme.colors.white};\r\n\tpadding: ${px2rem(22)} ${(props) => props.theme.spacing.space2}rem;\r\n\twidth: 100%;\r\n\theight: ${px2rem(100)};\r\n\tposition: sticky;\r\n\tdisplay: flex;\r\n\tjustify-content: space-between;\r\n\talign-items: start;\r\n\ttop: 0;\r\n\tz-index: 1;\r\n\th4 {\r\n\t\tcolor: ${(props) => props.theme.colors.white};\r\n\t\tfont-weight: 700;\r\n\t\tmargin: 0;\r\n\t\tfont-size: ${px2rem(24)};\r\n\t\tline-height: ${px2rem(33)};\r\n\t}\r\n\tspan {\r\n\t\tright: -10px;\r\n\t\tposition: relative;\r\n\t}\r\n\tButton {\r\n\t\tcolor: ${(props) => props.theme.colors.white};\r\n\t}\r\n`;\r\n\r\nexport const FilterModalFooter = styled.div<{ filterFlag: boolean }>`\r\n\tbackground-color: ${(props) => props.theme.colors.white};\r\n\tcolor: ${(props) => props.theme.colors.white};\r\n\tpadding: ${px2rem(20)} ${px2rem(16)};\r\n\twidth: 100%;\r\n\tposition: sticky;\r\n\tbottom: 0;\r\n\tz-index: 1;\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tjustify-content: center;\r\n\tgap: 10px;\r\n\tbutton {\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: center;\r\n\t}\r\n\t.mobile-clearall-btn {\r\n\t\t${({ filterFlag, theme }) =>\r\n\t\t\t!filterFlag &&\r\n\t\t\t`\r\n background-color: #DDDDDD;\r\n border: 1px solid ${theme.colors.grey1};\r\n color: ${theme.colors.grey1};\r\n cursor: not-allowed;\r\n `}\r\n\t}\r\n`;\r\n","import React, { useEffect, useRef } from 'react';\r\nimport {\r\n\tFilterModalContainer,\r\n\tFilterModalContent,\r\n\tFilterModalFooter,\r\n\tFilterModalHeader,\r\n} from './FilterModal.styles';\r\nimport Button from 'components/Button';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport { H4 } from 'components/Typography';\r\nimport Icon from 'components/Boilerplate/Icon';\r\nimport { Transition } from 'react-transition-group';\r\n\r\ninterface Props {\r\n\tfilteredCount: number;\r\n\tclearAllText: string;\r\n\tfilterLabel: string;\r\n\tfilterExist: boolean;\r\n\tshowFilterModal: boolean;\r\n\tonClose: () => void;\r\n\tonMobileSubmit: () => void;\r\n\tonClear: () => void;\r\n}\r\n\r\nconst FilterModal: React.FC<Props> = ({\r\n\tchildren,\r\n\tfilteredCount,\r\n\tclearAllText,\r\n\tfilterLabel,\r\n\tfilterExist,\r\n\tshowFilterModal,\r\n\tonClose,\r\n\tonClear,\r\n\tonMobileSubmit,\r\n}) => {\r\n\tconst modalRef = useRef<HTMLDivElement>(null);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (showFilterModal) {\r\n\t\t\t// Focus the modal when it's shown\r\n\t\t\tif (modalRef.current) {\r\n\t\t\t\tmodalRef.current.focus();\r\n\t\t\t}\r\n\t\t}\r\n\t}, [showFilterModal]);\r\n\r\n\t// Focus management\r\n\tuseEffect(() => {\r\n\t\tconst handleFocus = (event: KeyboardEvent) => {\r\n\t\t\tif (event.key === 'Escape') {\r\n\t\t\t\tonClose();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\twindow.addEventListener('keydown', handleFocus);\r\n\r\n\t\treturn () => {\r\n\t\t\twindow.removeEventListener('keydown', handleFocus);\r\n\t\t};\r\n\t}, [onClose]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (showFilterModal) {\r\n\t\t\t// Disable scrolling when the modal is open\r\n\t\t\tdocument.body.style.overflow = 'hidden';\r\n\t\t\tdocument.documentElement.style.overflow = 'hidden';\r\n\t\t} else {\r\n\t\t\t// Re-enable scrolling when the modal is closed\r\n\t\t\tdocument.body.style.overflow = 'auto';\r\n\t\t\tdocument.documentElement.style.overflow = 'auto';\r\n\t\t}\r\n\t}, [showFilterModal]);\r\n\r\n\treturn (\r\n\t\t<Transition in={showFilterModal} timeout={300} unmountOnExit>\r\n\t\t\t{(state) => (\r\n\t\t\t\t<FilterModalContainer\r\n\t\t\t\t\tstate={state}\r\n\t\t\t\t\tref={modalRef}\r\n\t\t\t\t\ttabIndex={-1}\r\n\t\t\t\t\trole=\"dialog\"\r\n\t\t\t\t\taria-label={filterLabel}\r\n\t\t\t\t\taria-modal=\"true\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<FilterModalHeader>\r\n\t\t\t\t\t\t<H4>{filterLabel}</H4>\r\n\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\tonClick={onClose}\r\n\t\t\t\t\t\t\tonKeyDown={(event) => {\r\n\t\t\t\t\t\t\t\tif (event.key === 'Enter') {\r\n\t\t\t\t\t\t\t\t\tonClose();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\ttabIndex={0}\r\n\t\t\t\t\t\t\taria-label=\"close modal\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Icon color=\"white\" icon=\"cross\" size={3} aria-hidden={true} />\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</FilterModalHeader>\r\n\t\t\t\t\t<FilterModalContent>{children}</FilterModalContent>\r\n\t\t\t\t\t<FilterModalFooter filterFlag={filterExist}>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tonClick={onMobileSubmit}\r\n\t\t\t\t\t\t\tvariant={ButtonVariant.Primary}\r\n\t\t\t\t\t\t\taria-label=\"Visa results button\"\r\n\t\t\t\t\t\t\tdisabled={filteredCount === 0}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tVisa ({filteredCount})\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant={ButtonVariant.Tertiary}\r\n\t\t\t\t\t\t\tonClick={onClear}\r\n\t\t\t\t\t\t\taria-label={clearAllText}\r\n\t\t\t\t\t\t\tdisabled={!filterExist}\r\n\t\t\t\t\t\t\tclassName={'mobile-clearall-btn'}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{clearAllText}\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</FilterModalFooter>\r\n\t\t\t\t</FilterModalContainer>\r\n\t\t\t)}\r\n\t\t</Transition>\r\n\t);\r\n};\r\n\r\nexport default FilterModal;\r\n","import styled from 'styled-components';\r\nimport { px2rem } from 'theme/utils';\r\n\r\nexport const AccordionContainer = styled.div`\r\n\twidth: 100%;\r\n`;\r\n\r\nexport const AccordionItem = styled.div`\r\n\t.accordion-border {\r\n\t\tdisplay: block;\r\n\t\tmargin: 0 ${(props) => props.theme.spacing.space2}rem;\r\n\t\tborder-bottom: 1px solid ${(props) => props.theme.colors.grey1};\r\n\t}\r\n`;\r\n\r\nexport const AccordianPills = styled.div`\r\n\tmargin-bottom: 28px;\r\n\tpadding: 0 ${(props) => props.theme.spacing.space2}rem;\r\n\r\n\tspan {\r\n\t\t${(props) => props.theme.typography.style13.getStyle()};\r\n\t\tfont-size: 14px;\r\n\t\tline-height: ${px2rem(24)};\r\n\t\tcolor: #6b6b6b;\r\n\t}\r\n\tspan::after {\r\n\t\tcontent: ',';\r\n\t\tpadding: 0 2px;\r\n\t}\r\n\tspan:last-child::after {\r\n\t\tcontent: '';\r\n\t}\r\n`;\r\n\r\nexport const AccordionHeader = styled.div<{\r\n\tisOpen: boolean;\r\n\tactivePills: boolean;\r\n}>`\r\n\tdisplay: flex;\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n\tpadding: ${(props) => (props.isOpen ? '22px 16px 7px 16px' : '22px 16px')};\r\n\tpadding-bottom: ${(props) => !props.isOpen && props.activePills && '5px'};\r\n\tcursor: pointer;\r\n\th5 {\r\n\t\tfont-weight: 700;\r\n\t\tmargin-bottom: 0;\r\n\t\ttext-transform: none;\r\n\t}\r\n`;\r\n\r\nexport const AccordionContent = styled.div`\r\n\tlabel {\r\n\t\tpadding-left: ${(props) => props.theme.spacing.space2}rem;\r\n\t\tpadding-right: ${(props) => props.theme.spacing.space2}rem;\r\n\t}\r\n\t.sort-svg {\r\n\t\tmargin-right: 0;\r\n\t}\r\n`;\r\n\r\nexport const AccordionIcon = styled.span<{ isOpen: boolean }>`\r\n\ttransform: ${(props) => (props.isOpen ? 'rotate(270deg)' : 'rotate(90deg)')};\r\n\ttransition: transform 0.3s ease;\r\n`;\r\n","import React, { useEffect, useState, useRef } from 'react';\r\nimport {\r\n\tAccordionContainer,\r\n\tAccordionItem,\r\n\tAccordionHeader,\r\n\tAccordionContent,\r\n\tAccordionIcon,\r\n\tAccordianPills,\r\n} from './AccordionFilter.styles';\r\nimport Icon from 'components/Boilerplate/Icon';\r\nimport {\r\n\tFacetModel,\r\n\tFacetOption,\r\n\tFacetTypeOf,\r\n} from 'components/SearchByListngPage/SearchByListngPage.model';\r\nimport { H5 } from 'components/Typography';\r\nimport MultiSelectCheckbox from 'components/FilterDropdown/MultiSelectCheckbox';\r\nimport { ChildrenWrapper } from 'components/FilterDropdown/MultiSelectCheckbox.styles';\r\nimport SingleSelectCheckbox from 'components/FilterDropdown/SingleSelectCheckbox';\r\nimport {\r\n\tCheckboxesInline,\r\n\tTimeIntervalDropdown,\r\n} from 'components/FilterDropdown/FilterDropdown.styles';\r\nimport { DateSelectDropdown } from 'components/FilterDropdown/DateSelectDropdown';\r\nimport { NumberRange } from 'pages/sharedModelTypes';\r\nimport Checkbox from 'components/Checkbox';\r\n\r\ninterface FacetsTypes {\r\n\t[key: string]: string[];\r\n}\r\ninterface Props {\r\n\tfacetModels?: FacetModel[];\r\n\tfacets: FacetsTypes;\r\n\tonChange?: (filter: any, type: FacetTypeOf) => void;\r\n\tonDateSelectChanged?: (range: NumberRange, filterTypeOf: string) => void;\r\n\tselectedDates?: NumberRange;\r\n\tonCheckboxChanged?: (checked: boolean, type: string) => void;\r\n}\r\n\r\nconst AccordionFilter: React.FC<Props> = ({\r\n\tfacetModels,\r\n\tfacets,\r\n\tselectedDates,\r\n\tonChange,\r\n\tonDateSelectChanged,\r\n\tonCheckboxChanged,\r\n}) => {\r\n\tinterface FacetObj {\r\n\t\t[key: string]: boolean;\r\n\t}\r\n\t/**maintain an object with boolean values for accordian to close and open each section */\r\n\tconst initFiltersByKey = () => {\r\n\t\tconst obj: FacetObj = {};\r\n\t\tfacetModels?.forEach((i) => {\r\n\t\t\tobj[i.key] = false;\r\n\t\t});\r\n\t\treturn obj;\r\n\t};\r\n\r\n\tconst dateSelectorSSF =\r\n\t\tfacetModels\r\n\t\t\t?.find((facet) => facet.key === 'ReleaseDate')\r\n\t\t\t?.facetOptions.find(\r\n\t\t\t\t(option) => option.key !== 'selectableYears' && option.selected\r\n\t\t\t)?.key || '';\r\n\r\n\t/**now we setting initial ssf value expecting there will be only one singleSelect facetmodel - need to rewrite to accomdodate more singleSelect facetmodels */\r\n\tconst ssfIintial =\r\n\t\tfacetModels\r\n\t\t\t?.find((facet) => facet.facetType === 'singleSelect')\r\n\t\t\t?.facetOptions.find((option) => option.selected)?.key || '';\r\n\r\n\tconst [fKey, setFKey] = useState(initFiltersByKey());\r\n\tconst [sSF, setSSF] = useState<string | null>(ssfIintial);\r\n\tconst [dateSSF, setDateSSF] = useState<string | null>(dateSelectorSSF);\r\n\tconst wrapperRef = useRef<HTMLDivElement>(null);\r\n\r\n\t/**function to toggle dropdown options */\r\n\tconst toggleFOpts = (modelKey: string) => {\r\n\t\tsetFKey((prevK) => {\r\n\t\t\tconst updFKey = { ...prevK };\r\n\t\t\tupdFKey[modelKey] = !prevK[modelKey];\r\n\r\n\t\t\tfor (const filterKey in updFKey) {\r\n\t\t\t\tif (filterKey !== modelKey) {\r\n\t\t\t\t\tupdFKey[filterKey] = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn updFKey;\r\n\t\t});\r\n\t};\r\n\r\n\t/* toggle select single filter */\r\n\tconst toggleSSF = (event: any, type: FacetTypeOf) => {\r\n\t\tconst key = event.target.value;\r\n\t\tsetSSF((prevKey) => (prevKey === key ? null : key));\r\n\t\tif (onChange) onChange(event, type);\r\n\t};\r\n\r\n\t/* toggle select single filter */\r\n\tconst toggleDateSSF = (event: any, type: FacetTypeOf) => {\r\n\t\tconst key = event.target.value;\r\n\t\tsetDateSSF((prevKey) => (prevKey === key ? null : key));\r\n\t\tif (onChange) onChange(event, type);\r\n\t};\r\n\r\n\tconst handleDateSelectChanged = (range: any, filterTypeOf: string) => {\r\n\t\t// ask here if you want to close the dropdown\r\n\t\t// ask if there is other filter selected (help from backend)\r\n\t\tsetDateSSF('');\r\n\t\tif (onDateSelectChanged) {\r\n\t\t\tonDateSelectChanged(range, filterTypeOf);\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<AccordionContainer ref={wrapperRef}>\r\n\t\t\t{facetModels &&\r\n\t\t\t\tfacetModels.map((facet) => (\r\n\t\t\t\t\t<AccordionItem key={facet.key}>\r\n\t\t\t\t\t\t<AccordionHeader\r\n\t\t\t\t\t\t\tisOpen={fKey[facet.key]}\r\n\t\t\t\t\t\t\taria-expanded={fKey[facet.key]}\r\n\t\t\t\t\t\t\tonClick={() => toggleFOpts(facet.key)}\r\n\t\t\t\t\t\t\tactivePills={facets[facet.key]?.length > 0}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<H5>{facet.name}</H5>\r\n\t\t\t\t\t\t\t<AccordionIcon\r\n\t\t\t\t\t\t\t\tisOpen={fKey[facet.key]}\r\n\t\t\t\t\t\t\t\ttabIndex={0}\r\n\t\t\t\t\t\t\t\taria-label={`${fKey[facet.key]} ? exapnd ${\r\n\t\t\t\t\t\t\t\t\tfacet.name\r\n\t\t\t\t\t\t\t\t}: collapse ${facet.name}`}\r\n\t\t\t\t\t\t\t\tonKeyDown={(event) => {\r\n\t\t\t\t\t\t\t\t\tif (event.key === 'Enter') {\r\n\t\t\t\t\t\t\t\t\t\ttoggleFOpts(facet.key);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Icon size={2} aria-hidden={true} icon=\"chevron\" />\r\n\t\t\t\t\t\t\t</AccordionIcon>\r\n\t\t\t\t\t\t</AccordionHeader>\r\n\t\t\t\t\t\t{!fKey[facet.key] && facets[facet.key]?.length > 0 && (\r\n\t\t\t\t\t\t\t<AccordianPills>\r\n\t\t\t\t\t\t\t\t{facets[facet.key]?.map((item, index) => {\r\n\t\t\t\t\t\t\t\t\t// Check if the facet key is \"ReleaseDate\" and if timeInterval is not null and atleast one year is selected\r\n\t\t\t\t\t\t\t\t\tconst isReleaseDateWithTimeInterval =\r\n\t\t\t\t\t\t\t\t\t\tfacet.key === 'ReleaseDate' &&\r\n\t\t\t\t\t\t\t\t\t\tfacet.facetOptions.some(\r\n\t\t\t\t\t\t\t\t\t\t\t(option) =>\r\n\t\t\t\t\t\t\t\t\t\t\t\toption.timeInterval !== null &&\r\n\t\t\t\t\t\t\t\t\t\t\t\toption?.timeInterval?.selectableYears &&\r\n\t\t\t\t\t\t\t\t\t\t\t\toption.timeInterval.selectableYears.some(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(year) => year?.selected === true\r\n\t\t\t\t\t\t\t\t\t\t\t\t) &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t!facet.facetOptions.some(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(option) =>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toption.key !== 'selectableYears' &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toption.selected === true\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\t\t\t// If it's a ReleaseDate with a time interval, parse the item and replace F and T with fromLabel and toLabel\r\n\t\t\t\t\t\t\t\t\tif (isReleaseDateWithTimeInterval) {\r\n\t\t\t\t\t\t\t\t\t\tconst timeIntervalOption = facet.facetOptions.find(\r\n\t\t\t\t\t\t\t\t\t\t\t(option) => option.timeInterval\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (timeIntervalOption && timeIntervalOption.timeInterval) {\r\n\t\t\t\t\t\t\t\t\t\t\tconst fromLabel =\r\n\t\t\t\t\t\t\t\t\t\t\t\ttimeIntervalOption.timeInterval.fromLabel ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t'FrÃ¥n och med';\r\n\t\t\t\t\t\t\t\t\t\t\tconst toLabel =\r\n\t\t\t\t\t\t\t\t\t\t\t\ttimeIntervalOption.timeInterval.toLabel ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t'Till och med';\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tconst formattedItem =\r\n\t\t\t\t\t\t\t\t\t\t\t\titem.includes('F') && item.includes('T')\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? item\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.replace(/F(\\d{4})/g, ` $1`)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.replace(/T(\\d{4})/g, ` $1`)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.replace(/-/g, ' - ')\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: item\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.replace(/F(\\d{4})/g, `${fromLabel} $1`)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.replace(/T(\\d{4})/g, `${toLabel} $1`)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.replace(/-/g, ' - ');\r\n\r\n\t\t\t\t\t\t\t\t\t\t\treturn <span key={index}>{formattedItem}</span>;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tif (facet.key == 'IsOfficialStatistics') {\r\n\t\t\t\t\t\t\t\t\t\tconst facetOption = facet.facetOptions.find(\r\n\t\t\t\t\t\t\t\t\t\t\t(option) => option.selected\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\tconst displayName = facetOption ? facetOption.name : '';\r\n\t\t\t\t\t\t\t\t\t\treturn <span key={index}>{displayName}</span>;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t// Default rendering for non-ReleaseDate facets\r\n\t\t\t\t\t\t\t\t\tconst facetOption = facet.facetOptions.find(\r\n\t\t\t\t\t\t\t\t\t\t(option) => option.key === item\r\n\t\t\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\t\t\tconst displayName = facetOption ? facetOption.name : item;\r\n\r\n\t\t\t\t\t\t\t\t\treturn <span key={index}>{displayName}</span>;\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t</AccordianPills>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{fKey[facet.key] && facet.facetType === FacetTypeOf.multiSelect && (\r\n\t\t\t\t\t\t\t<AccordionContent>\r\n\t\t\t\t\t\t\t\t{facet.facetOptions &&\r\n\t\t\t\t\t\t\t\t\tfacet.facetOptions.map((option: FacetOption) => (\r\n\t\t\t\t\t\t\t\t\t\t<MultiSelectCheckbox\r\n\t\t\t\t\t\t\t\t\t\t\tkey={option.key}\r\n\t\t\t\t\t\t\t\t\t\t\tchecked={option.selected}\r\n\t\t\t\t\t\t\t\t\t\t\tonCheckedChanged={(event) =>\r\n\t\t\t\t\t\t\t\t\t\t\t\tonChange && onChange(event, FacetTypeOf.multiSelect)\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tid={facet.key}\r\n\t\t\t\t\t\t\t\t\t\t\tvalue={option.key}\r\n\t\t\t\t\t\t\t\t\t\t\tname={option.key}\r\n\t\t\t\t\t\t\t\t\t\t\thits={option.hits}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<ChildrenWrapper>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{option.name}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>({option.hits})</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</ChildrenWrapper>\r\n\t\t\t\t\t\t\t\t\t\t</MultiSelectCheckbox>\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t</AccordionContent>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{fKey[facet.key] && facet.facetType === FacetTypeOf.singleSelect && (\r\n\t\t\t\t\t\t\t<AccordionContent>\r\n\t\t\t\t\t\t\t\t{facet.facetOptions &&\r\n\t\t\t\t\t\t\t\t\tfacet.facetOptions.map(\r\n\t\t\t\t\t\t\t\t\t\t(option: FacetOption, index: number) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<SingleSelectCheckbox\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={option.key + index.toString()}\r\n\t\t\t\t\t\t\t\t\t\t\t\tchecked={sSF === option.key}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonCheckedChanged={(event) =>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttoggleSSF(event, FacetTypeOf.singleSelect)\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\tid={facet.key}\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={option.key}\r\n\t\t\t\t\t\t\t\t\t\t\t\tname={option.key}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{option.name}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</SingleSelectCheckbox>\r\n\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</AccordionContent>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{fKey[facet.key] && facet.facetType === FacetTypeOf.dateSelect && (\r\n\t\t\t\t\t\t\t<AccordionContent>\r\n\t\t\t\t\t\t\t\t{facet.facetOptions &&\r\n\t\t\t\t\t\t\t\t\tfacet.facetOptions.map(\r\n\t\t\t\t\t\t\t\t\t\t(option: FacetOption, index: number) => {\r\n\t\t\t\t\t\t\t\t\t\t\tconst isFirst = index === 0;\r\n\t\t\t\t\t\t\t\t\t\t\tconst isLast = index === facet.facetOptions.length - 1;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{!option.timeInterval && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<SingleSelectCheckbox\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={option.name + index.toString() + 'dsf'}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={dateSSF == option.key}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonCheckedChanged={(event) =>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoggleDateSSF(event, FacetTypeOf.singleSelect)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tid={facet.key}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={option.key}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname={option.key}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfocusStyle={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisFirst ? 'first' : isLast ? 'last' : ''\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"name\">{option.name}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</SingleSelectCheckbox>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{option.timeInterval && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TimeIntervalDropdown>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{option.name}</span>\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<DateSelectDropdown\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonSubmit={(range) =>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleDateSelectChanged &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleDateSelectChanged(range, facet.key)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttimeInterval={option.timeInterval}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tselectedDates={selectedDates}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TimeIntervalDropdown>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</AccordionContent>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{fKey[facet.key] && facet.facetType === FacetTypeOf.bool && (\r\n\t\t\t\t\t\t\t<CheckboxesInline>\r\n\t\t\t\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\t\t\t\tchecked={facet.facetOptions[0].selected}\r\n\t\t\t\t\t\t\t\t\tonCheckedChanged={(value: boolean) => {\r\n\t\t\t\t\t\t\t\t\t\tonCheckboxChanged && onCheckboxChanged(value, facet.key);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{facet.facetOptions[0].name}\r\n\t\t\t\t\t\t\t\t</Checkbox>\r\n\t\t\t\t\t\t\t</CheckboxesInline>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t<span className=\"accordion-border\"></span>\r\n\t\t\t\t\t</AccordionItem>\r\n\t\t\t\t))}\r\n\t\t</AccordionContainer>\r\n\t);\r\n};\r\n\r\nexport default AccordionFilter;\r\n","/**\r\n * SearchByListngPageMobile\r\n */\r\n\r\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { fetchSearchResult, selectLocalization } from 'store/modules/model';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport { buildQueryString, debounce } from 'utils/helper-utils';\r\nimport { ButtonVariant, NumberRange } from 'pages/sharedModelTypes';\r\n\r\nimport Button from 'components/Button';\r\nimport Pills from 'components/Pills';\r\nimport FilterModal from 'components/FilterModal';\r\nimport AccordionFilter from 'components/AccordionFilter';\r\nimport Autocomplete from 'components/Autocomplete';\r\nimport { PillItem } from 'components/Pills/Pills';\r\nimport { IconCross } from 'components/Boilerplate/Icon/IconCollection';\r\nimport {\r\n\tFacetModel,\r\n\tFacetOption,\r\n\tFacetTypeOf,\r\n\tSearchListingModel,\r\n} from 'components/SearchByListngPage/SearchByListngPage.model';\r\nimport {\r\n\tAllFilterButton,\r\n\tPillResetButton,\r\n\tPillsBlock,\r\n\tResultMessageHelper,\r\n\tSearchInputWrapper,\r\n\tSearchOverlappBlock,\r\n\tStyledSpan,\r\n} from 'components/SearchByListngPage/SearchByListngPage.styles';\r\nimport { getEpiSearchResult } from 'api/epiApi';\r\n\r\ninterface UpdatedFacets {\r\n\tfacets: {\r\n\t\t[key: string]: string[];\r\n\t};\r\n}\r\n\r\ninterface FacetsTypes {\r\n\t[key: string]: string[];\r\n}\r\n\r\nexport type queryParameters = {\r\n\tid: string;\r\n\tp: number | null;\r\n\ts: number;\r\n\tlang: string;\r\n\tq?: string;\r\n\tfacets: FacetsTypes;\r\n\tsortBy: string | null;\r\n};\r\n\r\ninterface Props {\r\n\t/** Description of this property */\r\n\tfilterLabel: string;\r\n\tsearchActionText: string;\r\n\tsearchTopic: string;\r\n\tsearchResultLabel: string;\r\n\tsearchPlaceholder: string | null;\r\n\tsearchResultLabelNoMatchesHint: string;\r\n\tsearchResultLabelNoMatches: string;\r\n\r\n\tsearchModel: SearchListingModel;\r\n\turl?: string;\r\n\trootPageId: string;\r\n\tclearAllFiltersText: string;\r\n\tallFilterText: string;\r\n\tpageChanged?: boolean;\r\n\tmodelType: string;\r\n\tsearchApi: string;\r\n\tautoCompleteApi: string;\r\n\t/**use this flag to hide/show clear all link */\r\n\tshowClearAll?: boolean;\r\n\t/**use this flag to hide/show no result feedback under search field */\r\n\tfilterEnabled?: boolean;\r\n}\r\n\r\n/** Main description for this component. */\r\nconst SearchByListngPageMobile: React.FC<Props> = ({\r\n\tfilterLabel,\r\n\tsearchActionText,\r\n\tsearchTopic,\r\n\tsearchResultLabel,\r\n\tsearchPlaceholder,\r\n\tsearchResultLabelNoMatchesHint,\r\n\tsearchResultLabelNoMatches,\r\n\tsearchModel,\r\n\turl,\r\n\trootPageId,\r\n\tpageChanged = false,\r\n\tclearAllFiltersText,\r\n\tallFilterText,\r\n\tmodelType,\r\n\tsearchApi,\r\n\tautoCompleteApi,\r\n\tshowClearAll = false,\r\n\tfilterEnabled = false,\r\n}) => {\r\n\tconst history = useHistory();\r\n\tconst dispatch = useDispatch();\r\n\tconst localization = useSelector(selectLocalization);\r\n\tconst isNarrowDisplay = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.tablet - 1,\r\n\t});\r\n\tconst searchRef = useRef<HTMLInputElement | null>(null);\r\n\tconst [userQuery, setUserQuery] = useState<string>('');\r\n\tconst [pillItem, setPillItems] = useState<PillItem[]>([]);\r\n\tconst [showModal, setShowModal] = useState(false);\r\n\tconst [showAutocomplete, setShowAutocomplete] = useState(true);\r\n\t/**filter exist flag to disbale or enable clear button in mobile filter modal */\r\n\tconst [filterExist, setFilterExist] = useState<boolean>(false);\r\n\r\n\t// destrcture seachModel\r\n\tconst { query, page, size, facetModels, sortModel } = searchModel;\r\n\r\n\t/**variable to keep track of filtered items count in mobile**/\r\n\tconst [\r\n\t\tmobileFilteredItemsCount,\r\n\t\tsetMobileFilteredItemsCount,\r\n\t] = useState<number>(searchModel?.numberOfHits);\r\n\r\n\t/**variable to keep track of year filter items count in mobile**/\r\n\tconst [mobileYearItemsCount, setMmobileYearItemsCount] = useState<number>(0);\r\n\t/**variables to track changed facet and sort data in mobile */\r\n\tconst [stageFacetModels, setstageFacetModels] = useState<FacetModel[]>(\r\n\t\tfacetModels\r\n\t);\r\n\r\n\t/**saving selected date to pass in to the date selector component for mobile - used to assign date when there is only one year is selected */\r\n\tconst [selectedDates, setSelectedDates] = useState<NumberRange>({\r\n\t\tfrom: null,\r\n\t\tto: null,\r\n\t});\r\n\r\n\tconst openModal = () => {\r\n\t\tsetShowModal(true);\r\n\t\tdocument.body.classList.add('modal-open');\r\n\t};\r\n\r\n\tconst closeModal = () => {\r\n\t\tsetShowModal(false);\r\n\t\tdocument.body.classList.remove('modal-open');\r\n\t};\r\n\r\n\tconst getInitialParameters = (): queryParameters => {\r\n\t\treturn {\r\n\t\t\tq: query ?? '',\r\n\t\t\tp: page,\r\n\t\t\ts: size,\r\n\t\t\tid: rootPageId,\r\n\t\t\tlang: localization ? localization?.culture : 'sv',\r\n\t\t\tfacets: {},\r\n\t\t\tsortBy: null,\r\n\t\t};\r\n\t};\r\n\tconst [searchState, setSearchState] = useState<queryParameters>(\r\n\t\tgetInitialParameters()\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\thandleURLParameters(history.location);\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tsetMobileFilteredItemsCount(searchModel?.numberOfHits);\r\n\t}, [searchModel?.numberOfHits]);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst handlePopState = (event: any) => {\r\n\t\t\tconst newSearchState = {\r\n\t\t\t\t...searchState,\r\n\t\t\t\tfacets: {},\r\n\t\t\t\tq: '',\r\n\t\t\t\tsortBy: null,\r\n\t\t\t\tp: 1,\r\n\t\t\t};\r\n\t\t\tconst currentURL = window.location.pathname;\r\n\t\t\tsetSearchState(newSearchState);\r\n\t\t\tsetPillItems([]);\r\n\t\t\texecuteSearch(newSearchState, currentURL);\r\n\t\t};\r\n\r\n\t\twindow.addEventListener('popstate', handlePopState);\r\n\r\n\t\t// Cleanup the event listener when the component unmounts\r\n\t\treturn () => {\r\n\t\t\twindow.removeEventListener('popstate', handlePopState);\r\n\t\t};\r\n\t}, [history]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (pageChanged) {\r\n\t\t\tconst newSearchState = {\r\n\t\t\t\t...searchState,\r\n\t\t\t\tp: searchModel.page,\r\n\t\t\t};\r\n\t\t\texecuteSearch(newSearchState);\r\n\t\t}\r\n\t}, [pageChanged]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (showClearAll) {\r\n\t\t\tresetAll();\r\n\t\t}\r\n\t}, [showClearAll]);\r\n\r\n\tuseEffect(() => {\r\n\t\tsetstageFacetModels(facetModels);\r\n\t\tgetMobilePill();\r\n\t}, [facetModels]);\r\n\r\n\t/** filter flag that is used to disable or enable clear all button in mobile fitler*/\r\n\tuseEffect(() => {\r\n\t\tlet filterFlag = Object.values(searchState?.facets).some(\r\n\t\t\t(facet) => facet.length > 0\r\n\t\t);\r\n\t\tsetFilterExist(filterFlag);\r\n\t}, [searchState]);\r\n\t/** update date select pills */\r\n\tconst updatedDateSelectPills = (\r\n\t\tTypeFilter: string,\r\n\t\tfacetOptions: FacetOption[]\r\n\t) => {\r\n\t\tfacetOptions.forEach((option) => {\r\n\t\t\tif (option.key === 'selectableYears') {\r\n\t\t\t\tconst { timeInterval } = option;\r\n\t\t\t\tconst selectedYears = timeInterval?.selectableYears.filter(\r\n\t\t\t\t\t(year) => year.selected\r\n\t\t\t\t);\r\n\r\n\t\t\t\tif (selectedYears === undefined) return;\r\n\t\t\t\tif (selectedYears && selectedYears.length > 1) {\r\n\t\t\t\t\tconst minYear = Math.min(...selectedYears.map((year) => year.year));\r\n\t\t\t\t\tconst maxYear = Math.max(...selectedYears.map((year) => year.year));\r\n\r\n\t\t\t\t\t// Create a single pill with the combined years\r\n\t\t\t\t\tsetPillItems((prevPillItems) => [\r\n\t\t\t\t\t\t...prevPillItems,\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tlabel: `${minYear}-${maxYear}`,\r\n\t\t\t\t\t\t\tTypeFilter,\r\n\t\t\t\t\t\t\tkeyPill: `${minYear}-${maxYear}`,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t]);\r\n\t\t\t\t} else if (selectedYears && selectedYears.length === 1) {\r\n\t\t\t\t\tlet kPLabel = selectedYears[0]?.year.toString();\r\n\t\t\t\t\tlet dateLabel: string = '';\r\n\t\t\t\t\tlet facets = getFacetsFromUrl();\r\n\t\t\t\t\tfacets &&\r\n\t\t\t\t\t\tfacets['ReleaseDate']?.map((item: string, index: number) => {\r\n\t\t\t\t\t\t\tif (option && option.timeInterval) {\r\n\t\t\t\t\t\t\t\tconst fromLabel = `${\r\n\t\t\t\t\t\t\t\t\toption.timeInterval.fromLabel ?? 'FrÃ¥n och med'\r\n\t\t\t\t\t\t\t\t} ${kPLabel}`;\r\n\t\t\t\t\t\t\t\tconst toLabel = `${\r\n\t\t\t\t\t\t\t\t\toption.timeInterval.toLabel ?? 'Till och med'\r\n\t\t\t\t\t\t\t\t} ${kPLabel}`;\r\n\r\n\t\t\t\t\t\t\t\tdateLabel =\r\n\t\t\t\t\t\t\t\t\titem.includes('F') && item.includes('T')\r\n\t\t\t\t\t\t\t\t\t\t? kPLabel\r\n\t\t\t\t\t\t\t\t\t\t: item.startsWith('F')\r\n\t\t\t\t\t\t\t\t\t\t? fromLabel\r\n\t\t\t\t\t\t\t\t\t\t: item.startsWith('T')\r\n\t\t\t\t\t\t\t\t\t\t? toLabel\r\n\t\t\t\t\t\t\t\t\t\t: '';\r\n\r\n\t\t\t\t\t\t\t\tkPLabel =\r\n\t\t\t\t\t\t\t\t\titem.includes('F') && item.includes('T')\r\n\t\t\t\t\t\t\t\t\t\t? `${kPLabel}-${kPLabel}`\r\n\t\t\t\t\t\t\t\t\t\t: kPLabel;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// Create a pill with that single year\r\n\t\t\t\t\tsetPillItems((prevPillItems) => [\r\n\t\t\t\t\t\t...prevPillItems,\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tlabel: dateLabel,\r\n\t\t\t\t\t\t\tTypeFilter,\r\n\t\t\t\t\t\t\tkeyPill: kPLabel,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t]);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tconst { name: optionName, selected, key: keyPill } = option;\r\n\r\n\t\t\t\tif (selected) {\r\n\t\t\t\t\tsetPillItems((prevPillItems) => [\r\n\t\t\t\t\t\t...prevPillItems,\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tlabel: optionName,\r\n\t\t\t\t\t\t\tTypeFilter,\r\n\t\t\t\t\t\t\tkeyPill: keyPill,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\t/* we update pills when user click on visa button in mobile view with selected filter options */\r\n\tconst getMobilePill = () => {\r\n\t\tsetPillItems([]);\r\n\r\n\t\tif (facetModels) {\r\n\t\t\tfacetModels.map((item: FacetModel) => {\r\n\t\t\t\tconst TypeFilter = item.key;\r\n\t\t\t\tif (item.facetType === 'bool') {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (item.facetType === 'dateSelect') {\r\n\t\t\t\t\tupdatedDateSelectPills(TypeFilter, item.facetOptions);\r\n\t\t\t\t} else {\r\n\t\t\t\t\titem.facetOptions.map((option: any, i: number) => {\r\n\t\t\t\t\t\tif (option.selected) {\r\n\t\t\t\t\t\t\tsetPillItems((prevPillItems) => [\r\n\t\t\t\t\t\t\t\t...prevPillItems,\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tlabel: option.name,\r\n\t\t\t\t\t\t\t\t\tTypeFilter,\r\n\t\t\t\t\t\t\t\t\tkeyPill: option.key,\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tconst onPillRemove = (pill: PillItem, flag: boolean) => {\r\n\t\tconst updatePills = pillItem.filter(\r\n\t\t\t(item) => item.keyPill !== pill.keyPill\r\n\t\t);\r\n\t\tconst updatedFacets: UpdatedFacets = { facets: { ...searchState.facets } };\r\n\t\tif (pill) {\r\n\t\t\tif (updatedFacets.facets.hasOwnProperty(pill.TypeFilter)) {\r\n\t\t\t\tif (pill.TypeFilter === 'ReleaseDate') {\r\n\t\t\t\t\t// Remove 'F' and 'T' from the string and update the value in updatedFacets\r\n\t\t\t\t\tupdatedFacets.facets[pill.TypeFilter] = updatedFacets.facets[\r\n\t\t\t\t\t\tpill.TypeFilter\r\n\t\t\t\t\t].map((date) => date.replace('F', '').replace('T', ''));\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (updatedFacets.facets[pill.TypeFilter].includes(pill.keyPill)) {\r\n\t\t\t\t\tupdatedFacets.facets[pill.TypeFilter] = updatedFacets.facets[\r\n\t\t\t\t\t\tpill.TypeFilter\r\n\t\t\t\t\t].filter((opt) => opt !== pill.keyPill);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst newSearchState = {\r\n\t\t\t...searchState,\r\n\t\t\t...updatedFacets,\r\n\t\t};\r\n\t\tsetPillItems(updatePills);\r\n\t\tsetSearchState(newSearchState);\r\n\t\t// flag tell if make request update or not. If it comes from onFilterChanged no need\r\n\t\tif (flag) {\r\n\t\t\tdebouncedExecuteSearch(newSearchState, '');\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleURLParameters = (location: any) => {\r\n\t\tif (location.search.length < 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// Decode URL parameters\r\n\t\tconst urlParams = new URLSearchParams(location.search);\r\n\t\tconst facets = urlParams.get('facets');\r\n\t\tconst query = urlParams.get('q');\r\n\t\tconst sortBy = urlParams.get('sortBy');\r\n\t\tconst page = urlParams.get('p');\r\n\r\n\t\tconst p = page ? parseInt(page, 10) : 1;\r\n\r\n\t\t// Split facets\r\n\t\tlet splitedFacets = facets?.split(';') || [];\r\n\t\tlet ff: { [key: string]: string[] } = {};\r\n\r\n\t\tsplitedFacets.forEach((facet) => {\r\n\t\t\tconst [key, ...values] = facet.split(':');\r\n\t\t\tconst decodedValues = values.map((value) => decodeURIComponent(value));\r\n\r\n\t\t\tif (!ff[key]) {\r\n\t\t\t\tff[key] = [];\r\n\t\t\t}\r\n\t\t\tff[key] = ff[key].concat(decodedValues);\r\n\t\t});\r\n\r\n\t\t// Update search bar if query exists\r\n\t\tsetUserQuery(query ?? '');\r\n\r\n\t\t// Update newSearchState with URL params\r\n\t\tconst newSearchState = {\r\n\t\t\t...searchState,\r\n\t\t\tfacets: ff,\r\n\t\t\tq: query ?? '',\r\n\t\t\tsortBy: sortBy ?? searchState.sortBy,\r\n\t\t\tp: p,\r\n\t\t};\r\n\t\tsetSearchState(newSearchState);\r\n\r\n\t\t// need compare if newSearchState is same as const { query, page, size, facetModels } = searchModel;\r\n\t\tif (\r\n\t\t\tnewSearchState.q !== searchModel.query ||\r\n\t\t\tnewSearchState.p !== searchModel.page\r\n\t\t) {\r\n\t\t\texecuteSearch(newSearchState);\r\n\t\t} else {\r\n\t\t\tconst keys = Object.keys(newSearchState.facets);\r\n\r\n\t\t\t// contemplate facetModels\r\n\t\t\tsearchModel.facetModels.forEach((facetModel) => {\r\n\t\t\t\tconst facetKey = facetModel.key;\r\n\t\t\t\tif (keys.includes(facetKey)) {\r\n\t\t\t\t\tfacetModel.facetOptions.forEach((facetOption) => {\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t!facetOption.selected &&\r\n\t\t\t\t\t\t\tfacetOption.key === newSearchState.facets[facetKey]?.[0]\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\texecuteSearch(newSearchState);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\t/* search actions */\r\n\r\n\tconst handleUserQuery = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n\t\tsetUserQuery(event.target.value);\r\n\t\tsetShowAutocomplete(true);\r\n\t};\r\n\r\n\tconst handleSubmit = (event: any) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tif (userQuery.length > 0) {\r\n\t\t\tconst params = {\r\n\t\t\t\t...searchState,\r\n\t\t\t\tq: userQuery,\r\n\t\t\t\tp: 1,\r\n\t\t\t};\r\n\t\t\tsetSearchState(params);\r\n\t\t\texecuteSearch(params);\r\n\t\t}\r\n\t};\r\n\r\n\tconst resetSearch = () => {\r\n\t\tsetUserQuery('');\r\n\r\n\t\tif (searchState.q) {\r\n\t\t\tconst params = {\r\n\t\t\t\t...searchState,\r\n\t\t\t\tq: '',\r\n\t\t\t\tp: searchState.p ?? 1,\r\n\t\t\t};\r\n\t\t\tsetSearchState(params);\r\n\t\t\texecuteSearch(params);\r\n\t\t}\r\n\t};\r\n\r\n\t/* filters actions */\r\n\r\n\tconst resetFilters = () => {\r\n\t\tsetPillItems([]);\r\n\t\tsearchModel && setMobileFilteredItemsCount(searchModel?.numberOfHits);\r\n\t\tconst newSearchState = {\r\n\t\t\t...searchState,\r\n\t\t\tfacets: {},\r\n\t\t\tsortBy: null,\r\n\t\t};\r\n\r\n\t\tsetSearchState(newSearchState);\r\n\t\texecuteSearch(newSearchState);\r\n\t};\r\n\r\n\tconst resetAll = () => {\r\n\t\tsetPillItems([]);\r\n\t\tsetUserQuery('');\r\n\t\tconst newSearchState = {\r\n\t\t\t...searchState,\r\n\t\t\tfacets: {},\r\n\t\t\tsortBy: null,\r\n\t\t\tq: '',\r\n\t\t\tp: 1,\r\n\t\t};\r\n\t\tsetSearchState(newSearchState);\r\n\t\texecuteSearch(newSearchState);\r\n\t};\r\n\r\n\t/** in mobile view we dont fetch data from backend unless user click on visa button - isntead we keep update filter state client side */\r\n\tconst onMobileFilterChanged = (filter: any, typeOfFacet: FacetTypeOf) => {\r\n\t\tconst target = filter.target;\r\n\r\n\t\tconst filterTypeOf = target.getAttribute('data-filter-typeof');\r\n\t\tconst checkboxValue = target.value.trim();\r\n\t\tconst updatedFacets: UpdatedFacets = { facets: { ...searchState.facets } };\r\n\r\n\t\t// Check if the key exists\r\n\t\tif (updatedFacets.facets.hasOwnProperty(filterTypeOf)) {\r\n\t\t\tif (updatedFacets.facets[filterTypeOf].includes(checkboxValue)) {\r\n\t\t\t\t// if true > user click unchecked existing opt & remove pill\r\n\t\t\t\tupdatedFacets.facets[filterTypeOf] = updatedFacets.facets[\r\n\t\t\t\t\tfilterTypeOf\r\n\t\t\t\t].filter((opt) => opt !== checkboxValue);\r\n\t\t\t} else {\r\n\t\t\t\t// add the opt to arr & add pill\r\n\t\t\t\tif (typeOfFacet === FacetTypeOf.multiSelect) {\r\n\t\t\t\t\tupdatedFacets.facets[filterTypeOf] = [\r\n\t\t\t\t\t\t...updatedFacets.facets[filterTypeOf],\r\n\t\t\t\t\t\tcheckboxValue,\r\n\t\t\t\t\t];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tupdatedFacets.facets[filterTypeOf] = [checkboxValue];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// if not exist i create it\r\n\t\t\tupdatedFacets.facets[filterTypeOf] = [checkboxValue];\r\n\t\t}\r\n\r\n\t\t/**below we update stage facet, sort object and total filtered count with updates */\r\n\r\n\t\t// Clone the current facets model to update it\r\n\t\tconst updatedFacetModels = stageFacetModels.map((facet: FacetModel) => ({\r\n\t\t\t...facet,\r\n\t\t\tfacetOptions: facet.facetOptions.map((option: FacetOption) => ({\r\n\t\t\t\t...option,\r\n\t\t\t\tselected:\r\n\t\t\t\t\tfacet.key === filterTypeOf && option.key === checkboxValue\r\n\t\t\t\t\t\t? target.checked\r\n\t\t\t\t\t\t: option.selected,\r\n\t\t\t})),\r\n\t\t}));\r\n\t\tsetstageFacetModels(updatedFacetModels);\r\n\r\n\t\tconst newSearchState = {\r\n\t\t\t...searchState,\r\n\t\t\t...updatedFacets,\r\n\t\t\tp: 1,\r\n\t\t};\r\n\t\tsetSearchState(newSearchState);\r\n\r\n\t\t/** logic to calculate the total hits and checking if there are multiple facet type got checked */\r\n\t\tlet totalFilteredHits = 0;\r\n\t\tlet selectedFacetModelsCount = 0;\r\n\r\n\t\tfor (const facet of updatedFacetModels) {\r\n\t\t\tlet hasSelectedOption = false;\r\n\r\n\t\t\tif (facet.key === 'ReleaseDate' && facet.facetType === 'dateSelect') {\r\n\t\t\t\t// Handle date facetOptions\r\n\t\t\t\tfor (const option of facet.facetOptions) {\r\n\t\t\t\t\tif (option.timeInterval) {\r\n\t\t\t\t\t\t// Check if any of the selectable years are selected\r\n\t\t\t\t\t\tfor (const yearOption of option.timeInterval.selectableYears) {\r\n\t\t\t\t\t\t\tif (yearOption.selected) {\r\n\t\t\t\t\t\t\t\thasSelectedOption = true;\r\n\t\t\t\t\t\t\t\tbreak; // Since only one year can be selected, break after finding the first selected one\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (\r\n\t\t\t\t\t\tupdatedFacets.facets[facet.key] &&\r\n\t\t\t\t\t\tupdatedFacets.facets[facet.key].includes(option.key) &&\r\n\t\t\t\t\t\toption.selected\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\ttotalFilteredHits += option.hits;\r\n\t\t\t\t\t\thasSelectedOption = true;\r\n\t\t\t\t\t\tbreak; // Only one option can be selected, so break after finding the first selected one\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else if (facet.key === 'IsOfficialStatistics') {\r\n\t\t\t\t// Handle other regular facetOptions\r\n\t\t\t\tfor (const option of facet.facetOptions) {\r\n\t\t\t\t\tif (updatedFacets.facets[facet.key] && option.selected) {\r\n\t\t\t\t\t\ttotalFilteredHits += option.hits;\r\n\t\t\t\t\t\thasSelectedOption = true; // Marking this facet model has a selected option\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// Handle other regular facetOptions\r\n\t\t\t\tfor (const option of facet.facetOptions) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tupdatedFacets.facets[facet.key] &&\r\n\t\t\t\t\t\tupdatedFacets.facets[facet.key].includes(option.key) &&\r\n\t\t\t\t\t\toption.selected\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\ttotalFilteredHits += option.hits;\r\n\t\t\t\t\t\thasSelectedOption = true; // Marking this facet model has a selected option\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (hasSelectedOption) {\r\n\t\t\t\tselectedFacetModelsCount++; // Increment the count if any option in this facet is selected\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// If more than one facet model has selected options, we will call the api to get hits by passing \"hitsonly\" value true\r\n\t\tif (selectedFacetModelsCount > 1) {\r\n\t\t\texecuteSearch(newSearchState, '', true);\r\n\t\t} else {\r\n\t\t\t// use normal calulcated hit count\r\n\t\t\tsetMobileFilteredItemsCount(\r\n\t\t\t\tselectedFacetModelsCount == 0\r\n\t\t\t\t\t? searchModel?.numberOfHits\r\n\t\t\t\t\t: totalFilteredHits + mobileYearItemsCount\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tconst onDateSelectChanged = (range: NumberRange, filterTypeOf: string) => {\r\n\t\tlet totalYearHits = 0;\r\n\t\tconst updatedFacets: any = {\r\n\t\t\tfacets: { ...searchState.facets },\r\n\t\t};\r\n\t\t//updating stagefacet models\r\n\t\tconst updatedFacetModels = stageFacetModels.map((facet: FacetModel) => {\r\n\t\t\tif (facet.key === 'ReleaseDate') {\r\n\t\t\t\treturn {\r\n\t\t\t\t\t...facet,\r\n\t\t\t\t\tfacetOptions: facet.facetOptions.map((option: FacetOption) => {\r\n\t\t\t\t\t\tif (option.key === 'selectableYears' && option.timeInterval) {\r\n\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\t...option,\r\n\t\t\t\t\t\t\t\ttimeInterval: {\r\n\t\t\t\t\t\t\t\t\t...option.timeInterval,\r\n\t\t\t\t\t\t\t\t\tselectableYears: option.timeInterval.selectableYears.map(\r\n\t\t\t\t\t\t\t\t\t\t(yearObj) => {\r\n\t\t\t\t\t\t\t\t\t\t\t// Determine if the year falls within the range based on the provided `from` and `to`\r\n\t\t\t\t\t\t\t\t\t\t\tconst withinRange =\r\n\t\t\t\t\t\t\t\t\t\t\t\trange.from && range.to\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? yearObj.year >= range.from &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t yearObj.year <= range.to\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: range.from\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? yearObj.year >= range.from\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: range.to\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? yearObj.year <= range.to\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: false;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t// Add up hits for all years within the determined range\r\n\t\t\t\t\t\t\t\t\t\t\tif (withinRange) {\r\n\t\t\t\t\t\t\t\t\t\t\t\ttotalYearHits += yearObj.hits;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\t\t\t\t\t...yearObj,\r\n\t\t\t\t\t\t\t\t\t\t\t\tselected:\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tyearObj.year === range.from ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tyearObj.year === range.to,\r\n\t\t\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\t...option,\r\n\t\t\t\t\t\t\t\tselected: false,\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}),\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\treturn facet;\r\n\t\t});\r\n\t\tsetstageFacetModels(updatedFacetModels);\r\n\t\tsetMmobileYearItemsCount(totalYearHits);\r\n\r\n\t\tsetSelectedDates(range);\r\n\r\n\t\t//updating search state\r\n\r\n\t\tconst startYear = 'F';\r\n\t\tconst endYear = 'T';\r\n\r\n\t\t// Build the facet string\r\n\t\tif (range.from && range.to) {\r\n\t\t\tupdatedFacets.facets[filterTypeOf] = [\r\n\t\t\t\tstartYear + range.from + '-' + endYear + range.to,\r\n\t\t\t];\r\n\t\t} else if (range.from) {\r\n\t\t\tupdatedFacets.facets[filterTypeOf] = [startYear + range.from];\r\n\t\t} else if (range.to) {\r\n\t\t\tupdatedFacets.facets[filterTypeOf] = [endYear + range.to];\r\n\t\t} else if (range.from === null && range.to === null) {\r\n\t\t\tupdatedFacets.facets = {};\r\n\t\t}\r\n\r\n\t\tconst newSearchState = {\r\n\t\t\t...searchState,\r\n\t\t\t...updatedFacets,\r\n\t\t\tp: 1,\r\n\t\t};\r\n\r\n\t\tsetSearchState(newSearchState);\r\n\r\n\t\t/** logic to calculate the total hits and checking if there are multiple facet type got checked */\r\n\t\tlet totalFilteredHits = 0;\r\n\t\tlet selectedFacetModelsCount = 0;\r\n\r\n\t\tfor (const facet of updatedFacetModels) {\r\n\t\t\tlet hasSelectedOption = false;\r\n\r\n\t\t\tif (facet.key === 'ReleaseDate' && facet.facetType === 'dateSelect') {\r\n\t\t\t\t// Handle date facetOptions\r\n\t\t\t\tfor (const option of facet.facetOptions) {\r\n\t\t\t\t\tif (option.timeInterval) {\r\n\t\t\t\t\t\t// Check if any of the selectable years are selected\r\n\t\t\t\t\t\tfor (const yearOption of option.timeInterval.selectableYears) {\r\n\t\t\t\t\t\t\tif (yearOption.selected) {\r\n\t\t\t\t\t\t\t\thasSelectedOption = true;\r\n\t\t\t\t\t\t\t\tbreak; // Since only one year can be selected, break after finding the first selected one\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// Handle other regular facetOptions\r\n\t\t\t\tfor (const option of facet.facetOptions) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tupdatedFacets.facets[facet.key] &&\r\n\t\t\t\t\t\tupdatedFacets.facets[facet.key].includes(option.key) &&\r\n\t\t\t\t\t\toption.selected\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\ttotalFilteredHits += option.hits;\r\n\t\t\t\t\t\thasSelectedOption = true; // Mark that this facet model has a selected option\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (hasSelectedOption) {\r\n\t\t\t\tselectedFacetModelsCount++; // Increment the count if any option in this facet is selected\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// If more than one facet model has selected options, we will call the api to get hits by passing \"hitsonly\" value true\r\n\t\tif (selectedFacetModelsCount > 1) {\r\n\t\t\texecuteSearch(newSearchState, '', true);\r\n\t\t} else {\r\n\t\t\t// use normal calulcated hit count\r\n\t\t\tsetMobileFilteredItemsCount(\r\n\t\t\t\tselectedFacetModelsCount == 0\r\n\t\t\t\t\t? searchModel?.numberOfHits\r\n\t\t\t\t\t: totalFilteredHits + totalYearHits\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\tconst handleCheckboxChange = (checked: boolean, filterTypeOf: string) => {\r\n\t\tconst updatedFacets: UpdatedFacets = {\r\n\t\t\tfacets: { ...searchState.facets },\r\n\t\t};\r\n\r\n\t\t// Check if the key exists\r\n\t\tif (checked) {\r\n\t\t\t// If checked, add or update the facet with the boolean as a string\r\n\t\t\tupdatedFacets.facets[filterTypeOf] = [checked.toString()];\r\n\t\t} else {\r\n\t\t\t// If unchecked, remove only the specific facet\r\n\t\t\tdelete updatedFacets.facets[filterTypeOf];\r\n\t\t}\r\n\r\n\t\t/**below we update stage facet, sort object and total filtered count with updates */\r\n\r\n\t\t// Clone the current facets model to update it\r\n\t\tconst updatedFacetModels = stageFacetModels.map((facet: FacetModel) => ({\r\n\t\t\t...facet,\r\n\t\t\tfacetOptions: facet.facetOptions.map((option: FacetOption) => ({\r\n\t\t\t\t...option,\r\n\t\t\t\tselected: facet.key === filterTypeOf ? checked : option.selected,\r\n\t\t\t})),\r\n\t\t}));\r\n\t\tsetstageFacetModels(updatedFacetModels);\r\n\r\n\t\tconst newSearchState = {\r\n\t\t\t...searchState,\r\n\t\t\t...updatedFacets,\r\n\t\t\tp: 1,\r\n\t\t};\r\n\t\tsetSearchState(newSearchState);\r\n\r\n\t\t/** logic to calculate the total hits and checking if there are multiple facet type got checked */\r\n\t\tlet totalFilteredHits = 0;\r\n\t\tlet selectedFacetModelsCount = 0;\r\n\r\n\t\tfor (const facet of updatedFacetModels) {\r\n\t\t\tlet hasSelectedOption = false;\r\n\r\n\t\t\tif (facet.key === 'ReleaseDate' && facet.facetType === 'dateSelect') {\r\n\t\t\t\t// Handle date facetOptions\r\n\t\t\t\tfor (const option of facet.facetOptions) {\r\n\t\t\t\t\tif (option.timeInterval) {\r\n\t\t\t\t\t\t// Check if any of the selectable years are selected\r\n\t\t\t\t\t\tfor (const yearOption of option.timeInterval.selectableYears) {\r\n\t\t\t\t\t\t\tif (yearOption.selected) {\r\n\t\t\t\t\t\t\t\thasSelectedOption = true;\r\n\t\t\t\t\t\t\t\tbreak; // Since only one year can be selected, break after finding the first selected one\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (\r\n\t\t\t\t\t\tupdatedFacets.facets[facet.key] &&\r\n\t\t\t\t\t\tupdatedFacets.facets[facet.key].includes(option.key) &&\r\n\t\t\t\t\t\toption.selected\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\ttotalFilteredHits += option.hits;\r\n\t\t\t\t\t\thasSelectedOption = true;\r\n\t\t\t\t\t\tbreak; // Only one option can be selected, so break after finding the first selected one\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else if (facet.key === 'IsOfficialStatistics') {\r\n\t\t\t\t// Handle other regular facetOptions\r\n\t\t\t\tfor (const option of facet.facetOptions) {\r\n\t\t\t\t\tif (updatedFacets.facets[facet.key] && option.selected) {\r\n\t\t\t\t\t\ttotalFilteredHits += option.hits;\r\n\t\t\t\t\t\thasSelectedOption = true; // Marking this facet model has a selected option\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// Handle other regular facetOptions\r\n\t\t\t\tfor (const option of facet.facetOptions) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tupdatedFacets.facets[facet.key] &&\r\n\t\t\t\t\t\tupdatedFacets.facets[facet.key].includes(option.key) &&\r\n\t\t\t\t\t\toption.selected\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\ttotalFilteredHits += option.hits;\r\n\t\t\t\t\t\thasSelectedOption = true; // Marking this facet model has a selected option\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (hasSelectedOption) {\r\n\t\t\t\tselectedFacetModelsCount++; // Increment the count if any option in this facet is selected\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// If more than one facet model has selected options, we will call the api to get hits by passing \"hitsonly\" value true\r\n\t\tif (selectedFacetModelsCount > 1) {\r\n\t\t\texecuteSearch(newSearchState, '', true);\r\n\t\t} else {\r\n\t\t\t// use normal calulcated hit count\r\n\t\t\tsetMobileFilteredItemsCount(\r\n\t\t\t\tselectedFacetModelsCount == 0\r\n\t\t\t\t\t? searchModel?.numberOfHits\r\n\t\t\t\t\t: totalFilteredHits + mobileYearItemsCount\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\t/**filter submit function for mobile */\r\n\tconst onMobileSubmit = () => {\r\n\t\texecuteSearch(searchState);\r\n\t\tif (showModal) closeModal();\r\n\t};\r\n\r\n\t/**autocomplete submit function */\r\n\tconst handleAutocompleteSubmit = (suggestion: string) => {\r\n\t\tif (suggestion.length > 0) {\r\n\t\t\tconst params = {\r\n\t\t\t\t...searchState,\r\n\t\t\t\tq: suggestion,\r\n\t\t\t\tp: 1,\r\n\t\t\t};\r\n\t\t\tsetSearchState(params);\r\n\t\t\texecuteSearch(params);\r\n\t\t\tsetUserQuery(suggestion);\r\n\t\t}\r\n\t};\r\n\r\n\t/**filter clear all function */\r\n\tconst mobileClearAll = () => {\r\n\t\tresetFilters();\r\n\t};\r\n\r\n\tconst executeSearch = (\r\n\t\tparams: queryParameters,\r\n\t\tcurrentURL: string = '',\r\n\t\thitsOnly: boolean = false\r\n\t) => {\r\n\t\tconst queryParams = {} as queryParameters;\r\n\t\tconst searchURL = {} as queryParameters;\r\n\r\n\t\tqueryParams.p = params.p;\r\n\t\tsearchURL.p = params.p && params.p > 1 ? params.p : null;\r\n\t\tqueryParams.s = params.s ? params.s : 12;\r\n\t\tqueryParams.id = params.id;\r\n\t\tqueryParams.lang = params.lang;\r\n\r\n\t\tif (params.q) {\r\n\t\t\tqueryParams.q = params.q.trimStart();\r\n\t\t\tsearchURL.q = queryParams.q;\r\n\t\t}\r\n\r\n\t\t/* special treatment for facets */\r\n\t\tconst facetsArray = Object.entries(params.facets);\r\n\r\n\t\tconst encodesFilters = facetsArray\r\n\t\t\t.map(([key, values]) => {\r\n\t\t\t\tif (values.length > 0) {\r\n\t\t\t\t\tconst formattedValues = values.map((value) =>\r\n\t\t\t\t\t\tencodeURIComponent(value)\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn `${key}:${formattedValues.join(':')}`;\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t})\r\n\t\t\t.filter((filter) => filter !== null) // Remove null values\r\n\t\t\t.join(';');\r\n\r\n\t\tconst filtersURL = encodesFilters !== '' ? `facets=${encodesFilters}` : '';\r\n\r\n\t\t/* build URL */\r\n\t\tconst queryFormated = buildQueryString(searchURL);\r\n\r\n\t\tlet queryURL = '';\r\n\t\tif (filtersURL.length > 0) {\r\n\t\t\tqueryURL += filtersURL;\r\n\t\t}\r\n\t\tif (queryFormated.length > 0) {\r\n\t\t\tqueryURL += (queryURL.length > 0 ? '&' : '') + queryFormated;\r\n\t\t}\r\n\r\n\t\tlet URL = currentURL.length > 0 && currentURL !== url ? currentURL : url;\r\n\r\n\t\t/* fetch results */\r\n\t\tconst queryParamsURL =\r\n\t\t\tfiltersURL.length > 0\r\n\t\t\t\t? filtersURL + '&' + buildQueryString(queryParams)\r\n\t\t\t\t: buildQueryString(queryParams);\r\n\r\n\t\t/**If hits only flag is true we will execute the api to get total hits otherwise we will execute the search and get results*/\r\n\t\tif (hitsOnly) {\r\n\t\t\tconst hitsOnlyURL = queryParamsURL && `${queryParamsURL}&hitsonly=true`;\r\n\t\t\tgetEpiSearchResult('/', searchApi, hitsOnlyURL)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tsetMobileFilteredItemsCount(res?.searchModel?.numberOfHits);\r\n\t\t\t\t})\r\n\t\t\t\t.catch((error) => {\r\n\t\t\t\t\tconsole.error('Error fetching hits only data:', error);\r\n\t\t\t\t});\r\n\t\t} else {\r\n\t\t\thistory.push({ pathname: URL, search: queryURL });\r\n\t\t\tsetShowAutocomplete(false);\r\n\t\t\tdispatch(\r\n\t\t\t\tfetchSearchResult(\r\n\t\t\t\t\tmodelType,\r\n\t\t\t\t\trootPageId,\r\n\t\t\t\t\t'searchResponse',\r\n\t\t\t\t\t'/',\r\n\t\t\t\t\tsearchApi,\r\n\t\t\t\t\tqueryParamsURL\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\t/** debounce function to execute search after 350ms */\r\n\tconst debouncedExecuteSearch = useCallback(\r\n\t\tdebounce((params: queryParameters, currentURL: string) => {\r\n\t\t\texecuteSearch(params, currentURL);\r\n\t\t}, 350),\r\n\t\t[]\r\n\t);\r\n\t/* \r\n\r\n\tconst debouncedSetPillItems = debounce(\r\n\t\t(updateFunction: (prevPillItems: any[]) => any[]) => {\r\n\t\t\tsetPillItems(updateFunction);\r\n\t\t},\r\n\t\t150\r\n\t); */\r\n\tconst getFacetsFromUrl = () => {\r\n\t\tlet urlParams = new URLSearchParams(history.location.search);\r\n\t\tlet facets: any = urlParams.get('facets');\r\n\r\n\t\tlet splitedFacets = facets?.split(';') || [];\r\n\t\tlet ff: { [key: string]: string[] } = {};\r\n\r\n\t\tsplitedFacets.forEach((facet: string) => {\r\n\t\t\tconst [key, ...values] = facet.split(':');\r\n\t\t\tconst decodedValues = values.map((value) => decodeURIComponent(value));\r\n\r\n\t\t\tif (!ff[key]) {\r\n\t\t\t\tff[key] = [];\r\n\t\t\t}\r\n\t\t\tff[key] = ff[key].concat(decodedValues);\r\n\t\t});\r\n\r\n\t\treturn ff;\r\n\t};\r\n\treturn (\r\n\t\t<SearchOverlappBlock>\r\n\t\t\t<form onSubmit={handleSubmit} role=\"search\">\r\n\t\t\t\t{/* SEARCH */}\r\n\t\t\t\t<label className=\"as-h3\" htmlFor=\"userListingInputQuery\">\r\n\t\t\t\t\t{searchTopic}\r\n\t\t\t\t</label>\r\n\t\t\t\t<SearchInputWrapper>\r\n\t\t\t\t\t<div className=\"autocomplete-section\">\r\n\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\tid=\"userListingInputQuery\"\r\n\t\t\t\t\t\t\tplaceholder={searchPlaceholder ?? ''}\r\n\t\t\t\t\t\t\taria-label={searchActionText}\r\n\t\t\t\t\t\t\tmaxLength={200}\r\n\t\t\t\t\t\t\tvalue={userQuery}\r\n\t\t\t\t\t\t\tref={searchRef}\r\n\t\t\t\t\t\t\tonChange={(event) => handleUserQuery(event)}\r\n\t\t\t\t\t\t\tautoComplete=\"off\"\r\n\t\t\t\t\t\t\tenterKeyHint=\"search\"\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t{showAutocomplete && (\r\n\t\t\t\t\t\t\t<Autocomplete\r\n\t\t\t\t\t\t\t\tquery={userQuery}\r\n\t\t\t\t\t\t\t\tonSubmit={handleAutocompleteSubmit}\r\n\t\t\t\t\t\t\t\tcurrentState={searchState}\r\n\t\t\t\t\t\t\t\tautoCompleteApi={autoCompleteApi}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t{userQuery.length >= 1 && (\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName=\"search-close-icon\"\r\n\t\t\t\t\t\t\tonClick={resetSearch}\r\n\t\t\t\t\t\t\ttabIndex={0}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<IconCross\r\n\t\t\t\t\t\t\t\twidth=\"24px\"\r\n\t\t\t\t\t\t\t\theight=\"24px\"\r\n\t\t\t\t\t\t\t\taria-label=\"clean input field\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{!isNarrowDisplay && (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t<Button aria-label={searchActionText} type=\"submit\">\r\n\t\t\t\t\t\t\t\t{searchActionText}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</SearchInputWrapper>\r\n\t\t\t\t{query && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t{searchResultLabel?.length && searchModel.numberOfHits > 0 ? (\r\n\t\t\t\t\t\t\t<ResultMessageHelper>\r\n\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t{searchResultLabel.split('{0}').map((part, index) => {\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t<React.Fragment key={index}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{part}\r\n\t\t\t\t\t\t\t\t\t\t\t\t{index > 0 && <StyledSpan>\"{query}\"</StyledSpan>}\r\n\t\t\t\t\t\t\t\t\t\t\t</React.Fragment>\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t</ResultMessageHelper>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t!filterEnabled && (\r\n\t\t\t\t\t\t\t\t<ResultMessageHelper>\r\n\t\t\t\t\t\t\t\t\t<span className=\"span-flex\">\r\n\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t{searchResultLabelNoMatches.replace('{0}', query)}\r\n\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t<span className=\"as-label\">\r\n\t\t\t\t\t\t\t\t\t\t\t{searchResultLabelNoMatchesHint}\r\n\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t</ResultMessageHelper>\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t</form>\r\n\t\t\t<div>\r\n\t\t\t\t{/* FILTERS */}\r\n\t\t\t\t<label className=\"as-h4\" htmlFor=\"userListingFilter\">\r\n\t\t\t\t\t{filterLabel}\r\n\t\t\t\t</label>\r\n\t\t\t\t{/**this button only visible in mobile */}\r\n\t\t\t\t<AllFilterButton\r\n\t\t\t\t\tonClick={openModal}\r\n\t\t\t\t\ticonName=\"menu\"\r\n\t\t\t\t\tvariant={ButtonVariant.Tertiary}\r\n\t\t\t\t>\r\n\t\t\t\t\t{allFilterText}\r\n\t\t\t\t</AllFilterButton>\r\n\r\n\t\t\t\t{pillItem && pillItem.length > 0 && (\r\n\t\t\t\t\t<PillsBlock>\r\n\t\t\t\t\t\t{pillItem.length > 0 &&\r\n\t\t\t\t\t\t\tpillItem.map((pill, index) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<Pills\r\n\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\titems={[pill]}\r\n\t\t\t\t\t\t\t\t\t\tonRemove={() => onPillRemove(pill, true)}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t{pillItem.length > 1 && (\r\n\t\t\t\t\t\t\t<PillResetButton onClick={resetFilters}>\r\n\t\t\t\t\t\t\t\t<span>{clearAllFiltersText}</span>\r\n\t\t\t\t\t\t\t</PillResetButton>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</PillsBlock>\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t\t{/**all filter modal for mobile */}\r\n\t\t\t<FilterModal\r\n\t\t\t\tonClose={closeModal}\r\n\t\t\t\tonMobileSubmit={onMobileSubmit}\r\n\t\t\t\tonClear={mobileClearAll}\r\n\t\t\t\tfilteredCount={mobileFilteredItemsCount}\r\n\t\t\t\tclearAllText={clearAllFiltersText}\r\n\t\t\t\tfilterLabel={filterLabel}\r\n\t\t\t\tfilterExist={filterExist}\r\n\t\t\t\tshowFilterModal={showModal}\r\n\t\t\t>\r\n\t\t\t\t<AccordionFilter\r\n\t\t\t\t\tfacetModels={stageFacetModels}\r\n\t\t\t\t\tonChange={onMobileFilterChanged}\r\n\t\t\t\t\tfacets={searchState.facets}\r\n\t\t\t\t\tonDateSelectChanged={onDateSelectChanged}\r\n\t\t\t\t\tselectedDates={selectedDates}\r\n\t\t\t\t\tonCheckboxChanged={handleCheckboxChange}\r\n\t\t\t\t/>\r\n\t\t\t</FilterModal>\r\n\t\t</SearchOverlappBlock>\r\n\t);\r\n};\r\n\r\nexport default SearchByListngPageMobile;\r\n","import styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\n\r\nexport interface GrantsHeaderProps {\r\n\tcameFromSectionContent: boolean;\r\n}\r\n\r\nexport const GrantsHeaderDecalStyle = styled.div`\r\n\t${(props) => props.theme.typography.style5.getStyle()};\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space2}rem;\r\n`;\r\n\r\nexport const GrantsHeaderLastReviwedStyle = styled.div<GrantsHeaderProps>`\r\n\t${(props) => props.theme.typography.style9.getStyle()};\r\n\tpadding-top: ${(props) =>\r\n\t\tprops.cameFromSectionContent ? '0' : props.theme.spacing.space2}rem;\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tpadding-top: ${(props) =>\r\n\t\t\tprops.cameFromSectionContent ? '0' : props.theme.spacing.space1}rem;\r\n\t}\r\n`;\r\n\r\nexport const GrantsHeaderCategoriesStyle = styled.p`\r\n\tmargin: 0;\r\n\t${(props) =>\r\n\t\tprops.theme?.isMicrositeActive\r\n\t\t\t? props.theme.typography.style6.getStyle()\r\n\t\t\t: props.theme.typography.style7.getStyle()};\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tpadding-top: ${(props) => props.theme.spacing.space1}rem;\r\n\t}\r\n`;\r\n","/**\r\n * GrantsHeader\r\n */\r\n\r\nimport { Cell, Grid } from 'components/Boilerplate/Grid';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport Button from 'components/Button';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport Typography, { Heading } from 'components/Typography/Typography';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport React, { useContext } from 'react';\r\nimport { ThemeContext } from 'styled-components';\r\nimport {\r\n\tGrantsHeaderCategoriesStyle,\r\n\tGrantsHeaderDecalStyle,\r\n\tGrantsHeaderLastReviwedStyle,\r\n} from './GrantsHeader.styles';\r\nimport {\r\n\ttranslate,\r\n\tconvertDateWithMonthWrittenOut,\r\n\tformatCategories,\r\n} from 'utils/helper-utils';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectLocalization } from 'store/modules/model';\r\nimport EditableField from 'components/EditableField/EditableField';\r\nimport { Category } from 'pages/microsite/MicrositeArticlePage/MicrositeArticlePage.model';\r\n\r\ntype GrantsHeaderProps = {\r\n\tsectionHeading?: string | null;\r\n\theadingLevel?: number;\r\n\theading?: string | null;\r\n\tlastReviewed?: string | null;\r\n\tshowReviewDate?: boolean | null;\r\n\tcameFromSectionContent?: boolean;\r\n\tpreamble?: string | null;\r\n\tapplyLink?: LinkType | null;\r\n\tcolumns?: number;\r\n\theading_htmlAttributes?: any;\r\n\tpreamble_htmlAttributes?: any;\r\n\tpublicationDate?: string;\r\n\tcategories?: Category[];\r\n};\r\n\r\nexport const GrantsHeader: React.FC<GrantsHeaderProps> = ({\r\n\tsectionHeading,\r\n\theadingLevel,\r\n\theading,\r\n\tlastReviewed,\r\n\tshowReviewDate,\r\n\tcameFromSectionContent = false,\r\n\tpreamble,\r\n\tapplyLink,\r\n\tcolumns,\r\n\theading_htmlAttributes = {},\r\n\tpreamble_htmlAttributes = {},\r\n\tpublicationDate,\r\n\tcategories,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\tconst localization = useSelector(selectLocalization);\r\n\tconst lastReviewedText = translate(\r\n\t\t'/frontend/puff/lastreviewed',\r\n\t\t'Last Reviewed', // Granskad\r\n\t\tlocalization\r\n\t);\r\n\r\n\tconst content = (\r\n\t\t<>\r\n\t\t\t{sectionHeading && (\r\n\t\t\t\t<GrantsHeaderDecalStyle>{sectionHeading}</GrantsHeaderDecalStyle>\r\n\t\t\t)}\r\n\t\t\t<EditableField opeProperty={heading_htmlAttributes}>\r\n\t\t\t\t{heading && (\r\n\t\t\t\t\t<Heading zeroBottom level={headingLevel}>\r\n\t\t\t\t\t\t{heading}\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t)}\r\n\t\t\t</EditableField>\r\n\r\n\t\t\t{showReviewDate && lastReviewedText && lastReviewed && (\r\n\t\t\t\t<GrantsHeaderLastReviwedStyle\r\n\t\t\t\t\tcameFromSectionContent={cameFromSectionContent}\r\n\t\t\t\t>\r\n\t\t\t\t\t{lastReviewedText}:{' '}\r\n\t\t\t\t\t{convertDateWithMonthWrittenOut(lastReviewed, lastReviewedText)}\r\n\t\t\t\t</GrantsHeaderLastReviwedStyle>\r\n\t\t\t)}\r\n\r\n\t\t\t{publicationDate && categories?.length && (\r\n\t\t\t\t<GrantsHeaderCategoriesStyle>\r\n\t\t\t\t\t{formatCategories(categories)}: {publicationDate}\r\n\t\t\t\t</GrantsHeaderCategoriesStyle>\r\n\t\t\t)}\r\n\r\n\t\t\t<Space bottom={0}>\r\n\t\t\t\t<EditableField opeProperty={preamble_htmlAttributes}>\r\n\t\t\t\t\t{preamble && (\r\n\t\t\t\t\t\t<Space\r\n\t\t\t\t\t\t\ttop={\r\n\t\t\t\t\t\t\t\tthemeContext.isMicrositeActive\r\n\t\t\t\t\t\t\t\t\t? themeContext.spacing.space1\r\n\t\t\t\t\t\t\t\t\t: themeContext.spacing.space2\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbottom={0}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Typography as=\"preamble\" {...preamble_htmlAttributes}>\r\n\t\t\t\t\t\t\t\t{preamble}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</EditableField>\r\n\r\n\t\t\t\t{applyLink && (\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\tvariant={ButtonVariant.Primary}\r\n\t\t\t\t\t\tto={applyLink.url}\r\n\t\t\t\t\t\texternal={applyLink.isFile}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{applyLink.heading}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t)}\r\n\t\t\t</Space>\r\n\t\t</>\r\n\t);\r\n\r\n\tif (columns) {\r\n\t\treturn (\r\n\t\t\t<Grid inner={true}>\r\n\t\t\t\t<Cell span={columns}>{content}</Cell>\r\n\t\t\t</Grid>\r\n\t\t);\r\n\t}\r\n\r\n\treturn content;\r\n};\r\n","import React, { useContext, useEffect, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { SearchListingResultModel } from 'types/epi';\r\nimport { getSessionStorage } from 'hooks/useSessionStorage';\r\nimport { NVseStandardListingPageModel } from './NVseStandardListingPage.model';\r\nimport { selectSessionStorage } from 'store/modules/model';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\n\r\nimport {\r\n\tBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport ListingPageGrantsHeader from 'components/ListingPageGrantsHeader';\r\nimport PuffListItem from 'components/PuffListItem';\r\nimport SearchByListngPage from 'components/SearchByListngPage';\r\nimport { ListingPageShowMoreButton } from 'components/Panels/ListPageShowMoreButton';\r\nimport { FacetModel } from 'components/SearchByListngPage/SearchByListngPage.model';\r\nimport Typography, { H4 } from 'components/Typography';\r\n\r\nimport {\r\n\tTotalCountDisplay,\r\n\tClearAllLinkContainer,\r\n} from './NVseStandardListingPage.styles';\r\nimport SearchByListngPageMobile from 'components/SearchByListngPageMobile';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport { GrantsHeader } from 'components/Panels/GrantsHeader';\r\n\r\n/**\r\n * # Listningssida för statistik\r\n * Modeltype:<code>NVseStandardListingPage</code>\r\n *\r\n *\r\n * Landningssida för webbplatsens standard Listing Page\r\n */\r\nconst NVseStandardListingPage: React.FC<NVseStandardListingPageModel> = ({\r\n\tid,\r\n\tmodelType,\r\n\theading,\r\n\tpreamble,\r\n\tepi,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n\tthemeTop,\r\n\tfilterLabel,\r\n\tsearchActionText,\r\n\tloadMoreSearchResults,\r\n\tsearchTopic,\r\n\tsearchPlaceholder,\r\n\tsearchResultLabel,\r\n\tsearchResultLabelNoMatchesHint,\r\n\tsearchResultLabelNoMatches,\r\n\tsearchModel,\r\n\tdisplayedResultsText,\r\n\turl,\r\n\tclearAllFiltersText,\r\n\tshowFiltersText,\r\n\tnumberOfSearchResults,\r\n\tapiEndpointSearch,\r\n\tapiEndpointAutoComplete,\r\n\tresetSearchInput,\r\n\tpublicationLink,\r\n}) => {\r\n\t// will need localization to culture: sv\r\n\tconst themeContext = useContext(ThemeContext);\r\n\tconst isRegulationPage = modelType === 'NVseRegulationsListingPage';\r\n\t// Create a copy of the searchModel with updated page property\r\n\tconst isNarrowDisplay = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.tablet - 1,\r\n\t});\r\n\t//page flag is used execute a new search when user clicks on see more button\r\n\tconst [pageChanged, setPageChanged] = useState<boolean>(false);\r\n\tconst [showClearAll, setShowClearAll] = useState<boolean>(false);\r\n\tconst [filterEnabled, setFilterEnabled] = useState<boolean>(false);\r\n\tconst [\r\n\t\tlistingResultModel,\r\n\t\tsetListingResultModel,\r\n\t] = useState<SearchListingResultModel>({\r\n\t\tsearchModel,\r\n\t\tnumberOfSearchResults,\r\n\t});\r\n\tconst sessionStorageModel = useSelector(selectSessionStorage);\r\n\t/**checking if there is any filter exist in search model and this will be used to show/hide no result feedback and clear all link */\r\n\tconst checkFilterEnabled = (facetModels: FacetModel[]) => {\r\n\t\tfor (const model of facetModels) {\r\n\t\t\tfor (const option of model.facetOptions) {\r\n\t\t\t\tif (option.selected) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\tuseEffect(() => {\r\n\t\t// If we do not have any saved state, we execute the search.\r\n\t\tconst pageSessionStorage = getSessionStorage(\r\n\t\t\tsessionStorageModel,\r\n\t\t\tmodelType,\r\n\t\t\tid\r\n\t\t);\r\n\t\tsetPageChanged(false);\r\n\t\tsetShowClearAll(false);\r\n\t\tif (pageSessionStorage?.data) {\r\n\t\t\tcheckFilterEnabled(\r\n\t\t\t\tpageSessionStorage?.data?.searchResponse?.searchModel?.facetModels\r\n\t\t\t)\r\n\t\t\t\t? setFilterEnabled(true)\r\n\t\t\t\t: setFilterEnabled(false);\r\n\t\t\tif (pageSessionStorage?.data?.searchResponse?.searchModel.page === 1) {\r\n\t\t\t\tsetListingResultModel((prevState) => ({\r\n\t\t\t\t\t...pageSessionStorage?.data?.searchResponse,\r\n\t\t\t\t\tsearchModel: {\r\n\t\t\t\t\t\t...pageSessionStorage?.data?.searchResponse?.searchModel,\r\n\t\t\t\t\t},\r\n\t\t\t\t}));\r\n\t\t\t} else {\r\n\t\t\t\tsetListingResultModel((prevState) => ({\r\n\t\t\t\t\t...pageSessionStorage?.data?.searchResponse,\r\n\r\n\t\t\t\t\tsearchModel: {\r\n\t\t\t\t\t\t...pageSessionStorage?.data?.searchResponse?.searchModel,\r\n\t\t\t\t\t\tresults: [\r\n\t\t\t\t\t\t\t...prevState.searchModel.results,\r\n\t\t\t\t\t\t\t...pageSessionStorage?.data?.searchResponse?.searchModel?.results,\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t}\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [sessionStorageModel]);\r\n\r\n\tconst handleShowMoreClick = () => {\r\n\t\tsetListingResultModel((prevState) => ({\r\n\t\t\t...prevState,\r\n\t\t\tsearchModel: {\r\n\t\t\t\t...prevState.searchModel,\r\n\t\t\t\tpage: prevState.searchModel.page + 1,\r\n\t\t\t},\r\n\t\t}));\r\n\t\tsetPageChanged(true);\r\n\t};\r\n\r\n\t// #region Space calculation\r\n\r\n\tlet lastBlockType = BlockType.Element;\r\n\r\n\tlastBlockType = BlockType.Element;\r\n\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{themeContext && (\r\n\t\t\t\t<>\r\n\t\t\t\t\t{!isRegulationPage ? (\r\n\t\t\t\t\t\t<ListingPageGrantsHeader\r\n\t\t\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\t\t\theading={heading}\r\n\t\t\t\t\t\t\theadingLevel={1}\r\n\t\t\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t\t\t\tthemeTop={themeTop}\r\n\t\t\t\t\t\t\tthemeContext={themeContext}\r\n\t\t\t\t\t\t\tpublicationLink={publicationLink}\r\n\t\t\t\t\t\t></ListingPageGrantsHeader>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<Space\r\n\t\t\t\t\t\t\ttop={themeContext.spacing.getPageTopPadding()}\r\n\t\t\t\t\t\t\tbottom={isNarrowDisplay ? 0 : spaceAfterLast}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t\t\t<GrantsHeader\r\n\t\t\t\t\t\t\t\t\theadingLevel={1}\r\n\t\t\t\t\t\t\t\t\theading={heading}\r\n\t\t\t\t\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t\t\t\t\t></GrantsHeader>\r\n\t\t\t\t\t\t\t</Grid>\r\n\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</>\r\n\t\t\t)}\r\n\r\n\t\t\t<Grid>\r\n\t\t\t\t{!isNarrowDisplay || isRegulationPage ? (\r\n\t\t\t\t\t<SearchByListngPage\r\n\t\t\t\t\t\tfilterLabel={filterLabel}\r\n\t\t\t\t\t\tsearchActionText={searchActionText}\r\n\t\t\t\t\t\tsearchTopic={searchTopic}\r\n\t\t\t\t\t\tsearchResultLabel={searchResultLabel}\r\n\t\t\t\t\t\tsearchPlaceholder={searchPlaceholder}\r\n\t\t\t\t\t\tsearchResultLabelNoMatchesHint={searchResultLabelNoMatchesHint}\r\n\t\t\t\t\t\tsearchResultLabelNoMatches={searchResultLabelNoMatches}\r\n\t\t\t\t\t\tsearchModel={listingResultModel.searchModel}\r\n\t\t\t\t\t\tpageChanged={pageChanged}\r\n\t\t\t\t\t\turl={url}\r\n\t\t\t\t\t\trootPageId={id}\r\n\t\t\t\t\t\tclearAllFiltersText={clearAllFiltersText}\r\n\t\t\t\t\t\tmodelType={modelType}\r\n\t\t\t\t\t\tsearchApi={apiEndpointSearch}\r\n\t\t\t\t\t\tautoCompleteApi={apiEndpointAutoComplete}\r\n\t\t\t\t\t\tshowClearAll={showClearAll}\r\n\t\t\t\t\t\tfilterEnabled={filterEnabled}\r\n\t\t\t\t\t/>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<SearchByListngPageMobile\r\n\t\t\t\t\t\tfilterLabel={filterLabel}\r\n\t\t\t\t\t\tsearchActionText={searchActionText}\r\n\t\t\t\t\t\tsearchTopic={searchTopic}\r\n\t\t\t\t\t\tsearchResultLabel={searchResultLabel}\r\n\t\t\t\t\t\tsearchPlaceholder={searchPlaceholder}\r\n\t\t\t\t\t\tsearchResultLabelNoMatchesHint={searchResultLabelNoMatchesHint}\r\n\t\t\t\t\t\tsearchResultLabelNoMatches={searchResultLabelNoMatches}\r\n\t\t\t\t\t\tsearchModel={listingResultModel.searchModel}\r\n\t\t\t\t\t\tpageChanged={pageChanged}\r\n\t\t\t\t\t\tallFilterText={showFiltersText}\r\n\t\t\t\t\t\turl={url}\r\n\t\t\t\t\t\trootPageId={id}\r\n\t\t\t\t\t\tclearAllFiltersText={clearAllFiltersText}\r\n\t\t\t\t\t\tmodelType={modelType}\r\n\t\t\t\t\t\tsearchApi={apiEndpointSearch}\r\n\t\t\t\t\t\tautoCompleteApi={apiEndpointAutoComplete}\r\n\t\t\t\t\t\tshowClearAll={showClearAll}\r\n\t\t\t\t\t\tfilterEnabled={filterEnabled}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\t\t\t</Grid>\r\n\r\n\t\t\t<Space bottom={spaceAfterLast}>\r\n\t\t\t\t<div>\r\n\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t{listingResultModel.searchModel && (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t{listingResultModel.searchModel.page &&\r\n\t\t\t\t\t\t\t\t\tlistingResultModel.searchModel.size &&\r\n\t\t\t\t\t\t\t\t\tlistingResultModel.searchModel.numberOfHits > 0 && (\r\n\t\t\t\t\t\t\t\t\t\t<TotalCountDisplay isRegulationPage={isRegulationPage}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tas=\"h4\"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttext={displayedResultsText\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t?.replace(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'{0}',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlistingResultModel?.searchModel?.results.length.toString()\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.replace(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'{1}',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlistingResultModel.searchModel.numberOfHits\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? listingResultModel.searchModel?.numberOfHits?.toString()\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: listingResultModel.searchModel?.totalHits?.toString()\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\trole=\"status\"\r\n\t\t\t\t\t\t\t\t\t\t\t\taria-live=\"polite\"\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t</TotalCountDisplay>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t{listingResultModel.searchModel.results?.length === 0 &&\r\n\t\t\t\t\t\t\t\t\tfilterEnabled && (\r\n\t\t\t\t\t\t\t\t\t\t<ClearAllLinkContainer>\r\n\t\t\t\t\t\t\t\t\t\t\t<H4>{searchResultLabelNoMatches}</H4>\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\trole=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttabIndex={0}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetShowClearAll(true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{resetSearchInput}\r\n\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t</ClearAllLinkContainer>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t{listingResultModel.searchModel.results?.length > 0 && (\r\n\t\t\t\t\t\t\t\t\t<Space\r\n\t\t\t\t\t\t\t\t\t\ttop={themeContext.spacing.space3}\r\n\t\t\t\t\t\t\t\t\t\tstack={themeContext.spacing.space1}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{listingResultModel.searchModel.results.map(\r\n\t\t\t\t\t\t\t\t\t\t\t(item, index) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tconst linkItem: LinkType = {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\turl: item.url,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theading: item.heading,\r\n\t\t\t\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<PuffListItem\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdecal={item.decal}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tnfsText={item.nfsText}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlink={linkItem}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpreamble={item.excerpt}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\timage={item.image}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></PuffListItem>\r\n\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Grid>\r\n\t\t\t\t\t{listingResultModel.searchModel &&\r\n\t\t\t\t\t\tlistingResultModel.searchModel.page <\r\n\t\t\t\t\t\t\tlistingResultModel.searchModel.totalPages && (\r\n\t\t\t\t\t\t\t<Grid paddingTop={true} paddingBottom={false}>\r\n\t\t\t\t\t\t\t\t<ListingPageShowMoreButton\r\n\t\t\t\t\t\t\t\t\theader={loadMoreSearchResults}\r\n\t\t\t\t\t\t\t\t\tonClick={handleShowMoreClick}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</Grid>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t</div>\r\n\t\t\t</Space>\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default NVseStandardListingPage;\r\n","import styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\n\r\nexport const Subtitle = styled.p`\r\n\t${(props) => props.theme.typography.style6.getStyle()};\r\n\tmargin-top: ${(props) => props.theme.spacing.space3}rem;\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space3}rem;\r\n`;\r\n\r\nexport const MicroSubtitle = styled.p`\r\n\t${(props) => props.theme.typography.style7.getStyle()};\r\n\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\tmargin-top: ${(props) => props.theme.spacing.space3}rem;\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space3}rem;\r\n`;\r\n\r\nexport const TopImage = styled.img`\r\n\twidth: 100%;\r\n\tmax-height: 508px;\r\n\tobject-fit: cover;\r\n\r\n\t~ :nth-child(2) {\r\n\t\tposition: relative;\r\n\t\tmargin-top: -${(props) => props.theme.spacing.space7}rem;\r\n\t\t${mediaQueries.phone} {\r\n\t\t\tmargin-top: -${(props) => props.theme.spacing.space4}rem;\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nexport const HeroContainer = styled.div`\r\n\tbackground-color: ${(props) => props.theme.colors.white};\r\n\r\n\tpadding: ${(props) => props.theme.spacing.space4}rem\r\n\t\t${(props) => (props.theme.isMicrositeActive ? '11' : '3')}rem;\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tpadding: ${(props) => props.theme.spacing.space4}rem\r\n\t\t\t${(props) => props.theme.spacing.space2}rem;\r\n\t}\r\n\ttext-align: center;\r\n`;\r\n\r\nexport const ActionsContainer = styled.div`\r\n\tdisplay: inline-flex;\r\n\tflex-wrap: wrap;\r\n\tgap: ${(props) => props.theme.spacing.space2}rem;\r\n\tjustify-content: center;\r\n`;\r\n","import { Grid } from 'components/Boilerplate/Grid';\r\nimport Button from 'components/Button';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport { ImageFragmentModel } from 'types/fragments';\r\nimport { LinkListItem } from './NVseStartPage.model';\r\nimport {\r\n\tActionsContainer,\r\n\tHeroContainer,\r\n\tMicroSubtitle,\r\n\tSubtitle,\r\n\tTopImage,\r\n} from './PageTopOverlappBanner.styles';\r\nimport { useImageTitle } from 'hooks/useImageTitle';\r\nimport EditableField from 'components/EditableField/EditableField';\r\n\r\ntype PageTopOverlappBannerProps = {\r\n\timage: ImageFragmentModel;\r\n\timage_htmlAttributes?: any;\r\n\r\n\theadingLevel?: number;\r\n\theading: string | null;\r\n\theading_htmlAttributes?: any;\r\n\r\n\tpreamble: string | null;\r\n\tpreamble_htmlAttributes?: any;\r\n\r\n\tlinkList?: LinkListItem[];\r\n\r\n\t/* ask if is Microsite */\r\n\tisMicrositeActive?: boolean;\r\n};\r\n\r\nconst PageTopOverlappBanner = ({\r\n\timage,\r\n\theadingLevel,\r\n\theading,\r\n\tpreamble,\r\n\tlinkList,\r\n\timage_htmlAttributes = {},\r\n\theading_htmlAttributes = {},\r\n\tpreamble_htmlAttributes = {},\r\n\tisMicrositeActive = false,\r\n}: PageTopOverlappBannerProps) => {\r\n\tconst title = useImageTitle(\r\n\t\timage?.photographer,\r\n\t\timage?.agency,\r\n\t\timage?.illustrator\r\n\t);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<EditableField opeProperty={image_htmlAttributes}>\r\n\t\t\t\t{image && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<TopImage\r\n\t\t\t\t\t\t\talt={image.alt}\r\n\t\t\t\t\t\t\tsrc={image.src}\r\n\t\t\t\t\t\t\tsrcSet={image.srcSet}\r\n\t\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t\t></TopImage>\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t</EditableField>\r\n\r\n\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t<HeroContainer>\r\n\t\t\t\t\t<EditableField opeProperty={heading_htmlAttributes}>\r\n\t\t\t\t\t\t{heading && (\r\n\t\t\t\t\t\t\t<Heading\r\n\t\t\t\t\t\t\t\tlevel={headingLevel}\r\n\t\t\t\t\t\t\t\thtmlAttributes={heading_htmlAttributes}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{heading}\r\n\t\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</EditableField>\r\n\t\t\t\t\t{isMicrositeActive ? (\r\n\t\t\t\t\t\t<MicroSubtitle {...preamble_htmlAttributes}>\r\n\t\t\t\t\t\t\t{preamble}\r\n\t\t\t\t\t\t</MicroSubtitle>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<EditableField opeProperty={preamble_htmlAttributes}>\r\n\t\t\t\t\t\t\t<Subtitle {...preamble_htmlAttributes}>{preamble}</Subtitle>\r\n\t\t\t\t\t\t</EditableField>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{linkList && linkList.length > 0 && (\r\n\t\t\t\t\t\t<ActionsContainer>\r\n\t\t\t\t\t\t\t{linkList.map((item, index) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\tvariant={ButtonVariant.Tertiary}\r\n\t\t\t\t\t\t\t\t\t\tto={item.url}\r\n\t\t\t\t\t\t\t\t\t\texternal={item.isFile}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{item.text}\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t</ActionsContainer>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</HeroContainer>\r\n\t\t\t</Grid>\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default PageTopOverlappBanner;\r\n","/**\r\n * FjallStartPage\r\n */\r\n\r\nimport React, { useContext } from 'react';\r\nimport EpiFragments, {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { FjallStartPageModel } from './FjallStartPage.model';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport PageTopOverlappBanner from 'pages/NVseStartPage/PageTopOverlappBanner';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { FragmentModelTypes } from 'types/fragments';\r\n\r\n/** Main description for this component. */\r\nconst FjallStartPage: React.FC<FjallStartPageModel> = ({\r\n\theading,\r\n\tpreamble,\r\n\tmodelType,\r\n\timage,\r\n\tbottomItems,\r\n\tlinkList,\r\n\tepi,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tlet lastBlockType = BlockType.Element;\r\n\tif (bottomItems.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\tbottomItems,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t}\r\n\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\treturn (\r\n\t\t<Space bottom={spaceAfterLast}>\r\n\t\t\t<PageTopOverlappBanner\r\n\t\t\t\timage={image}\r\n\t\t\t\timage_htmlAttributes={_properties?.image}\r\n\t\t\t\theading={heading}\r\n\t\t\t\theadingLevel={1}\r\n\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\tpreamble={preamble}\r\n\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\tlinkList={linkList}\r\n\t\t\t\tisMicrositeActive={themeContext.isMicrositeActive}\r\n\t\t\t></PageTopOverlappBanner>\r\n\r\n\t\t\t<EpiFragments\r\n\t\t\t\tmodelType={modelType}\r\n\t\t\t\tpreviousBlockType={BlockType.Element}\r\n\t\t\t\tepi={epi}\r\n\t\t\t\theadingLevel={2}\r\n\t\t\t\toverrideSpacing={themeContext.spacing.space3}\r\n\t\t\t\tfragments={bottomItems as FragmentModelTypes[]}\r\n\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t/>\r\n\t\t</Space>\r\n\t);\r\n};\r\n\r\nexport default FjallStartPage;\r\n","/**\r\n * MegaMenu - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport { accessibilityFocus } from 'theme/styles';\r\nimport { isRedirectProps, selectedProps } from './MegaMenu';\r\n\r\nexport const BackgroundOverlayStyle = styled.div<any>`\r\n\tposition: fixed;\r\n\tz-index: 1;\r\n\ttop: 0;\r\n\tleft: 0;\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\toverflow-x: hidden;\r\n\r\n\ttransition: background-color 200ms ease-in-out;\r\n\tbackground-color: ${({ state }) => {\r\n\t\tswitch (state) {\r\n\t\t\tcase 'entering':\r\n\t\t\tcase 'entered':\r\n\t\t\t\treturn 'rgba(0, 0, 0, 0.17);';\r\n\t\t\tcase 'exiting':\r\n\t\t\tcase 'exited':\r\n\t\t\t\treturn 'rgba(0, 0, 0, 0);';\r\n\t\t}\r\n\t}};\r\n`;\r\n\r\nexport const MegaMenuListsContainer = styled.div<any>`\r\n\tdisplay: flex;\r\n\theight: 100vh;\r\n\r\n\t> *:not(:last-child) {\r\n\t\tborder-right: 1px solid #eeeeee;\r\n\t}\r\n\r\n\t> div > div > button {\r\n\t\ttext-transform: ${(props) =>\r\n\t\t\tprops.theme.isMicrositeActive ? 'none' : 'uppercase'};\r\n\t\tmargin-top: ${(props) => props.theme.spacing.space4}rem;\r\n\t\tmargin-left: ${(props) => props.theme.spacing.space3}rem;\r\n\t}\r\n\r\n\tflex: 1;\r\n\tposition: fixed;\r\n\ttop: 0;\r\n\tleft: 0;\r\n\tz-index: 1;\r\n\r\n\ttransition: transform 200ms ease-in-out;\r\n\ttransform: ${({ state }) => {\r\n\t\tswitch (state) {\r\n\t\t\tcase 'entering':\r\n\t\t\tcase 'entered':\r\n\t\t\t\treturn 'translateX(0px)';\r\n\t\t\tcase 'exiting':\r\n\t\t\tcase 'exited':\r\n\t\t\t\treturn 'translateX(-100%)';\r\n\t\t}\r\n\t}};\r\n`;\r\n\r\nexport const MegaMenuHeaderContainer = styled.div`\r\n\tpadding-left: 25px;\r\n\tpadding-right: 25px;\r\n\tpadding-top: 10px;\r\n\tpadding-bottom: 10px;\r\n\tmargin: 0px;\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space2}rem;\r\n`;\r\n\r\nexport const MegaMenuCloseContainer = styled.div`\r\n\theight: ${(props) => props.theme.spacing.space8}rem;\r\n`;\r\n\r\nexport const MegaMenuListContainer = styled.div<any>`\r\n\t${(props) => props.theme.typography.style4.getStyle()};\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tflex: 1;\r\n\twidth: 30vw;\r\n\tmax-width: 360px;\r\n\r\n\t${mediaQueries.phone} {\r\n\t\twidth: 100vw;\r\n\t\tmin-width: ${breakpointsNumber.phone}px;\r\n\t\tmax-width: none;\r\n\t}\r\n\r\n\t${mediaQueries.tablet} {\r\n\t\twidth: 100vw;\r\n\t\tmin-width: ${breakpointsNumber.tablet}px;\r\n\t\tmax-width: 50vw;\r\n\t}\r\n\r\n\tbackground-color: ${(props) => props.theme.colors.white};\r\n\tpadding-bottom: ${(props) => props.theme.spacing.space5}rem;\r\n\r\n\ttransition: transform 200ms ease-in-out;\r\n\ttransform: ${({ state }) => {\r\n\t\tswitch (state) {\r\n\t\t\tcase 'entering':\r\n\t\t\tcase 'entered':\r\n\t\t\t\treturn 'translateX(0)';\r\n\t\t\tcase 'exiting':\r\n\t\t\tcase 'exited':\r\n\t\t\t\treturn 'translateX(-100%)';\r\n\t\t}\r\n\t}};\r\n\r\n\toverflow: hidden;\r\n\tnav {\r\n\t\toverflow: auto;\r\n\t}\r\n\tul {\r\n\t\tlist-style-type: none;\r\n\t\tpadding: 0px;\r\n\t\tmargin: 0px;\r\n\t\toverflow-y: auto;\r\n\t\tflex: 1;\r\n\t}\r\n`;\r\n\r\n/**\r\n * Root (first level) menu list item that has children\r\n */\r\nexport const MegaMenuRootItem = styled.li<selectedProps>`\r\n\tdisplay: flex;\r\n\r\n\tbutton {\r\n\t\tcursor: pointer;\r\n\t\tflex: 1;\r\n\t\tdisplay: flex;\r\n\t\ttext-align: left;\r\n\t\tborder-radius: 0px;\r\n\t\tpadding-left: 25px;\r\n\t\tpadding-right: 25px;\r\n\t\tpadding-top: 11px;\r\n\t\tpadding-bottom: 12px;\r\n\t\t> *:first-child {\r\n\t\t\tflex: 1;\r\n\t\t}\r\n\t\tbackground-color: transparent;\r\n\t\tborder: none;\r\n\t\tcolor: unset;\r\n\t\t${(props) => props.theme.typography.style4.getStyle()};\r\n\t\t&:focus {\r\n\t\t\t${accessibilityFocus('inset')};\r\n\t\t\toutline-offset: -2px;\r\n\t\t}\r\n\r\n\t\t> span {\r\n\t\t\tflex: 1;\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 1px;\r\n\t\t\tfont-weight: 400;\r\n\t\t}\r\n\t}\r\n\r\n\tbackground-color: ${(p) => (p.selected ? p.theme.colors.primary : 'white')};\r\n\tcolor: ${(p) =>\r\n\t\tp.selected ? p.theme.palette.text.secondary : p.theme.palette.text.primary};\r\n\t${(p) =>\r\n\t\t!p.selected && `&:hover {background-color: ${p.theme.colors.grey4}}`};\r\n\r\n\tsvg {\r\n\t\talign-self: center;\r\n\t\tfill: ${(p) =>\r\n\t\t\tp.selected\r\n\t\t\t\t? p.theme.palette.text.secondary\r\n\t\t\t\t: p.theme.palette.text.primary};\r\n\t}\r\n`;\r\n\r\nexport const MicrositeMegaMenuRootItem = styled.li<selectedProps>`\r\n\tdisplay: flex;\r\n\r\n\tdiv {\r\n\t\tbackground-color: ${(p) =>\r\n\t\t\tp.selected ? p.theme.colors.secondary : 'white'};\r\n\t\twidth: 5px;\r\n\t}\r\n\r\n\tbutton {\r\n\t\tcursor: pointer;\r\n\t\tflex: 1;\r\n\t\tdisplay: flex;\r\n\t\ttext-align: left;\r\n\t\tborder-radius: 0px;\r\n\t\tpadding-left: 25px;\r\n\t\tpadding-right: 25px;\r\n\t\tpadding-top: 11px;\r\n\t\tpadding-bottom: 12px;\r\n\t\t> *:first-child {\r\n\t\t\tflex: 1;\r\n\t\t}\r\n\t\tbackground-color: transparent;\r\n\t\tborder: none;\r\n\t\tcolor: unset;\r\n\t\t${(props) => props.theme.typography.style12.getStyle()};\r\n\t\t&:focus {\r\n\t\t\t${accessibilityFocus('inset')};\r\n\t\t\toutline-offset: -2px;\r\n\t\t}\r\n\r\n\t\t> span {\r\n\t\t\tflex: 1;\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 1px;\r\n\t\t}\r\n\t}\r\n\r\n\tbackground-color: ${(p) => (p.selected ? p.theme.colors.tertiary : 'white')};\r\n\tcolor: ${(p) => p.theme.palette.text.primary};\r\n\t${(p) =>\r\n\t\t!p.selected && `&:hover {background-color: ${p.theme.colors.grey4}}`};\r\n\r\n\tsvg {\r\n\t\talign-self: center;\r\n\t\tfill: ${(p) => p.theme.palette.text.primary};\r\n\t}\r\n`;\r\n\r\n/**\r\n * Root (first level) menu list link item\r\n */\r\nexport const MegaMenuRootLinkItem = styled.li<selectedProps>`\r\n\ta {\r\n\t\tdisplay: block;\r\n\t\t${(props) => props.theme.typography.style4.getStyle()};\r\n\t\tpadding-left: 25px;\r\n\t\tpadding-right: 25px;\r\n\t\tpadding-top: 11px;\r\n\t\tpadding-bottom: 12px;\r\n\t\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\t\ttext-decoration: none !important;\r\n\r\n\t\twidth: 100%;\r\n\r\n\t\t&:focus {\r\n\t\t\t${accessibilityFocus('inset')};\r\n\t\t\toutline-offset: -2px;\r\n\t\t}\r\n\t}\r\n\r\n\t&:hover {\r\n\t\tbackground-color: ${(props) => props.theme.colors.grey4};\r\n\t}\r\n`;\r\n\r\nexport const MegaMenuSiblingItem = styled(MegaMenuRootItem)`\r\n\tbutton {\r\n\t\t${(props) => props.theme.typography.style12.getStyle()};\r\n\t\tpadding-top: 11px;\r\n\t\tpadding-bottom: 10px;\r\n\t\t> span {\r\n\t\t\tflex: 1;\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 1px;\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nexport const MegaMenuSiblingLinkItem = styled.li<isRedirectProps>`\r\n\ta {\r\n\t\tdisplay: inline-block;\r\n\t\tpadding-left: 25px;\r\n\t\tpadding-right: 25px;\r\n\t\tpadding-top: 6px;\r\n\t\tpadding-bottom: 6px;\r\n\t\tvertical-align: middle;\r\n\t\twidth: 100%;\r\n\t\t${({ color }) => color && `color: ${color};`}\r\n\r\n\t\t${({ isRedirect }) =>\r\n\t\t\tisRedirect &&\r\n\t\t\t`\r\n\t\tfont-weight: 700;\r\n\t\t`}\r\n\r\n\t\t&:focus {\r\n\t\t\t${accessibilityFocus('inset')};\r\n\t\t\toutline-offset: -2px;\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nexport const MicrositeMegaMenuSiblingLinkItem = styled.li`\r\n\ta {\r\n\t\tdisplay: inline-block;\r\n\t\tpadding-left: 25px;\r\n\t\tpadding-right: 25px;\r\n\t\tpadding-top: 6px;\r\n\t\tpadding-bottom: 6px;\r\n\t\tvertical-align: middle;\r\n\t\twidth: 100%;\r\n\t\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\t\t${(props) => props.theme.typography.style12.getStyle()};\r\n\r\n\t\t&:focus {\r\n\t\t\t${accessibilityFocus('inset')};\r\n\t\t\toutline-offset: -2px;\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nexport const MegaMenuAlternativSiblingLinkItem = styled.li`\r\n\tpadding-left: 25px;\r\n\tpadding-right: 25px;\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space1}rem;\r\n\tmargin-top: 4px;\r\n\r\n\ta {\r\n\t\tdisplay: inline-block;\r\n\t\tpadding-left: 15px;\r\n\t\tpadding-right: 15px;\r\n\t\tpadding-top: 3px;\r\n\t\tpadding-bottom: 2px;\r\n\t\tfont-weight: bold;\r\n\t\tmax-width: 100%;\r\n\t\tbackground-color: ${(props) => props.theme.colors.blue1};\r\n\t\tcolor: ${(props) => props.theme.colors.primary};\r\n\t\tborder-radius: 16px;\r\n\t}\r\n`;\r\n\r\nexport const MegaMenuErrorItem = styled.div`\r\n\tbackground-color: ${(props) => props.theme.colors.accentRed};\r\n\tcolor: ${(props) => props.theme.colors.white};\r\n\tpadding-top: 7px;\r\n\tpadding-bottom: 6px;\r\n\tpadding-left: 25px;\r\n\tpadding-right: 25px;\r\n`;\r\n","/**\r\n * MicrositeSearchPage\r\n */\r\n\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport React, { useContext, useEffect, useState } from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { MicrositeSearchPageModel } from './MicrositeSearchPage.model';\r\nimport {\r\n\tconvertDateWithMonthWrittenOut,\r\n\tformatText,\r\n\ttranslate,\r\n} from '../../../utils/helper-utils';\r\nimport { useSelector } from 'react-redux';\r\nimport { useLocation } from 'react-router-dom';\r\nimport { selectLocalization } from 'store/modules/model';\r\nimport { GrantsHeader } from 'components/Panels/GrantsHeader';\r\nimport { SearchInputForm } from 'components/Panels/SearchInputForm';\r\nimport PuffListItem from 'components/PuffListItem';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport ListHeader from 'components/ListHeader';\r\nimport { ViewType } from 'types/enums';\r\n\r\nimport { ThemeContext } from 'styled-components';\r\nimport Pagination from 'components/Pagination';\r\n\r\nenum SearchRelevansTypes {\r\n\trel = 'rel',\r\n\tdate = 'date',\r\n}\r\n\r\nenum SearchFilterTypes {\r\n\tAll = 'All',\r\n\tNVsePage = 'NVsePage',\r\n\tNVseDocument = 'NVseDocument',\r\n}\r\n\r\ntype searchParams = {\r\n\tq: string;\r\n\tp: number;\r\n\ts: SearchRelevansTypes;\r\n\tf: SearchFilterTypes;\r\n};\r\n\r\n/**\r\n * # Söksida\r\n * Modeltype:<code>NVseSearchPage</code>\r\n *\r\n * [API contract](https://consid.atlassian.net/wiki/spaces/NNN/pages/2012446725/MicrositeSearchPage)\r\n *\r\n * Webbplatsens söksida\r\n */\r\nconst MicrositeSearchPage: React.FC<MicrositeSearchPageModel> = ({\r\n\tpreamble,\r\n\theading,\r\n\tsearchModel,\r\n\tdisplayedSearchHitsText,\r\n\tdisplayedSearchNoHitsText,\r\n\turl,\r\n\t_properties = {},\r\n}) => {\r\n\tconst history = useHistory();\r\n\tconst location = useLocation();\r\n\tconst localization = useSelector(selectLocalization);\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst getInitialParameters = (): searchParams => {\r\n\t\treturn {\r\n\t\t\tq: searchModel ? searchModel.query : '',\r\n\t\t\tp: 1,\r\n\t\t\ts: SearchRelevansTypes.rel,\r\n\t\t\tf: SearchFilterTypes.All,\r\n\t\t};\r\n\t};\r\n\r\n\tconst [selectedViewType, setSelectedViewType] = useState<ViewType>(\r\n\t\tViewType.List\r\n\t);\r\n\r\n\tconst [searchState, setSearchState] = useState<searchParams>(\r\n\t\tgetInitialParameters()\r\n\t);\r\n\r\n\tconst lastUpdatedText = translate(\r\n\t\t'/frontend/puff/updated',\r\n\t\t'Updated',\r\n\t\tlocalization\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\tlet initialParameters = getSearchStateFromParameters(\r\n\t\t\tlocation.search.substring(1)\r\n\t\t);\r\n\t\tif (initialParameters) {\r\n\t\t\tsetSearchState(initialParameters);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetSearchState(getInitialParameters());\r\n\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [location]);\r\n\r\n\tfunction getSearchStateFromParameters(url: string): null {\r\n\t\t// Convert query parameters to object\r\n\t\ttry {\r\n\t\t\treturn JSON.parse(\r\n\t\t\t\t'{\"' + url.replace(/&/g, '\",\"').replace(/=/g, '\":\"') + '\"}',\r\n\t\t\t\tfunction (key, value) {\r\n\t\t\t\t\treturn key === '' ? value : decodeURIComponent(value);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t} catch (e) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\r\n\tconst executeSearch = (params: searchParams) => {\r\n\t\t//if (!query) return;\r\n\r\n\t\t// var params = {\r\n\t\t// \tq: query,\r\n\t\t// \tp: 1,\r\n\t\t// \ts: 'rel',\r\n\t\t// } as searchParams;\r\n\r\n\t\tvar queryString = Object.keys(params)\r\n\t\t\t.map((key: string) => {\r\n\t\t\t\treturn (\r\n\t\t\t\t\tencodeURIComponent(key) +\r\n\t\t\t\t\t'=' +\r\n\t\t\t\t\tencodeURIComponent((params as any)[key])\r\n\t\t\t\t);\r\n\t\t\t})\r\n\t\t\t.join('&');\r\n\r\n\t\thistory.push({ pathname: url, search: '?' + queryString });\r\n\t\thistory.go(0);\r\n\t};\r\n\r\n\tconst handleSubmit = (query: string) => {\r\n\t\tconst newSearchState: searchParams = {\r\n\t\t\t...searchState,\r\n\t\t\tp: 1,\r\n\t\t\tq: query,\r\n\t\t} as searchParams;\r\n\t\tsetSearchState(newSearchState);\r\n\t\texecuteSearch(newSearchState);\r\n\t};\r\n\r\n\tconst changePage = (page: number) => {\r\n\t\tconst newSearchState = { ...searchState, p: page } as searchParams;\r\n\t\tsetSearchState(newSearchState);\r\n\t\texecuteSearch(newSearchState);\r\n\t};\r\n\r\n\tconst onPaginationPreviousClick = () => {\r\n\t\tif (!searchModel) return;\r\n\r\n\t\tlet newPageNr = searchModel.page ? searchModel.page : 1;\r\n\t\tif (newPageNr > 0) {\r\n\t\t\tchangePage(newPageNr - 1);\r\n\t\t}\r\n\t};\r\n\r\n\tconst onPaginationNextClick = () => {\r\n\t\tif (!searchModel) return;\r\n\r\n\t\tlet newPageNr = searchModel.page ? searchModel.page : 1;\r\n\t\tif (newPageNr < searchModel.totalPages) {\r\n\t\t\tchangePage(newPageNr + 1);\r\n\t\t}\r\n\t};\r\n\t//#endregion\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Space\r\n\t\t\t\ttop={themeContext.spacing.getPageTopPadding()}\r\n\t\t\t\tbottom={themeContext.spacing.getPageTopPadding()}\r\n\t\t\t>\r\n\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t<Space bottom={themeContext.spacing.getSection()}>\r\n\t\t\t\t\t\t<GrantsHeader\r\n\t\t\t\t\t\t\tcolumns={8}\r\n\t\t\t\t\t\t\theadingLevel={1}\r\n\t\t\t\t\t\t\theading={heading}\r\n\t\t\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</Space>\r\n\t\t\t\t</Grid>\r\n\r\n\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t<Space top={themeContext.spacing.space4}>\r\n\t\t\t\t\t\t<SearchInputForm\r\n\t\t\t\t\t\t\tlabel={preamble}\r\n\t\t\t\t\t\t\tshorterInput\r\n\t\t\t\t\t\t\tmicrositeActive\r\n\t\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t\tquery={searchState.q}\r\n\t\t\t\t\t\t\tonSubmit={handleSubmit}\r\n\t\t\t\t\t\t></SearchInputForm>\r\n\t\t\t\t\t</Space>\r\n\t\t\t\t\t{searchModel && (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t<Space top={themeContext.spacing.getElement()}>\r\n\t\t\t\t\t\t\t\t<ListHeader\r\n\t\t\t\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\t\t\t\theading={\r\n\t\t\t\t\t\t\t\t\t\tsearchModel.results.length > 0\r\n\t\t\t\t\t\t\t\t\t\t\t? formatText(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplayedSearchHitsText,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsearchModel.size,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsearchModel.numberOfHits\r\n\t\t\t\t\t\t\t\t\t\t\t )\r\n\t\t\t\t\t\t\t\t\t\t\t: displayedSearchNoHitsText\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tdefaultValue={selectedViewType}\r\n\t\t\t\t\t\t\t\t></ListHeader>\r\n\t\t\t\t\t\t\t</Space>\r\n\r\n\t\t\t\t\t\t\t{searchModel.results.length > 0 && (\r\n\t\t\t\t\t\t\t\t<Space\r\n\t\t\t\t\t\t\t\t\ttop={themeContext.spacing.space3}\r\n\t\t\t\t\t\t\t\t\tstack={themeContext.spacing.space2}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{searchModel.results.map((item, index) => {\r\n\t\t\t\t\t\t\t\t\t\tconst linkItem: LinkType = {\r\n\t\t\t\t\t\t\t\t\t\t\turl: item.url,\r\n\t\t\t\t\t\t\t\t\t\t\theading: item.heading,\r\n\t\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t<PuffListItem\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\tlink={linkItem}\r\n\t\t\t\t\t\t\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\t\t\t\t\t\t\tpreamble={item.excerpt}\r\n\t\t\t\t\t\t\t\t\t\t\t\timage={item.image}\r\n\t\t\t\t\t\t\t\t\t\t\t></PuffListItem>\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t{searchModel.totalPages > 1 && (\r\n\t\t\t\t\t\t\t\t<Space top={themeContext.spacing.getSection()}>\r\n\t\t\t\t\t\t\t\t\t<Pagination\r\n\t\t\t\t\t\t\t\t\t\tonPreviousSlide={onPaginationPreviousClick}\r\n\t\t\t\t\t\t\t\t\t\tinactivateBackwardButton={searchModel.page <= 1}\r\n\t\t\t\t\t\t\t\t\t\tonNextSlide={onPaginationNextClick}\r\n\t\t\t\t\t\t\t\t\t\tinactivateForwardButton={\r\n\t\t\t\t\t\t\t\t\t\t\tsearchModel.page >= searchModel.totalPages\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Grid>\r\n\t\t\t</Space>\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default MicrositeSearchPage;\r\n","/**\r\n * PageTopBanner - styles\r\n */\r\n\r\nimport { ThemeProps } from 'components/Banner/Banner';\r\nimport Link from 'components/Boilerplate/Link';\r\nimport {\r\n\tgetThemeBackground,\r\n\tgetThemeTextColor,\r\n\tPuffTheme,\r\n} from 'pages/sharedModelTypes';\r\nimport styled, { css } from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\nimport { gridMaxWidth } from 'theme/grid';\r\n\r\nexport const Div = styled.div``;\r\n\r\nexport const TopBannerWithImageContainer = styled.div<ThemeProps>`\r\n\tdisplay: grid;\r\n\tbackground-color: ${(p) => getThemeBackground(p.theme, p.themeName)};\r\n\r\n\t${mediaQueries.desktop} {\r\n\t\tgrid-template-columns: 50% 50%;\r\n\t}\r\n`;\r\n\r\nexport const MicroTopBannerWithImageContainer = styled.div<ThemeProps>`\r\n\tdisplay: grid;\r\n\tbackground-color: transparent;\r\n\r\n\t${mediaQueries.desktop} {\r\n\t\tgrid-template-columns: 50% 50%;\r\n\t}\r\n\r\n\t${mediaQueries.tabletOrLarger} {\r\n\t\tbackground-color: ${(p) => getThemeBackground(p.theme, p.themeName)};\r\n\t}\r\n`;\r\n\r\nexport const TopBannerWithTextContainer = styled.div`\r\n\tdisplay: flex;\r\n\tjustify-self: center;\r\n\r\n\t${mediaQueries.desktop} {\r\n\t\tjustify-self: flex-end;\r\n\t\talign-items: flex-end;\r\n\t\twidth: ${(gridMaxWidth - 32) / 2}px;\r\n\t}\r\n`;\r\n\r\nexport const MicroTopBannerWithTextContainer = styled.div<ThemeProps>`\r\n\tdisplay: flex;\r\n\tjustify-self: center;\r\n\tbackground-color: ${(p) => getThemeBackground(p.theme, p.themeName)};\r\n\twidth: 100vw;\r\n\t${mediaQueries.desktop} {\r\n\t\tbackground-color: transparent;\r\n\t\tjustify-self: flex-end;\r\n\t\talign-items: flex-end;\r\n\t\twidth: ${(gridMaxWidth - 32) / 2}px;\r\n\t}\r\n`;\r\n\r\nexport type ImageProp = {\r\n\t_height: number;\r\n\t_width: number;\r\n\tzoom: boolean;\r\n};\r\n\r\nconst getImageDiementions = (prop: ImageProp) => {\r\n\treturn css`\r\n\t\theight: ${prop._height}px;\r\n\t\twidth: ${prop._width}px;\r\n\t\t${prop.zoom && `object-fit: cover`};\r\n\t`;\r\n};\r\n\r\nexport const ImageContainerStyle = styled.div<ImageProp>`\r\n\timg {\r\n\t\t${mediaQueries.desktop} {\r\n\t\t\t${(p) => getImageDiementions(p)};\r\n\t\t}\r\n\t\tmax-width: unset;\r\n\t\tvertical-align: unset;\r\n\t}\r\n`;\r\n\r\nexport const MicroImageContainerStyle = styled.div<ImageProp>`\r\n\tdisplay: grid;\r\n\tplace-items: center;\r\n\theight: 50%;\r\n\tbackground-color: ${(props) => props.theme.colors.tertiary};\r\n\timg {\r\n\t\t${mediaQueries.phone} {\r\n\t\t\twidth: 90%;\r\n\t\t}\r\n\t\t${mediaQueries.desktop} {\r\n\t\t\t${(p) => getImageDiementions(p)};\r\n\t\t}\r\n\t\tmax-width: unset;\r\n\t\tvertical-align: unset;\r\n\t}\r\n`;\r\n\r\nexport const TextContainerContentStyle = styled.div<ThemeProps>`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\toverflow-wrap: anywhere;\r\n\tpadding-right: ${(props) => props.theme.spacing.space5}rem;\r\n\r\n\tcolor: ${(props) => props.theme.colors.white};\r\n\talign-self: center;\r\n\r\n\t${mediaQueries.phoneOrTablet} {\r\n\t\ttext-align: center;\r\n\t\tpadding: ${(props) => props.theme.spacing.space4}rem;\r\n\t}\r\n`;\r\n\r\nexport const TopBannerNoImageContainer = styled.div<ThemeProps>`\r\n\tbackground-color: ${(p) => getThemeBackground(p.theme, p.themeName)};\r\n\tpadding-top: ${(props) => props.theme.spacing.space5}rem;\r\n\tpadding-bottom: ${(props) => props.theme.spacing.space5}rem;\r\n`;\r\n\r\nexport type TextContainerWrapperProps = {\r\n\tthemeName?: PuffTheme | null;\r\n\tpaddingHorizontal?: boolean;\r\n\tcenter?: boolean;\r\n};\r\n\r\nexport const TextContainerHeader = styled.div<TextContainerWrapperProps>`\r\n\t${(props) => props.theme.typography.style5.getStyle()};\r\n\tcolor: ${(p) => getThemeTextColor(p.theme, p.themeName)};\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space3}rem;\r\n`;\r\n\r\nexport const TextContainerSubHeader = styled.div<TextContainerWrapperProps>`\r\n\t${(props) => props.theme.typography.style6.getStyle()};\r\n\tcolor: ${(p) => getThemeTextColor(p.theme, p.themeName)};\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space3}rem;\r\n`;\r\n\r\nexport const TopBannerLink = styled(Link)<TextContainerWrapperProps>`\r\n\t${(props) => props.theme.typography.style7.getStyle()};\r\n\tcolor: ${(p) => getThemeTextColor(p.theme, p.themeName)};\r\n`;\r\n","import useResizeObserver from '@react-hook/resize-observer';\r\nimport React from 'react';\r\n\r\nexport const useSize = (target: any) => {\r\n\tconst [size, setSize] = React.useState();\r\n\r\n\tReact.useLayoutEffect(() => {\r\n\t\tif (target && target.current) {\r\n\t\t\tsetSize(target.current.getBoundingClientRect());\r\n\t\t}\r\n\t}, [target]);\r\n\r\n\t// Where the magic happens\r\n\tuseResizeObserver(target, (entry: any) => setSize(entry.contentRect));\r\n\treturn size;\r\n};\r\n","/**\r\n * PageTopBanner\r\n */\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport {\r\n\tgetThemeHeadingColor,\r\n\tPuffTheme,\r\n\tLinkType,\r\n} from 'pages/sharedModelTypes';\r\nimport React, { useContext, useRef } from 'react';\r\nimport {\r\n\tImageContainerStyle,\r\n\tTextContainerContentStyle,\r\n\tTextContainerHeader,\r\n\tTextContainerSubHeader,\r\n\tTopBannerNoImageContainer,\r\n\tTopBannerWithImageContainer,\r\n\tTopBannerWithTextContainer,\r\n\tTopBannerLink,\r\n\tImageProp,\r\n\tMicroTopBannerWithImageContainer,\r\n\tMicroTopBannerWithTextContainer,\r\n\tMicroImageContainerStyle,\r\n} from './PageTopBanner.styles';\r\nimport Image from 'components/Boilerplate/Image';\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport { ImageFragmentModel } from 'types/fragments';\r\nimport { useSize } from 'hooks/useSize';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { rem2px } from 'theme/utils';\r\nimport { useImageTitle } from 'hooks/useImageTitle';\r\nimport EditableField from 'components/EditableField/EditableField';\r\n\r\ntype PageTopBannerProps = {\r\n\tmainImage?: ImageFragmentModel;\r\n\tthemeTop: PuffTheme | null;\r\n\tdecal: string | null;\r\n\theadingLevel?: number;\r\n\theading: string | null;\r\n\tsubheading?: string | null;\r\n\tlink?: LinkType | null;\r\n\tmainImage_htmlAttributes?: any;\r\n\theading_htmlAttributes?: any;\r\n};\r\n\r\n/** Top image banner */\r\nconst PageTopBanner: React.FC<PageTopBannerProps> = ({\r\n\tmainImage,\r\n\tdecal,\r\n\theadingLevel,\r\n\theading,\r\n\tsubheading,\r\n\tthemeTop,\r\n\tlink,\r\n\theading_htmlAttributes = {},\r\n\tmainImage_htmlAttributes = {},\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\tconst bannerElementRef = useRef<HTMLDivElement>(null);\r\n\tconst textElementRef = useRef<HTMLDivElement>(null);\r\n\tconst textSize = useSize(textElementRef);\r\n\tconst banner = useSize(bannerElementRef);\r\n\r\n\tconst title = useImageTitle(\r\n\t\tmainImage?.photographer,\r\n\t\tmainImage?.agency,\r\n\t\tmainImage?.illustrator\r\n\t);\r\n\r\n\tconst textBannerContainer = (\r\n\t\t<TextContainerContentStyle themeName={themeTop} ref={textElementRef}>\r\n\t\t\t{decal && (\r\n\t\t\t\t<TextContainerHeader themeName={themeTop}>{decal}</TextContainerHeader>\r\n\t\t\t)}\r\n\t\t\t<EditableField opeProperty={heading_htmlAttributes}>\r\n\t\t\t\t{heading && (\r\n\t\t\t\t\t<Heading\r\n\t\t\t\t\t\tlevel={headingLevel}\r\n\t\t\t\t\t\tstyleLevel={1}\r\n\t\t\t\t\t\tcolor={getThemeHeadingColor(themeContext, themeTop)}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{heading}\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t)}\r\n\t\t\t</EditableField>\r\n\r\n\t\t\t{subheading && (\r\n\t\t\t\t<TextContainerSubHeader themeName={themeTop}>\r\n\t\t\t\t\t{subheading}{' '}\r\n\t\t\t\t</TextContainerSubHeader>\r\n\t\t\t)}\r\n\t\t\t{link && (\r\n\t\t\t\t<TopBannerLink\r\n\t\t\t\t\tthemeName={themeTop}\r\n\t\t\t\t\tto={link.url}\r\n\t\t\t\t\texternal={link.isFile}\r\n\t\t\t\t>\r\n\t\t\t\t\t{link.heading}\r\n\t\t\t\t</TopBannerLink>\r\n\t\t\t)}\r\n\t\t</TextContainerContentStyle>\r\n\t);\r\n\r\n\tif (mainImage) {\r\n\t\tconst bw = (banner as any)?.width;\r\n\t\tconst th = (textSize as any)?.height;\r\n\t\tconst p_max = rem2px(themeContext.spacing.space7) * 4;\r\n\t\tconst p_min = rem2px(themeContext.spacing.space2) * 2;\r\n\r\n\t\tconst bh_max = th + p_max;\r\n\t\tconst bh_min = th + p_min;\r\n\r\n\t\tconst wantedImageHeight = Math.floor((bw / 2) * (9 / 16));\r\n\t\tlet imageHeight = 0;\r\n\t\tlet imageWidth = Math.floor(bw / 2);\r\n\r\n\t\tlet zoom: boolean = false;\r\n\r\n\t\tif (wantedImageHeight > bh_max) {\r\n\t\t\t// ZOOM\r\n\t\t\timageHeight = bh_max;\r\n\t\t\tzoom = true;\r\n\t\t} else if (wantedImageHeight < bh_min) {\r\n\t\t\t// ZOOM\r\n\t\t\timageHeight = bh_min;\r\n\t\t\tzoom = true;\r\n\t\t} else {\r\n\t\t\timageHeight = wantedImageHeight;\r\n\t\t}\r\n\r\n\t\tconst imageProps: ImageProp = {\r\n\t\t\t_height: imageHeight,\r\n\t\t\t_width: imageWidth,\r\n\t\t\tzoom: zoom,\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t{themeContext.isMicrositeActive ? (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<MicroTopBannerWithImageContainer\r\n\t\t\t\t\t\t\tref={bannerElementRef}\r\n\t\t\t\t\t\t\tthemeName={themeTop}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<MicroTopBannerWithTextContainer themeName={themeTop}>\r\n\t\t\t\t\t\t\t\t{textBannerContainer}\r\n\t\t\t\t\t\t\t</MicroTopBannerWithTextContainer>\r\n\t\t\t\t\t\t\t<MicroImageContainerStyle {...imageProps}>\r\n\t\t\t\t\t\t\t\t<Image\r\n\t\t\t\t\t\t\t\t\talt={mainImage.alt}\r\n\t\t\t\t\t\t\t\t\tsrc={mainImage.src}\r\n\t\t\t\t\t\t\t\t\tsrcSet={mainImage.srcSet}\r\n\t\t\t\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t\t\t\t\t{...mainImage_htmlAttributes}\r\n\t\t\t\t\t\t\t\t></Image>\r\n\t\t\t\t\t\t\t</MicroImageContainerStyle>\r\n\t\t\t\t\t\t</MicroTopBannerWithImageContainer>\r\n\t\t\t\t\t</>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<TopBannerWithImageContainer\r\n\t\t\t\t\t\tref={bannerElementRef}\r\n\t\t\t\t\t\tthemeName={themeTop}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<TopBannerWithTextContainer>\r\n\t\t\t\t\t\t\t{textBannerContainer}\r\n\t\t\t\t\t\t</TopBannerWithTextContainer>\r\n\t\t\t\t\t\t<ImageContainerStyle {...imageProps}>\r\n\t\t\t\t\t\t\t<Image\r\n\t\t\t\t\t\t\t\talt={mainImage.alt}\r\n\t\t\t\t\t\t\t\tsrc={mainImage.src}\r\n\t\t\t\t\t\t\t\tsrcSet={mainImage.srcSet}\r\n\t\t\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t\t\t\t{...mainImage_htmlAttributes}\r\n\t\t\t\t\t\t\t></Image>\r\n\t\t\t\t\t\t</ImageContainerStyle>\r\n\t\t\t\t\t</TopBannerWithImageContainer>\r\n\t\t\t\t)}\r\n\t\t\t</>\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t<TopBannerNoImageContainer themeName={themeTop}>\r\n\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t{textBannerContainer}\r\n\t\t\t\t<EditableField opeProperty={mainImage_htmlAttributes} />\r\n\t\t\t</Grid>\r\n\t\t</TopBannerNoImageContainer>\r\n\t);\r\n};\r\n\r\nexport default PageTopBanner;\r\n","import Link from 'components/Boilerplate/Link';\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport React from 'react';\r\nimport { generateAnchorId } from 'theme/utils';\r\nimport { PageOverview } from './PageOverviewPuff.styles';\r\n\r\ntype PageOverviewPuffModel = {\r\n\theadingLevel?: number;\r\n\theading: string | null;\r\n\titems: string[];\r\n};\r\n\r\nexport const PageOverviewPuff: React.FC<PageOverviewPuffModel> = ({\r\n\theadingLevel,\r\n\theading,\r\n\titems,\r\n}) => {\r\n\treturn (\r\n\t\t<PageOverview>\r\n\t\t\t<nav aria-labelledby=\"page-overview-nav\">\r\n\t\t\t\t{heading && (\r\n\t\t\t\t\t<Heading level={headingLevel} styleLevel={4} id={'page-overview-nav'}>\r\n\t\t\t\t\t\t{heading}\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t<ul>\r\n\t\t\t\t\t{items.map((heading, index) => {\r\n\t\t\t\t\t\tconst anchorId = generateAnchorId(heading);\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<li key={index}>\r\n\t\t\t\t\t\t\t\t<Link to={'#' + anchorId} key={index}>\r\n\t\t\t\t\t\t\t\t\t{heading}\r\n\t\t\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\t\t\t\t</ul>\r\n\t\t\t</nav>\r\n\t\t</PageOverview>\r\n\t);\r\n};\r\n","import EpiFragments, {\r\n\tBlockType,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport React from 'react';\r\nimport { FragmentListModel } from 'types/fragments';\r\nimport { GrantsHeader } from './GrantsHeader';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectEpi } from 'store/modules/epi';\r\nimport { Category } from 'pages/microsite/MicrositeArticlePage/MicrositeArticlePage.model';\r\n\r\nexport type PageSectionContentProps = {\r\n\theading?: string | null;\r\n\theadingLevel?: number;\r\n\theading_htmlAttributes?: any;\r\n\tlastReviewed?: string | null;\r\n\tshowReviewDate?: boolean | null;\r\n\tpreamble?: string | null;\r\n\tpreamble_htmlAttributes?: any;\r\n\ttextAsModel?: FragmentListModel | null;\r\n\ttextAsModel_htmlAttributes?: any;\r\n\tpreviousBlockType?: BlockType;\r\n\tinsideCell?: boolean;\r\n\tinsideInnerGrid?: boolean;\r\n\tinsideGrid?: boolean;\r\n\tdisableCustomHeadingLogic: boolean;\r\n\tpublicationDate?: string;\r\n\tcategories?: Category[];\r\n};\r\n/**\r\n * PageSectionContent (Helper)\r\n * @param param0\r\n * @returns\r\n */\r\nexport const PageSectionContent: React.FC<PageSectionContentProps> = ({\r\n\tpreviousBlockType,\r\n\theadingLevel,\r\n\theading,\r\n\theading_htmlAttributes = {},\r\n\tlastReviewed,\r\n\tshowReviewDate,\r\n\tpreamble,\r\n\tpreamble_htmlAttributes = {},\r\n\ttextAsModel,\r\n\ttextAsModel_htmlAttributes = {},\r\n\tinsideCell,\r\n\tinsideInnerGrid,\r\n\tinsideGrid,\r\n\tdisableCustomHeadingLogic,\r\n\tpublicationDate,\r\n\tcategories,\r\n}) => {\r\n\tconst { isEditable } = useSelector(selectEpi);\r\n\r\n\tconst renderHeader =\r\n\t\theading || preamble || lastReviewed !== null ? true : false;\r\n\tconst isValidHeadear = heading || preamble ? true : false;\r\n\r\n\tconst blockTypeBefore_textAsModel = isValidHeadear\r\n\t\t? BlockType.Element\r\n\t\t: previousBlockType;\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{(renderHeader || isEditable) && (\r\n\t\t\t\t<GrantsHeader\r\n\t\t\t\t\tcolumns={insideCell || insideInnerGrid ? 0 : 8}\r\n\t\t\t\t\theadingLevel={headingLevel}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\tlastReviewed={lastReviewed}\r\n\t\t\t\t\tshowReviewDate={showReviewDate}\r\n\t\t\t\t\tcameFromSectionContent\r\n\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\theading_htmlAttributes={heading_htmlAttributes}\r\n\t\t\t\t\tpreamble_htmlAttributes={preamble_htmlAttributes}\r\n\t\t\t\t\tpublicationDate={publicationDate}\r\n\t\t\t\t\tcategories={categories}\r\n\t\t\t\t></GrantsHeader>\r\n\t\t\t)}\r\n\r\n\t\t\t{textAsModel && (\r\n\t\t\t\t<EpiFragments\r\n\t\t\t\t\tpreviousBlockType={blockTypeBefore_textAsModel}\r\n\t\t\t\t\tinsideGrid={insideGrid}\r\n\t\t\t\t\tinsideCell={insideCell}\r\n\t\t\t\t\tinsideInnerGrid={insideInnerGrid}\r\n\t\t\t\t\theadingLevel={headingLevel}\r\n\t\t\t\t\tfragments={textAsModel.fragments}\r\n\t\t\t\t\thtmlAttributes={textAsModel_htmlAttributes}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n","import styled from 'styled-components';\r\n\r\nexport const SidebarRelatedPanelStyle = styled.div`\r\n\tp {\r\n\t\tmargin: 0rem;\r\n\t\t${props => props.theme.typography.style5.getStyle()};\t\t\r\n\t\tmargin-bottom: ${props => props.theme.spacing.space2}rem;\r\n\t}\r\n\r\n\tul {\r\n\t\tlist-style-type: none;\r\n\t\tpadding: 0px;\r\n\t\tmargin-bottom: 0;\r\n\t\t> :last-child {\r\n\t\t\tmargin-bottom: 0;\r\n\t\t}\r\n\t\tmargin-top: 0;\r\n\t}\r\n\r\n\tli {\r\n\t\tdisplay: table;\r\n\t\t${props => props.theme.typography.style9.getStyle()};\t\t\r\n\t\tpadding-top: 4px;\r\n\t\tpadding-bottom: 3px;\r\n\t\tpadding-left: ${props => props.theme.spacing.space1}rem;\r\n\t\tpadding-right: ${props => props.theme.spacing.space1}rem;\r\n\r\n\t\tmargin-bottom: ${props => props.theme.spacing.space2}rem;\r\n\t\tbackground-color: rgba(203, 203, 203, 0.32);\r\n\t}\r\n`;\r\n","/**\r\n * SidebarRelatedPanel\r\n */\r\n\r\nimport React from 'react';\r\nimport { SidebarRelatedPanelStyle } from './SidebarRelatedPanel.styles';\r\n\r\nexport type SidebarRelatedPanelProps = {\r\n\tlabel: string;\r\n\titems: string[];\r\n};\r\n\r\nexport const SidebarRelatedPanel: React.FC<SidebarRelatedPanelProps> = ({\r\n\tlabel,\r\n\titems,\r\n}) => {\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{items.length > 0 && (\r\n\t\t\t\t<SidebarRelatedPanelStyle>\r\n\t\t\t\t\t<section>\r\n\t\t\t\t\t\t{label && <p>{label}</p>}\r\n\t\t\t\t\t\t<ul>\r\n\t\t\t\t\t\t\t{items.map((item, index) => {\r\n\t\t\t\t\t\t\t\treturn <li key={index}>{item}</li>;\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t</section>\r\n\t\t\t\t</SidebarRelatedPanelStyle>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n","import { Cell, Grid } from 'components/Boilerplate/Grid';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport React, { useContext } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { selectLocalization } from 'store/modules/model';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport { generateAnchorId } from 'theme/utils';\r\nimport { NavigationItem } from 'types/epi';\r\nimport {\r\n\tBlockBaseFragmentModelTypes,\r\n\tFragmentListModel,\r\n\tFragmentModelTypes,\r\n} from 'types/fragments';\r\nimport { translate } from 'utils/helper-utils';\r\nimport { PageOverviewPuff } from './PageOverviewPuff';\r\nimport { PageSectionContent } from './PageSectionContent';\r\nimport { SidebarRelatedPanel } from './SidebarRelatedPanel';\r\nimport { Category } from 'pages/microsite/MicrositeArticlePage/MicrositeArticlePage.model';\r\n\r\ntype OnPageNavigationContentProps = {\r\n\theadingLevel: number;\r\n\theading?: string | null;\r\n\theading_htmlAttributes?: any;\r\n\tlastReviewed?: string | null;\r\n\tshowReviewDate?: boolean | null;\r\n\tpreamble?: string | null;\r\n\tpreamble_htmlAttributes?: any;\r\n\ttextAsModel?: FragmentListModel | null;\r\n\ttextAsModel_htmlAttributes?: any;\r\n\tsections?: string[];\r\n\trelatedEnvironmentGoalsLabel?: string;\r\n\trelatedEnvironmentGoals?: string[];\r\n\trelatedSustainabilityGoalsLabel?: string;\r\n\trelatedSustainabilityGoals?: string[];\r\n\tdisableCustomHeadingLogic: boolean;\r\n\tpublicationDate?: string;\r\n\tcategories?: Category[];\r\n};\r\n/**\r\n * OnPageNavigationContent (Helper)\r\n */\r\nexport const OnPageNavigationContent: React.FC<OnPageNavigationContentProps> = ({\r\n\theading,\r\n\theadingLevel,\r\n\theading_htmlAttributes = {},\r\n\tlastReviewed,\r\n\tshowReviewDate,\r\n\tpreamble,\r\n\tpreamble_htmlAttributes = {},\r\n\ttextAsModel,\r\n\ttextAsModel_htmlAttributes,\r\n\tsections = [],\r\n\trelatedEnvironmentGoalsLabel,\r\n\trelatedEnvironmentGoals,\r\n\trelatedSustainabilityGoalsLabel,\r\n\trelatedSustainabilityGoals,\r\n\tdisableCustomHeadingLogic,\r\n\tpublicationDate,\r\n\tcategories,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst localization = useSelector(selectLocalization);\r\n\tconst isPhone = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.tablet - 1,\r\n\t});\r\n\tconst findOnPageLabel = translate(\r\n\t\t'/frontend/pages/findonpage',\r\n\t\t'Find on page',\r\n\t\tlocalization\r\n\t);\r\n\r\n\tconst showRelatedPanel =\r\n\t\t(relatedEnvironmentGoals && relatedEnvironmentGoals.length > 0) ||\r\n\t\t(relatedSustainabilityGoals && relatedSustainabilityGoals.length > 0);\r\n\r\n\tconst related = [\r\n\t\t{\r\n\t\t\tlabel: relatedEnvironmentGoalsLabel ? relatedEnvironmentGoalsLabel : '',\r\n\t\t\titems: relatedEnvironmentGoals ? relatedEnvironmentGoals : [],\r\n\t\t},\r\n\t\t{\r\n\t\t\tlabel: relatedSustainabilityGoalsLabel\r\n\t\t\t\t? relatedSustainabilityGoalsLabel\r\n\t\t\t\t: '',\r\n\t\t\titems: relatedSustainabilityGoals ? relatedSustainabilityGoals : [],\r\n\t\t},\r\n\t];\r\n\r\n\tconst renderLeftcolumn = !isPhone || showRelatedPanel;\r\n\r\n\treturn (\r\n\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t{sections.length > 1 ? (\r\n\t\t\t\t<Grid inner={true}>\r\n\t\t\t\t\t{renderLeftcolumn && (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t<Cell span={4} phone={0}>\r\n\t\t\t\t\t\t\t\t{!isPhone && (\r\n\t\t\t\t\t\t\t\t\t<PageOverviewPuff\r\n\t\t\t\t\t\t\t\t\t\theadingLevel={headingLevel}\r\n\t\t\t\t\t\t\t\t\t\theading={findOnPageLabel}\r\n\t\t\t\t\t\t\t\t\t\titems={sections}\r\n\t\t\t\t\t\t\t\t\t></PageOverviewPuff>\r\n\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t{showRelatedPanel &&\r\n\t\t\t\t\t\t\t\t\trelated.map((item, index) => {\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t<Space\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\ttop={isPhone ? 0 : themeContext.spacing.space5}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<SidebarRelatedPanel\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={item.label}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titems={item.items}\r\n\t\t\t\t\t\t\t\t\t\t\t\t></SidebarRelatedPanel>\r\n\t\t\t\t\t\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t</Cell>\r\n\t\t\t\t\t\t\t<Cell span={1}> </Cell>\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t<Cell span={7}>\r\n\t\t\t\t\t\t<PageSectionContent\r\n\t\t\t\t\t\t\theadingLevel={headingLevel}\r\n\t\t\t\t\t\t\theading={heading}\r\n\t\t\t\t\t\t\theading_htmlAttributes={heading_htmlAttributes}\r\n\t\t\t\t\t\t\tlastReviewed={lastReviewed}\r\n\t\t\t\t\t\t\tshowReviewDate={showReviewDate}\r\n\t\t\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\t\t\tpreamble_htmlAttributes={preamble_htmlAttributes}\r\n\t\t\t\t\t\t\tinsideGrid={true}\r\n\t\t\t\t\t\t\tinsideInnerGrid={true}\r\n\t\t\t\t\t\t\tinsideCell={true}\r\n\t\t\t\t\t\t\ttextAsModel={textAsModel}\r\n\t\t\t\t\t\t\ttextAsModel_htmlAttributes={textAsModel_htmlAttributes}\r\n\t\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t\t\tpublicationDate={publicationDate}\r\n\t\t\t\t\t\t\tcategories={categories}\r\n\t\t\t\t\t\t></PageSectionContent>\r\n\t\t\t\t\t</Cell>\r\n\t\t\t\t</Grid>\r\n\t\t\t) : (\r\n\t\t\t\t<PageSectionContent\r\n\t\t\t\t\theadingLevel={headingLevel}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\theading_htmlAttributes={heading_htmlAttributes}\r\n\t\t\t\t\tlastReviewed={lastReviewed}\r\n\t\t\t\t\tshowReviewDate={showReviewDate}\r\n\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\tpreamble_htmlAttributes={preamble_htmlAttributes}\r\n\t\t\t\t\tinsideGrid={true}\r\n\t\t\t\t\tinsideInnerGrid={false}\r\n\t\t\t\t\tinsideCell={false}\r\n\t\t\t\t\ttextAsModel={textAsModel}\r\n\t\t\t\t\ttextAsModel_htmlAttributes={textAsModel_htmlAttributes}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\tpublicationDate={publicationDate}\r\n\t\t\t\t\tcategories={categories}\r\n\t\t\t\t></PageSectionContent>\r\n\t\t\t)}\r\n\t\t</Grid>\r\n\t);\r\n};\r\n\r\nconst instanceOfBlockBase = (item: FragmentModelTypes): boolean => {\r\n\treturn (\r\n\t\titem.hasOwnProperty('onPageMenuVisibility') &&\r\n\t\titem.hasOwnProperty('onPageMenuHeading')\r\n\t);\r\n};\r\nconst convertToBlockBaseInstance = (\r\n\titem: FragmentModelTypes\r\n): BlockBaseFragmentModelTypes | null => {\r\n\tif (instanceOfBlockBase(item)) {\r\n\t\treturn item as BlockBaseFragmentModelTypes;\r\n\t}\r\n\r\n\treturn null;\r\n};\r\n\r\nexport const getBlockBaseSections = (\r\n\titems: FragmentModelTypes[]\r\n): BlockBaseFragmentModelTypes[] => {\r\n\treturn items.filter((item) => {\r\n\t\t// Check if item is of BlockBaseFragmentModelType\r\n\t\tconst blockBaseModel = convertToBlockBaseInstance(item);\r\n\t\tif (blockBaseModel) {\r\n\t\t\treturn (\r\n\t\t\t\tblockBaseModel.onPageMenuVisibility && blockBaseModel.onPageMenuHeading\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn false;\r\n\t}) as BlockBaseFragmentModelTypes[];\r\n};\r\n\r\nexport const getBlockBaseMenuItems = (items: string[]): NavigationItem[] => {\r\n\treturn items.map((heading) => {\r\n\t\treturn {\r\n\t\t\turl: '#' + generateAnchorId(heading),\r\n\t\t\ttext: heading,\r\n\t\t\tisActive: false,\r\n\t\t\tstyle: 3,\r\n\t\t\tchildren: [],\r\n\t\t\tisRedirect: false,\r\n\t\t} as NavigationItem;\r\n\t});\r\n};\r\n","/**\r\n * FjallArticlePage\r\n */\r\n\r\nimport { FjallArticlePageModel } from './FjallArticlePage.model';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport MegaMenu from 'components/MegaMenu';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport PageTopBanner from 'components/PageTopBanner';\r\nimport React, { useContext, useEffect, useState } from 'react';\r\nimport { NavigationItem } from 'types/epi';\r\nimport { FragmentModelTypes } from 'types/fragments';\r\nimport {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport {\r\n\tgetBlockBaseMenuItems,\r\n\tgetBlockBaseSections,\r\n\tOnPageNavigationContent,\r\n} from 'components/Panels/OnPageNavigationContent';\r\nimport { ThemeContext } from 'styled-components';\r\n\r\n/** Main description for this component. */\r\nconst FjallArticlePage: React.FC<FjallArticlePageModel> = ({\r\n\tmainImage,\r\n\tthemeTop,\r\n\tdecal,\r\n\theading,\r\n\tlastReviewed,\r\n\tpreamble,\r\n\ttextAsModel,\r\n\tmetaData,\r\n\tsubHeading,\r\n\tbottomItems,\r\n\tepi,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n\tcategories,\r\n\tpublicationDate,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\tconst [isMenuOpen, setIsMenuOpen] = useState(false);\r\n\tconst [sections, setSections] = useState<string[]>([]);\r\n\tconst [menuIndex, setMenuIndex] = useState<NavigationItem[]>([]);\r\n\r\n\tconst ref = React.createRef<any>();\r\n\r\n\tuseEffect(() => {\r\n\t\tconst expanderModels = getBlockBaseSections(bottomItems);\r\n\t\tconst sectionStrings = expanderModels.map((item) => item.onPageMenuHeading);\r\n\r\n\t\tif (sectionStrings.length > 0) {\r\n\t\t\tconst menuIndexRoot = getBlockBaseMenuItems(sectionStrings);\r\n\t\t\tsetMenuIndex(menuIndexRoot);\r\n\t\t\tsetSections(sectionStrings);\r\n\t\t} else {\r\n\t\t\tsetMenuIndex([]);\r\n\t\t\tsetSections([]);\r\n\t\t}\r\n\t}, [bottomItems]);\r\n\r\n\tconst onCloseMenuEvent = (userClosed: boolean) => {\r\n\t\tsetIsMenuOpen(false);\r\n\t\tif (userClosed && ref.current) {\r\n\t\t\tref.current.focus();\r\n\t\t}\r\n\t};\r\n\r\n\tlet lastBlockType = BlockType.Element;\r\n\tlet blockTypeBefore_bottomItems: BlockType = BlockType.Element;\r\n\r\n\tif (textAsModel && textAsModel.fragments.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\ttextAsModel.fragments,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tif (bottomItems.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\tbottomItems,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t}\r\n\r\n\tlastBlockType = BlockType.SectionBanner;\r\n\r\n\tvar DisplayNavigationHeader = false;\r\n\r\n\tif (\r\n\t\t(bottomItems && bottomItems.length > 0) ||\r\n\t\t(textAsModel && textAsModel?.fragments.length > 0)\r\n\t) {\r\n\t\t//we should display the navigationHeader if either TextAsModel or bottomItems has a value\r\n\t\tDisplayNavigationHeader = true;\r\n\t}\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<PageTopBanner\r\n\t\t\t\tmainImage={mainImage}\r\n\t\t\t\tthemeTop={themeTop}\r\n\t\t\t\tdecal={decal}\r\n\t\t\t\theadingLevel={1}\r\n\t\t\t\theading={heading}\r\n\t\t\t\tsubheading={subHeading}\r\n\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\tmainImage_htmlAttributes={_properties?.mainImage}\r\n\t\t\t></PageTopBanner>\r\n\r\n\t\t\t{DisplayNavigationHeader && (\r\n\t\t\t\t<Space\r\n\t\t\t\t\ttop={themeContext.spacing.getElement()}\r\n\t\t\t\t\tbottom={themeContext.spacing.getElement()}\r\n\t\t\t\t>\r\n\t\t\t\t\t<OnPageNavigationContent\r\n\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\theading={null}\r\n\t\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\t\tlastReviewed={lastReviewed}\r\n\t\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t\t\ttextAsModel={textAsModel}\r\n\t\t\t\t\t\ttextAsModel_htmlAttributes={_properties?.mainImage}\r\n\t\t\t\t\t\tsections={sections}\r\n\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t\tpublicationDate={publicationDate}\r\n\t\t\t\t\t\tcategories={categories}\r\n\t\t\t\t\t></OnPageNavigationContent>\r\n\r\n\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\tpreviousBlockType={blockTypeBefore_bottomItems}\r\n\t\t\t\t\t\tepi={epi}\r\n\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\tfragments={bottomItems as FragmentModelTypes[]}\r\n\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</Space>\r\n\t\t\t)}\r\n\r\n\t\t\t{isMenuOpen && (\r\n\t\t\t\t<MegaMenu\r\n\t\t\t\t\titems={menuIndex}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\tonClose={onCloseMenuEvent}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default FjallArticlePage;\r\n","/**\r\n * Microsite404Page\r\n */\r\n\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport { BlockType } from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport { GrantsHeader } from 'components/Panels/GrantsHeader';\r\nimport React, { useContext } from 'react';\r\nimport { ThemeContext } from 'styled-components';\r\n\r\nimport { Microsite404PageModel } from './Microsite404PageModel';\r\n\r\n/** Main description for this component. */\r\nconst Microsite404Page: React.FC<Microsite404PageModel> = ({\r\n\theading,\r\n\tpreamble,\r\n\ttextAsModel,\r\n\tepi,\r\n\t_properties,\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\treturn (\r\n\t\t<Space\r\n\t\t\ttop={themeContext.spacing.getPageTopPadding()}\r\n\t\t\tbottom={themeContext.spacing.space3}\r\n\t\t>\r\n\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t<GrantsHeader\r\n\t\t\t\t\theadingLevel={1}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t></GrantsHeader>\r\n\t\t\t</Grid>\r\n\r\n\t\t\t{textAsModel != null && textAsModel.fragments.length > 0 && (\r\n\t\t\t\t<EpiFragments\r\n\t\t\t\t\tpreviousBlockType={BlockType.Element}\r\n\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\tepi={epi}\r\n\t\t\t\t\tfragments={textAsModel.fragments}\r\n\t\t\t\t\thtmlAttributes={_properties?.mainBody}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</Space>\r\n\t);\r\n};\r\n\r\nexport default Microsite404Page;\r\n","/**\r\n * MicrositeListingPage - styles\r\n */\r\n\r\nimport { listViewMode } from 'components/Panels/Panels';\r\nimport styled, { css } from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\n\r\nconst getListStyle = () => {\r\n\treturn css`\r\n\t\tflex-direction: column;\r\n\t\tflex-wrap: nowrap;\r\n\t`;\r\n};\r\n\r\nexport const ListItemsStyle = styled.div<listViewMode>`\r\n\tdisplay: flex;\r\n\tflex-wrap: wrap;\r\n\t${(p) => p.cardView === false && getListStyle()};\r\n\r\n\t& > * {\r\n\t\tmargin-bottom: ${(props) => props.theme.spacing.space2}rem;\r\n\t}\r\n\r\n\t${mediaQueries.phone} {\r\n\t\t> :last-child {\r\n\t\t\tmargin-bottom: ${(props) =>\r\n\t\t\t\tprops.theme.isMicrositeActive ? '1' : '0'}rem;\r\n\t\t}\r\n\t}\r\n\r\n\t${mediaQueries.tabletOrLarger} {\r\n\t\tmargin-bottom: ${(props) =>\r\n\t\t\tprops.theme.isMicrositeActive ? '0' : '-1'}rem;\r\n\r\n\t\tmargin-right: -${(props) => props.theme.spacing.space2}rem;\r\n\t\t& > * {\r\n\t\t\tmargin-bottom: ${(props) => props.theme.spacing.space2}rem;\r\n\t\t\tmargin-right: ${(props) => props.theme.spacing.space2}rem;\r\n\t\t}\r\n\t}\r\n`;\r\n","/**\r\n * MicrositeListingPage\r\n */\r\n\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport React, { useContext, useEffect, useState } from 'react';\r\nimport { Puff, MicrositeListingPageModel } from './MicrositeListingPage.model';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectLocalization } from 'store/modules/model';\r\nimport { GrantsHeader } from 'components/Panels/GrantsHeader';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { ShowMoreButton } from 'components/Panels/ShowMoreButton';\r\nimport { GetStandardPuffElement } from 'components/Boilerplate/EpiFragments/fragments/StandardPuffModel';\r\nimport { ViewType } from 'types/enums';\r\nimport { Options } from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { ListItemsStyle } from './MicrositeListingPage.styles';\r\n\r\nconst MicrositeListingPage: React.FC<MicrositeListingPageModel> = ({\r\n\theading,\r\n\tpreamble,\r\n\tpuffs,\r\n\tshowMoreLabel,\r\n\tpuffNavigationListSizeOnLoad,\r\n\t_properties = {},\r\n}) => {\r\n\tconst { items } = puffs;\r\n\tconst localization = useSelector(selectLocalization);\r\n\tconst themeContext = useContext(ThemeContext);\r\n\tconst [showItemsCount, setShowItemsCount] = useState<number>(0);\r\n\tconst [showMoreButton, setShowMoreButton] = useState<boolean>(false);\r\n\tconst [filterdItems, setFilterdItems] = useState<Puff[]>([]);\r\n\r\n\tuseEffect(() => {\r\n\t\tlet itemsToShow = puffNavigationListSizeOnLoad\r\n\t\t\t? puffNavigationListSizeOnLoad\r\n\t\t\t: items.length;\r\n\t\tif (itemsToShow > items.length) {\r\n\t\t\titemsToShow = items.length;\r\n\t\t}\r\n\r\n\t\tsetShowItemsCount(itemsToShow);\r\n\t}, [puffNavigationListSizeOnLoad, items]);\r\n\r\n\tuseEffect(() => {\r\n\t\tsetShowMoreButton(showItemsCount < items.length);\r\n\t\tsetFilterdItems(items.slice(0, showItemsCount));\r\n\t}, [items, showItemsCount]);\r\n\r\n\tconst options = {\r\n\t\tinsideGrid: false,\r\n\t\tinsideInnerGrid: false,\r\n\t\tinsideCell: false,\r\n\t\tthemeContext: themeContext,\r\n\t\tview: puffs.viewType,\r\n\t} as Options;\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Space\r\n\t\t\t\ttop={themeContext.spacing.getPageTopPadding()}\r\n\t\t\t\tbottom={themeContext.spacing.getPageTopPadding()}\r\n\t\t\t>\r\n\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t<Space bottom={themeContext.spacing.getSection()}>\r\n\t\t\t\t\t\t<GrantsHeader\r\n\t\t\t\t\t\t\tcolumns={8}\r\n\t\t\t\t\t\t\theadingLevel={1}\r\n\t\t\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\t\t\theading={heading}\r\n\t\t\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\t\t></GrantsHeader>\r\n\t\t\t\t\t</Space>\r\n\t\t\t\t\t{filterdItems.length > 0 && (\r\n\t\t\t\t\t\t<Space\r\n\t\t\t\t\t\t\ttop={themeContext.spacing.space3}\r\n\t\t\t\t\t\t\tstack={themeContext.spacing.space2}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<ListItemsStyle\r\n\t\t\t\t\t\t\t\tcardView={options.view === ViewType.Card ? true : false}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{filterdItems.map((item, index) => {\r\n\t\t\t\t\t\t\t\t\t// StandardPuff or PuffListItem\r\n\t\t\t\t\t\t\t\t\treturn GetStandardPuffElement(item, { ...options, index });\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t</ListItemsStyle>\r\n\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Grid>\r\n\t\t\t\t{showMoreButton && (\r\n\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t<Space top={themeContext.spacing.getSection()}>\r\n\t\t\t\t\t\t\t<ShowMoreButton\r\n\t\t\t\t\t\t\t\theader={showMoreLabel}\r\n\t\t\t\t\t\t\t\tonClick={() => setShowItemsCount(items.length)}\r\n\t\t\t\t\t\t\t></ShowMoreButton>\r\n\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t</Grid>\r\n\t\t\t\t)}\r\n\t\t\t</Space>\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default MicrositeListingPage;\r\n","import styled from 'styled-components';\r\n\r\ninterface CustomProps {\r\n\tshorterInput?: boolean;\r\n}\r\n\r\nexport const SearchInputFormContainer = styled.form<CustomProps>`\r\n\tjustify-content: space-between;\r\n\r\n\talign-items: flex-end;\r\n\tfieldset {\r\n\t\tpadding: 0;\r\n\t\tmargin: 0;\r\n\t\tborder: none;\r\n\t\tflex: ${(props) => (props.shorterInput ? '0 1 633px' : '1 1 auto')};\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t}\r\n`;\r\n\r\nexport const SearchInputFormInputContainer = styled.div<CustomProps>`\r\n\tjustify-content: ${(props) =>\r\n\t\tprops.shorterInput ? 'flex-start' : 'space-between'};\r\n\tdisplay: flex;\r\n\talign-items: flex-end;\r\n\r\n\tbutton {\r\n\t\tmargin-right: 0;\r\n\t}\r\n`;\r\n","/***\r\n * SearchInputForm\r\n *\r\n */\r\n\r\nimport Space from 'components/Boilerplate/Space';\r\nimport Button from 'components/Button';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport React, { useCallback, useEffect, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectLocalization } from 'store/modules/model';\r\nimport { translate } from 'utils/helper-utils';\r\nimport {\r\n\tSearchInputFormContainer,\r\n\tSearchInputFormInputContainer,\r\n} from './SearchInputForm.styles';\r\n\r\ntype SearchInputFormProps = {\r\n\tquery: string;\r\n\tlabel?: string | null | undefined;\r\n\trequired?: boolean;\r\n\tonSubmit?: (query: string) => void;\r\n\tonEsc?: () => void;\r\n\tmicrositeActive?: boolean;\r\n\tisNarrowDisplay?: boolean;\r\n\tshorterInput?: boolean;\r\n};\r\n\r\nexport const SearchInputForm: React.FC<SearchInputFormProps> = ({\r\n\tquery,\r\n\tlabel,\r\n\trequired,\r\n\tonSubmit,\r\n\tonEsc,\r\n\tshorterInput = false,\r\n\tmicrositeActive = false,\r\n\tisNarrowDisplay,\r\n\tchildren,\r\n}) => {\r\n\tconst [userQuery, setUserQuery] = useState<string>(query);\r\n\r\n\tconst localization = useSelector(selectLocalization);\r\n\r\n\tconst searchActionText = translate(\r\n\t\t'/frontend/components/searchBar/actions/search',\r\n\t\t'Search',\r\n\t\tlocalization\r\n\t);\r\n\r\n\tconst searchLabel = label\r\n\t\t? label\r\n\t\t: translate(\r\n\t\t\t\t'/frontend/components/searchBar/inputlabel',\r\n\t\t\t\t'Search on NaturvÃ¥rdsverket',\r\n\t\t\t\tlocalization\r\n\t\t );\r\n\r\n\tuseEffect(() => {\r\n\t\tsetUserQuery(query);\r\n\t}, [query]);\r\n\r\n\tconst handleSubmit = (event: any) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\t// Remove leading and trailing whitespace of userQuery\r\n\t\tconst trimmedValue = userQuery.trimStart();\r\n\r\n\t\t// If the input value is valid, make the request\r\n\t\tif (onSubmit) {\r\n\t\t\tonSubmit(trimmedValue);\r\n\t\t}\r\n\t};\r\n\r\n\tconst escapeListener = useCallback(\r\n\t\t(e: KeyboardEvent) => {\r\n\t\t\tif (e.key === 'Escape') {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tif (userQuery) {\r\n\t\t\t\t\tsetUserQuery('');\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (onEsc) {\r\n\t\t\t\t\t\tonEsc();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t[onEsc, userQuery]\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\tdocument.addEventListener('keyup', escapeListener);\r\n\t\treturn () => {\r\n\t\t\tdocument.removeEventListener('keyup', escapeListener);\r\n\t\t};\r\n\t}, [escapeListener]);\r\n\r\n\treturn (\r\n\t\t<SearchInputFormContainer\r\n\t\t\tshorterInput={shorterInput}\r\n\t\t\trole=\"search\"\r\n\t\t\tonSubmit={handleSubmit}\r\n\t\t>\r\n\t\t\t<SearchInputFormInputContainer shorterInput={shorterInput}>\r\n\t\t\t\t<fieldset aria-label={searchLabel}>\r\n\t\t\t\t\t<label htmlFor=\"userInputQuery\">{searchLabel}</label>\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\tautoFocus\r\n\t\t\t\t\t\tid=\"userInputQuery\"\r\n\t\t\t\t\t\taria-label={searchActionText}\r\n\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\tvalue={userQuery}\r\n\t\t\t\t\t\tmaxLength={200}\r\n\t\t\t\t\t\tonChange={(evt) => setUserQuery(evt.target.value)}\r\n\t\t\t\t\t></input>\r\n\t\t\t\t</fieldset>\r\n\r\n\t\t\t\t{micrositeActive ? (\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\taria-label={searchActionText}\r\n\t\t\t\t\t\ttype=\"submit\"\r\n\t\t\t\t\t\ticonName={'search'}\r\n\t\t\t\t\t\ticonPosition={1}\r\n\t\t\t\t\t\tvariant={ButtonVariant.Microsite}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{searchActionText}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<Button aria-label={searchActionText} type=\"submit\">\r\n\t\t\t\t\t\t{searchActionText}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t)}\r\n\t\t\t</SearchInputFormInputContainer>\r\n\t\t\t{children && children}\r\n\t\t</SearchInputFormContainer>\r\n\t);\r\n};\r\n","import EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport React, { useContext, useEffect, useState } from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { NVseSearchPageModel } from './NVseSearchPage.model';\r\nimport {\r\n\tconvertDateWithMonthWrittenOut,\r\n\tformatText,\r\n\ttranslate,\r\n} from '../../utils/helper-utils';\r\nimport { useSelector } from 'react-redux';\r\nimport { useLocation } from 'react-router-dom';\r\nimport { selectLocalization } from 'store/modules/model';\r\nimport { Select } from 'components/Typography';\r\nimport { GrantsHeader } from 'components/Panels/GrantsHeader';\r\nimport { SearchInputForm } from 'components/Panels/SearchInputForm';\r\nimport PuffListItem from 'components/PuffListItem';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport ListHeader from 'components/ListHeader';\r\nimport { ViewType } from 'types/enums';\r\nimport { SearchRelevanceContainer } from './NVseSearchPage.styles';\r\nimport { SearchFilterContainer } from './NVseSearchPage.styles';\r\nimport { ListHeadingStyle } from 'components/ListHeader/ListHeader.styles';\r\n\r\nimport { ThemeContext } from 'styled-components';\r\nimport Pagination from 'components/Pagination';\r\nimport { flattenDiagnosticMessageText } from 'typescript';\r\n\r\nenum SearchRelevansTypes {\r\n\trel = 'rel',\r\n\tdate = 'date',\r\n}\r\n\r\nenum SearchFilterTypes {\r\n\tAll = 'All',\r\n\tNVsePage = 'NVsePage',\r\n\tNVseDocument = 'NVseDocument',\r\n}\r\n\r\ntype searchParams = {\r\n\tq: string;\r\n\tp: number;\r\n\ts: SearchRelevansTypes;\r\n\tf: SearchFilterTypes;\r\n};\r\n\r\n/**\r\n * # Söksida\r\n * Modeltype:<code>NVseSearchPage</code>\r\n *\r\n * [API contract](https://consid.atlassian.net/wiki/spaces/NNN/pages/2012446725/NVseSearchPage)\r\n *\r\n * Webbplatsens söksida\r\n */\r\nconst NVseSearchPage: React.FC<NVseSearchPageModel> = ({\r\n\theading,\r\n\tpreamble,\r\n\tsearchModel,\r\n\tbottomItems,\r\n\tdisplayedSearchHitsText,\r\n\tdisplayedSearchNoHitsText,\r\n\tsortRelevanceLabel,\r\n\tsortDateLabel,\r\n\tfilterByAllLabel,\r\n\tfilterByPageLabel,\r\n\tfilterByDocumentLabel,\r\n\tfilterLabel,\r\n\tsortLabel,\r\n\turl,\r\n\tepi,\r\n\t_properties = {},\r\n}) => {\r\n\tconst history = useHistory();\r\n\tconst location = useLocation();\r\n\tconst localization = useSelector(selectLocalization);\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst termsAggregation = searchModel?.aggregations\r\n\t\t? searchModel?.aggregations.find((obj) => obj.type === 'terms')\r\n\t\t: null;\r\n\tconst bucketPage = termsAggregation?.buckets?.find(\r\n\t\t(b) => b.term === SearchFilterTypes.NVsePage\r\n\t);\r\n\tconst bucketDoc = termsAggregation?.buckets?.find(\r\n\t\t(b) => b.term === SearchFilterTypes.NVseDocument\r\n\t);\r\n\r\n\tconst getInitialParameters = (): searchParams => {\r\n\t\treturn {\r\n\t\t\tq: searchModel ? searchModel.query : '',\r\n\t\t\tp: 1,\r\n\t\t\ts: SearchRelevansTypes.rel,\r\n\t\t\tf: SearchFilterTypes.All,\r\n\t\t};\r\n\t};\r\n\r\n\tconst [selectedViewType, setSelectedViewType] = useState<ViewType>(\r\n\t\tViewType.List\r\n\t);\r\n\r\n\tconst [searchState, setSearchState] = useState<searchParams>(\r\n\t\tgetInitialParameters()\r\n\t);\r\n\r\n\tconst lastReviewedText = translate(\r\n\t\t'/frontend/puff/lastreviewed',\r\n\t\t'Last Reviewed', // Granskad\r\n\t\tlocalization\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\tlet initialParameters = getSearchStateFromParameters(\r\n\t\t\tlocation.search.substring(1)\r\n\t\t);\r\n\t\tif (initialParameters) {\r\n\t\t\tsetSearchState(initialParameters);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetSearchState(getInitialParameters());\r\n\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [location]);\r\n\r\n\tfunction getSearchStateFromParameters(url: string): null {\r\n\t\t// Convert query parameters to object\r\n\t\ttry {\r\n\t\t\treturn JSON.parse(\r\n\t\t\t\t'{\"' + url.replace(/&/g, '\",\"').replace(/=/g, '\":\"') + '\"}',\r\n\t\t\t\tfunction (key, value) {\r\n\t\t\t\t\treturn key === '' ? value : decodeURIComponent(value);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t} catch (e) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\r\n\tconst executeSearch = (params: searchParams) => {\r\n\t\t//if (!query) return;\r\n\r\n\t\t// var params = {\r\n\t\t// \tq: query,\r\n\t\t// \tp: 1,\r\n\t\t// \ts: 'rel',\r\n\t\t// } as searchParams;\r\n\r\n\t\tvar queryString = Object.keys(params)\r\n\t\t\t.map((key: string) => {\r\n\t\t\t\treturn (\r\n\t\t\t\t\tencodeURIComponent(key) +\r\n\t\t\t\t\t'=' +\r\n\t\t\t\t\tencodeURIComponent((params as any)[key])\r\n\t\t\t\t);\r\n\t\t\t})\r\n\t\t\t.join('&');\r\n\r\n\t\thistory.push({ pathname: url, search: '?' + queryString });\r\n\t\thistory.go(0);\r\n\t};\r\n\r\n\tconst handleSubmit = (query: string) => {\r\n\t\tconst newSearchState: searchParams = {\r\n\t\t\t...searchState,\r\n\t\t\tp: 1,\r\n\t\t\tq: query,\r\n\t\t} as searchParams;\r\n\t\tsetSearchState(newSearchState);\r\n\t\texecuteSearch(newSearchState);\r\n\t};\r\n\r\n\tconst onSortChanged = (event: React.ChangeEvent<HTMLSelectElement>) => {\r\n\t\tvar relevance: SearchRelevansTypes =\r\n\t\t\tSearchRelevansTypes[\r\n\t\t\t\tevent.target.value as keyof typeof SearchRelevansTypes\r\n\t\t\t];\r\n\t\tconst newSearchState = {\r\n\t\t\t...searchState,\r\n\t\t\ts: relevance,\r\n\t\t\tp: 1,\r\n\t\t} as searchParams;\r\n\t\tsetSearchState(newSearchState);\r\n\t\texecuteSearch(newSearchState);\r\n\t};\r\n\r\n\tconst onFilterChanged = (event: React.ChangeEvent<HTMLSelectElement>) => {\r\n\t\tvar filterType: SearchFilterTypes =\r\n\t\t\tSearchFilterTypes[event.target.value as keyof typeof SearchFilterTypes];\r\n\t\tconst newSearchState = {\r\n\t\t\t...searchState,\r\n\t\t\tf: filterType,\r\n\t\t\tp: 1,\r\n\t\t} as searchParams;\r\n\t\tsetSearchState(newSearchState);\r\n\t\texecuteSearch(newSearchState);\r\n\t};\r\n\r\n\t//#region Pagination\r\n\tconst changePage = (page: number) => {\r\n\t\tconst newSearchState = { ...searchState, p: page } as searchParams;\r\n\t\tsetSearchState(newSearchState);\r\n\t\texecuteSearch(newSearchState);\r\n\t};\r\n\r\n\tconst onPaginationPreviousClick = () => {\r\n\t\tif (!searchModel) return;\r\n\r\n\t\tlet newPageNr = searchModel.page ? searchModel.page : 1;\r\n\t\tif (newPageNr > 0) {\r\n\t\t\tchangePage(newPageNr - 1);\r\n\t\t}\r\n\t};\r\n\r\n\tconst onPaginationNextClick = () => {\r\n\t\tif (!searchModel) return;\r\n\r\n\t\tlet newPageNr = searchModel.page ? searchModel.page : 1;\r\n\t\tif (newPageNr < searchModel.totalPages) {\r\n\t\t\tchangePage(newPageNr + 1);\r\n\t\t}\r\n\t};\r\n\t//#endregion\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Space\r\n\t\t\t\ttop={themeContext.spacing.getPageTopPadding()}\r\n\t\t\t\tbottom={themeContext.spacing.space8}\r\n\t\t\t>\r\n\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t<GrantsHeader\r\n\t\t\t\t\t\tcolumns={8}\r\n\t\t\t\t\t\theadingLevel={1}\r\n\t\t\t\t\t\theading={heading}\r\n\t\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t\t></GrantsHeader>\r\n\t\t\t\t</Grid>\r\n\r\n\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t<Space top={themeContext.spacing.space4}>\r\n\t\t\t\t\t\t<SearchInputForm\r\n\t\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t\tquery={searchState.q}\r\n\t\t\t\t\t\t\tonSubmit={handleSubmit}\r\n\t\t\t\t\t\t></SearchInputForm>\r\n\t\t\t\t\t</Space>\r\n\t\t\t\t\t{searchModel && (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t<Space top={themeContext.spacing.getElement()}>\r\n\t\t\t\t\t\t\t\t<ListHeader\r\n\t\t\t\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\t\t\t\theading={\r\n\t\t\t\t\t\t\t\t\t\tsearchModel.results.length > 0\r\n\t\t\t\t\t\t\t\t\t\t\t? formatText(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplayedSearchHitsText,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsearchModel.size,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsearchModel.numberOfHits\r\n\t\t\t\t\t\t\t\t\t\t\t )\r\n\t\t\t\t\t\t\t\t\t\t\t: displayedSearchNoHitsText\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tdefaultValue={selectedViewType}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<SearchFilterContainer>\r\n\t\t\t\t\t\t\t\t\t\t<ListHeadingStyle\r\n\t\t\t\t\t\t\t\t\t\t\taddRightMargin={true}\r\n\t\t\t\t\t\t\t\t\t\t\tzeroBottom={true}\r\n\t\t\t\t\t\t\t\t\t\t\tlevel={2}\r\n\t\t\t\t\t\t\t\t\t\t\tstyleLevel={4}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{filterLabel}\r\n\t\t\t\t\t\t\t\t\t\t</ListHeadingStyle>\r\n\t\t\t\t\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\t\t\t\t\tonChange={onFilterChanged}\r\n\t\t\t\t\t\t\t\t\t\t\tname=\"filter\"\r\n\t\t\t\t\t\t\t\t\t\t\tvalue={searchState.f}\r\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Filtrera\"\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<option\r\n\t\t\t\t\t\t\t\t\t\t\t\taria-selected={searchState.f === SearchFilterTypes.All}\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={SearchFilterTypes.All}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{filterByAllLabel}\r\n\t\t\t\t\t\t\t\t\t\t\t</option>\r\n\t\t\t\t\t\t\t\t\t\t\t{bucketPage && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<option\r\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-selected={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsearchState.f === SearchFilterTypes.NVsePage\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={SearchFilterTypes.NVsePage}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{filterByPageLabel + ' (' + bucketPage.count + ')'}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</option>\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t{bucketDoc && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<option\r\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-selected={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsearchState.f === SearchFilterTypes.NVseDocument\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={SearchFilterTypes.NVseDocument}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{filterByDocumentLabel + ' (' + bucketDoc.count + ')'}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</option>\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t\t\t\t\t</SearchFilterContainer>\r\n\r\n\t\t\t\t\t\t\t\t\t<SearchRelevanceContainer>\r\n\t\t\t\t\t\t\t\t\t\t<ListHeadingStyle\r\n\t\t\t\t\t\t\t\t\t\t\taddRightMargin={true}\r\n\t\t\t\t\t\t\t\t\t\t\tzeroBottom={true}\r\n\t\t\t\t\t\t\t\t\t\t\tlevel={2}\r\n\t\t\t\t\t\t\t\t\t\t\tstyleLevel={4}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{sortLabel}\r\n\t\t\t\t\t\t\t\t\t\t</ListHeadingStyle>\r\n\r\n\t\t\t\t\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\t\t\t\t\tonChange={onSortChanged}\r\n\t\t\t\t\t\t\t\t\t\t\tname=\"sort\"\r\n\t\t\t\t\t\t\t\t\t\t\tvalue={searchState.s}\r\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Sortering\"\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={searchModel.results.length == 0}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<option\r\n\t\t\t\t\t\t\t\t\t\t\t\taria-selected={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsearchState.s === SearchRelevansTypes.rel\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={SearchRelevansTypes.rel}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{sortRelevanceLabel}\r\n\t\t\t\t\t\t\t\t\t\t\t</option>\r\n\t\t\t\t\t\t\t\t\t\t\t<option\r\n\t\t\t\t\t\t\t\t\t\t\t\taria-selected={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsearchState.s === SearchRelevansTypes.date\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={SearchRelevansTypes.date}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{sortDateLabel}\r\n\t\t\t\t\t\t\t\t\t\t\t</option>\r\n\t\t\t\t\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t\t\t\t\t</SearchRelevanceContainer>\r\n\t\t\t\t\t\t\t\t</ListHeader>\r\n\t\t\t\t\t\t\t</Space>\r\n\r\n\t\t\t\t\t\t\t{searchModel.results.length > 0 && (\r\n\t\t\t\t\t\t\t\t<Space\r\n\t\t\t\t\t\t\t\t\ttop={themeContext.spacing.space3}\r\n\t\t\t\t\t\t\t\t\tstack={themeContext.spacing.space1}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{searchModel.results.map((item, index) => {\r\n\t\t\t\t\t\t\t\t\t\tconst linkItem: LinkType = {\r\n\t\t\t\t\t\t\t\t\t\t\turl: item.url,\r\n\t\t\t\t\t\t\t\t\t\t\theading: item.heading,\r\n\t\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t<PuffListItem\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\tdecal={item.decal}\r\n\t\t\t\t\t\t\t\t\t\t\t\tlink={linkItem}\r\n\t\t\t\t\t\t\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\t\t\t\t\t\t\tpreamble={item.excerpt}\r\n\t\t\t\t\t\t\t\t\t\t\t\timage={item.image}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{item.showReviewDate && lastReviewedText && item.lastUpdated && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{lastReviewedText}:{' '}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{convertDateWithMonthWrittenOut(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem.lastUpdated,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlastReviewedText\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t</PuffListItem>\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t{searchModel.totalPages > 1 && (\r\n\t\t\t\t\t\t\t\t<Space top={themeContext.spacing.space3}>\r\n\t\t\t\t\t\t\t\t\t<Pagination\r\n\t\t\t\t\t\t\t\t\t\tonPreviousSlide={onPaginationPreviousClick}\r\n\t\t\t\t\t\t\t\t\t\tinactivateBackwardButton={searchModel.page <= 1}\r\n\t\t\t\t\t\t\t\t\t\tonNextSlide={onPaginationNextClick}\r\n\t\t\t\t\t\t\t\t\t\tinactivateForwardButton={\r\n\t\t\t\t\t\t\t\t\t\t\tsearchModel.page >= searchModel.totalPages\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Grid>\r\n\t\t\t</Space>\r\n\r\n\t\t\t<EpiFragments epi={epi} headingLevel={2} fragments={bottomItems} />\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default NVseSearchPage;\r\n","/**\r\n * MicrositeArticlePage\r\n */\r\n\r\nimport { MicrositeArticlePageModel } from './MicrositeArticlePage.model';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport MegaMenu from 'components/MegaMenu';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport PageTopBanner from 'components/PageTopBanner';\r\nimport React, { useContext, useEffect, useState } from 'react';\r\nimport { NavigationItem } from 'types/epi';\r\nimport { FragmentModelTypes } from 'types/fragments';\r\nimport {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport {\r\n\tgetBlockBaseMenuItems,\r\n\tgetBlockBaseSections,\r\n\tOnPageNavigationContent,\r\n} from 'components/Panels/OnPageNavigationContent';\r\nimport { ThemeContext } from 'styled-components';\r\n\r\n/** Main description for this component. */\r\nconst MicrositeArticlePage: React.FC<MicrositeArticlePageModel> = ({\r\n\tmainImage,\r\n\tthemeTop,\r\n\tdecal,\r\n\theading,\r\n\tlastReviewed,\r\n\tpreamble,\r\n\ttextAsModel,\r\n\tmetaData,\r\n\tsubHeading,\r\n\tbottomItems,\r\n\tepi,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n\tcategories,\r\n\tpublicationDate,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\tconst [isMenuOpen, setIsMenuOpen] = useState(false);\r\n\tconst [sections, setSections] = useState<string[]>([]);\r\n\tconst [menuIndex, setMenuIndex] = useState<NavigationItem[]>([]);\r\n\r\n\tconst ref = React.createRef<any>();\r\n\r\n\tuseEffect(() => {\r\n\t\tconst expanderModels = getBlockBaseSections(bottomItems);\r\n\t\tconst sectionStrings = expanderModels.map((item) => item.onPageMenuHeading);\r\n\r\n\t\tif (sectionStrings.length > 0) {\r\n\t\t\tconst menuIndexRoot = getBlockBaseMenuItems(sectionStrings);\r\n\t\t\tsetMenuIndex(menuIndexRoot);\r\n\t\t\tsetSections(sectionStrings);\r\n\t\t} else {\r\n\t\t\tsetMenuIndex([]);\r\n\t\t\tsetSections([]);\r\n\t\t}\r\n\t}, [bottomItems]);\r\n\r\n\tconst onCloseMenuEvent = (userClosed: boolean) => {\r\n\t\tsetIsMenuOpen(false);\r\n\t\tif (userClosed && ref.current) {\r\n\t\t\tref.current.focus();\r\n\t\t}\r\n\t};\r\n\r\n\tlet lastBlockType = BlockType.Element;\r\n\tlet blockTypeBefore_bottomItems: BlockType = BlockType.Element;\r\n\r\n\tif (textAsModel && textAsModel.fragments.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\ttextAsModel.fragments,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tif (bottomItems.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\tbottomItems,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t}\r\n\r\n\tlastBlockType = BlockType.SectionBanner;\r\n\r\n\tvar DisplayNavigationHeader = false;\r\n\r\n\tif (\r\n\t\t(bottomItems && bottomItems.length > 0) ||\r\n\t\t(textAsModel && textAsModel?.fragments.length > 0)\r\n\t) {\r\n\t\t//we should display the navigationHeader if either TextAsModel or bottomItems has a value\r\n\t\tDisplayNavigationHeader = true;\r\n\t}\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<PageTopBanner\r\n\t\t\t\tmainImage={mainImage}\r\n\t\t\t\tthemeTop={themeTop}\r\n\t\t\t\tdecal={decal}\r\n\t\t\t\theadingLevel={1}\r\n\t\t\t\theading={heading}\r\n\t\t\t\tsubheading={subHeading}\r\n\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\tmainImage_htmlAttributes={_properties?.mainImage}\r\n\t\t\t></PageTopBanner>\r\n\r\n\t\t\t{DisplayNavigationHeader && (\r\n\t\t\t\t<Space\r\n\t\t\t\t\ttop={themeContext.spacing.getElement()}\r\n\t\t\t\t\tbottom={themeContext.spacing.getElement()}\r\n\t\t\t\t>\r\n\t\t\t\t\t<OnPageNavigationContent\r\n\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\theading={null}\r\n\t\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\t\tlastReviewed={lastReviewed}\r\n\t\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t\t\ttextAsModel={textAsModel}\r\n\t\t\t\t\t\ttextAsModel_htmlAttributes={_properties?.mainImage}\r\n\t\t\t\t\t\tsections={sections}\r\n\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t\tpublicationDate={publicationDate}\r\n\t\t\t\t\t\tcategories={categories}\r\n\t\t\t\t\t></OnPageNavigationContent>\r\n\r\n\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\tpreviousBlockType={blockTypeBefore_bottomItems}\r\n\t\t\t\t\t\tepi={epi}\r\n\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\tfragments={bottomItems as FragmentModelTypes[]}\r\n\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</Space>\r\n\t\t\t)}\r\n\r\n\t\t\t{isMenuOpen && (\r\n\t\t\t\t<MegaMenu\r\n\t\t\t\t\titems={menuIndex}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\tonClose={onCloseMenuEvent}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default MicrositeArticlePage;\r\n","/**\r\n * MicrositeStartPage\r\n */\r\n\r\nimport EpiFragments, {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport PageTopOverlappBanner from 'pages/NVseStartPage/PageTopOverlappBanner';\r\nimport React, { useContext } from 'react';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { FragmentModelTypes } from 'types/fragments';\r\nimport { MicrositeStartPageModel } from './MicrositeStartPage.model';\r\n\r\n/** Main description for this component. */\r\nconst MicrositeStartPage: React.FC<MicrositeStartPageModel> = ({\r\n\theading,\r\n\tpreamble,\r\n\tmodelType,\r\n\timage,\r\n\tbottomItems,\r\n\tlinkList,\r\n\tepi,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tlet lastBlockType = BlockType.Element;\r\n\tif (bottomItems.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\tbottomItems,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t}\r\n\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\treturn (\r\n\t\t<Space bottom={spaceAfterLast}>\r\n\t\t\t<PageTopOverlappBanner\r\n\t\t\t\timage={image}\r\n\t\t\t\timage_htmlAttributes={_properties?.image}\r\n\t\t\t\theading={heading}\r\n\t\t\t\theadingLevel={1}\r\n\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\tpreamble={preamble}\r\n\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\tlinkList={linkList}\r\n\t\t\t\tisMicrositeActive={themeContext.isMicrositeActive}\r\n\t\t\t></PageTopOverlappBanner>\r\n\r\n\t\t\t<EpiFragments\r\n\t\t\t\tmodelType={modelType}\r\n\t\t\t\tpreviousBlockType={BlockType.Element}\r\n\t\t\t\tepi={epi}\r\n\t\t\t\theadingLevel={2}\r\n\t\t\t\toverrideSpacing={themeContext.spacing.space3}\r\n\t\t\t\tfragments={bottomItems as FragmentModelTypes[]}\r\n\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t/>\r\n\t\t</Space>\r\n\t);\r\n};\r\n\r\nexport default MicrositeStartPage;\r\n","/**\r\n * QuizForm - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\n\r\nexport const ButtonContainer = styled.div`\r\n\tdisplay: flex;\r\n\tmax-width: 26rem;\r\n\tmargin: 2rem auto 3rem;\r\n\tjustify-content: center;\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tdisplay: flex-column;\r\n\t}\r\n`;\r\n\r\nexport const NextAndPrevButtons = styled.div`\r\n\tdisplay: flex;\r\n\tgap: 5px;\r\n\tmargin-bottom: 5px;\r\n\tmargin: 2rem 0 1rem;\r\n\tjustify-content: space-between;\r\n`;\r\n\r\nexport const QuizContainer = styled.div`\r\n\tborder: 2px solid ${(props) => props.theme.colors.primary};\r\n\tpadding: 1.5rem;\r\n\tmax-width: 1000px;\r\n\tmargin: 0 1rem;\r\n\r\n\t${mediaQueries.desktop} {\r\n\t\tmargin: 0 auto;\r\n\t}\r\n`;\r\n","/**\r\n * Quiz - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\n\r\nexport const QuizOption = styled.li`\r\n\tlist-style-type: none;\r\n\tmargin-bottom: 1rem;\r\n\tmax-width: 100%;\r\n`;\r\nexport const QuizLabel = styled.label`\r\n\tdisplay: flex;\r\n\ttext-align: left;\r\n\tcursor: pointer;\r\n\talign-items: center;\r\n\tline-height: 1.5;\r\n\tborder: 2px solid ${(props) => props.theme.colors.primary};\r\n\r\n\t&:focus {\r\n\t\toutline: currentcolor solid 2px;\r\n\t\toutline-offset: 2px;\r\n\t\ttransition: outline-color 200ms ease-in-out 0s;\r\n\t}\r\n`;\r\n\r\nexport const QuizText = styled.span`\r\n\tflex-grow: 1;\r\n\tpadding: 0.75rem;\r\n\tborder-left: inherit;\r\n`;\r\n\r\nexport const QuizInput = styled.input`\r\n\t-webkit-appearance: auto;\r\n\tmargin: 1em;\r\n\tmin-width: 1.5em;\r\n\tdisplay: inline-block;\r\n\twidth: auto !important;\r\n\theight: 1rem;\r\n\tbox-shadow: none;\r\n\r\n\t&:focus {\r\n\t\tborder-color: white !important;\r\n\t\tbox-shadow: none !important;\r\n\t}\r\n`;\r\n\r\nexport const QuizList = styled.ul`\r\n\tpadding: 0;\r\n\tmargin-top: 2rem;\r\n`;\r\n","import React, { useEffect, useRef } from 'react';\r\nimport {\r\n\tQuizInput,\r\n\tQuizLabel,\r\n\tQuizList,\r\n\tQuizOption,\r\n\tQuizText,\r\n} from './Quiz.styles';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport { FragmentListModel } from 'types/fragments';\r\nimport { AnswerModel } from 'hooks/useQuizForm';\r\nimport Typography, { Heading } from 'components/Typography/Typography';\r\n\r\nexport interface QuizModel {\r\n\theading: string;\r\n\tcorrectAnswer: string;\r\n\tanswerOptions: string[];\r\n\tmainBody: FragmentListModel | null;\r\n\tcorrectAnswerExplination: FragmentListModel | null;\r\n\tselectedQuiz: number;\r\n\tsetAnswer: (newAnswer: AnswerModel) => void;\r\n\tselectedAnswer: AnswerModel;\r\n}\r\n\r\nconst Quiz: React.FC<QuizModel> = ({\r\n\theading,\r\n\tanswerOptions,\r\n\tmainBody,\r\n\tcorrectAnswer,\r\n\tcorrectAnswerExplination,\r\n\tselectedQuiz,\r\n\tselectedAnswer,\r\n\tsetAnswer,\r\n}) => {\r\n\tconst headingRef = useRef<HTMLHeadingElement>(null);\r\n\r\n\tconst handleSelectAnswer = (answer: string) => {\r\n\t\tsetAnswer({\r\n\t\t\tquestionIndex: selectedQuiz,\r\n\t\t\tanswer: answer,\r\n\t\t\tquestion: heading,\r\n\t\t\tcorrectAnswer,\r\n\t\t\tquestionDescription: mainBody,\r\n\t\t\tanswerOptions: answerOptions,\r\n\t\t\tcorrectAnswerExplination: correctAnswerExplination,\r\n\t\t});\r\n\t};\r\n\r\n\tconst handleEnterPress = (\r\n\t\te: React.KeyboardEvent<HTMLLabelElement>,\r\n\t\tanswer: string\r\n\t) => {\r\n\t\te.preventDefault();\r\n\t\tif (e.key === 'Enter') {\r\n\t\t\thandleSelectAnswer(answer);\r\n\t\t}\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tif (headingRef.current) headingRef.current?.focus();\r\n\t}, [heading]);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Typography as=\"h2\" ref={headingRef} tabIndex={-1}>\r\n\t\t\t\t{heading}\r\n\t\t\t</Typography>\r\n\t\t\t<div style={{ marginLeft: '-16px' }}>\r\n\t\t\t\t<EpiFragments fragments={mainBody?.fragments} />\r\n\t\t\t</div>\r\n\t\t\t<QuizList>\r\n\t\t\t\t{answerOptions.map((answer) => (\r\n\t\t\t\t\t<QuizOption>\r\n\t\t\t\t\t\t<QuizLabel\r\n\t\t\t\t\t\t\ttabIndex={0}\r\n\t\t\t\t\t\t\taria-label={answer}\r\n\t\t\t\t\t\t\tonKeyPress={(event) => handleEnterPress(event, answer)}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<QuizInput\r\n\t\t\t\t\t\t\t\ttabIndex={-1}\r\n\t\t\t\t\t\t\t\tonChange={() => handleSelectAnswer(answer)}\r\n\t\t\t\t\t\t\t\tchecked={selectedAnswer?.answer == answer}\r\n\t\t\t\t\t\t\t\tname=\"answer\"\r\n\t\t\t\t\t\t\t\tvalue={answer}\r\n\t\t\t\t\t\t\t\ttype=\"radio\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<QuizText>{answer}</QuizText>\r\n\t\t\t\t\t\t</QuizLabel>\r\n\t\t\t\t\t</QuizOption>\r\n\t\t\t\t))}\r\n\t\t\t</QuizList>\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default Quiz;\r\n","/**\r\n * AnswerResult - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\n\r\nexport const Question = styled.span`\r\n\tdisplay: flex;\r\n\tmargin-bottom: 5px;\r\n\talign-items: center;\r\n`;\r\n\r\nexport const QuestionAndAnswer = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tmargin-left: 5px;\r\n`;\r\n\r\nexport const ShowCorrectAnswer = styled.span`\r\n\tcolor: ${(props) => props.theme.colors.primary};\r\n\tcursor: pointer;\r\n`;\r\nexport const Answers = styled.div`\r\n\tmargin-bottom: 1rem;\r\n\tpadding: 1rem;\r\n\tborder: 2px solid ${(props) => props.theme.colors.primary};\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tpadding: 0;\r\n\t\tborder: none;\r\n\t}\r\n`;\r\n\r\nexport const Alternatives = styled.ol`\r\n\tmargin-bottom: 0;\r\n`;\r\n\r\nexport const CorrectAnswer = styled.div`\r\n\tmargin-top: 0.5rem;\r\n\tfont-size: 0.8rem;\r\n\tfont-style: italic;\r\n\ttext-decoration: underline;\r\n`;\r\n\r\nexport const IconWrapper = styled.span`\r\n\tpadding-left: 4px;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n`;\r\nexport const Answer = styled.div`\r\n\tdisplay: flex;\r\n\ttext-align: left;\r\n\tmargin: 5px 0 1rem 0;\r\n\tcursor: pointer;\r\n\talign-items: center;\r\n\tline-height: 1.5;\r\n\tborder: 2px solid ${(props) => props.theme.colors.primary};\r\n`;\r\nexport const AnswerText = styled.span`\r\n\tflex-grow: 1;\r\n\tpadding: 0.75rem;\r\n\tfont-family: 'GT Walsheim';\r\n\tborder-left: inherit;\r\n`;\r\nexport const AnswerIcon = styled.div`\r\n\tmargin: 1em;\r\n\tmin-width: 1.5em;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\theight: 1rem;\r\n`;\r\n","import React, { useEffect, useRef } from 'react';\r\nimport {\r\n\tAnswer,\r\n\tAnswerIcon,\r\n\tAnswerText,\r\n\tIconWrapper,\r\n\tQuestion,\r\n\tAlternatives,\r\n\tAnswers,\r\n} from './QuizResult.style';\r\nimport Icon from '../../../Boilerplate/Icon';\r\nimport { FragmentListModel } from 'types/fragments';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport { AnswerModel } from 'hooks/useQuizForm';\r\nimport Typography, { Heading } from 'components/Typography/Typography';\r\n\r\nexport interface AnswerResultType {\r\n\tresultTitle: string;\r\n\tyourAnswerText: string;\r\n\tcorrectAnswerText: string;\r\n\tminimumPassing: number;\r\n\tfailedText: FragmentListModel | null;\r\n\tpassedText: FragmentListModel | null;\r\n\tanswers: AnswerModel[];\r\n}\r\n\r\nconst AnswerResult: React.FC<AnswerResultType> = ({\r\n\tresultTitle,\r\n\tyourAnswerText,\r\n\tcorrectAnswerText,\r\n\tminimumPassing,\r\n\tfailedText,\r\n\tpassedText,\r\n\tanswers,\r\n}) => {\r\n\tconst headingRef = useRef<HTMLHeadingElement>(null);\r\n\r\n\tconst correctAnswersTotal = () => {\r\n\t\treturn answers.filter((answer) => answer.answer === answer.correctAnswer)\r\n\t\t\t.length;\r\n\t};\r\n\r\n\tconst userPassed = () => {\r\n\t\tvar total = correctAnswersTotal();\r\n\t\treturn total >= minimumPassing ? true : false;\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tif (headingRef.current) headingRef.current?.focus();\r\n\t}, []);\r\n\r\n\treturn (\r\n\t\t<div>\r\n\t\t\t<Typography as=\"h2\" ref={headingRef} tabIndex={-1}>\r\n\t\t\t\t{resultTitle} - {`${correctAnswersTotal()} / ${answers.length}`}\r\n\t\t\t</Typography>\r\n\t\t\t<div style={{ marginLeft: '-16px' }}>\r\n\t\t\t\t<EpiFragments\r\n\t\t\t\t\tfragments={\r\n\t\t\t\t\t\tuserPassed() ? passedText?.fragments : failedText?.fragments\r\n\t\t\t\t\t}\r\n\t\t\t\t/>\r\n\t\t\t</div>\r\n\t\t\t{answers.map((answer, index) => (\r\n\t\t\t\t<div key={index}>\r\n\t\t\t\t\t<Answers>\r\n\t\t\t\t\t\t<Heading level={3}>\r\n\t\t\t\t\t\t\t<Question>\r\n\t\t\t\t\t\t\t\t{answer.question}\r\n\t\t\t\t\t\t\t\t{answer.answer === answer.correctAnswer ? (\r\n\t\t\t\t\t\t\t\t\t<IconWrapper>\r\n\t\t\t\t\t\t\t\t\t\t<Icon color=\"green\" icon=\"check\" size={2} />\r\n\t\t\t\t\t\t\t\t\t</IconWrapper>\r\n\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t<IconWrapper>\r\n\t\t\t\t\t\t\t\t\t\t<Icon color=\"red\" icon=\"cross\" size={2} />\r\n\t\t\t\t\t\t\t\t\t</IconWrapper>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</Question>\r\n\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t<div style={{ marginLeft: '-16px' }}>\r\n\t\t\t\t\t\t\t<EpiFragments fragments={answer.questionDescription?.fragments} />\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<Alternatives>\r\n\t\t\t\t\t\t\t{answer.answerOptions.map((answerOption, i) => (\r\n\t\t\t\t\t\t\t\t<li>{answerOption}</li>\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t</Alternatives>\r\n\t\t\t\t\t\t<hr />\r\n\t\t\t\t\t\t<Typography as=\"div\">{yourAnswerText}</Typography>\r\n\t\t\t\t\t\t<Typography as=\"div\">\r\n\t\t\t\t\t\t\t<Answer>\r\n\t\t\t\t\t\t\t\t<AnswerIcon>\r\n\t\t\t\t\t\t\t\t\t{answer.answer === answer.correctAnswer ? (\r\n\t\t\t\t\t\t\t\t\t\t<Icon color=\"green\" icon=\"check\" size={2} />\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t<Icon color=\"red\" icon=\"cross\" size={2} />\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</AnswerIcon>\r\n\r\n\t\t\t\t\t\t\t\t<AnswerText>{answer.answer}</AnswerText>\r\n\t\t\t\t\t\t\t</Answer>\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t<Typography as=\"div\">{correctAnswerText}</Typography>\r\n\t\t\t\t\t\t<Answer>\r\n\t\t\t\t\t\t\t<AnswerIcon>\r\n\t\t\t\t\t\t\t\t<Icon color=\"green\" icon=\"check\" size={2} />\r\n\t\t\t\t\t\t\t</AnswerIcon>\r\n\t\t\t\t\t\t\t<AnswerText>{answer.correctAnswer}</AnswerText>\r\n\t\t\t\t\t\t</Answer>\r\n\t\t\t\t\t\t<div style={{ marginLeft: '-16px' }}>\r\n\t\t\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\t\t\tfragments={answer.correctAnswerExplination?.fragments}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</Answers>\r\n\t\t\t\t</div>\r\n\t\t\t))}\r\n\t\t</div>\r\n\t);\r\n};\r\n\r\nexport default AnswerResult;\r\n","import { FragmentListModel } from 'types/fragments';\r\nimport { useEffect, useState } from 'react';\r\n\r\ninterface QuizFormState {\r\n\tselectedQuiz: number;\r\n\tanswers: AnswerModel[];\r\n}\r\n\r\nexport interface AnswerModel {\r\n\tquestionIndex: number;\r\n\tanswer: string;\r\n\tquestion: string;\r\n\tquestionDescription: FragmentListModel | null;\r\n\tcorrectAnswer: string;\r\n\tanswerOptions: string[];\r\n\tcorrectAnswerExplination: FragmentListModel | null;\r\n}\r\n\r\nconst initialState: QuizFormState = {\r\n\tselectedQuiz: 0,\r\n\tanswers: new Array<AnswerModel>(),\r\n};\r\n\r\nexport const useQuizForm = () => {\r\n\tconst [quizFormState, setQuizFormState] = useState<QuizFormState>(\r\n\t\tinitialState\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst quizFormData = JSON.parse(\r\n\t\t\tsessionStorage.getItem('quizForm') || JSON.stringify(quizFormState)\r\n\t\t) as QuizFormState;\r\n\t\tsetQuizFormState(quizFormData);\r\n\t}, []);\r\n\r\n\tconst setAnswer = (newAnswer: AnswerModel) => {\r\n\t\tsetQuizFormState((prevState) => {\r\n\t\t\tconst existingAnswerIndex = prevState.answers.findIndex(\r\n\t\t\t\t(answer) => answer.questionIndex === newAnswer.questionIndex\r\n\t\t\t);\r\n\r\n\t\t\tif (existingAnswerIndex !== -1) {\r\n\t\t\t\tconst updatedAnswers = [...prevState.answers];\r\n\t\t\t\tupdatedAnswers[existingAnswerIndex] = newAnswer;\r\n\t\t\t\tconst updatedState = { ...prevState, answers: updatedAnswers };\r\n\t\t\t\tupdateSessionStorage(updatedState);\r\n\t\t\t\treturn updatedState;\r\n\t\t\t} else {\r\n\t\t\t\tconst updatedState = {\r\n\t\t\t\t\t...prevState,\r\n\t\t\t\t\tanswers: [...prevState.answers, newAnswer],\r\n\t\t\t\t};\r\n\t\t\t\tupdateSessionStorage(updatedState);\r\n\t\t\t\treturn updatedState;\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\tconst setSelectedQuiz = (selectedQuiz: number) => {\r\n\t\tsetQuizFormState((prevState) => {\r\n\t\t\tconst updatedState = { ...prevState, selectedQuiz };\r\n\t\t\tupdateSessionStorage(updatedState);\r\n\t\t\treturn updatedState;\r\n\t\t});\r\n\t};\r\n\r\n\tconst updateSessionStorage = (quizState: QuizFormState) => {\r\n\t\tsessionStorage.setItem('quizForm', JSON.stringify(quizState));\r\n\t};\r\n\r\n\tconst selectedAnswer = quizFormState.answers.filter(\r\n\t\t(answer) => answer.questionIndex === quizFormState.selectedQuiz\r\n\t)[0];\r\n\r\n\treturn {\r\n\t\tsetAnswer,\r\n\t\tsetSelectedQuiz,\r\n\t\tquizFormState,\r\n\t\tselectedAnswer,\r\n\t};\r\n};\r\n","import Button from '../../Button';\r\nimport React, { FormEvent, useRef, useState } from 'react';\r\nimport {\r\n\tButtonContainer,\r\n\tNextAndPrevButtons,\r\n\tQuizContainer,\r\n} from './QuizForm.styles';\r\nimport Quiz, { QuizModel } from './Quiz';\r\nimport AnswerResult from './QuizResult';\r\nimport { FragmentListModel } from 'types/fragments';\r\nimport { useQuizForm } from 'hooks/useQuizForm';\r\n\r\nexport interface QuizFormModel {\r\n\tquestions: QuizModel[];\r\n\tprevButtonText: string;\r\n\tnextButtonText: string;\r\n\tresultButtonText: string;\r\n\tresultTitle: string;\r\n\tyourAnswerText: string;\r\n\tcorrectAnswerText: string;\r\n\tminimumPassing: number;\r\n\tfailedText: FragmentListModel | null;\r\n\tpassedText: FragmentListModel | null;\r\n}\r\n\r\nconst QuizForm: React.FC<QuizFormModel> = ({\r\n\tquestions,\r\n\tnextButtonText,\r\n\tprevButtonText,\r\n\tresultButtonText,\r\n\tresultTitle,\r\n\tyourAnswerText,\r\n\tcorrectAnswerText,\r\n\tminimumPassing,\r\n\tfailedText,\r\n\tpassedText,\r\n}) => {\r\n\tconst {\r\n\t\tquizFormState,\r\n\t\tselectedAnswer,\r\n\t\tsetAnswer,\r\n\t\tsetSelectedQuiz,\r\n\t} = useQuizForm();\r\n\tconst [seeResult, setSeeResult] = useState(false);\r\n\tconst container = useRef<HTMLDivElement>(null);\r\n\r\n\tconst nextQuestion = (e: FormEvent) => {\r\n\t\te.preventDefault();\r\n\t\tif (quizFormState.selectedQuiz < questions.length - 1) {\r\n\t\t\tif (container.current) container.current.focus();\r\n\t\t\tsetSelectedQuiz(quizFormState.selectedQuiz + 1);\r\n\t\t}\r\n\t};\r\n\r\n\tconst prevQuestion = (e: FormEvent) => {\r\n\t\te.preventDefault();\r\n\t\tif (quizFormState.selectedQuiz > 0) {\r\n\t\t\tif (container.current) container.current.focus();\r\n\t\t\tsetSelectedQuiz(quizFormState.selectedQuiz - 1);\r\n\t\t}\r\n\t};\r\n\r\n\tconst viewResult = (e: FormEvent) => {\r\n\t\te.preventDefault();\r\n\t\tif (quizFormState.answers.length === questions.length) {\r\n\t\t\tsetSeeResult(true);\r\n\t\t\tsessionStorage.removeItem('quizForm');\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<form>\r\n\t\t\t<QuizContainer ref={container}>\r\n\t\t\t\t{quizFormState.answers.length === questions.length && seeResult ? (\r\n\t\t\t\t\t<AnswerResult\r\n\t\t\t\t\t\tresultTitle={resultTitle}\r\n\t\t\t\t\t\tyourAnswerText={yourAnswerText}\r\n\t\t\t\t\t\tcorrectAnswerText={correctAnswerText}\r\n\t\t\t\t\t\tminimumPassing={minimumPassing}\r\n\t\t\t\t\t\tfailedText={failedText}\r\n\t\t\t\t\t\tpassedText={passedText}\r\n\t\t\t\t\t\tanswers={quizFormState.answers}\r\n\t\t\t\t\t/>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<Quiz\r\n\t\t\t\t\t\t\t{...questions[quizFormState.selectedQuiz]}\r\n\t\t\t\t\t\t\tsetAnswer={setAnswer}\r\n\t\t\t\t\t\t\tselectedQuiz={quizFormState.selectedQuiz}\r\n\t\t\t\t\t\t\tselectedAnswer={selectedAnswer}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<NextAndPrevButtons>\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\taria-label={prevButtonText}\r\n\t\t\t\t\t\t\t\tdisabled={quizFormState.selectedQuiz == 0}\r\n\t\t\t\t\t\t\t\tonClick={prevQuestion}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{prevButtonText}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\taria-label={nextButtonText}\r\n\t\t\t\t\t\t\t\tdisabled={quizFormState.selectedQuiz == questions.length - 1}\r\n\t\t\t\t\t\t\t\tonClick={nextQuestion}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{nextButtonText}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</NextAndPrevButtons>\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t</QuizContainer>\r\n\t\t\t{!seeResult && (\r\n\t\t\t\t<ButtonContainer>\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\taria-label={resultButtonText}\r\n\t\t\t\t\t\tonClick={viewResult}\r\n\t\t\t\t\t\tdisabled={quizFormState.answers.length != questions.length}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{resultButtonText}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t</ButtonContainer>\r\n\t\t\t)}\r\n\t\t</form>\r\n\t);\r\n};\r\n\r\nexport default QuizForm;\r\n","import React, { useContext, useEffect, useState } from 'react';\r\nimport { MicrositeQuizPageModel } from './MicrositeQuizPage.model';\r\nimport QuizForm from '../../../components/microsite/QuizForm';\r\nimport PageTopBanner from 'components/PageTopBanner';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport {\r\n\tOnPageNavigationContent,\r\n\tgetBlockBaseMenuItems,\r\n\tgetBlockBaseSections,\r\n} from 'components/Panels/OnPageNavigationContent';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport { ThemeContext } from 'styled-components';\r\nimport {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { FragmentModelTypes } from 'types/fragments';\r\nimport MegaMenu from 'components/MegaMenu';\r\nimport { NavigationItem } from 'types/epi';\r\n\r\nconst MicrositeQuizPage: React.FC<MicrositeQuizPageModel> = ({\r\n\tquestions,\r\n\tthemeTop,\r\n\tmainImage,\r\n\tdecal,\r\n\theading,\r\n\tsubHeading,\r\n\t_properties,\r\n\tprevButtonText,\r\n\tnextButtonText,\r\n\tpreamble,\r\n\tlastReviewed,\r\n\tresultButtonText,\r\n\tresultTitle,\r\n\tyourAnswerText,\r\n\tepi,\r\n\tcorrectAnswerText,\r\n\tminimumPassing,\r\n\tpassedText,\r\n\tfailedText,\r\n\tbottomItems,\r\n\ttextAsModel,\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\tconst [menuIndex, setMenuIndex] = useState<NavigationItem[]>([]);\r\n\tconst [isMenuOpen, setIsMenuOpen] = useState(false);\r\n\tconst [sections, setSections] = useState<string[]>([]);\r\n\tconst ref = React.createRef<any>();\r\n\r\n\tuseEffect(() => {\r\n\t\tconst expanderModels = getBlockBaseSections(bottomItems);\r\n\t\tconst sectionStrings = expanderModels.map((item) => item.onPageMenuHeading);\r\n\r\n\t\tif (sectionStrings.length > 0) {\r\n\t\t\tconst menuIndexRoot = getBlockBaseMenuItems(sectionStrings);\r\n\t\t\tsetMenuIndex(menuIndexRoot);\r\n\t\t\tsetSections([]);\r\n\t\t} else {\r\n\t\t\tsetMenuIndex([]);\r\n\t\t\tsetSections([]);\r\n\t\t}\r\n\t}, [bottomItems]);\r\n\r\n\tlet lastBlockType = BlockType.Element;\r\n\tlet blockTypeBefore_bottomItems: BlockType = BlockType.Element;\r\n\r\n\tif (textAsModel && textAsModel.fragments.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\ttextAsModel.fragments,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tconst onCloseMenuEvent = (userClosed: boolean) => {\r\n\t\tsetIsMenuOpen(false);\r\n\t\tif (userClosed && ref.current) {\r\n\t\t\tref.current.focus();\r\n\t\t}\r\n\t};\r\n\r\n\tvar DisplayNavigationHeader = false;\r\n\r\n\tif (\r\n\t\t(bottomItems && bottomItems.length > 0) ||\r\n\t\t(textAsModel && textAsModel?.fragments.length > 0)\r\n\t) {\r\n\t\t//we should display the navigationHeader if either TextAsModel or bottomItems has a value\r\n\t\tDisplayNavigationHeader = true;\r\n\t}\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<PageTopBanner\r\n\t\t\t\tmainImage={mainImage}\r\n\t\t\t\tthemeTop={themeTop}\r\n\t\t\t\tdecal={decal}\r\n\t\t\t\theadingLevel={1}\r\n\t\t\t\theading={heading}\r\n\t\t\t\tsubheading={subHeading}\r\n\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\tmainImage_htmlAttributes={_properties?.mainImage}\r\n\t\t\t></PageTopBanner>\r\n\r\n\t\t\t{DisplayNavigationHeader && (\r\n\t\t\t\t<Space\r\n\t\t\t\t\ttop={themeContext.spacing.getElement()}\r\n\t\t\t\t\tbottom={themeContext.spacing.getElement()}\r\n\t\t\t\t>\r\n\t\t\t\t\t<OnPageNavigationContent\r\n\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\theading={null}\r\n\t\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\t\tlastReviewed={lastReviewed}\r\n\t\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t\t\ttextAsModel={textAsModel}\r\n\t\t\t\t\t\ttextAsModel_htmlAttributes={_properties?.mainImage}\r\n\t\t\t\t\t\tsections={sections}\r\n\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t></OnPageNavigationContent>\r\n\t\t\t\t</Space>\r\n\t\t\t)}\r\n\r\n\t\t\t<Space\r\n\t\t\t\ttop={themeContext.spacing.getElement()}\r\n\t\t\t\tbottom={themeContext.spacing.getElement()}\r\n\t\t\t>\r\n\t\t\t\t<QuizForm\r\n\t\t\t\t\tquestions={questions}\r\n\t\t\t\t\tprevButtonText={prevButtonText}\r\n\t\t\t\t\tnextButtonText={nextButtonText}\r\n\t\t\t\t\tresultButtonText={resultButtonText}\r\n\t\t\t\t\tresultTitle={resultTitle}\r\n\t\t\t\t\tyourAnswerText={yourAnswerText}\r\n\t\t\t\t\tcorrectAnswerText={correctAnswerText}\r\n\t\t\t\t\tminimumPassing={minimumPassing}\r\n\t\t\t\t\tpassedText={passedText}\r\n\t\t\t\t\tfailedText={failedText}\r\n\t\t\t\t/>\r\n\t\t\t</Space>\r\n\r\n\t\t\t<Space\r\n\t\t\t\ttop={themeContext.spacing.getElement()}\r\n\t\t\t\tbottom={themeContext.spacing.getElement()}\r\n\t\t\t>\r\n\t\t\t\t<EpiFragments\r\n\t\t\t\t\tpreviousBlockType={blockTypeBefore_bottomItems}\r\n\t\t\t\t\tepi={epi}\r\n\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\tfragments={bottomItems as FragmentModelTypes[]}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t/>\r\n\t\t\t</Space>\r\n\r\n\t\t\t{isMenuOpen && (\r\n\t\t\t\t<MegaMenu\r\n\t\t\t\t\titems={menuIndex}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\tonClose={onCloseMenuEvent}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default MicrositeQuizPage;\r\n","import { LabelContainer, LabelWrapper } from 'components/Panels/Panels.styles';\r\nimport { Categories } from 'pages/NVsePublicationsListingPage/NVsePublicationsListingPage.model';\r\nimport React from 'react';\r\n\r\n/**\r\n * CategoryDropdown\r\n */\r\nexport type CategoryDropdownProps = {\r\n\tcategory: Categories;\r\n\tselectedId: number | string;\r\n\tid: string;\r\n\tallowEmpty?: boolean;\r\n\tflexRow?: boolean;\r\n\tonSelectChanged?: (id: string) => void;\r\n};\r\n\r\nexport const CategoryDropdown: React.FC<CategoryDropdownProps> = ({\r\n\tcategory,\r\n\tselectedId,\r\n\tallowEmpty,\r\n\tid,\r\n\tflexRow = false,\r\n\tonSelectChanged,\r\n}) => {\r\n\tconst onCategorySelected = (event: React.ChangeEvent<HTMLSelectElement>) => {\r\n\t\tconst selectedId = event.target.value;\r\n\t\tif (onSelectChanged) {\r\n\t\t\tonSelectChanged(selectedId);\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<LabelContainer flexRow={flexRow}>\r\n\t\t\t<LabelWrapper>\r\n\t\t\t\t<legend aria-label={category.name}>{category.name}</legend>\r\n\t\t\t</LabelWrapper>\r\n\t\t\t<select\r\n\t\t\t\tid={id}\r\n\t\t\t\tvalue={selectedId ? selectedId : ''}\r\n\t\t\t\tonChange={(e): void => onCategorySelected(e)}\r\n\t\t\t\taria-label={category.name}\r\n\t\t\t>\r\n\t\t\t\t{allowEmpty && <option value=\"\">{category.name}</option>}\r\n\t\t\t\t{category.categoryOptions.map((item, index) => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<option key={index} value={item.id.toString()}>\r\n\t\t\t\t\t\t\t{item.text}\r\n\t\t\t\t\t\t</option>\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t</select>\r\n\t\t</LabelContainer>\r\n\t);\r\n};\r\n","/**\r\n * JobListPage - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme/media-queries';\r\nimport { px2rem } from 'theme/utils';\r\n\r\nexport const Div = styled.div`\r\n\tdisplay: flex;\r\n\tjustify-content: center;\r\n`;\r\n\r\nexport const SeeMore = styled.p`\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tcolor: #003366;\r\n\tfont-family: Akkurat Pro;\r\n\tfont-size: 1.125rem;\r\n\tcursor: pointer;\r\n`;\r\n\r\nexport const AdsDisplayed = styled.p`\r\n\tfont-size: 1.125rem;\r\n`;\r\n\r\nexport const StyledTable = styled.table`\r\n\tcaption-side: top;\r\n\tborder: none;\r\n\tborder-collapse: collapse;\r\n\twidth: 100%;\r\n\tmargin-bottom: 2rem;\r\n\ttd,\r\n\tth {\r\n\t\tborder: none;\r\n\t}\r\n\t${mediaQueries.phone} {\r\n\t\twidth: 90vw;\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\tjustify-content: center;\r\n\t}\r\n\r\n\tthead > tr {\r\n\t\twidth: 100%;\r\n\t\theight: 4.5rem;\r\n\r\n\t\tdisplay: grid;\r\n\t\tgrid-template-columns: 2.5fr repeat(3, 1fr);\r\n\t\talign-items: center;\r\n\t\tjustify-items: flex-start;\r\n\r\n\t\tfont-family: Akkurat Pro;\r\n\t\tbackground-color: #003366;\r\n\t\tcolor: white;\r\n\t\tpadding: 5px 2rem;\r\n\r\n\t\t${mediaQueries.tablet} {\r\n\t\t\tgrid-template-columns: minmax(14rem, 1fr) repeat(3, 1fr);\r\n\t\t\tth:first-of-type {\r\n\t\t\t\ttext-align: left;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t${mediaQueries.phone} {\r\n\t\t\theight: 3rem;\r\n\t\t\tgrid-template-columns: 1fr;\r\n\t\t\tpadding: 0px;\r\n\t\t\tth:first-of-type {\r\n\t\t\t\tdisplay: flex;\r\n\t\t\t\twidth: 100%;\r\n\t\t\t\tpadding: 1rem;\r\n\t\t\t}\r\n\t\t\tth {\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\ttbody tr {\r\n\t\twidth: 100%;\r\n\t\tbackground-color: white;\r\n\t\tdisplay: grid;\r\n\t\tgrid-template-columns: 2.5fr repeat(3, 1fr);\r\n\t\tgrid-template-rows: auto;\r\n\t\talign-items: flex-start;\r\n\t\tjustify-items: flex-start;\r\n\t\tpadding: 0 2rem;\r\n\t\tmargin: 10px 0;\r\n\r\n\t\ttd {\r\n\t\t\tfont-family: Akkurat Pro;\r\n\t\t\tpadding: 1.5rem 2rem 1.5rem 0rem;\r\n\t\t\ta {\r\n\t\t\t\ttext-decoration: none;\r\n\t\t\t\tcolor: #003366;\r\n\t\t\t\tfont-family: 'Tiempos Text';\r\n\t\t\t\tline-height: ${px2rem(26)};\r\n\t\t\t\tfont-size: 1.125rem;\r\n\t\t\t\toverflow-wrap: normal;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t${mediaQueries.tablet} {\r\n\t\t\tgrid-template-columns: minmax(14rem, 1fr) repeat(3, 1fr);\r\n\t\t}\r\n\r\n\t\t${mediaQueries.phone} {\r\n\t\t\theight: auto;\r\n\t\t\tgrid-template-columns: 1fr;\r\n\t\t\tmargin: 10px 0px;\r\n\t\t\tpadding: 0;\r\n\t\t\ttd {\r\n\t\t\t\tfont-size: 1.125rem;\r\n\t\t\t\tpadding: .4rem 1rem;\r\n\t\t\t}\r\n\t\t\ttd:first-of-type {\r\n\t\t\t\tpadding-top: 1.25rem;\r\n\t\t\t}\r\n\t\t\ttd:last-of-type {\r\n\t\t\t\tpadding-bottom: 1.25rem;\r\n\t\t\t}\r\n\t\t\ta {\r\n\t\t\t\tmargin-right: 0px;\r\n\t\t\t}\r\n\r\n\t\t\ttd:last-of-type div {\r\n\t\t\t\twidth: 100%;\r\n\t\t\t\tdisplay: flex;\r\n\t\t\t\tflex-direction: column;\r\n\t\t\t\tjustify-content: space-between;\r\n\r\n\t\t\t\tspan:first-of-type {\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tmargin-bottom: 5px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n`;\r\n","/**\r\n * JobListPage\r\n */\r\n\r\nimport React, { useState } from 'react';\r\nimport { Div, StyledTable, SeeMore, AdsDisplayed } from './JobListPage.styles';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport { useMediaQuery } from 'react-responsive';\r\n\r\nimport { JobListItem } from '../../pages/NVseJobListPage/NVseJobListPage.model';\r\nimport { wrapElementInGrid } from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { IconChevron } from 'components/Boilerplate/Icon/IconCollection';\r\n\r\ninterface Props {\r\n\t/** Description of this property */\r\n\thdAd: string;\r\n\thdCity: string;\r\n\thdEmployment: string;\r\n\thdApplyDate: string;\r\n\tdisplayOfTotalLabel: string;\r\n\tseeAllLabel: string;\r\n\tdata?: JobListItem[];\r\n}\r\n\r\n/** Main description for this component. */\r\nconst JobListPage: React.FC<Props> = ({\r\n\thdAd,\r\n\thdCity,\r\n\thdEmployment,\r\n\thdApplyDate,\r\n\tdisplayOfTotalLabel,\r\n\tseeAllLabel,\r\n\tdata,\r\n}) => {\r\n\tconst [showMore, setShowMore] = useState(false);\r\n\tconst [adsDisplayed, setAdsDisplayed] = useState(8);\r\n\tconst isPhone = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.tablet - 1,\r\n\t});\r\n\r\n\tconst onClickSeeMore = (): void => {\r\n\t\tif (data) {\r\n\t\t\tsetAdsDisplayed(data?.length);\r\n\t\t\tsetShowMore(true);\r\n\t\t}\r\n\t};\r\n\r\n\tlet table = (\r\n\t\t<>\r\n\t\t\t{isPhone && (\r\n\t\t\t\t<AdsDisplayed>\r\n\t\t\t\t\t{displayOfTotalLabel\r\n\t\t\t\t\t\t.replace('{displayed}', adsDisplayed.toString())\r\n\t\t\t\t\t\t.replace('{total}', data?.length.toString() ?? '0')}\r\n\t\t\t\t</AdsDisplayed>\r\n\t\t\t)}\r\n\t\t\t<StyledTable aria-label=\"jobb list\">\r\n\t\t\t\t<thead>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<th>{hdAd}</th>\r\n\t\t\t\t\t\t<th>{hdCity}</th>\r\n\t\t\t\t\t\t<th>{hdEmployment}</th>\r\n\t\t\t\t\t\t<th>{hdApplyDate}</th>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</thead>\r\n\r\n\t\t\t\t<tbody>\r\n\t\t\t\t\t{isPhone && data\r\n\t\t\t\t\t\t? data.slice(0, showMore ? data.length : 8).map((item, index) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<tr key={index}>\r\n\t\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t\t<a href={`${item.url}`}>{item.title}</a>\r\n\t\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t\t<td>{item.areas}</td>\r\n\t\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{hdApplyDate}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{item.lastApplyDate}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t })\r\n\t\t\t\t\t\t: data &&\r\n\t\t\t\t\t\t data.map((item, index) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<tr key={index}>\r\n\t\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t\t<a href={`${item.url}`}>{item.title}</a>\r\n\t\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t\t<td>{item.areas}</td>\r\n\t\t\t\t\t\t\t\t\t\t<td>{item.employment}</td>\r\n\t\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t\t{item.lastApplyDate}\r\n\t\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t })}\r\n\t\t\t\t</tbody>\r\n\t\t\t</StyledTable>\r\n\t\t\t{isPhone && !showMore && (\r\n\t\t\t\t<SeeMore onClick={onClickSeeMore}>\r\n\t\t\t\t\t{seeAllLabel}\r\n\t\t\t\t\t<IconChevron width=\"24px\" height=\"24px\" fill=\"#003366\" />\r\n\t\t\t\t</SeeMore>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n\tlet element = wrapElementInGrid(table);\r\n\treturn <Div>{element}</Div>;\r\n};\r\n\r\nexport default JobListPage;\r\n","/**\r\n * BannerLinks - styles\r\n * https://styled-components.com/docs/advanced#referring-to-other-components\r\n */\r\n\r\nimport { BannerPanelStyle } from 'components/BannerPanel/BannerPanel.styles';\r\nimport { getThemeBackground, getThemeTextColor } from 'pages/sharedModelTypes';\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme/media-queries';\r\nimport { BannerLinksProps } from './BannerLinks';\r\n\r\nexport const BannerLinksStyle = styled.div<BannerLinksProps>`\r\n\tpadding: ${props => props.theme.spacing.space6}rem 0rem;\r\n\t${mediaQueries.phoneOrTablet} {\r\n\t\tpadding: ${props => props.theme.spacing.space4}rem ${props => props.theme.spacing.space2}rem;\r\n\t}\r\n\r\n\tbackground-color: ${(p) => getThemeBackground(p.theme, p.themeName)};\r\n\r\n\t${BannerPanelStyle as any} {\r\n\t\tmargin-bottom: ${props => props.theme.spacing.space4}rem;\r\n\t}\r\n`;\r\n\r\nexport const BannerLinksListStyle = styled.ul<BannerLinksProps>`\r\n\tlist-style-type: none;\r\n\tpadding: 0px;\r\n\tmargin: 0px;\r\n\r\n\t${(p) => p.columns && 'column-count:' + p.columns};\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tcolumn-count: 1;\r\n\t}\r\n\r\n\t> li:last-child {\r\n\t\tmargin-bottom: ${0}rem;\r\n\t}\r\n`;\r\n\r\nexport const BannerLinksListItemStyle = styled.li<BannerLinksProps>`\r\n\ta {\r\n\t\tcolor: ${(p) => getThemeTextColor(p.theme, p.themeName)};\r\n\t}\r\n\tmargin-bottom: ${props => props.theme.spacing.space2}rem;\r\n`;\r\n","/**\r\n * Banner\r\n */\r\nimport React from 'react';\r\nimport {\r\n\tBannerLinksListItemStyle,\r\n\tBannerLinksListStyle,\r\n\tBannerLinksStyle,\r\n} from './BannerLinks.styles';\r\nimport { LinkType, PuffTheme } from 'pages/sharedModelTypes';\r\nimport BannerPanel from 'components/BannerPanel';\r\nimport Link from 'components/Boilerplate/Link';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\n\r\nexport interface BannerLinksProps {\r\n\tthemeName?: PuffTheme;\r\n\t/**\r\n\t * Heading level\r\n\t */\r\n\theadingLevel?: number;\r\n\t/**\r\n\t * Heading text\r\n\t */\r\n\theading?: string;\r\n\t/**\r\n\t * Links\r\n\t */\r\n\tlinks?: LinkType[];\r\n\r\n\tcolumns?: number;\r\n}\r\n\r\n/** This is the banner component */\r\nconst BannerLinks: React.FC<BannerLinksProps> = ({\r\n\tthemeName,\r\n\theading,\r\n\theadingLevel,\r\n\tlinks = [],\r\n\tcolumns = 2,\r\n}) => {\r\n\treturn (\r\n\t\t<BannerLinksStyle themeName={themeName}>\r\n\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t{heading && (\r\n\t\t\t\t\t<BannerPanel\r\n\t\t\t\t\t\theadingLevel={headingLevel}\r\n\t\t\t\t\t\tthemeName={themeName}\r\n\t\t\t\t\t\theading={heading}\r\n\t\t\t\t\t></BannerPanel>\r\n\t\t\t\t)}\r\n\t\t\t\t{links?.length > 0 && (\r\n\t\t\t\t\t<BannerLinksListStyle columns={columns}>\r\n\t\t\t\t\t\t{links?.map((item, index) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t<BannerLinksListItemStyle key={index} themeName={themeName}>\r\n\t\t\t\t\t\t\t\t\t<Link to={item.url} external={item.isFile}>\r\n\t\t\t\t\t\t\t\t\t\t{item.heading}\r\n\t\t\t\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t\t\t\t</BannerLinksListItemStyle>\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t</BannerLinksListStyle>\r\n\t\t\t\t)}\r\n\t\t\t</Grid>\r\n\t\t</BannerLinksStyle>\r\n\t);\r\n};\r\n\r\nexport default BannerLinks;\r\n","/**\r\n * NVseJobListPage - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { styleForSelect } from 'components/Typography';\r\nimport { mediaQueries } from '../../theme/media-queries';\r\n\r\nexport const SortContainer = styled.div`\r\n\twidth: 100%;\r\n\tdisplay: flex;\r\n\tjustify-content: flex-end;\r\n\tselect {\r\n\t\t${styleForSelect}\r\n\t\tmargin-right: -1.5rem;\r\n\t}\r\n\t${mediaQueries.phone} {\r\n\t\tpadding-top: 1rem;\r\n\t\tjustify-content: flex-start;\r\n\t\tmargin-right: 0px;\r\n\t}\r\n`;\r\n","/**\r\n * NVseJobListPage\r\n */\r\n\r\nimport React, {\r\n\tuseState,\r\n\tuseEffect,\r\n\tReactNode,\r\n\tReactComponentElement,\r\n\tReactHTMLElement,\r\n\tuseContext,\r\n} from 'react';\r\nimport {\r\n\tJobList,\r\n\tJobListItem,\r\n\tNVseJobListPageModel,\r\n} from './NVseJobListPage.model';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport {\r\n\tBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { FragmentModelTypes } from 'types/fragments';\r\nimport {\r\n\tCategoryDropdown,\r\n\tCategoryDropdownProps,\r\n} from 'pages/NVseRegulationsListingPage/CategoryDropdown';\r\nimport JobListPage from 'components/JobListPage';\r\nimport BannerLinks from 'components/Banners/BannerLinks';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport { SortContainer } from './NVseJobListPage.styles';\r\nimport {\r\n\tCategories,\r\n\tCategoryOptions,\r\n} from 'pages/NVsePublicationsListingPage/NVsePublicationsListingPage.model';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { ThemeContext } from 'styled-components';\r\n\r\n/** Main description for this component. */\r\nconst NVseJobListPage: React.FC<NVseJobListPageModel> = ({\r\n\tmodelType,\r\n\tmediaBanner,\r\n\tcategories,\r\n\tjobList,\r\n\tbottomItems,\r\n\tsiblingsList,\r\n\tlistEmpty,\r\n\tepi = undefined,\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst [jobListSorted, setJobListSorted] = useState<JobListItem[]>(\r\n\t\tjobList.jobListItem\r\n\t);\r\n\tconst [orderByItemKey, setOrderByItemKey] = useState('0');\r\n\tconst isPhone = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.tablet - 1,\r\n\t});\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst renderCatOption = () => {\r\n\t\tif (categories) {\r\n\t\t\tif (isPhone) {\r\n\t\t\t\tlet jobCategories = categories;\r\n\t\t\t\tlet result = [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tname: '',\r\n\t\t\t\t\t\tcategoryOptions: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tid: 0,\r\n\t\t\t\t\t\t\t\ttext: '',\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t];\r\n\r\n\t\t\t\tjobCategories.map((catItem: Categories, index: number) => {\r\n\t\t\t\t\tresult = [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: catItem.name,\r\n\t\t\t\t\t\t\tcategoryOptions: catItem.categoryOptions.filter(\r\n\t\t\t\t\t\t\t\t(word) => word.id !== 2\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t];\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn result.map((catItem: Categories, index: number) => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<CategoryDropdown\r\n\t\t\t\t\t\t\tid={`cat-${index}`}\r\n\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\tcategory={catItem}\r\n\t\t\t\t\t\t\tselectedId={orderByItemKey}\r\n\t\t\t\t\t\t\tallowEmpty={false}\r\n\t\t\t\t\t\t\tflexRow={true}\r\n\t\t\t\t\t\t\tonSelectChanged={(id) => onCategorySelected(id)}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\treturn categories.map((catItem: Categories, index: number) => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<CategoryDropdown\r\n\t\t\t\t\t\t\tid={`cat-${index}`}\r\n\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\tcategory={catItem}\r\n\t\t\t\t\t\t\tselectedId={orderByItemKey}\r\n\t\t\t\t\t\t\tallowEmpty={false}\r\n\t\t\t\t\t\t\tflexRow={true}\r\n\t\t\t\t\t\t\tonSelectChanged={(id) => onCategorySelected(id)}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tconst compare = (keyName: string) => {\r\n\t\tlet listOrdered;\r\n\t\tlistOrdered = jobListSorted.slice().sort(sortSiteSelection);\r\n\t\tsetJobListSorted(listOrdered);\r\n\r\n\t\tfunction sortSiteSelection(a: any, b: any) {\r\n\t\t\tif (a[keyName] < b[keyName]) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tif (a[keyName] > b[keyName]) {\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t};\r\n\r\n\tconst onCategorySelected = (catId: string) => {\r\n\t\tlet keyName = '';\r\n\t\tswitch (catId) {\r\n\t\t\tcase '0':\r\n\t\t\t\tsetOrderByItemKey(catId);\r\n\t\t\t\tkeyName = 'title';\r\n\t\t\t\tcompare(keyName);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase '1':\r\n\t\t\t\tsetOrderByItemKey(catId);\r\n\t\t\t\tkeyName = 'areas';\r\n\t\t\t\tcompare(keyName);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase '2':\r\n\t\t\t\tsetOrderByItemKey(catId);\r\n\t\t\t\tkeyName = 'employment';\r\n\t\t\t\tcompare(keyName);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase '3':\r\n\t\t\t\tsetOrderByItemKey(catId);\r\n\t\t\t\tkeyName = 'lastApplyDate';\r\n\t\t\t\tcompare(keyName);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t};\r\n\r\n\tlet lastBlockType = BlockType.Element;\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\treturn (\r\n\t\t<Space>\r\n\t\t\t<EpiFragments\r\n\t\t\t\tmodelType={modelType}\r\n\t\t\t\tpreviousBlockType={BlockType.Element}\r\n\t\t\t\tepi={epi}\r\n\t\t\t\theadingLevel={1}\r\n\t\t\t\tfragments={mediaBanner as FragmentModelTypes[]}\r\n\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t/>\r\n\t\t\t{jobList?.jobListItem.length ? (\r\n\t\t\t\t<>\r\n\t\t\t\t\t<Grid>\r\n\t\t\t\t\t\t<SortContainer>{renderCatOption()}</SortContainer>\r\n\t\t\t\t\t</Grid>\r\n\r\n\t\t\t\t\t<JobListPage\r\n\t\t\t\t\t\thdAd={jobList?.hdAd}\r\n\t\t\t\t\t\thdCity={jobList?.hdCity}\r\n\t\t\t\t\t\thdEmployment={jobList?.hdEmployment}\r\n\t\t\t\t\t\thdApplyDate={jobList?.hdApplyDate}\r\n\t\t\t\t\t\tdisplayOfTotalLabel={jobList?.displayOfTotalLabel}\r\n\t\t\t\t\t\tseeAllLabel={jobList?.seeAllLabel}\r\n\t\t\t\t\t\tdata={jobListSorted}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</>\r\n\t\t\t) : (\r\n\t\t\t\t<Space top={themeContext.spacing.space1} bottom={spaceAfterLast}>\r\n\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\tmodelType={modelType}\r\n\t\t\t\t\t\tpreviousBlockType={BlockType.Element}\r\n\t\t\t\t\t\tepi={epi}\r\n\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\tfragments={listEmpty.fragments as FragmentModelTypes[]}\r\n\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t\thtmlAttributes={'style: margin-bottom: 80px;'}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</Space>\r\n\t\t\t)}\r\n\t\t\t<EpiFragments\r\n\t\t\t\tmodelType={modelType}\r\n\t\t\t\tpreviousBlockType={BlockType.Element}\r\n\t\t\t\tepi={epi}\r\n\t\t\t\theadingLevel={2}\r\n\t\t\t\tfragments={bottomItems as FragmentModelTypes[]}\r\n\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t/>\r\n\r\n\t\t\t{siblingsList.items?.length > 0 && (\r\n\t\t\t\t<Space>\r\n\t\t\t\t\t<BannerLinks\r\n\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\theading={siblingsList.heading}\r\n\t\t\t\t\t\tlinks={siblingsList.items}\r\n\t\t\t\t\t></BannerLinks>\r\n\t\t\t\t</Space>\r\n\t\t\t)}\r\n\t\t</Space>\r\n\t);\r\n};\r\n\r\nexport default NVseJobListPage;\r\n","import styled from 'styled-components';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\n\r\nconst minTabletWidth = breakpointsNumber.desktop;\r\n\r\nexport const SideBarSectionContainer = styled.div`\r\n\t@media only screen and (max-width: ${minTabletWidth}px) {\r\n\t\tmargin-inline: 1rem;\r\n\t\tmargin-block: 1rem;\r\n\t}\r\n\r\n\tbackground-color: ${(props) => props.theme.colors.white};\r\n\tpadding: 1.5rem 1.5rem 2.5rem;\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tgap: 0.25rem;\r\n\r\n\tdiv > div > p {\r\n\t\tmargin-top: 1.5rem;\r\n\t\tfont-family: 'Akkurat Pro',sans-serif;\r\n\t\tfont-size: 1rem;\r\n\t}\r\n\r\n\tdiv > div > h3 + p {\r\n\t\tmargin-top: .5rem;\r\n\t}\r\n`;\r\n\r\nexport const SideBarSectionTitle = styled.h2`\r\n\tfont-weight: 400;\r\n`;\r\n\r\nexport const SectionTitleUnderline = styled.hr`\r\n\tmargin-inline-start: 0;\r\n\twidth: 25%;\r\n\tpadding-block: 1px;\r\n\tbackground-color: ${(props) => props.theme.colors.secondaryGreen};\r\n`;\r\n\r\nexport const SectionItemContainer = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tgap: 3rem;\r\n`;\r\n\r\nexport const SectionItem = styled.div`\r\n\th3 {\r\n\t\tfont-family: 'Akkurat Pro', sans-serif;\r\n\t\tfont-weight: 600;\r\n\t\tmargin-block-end: 0;\r\n\t}\r\n\r\n\tp {\r\n\t\t${(props) => props.theme.typography.style9.getStyle()}\r\n\t\tmargin-block-start: 0.5rem;\r\n\t}\r\n`;\r\n","import {\r\n\tSectionItem,\r\n\tSectionTitleUnderline,\r\n\tSideBarSectionContainer,\r\n\tSideBarSectionTitle,\r\n} from './JobDetailSideBarItem.styles';\r\nimport JobDetailSideBarItemModel from 'pages/NVseJobDetailPage/components/JobDetailSideBarItem/JobDetailSideBarItem.model';\r\nimport Button from 'components/Button';\r\n\r\nconst JobDetailSideBarItem = ({ title, items, button }: JobDetailSideBarItemModel) => {\r\n\tif (title != null && items != null) {\r\n\t\treturn (\r\n\t\t\t<SideBarSectionContainer>\r\n\t\t\t\t<div>\r\n\t\t\t\t\t<SideBarSectionTitle>{title}</SideBarSectionTitle>\r\n\t\t\t\t\t<SectionTitleUnderline />\r\n\t\t\t\t</div>\r\n\t\t\t\t<div>\r\n\t\t\t\t\t{items.filter(item => item.description).map((item, index) => (\r\n\t\t\t\t\t\t<SectionItem key={index}>\r\n\t\t\t\t\t\t\t<h3>{item.title}</h3>\r\n\t\t\t\t\t\t\t<p>{item.description}</p>\r\n\t\t\t\t\t\t</SectionItem>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</div>\r\n\t\t\t\t{button.text && (\r\n\t\t\t\t\t<div>\r\n\t\t\t\t\t\t<Button to={button.url} showLinkIcon={false}>{button.text}</Button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)}\r\n\t\t\t</SideBarSectionContainer>\r\n\t\t);\r\n\t}\r\n\r\n\treturn null;\r\n};\r\n\r\nexport default JobDetailSideBarItem;\r\n","/**\r\n * NVseJobDetailPage - styles\r\n */\r\n\r\nimport { Cell, Grid } from 'components/Boilerplate/Grid';\r\nimport { mediaQueries } from 'theme';\r\nimport styled from 'styled-components';\r\nimport { styleForPreamble } from 'components/Typography/Typography.styles';\r\n\r\nexport const Div = styled.div``;\r\n\r\nexport const DetailGrid = styled(Grid)`\r\n\tmargin-block: 3rem;\r\n`;\r\n\r\nexport const ContentBodyTop = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tgap: 1rem;\r\n\tmargin-block-end: 1rem;\r\n`;\r\n\r\nexport const ContentBodyCell = styled(Cell)`\r\n\tgrid-column-start: 6;\r\n\t${mediaQueries.phoneOrTablet} {\r\n\t\tgrid-column-start: 1;\r\n\t}\r\n\r\n\t> * {\r\n\t\t&:first-child > div > div {\r\n\t\t\tp:first-of-type > strong,\r\n\t\t\tp:first-of-type > em > strong,\r\n\t\t\tp:first-of-type > em {\r\n\t\t\t\t${styleForPreamble};\r\n\t\t\t\tfont-style: normal;\r\n\t\t\t\tem {\r\n\t\t\t\t\tfont-style: normal;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n`;\r\n","/**\r\n * NVseJobDetailPage\r\n */\r\n\r\nimport BannerLinks from 'components/Banners/BannerLinks';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport { Cell, Grid } from 'components/Boilerplate/Grid';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport PageTopBanner from 'components/PageTopBanner';\r\nimport JobDetailSideBarItem from 'pages/NVseJobDetailPage/components/JobDetailSideBarItem/JobDetailSideBarItem';\r\nimport { SectionItemContainer, SectionTitleUnderline, SideBarSectionContainer, SideBarSectionTitle } from 'pages/NVseJobDetailPage/components/JobDetailSideBarItem/JobDetailSideBarItem.styles';\r\nimport { NVseJobDetailPageModel } from 'pages/NVseJobDetailPage/NVseJobDetailPage.model';\r\nimport { PuffTheme } from 'pages/sharedModelTypes';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport { ContentBodyCell, DetailGrid } from './NVseJobDetailPage.styles';\r\n\r\n/** Main description for this component. */\r\nconst NVseJobDetailPage: React.FC<NVseJobDetailPageModel> = ({\r\n\theading,\r\n\tdecal,\r\n\ttextAsModel,\r\n\tcontactInfo,\r\n\tnotification,\r\n\tbottomItems,\r\n\tsiblingsList,\r\n\tsummary,\r\n}) => {\r\n\tconst isDesktopOrLarger = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.desktop,\r\n\t});\r\n\r\n\tconst mainItems = () => {\r\n\t\tlet items = textAsModel.fragments;\r\n\t\tif (notification) {\r\n\t\t\titems = [notification, ...textAsModel.fragments];\r\n\t\t}\r\n\r\n\t\treturn items;\r\n\t};\r\n\r\n\treturn (\r\n\t\t<article>\r\n\t\t\t<PageTopBanner\r\n\t\t\t\theading={heading}\r\n\t\t\t\tdecal={decal}\r\n\t\t\t\tthemeTop={PuffTheme.GreenDark}\r\n\t\t\t/>\r\n\t\t\t<DetailGrid>\r\n\t\t\t\t<Grid inner>\r\n\t\t\t\t\t<Cell span={4} phone={12} tablet={12} desktop={4}>\r\n\t\t\t\t\t\t<SectionItemContainer>\r\n\t\t\t\t\t\t\t<JobDetailSideBarItem\r\n\t\t\t\t\t\t\t\ttitle={summary.title}\r\n\t\t\t\t\t\t\t\titems={summary.items}\r\n\t\t\t\t\t\t\t\tbutton={summary.button}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t{isDesktopOrLarger && contactInfo && (\r\n\t\t\t\t\t\t\t\t<SideBarSectionContainer>\r\n\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t<SideBarSectionTitle>{contactInfo.heading}</SideBarSectionTitle>\r\n\t\t\t\t\t\t\t\t\t\t<SectionTitleUnderline />\r\n\t\t\t\t\t\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\t\t\t\t\t\tfragments={contactInfo.textAsModel.fragments}\r\n\t\t\t\t\t\t\t\t\t\t\tinsideInnerGrid\r\n\t\t\t\t\t\t\t\t\t\t\tinsideCell={true}\r\n\t\t\t\t\t\t\t\t\t\t\tinsideGrid={true}\r\n\t\t\t\t\t\t\t\t\t\t\toverrideSpacing={4}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</SideBarSectionContainer>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</SectionItemContainer>\r\n\t\t\t\t\t</Cell>\r\n\t\t\t\t\t<ContentBodyCell span={8} phone={12} tablet={8} desktop={8}>\r\n\t\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\t\tfragments={mainItems()}\r\n\t\t\t\t\t\t\tinsideInnerGrid\r\n\t\t\t\t\t\t\toverrideSpacing={4}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t{!isDesktopOrLarger && contactInfo && (\r\n\t\t\t\t\t\t\t<SideBarSectionContainer>\r\n\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t<SideBarSectionTitle>{contactInfo.heading}</SideBarSectionTitle>\r\n\t\t\t\t\t\t\t\t\t<SectionTitleUnderline />\r\n\t\t\t\t\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\t\t\t\t\tfragments={contactInfo.textAsModel.fragments}\r\n\t\t\t\t\t\t\t\t\t\tinsideInnerGrid\r\n\t\t\t\t\t\t\t\t\t\toverrideSpacing={4}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</SideBarSectionContainer>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</ContentBodyCell>\r\n\t\t\t\t</Grid>\r\n\t\t\t</DetailGrid>\r\n\t\t\t<DetailGrid>\r\n\t\t\t\t<EpiFragments fragments={bottomItems} insideGrid />\r\n\t\t\t</DetailGrid>\r\n\t\t\t{siblingsList.items?.length > 0 && (\r\n\t\t\t\t<Space>\r\n\t\t\t\t\t<BannerLinks\r\n\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\theading={siblingsList.heading}\r\n\t\t\t\t\t\tlinks={siblingsList.items}\r\n\t\t\t\t\t></BannerLinks>\r\n\t\t\t\t</Space>\r\n\t\t\t)}\r\n\t\t</article>\r\n\t);\r\n};\r\n\r\nexport default NVseJobDetailPage;\r\n","/**\r\n * NVseGrantsListingPage - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\nimport { px2rem } from 'theme/utils';\r\n\r\nexport const Div = styled.div``;\r\nexport const FilterContainer = styled.div`\r\n\tbackground-color: ${props => props.theme.colors.blue1};\r\n\tpadding: ${props => props.theme.spacing.space4}rem;\r\n\tpadding-bottom: 0px;\r\n\r\n\t> div {\r\n\t\tdisplay: inline-block;\r\n\t\tmargin-bottom: ${props => props.theme.spacing.space4}rem;\r\n\t}\r\n\r\n\t> div:not(:last-child) {\r\n\t\tmargin-right: ${props => props.theme.spacing.space4}rem;\r\n\t}\r\n\r\n\t> label {\r\n\t\tdisplay: block;\r\n\t\tcolor: #222425;\r\n\t\t${props => props.theme.typography.style4.getStyle()};\t\t\r\n\t\tmargin-bottom: ${props => props.theme.spacing.space3}rem;\r\n\r\n\t\t${mediaQueries.phone} {\r\n\t\tfont-size: ${px2rem(24)};\r\n\t\t}\r\n\r\n\t}\r\n`;\r\n\r\nexport const PastGrantsContainer = styled.div``;\r\n","import { Heading } from 'components/Typography/Typography';\r\nimport React from 'react';\r\n\r\n/**\r\n * SubHeader\r\n */\r\ntype SubHeaderProps = {\r\n\theadingLevel?: number;\r\n\theading: string;\r\n\tzeroBottomMargin?: boolean;\r\n};\r\n\r\nexport const SubHeader: React.FC<SubHeaderProps> = ({\r\n\theading,\r\n\theadingLevel,\r\n\tzeroBottomMargin,\r\n}) => {\r\n\tif (heading) {\r\n\t\treturn (\r\n\t\t\t<Heading\r\n\t\t\t\tlevel={headingLevel}\r\n\t\t\t\tstyleLevel={4}\r\n\t\t\t\tzeroBottom={zeroBottomMargin}\r\n\t\t\t>\r\n\t\t\t\t{heading}\r\n\t\t\t</Heading>\r\n\t\t);\r\n\t}\r\n\treturn null;\r\n};\r\n","import { Grid } from 'components/Boilerplate/Grid';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport Checkbox from 'components/Checkbox';\r\nimport React, { useContext, useEffect, useState } from 'react';\r\nimport { GrantPuffModel } from 'types/fragments';\r\nimport { NVseGrantsListingPageModel } from './NVseGrantsListingPage.model';\r\nimport { FilterContainer } from './NVseGrantsListingPage.styles';\r\nimport { ViewType } from 'types/enums';\r\nimport {\r\n\tBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { formatText } from 'utils/helper-utils';\r\nimport { GrantsHeader } from 'components/Panels/GrantsHeader';\r\nimport { SubHeader } from 'components/Panels/SubHeader';\r\nimport { FragmentPuffList } from 'components/Panels/FragmentPuffList';\r\nimport { ThemeContext } from 'styled-components';\r\n\r\ntype filterModel = {\r\n\ttargetGroups: number[];\r\n};\r\n\r\ntype filteredItemsModel = {\r\n\titems: GrantPuffModel[];\r\n\tqty: number;\r\n\ttotal: number;\r\n};\r\n\r\n/**\r\n * # Listningsida för bidrag \r\n * Modeltype:<code>NVseGrantsListingPage</code>\r\n * \r\n * [API contract](https://consid.atlassian.net/wiki/spaces/NNN/pages/2091384865/NVseStatisticsListingPage)\r\n * \r\n * Landningssida för webbplatsens bidrag\r\n */\r\nconst NVseGrantsListingPage: React.FC<NVseGrantsListingPageModel> = ({\r\n\theading,\r\n\tpreamble,\r\n\ttargetGroups,\r\n\tgrants,\r\n\tdisplayedGrantsText,\r\n\tpastGrantsHeading,\r\n\tpastGrantsLink,\r\n\tepi,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic\r\n}) => {\r\n\tconst [filter, setFilter] = useState({\r\n\t\tqty: 0,\r\n\t\ttotal: 0,\r\n\t\ttargetGroups: [],\r\n\t} as filterModel);\r\n\r\n\tconst [filteredGrants, setFilteredGrants] = useState({\r\n\t\tqty: 0,\r\n\t\ttotal: 0,\r\n\t\titems: [],\r\n\t} as filteredItemsModel);\r\n\r\n\tconst [endedGrants, setEndedGrants] = useState<GrantPuffModel[]>([]);\r\n\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\t// TODO: Hardcoded\r\n\tconst showMoreLabel = 'Visa fler';\r\n\r\n\tuseEffect(() => {\r\n\t\t// Grants filter\r\n\r\n\t\t// Get all Current and Future\r\n\t\t// 0 = kommande, 1 = aktuell, 2 = avslutad\r\n\t\tconst currentAndComming = grants.filter((item: GrantPuffModel) => {\r\n\t\t\t// Apply status filter\r\n\t\t\treturn item.statusId === 0 || item.statusId === 1;\r\n\t\t});\r\n\r\n\t\tlet currentAndCommingTotal = currentAndComming.length;\r\n\r\n\t\t// Applay checkboxes (targetGroups) filter\r\n\t\tconst filtered = currentAndComming.filter((item: GrantPuffModel) => {\r\n\t\t\tif (filter.targetGroups.length === 0) return true;\r\n\t\t\treturn item.targetGroupIds.some((c) => {\r\n\t\t\t\treturn filter.targetGroups.includes(c);\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\t// Sort by prio and date\r\n\t\tconst sorted = filtered.sort((a, b) => {\r\n\t\t\tif (a.isPrioritized !== b.isPrioritized) {\r\n\t\t\t\treturn a.isPrioritized ? -1 : 1;\r\n\t\t\t}\r\n\r\n\t\t\tconst maxDate = 8640000000000000;\r\n\t\t\tlet date1 = a.applicationEndDate ? a.applicationEndDate : maxDate;\r\n\t\t\tlet date2 = b.applicationEndDate ? b.applicationEndDate : maxDate;\r\n\t\t\treturn new Date(date1).getTime() - new Date(date2).getTime();\r\n\t\t});\r\n\r\n\t\tconst ended = grants.filter((item: GrantPuffModel) => {\r\n\t\t\t// Apply status filter\r\n\t\t\treturn item.statusId === 2;\r\n\t\t});\r\n\r\n\t\tsetEndedGrants(ended);\r\n\r\n\t\tsetFilteredGrants({\r\n\t\t\tqty: filtered.length,\r\n\t\t\ttotal: currentAndCommingTotal,\r\n\t\t\titems: sorted,\r\n\t\t} as filteredItemsModel);\r\n\t}, [grants, filter.targetGroups]);\r\n\r\n\t// A Checkbox (targetgroup) value changed\r\n\tconst filterCheckedChanged = (id: number, value: boolean) => {\r\n\t\tvar newfilterList;\r\n\r\n\t\tif (value) {\r\n\t\t\tif (filter.targetGroups.includes(id)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t// Add id to filter\r\n\t\t\tnewfilterList = [...filter.targetGroups, id];\r\n\t\t} else {\r\n\t\t\tif (!filter.targetGroups.includes(id)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t// Remove id from filter;\r\n\t\t\tnewfilterList = filter.targetGroups.filter((item) => item !== id);\r\n\t\t}\r\n\r\n\t\tconst newFilter: filterModel = { ...filter };\r\n\t\tnewFilter.targetGroups = newfilterList;\r\n\t\tsetFilter(newFilter);\r\n\t};\r\n\r\n\t// figure out the last block type, so we know the bottom padding (space between last element and footer)\r\n\tlet lastBlockType = BlockType.Element;\r\n\tlet blockTypeBefore_filteredGrants: BlockType = lastBlockType;\r\n\tlet blockTypeBefore_endedGrants: BlockType = lastBlockType;\r\n\r\n\tif (targetGroups) {\r\n\t\tlastBlockType = BlockType.Element;\r\n\t\tblockTypeBefore_filteredGrants = lastBlockType;\r\n\t\tblockTypeBefore_endedGrants = lastBlockType;\r\n\t}\r\n\tif (displayedGrantsText) {\r\n\t\tlastBlockType = BlockType._Reserved_Heading;\r\n\t\tblockTypeBefore_filteredGrants = lastBlockType;\r\n\t\tblockTypeBefore_endedGrants = lastBlockType;\r\n\t}\r\n\tif (filteredGrants.items.length > 0) {\r\n\t\tlastBlockType = BlockType.Element;\r\n\t\tblockTypeBefore_endedGrants = lastBlockType;\r\n\t}\r\n\tif (endedGrants.length > 0) {\r\n\t\tlastBlockType = BlockType.Element;\r\n\t}\r\n\r\n\tconst spaceBefore_filteredGrants = getSpaceToAddBefore(\r\n\t\tblockTypeBefore_filteredGrants,\r\n\t\tBlockType.Element,\r\n\t\tthemeContext\r\n\t);\r\n\tconst spaceBefore_endedGrants = getSpaceToAddBefore(\r\n\t\tblockTypeBefore_endedGrants,\r\n\t\tBlockType.Element,\r\n\t\tthemeContext\r\n\t);\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\treturn (\r\n\t\t<Space top={themeContext.spacing.getPageTopPadding()} bottom={spaceAfterLast}>\r\n\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t<GrantsHeader\r\n\t\t\t\t\tcolumns={8}\r\n\t\t\t\t\theadingLevel={1}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t></GrantsHeader>\r\n\r\n\t\t\t\t{targetGroups && (\r\n\t\t\t\t\t<Space top={themeContext.spacing.getElement()}>\r\n\t\t\t\t\t\t<FilterContainer>\r\n\t\t\t\t\t\t\t<label>{targetGroups.heading}</label>\r\n\t\t\t\t\t\t\t{targetGroups.groups.map((item, index) => {\r\n\t\t\t\t\t\t\t\tconst defaultValue = filter.targetGroups.includes(item.id);\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\t\t\t\t\tchecked={defaultValue}\r\n\t\t\t\t\t\t\t\t\t\tonCheckedChanged={(value: boolean) => {\r\n\t\t\t\t\t\t\t\t\t\t\tfilterCheckedChanged(item.id, value);\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{item.text}\r\n\t\t\t\t\t\t\t\t\t</Checkbox>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t</FilterContainer>\r\n\t\t\t\t\t</Space>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{displayedGrantsText && (\r\n\t\t\t\t\t<Space top={themeContext.spacing.getElement()}>\r\n\t\t\t\t\t\t<SubHeader\r\n\t\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\t\theading={formatText(\r\n\t\t\t\t\t\t\t\tdisplayedGrantsText,\r\n\t\t\t\t\t\t\t\tfilteredGrants.total,\r\n\t\t\t\t\t\t\t\tfilteredGrants.qty\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t></SubHeader>\r\n\t\t\t\t\t</Space>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{filteredGrants.items.length > 0 && (\r\n\t\t\t\t\t<Space top={spaceBefore_filteredGrants}>\r\n\t\t\t\t\t\t<FragmentPuffList\r\n\t\t\t\t\t\t\tinitialMaxCount={6}\r\n\t\t\t\t\t\t\toptions={{\r\n\t\t\t\t\t\t\t\tinsideCell: false,\r\n\t\t\t\t\t\t\t\tinsideInnerGrid: false,\r\n\t\t\t\t\t\t\t\tinsideGrid: true,\r\n\t\t\t\t\t\t\t\theadingLevel: 2, // TODO\r\n\t\t\t\t\t\t\t\tview: ViewType.Card,\r\n\t\t\t\t\t\t\t\tthemeContext: themeContext\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tshowMoreLabel={showMoreLabel}\r\n\t\t\t\t\t\t\titems={filteredGrants.items}\r\n\t\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t\t></FragmentPuffList>\r\n\t\t\t\t\t</Space>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{endedGrants.length > 0 && (\r\n\t\t\t\t\t<Space top={spaceBefore_endedGrants}>\r\n\t\t\t\t\t\t<FragmentPuffList\r\n\t\t\t\t\t\t\theading={pastGrantsHeading}\r\n\t\t\t\t\t\t\tlink={pastGrantsLink}\r\n\t\t\t\t\t\t\tinitialMaxCount={6}\r\n\t\t\t\t\t\t\tshowMoreLabel={showMoreLabel}\r\n\t\t\t\t\t\t\toptions={{\r\n\t\t\t\t\t\t\t\tinsideCell: false,\r\n\t\t\t\t\t\t\t\tinsideInnerGrid: false,\r\n\t\t\t\t\t\t\t\tinsideGrid: true,\r\n\t\t\t\t\t\t\t\theadingLevel: 2, // TODO\r\n\t\t\t\t\t\t\t\tview: ViewType.Card,\r\n\t\t\t\t\t\t\t\tthemeContext: themeContext\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\titems={endedGrants}\r\n\t\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t\t></FragmentPuffList>\r\n\t\t\t\t\t</Space>\r\n\t\t\t\t)}\r\n\t\t\t</Grid>\r\n\t\t</Space>\r\n\t);\r\n};\r\n\r\nexport default NVseGrantsListingPage;\r\n","/**\r\n * NVseStatisticsPage - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\n\r\nexport const Div = styled.div``;\r\n\r\nexport const CustomBackground = styled.div`\r\n\r\n\tpadding-top: ${props => props.theme.spacing.getPageTopPadding()}rem;\r\n\tpadding-bottom: ${props => props.theme.spacing.getPageTopPadding()}rem;\r\n\r\n\tbackground-color: ${props => props.theme.colors.white};\r\n`;\r\n","import React, { useContext, useState } from 'react';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport { FragmentModelTypes } from 'types/fragments';\r\nimport { NVseStatisticsPageModel } from './NVseStatisticsPage.model';\r\nimport Tab from 'components/Tab';\r\nimport { TabPanel, TabProps } from 'components/Tab/Tab';\r\nimport {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n\tgetSpaceToAddBefore,\r\n\tOptions,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { CustomBackground } from './NVseStatisticsPage.styles';\r\nimport BannerLinks from 'components/Banners/BannerLinks';\r\nimport Highcharts from 'components/Highcharts/Highcharts';\r\nimport { GrantsHeader } from 'components/Panels/GrantsHeader';\r\nimport { SidebarRelatedPanel } from 'components/Panels/SidebarRelatedPanel';\r\nimport { ColumnPageWithSidebar } from 'components/Panels/ColumnPageWithSidebar';\r\nimport ListHeader from 'components/ListHeader';\r\nimport { ThemeContext } from 'styled-components';\r\n\r\n/**\r\n * # Statistiksida\r\n * Modeltype:<code>NVseStatisticsPage</code>\r\n *\r\n * [API contract](https://consid.atlassian.net/wiki/spaces/NNN/pages/1812103169/NVseStatisticsPage)\r\n *\r\n * Sida för att visa miljödata pÃ¥ ett visuellt sätt\r\n */\r\nconst NVseStatisticsPage: React.FC<NVseStatisticsPageModel> = ({\r\n\theading,\r\n\tlastReviewed,\r\n\tshowReviewDate,\r\n\tpreamble,\r\n\ttabHeading,\r\n\ttabItems,\r\n\tbottomItems,\r\n\tshowAsChartLabel,\r\n\tshowAsTableLabel,\r\n\tdownloadLabel,\r\n\texportAsLabel,\r\n\tlegendHeading,\r\n\tlegendSelectAllLabel,\r\n\tlegendSelectNoneLabel,\r\n\thighChartsOptions,\r\n\trelatedEnvironmentGoalsLabel,\r\n\trelatedEnvironmentGoals,\r\n\trelatedSustainabilityGoalsLabel,\r\n\trelatedSustainabilityGoals,\r\n\tresponsibleAuthorityLabel,\r\n\tresponsibleAuthority,\r\n\tuseShortDate,\r\n\tstatisticsClassificationsLink,\r\n\tclassificationList,\r\n\tsiblingsList,\r\n\tdataSource,\r\n\tepi,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst options = JSON.parse(highChartsOptions);\r\n\r\n\tconst [selectedPagePanel, setSelectedPagePanel] = useState<string>('tab0');\r\n\r\n\tconst related = [\r\n\t\t{ label: relatedEnvironmentGoalsLabel, items: relatedEnvironmentGoals },\r\n\t\t{\r\n\t\t\tlabel: relatedSustainabilityGoalsLabel,\r\n\t\t\titems: relatedSustainabilityGoals,\r\n\t\t},\r\n\t\t{\r\n\t\t\tlabel: responsibleAuthorityLabel,\r\n\t\t\titems: responsibleAuthority ? [responsibleAuthority] : [],\r\n\t\t},\r\n\t];\r\n\r\n\tconst pages = tabItems.map((item, index) => {\r\n\t\treturn {\r\n\t\t\theading: item.heading,\r\n\t\t\tid: 'tab' + index,\r\n\t\t\ticonName: null,\r\n\t\t};\r\n\t});\r\n\r\n\tconst tabPagesPops = {\r\n\t\tlabel: 'Sidor',\r\n\t\tdefaultTabId: selectedPagePanel,\r\n\t\tautoSelect: false,\r\n\t\titems: pages,\r\n\t} as TabProps;\r\n\r\n\tconst onPagePanelSelected = (panelId: string) => {\r\n\t\tsetSelectedPagePanel(panelId);\r\n\t};\r\n\r\n\tlet lastBlockType = BlockType.Element;\r\n\tlet blockTypeBefore_bottomItems: BlockType = lastBlockType;\r\n\tlet blockTypeBefore_siblingsList: BlockType = lastBlockType;\r\n\r\n\tif (dataSource) {\r\n\t\tlastBlockType = BlockType.Element;\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t\tblockTypeBefore_siblingsList = lastBlockType;\r\n\t}\r\n\r\n\tconst selectedTabIndex = tabPagesPops.items.findIndex((item) => {\r\n\t\treturn item.id === selectedPagePanel;\r\n\t});\r\n\r\n\tif (selectedTabIndex !== -1) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\t[\r\n\t\t\t\t...tabItems[selectedTabIndex].textAsModel.fragments,\r\n\t\t\t\t...tabItems[selectedTabIndex].bottomItems,\r\n\t\t\t],\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t\tblockTypeBefore_siblingsList = lastBlockType;\r\n\t}\r\n\r\n\tif (bottomItems.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\tbottomItems,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_siblingsList = lastBlockType;\r\n\t}\r\n\tif (siblingsList.items.length > 0) {\r\n\t\tlastBlockType = BlockType.SectionBanner;\r\n\t}\r\n\r\n\tconst spaceBefore_siblingsList = getSpaceToAddBefore(\r\n\t\tblockTypeBefore_siblingsList,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\treturn (\r\n\t\t<Space top={0} bottom={spaceAfterLast}>\r\n\t\t\t<CustomBackground>\r\n\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t<GrantsHeader\r\n\t\t\t\t\t\tcolumns={8}\r\n\t\t\t\t\t\theadingLevel={1}\r\n\t\t\t\t\t\theading={heading}\r\n\t\t\t\t\t\tlastReviewed={lastReviewed}\r\n\t\t\t\t\t\tshowReviewDate={showReviewDate}\r\n\t\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t\t></GrantsHeader>\r\n\t\t\t\t</Grid>\r\n\r\n\t\t\t\t<Space top={themeContext.spacing.space4}>\r\n\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t<Highcharts\r\n\t\t\t\t\t\t\tdata={options}\r\n\t\t\t\t\t\t\tshowAsChartLabel={showAsChartLabel}\r\n\t\t\t\t\t\t\tshowAsTableLabel={showAsTableLabel}\r\n\t\t\t\t\t\t\tdownloadLabel={downloadLabel}\r\n\t\t\t\t\t\t\texportAsLabel={exportAsLabel}\r\n\t\t\t\t\t\t\tlegendHeading={legendHeading}\r\n\t\t\t\t\t\t\tlegendSelectAllLabel={legendSelectAllLabel}\r\n\t\t\t\t\t\t\tlegendSelectNoneLabel={legendSelectNoneLabel}\r\n\t\t\t\t\t\t\tuseShortDate={useShortDate}\r\n\t\t\t\t\t\t\tclassificationList={classificationList}\r\n\t\t\t\t\t\t\tstatisticsClassificationsLink={statisticsClassificationsLink}\r\n\t\t\t\t\t\t></Highcharts>\r\n\t\t\t\t\t</Grid>\r\n\t\t\t\t</Space>\r\n\t\t\t</CustomBackground>\r\n\r\n\t\t\t{dataSource && (\r\n\t\t\t\t<EpiFragments\r\n\t\t\t\t\tpreviousBlockType={BlockType.SectionBanner}\r\n\t\t\t\t\tepi={epi}\r\n\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\tfragments={[dataSource] as FragmentModelTypes[]}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\r\n\t\t\t{tabPagesPops.items.length > 0 && (\r\n\t\t\t\t<div>\r\n\t\t\t\t\t<Space top={themeContext.spacing.getSection()}>\r\n\t\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t\t{tabHeading && (\r\n\t\t\t\t\t\t\t\t<Space bottom={themeContext.spacing.getElement()}>\r\n\t\t\t\t\t\t\t\t\t<ListHeader\r\n\t\t\t\t\t\t\t\t\t\theading={tabHeading}\r\n\t\t\t\t\t\t\t\t\t\tsectionStyle\r\n\t\t\t\t\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\t\t\t\t></ListHeader>\r\n\t\t\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t<Tab onSelect={onPagePanelSelected} {...tabPagesPops}></Tab>\r\n\t\t\t\t\t\t</Grid>\r\n\t\t\t\t\t</Space>\r\n\r\n\t\t\t\t\t{tabItems.map((item, index) => {\r\n\t\t\t\t\t\tconst options = {\r\n\t\t\t\t\t\t\tepi: epi,\r\n\t\t\t\t\t\t\theadingLevel: 2,\r\n\t\t\t\t\t\t\tinsideGrid: true,\r\n\t\t\t\t\t\t} as Options;\r\n\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<TabPanel\r\n\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\tpanelId={'tab' + index}\r\n\t\t\t\t\t\t\t\tselected={selectedPagePanel === 'tab' + index}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t\t\t\t<ColumnPageWithSidebar\r\n\t\t\t\t\t\t\t\t\t\toptions={options}\r\n\t\t\t\t\t\t\t\t\t\ttextAsModel={item.textAsModel}\r\n\t\t\t\t\t\t\t\t\t\tlink={item.link}\r\n\t\t\t\t\t\t\t\t\t\tbottomItems={item.bottomItems}\r\n\t\t\t\t\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{related.map((item, index) => {\r\n\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Space\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttop={index === 0 ? 0 : themeContext.spacing.space5}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<SidebarRelatedPanel\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={item.label}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\titems={item.items}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></SidebarRelatedPanel>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t\t</ColumnPageWithSidebar>\r\n\t\t\t\t\t\t\t\t</Grid>\r\n\t\t\t\t\t\t\t</TabPanel>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\r\n\t\t\t{bottomItems && bottomItems.length > 0 && (\r\n\t\t\t\t<EpiFragments\r\n\t\t\t\t\tpreviousBlockType={blockTypeBefore_bottomItems}\r\n\t\t\t\t\tepi={epi}\r\n\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\tfragments={bottomItems as FragmentModelTypes[]}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\r\n\t\t\t{siblingsList.items?.length > 0 && (\r\n\t\t\t\t<Space top={spaceBefore_siblingsList}>\r\n\t\t\t\t\t<BannerLinks\r\n\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\theading={siblingsList.heading}\r\n\t\t\t\t\t\tlinks={siblingsList.items}\r\n\t\t\t\t\t></BannerLinks>\r\n\t\t\t\t</Space>\r\n\t\t\t)}\r\n\t\t</Space>\r\n\t);\r\n};\r\n\r\nexport default NVseStatisticsPage;\r\n","import EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport { BlockType, getLastItemBlockType, getSpaceToAddBefore } from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport React, { useContext } from 'react';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { FragmentModelTypes } from 'types/fragments';\r\nimport { NVseStartPageModel } from './NVseStartPage.model';\r\nimport PageTopOverlappBanner from './PageTopOverlappBanner';\r\n\r\n/**\r\n * # Startsida \r\n * Modeltype:<code>NVseStartPage</code>\r\n * \r\n * [API contract](https://consid.atlassian.net/wiki/spaces/NNN/pages/1735753731/NVseStartPage)\r\n * \r\n * Webbplatsens startsida\r\n */\r\nconst NVseStartPage: React.FC<NVseStartPageModel> = ({\r\n\theading,\r\n\tpreamble,\r\n\tmodelType,\r\n\timage,\r\n\tbottomItems,\r\n\tlinkList,\r\n\tepi,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic\r\n}) => {\r\n\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tlet lastBlockType = BlockType.Element;\r\n\tif (bottomItems.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(bottomItems, themeContext, disableCustomHeadingLogic);\r\n\t}\r\n\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\treturn (\r\n\t\t<Space bottom={spaceAfterLast}>\r\n\r\n\t\t\t<PageTopOverlappBanner\r\n\t\t\t\timage={image}\r\n\t\t\t\timage_htmlAttributes={_properties?.image}\r\n\t\t\t\theading={heading}\r\n\t\t\t\theadingLevel={1}\r\n\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\tpreamble={preamble}\r\n\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\tlinkList={linkList}\r\n\t\t\t></PageTopOverlappBanner>\r\n\r\n\t\t\t<EpiFragments\r\n\t\t\t\tmodelType={modelType}\r\n\t\t\t\tpreviousBlockType={BlockType.Element}\r\n\t\t\t\tepi={epi}\r\n\t\t\t\theadingLevel={2}\r\n\t\t\t\toverrideSpacing={themeContext.spacing.space3}\r\n\t\t\t\tfragments={bottomItems as FragmentModelTypes[]}\r\n\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t/>\r\n\t\t</Space>\r\n\t);\r\n};\r\n\r\nexport default NVseStartPage;\r\n","/**\r\n * SimplePuff - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\n\r\nexport const SimplePuffStyle = styled.div`\r\n\t${mediaQueries.tabletOrLarger} {\r\n\t\tmin-height: 208px;\r\n\t}\r\n\theight: 100%;\r\n\tbackground-color: ${(props) => props.theme.colors.white};\r\n\tbox-shadow: 0 12px 18px 0 rgba(0, 0, 0, 0.03);\r\n`;\r\nexport const TopPuffHeader = styled.div`\r\n\tbackground-color: ${(props) => props.theme.colors.blue1};\r\n\tpadding: ${(props) => props.theme.spacing.space3}rem;\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tpadding: ${(props) => props.theme.spacing.space1}rem;\r\n\t}\r\n\r\n\tmax-width: unset;\r\n\tmargin-bottom: 0px;\r\n\ttext-align: center;\r\n`;\r\nexport const TopPuffContent = styled.div`\r\n\tpadding: ${(props) => props.theme.spacing.space3}rem;\r\n\tp {\r\n\t\t${(props) => props.theme.typography.style9.getStyle()};\r\n\t\tmargin-bottom: 0px;\r\n\t}\r\n`;\r\n","/**\r\n * SimplePuff\r\n */\r\n\r\nimport React, { useContext } from 'react';\r\nimport { SimplePuffStyle, TopPuffContent, TopPuffHeader } from './SimplePuff.styles';\r\nimport Typography from 'components/Typography';\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport { ThemeContext } from 'styled-components';\r\n\r\ntype SimplePuffProps = {\r\n\ttitle: string;\r\n\tcontent: string;\r\n\theadingLevel: number;\r\n};\r\n\r\n/** A SimplePuff */\r\nexport const SimplePuff = ({\r\n\ttitle,\r\n\tcontent,\r\n\theadingLevel,\r\n}: SimplePuffProps) => {\r\n\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\treturn (\r\n\t\t<SimplePuffStyle>\r\n\t\t\t<TopPuffHeader>\r\n\t\t\t\t<Heading color={themeContext.colors.primary} level={headingLevel} styleLevel={4} zeroBottom={true}>\r\n\t\t\t\t\t{title}\r\n\t\t\t\t</Heading>\r\n\t\t\t</TopPuffHeader>\r\n\t\t\t<TopPuffContent>\r\n\t\t\t\t<Typography as=\"p\">{content}</Typography>\r\n\t\t\t</TopPuffContent>\r\n\t\t</SimplePuffStyle>\r\n\t);\r\n};\r\n\r\nexport default SimplePuff;\r\n","import { Cell, Grid } from 'components/Boilerplate/Grid';\r\nimport SimplePuff from 'components/SimplePuff';\r\nimport React from 'react';\r\nimport {} from './TargetGroups.styles';\r\n\r\ntype TargetGroupsProps = {\r\n\ttargetGroupsHeading: string;\r\n\ttargetGroupsText: string;\r\n\r\n\tapplyScopeHeading: string;\r\n\tapplyScopeText: string;\r\n\r\n\tapplyPeriodHeading: string;\r\n\tapplyPeriodText: string;\r\n\r\n\theadingLevel: number;\r\n};\r\n\r\nexport const TargetGroups: React.FC<TargetGroupsProps> = ({\r\n\ttargetGroupsHeading,\r\n\ttargetGroupsText,\r\n\tapplyScopeHeading,\r\n\tapplyScopeText,\r\n\tapplyPeriodHeading,\r\n\tapplyPeriodText,\r\n\theadingLevel,\r\n}) => {\r\n\treturn (\r\n\t\t<Grid inner={true}>\r\n\t\t\t{targetGroupsText && (\r\n\t\t\t\t<Cell span={4}>\r\n\t\t\t\t\t<SimplePuff\r\n\t\t\t\t\t\ttitle={targetGroupsHeading}\r\n\t\t\t\t\t\tcontent={targetGroupsText}\r\n\t\t\t\t\t\theadingLevel={headingLevel}\r\n\t\t\t\t\t></SimplePuff>\r\n\t\t\t\t</Cell>\r\n\t\t\t)}\r\n\r\n\t\t\t{applyScopeText && (\r\n\t\t\t\t<Cell span={4}>\r\n\t\t\t\t\t<SimplePuff\r\n\t\t\t\t\t\ttitle={applyScopeHeading}\r\n\t\t\t\t\t\tcontent={applyScopeText}\r\n\t\t\t\t\t\theadingLevel={headingLevel}\r\n\t\t\t\t\t></SimplePuff>\r\n\t\t\t\t</Cell>\r\n\t\t\t)}\r\n\r\n\t\t\t{applyPeriodText && (\r\n\t\t\t\t<Cell span={4}>\r\n\t\t\t\t\t<SimplePuff\r\n\t\t\t\t\t\ttitle={applyPeriodHeading}\r\n\t\t\t\t\t\tcontent={applyPeriodText}\r\n\t\t\t\t\t\theadingLevel={headingLevel}\r\n\t\t\t\t\t></SimplePuff>\r\n\t\t\t\t</Cell>\r\n\t\t\t)}\r\n\t\t</Grid>\r\n\t);\r\n};\r\n\r\nexport default TargetGroups;\r\n","import React, { useContext } from 'react';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport { NVseGrantPageModel } from './NVseGrantPage.model';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport TargetGroups from 'components/TargetGroups';\r\nimport BannerLinks from 'components/Banners/BannerLinks';\r\nimport {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { GrantsHeader } from 'components/Panels/GrantsHeader';\r\nimport { ThemeContext } from 'styled-components';\r\nimport EditableField from 'components/EditableField/EditableField';\r\n\r\n/**\r\n * # MÃ¥lgruppssida för bidrag\r\n * Modeltype:<code>NVseGrantPage</code>\r\n *\r\n * [API contract](https://consid.atlassian.net/wiki/spaces/NNN/pages/1663008769/NVseGrantPage+M+lgruppssida)\r\n *\r\n * MÃ¥lgruppsspecifik sida för ett bidrag\r\n */\r\nconst NVseGrantPage: React.FC<NVseGrantPageModel> = ({\r\n\theading,\r\n\tapplyLink,\r\n\ttextAsModel,\r\n\tlastReviewed,\r\n\tshowReviewDate,\r\n\tsiblingsList,\r\n\tbottomItems,\r\n\ttargetGroupsText,\r\n\tapplyScopeText,\r\n\tapplyPeriodText,\r\n\ttargetGroupsHeading,\r\n\tapplyScopeHeading,\r\n\tapplyPeriodHeading,\r\n\tpreamble,\r\n\tsectionHeading,\r\n\tepi,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\t// figure out the last block type, so we know the bottom padding (space between last element and footer)\r\n\tlet lastBlockType = BlockType.Element;\r\n\tlet blockTypeBefore_bottomItems: BlockType = lastBlockType;\r\n\tlet blockTypeBefore_textAsModel: BlockType = lastBlockType;\r\n\tlet blockTypeBefore_siblingsList: BlockType = lastBlockType;\r\n\r\n\tif (targetGroupsText || applyScopeText || applyPeriodText) {\r\n\t\tlastBlockType = BlockType.Element;\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t\tblockTypeBefore_textAsModel = lastBlockType;\r\n\t\tblockTypeBefore_siblingsList = lastBlockType;\r\n\t}\r\n\tif (textAsModel.fragments.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\ttextAsModel.fragments,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t\tblockTypeBefore_siblingsList = lastBlockType;\r\n\t}\r\n\tif (bottomItems.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\tbottomItems,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_siblingsList = lastBlockType;\r\n\t}\r\n\tif (siblingsList.items.length > 0) {\r\n\t\tlastBlockType = BlockType.SectionBanner;\r\n\t}\r\n\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\tconst spaceBefore_siblingsList = getSpaceToAddBefore(\r\n\t\tblockTypeBefore_siblingsList,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\treturn (\r\n\t\t<Space\r\n\t\t\ttop={themeContext.spacing.getPageTopPadding()}\r\n\t\t\tbottom={spaceAfterLast}\r\n\t\t>\r\n\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t<GrantsHeader\r\n\t\t\t\t\tsectionHeading={sectionHeading}\r\n\t\t\t\t\theadingLevel={1}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t\tapplyLink={applyLink}\r\n\t\t\t\t\tlastReviewed={lastReviewed}\r\n\t\t\t\t\tshowReviewDate={showReviewDate}\r\n\t\t\t\t></GrantsHeader>\r\n\t\t\t</Grid>\r\n\r\n\t\t\t{(targetGroupsText || applyScopeText || applyPeriodText) && (\r\n\t\t\t\t<Space top={themeContext.spacing.getElement()}>\r\n\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t<TargetGroups\r\n\t\t\t\t\t\t\ttargetGroupsHeading={targetGroupsHeading}\r\n\t\t\t\t\t\t\ttargetGroupsText={targetGroupsText}\r\n\t\t\t\t\t\t\tapplyScopeHeading={applyScopeHeading}\r\n\t\t\t\t\t\t\tapplyScopeText={applyScopeText}\r\n\t\t\t\t\t\t\tapplyPeriodHeading={applyPeriodHeading}\r\n\t\t\t\t\t\t\tapplyPeriodText={applyPeriodText}\r\n\t\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\t></TargetGroups>\r\n\t\t\t\t\t</Grid>\r\n\t\t\t\t</Space>\r\n\t\t\t)}\r\n\r\n\t\t\t<EditableField opeProperty={_properties?.mainBody}>\r\n\t\t\t\t<EpiFragments\r\n\t\t\t\t\tpreviousBlockType={blockTypeBefore_textAsModel}\r\n\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\tepi={epi}\r\n\t\t\t\t\tfragments={textAsModel.fragments}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t/>\r\n\t\t\t</EditableField>\r\n\r\n\t\t\t<EpiFragments\r\n\t\t\t\tpreviousBlockType={blockTypeBefore_bottomItems}\r\n\t\t\t\tepi={epi}\r\n\t\t\t\theadingLevel={2}\r\n\t\t\t\tfragments={bottomItems}\r\n\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t/>\r\n\r\n\t\t\t{siblingsList.items?.length > 0 && (\r\n\t\t\t\t<Space top={spaceBefore_siblingsList}>\r\n\t\t\t\t\t<BannerLinks\r\n\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\theading={siblingsList.heading}\r\n\t\t\t\t\t\tlinks={siblingsList.items}\r\n\t\t\t\t\t></BannerLinks>\r\n\t\t\t\t</Space>\r\n\t\t\t)}\r\n\t\t</Space>\r\n\t);\r\n};\r\n\r\nexport default NVseGrantPage;\r\n","import React, { useContext, useEffect, useState } from 'react';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport { NVseGrantStartPageModel } from './NVseGrantStartPage.model';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport TargetGroups from 'components/TargetGroups';\r\nimport { FragmentModelTypes, GrantPuffModel } from 'types/fragments';\r\nimport { ViewType } from 'types/enums';\r\nimport { GrantsHeader } from 'components/Panels/GrantsHeader';\r\nimport { FragmentPuffList } from 'components/Panels/FragmentPuffList';\r\nimport { ThemeContext } from 'styled-components';\r\nimport EditableField from 'components/EditableField/EditableField';\r\n\r\n/**\r\n * # Bidragssida\r\n * Modeltype:<code>NVseGrantStartPage</code>\r\n *\r\n * [API contract](https://consid.atlassian.net/wiki/spaces/NNN/pages/1662844940/NVseGrantStartPage+versiktssidan)\r\n *\r\n * Startsida för ett specifikt bidrag\r\n */\r\nconst NVseGrantStartPage: React.FC<NVseGrantStartPageModel> = ({\r\n\theading,\r\n\tapplyLink,\r\n\ttextAsModel,\r\n\tbottomItems,\r\n\ttargetGroupList,\r\n\ttargetGroupsText,\r\n\tapplyScopeText,\r\n\tapplyPeriodText,\r\n\ttargetGroupsHeading,\r\n\tapplyScopeHeading,\r\n\tapplyPeriodHeading,\r\n\tlastReviewed,\r\n\tshowReviewDate,\r\n\tpreamble,\r\n\tsectionHeading,\r\n\tepi,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst [fixedItems, setFixedItems] = useState<FragmentModelTypes[]>([]);\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst tempItems = targetGroupList.items.map((item) => {\r\n\t\t\treturn {\r\n\t\t\t\tmodelType: 'GrantPuffModel',\r\n\t\t\t\tdecal: item.decal,\r\n\t\t\t\theading: item.name,\r\n\t\t\t\timage: item.image,\r\n\t\t\t\tlink: item.link,\r\n\t\t\t} as GrantPuffModel;\r\n\t\t});\r\n\r\n\t\tsetFixedItems(tempItems);\r\n\t}, [targetGroupList, targetGroupList.items]);\r\n\r\n\t// TODO: hardcoded text\r\n\tconst showMoreLabel = 'Visa fler';\r\n\r\n\t// figure out the last block type, so we know the bottom padding (space between last element and footer)\r\n\tlet lastBlockType = BlockType.Element;\r\n\tlet blockTypeBefore_textAsModel: BlockType = lastBlockType;\r\n\tlet blockTypeBefore_fixedItems: BlockType = lastBlockType;\r\n\tlet blockTypeBefore_bottomItems: BlockType = lastBlockType;\r\n\r\n\tif (targetGroupsText || applyScopeText || applyPeriodText) {\r\n\t\tlastBlockType = BlockType.Element;\r\n\t\tblockTypeBefore_textAsModel = lastBlockType;\r\n\t\tblockTypeBefore_fixedItems = lastBlockType;\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tif (textAsModel.fragments.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\ttextAsModel.fragments,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_fixedItems = lastBlockType;\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tif (fixedItems.length > 0) {\r\n\t\tlastBlockType = BlockType.Element;\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tif (bottomItems.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\tbottomItems,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t}\r\n\r\n\tconst spaceBefore_fixedItems = getSpaceToAddBefore(\r\n\t\tblockTypeBefore_fixedItems,\r\n\t\tBlockType.Element,\r\n\t\tthemeContext\r\n\t);\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\treturn (\r\n\t\t<Space\r\n\t\t\ttop={themeContext.spacing.getPageTopPadding()}\r\n\t\t\tbottom={spaceAfterLast}\r\n\t\t>\r\n\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t<GrantsHeader\r\n\t\t\t\t\tsectionHeading={sectionHeading}\r\n\t\t\t\t\theadingLevel={1}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\tlastReviewed={lastReviewed}\r\n\t\t\t\t\tshowReviewDate={showReviewDate}\r\n\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t\tapplyLink={applyLink}\r\n\t\t\t\t></GrantsHeader>\r\n\t\t\t</Grid>\r\n\r\n\t\t\t{(targetGroupsText || applyScopeText || applyPeriodText) && (\r\n\t\t\t\t<Space top={themeContext.spacing.getElement()}>\r\n\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t<TargetGroups\r\n\t\t\t\t\t\t\ttargetGroupsHeading={targetGroupsHeading}\r\n\t\t\t\t\t\t\ttargetGroupsText={targetGroupsText}\r\n\t\t\t\t\t\t\tapplyScopeHeading={applyScopeHeading}\r\n\t\t\t\t\t\t\tapplyScopeText={applyScopeText}\r\n\t\t\t\t\t\t\tapplyPeriodHeading={applyPeriodHeading}\r\n\t\t\t\t\t\t\tapplyPeriodText={applyPeriodText}\r\n\t\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\t></TargetGroups>\r\n\t\t\t\t\t</Grid>\r\n\t\t\t\t</Space>\r\n\t\t\t)}\r\n\r\n\t\t\t<EditableField opeProperty={_properties?.mainBody}>\r\n\t\t\t\t<EpiFragments\r\n\t\t\t\t\tpreviousBlockType={blockTypeBefore_textAsModel}\r\n\t\t\t\t\tepi={epi}\r\n\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\tfragments={textAsModel.fragments}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t/>\r\n\t\t\t</EditableField>\r\n\r\n\t\t\t{fixedItems.length > 0 && (\r\n\t\t\t\t<Space top={spaceBefore_fixedItems}>\r\n\t\t\t\t\t<FragmentPuffList\r\n\t\t\t\t\t\tinitialMaxCount={6}\r\n\t\t\t\t\t\tshowMoreLabel={showMoreLabel}\r\n\t\t\t\t\t\toptions={{\r\n\t\t\t\t\t\t\tinsideCell: false,\r\n\t\t\t\t\t\t\tinsideInnerGrid: false,\r\n\t\t\t\t\t\t\tinsideGrid: false,\r\n\t\t\t\t\t\t\theadingLevel: 2, // TODO\r\n\t\t\t\t\t\t\tview: ViewType.Card,\r\n\t\t\t\t\t\t\tthemeContext: themeContext,\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\titems={fixedItems}\r\n\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t></FragmentPuffList>\r\n\t\t\t\t</Space>\r\n\t\t\t)}\r\n\r\n\t\t\t<EpiFragments\r\n\t\t\t\tpreviousBlockType={blockTypeBefore_bottomItems}\r\n\t\t\t\tepi={epi}\r\n\t\t\t\theadingLevel={2}\r\n\t\t\t\tfragments={bottomItems}\r\n\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t/>\r\n\t\t</Space>\r\n\t);\r\n};\r\n\r\nexport default NVseGrantStartPage;\r\n","/**\r\n * NVseThemePage - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\n\r\nexport const Div = styled.div``;\r\n\r\n\r\nexport const PageOverviewBanner = styled.div`\r\n\tposition: sticky;\r\n\ttop: 0;\r\n\tbackground-color: ${props => props.theme.colors.white};\r\n\tpadding: ${props => props.theme.spacing.space2}rem ${props => props.theme.spacing.space3}rem;\r\n\tz-index: 1;\r\n\t\r\n\t${mediaQueries.phone} {\r\n\t\tpadding: ${props => props.theme.spacing.space2}rem 0;\r\n\t}\r\n`;\r\n\r\nexport const PageOverviewContent = styled.div`\r\n\tdisplay: flex;\r\n justify-content: space-between;\r\n`;\r\n","import EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport Button from 'components/Button';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport MegaMenu from 'components/MegaMenu';\r\nimport PageTopBanner from 'components/PageTopBanner';\r\nimport {\r\n\tgetBlockBaseMenuItems,\r\n\tgetBlockBaseSections,\r\n\tOnPageNavigationContent,\r\n} from 'components/Panels/OnPageNavigationContent';\r\nimport {\r\n\tPageOverviewBanner,\r\n\tPageOverviewContent,\r\n} from 'pages/NVseThemePage/NVseThemePage.styles';\r\nimport React, { useContext, useEffect, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectLocalization } from 'store/modules/model';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { NavigationItem } from 'types/epi';\r\nimport { FragmentModelTypes } from 'types/fragments';\r\nimport { translate } from 'utils/helper-utils';\r\nimport { NVseGuidanceStartPageModel } from './NVseGuidanceStartPage.model';\r\n\r\n/**\r\n * # Vägledningssida\r\n * Modeltype:<code>NVseGuidanceStartPage</code>\r\n *\r\n * [API contract](https://consid.atlassian.net/wiki/spaces/NNN/pages/1649737732/NVseGuidanceStartPage)\r\n *\r\n * Startsida för en specifik vägledning\r\n */\r\nconst NVseGuidanceStartPage: React.FC<NVseGuidanceStartPageModel> = ({\r\n\tmainImage,\r\n\tdecal,\r\n\theading,\r\n\tlastReviewed,\r\n\tshowReviewDate,\r\n\tpreamble,\r\n\tthemeTop,\r\n\ttextAsModel,\r\n\tchapterList,\r\n\tbottomItems,\r\n\trelatedEnvironmentGoalsLabel,\r\n\trelatedEnvironmentGoals,\r\n\trelatedSustainabilityGoalsLabel,\r\n\trelatedSustainabilityGoals,\r\n\theadingLevel = 2,\r\n\tepi,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst [isMenuOpen, setIsMenuOpen] = useState(false);\r\n\tconst [sections, setSections] = useState<string[]>([]);\r\n\tconst [menuIndex, setMenuIndex] = useState<NavigationItem[]>([]);\r\n\tconst localization = useSelector(selectLocalization);\r\n\r\n\tconst findOnPageLabel = translate(\r\n\t\t'/frontend/pages/findonpage',\r\n\t\t'Find on page',\r\n\t\tlocalization\r\n\t);\r\n\r\n\tconst ref = React.createRef<any>();\r\n\r\n\tuseEffect(() => {\r\n\t\tconst expanderModels = getBlockBaseSections([\r\n\t\t\t...chapterList.items,\r\n\t\t\t...bottomItems,\r\n\t\t]);\r\n\t\tconst sectionStrings = expanderModels.map((item) => item.onPageMenuHeading);\r\n\r\n\t\tif (sectionStrings.length > 0) {\r\n\t\t\tconst menuIndexRoot = getBlockBaseMenuItems(sectionStrings);\r\n\t\t\tsetMenuIndex(menuIndexRoot);\r\n\t\t\tsetSections(sectionStrings);\r\n\t\t} else {\r\n\t\t\tsetMenuIndex([]);\r\n\t\t\tsetSections([]);\r\n\t\t}\r\n\t}, [bottomItems, chapterList]);\r\n\r\n\tconst onCloseMenuEvent = (userClosed: boolean) => {\r\n\t\tsetIsMenuOpen(false);\r\n\t\tif (userClosed && ref.current) {\r\n\t\t\tref.current.focus();\r\n\t\t}\r\n\t};\r\n\r\n\tconst onOpenMenu = () => {\r\n\t\tsetIsMenuOpen(true);\r\n\t};\r\n\r\n\tlet lastBlockType = BlockType.Element;\r\n\tlet blockTypeBefore_chapterList: BlockType = lastBlockType;\r\n\tlet blockTypeBefore_bottomItems: BlockType = lastBlockType;\r\n\r\n\tif (textAsModel && textAsModel.fragments.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\ttextAsModel.fragments,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_chapterList = lastBlockType;\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tif (chapterList.items && chapterList.items.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\tchapterList.items,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tif (bottomItems.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\tbottomItems,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t}\r\n\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<PageTopBanner\r\n\t\t\t\tmainImage={mainImage}\r\n\t\t\t\tthemeTop={themeTop}\r\n\t\t\t\tdecal={decal}\r\n\t\t\t\theadingLevel={1}\r\n\t\t\t\theading={heading}\r\n\t\t\t\tsubheading=\"\"\r\n\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\tmainImage_htmlAttributes={_properties?.mainImage}\r\n\t\t\t></PageTopBanner>\r\n\r\n\t\t\t{sections.length > 1 && (\r\n\t\t\t\t<PageOverviewBanner>\r\n\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t<PageOverviewContent>\r\n\t\t\t\t\t\t\t<nav>\r\n\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\t\t\t\tonClick={onOpenMenu}\r\n\t\t\t\t\t\t\t\t\tvariant={ButtonVariant.Tertiary}\r\n\t\t\t\t\t\t\t\t\taria-expanded={isMenuOpen}\r\n\t\t\t\t\t\t\t\t\taria-haspopup=\"dialog\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{findOnPageLabel}\r\n\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t</nav>\r\n\t\t\t\t\t\t</PageOverviewContent>\r\n\t\t\t\t\t</Grid>\r\n\t\t\t\t</PageOverviewBanner>\r\n\t\t\t)}\r\n\r\n\t\t\t<Space top={themeContext.spacing.getElement()} bottom={spaceAfterLast}>\r\n\t\t\t\t<OnPageNavigationContent\r\n\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\theading={null}\r\n\t\t\t\t\theading_htmlAttributes={null}\r\n\t\t\t\t\tlastReviewed={lastReviewed}\r\n\t\t\t\t\tshowReviewDate={showReviewDate}\r\n\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t\ttextAsModel={textAsModel}\r\n\t\t\t\t\ttextAsModel_htmlAttributes={_properties?.mainBody}\r\n\t\t\t\t\tsections={sections}\r\n\t\t\t\t\trelatedEnvironmentGoalsLabel={relatedEnvironmentGoalsLabel}\r\n\t\t\t\t\trelatedEnvironmentGoals={relatedEnvironmentGoals}\r\n\t\t\t\t\trelatedSustainabilityGoalsLabel={relatedSustainabilityGoalsLabel}\r\n\t\t\t\t\trelatedSustainabilityGoals={relatedSustainabilityGoals}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t></OnPageNavigationContent>\r\n\r\n\t\t\t\t<EpiFragments\r\n\t\t\t\t\tpreviousBlockType={blockTypeBefore_chapterList}\r\n\t\t\t\t\tepi={epi}\r\n\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\tfragments={chapterList.items}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t<EpiFragments\r\n\t\t\t\t\tpreviousBlockType={blockTypeBefore_bottomItems}\r\n\t\t\t\t\tepi={epi}\r\n\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\tfragments={bottomItems as FragmentModelTypes[]}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t/>\r\n\t\t\t</Space>\r\n\r\n\t\t\t{isMenuOpen && (\r\n\t\t\t\t<MegaMenu\r\n\t\t\t\t\titems={menuIndex}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\tonClose={onCloseMenuEvent}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default NVseGuidanceStartPage;\r\n","import React, { useContext, useEffect, useState } from 'react';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport {\r\n\tFragmentModelTypes,\r\n\tImageFragmentModel,\r\n\tStandardPuffModel,\r\n} from 'types/fragments';\r\nimport { NVseNavigationPageModel } from './NVseNavigationPage.model';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport { TopImage } from 'pages/NVseArticlePage/NVseArticlePage.styles';\r\nimport { ViewType } from 'types/enums';\r\nimport {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { formatText } from 'utils/helper-utils';\r\nimport { GrantsHeader } from 'components/Panels/GrantsHeader';\r\nimport { SubHeader } from 'components/Panels/SubHeader';\r\nimport { FragmentPuffList } from 'components/Panels/FragmentPuffList';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { useImageTitle } from 'hooks/useImageTitle';\r\nimport EditableField from 'components/EditableField/EditableField';\r\n\r\n// Move to shared types\r\nexport type puffNavigationListItem = {\r\n\theading: string;\r\n\tpreamble: string;\r\n\turl: string;\r\n\timage: ImageFragmentModel;\r\n};\r\n\r\n// Move to shared types\r\nexport type puffNavigationList = {\r\n\titems: puffNavigationListItem[];\r\n};\r\n\r\n/**\r\n * # Navigeringssida\r\n * Modeltype:<code>NVseNavigationPage</code>\r\n *\r\n * [API contract](https://consid.atlassian.net/wiki/spaces/NNN/pages/1631977500/NVseNavigationPage)\r\n *\r\n * Webbplatsens navigeringssida. Översiktssida där man pÃ¥ ett enkelt sätt kan länka vidare till andra sidor.\r\n */\r\nconst NVseNavigationPage: React.FC<NVseNavigationPageModel> = ({\r\n\ttextAsModel,\r\n\theading,\r\n\tpreamble,\r\n\tpuffNavigationList,\r\n\tdisplayedNavigationsText,\r\n\tpuffNavigationListSizeOnLoad,\r\n\tpuffNavigationListViewOnLoad,\r\n\tbottomItems,\r\n\tmainImage,\r\n\tepi,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\t// TODO: hardcoded text\r\n\tconst showMoreLabel = 'Visa fler';\r\n\r\n\tconst [fixedItems, setFixedItems] = useState<FragmentModelTypes[]>([]);\r\n\tconst [selectedViewType, setSelectedViewType] = useState<ViewType>(\r\n\t\tViewType.Card\r\n\t);\r\n\tconst title = useImageTitle(\r\n\t\tmainImage?.photographer,\r\n\t\tmainImage?.agency,\r\n\t\tmainImage?.illustrator\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\tswitch (puffNavigationListViewOnLoad) {\r\n\t\t\tdefault:\r\n\t\t\tcase 'card':\r\n\t\t\t\tsetSelectedViewType(ViewType.Card);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'list':\r\n\t\t\t\tsetSelectedViewType(ViewType.List);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'compact':\r\n\t\t\t\tsetSelectedViewType(ViewType.CompactList);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}, [puffNavigationListViewOnLoad]);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst tempItems = puffNavigationList.items.map((item) => {\r\n\t\t\treturn {\r\n\t\t\t\tmodelType: 'StandardPuffModel',\r\n\t\t\t\theading: item.heading,\r\n\t\t\t\tpreamble: item.preamble,\r\n\t\t\t\turl: item.url,\r\n\t\t\t\timage: item.image,\r\n\t\t\t} as StandardPuffModel;\r\n\t\t});\r\n\r\n\t\tsetFixedItems(tempItems);\r\n\t}, [puffNavigationList, puffNavigationList.items]);\r\n\r\n\tconst formattedHeader =\r\n\t\tdisplayedNavigationsText != null\r\n\t\t\t? formatText(\r\n\t\t\t\t\tdisplayedNavigationsText,\r\n\t\t\t\t\tfixedItems.length,\r\n\t\t\t\t\tfixedItems.length\r\n\t\t\t )\r\n\t\t\t: null;\r\n\r\n\tlet lastBlockType = BlockType.Element;\r\n\tlet blockTypeBefore_fixedItems: BlockType = lastBlockType;\r\n\tlet blockTypeBefore_bottomItems: BlockType = lastBlockType;\r\n\r\n\tif (textAsModel.fragments.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\tfixedItems,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_fixedItems = lastBlockType;\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\tif (fixedItems.length > 0) {\r\n\t\tlastBlockType = BlockType.Element;\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tconst spaceBefore_fixedItems = getSpaceToAddBefore(\r\n\t\tblockTypeBefore_fixedItems,\r\n\t\tBlockType.Element,\r\n\t\tthemeContext\r\n\t);\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<EditableField opeProperty={_properties?.mainImage}>\r\n\t\t\t\t{mainImage && (\r\n\t\t\t\t\t<TopImage\r\n\t\t\t\t\t\talt={mainImage.alt}\r\n\t\t\t\t\t\tsrc={mainImage.src}\r\n\t\t\t\t\t\tsrcSet={mainImage.srcSet}\r\n\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\t\t\t</EditableField>\r\n\r\n\t\t\t<Space top={themeContext.spacing.getElement()} bottom={spaceAfterLast}>\r\n\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t<GrantsHeader\r\n\t\t\t\t\t\tcolumns={8}\r\n\t\t\t\t\t\theadingLevel={1}\r\n\t\t\t\t\t\theading={heading}\r\n\t\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t\t></GrantsHeader>\r\n\t\t\t\t</Grid>\r\n\r\n\t\t\t\t<EditableField opeProperty={_properties?.mainBody}>\r\n\t\t\t\t\t{textAsModel && textAsModel.fragments.length > 0 && (\r\n\t\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\t\tpreviousBlockType={BlockType.Element}\r\n\t\t\t\t\t\t\tepi={epi}\r\n\t\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\t\tfragments={textAsModel.fragments}\r\n\t\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</EditableField>\r\n\r\n\t\t\t\t<Space top={spaceBefore_fixedItems}>\r\n\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t{formattedHeader && (\r\n\t\t\t\t\t\t\t<SubHeader\r\n\t\t\t\t\t\t\t\tzeroBottomMargin={true}\r\n\t\t\t\t\t\t\t\theading={formattedHeader}\r\n\t\t\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\t\t></SubHeader>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{fixedItems && (\r\n\t\t\t\t\t\t\t<Space top={themeContext.spacing.space3}>\r\n\t\t\t\t\t\t\t\t<FragmentPuffList\r\n\t\t\t\t\t\t\t\t\tinitialMaxCount={\r\n\t\t\t\t\t\t\t\t\t\tpuffNavigationListSizeOnLoad\r\n\t\t\t\t\t\t\t\t\t\t\t? puffNavigationListSizeOnLoad\r\n\t\t\t\t\t\t\t\t\t\t\t: 3\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\toptions={{\r\n\t\t\t\t\t\t\t\t\t\tinsideCell: false,\r\n\t\t\t\t\t\t\t\t\t\tinsideInnerGrid: false,\r\n\t\t\t\t\t\t\t\t\t\tinsideGrid: true,\r\n\t\t\t\t\t\t\t\t\t\theadingLevel: 2, // TODO:\r\n\t\t\t\t\t\t\t\t\t\tview: selectedViewType,\r\n\t\t\t\t\t\t\t\t\t\tthemeContext: themeContext,\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tshowMoreLabel={showMoreLabel}\r\n\t\t\t\t\t\t\t\t\titems={fixedItems}\r\n\t\t\t\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t\t\t\t></FragmentPuffList>\r\n\t\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Grid>\r\n\t\t\t\t</Space>\r\n\r\n\t\t\t\t<EpiFragments\r\n\t\t\t\t\tpreviousBlockType={blockTypeBefore_bottomItems}\r\n\t\t\t\t\tepi={epi}\r\n\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\tfragments={bottomItems as FragmentModelTypes[]}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t/>\r\n\t\t\t</Space>\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default NVseNavigationPage;\r\n","import React, { useContext, useEffect, useState } from 'react';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport { FragmentModelTypes, StandardPuffModel } from 'types/fragments';\r\nimport { NVseArticlePageModel } from './NVseArticlePage.model';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport { TopImage } from './NVseArticlePage.styles';\r\nimport BannerLinks from 'components/Banners/BannerLinks';\r\nimport {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { ViewType } from 'types/enums';\r\nimport { GrantsHeader } from 'components/Panels/GrantsHeader';\r\nimport { FragmentPuffList } from 'components/Panels/FragmentPuffList';\r\nimport { ThemeContext } from 'styled-components';\r\n\r\nimport Button from 'components/Button';\r\nimport {\r\n\tPageOverviewBanner,\r\n\tPageOverviewContent,\r\n} from 'pages/NVseThemePage/NVseThemePage.styles';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport {\r\n\tgetBlockBaseMenuItems,\r\n\tgetBlockBaseSections,\r\n\tOnPageNavigationContent,\r\n} from 'components/Panels/OnPageNavigationContent';\r\nimport { NavigationItem } from 'types/epi';\r\nimport MegaMenu from 'components/MegaMenu';\r\nimport { selectLocalization } from 'store/modules/model';\r\nimport { useSelector } from 'react-redux';\r\nimport { useImageTitle } from 'hooks/useImageTitle';\r\nimport { translate } from 'utils/helper-utils';\r\nimport EditableField from 'components/EditableField/EditableField';\r\n\r\n/**\r\n * # Artikelsida\r\n * Modeltype:<code>NVseArticlePage</code>\r\n *\r\n * [API contract](https://consid.atlassian.net/wiki/spaces/NNN/pages/1632272427/NVseArticlePage)\r\n *\r\n * Webbplatsens artikelsida. Den mest använda sidtypen med möjlighet till rubrik, ingress, text och innehÃ¥llsyta.\r\n */\r\nconst NVseArticlePage: React.FC<NVseArticlePageModel> = ({\r\n\ttextAsModel,\r\n\theading,\r\n\tlastReviewed,\r\n\tshowReviewDate,\r\n\tpreamble,\r\n\tpuffNavigationList,\r\n\tbottomItems,\r\n\tsiblingsList,\r\n\tmainImage,\r\n\tepi,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\t// TODO: hardcoded text\r\n\tconst showMoreLabel = 'Visa fler';\r\n\r\n\tconst [fixedItems, setFixedItems] = useState<FragmentModelTypes[]>([]);\r\n\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst [isMenuOpen, setIsMenuOpen] = useState(false);\r\n\tconst [sections, setSections] = useState<string[]>([]);\r\n\tconst [menuIndex, setMenuIndex] = useState<NavigationItem[]>([]);\r\n\tconst localization = useSelector(selectLocalization);\r\n\tconst findOnPageLabel = translate(\r\n\t\t'/frontend/pages/findonpage',\r\n\t\t'Find on page',\r\n\t\tlocalization\r\n\t);\r\n\tconst title = useImageTitle(\r\n\t\tmainImage?.photographer,\r\n\t\tmainImage?.agency,\r\n\t\tmainImage?.illustrator\r\n\t);\r\n\r\n\tconst ref = React.createRef<any>();\r\n\r\n\tconst onOpenMenu = () => {\r\n\t\tsetIsMenuOpen(true);\r\n\t};\r\n\r\n\tconst onCloseMenuEvent = (userClosed: boolean) => {\r\n\t\tsetIsMenuOpen(false);\r\n\t\tif (userClosed && ref.current) {\r\n\t\t\tref.current.focus();\r\n\t\t}\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tconst expanderModels = getBlockBaseSections([...bottomItems]);\r\n\t\tconst sectionStrings = expanderModels.map((item) => item.onPageMenuHeading);\r\n\r\n\t\tif (sectionStrings.length > 0) {\r\n\t\t\tconst menuIndexRoot = getBlockBaseMenuItems(sectionStrings);\r\n\t\t\tsetMenuIndex(menuIndexRoot);\r\n\t\t\tsetSections(sectionStrings);\r\n\t\t} else {\r\n\t\t\tsetMenuIndex([]);\r\n\t\t\tsetSections([]);\r\n\t\t}\r\n\t}, [bottomItems]);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst tempItems = puffNavigationList.items.map((item) => {\r\n\t\t\treturn {\r\n\t\t\t\tmodelType: 'StandardPuffModel',\r\n\t\t\t\theading: item.heading,\r\n\t\t\t\tpreamble: item.preamble,\r\n\t\t\t\turl: item.url,\r\n\t\t\t\timage: item.image,\r\n\t\t\t} as StandardPuffModel;\r\n\t\t});\r\n\r\n\t\tsetFixedItems(tempItems);\r\n\t}, [puffNavigationList, puffNavigationList.items]);\r\n\r\n\t// figure out the last block type, so we know the bottom padding (space between last element and footer)\r\n\tlet lastBlockType = BlockType.Element;\r\n\tlet blockTypeBefore_bottomItems: BlockType = lastBlockType;\r\n\tlet blockTypeBefore_fixedItems: BlockType = lastBlockType;\r\n\tlet blockTypeBefore_siblingsList: BlockType = lastBlockType;\r\n\r\n\tif (textAsModel.fragments.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\ttextAsModel.fragments,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t\tblockTypeBefore_fixedItems = lastBlockType;\r\n\t\tblockTypeBefore_siblingsList = lastBlockType;\r\n\t}\r\n\tif (fixedItems.length > 0) {\r\n\t\tlastBlockType = BlockType.Element;\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t\tblockTypeBefore_siblingsList = lastBlockType;\r\n\t}\r\n\tif (bottomItems.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\tbottomItems,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_siblingsList = lastBlockType;\r\n\t}\r\n\tif (siblingsList.items.length > 0) {\r\n\t\tlastBlockType = BlockType.SectionBanner;\r\n\t}\r\n\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\tconst spaceBefore_fixedItems = getSpaceToAddBefore(\r\n\t\tblockTypeBefore_fixedItems,\r\n\t\tBlockType.Element,\r\n\t\tthemeContext\r\n\t);\r\n\tconst spaceBefore_siblingsList = getSpaceToAddBefore(\r\n\t\tblockTypeBefore_siblingsList,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<EditableField opeProperty={_properties?.mainImage}>\r\n\t\t\t\t{mainImage && (\r\n\t\t\t\t\t<TopImage\r\n\t\t\t\t\t\talt={mainImage.alt}\r\n\t\t\t\t\t\tsrc={mainImage.src}\r\n\t\t\t\t\t\tsrcSet={mainImage.srcSet}\r\n\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\t\t\t</EditableField>\r\n\r\n\t\t\t{sections.length > 1 && (\r\n\t\t\t\t<PageOverviewBanner>\r\n\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t<PageOverviewContent>\r\n\t\t\t\t\t\t\t<nav>\r\n\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\t\t\t\tonClick={onOpenMenu}\r\n\t\t\t\t\t\t\t\t\tvariant={ButtonVariant.Tertiary}\r\n\t\t\t\t\t\t\t\t\taria-expanded={isMenuOpen}\r\n\t\t\t\t\t\t\t\t\taria-haspopup=\"dialog\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{findOnPageLabel}\r\n\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t</nav>\r\n\t\t\t\t\t\t</PageOverviewContent>\r\n\t\t\t\t\t</Grid>\r\n\t\t\t\t</PageOverviewBanner>\r\n\t\t\t)}\r\n\r\n\t\t\t<Space top={themeContext.spacing.getElement()} bottom={spaceAfterLast}>\r\n\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t<GrantsHeader\r\n\t\t\t\t\t\tcolumns={8}\r\n\t\t\t\t\t\theadingLevel={1}\r\n\t\t\t\t\t\theading={heading}\r\n\t\t\t\t\t\tlastReviewed={lastReviewed}\r\n\t\t\t\t\t\tshowReviewDate={showReviewDate}\r\n\t\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t\t></GrantsHeader>\r\n\t\t\t\t</Grid>\r\n\r\n\t\t\t\t<EditableField opeProperty={_properties?.mainBody}>\r\n\t\t\t\t\t{textAsModel && textAsModel.fragments.length > 0 && (\r\n\t\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\t\tpreviousBlockType={BlockType.Element}\r\n\t\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\t\tepi={epi}\r\n\t\t\t\t\t\t\tfragments={textAsModel.fragments}\r\n\t\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</EditableField>\r\n\r\n\t\t\t\t{fixedItems.length > 0 && (\r\n\t\t\t\t\t<Space top={spaceBefore_fixedItems}>\r\n\t\t\t\t\t\t<FragmentPuffList\r\n\t\t\t\t\t\t\tinitialMaxCount={6}\r\n\t\t\t\t\t\t\toptions={{\r\n\t\t\t\t\t\t\t\tinsideCell: false,\r\n\t\t\t\t\t\t\t\tinsideInnerGrid: false,\r\n\t\t\t\t\t\t\t\tinsideGrid: false,\r\n\t\t\t\t\t\t\t\theadingLevel: 2, // TODO:\r\n\t\t\t\t\t\t\t\tview: ViewType.Card,\r\n\t\t\t\t\t\t\t\tthemeContext: themeContext,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tshowMoreLabel={showMoreLabel}\r\n\t\t\t\t\t\t\titems={fixedItems}\r\n\t\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t\t></FragmentPuffList>\r\n\t\t\t\t\t</Space>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t<EpiFragments\r\n\t\t\t\t\tpreviousBlockType={blockTypeBefore_bottomItems}\r\n\t\t\t\t\tepi={epi}\r\n\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\tfragments={bottomItems as FragmentModelTypes[]}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t{siblingsList.items?.length > 0 && (\r\n\t\t\t\t\t<Space top={spaceBefore_siblingsList}>\r\n\t\t\t\t\t\t<BannerLinks\r\n\t\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\t\theading={siblingsList.heading}\r\n\t\t\t\t\t\t\tlinks={siblingsList.items}\r\n\t\t\t\t\t\t></BannerLinks>\r\n\t\t\t\t\t</Space>\r\n\t\t\t\t)}\r\n\t\t\t</Space>\r\n\r\n\t\t\t{isMenuOpen && (\r\n\t\t\t\t<MegaMenu\r\n\t\t\t\t\titems={menuIndex}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\tonClose={onCloseMenuEvent}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default NVseArticlePage;\r\n","/**\r\n * StandardPage\r\n */\r\n\r\nimport React from 'react';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport { FragmentModelTypes } from 'types/fragments';\r\nimport { EpiEvent } from 'types/epi';\r\nimport { Cell, Grid } from 'components/Boilerplate/Grid';\r\nimport Typography from 'components/Typography';\r\n\r\ntype TextFragments = {\r\n\tmodelType: string;\r\n\tfragments: FragmentModelTypes[];\r\n};\r\n\r\ninterface Props {\r\n\t/** Description of this property */\r\n\theading: string;\r\n\tpreamble: string;\r\n\ttext: TextFragments;\r\n\tepi: EpiEvent;\r\n\tdisableCustomHeadingLogic: boolean;\r\n}\r\n\r\n/** Main description for this component. */\r\nconst StandardPage: React.FC<Props> = ({ heading, preamble, text, epi, disableCustomHeadingLogic }) => {\r\n\treturn (\r\n\t\t<Grid padding={false} inner={false} paddingLeft={false}>\r\n\t\t\t<Cell>\r\n\t\t\t\t<Typography as=\"h1\" prop=\"heading\">\r\n\t\t\t\t\t{heading}\r\n\t\t\t\t</Typography>\r\n\t\t\t</Cell>\r\n\r\n\t\t\t<Cell>\r\n\t\t\t\t<Typography as=\"preamble\" prop=\"preamble\">\r\n\t\t\t\t\t{preamble}\r\n\t\t\t\t</Typography>\r\n\r\n\t\t\t\t<EpiFragments\r\n\t\t\t\t\tepi={epi}\r\n\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\tinsideCell={true}\r\n\t\t\t\t\tinsideInnerGrid={true}\r\n\t\t\t\t\tinsideGrid={true}\r\n\t\t\t\t\tfragments={text?.fragments}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t/>\t\t\t\t\t\r\n\t\t\t</Cell>\r\n\t\t</Grid>\r\n\t);\r\n};\r\n\r\nexport default StandardPage;\r\n","import React, { useContext } from 'react';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport { NVseGuidanceCategoryPageModel } from './NVseGuidanceCategoryPage.model';\r\nimport {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { ViewType } from 'types/enums';\r\nimport { GrantsHeader } from 'components/Panels/GrantsHeader';\r\nimport { FragmentPuffList } from 'components/Panels/FragmentPuffList';\r\nimport { ThemeContext } from 'styled-components';\r\nimport EditableField from 'components/EditableField/EditableField';\r\n\r\n/**\r\n * # Kategorisida för vägledningar\r\n * Modeltype:<code>NVseGuidanceCategoryPage</code>\r\n *\r\n * [API contract](https://consid.atlassian.net/wiki/spaces/NNN/pages/1819672636/NVseGuidanceCategoryPage)\r\n *\r\n * Sida för en unik vägledningskategori\r\n */\r\nconst NVseGuidanceCategoryPage: React.FC<NVseGuidanceCategoryPageModel> = ({\r\n\theading,\r\n\tpreamble,\r\n\ttextAsModel,\r\n\tguidanceItemsHeading,\r\n\tallGuidanceItemsText,\r\n\tguidanceItems,\r\n\tepi,\r\n\tbottomItems,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n\tinitialMaxCount,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\t// figure out the last block type, so we know the bottom padding (space between last element and footer)\r\n\tlet lastBlockType = BlockType.Element;\r\n\tlet blockTypeBefore_guidanceItems: BlockType = lastBlockType;\r\n\tlet blockTypeBefore_textAsModel: BlockType = lastBlockType;\r\n\tlet blockTypeBefore_bottomItems: BlockType = lastBlockType;\r\n\r\n\tif (guidanceItems.length > 0) {\r\n\t\tlastBlockType = BlockType.Element;\r\n\t\tblockTypeBefore_textAsModel = lastBlockType;\r\n\t}\r\n\r\n\tif (textAsModel && textAsModel.fragments.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\ttextAsModel.fragments,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tif (bottomItems.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\tbottomItems,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t}\r\n\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\tconst spaceBefore_guidanceItems = getSpaceToAddBefore(\r\n\t\tblockTypeBefore_guidanceItems,\r\n\t\tBlockType.Element,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\treturn (\r\n\t\t<Space\r\n\t\t\ttop={themeContext.spacing.getPageTopPadding()}\r\n\t\t\tbottom={spaceAfterLast}\r\n\t\t>\r\n\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t<GrantsHeader\r\n\t\t\t\t\tcolumns={8}\r\n\t\t\t\t\theadingLevel={1}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t></GrantsHeader>\r\n\t\t\t</Grid>\r\n\r\n\t\t\t{guidanceItems.length > 0 && (\r\n\t\t\t\t<Space top={spaceBefore_guidanceItems}>\r\n\t\t\t\t\t<FragmentPuffList\r\n\t\t\t\t\t\tinitialMaxCount={initialMaxCount}\r\n\t\t\t\t\t\theading={guidanceItemsHeading}\r\n\t\t\t\t\t\tshowMoreLabel={allGuidanceItemsText}\r\n\t\t\t\t\t\titems={guidanceItems}\r\n\t\t\t\t\t\toptions={{\r\n\t\t\t\t\t\t\tinsideCell: false,\r\n\t\t\t\t\t\t\tinsideInnerGrid: false,\r\n\t\t\t\t\t\t\tinsideGrid: false,\r\n\t\t\t\t\t\t\theadingLevel: 2, // TODO\r\n\t\t\t\t\t\t\tview: ViewType.Card,\r\n\t\t\t\t\t\t\tthemeContext: themeContext,\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t></FragmentPuffList>\r\n\t\t\t\t</Space>\r\n\t\t\t)}\r\n\r\n\t\t\t<EditableField opeProperty={_properties?.mainBody}>\r\n\t\t\t\t{textAsModel && textAsModel.fragments.length > 0 && (\r\n\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\tpreviousBlockType={blockTypeBefore_textAsModel}\r\n\t\t\t\t\t\tepi={epi}\r\n\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\tfragments={textAsModel?.fragments}\r\n\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\t\t\t</EditableField>\r\n\r\n\t\t\t<EpiFragments\r\n\t\t\t\tpreviousBlockType={blockTypeBefore_bottomItems}\r\n\t\t\t\tepi={epi}\r\n\t\t\t\theadingLevel={2}\r\n\t\t\t\tfragments={bottomItems}\r\n\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t/>\r\n\t\t</Space>\r\n\t);\r\n};\r\n\r\nexport default NVseGuidanceCategoryPage;\r\n","import EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport Button from 'components/Button';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport MegaMenu from 'components/MegaMenu';\r\nimport PageTopBanner from 'components/PageTopBanner';\r\nimport {\r\n\tgetBlockBaseMenuItems,\r\n\tgetBlockBaseSections,\r\n\tOnPageNavigationContent,\r\n} from 'components/Panels/OnPageNavigationContent';\r\nimport {\r\n\tPageOverviewBanner,\r\n\tPageOverviewContent,\r\n} from 'pages/NVseThemePage/NVseThemePage.styles';\r\nimport React, { useContext, useEffect, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectLocalization } from 'store/modules/model';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { NavigationItem } from 'types/epi';\r\nimport { FragmentModelTypes } from 'types/fragments';\r\nimport { translate } from 'utils/helper-utils';\r\nimport { NVseGuidanceChapterPageModel } from './NVseGuidanceChapterPage.model';\r\n\r\n/**\r\n * # Undersida till vägledningssida\r\n * Modeltype:<code>NVseGuidanceChapterPage</code>\r\n *\r\n * [API contract](https://consid.atlassian.net/wiki/spaces/NNN/pages/1649770511/NVseGuidanceChapterPage)\r\n *\r\n * Visas som en expander pÃ¥ den sida som den ligger under\r\n */\r\nconst NVseGuidanceChapterPage: React.FC<NVseGuidanceChapterPageModel> = ({\r\n\tmainImage,\r\n\tdecal,\r\n\theading,\r\n\tlastReviewed,\r\n\tshowReviewDate,\r\n\tthemeTop,\r\n\tparentHeading,\r\n\tpreamble,\r\n\ttextAsModel,\r\n\tbottomItems,\r\n\tepi,\r\n\tchapterList,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst [isMenuOpen, setIsMenuOpen] = useState(false);\r\n\tconst [sections, setSections] = useState<string[]>([]);\r\n\tconst [menuIndex, setMenuIndex] = useState<NavigationItem[]>([]);\r\n\tconst localization = useSelector(selectLocalization);\r\n\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst findOnPageLabel = translate(\r\n\t\t'/frontend/pages/findonpage',\r\n\t\t'Find on page',\r\n\t\tlocalization\r\n\t);\r\n\r\n\tconst ref = React.createRef<any>();\r\n\r\n\tuseEffect(() => {\r\n\t\tconst expanderModels = getBlockBaseSections([\r\n\t\t\t...chapterList.items,\r\n\t\t\t...bottomItems,\r\n\t\t]);\r\n\t\tconst sectionStrings = expanderModels.map((item) => item.onPageMenuHeading);\r\n\r\n\t\tif (sectionStrings.length > 0) {\r\n\t\t\tconst menuIndexRoot = getBlockBaseMenuItems(sectionStrings);\r\n\t\t\tsetMenuIndex(menuIndexRoot);\r\n\t\t\tsetSections(sectionStrings);\r\n\t\t} else {\r\n\t\t\tsetMenuIndex([]);\r\n\t\t\tsetSections([]);\r\n\t\t}\r\n\t}, [bottomItems, chapterList]);\r\n\r\n\tconst onCloseMenuEvent = (userClosed: boolean) => {\r\n\t\tsetIsMenuOpen(false);\r\n\t\tif (userClosed && ref.current) {\r\n\t\t\tref.current.focus();\r\n\t\t}\r\n\t};\r\n\r\n\tconst onOpenMenu = () => {\r\n\t\tsetIsMenuOpen(true);\r\n\t};\r\n\r\n\tlet lastBlockType = BlockType.Element;\r\n\tlet blockTypeBefore_chapterList: BlockType = lastBlockType;\r\n\tlet blockTypeBefore_bottomItems: BlockType = lastBlockType;\r\n\r\n\tif (textAsModel && textAsModel.fragments.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\ttextAsModel.fragments,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_chapterList = lastBlockType;\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tif (chapterList && chapterList.items.length > 0) {\r\n\t\tlastBlockType = BlockType.Element;\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<PageTopBanner\r\n\t\t\t\tmainImage={mainImage}\r\n\t\t\t\tthemeTop={themeTop}\r\n\t\t\t\tdecal={decal}\r\n\t\t\t\tsubheading=\"\"\r\n\t\t\t\theadingLevel={1}\r\n\t\t\t\theading={parentHeading}\r\n\t\t\t\theading_htmlAttributes={null}\r\n\t\t\t\tmainImage_htmlAttributes={_properties?.mainImage}\r\n\t\t\t></PageTopBanner>\r\n\r\n\t\t\t{sections.length > 1 && (\r\n\t\t\t\t<PageOverviewBanner>\r\n\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t<PageOverviewContent>\r\n\t\t\t\t\t\t\t<nav>\r\n\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\t\t\t\tonClick={onOpenMenu}\r\n\t\t\t\t\t\t\t\t\taria-expanded={isMenuOpen}\r\n\t\t\t\t\t\t\t\t\taria-haspopup=\"dialog\"\r\n\t\t\t\t\t\t\t\t\tvariant={ButtonVariant.Tertiary}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{findOnPageLabel}\r\n\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t</nav>\r\n\t\t\t\t\t\t</PageOverviewContent>\r\n\t\t\t\t\t</Grid>\r\n\t\t\t\t</PageOverviewBanner>\r\n\t\t\t)}\r\n\r\n\t\t\t<Space top={themeContext.spacing.getElement()} bottom={spaceAfterLast}>\r\n\t\t\t\t<OnPageNavigationContent\r\n\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\tlastReviewed={lastReviewed}\r\n\t\t\t\t\tshowReviewDate={showReviewDate}\r\n\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t\ttextAsModel={textAsModel}\r\n\t\t\t\t\ttextAsModel_htmlAttributes={_properties?.mainBody}\r\n\t\t\t\t\tsections={sections}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t></OnPageNavigationContent>\r\n\r\n\t\t\t\t{chapterList && (\r\n\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\tpreviousBlockType={blockTypeBefore_chapterList}\r\n\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\tepi={epi}\r\n\t\t\t\t\t\tfragments={chapterList.items}\r\n\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t<EpiFragments\r\n\t\t\t\t\tpreviousBlockType={blockTypeBefore_bottomItems}\r\n\t\t\t\t\tepi={epi}\r\n\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\tfragments={bottomItems as FragmentModelTypes[]}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t/>\r\n\t\t\t</Space>\r\n\r\n\t\t\t{isMenuOpen && (\r\n\t\t\t\t<MegaMenu\r\n\t\t\t\t\titems={menuIndex}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\tonClose={onCloseMenuEvent}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default NVseGuidanceChapterPage;\r\n","/**\r\n * NVseSearchPage - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\n\r\nexport const Div = styled.div``;\r\n\r\nexport const SearchInput = styled.div`\r\n\tjustify-content: space-between;\r\n\tdisplay: flex;\r\n\r\n\tinput {\r\n\t\t${(props) => props.theme.typography.style8.getStyle()};\r\n\t\tflex: 1;\r\n\t\tvertical-align: top;\r\n\t\tborder-radius: 8px;\r\n\t\tborder: 2px solid #afafaf;\r\n\t\tbackground-color: ${(props) => props.theme.colors.white};\r\n\t\tpadding-left: ${(props) => props.theme.spacing.space2}rem;\r\n\t\tpadding-right: ${(props) => props.theme.spacing.space2}rem;\r\n\t\tpadding-top: 7px;\r\n\t\tpadding-bottom: 9px;\r\n\t\tmargin-right: ${(props) => props.theme.spacing.space2}rem;\r\n\t}\r\n`;\r\n\r\nexport const SearchRelevanceContainer = styled.div`\r\n\tflex-grow: 1;\r\n\tjustify-content: flex-end;\r\n\tdisplay: flex;\r\n\r\n\t@media (max-width: 768px) {\r\n\t\tjustify-content: flex-start;\r\n\t\tmargin-top: 1rem;\r\n\t}\r\n`;\r\n\r\nexport const SearchFilterContainer = styled.div`\r\n\tflex-grow: 1;\r\n\tjustify-content: flex-end;\r\n\tdisplay: flex;\r\n\r\n\t@media (max-width: 768px) {\r\n\t\tjustify-content: flex-start;\r\n\t}\r\n`;\r\n","import { EpiFormsProps } from 'components/EpiForms/EpiForms';\r\nimport { LinkExtendedType, LinkType, PuffTheme } from 'pages/sharedModelTypes';\r\nimport { PuffWithImageModel } from './blocks';\r\nimport { ViewType } from './enums';\r\n\r\nexport enum PageLayoutType {\r\n\tStandard = 'standard',\r\n\tMicro = 'micro',\r\n}\r\n\r\nexport type FragmentTypes =\r\n\t| 'Html'\r\n\t| 'FormContainer'\r\n\t| 'HeadingFragment'\r\n\t| 'LogoBannerModel'\r\n\t| 'NumericBannerBlockModel'\r\n\t| 'RawFragment'\r\n\t| 'ListFragment'\r\n\t| 'Image'\r\n\t| 'Video'\r\n\t| 'BannerModel'\r\n\t| 'HeroBannerModel'\r\n\t| 'DashboardBlockModel'\r\n\t| 'CollapsibleBlockModel'\r\n\t| 'WidgetNumericBlockModel'\r\n\t| 'PuffWithLargeImage'\r\n\t| 'ContentBlockModel'\r\n\t| 'ExpanderTabModel'\r\n\t| 'YouTubeModel'\r\n\t| 'FaqModel'\r\n\t| 'MediaBanner'\r\n\t| 'LegalBoxModel'\r\n\t| 'PuffContainer'\r\n\t| 'CollapsibleContainerModel'\r\n\t| 'GuidancePuffModel'\r\n\t| 'StatisticsPuffModel'\r\n\t| 'StatisticsBlockModel'\r\n\t| 'StandardPuffModel'\r\n\t| 'SubjectAreaIconPuffModel'\r\n\t| 'GrantPuffModel'\r\n\t| 'EventPuffItemModel'\r\n\t| 'PublicationPuffModel'\r\n\t| 'RegulationPuffModel'\r\n\t| 'TableFragment'\r\n\t| 'ContactModel'\r\n\t| 'HighlightModel';\r\n\r\nexport interface FragmentModel {\r\n\tmodelType: FragmentTypes;\r\n}\r\n\r\nexport interface HeadingFragmentModel extends FragmentModel {\r\n\tlevel: number;\r\n\tid?: string;\r\n\traw: string;\r\n\tisPage?: boolean;\r\n\tdisableCustomHeadingLogic?: boolean;\r\n\tblockLevel: number;\r\n}\r\n\r\nexport interface RawFragmentModel extends FragmentModel {\r\n\traw: string;\r\n}\r\n\r\nexport interface ListFragmentModel extends FragmentModel {\r\n\traw: string;\r\n}\r\n\r\nexport interface ImageFragmentModel extends FragmentModel {\r\n\tsrc: string;\r\n\tsrcSet: string;\r\n\talt: string;\r\n\tcaption: string;\r\n\turl: string;\r\n\tphotographer: string;\r\n\tagency: string;\r\n\tillustrator: string;\r\n\tlink?: LinkType;\r\n\theight?: string;\r\n\twidth?: string;\r\n}\r\n\r\nexport interface CollapsibleBlockModel extends FragmentModel {\r\n\theading: string;\r\n\ttext: string;\r\n\ttextAsModel: FragmentListModel;\r\n\tcolorTheme?: string;\r\n\tshowAsClosed: boolean;\r\n}\r\n\r\nexport interface VideoFragmentModel extends FragmentModel {\r\n\tembedUrl: string;\r\n}\r\n\r\nexport interface TableFragmentModel extends FragmentModel {\r\n\tcaption?: string;\r\n\traw: string;\r\n}\r\n\r\nexport type ImagePuffModel = {\r\n\theading: string | null;\r\n\ttext: string | null;\r\n\timage: ImageFragmentModel;\r\n\tlink: LinkType | null;\r\n};\r\n\r\nexport interface ExpanderTabFragmentModel extends FragmentModel {\r\n\theading: string;\r\n\ttext: string;\r\n\tsidebar: ImagePuffModel;\r\n\ttextAsModel: FragmentListModel;\r\n\tlink: LinkType | null;\r\n\tbottomItems: FragmentModelTypes[];\r\n}\r\n\r\nexport interface FragmentListModel extends FragmentModel {\r\n\tfragments: FragmentModelTypes[];\r\n}\r\n\r\nexport interface YouTubeFragmentModel extends FragmentModel {\r\n\tvideoID: string;\r\n\ttitle: string;\r\n\tallowFullScreen: boolean;\r\n}\r\n\r\nexport type FaqFragmentItemModel = {\r\n\tquestion: string;\r\n\tanswer: string;\r\n};\r\n\r\nexport interface LegalBoxModel extends FragmentModel {\r\n\tname: string;\r\n\tlink: LinkType;\r\n\tsfsNumber: string;\r\n\ttext: string;\r\n\ttextAsModel: FragmentListModel;\r\n\tshowAsClosed: boolean;\r\n\tshowIcon?: boolean;\r\n}\r\n\r\n/**\r\n * BlockBaseModel\r\n * Used for onpage navigation, sidebar navigation\r\n */\r\nexport interface BlockBaseModel extends FragmentModel {\r\n\tonPageMenuHeading: string; // Null om onPageMenuVisibility = false\r\n\tonPageMenuVisibility: boolean;\r\n}\r\n\r\nexport interface PuffContainerModel extends BlockBaseModel {\r\n\theading: string;\r\n\tlink: LinkType;\r\n\tpuffItems: FragmentModelTypes[];\r\n\trenderAsCarousel: boolean;\r\n\tforwardButtonText: string;\r\n\tbackwardButtonText: string;\r\n\tviewType?: ViewType;\r\n}\r\n\r\nexport interface ContentBlockModel extends BlockBaseModel {\r\n\theading: string;\r\n\ttext: string;\r\n\ttextAsModel: FragmentListModel;\r\n\tsidebar: ImagePuffModel;\r\n\tlink: LinkType | null;\r\n\tbottomItems: FragmentModelTypes[];\r\n}\r\n\r\nexport interface BannerFragmentModel extends BlockBaseModel {\r\n\theading: string;\r\n\tlink: LinkType;\r\n\tpreamble: string;\r\n\ttheme: string;\r\n\tlinkList: LinkExtendedType[];\r\n}\r\n\r\nexport interface HeroBannerModel extends BlockBaseModel {\r\n\ttextToRight: boolean;\r\n\timage: ImageFragmentModel;\r\n\theading: string;\r\n\ttext: string;\r\n\tlink: LinkType;\r\n}\r\n\r\nexport interface LogoBannerModel extends BlockBaseModel {\r\n\tlogoItems: ImageFragmentModel[];\r\n\tlink?: LinkType;\r\n\ttheme?: PuffTheme;\r\n}\r\nexport interface NumericBannerBlockModel extends BlockBaseModel {\r\n\ttheme?: PuffTheme;\r\n\ttextToRight?: boolean;\r\n\theading?: string | null;\r\n\tpreamble?: string | null;\r\n\ttext?: string | null;\r\n\tsubtext?: string | null;\r\n\tlink?: LinkType | null;\r\n\ttrend?: number | null;\r\n}\r\nexport interface FaqFragmentModel extends BlockBaseModel {\r\n\theading: string;\r\n\titems: FaqFragmentItemModel[];\r\n}\r\n\r\nexport interface CollapsibleContainerModel extends BlockBaseModel {\r\n\theading: string;\r\n\titems: CollapsibleBlockModel[];\r\n}\r\nexport interface MediaBannerFragmentModel extends BlockBaseModel {\r\n\ttextToRight: boolean;\r\n\ttitle: string;\r\n\theading: string;\r\n\ttext: string | null;\r\n\tmediaContent: YouTubeFragmentModel | ImageFragmentModel;\r\n\tlink: LinkType;\r\n\ttheme: PuffTheme;\r\n}\r\nexport interface DashboardBlockModel extends BlockBaseModel {\r\n\ttheme: string;\r\n\titems: FragmentModelTypes[];\r\n}\r\nexport interface StatisticsBlockModel extends BlockBaseModel {\r\n\theading: string;\r\n\tlink: LinkType;\r\n\thighChartsOptions: string;\r\n\tuseShortDate: boolean;\r\n\tclassificationList: string[];\r\n}\r\n\r\nexport interface GrantPuffModel extends FragmentModel {\r\n\ttargetGroupIds: number[];\r\n\tstatusId: number;\r\n\tstatusText: string | null;\r\n\tstatusAlert: boolean;\r\n\tapplicationEndDate: string | null;\r\n\tisPrioritized: boolean;\r\n\tdecal: string | null;\r\n\theading: string;\r\n\tlink: LinkType;\r\n\timage: ImageFragmentModel | null;\r\n}\r\n\r\nexport interface PublicationPuffModel extends FragmentModel {\r\n\tdecal: string | null;\r\n\theading: string;\r\n\tlink: LinkType;\r\n\timage: ImageFragmentModel | null;\r\n\tpublicationDate: string;\r\n}\r\n\r\nexport interface RegulationPuffModel extends FragmentModel {\r\n\tdecal: string | null;\r\n\tregulationId: string | null;\r\n\theading: string;\r\n\tlink: LinkType | null;\r\n\tvalidFromDate: string | null;\r\n\ttag: string | null;\r\n}\r\n\r\nexport interface GuidancePuffModel extends FragmentModel {\r\n\tareaIds: number[];\r\n\tdecal: string | null;\r\n\theading: string;\r\n\tareaNames: string[];\r\n\tisSupervisory: boolean;\r\n\tlink: LinkType;\r\n\timage: ImageFragmentModel;\r\n}\r\n\r\nexport interface EventPuffItemModel extends FragmentModel {\r\n\theading: string;\r\n\tlink: LinkType;\r\n\teventStartDate: string | null;\r\n\teventType: string | null;\r\n\timage: ImageFragmentModel;\r\n}\r\n\r\nexport interface WidgetNumericBlockModel extends FragmentModel {\r\n\theading?: string | null;\r\n\ttext?: string | null;\r\n\tsubtext?: string | null;\r\n\ttrend?: number | null;\r\n\tlink?: LinkType | null;\r\n\ttheme?: PuffTheme;\r\n}\r\n\r\nexport interface ContactBlockModel extends FragmentModel {\r\n\timage: ImageFragmentModel;\r\n\tfullName: string;\r\n\tjobTitle: string | null;\r\n}\r\n\r\nexport interface HighlightModel extends FragmentModel {\r\n\ttext: string;\r\n\ttextAsModel: FragmentListModel;\r\n}\r\n\r\nexport interface StatisticsPuffModel extends FragmentModel {\r\n\tareaIds: number[];\r\n\tdecal: string | null;\r\n\theading: string;\r\n\tareaNames: string[];\r\n\tisSupervisory: boolean;\r\n\tlink: LinkType;\r\n\timage: ImageFragmentModel;\r\n}\r\n\r\nexport interface StandardPuffModel extends FragmentModel {\r\n\theading: string;\r\n\tpreamble: string;\r\n\turl: string;\r\n\timage: ImageFragmentModel;\r\n\tpublicationDate?: string;\r\n}\r\n\r\nexport interface SubjectAreaIconPuffModel extends FragmentModel {\r\n\tlink: LinkType;\r\n\timage: ImageFragmentModel;\r\n}\r\n\r\n/**\r\n * Used for onpage navigation\r\n */\r\nexport type BlockBaseFragmentModelTypes =\r\n\t| PuffContainerModel\r\n\t| ContentBlockModel\r\n\t| CollapsibleContainerModel\r\n\t| BannerFragmentModel\r\n\t| LogoBannerModel\r\n\t| NumericBannerBlockModel\r\n\t| FaqFragmentModel\r\n\t| MediaBannerFragmentModel\r\n\t| DashboardBlockModel\r\n\t| StatisticsBlockModel\r\n\t| HeroBannerModel;\r\n\r\nexport type FragmentModelTypes =\r\n\t| EpiFormsProps\r\n\t| HeadingFragmentModel\r\n\t| RawFragmentModel\r\n\t| ListFragmentModel\r\n\t| ImageFragmentModel\r\n\t| VideoFragmentModel\r\n\t| PuffWithImageModel\r\n\t| BannerFragmentModel\r\n\t| TableFragmentModel\r\n\t| YouTubeFragmentModel\r\n\t| MediaBannerFragmentModel\r\n\t| LegalBoxModel\r\n\t| HeroBannerModel\r\n\t| DashboardBlockModel\r\n\t| CollapsibleBlockModel\r\n\t| WidgetNumericBlockModel\r\n\t| StandardPuffModel\r\n\t| SubjectAreaIconPuffModel\r\n\t| StatisticsPuffModel\r\n\t| StatisticsBlockModel\r\n\t| GrantPuffModel\r\n\t| EventPuffItemModel\r\n\t| ContentBlockModel\r\n\t| PublicationPuffModel\r\n\t| GuidancePuffModel\r\n\t| ContactBlockModel\r\n\t| HighlightModel;\r\n","import React, { useContext, useEffect, useState } from 'react';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport { NVseThemePageModel } from './NVseThemePage.model';\r\nimport PageTopBanner from 'components/PageTopBanner';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport { FragmentModelTypes, PageLayoutType } from 'types/fragments';\r\nimport {\r\n\tPageOverviewBanner,\r\n\tPageOverviewContent,\r\n} from './NVseThemePage.styles';\r\nimport Button from 'components/Button';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport MegaMenu from 'components/MegaMenu';\r\nimport { NavigationItem } from 'types/epi';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectLocalization } from 'store/modules/model';\r\nimport { translate } from 'utils/helper-utils';\r\nimport {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport PageTopOverlappBanner from 'pages/NVseStartPage/PageTopOverlappBanner';\r\nimport {\r\n\tgetBlockBaseMenuItems,\r\n\tgetBlockBaseSections,\r\n\tOnPageNavigationContent,\r\n} from 'components/Panels/OnPageNavigationContent';\r\nimport { ThemeContext } from 'styled-components';\r\n\r\n/**\r\n * # Temasida\r\n * Modeltype:<code>NVseThemePage</code>\r\n *\r\n * [API contract](https://consid.atlassian.net/wiki/spaces/NNN/pages/2091384857/NVseThemePage)\r\n *\r\n * En sidtyp för ett specifikt ämnesomrÃ¥de\r\n */\r\nconst NVseThemePage: React.FC<NVseThemePageModel> = ({\r\n\tmainImage,\r\n\tthemeTop,\r\n\tdecal,\r\n\theading,\r\n\tpreamble,\r\n\ttextAsModel,\r\n\tbottomItems,\r\n\tlayoutType,\r\n\tlastReviewed,\r\n\tshowReviewDate,\r\n\tepi,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst [isMenuOpen, setIsMenuOpen] = useState(false);\r\n\tconst [sections, setSections] = useState<string[]>([]);\r\n\tconst [menuIndex, setMenuIndex] = useState<NavigationItem[]>([]);\r\n\tconst localization = useSelector(selectLocalization);\r\n\r\n\tconst ref = React.createRef<any>();\r\n\r\n\tconst findOnPageLabel = translate(\r\n\t\t'/frontend/pages/findonpage',\r\n\t\t'Find on page',\r\n\t\tlocalization\r\n\t);\r\n\r\n\tconst isMicroSite = layoutType === PageLayoutType.Micro;\r\n\r\n\tuseEffect(() => {\r\n\t\tconst expanderModels = getBlockBaseSections(bottomItems);\r\n\t\tconst sectionStrings = expanderModels.map((item) => item.onPageMenuHeading);\r\n\r\n\t\tif (sectionStrings.length > 0 && !isMicroSite) {\r\n\t\t\tconst menuIndexRoot = getBlockBaseMenuItems(sectionStrings);\r\n\t\t\tsetMenuIndex(menuIndexRoot);\r\n\t\t\tsetSections(sectionStrings);\r\n\t\t} else {\r\n\t\t\tsetMenuIndex([]);\r\n\t\t\tsetSections([]);\r\n\t\t}\r\n\t}, [bottomItems, isMicroSite]);\r\n\r\n\tconst onCloseMenuEvent = (userClosed: boolean) => {\r\n\t\tsetIsMenuOpen(false);\r\n\t\tif (userClosed && ref.current) {\r\n\t\t\tref.current.focus();\r\n\t\t}\r\n\t};\r\n\r\n\tconst onOpenMenu = () => {\r\n\t\tsetIsMenuOpen(true);\r\n\t};\r\n\r\n\tlet lastBlockType = isMicroSite ? BlockType.Unknown : BlockType.Element;\r\n\tlet blockTypeBefore_bottomItems: BlockType = lastBlockType;\r\n\r\n\tif (!isMicroSite && textAsModel && textAsModel.fragments.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\ttextAsModel.fragments,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{isMicroSite ? (\r\n\t\t\t\t<PageTopOverlappBanner\r\n\t\t\t\t\timage={mainImage}\r\n\t\t\t\t\timage_htmlAttributes={_properties?.mainImage}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\theadingLevel={1}\r\n\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t></PageTopOverlappBanner>\r\n\t\t\t) : (\r\n\t\t\t\t<PageTopBanner\r\n\t\t\t\t\tmainImage={mainImage}\r\n\t\t\t\t\tthemeTop={themeTop}\r\n\t\t\t\t\tdecal={decal}\r\n\t\t\t\t\tsubheading=\"\"\r\n\t\t\t\t\theadingLevel={1}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\tmainImage_htmlAttributes={_properties?.mainImage}\r\n\t\t\t\t></PageTopBanner>\r\n\t\t\t)}\r\n\r\n\t\t\t{sections.length > 1 && (\r\n\t\t\t\t<PageOverviewBanner>\r\n\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t<PageOverviewContent>\r\n\t\t\t\t\t\t\t<nav>\r\n\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\t\t\t\tonClick={onOpenMenu}\r\n\t\t\t\t\t\t\t\t\taria-expanded={isMenuOpen}\r\n\t\t\t\t\t\t\t\t\taria-haspopup=\"dialog\"\r\n\t\t\t\t\t\t\t\t\tvariant={ButtonVariant.Tertiary}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{findOnPageLabel}\r\n\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t</nav>\r\n\t\t\t\t\t\t</PageOverviewContent>\r\n\t\t\t\t\t</Grid>\r\n\t\t\t\t</PageOverviewBanner>\r\n\t\t\t)}\r\n\r\n\t\t\t<Space top={themeContext.spacing.getElement()} bottom={spaceAfterLast}>\r\n\t\t\t\t<OnPageNavigationContent\r\n\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\theading={null}\r\n\t\t\t\t\theading_htmlAttributes={null}\r\n\t\t\t\t\tpreamble={isMicroSite ? null : preamble}\r\n\t\t\t\t\tpreamble_htmlAttributes={isMicroSite ? null : _properties?.preamble}\r\n\t\t\t\t\ttextAsModel={textAsModel}\r\n\t\t\t\t\ttextAsModel_htmlAttributes={_properties?.mainBody}\r\n\t\t\t\t\tsections={sections}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\tlastReviewed={lastReviewed}\r\n\t\t\t\t\tshowReviewDate={showReviewDate}\r\n\t\t\t\t></OnPageNavigationContent>\r\n\r\n\t\t\t\t<EpiFragments\r\n\t\t\t\t\tpreviousBlockType={blockTypeBefore_bottomItems}\r\n\t\t\t\t\tepi={epi}\r\n\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\tfragments={bottomItems as FragmentModelTypes[]}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t/>\r\n\t\t\t</Space>\r\n\r\n\t\t\t{isMenuOpen && (\r\n\t\t\t\t<MegaMenu\r\n\t\t\t\t\titems={menuIndex}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\tonClose={onCloseMenuEvent}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default NVseThemePage;\r\n","import React, { useContext } from 'react';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport { NVseStatisticsCategoryPageModel } from './NVseStatisticsCategoryPage.model';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport { ViewType } from 'types/enums';\r\nimport {\r\n\tBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { GrantsHeader } from 'components/Panels/GrantsHeader';\r\nimport { FragmentPuffList } from 'components/Panels/FragmentPuffList';\r\nimport { ThemeContext } from 'styled-components';\r\nimport EditableField from 'components/EditableField/EditableField';\r\n\r\n/**\r\n * # Kategorisida för statistik\r\n * Modeltype:<code>NVseStatisticsCategoryPage</code>\r\n *\r\n * [API contract](https://consid.atlassian.net/wiki/spaces/NNN/pages/2108555334/NVseStatisticsCategoryPage)\r\n *\r\n * Sida för en unik kategori\r\n */\r\nconst NVseStatisticsCategoryPage: React.FC<NVseStatisticsCategoryPageModel> = ({\r\n\theading,\r\n\tpreamble,\r\n\tstatisticsItemsHeading,\r\n\tallStatisticsItemsText,\r\n\tbottomItems,\r\n\tstatisticsItems,\r\n\ttextAsModel,\r\n\tepi,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tlet lastBlockType = BlockType.Element;\r\n\tlet blockTypeBefore_textAsModel: BlockType = lastBlockType;\r\n\tlet blockTypeBefore_bottomItems: BlockType = lastBlockType;\r\n\r\n\tif (statisticsItems.length > 0) {\r\n\t\tlastBlockType = BlockType.Element;\r\n\t\tblockTypeBefore_textAsModel = lastBlockType;\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tif (textAsModel.fragments.length > 0) {\r\n\t\tlastBlockType = BlockType.Element;\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\treturn (\r\n\t\t<Space\r\n\t\t\ttop={themeContext.spacing.getPageTopPadding()}\r\n\t\t\tbottom={spaceAfterLast}\r\n\t\t>\r\n\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t<GrantsHeader\r\n\t\t\t\t\theadingLevel={1}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t></GrantsHeader>\r\n\t\t\t</Grid>\r\n\r\n\t\t\t{statisticsItems.length > 0 && (\r\n\t\t\t\t<Space top={themeContext.spacing.getElement()}>\r\n\t\t\t\t\t<FragmentPuffList\r\n\t\t\t\t\t\tinitialMaxCount={6}\r\n\t\t\t\t\t\theading={statisticsItemsHeading}\r\n\t\t\t\t\t\tshowMoreLabel={allStatisticsItemsText}\r\n\t\t\t\t\t\titems={statisticsItems}\r\n\t\t\t\t\t\toptions={{\r\n\t\t\t\t\t\t\tinsideCell: false,\r\n\t\t\t\t\t\t\tinsideInnerGrid: false,\r\n\t\t\t\t\t\t\tinsideGrid: false,\r\n\t\t\t\t\t\t\theadingLevel: 2, // TODO:\r\n\t\t\t\t\t\t\tview: ViewType.Card,\r\n\t\t\t\t\t\t\tthemeContext: themeContext,\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t></FragmentPuffList>\r\n\t\t\t\t</Space>\r\n\t\t\t)}\r\n\r\n\t\t\t<EditableField opeProperty={_properties?.mainBody}>\r\n\t\t\t\t{textAsModel && (\r\n\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\tpreviousBlockType={blockTypeBefore_textAsModel}\r\n\t\t\t\t\t\tepi={epi}\r\n\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\tfragments={textAsModel.fragments}\r\n\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\t\t\t</EditableField>\r\n\r\n\t\t\t{bottomItems.length > 0 && (\r\n\t\t\t\t<EpiFragments\r\n\t\t\t\t\tpreviousBlockType={blockTypeBefore_bottomItems}\r\n\t\t\t\t\tepi={epi}\r\n\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\tfragments={bottomItems}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</Space>\r\n\t);\r\n};\r\n\r\nexport default NVseStatisticsCategoryPage;\r\n","/**\r\n * NVsePublicationPage - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\n\r\nexport const Div = styled.div``;\r\n\r\n\r\nexport const MetadataGridContainer = styled.div`\r\n\tborder-collapse: collapse;\r\n\t${props => props.theme.typography.style6.getStyle()};\t\t\r\n\tborder-top: 1px solid ${(p) => p.theme.colors.black}15;\r\n\r\n\tdisplay: grid;\r\n\tgrid-template-columns: auto auto;\r\n\r\n\t> div {\r\n\t\tvertical-align: top;\r\n\t\tborder-bottom: 1px solid ${(p) => p.theme.colors.black}15;\r\n\t\tpadding: ${props => props.theme.spacing.space1}rem 0;\r\n\t}\r\n\r\n\t> div:nth-child(odd) {\r\n\t\tfont-weight: bold;\r\n\t\t${mediaQueries.phone} {\r\n\t\t\tfont-weight: bold;\r\n\t\t}\r\n\t\tpadding-right: ${props => props.theme.spacing.space3}rem;\r\n\t}\r\n`;\r\n","import styled from 'styled-components';\r\n\r\nexport const MetadataContainer = styled.div`\r\n\tbackground-color: ${props => props.theme.colors.white};\r\n\tpadding: ${props => props.theme.spacing.space7}rem 0;\r\n\tscroll-margin-top: 29px;\r\n`;\r\n\r\nexport const MetadataThumbnailContainer = styled.div`\r\n\tbackground-color: ${props => props.theme.colors.grey5};\r\n\tpadding: ${props => props.theme.spacing.space5}rem ${props => props.theme.spacing.space6}rem;\r\n`;\r\n\r\nexport const MetadataThumbnail = styled.img`\r\n\twidth: 100%;\r\n`;\r\n","import EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport {\r\n\tBlockType,\r\n\tgetFirstItemBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { Cell, Grid } from 'components/Boilerplate/Grid';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport {\r\n\tgetThemeHeadingColor,\r\n\tLinkType,\r\n\tPuffTheme,\r\n} from 'pages/sharedModelTypes';\r\nimport React, { useContext } from 'react';\r\nimport { generateAnchorId } from 'theme/utils';\r\nimport { FragmentListModel, ImageFragmentModel } from 'types/fragments';\r\nimport { convertDateToLocalFormat } from 'utils/helper-utils';\r\nimport { MetadataGridContainer } from './NVsePublicationPage.styles';\r\nimport {\r\n\tMetadataContainer,\r\n\tMetadataThumbnail,\r\n\tMetadataThumbnailContainer,\r\n} from './PublicationMetadataBanner.styles';\r\nimport Button from 'components/Button';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport { ThemeContext } from 'styled-components';\r\n\r\nexport type PublicationMetadataBannerProps = {\r\n\tthumbnail: ImageFragmentModel | null;\r\n\tlink: LinkType;\r\n\tdownloadLinks: LinkType[];\r\n\taboutReportLabel: string;\r\n\tdescription: string | null;\r\n\tdescriptionAsModel: FragmentListModel;\r\n\tpagesLabel: string;\r\n\tpages: number;\r\n\treleaseDateLabel: string;\r\n\treleaseDate: string;\r\n\tisbnLabel: string;\r\n\tisbn: string;\r\n\tauthorsLabel: string;\r\n\tauthors: string;\r\n\r\n\theading: string;\r\n\theadingLevel?: number;\r\n\tdisableCustomHeadingLogic: boolean;\r\n};\r\n\r\nexport const PublicationMetadataBanner: React.FC<PublicationMetadataBannerProps> = ({\r\n\theading,\r\n\theadingLevel,\r\n\tdescriptionAsModel,\r\n\tisbn,\r\n\tisbnLabel,\r\n\treleaseDate,\r\n\treleaseDateLabel,\r\n\tpagesLabel,\r\n\tpages,\r\n\tauthors,\r\n\tauthorsLabel,\r\n\tthumbnail,\r\n\tdownloadLinks,\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst anchorId = generateAnchorId(heading);\r\n\tconst renderTable =\r\n\t\t!isbn && (!pages || pages === 0) && !releaseDate && !authors === true\r\n\t\t\t? false\r\n\t\t\t: true;\r\n\r\n\tlet firstBlockType = BlockType.Element;\r\n\tif (descriptionAsModel && descriptionAsModel.fragments.length > 0) {\r\n\t\tfirstBlockType = getFirstItemBlockType(\r\n\t\t\tdescriptionAsModel.fragments,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t}\r\n\r\n\tconst spaceBeforeThumbnail = getSpaceToAddBefore(\r\n\t\tBlockType._Reserved_Heading,\r\n\t\tfirstBlockType,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\treturn (\r\n\t\t<MetadataContainer id={anchorId}>\r\n\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t<Grid inner={true}>\r\n\t\t\t\t\t<Cell span={7}>\r\n\t\t\t\t\t\t{heading && (\r\n\t\t\t\t\t\t\t<Heading\r\n\t\t\t\t\t\t\t\tzeroBottom\r\n\t\t\t\t\t\t\t\tlevel={headingLevel}\r\n\t\t\t\t\t\t\t\tstyleLevel={2}\r\n\t\t\t\t\t\t\t\tcolor={getThemeHeadingColor(\r\n\t\t\t\t\t\t\t\t\tthemeContext,\r\n\t\t\t\t\t\t\t\t\tPuffTheme.NeutralWhite\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{heading}\r\n\t\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Cell>\r\n\t\t\t\t</Grid>\r\n\t\t\t\t<Grid inner={true}>\r\n\t\t\t\t\t<Cell span={7}>\r\n\t\t\t\t\t\t{descriptionAsModel && descriptionAsModel.fragments.length > 0 && (\r\n\t\t\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\t\t\tpreviousBlockType={BlockType._Reserved_Heading}\r\n\t\t\t\t\t\t\t\tinsideCell={true}\r\n\t\t\t\t\t\t\t\tinsideGrid={true}\r\n\t\t\t\t\t\t\t\tinsideInnerGrid={true}\r\n\t\t\t\t\t\t\t\theadingLevel={headingLevel ? headingLevel + 1 : 2}\r\n\t\t\t\t\t\t\t\tfragments={descriptionAsModel.fragments}\r\n\t\t\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{renderTable && (\r\n\t\t\t\t\t\t\t<Space top={themeContext.spacing.space3}>\r\n\t\t\t\t\t\t\t\t<MetadataGridContainer>\r\n\t\t\t\t\t\t\t\t\t{isbn && (\r\n\t\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t\t<div>{isbnLabel}</div>\r\n\t\t\t\t\t\t\t\t\t\t\t<div>{isbn}</div>\r\n\t\t\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t\t{releaseDate && (\r\n\t\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t\t<div>{releaseDateLabel}</div>\r\n\t\t\t\t\t\t\t\t\t\t\t<div>{convertDateToLocalFormat(releaseDate)}</div>\r\n\t\t\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t\t{pages !== null && pages !== 0 && (\r\n\t\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t\t<div>{pagesLabel}</div>\r\n\t\t\t\t\t\t\t\t\t\t\t<div>{pages}</div>\r\n\t\t\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t\t{authors && (\r\n\t\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t\t<div>{authorsLabel}</div>\r\n\t\t\t\t\t\t\t\t\t\t\t<div>{authors}</div>\r\n\t\t\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</MetadataGridContainer>\r\n\t\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{downloadLinks &&\r\n\t\t\t\t\t\t\tdownloadLinks.length > 0 &&\r\n\t\t\t\t\t\t\tdownloadLinks.map((item) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<Space top={themeContext.spacing.space3}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tshowLinkIcon={false}\r\n\t\t\t\t\t\t\t\t\t\t\ticonName=\"arrowdown\"\r\n\t\t\t\t\t\t\t\t\t\t\ticonColor={`${themeContext.colors.secondaryBlue}60`}\r\n\t\t\t\t\t\t\t\t\t\t\ticonPosition={1}\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={ButtonVariant.Link}\r\n\t\t\t\t\t\t\t\t\t\t\tto={item.url}\r\n\t\t\t\t\t\t\t\t\t\t\texternal={item.isFile}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{item.heading}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t</Cell>\r\n\r\n\t\t\t\t\t<Cell span={2}> </Cell>\r\n\t\t\t\t\t<Cell span={3} phone={4}>\r\n\t\t\t\t\t\t{thumbnail && (\r\n\t\t\t\t\t\t\t<Space top={spaceBeforeThumbnail}>\r\n\t\t\t\t\t\t\t\t<MetadataThumbnailContainer>\r\n\t\t\t\t\t\t\t\t\t<MetadataThumbnail {...thumbnail}></MetadataThumbnail>\r\n\t\t\t\t\t\t\t\t</MetadataThumbnailContainer>\r\n\t\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Cell>\r\n\t\t\t\t</Grid>\r\n\t\t\t</Grid>\r\n\t\t</MetadataContainer>\r\n\t);\r\n};\r\n","import EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport Button from 'components/Button';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport MegaMenu from 'components/MegaMenu';\r\nimport PageTopBanner from 'components/PageTopBanner';\r\nimport {\r\n\tPageOverviewBanner,\r\n\tPageOverviewContent,\r\n} from 'pages/NVseThemePage/NVseThemePage.styles';\r\nimport React, { useContext, useEffect, useState } from 'react';\r\nimport { NavigationItem } from 'types/epi';\r\nimport { FragmentModelTypes } from 'types/fragments';\r\nimport { NVsePublicationPageModel } from './NVsePublicationPage.model';\r\nimport { translate } from 'utils/helper-utils';\r\nimport { selectLocalization } from 'store/modules/model';\r\nimport { useSelector } from 'react-redux';\r\nimport {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport {\r\n\tPublicationMetadataBanner,\r\n\tPublicationMetadataBannerProps,\r\n} from './PublicationMetadataBanner';\r\nimport {\r\n\tgetBlockBaseMenuItems,\r\n\tgetBlockBaseSections,\r\n\tOnPageNavigationContent,\r\n} from 'components/Panels/OnPageNavigationContent';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { GrantsHeader } from 'components/Panels/GrantsHeader';\r\n\r\n/**\r\n * # Publikationssida\r\n * Modeltype:<code>NVsePublicationPage</code>\r\n *\r\n * [API contract](https://consid.atlassian.net/wiki/spaces/NNN/pages/2158100553/NVsePublicationPage)\r\n *\r\n * Publikations-/rapportsida.\r\n */\r\nconst NVsePublicationPage: React.FC<NVsePublicationPageModel> = ({\r\n\tmainImage,\r\n\tthemeTop,\r\n\tdecal,\r\n\theading,\r\n\tlastReviewed,\r\n\tshowReviewDate,\r\n\tpreamble,\r\n\ttextAsModel,\r\n\tmetaData,\r\n\tsubHeading,\r\n\tbottomItems,\r\n\tepi,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\tconst [isMenuOpen, setIsMenuOpen] = useState(false);\r\n\tconst [sections, setSections] = useState<string[]>([]);\r\n\tconst [menuIndex, setMenuIndex] = useState<NavigationItem[]>([]);\r\n\tconst localization = useSelector(selectLocalization);\r\n\r\n\tconst findOnPageLabel = translate(\r\n\t\t'/frontend/pages/findonpage',\r\n\t\t'Find on page',\r\n\t\tlocalization\r\n\t);\r\n\r\n\tconst ref = React.createRef<any>();\r\n\r\n\tuseEffect(() => {\r\n\t\tconst expanderModels = getBlockBaseSections(bottomItems);\r\n\t\tconst sectionStrings = expanderModels.map((item) => item.onPageMenuHeading);\r\n\r\n\t\t// Add extra non bottomItem section (Section exist on page)\r\n\t\tif (metaData.aboutReportLabel) {\r\n\t\t\tsectionStrings.push(metaData.aboutReportLabel);\r\n\t\t}\r\n\t\tif (sectionStrings.length > 0) {\r\n\t\t\tconst menuIndexRoot = getBlockBaseMenuItems(sectionStrings);\r\n\t\t\tsetMenuIndex(menuIndexRoot);\r\n\t\t\tsetSections(sectionStrings);\r\n\t\t} else {\r\n\t\t\tsetMenuIndex([]);\r\n\t\t\tsetSections([]);\r\n\t\t}\r\n\t}, [bottomItems, metaData.aboutReportLabel]);\r\n\r\n\tconst onCloseMenuEvent = (userClosed: boolean) => {\r\n\t\tsetIsMenuOpen(false);\r\n\t\tif (userClosed && ref.current) {\r\n\t\t\tref.current.focus();\r\n\t\t}\r\n\t};\r\n\r\n\tconst onOpenMenu = () => {\r\n\t\tsetIsMenuOpen(true);\r\n\t};\r\n\r\n\tconst metdataProps = {\r\n\t\t...metaData,\r\n\t\theading: metaData.aboutReportLabel,\r\n\t\theadingLevel: 2,\r\n\t\tdisableCustomHeadingLogic,\r\n\t} as PublicationMetadataBannerProps;\r\n\r\n\tlet lastBlockType = BlockType.Element;\r\n\tlet blockTypeBefore_bottomItems: BlockType = BlockType.Element;\r\n\r\n\tif (textAsModel && textAsModel.fragments.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\ttextAsModel.fragments,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tif (bottomItems.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\tbottomItems,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t}\r\n\r\n\tconst spaceBefore_Metadata = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\tlastBlockType = BlockType.SectionBanner;\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\tvar DisplayNavigationHeader = false;\r\n\r\n\tif (\r\n\t\t(bottomItems && bottomItems.length > 0) ||\r\n\t\t(textAsModel && textAsModel?.fragments.length > 0)\r\n\t) {\r\n\t\t//we should display the navigationHeader if either TextAsModel or bottomItems has a value\r\n\t\tDisplayNavigationHeader = true;\r\n\t}\r\n\r\n\tconst handlePageOverviewContent = () => {\r\n\t\tif ((sections || [])?.length > 1 && metaData.downloadLinks !== null) {\r\n\t\t\t<PageOverviewBanner>\r\n\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t<PageOverviewContent>\r\n\t\t\t\t\t\t{sections && sections.length > 1 && (\r\n\t\t\t\t\t\t\t<nav>\r\n\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\t\t\t\tonClick={onOpenMenu}\r\n\t\t\t\t\t\t\t\t\tvariant={ButtonVariant.Tertiary}\r\n\t\t\t\t\t\t\t\t\taria-expanded={isMenuOpen}\r\n\t\t\t\t\t\t\t\t\taria-haspopup=\"dialog\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{findOnPageLabel}\r\n\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t</nav>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{metaData.downloadLinks[0] && (\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={ButtonVariant.Primary}\r\n\t\t\t\t\t\t\t\tto={metaData.downloadLinks[0].url}\r\n\t\t\t\t\t\t\t\tshowLinkIcon={false}\r\n\t\t\t\t\t\t\t\texternal={metaData.downloadLinks[0].isFile}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{metaData.downloadLinks[0].heading}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</PageOverviewContent>\r\n\t\t\t\t</Grid>\r\n\t\t\t</PageOverviewBanner>;\r\n\t\t}\r\n\t};\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<PageTopBanner\r\n\t\t\t\tmainImage={mainImage}\r\n\t\t\t\tthemeTop={themeTop}\r\n\t\t\t\tdecal={decal}\r\n\t\t\t\theadingLevel={1}\r\n\t\t\t\theading={heading}\r\n\t\t\t\tsubheading={subHeading}\r\n\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\tmainImage_htmlAttributes={_properties?.mainImage}\r\n\t\t\t></PageTopBanner>\r\n\r\n\t\t\t{handlePageOverviewContent}\r\n\r\n\t\t\t{DisplayNavigationHeader && (\r\n\t\t\t\t<Space top={themeContext.spacing.getElement()}>\r\n\t\t\t\t\t<OnPageNavigationContent\r\n\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\theading={null}\r\n\t\t\t\t\t\theading_htmlAttributes={null}\r\n\t\t\t\t\t\tlastReviewed={lastReviewed}\r\n\t\t\t\t\t\tshowReviewDate={showReviewDate}\r\n\t\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t\t\ttextAsModel={textAsModel}\r\n\t\t\t\t\t\ttextAsModel_htmlAttributes={_properties?.mainBody}\r\n\t\t\t\t\t\tsections={sections}\r\n\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t></OnPageNavigationContent>\r\n\r\n\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\tpreviousBlockType={blockTypeBefore_bottomItems}\r\n\t\t\t\t\t\tepi={epi}\r\n\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\tfragments={bottomItems as FragmentModelTypes[]}\r\n\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</Space>\r\n\t\t\t)}\r\n\r\n\t\t\t{!DisplayNavigationHeader && lastReviewed && (\r\n\t\t\t\t<Grid>\r\n\t\t\t\t\t<GrantsHeader\r\n\t\t\t\t\t\tcolumns={4}\r\n\t\t\t\t\t\tcameFromSectionContent\r\n\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\theading={null}\r\n\t\t\t\t\t\tpreamble={null}\r\n\t\t\t\t\t\tlastReviewed={lastReviewed}\r\n\t\t\t\t\t\tshowReviewDate={showReviewDate}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</Grid>\r\n\t\t\t)}\r\n\r\n\t\t\t<Space\r\n\t\t\t\ttop={\r\n\t\t\t\t\tbottomItems && bottomItems.length > 0\r\n\t\t\t\t\t\t? spaceBefore_Metadata\r\n\t\t\t\t\t\t: undefined\r\n\t\t\t\t}\r\n\t\t\t\tbottom={spaceAfterLast}\r\n\t\t\t>\r\n\t\t\t\t<PublicationMetadataBanner\r\n\t\t\t\t\t{...metdataProps}\r\n\t\t\t\t></PublicationMetadataBanner>\r\n\t\t\t</Space>\r\n\r\n\t\t\t{isMenuOpen && (\r\n\t\t\t\t<MegaMenu\r\n\t\t\t\t\titems={menuIndex}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\tonClose={onCloseMenuEvent}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default NVsePublicationPage;\r\n","import React, { useContext } from 'react';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport { NVsePublicationsCategoryPageModel } from './NVsePublicationsCategoryPage.model';\r\nimport { ViewType } from 'types/enums';\r\nimport {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { GrantsHeader } from 'components/Panels/GrantsHeader';\r\nimport { FragmentPuffList } from 'components/Panels/FragmentPuffList';\r\nimport { ThemeContext } from 'styled-components';\r\nimport EditableField from 'components/EditableField/EditableField';\r\n\r\n/**\r\n * # Kategorisida för publikationer\r\n * Modeltype:<code>NVsePublicationsCategoryPage</code>\r\n *\r\n * [API contract](https://consid.atlassian.net/wiki/spaces/NNN/pages/2178973717/NVsePublicationsCategoryPage)\r\n *\r\n * Sida för en unik publikationskategori\r\n */ const NVsePublicationsCategoryPage: React.FC<NVsePublicationsCategoryPageModel> = ({\r\n\theading,\r\n\tpreamble,\r\n\tpublicationItemsHeading,\r\n\tallPublicationsItemsText,\r\n\tbottomItems,\r\n\tpublicationsItems,\r\n\ttextAsModel,\r\n\tepi,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tlet lastBlockType = BlockType.Element;\r\n\tlet blockTypeBefore_textAsModel: BlockType = lastBlockType;\r\n\tlet blockTypeBefore_bottomItems: BlockType = lastBlockType;\r\n\r\n\tif (publicationsItems.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\tpublicationsItems,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_textAsModel = lastBlockType;\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tif (textAsModel && textAsModel.fragments.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\ttextAsModel.fragments,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\treturn (\r\n\t\t<Space\r\n\t\t\ttop={themeContext.spacing.getPageTopPadding()}\r\n\t\t\tbottom={spaceAfterLast}\r\n\t\t>\r\n\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t<GrantsHeader\r\n\t\t\t\t\theadingLevel={1}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t></GrantsHeader>\r\n\t\t\t</Grid>\r\n\r\n\t\t\t{publicationsItems.length > 0 && (\r\n\t\t\t\t<Space top={themeContext.spacing.getElement()}>\r\n\t\t\t\t\t<FragmentPuffList\r\n\t\t\t\t\t\tinitialMaxCount={6}\r\n\t\t\t\t\t\theading={publicationItemsHeading}\r\n\t\t\t\t\t\tshowMoreLabel={allPublicationsItemsText}\r\n\t\t\t\t\t\titems={publicationsItems}\r\n\t\t\t\t\t\toptions={{\r\n\t\t\t\t\t\t\tinsideCell: false,\r\n\t\t\t\t\t\t\tinsideInnerGrid: false,\r\n\t\t\t\t\t\t\tinsideGrid: false,\r\n\t\t\t\t\t\t\theadingLevel: 2, // TODO:\r\n\t\t\t\t\t\t\tview: ViewType.Card,\r\n\t\t\t\t\t\t\tthemeContext: themeContext,\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t></FragmentPuffList>\r\n\t\t\t\t</Space>\r\n\t\t\t)}\r\n\t\t\t<EditableField opeProperty={_properties?.mainBody}>\r\n\t\t\t\t{textAsModel && (\r\n\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\tpreviousBlockType={blockTypeBefore_textAsModel}\r\n\t\t\t\t\t\tepi={epi}\r\n\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\tfragments={textAsModel.fragments}\r\n\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\t\t\t</EditableField>\r\n\r\n\t\t\t<EpiFragments\r\n\t\t\t\tpreviousBlockType={blockTypeBefore_bottomItems}\r\n\t\t\t\tepi={epi}\r\n\t\t\t\theadingLevel={2}\r\n\t\t\t\tfragments={bottomItems}\r\n\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t/>\r\n\t\t</Space>\r\n\t);\r\n};\r\n\r\nexport default NVsePublicationsCategoryPage;\r\n","import Link from 'components/Boilerplate/Link';\r\nimport { H2 } from 'components/Typography';\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\nimport { accessibilityFocus } from 'theme/styles';\r\nimport { px2rem } from 'theme/utils';\r\n\r\nexport const IndexSectionWrapper = styled.div`\r\n\tmargin-bottom: 2.5rem;\r\n\t${mediaQueries.phone} {\r\n\t\tmargin-bottom: ${(props) => props.theme.spacing.space4}rem;\r\n\t}\r\n`;\r\nexport const IndexSection = styled.ul`\r\n\tlist-style-type: none;\r\n\tpadding: 0px;\r\n\tmargin: 0px;\r\n\tdisplay: grid;\r\n\tgrid-template-columns: repeat(2, 1fr);\r\n\tgap: 16px;\r\n\t${mediaQueries.phone} {\r\n\t\tgrid-template-columns: 1fr;\r\n\t\tgap: 8px;\r\n\t}\r\n\r\n\ta {\r\n\t\theight: 100%;\r\n\t\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\t}\r\n`;\r\n\r\nexport const IndexHeading = styled(H2)`\r\n\t${(props) => props.theme.typography.style2.getStyle()};\r\n\tmargin-bottom: ${(props) => props.theme.spacing.space4}rem;\r\n\t${mediaQueries.phone} {\r\n\t\tmargin-bottom: ${(props) => props.theme.spacing.space3}rem;\r\n\t}\r\n\tborder-bottom: 1px solid #003366;\r\n\tpadding-bottom: 0.5rem;\r\n`;\r\n\r\nexport const IndexSectionItem = styled(Link)`\r\n\tdisplay: flex;\r\n\t&:focus {\r\n\t\t${accessibilityFocus()};\r\n\t\t> div:nth-child(2) {\r\n\t\t\t> span {\r\n\t\t\t\ttext-decoration: underline;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t> div:first-child {\r\n\t\twidth:${px2rem(80)};\r\n\t\tmin-height:${px2rem(80)};\r\n padding: 10px;\r\n background-color:${(props) => props.theme.colors.blue1};\r\n display:flex;\r\n justify-content: center;\r\n align-items: center;\r\n > img {\r\n\t\t\t\tmax-height: 60px;\r\n\t\t\t\tmax-width: 60px;\r\n\t\t\t}\r\n }\r\n\t}\r\n\t> div:nth-child(2) {\r\n\t\tflex-grow:1;\r\n display:flex;\r\n justify-content: start;\r\n padding:${(props) => props.theme.spacing.space3}rem;\r\n align-items: center;\r\n background-color:${(props) => props.theme.colors.white};\r\n\t\t${mediaQueries.phone} {\r\n\t\t\t padding:${px2rem(18)};\r\n\t\t}\r\n > span {\r\n\t\t\t${(props) => props.theme.typography.style4.getStyle()};\r\n\t\t\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\t\t\tmargin:0;\r\n\t\t\t${mediaQueries.tablet} {\r\n\t\t\t\tfont-size: 22px;\r\n\t\t\t}\r\n\t\t}\r\n`;\r\n","import Link from 'components/Boilerplate/Link';\r\nimport {\r\n\tSubjectAreaListingPageItem,\r\n\tSubjectAreaListingPageItemsModel,\r\n} from 'pages/sharedModelTypes';\r\nimport React from 'react';\r\nimport {\r\n\tIndexHeading,\r\n\tIndexSection,\r\n\tIndexSectionItem,\r\n\tIndexSectionWrapper,\r\n} from './ListingPageIndexPanel.styles';\r\n\r\n/**\r\n * Listing Page IndexPanel\r\n */\r\n\r\ntype ListingPageIndexPanelProps = {\r\n\titems: SubjectAreaListingPageItemsModel;\r\n};\r\n\r\nexport const ListingPageIndexPanel: React.FC<ListingPageIndexPanelProps> = ({\r\n\titems,\r\n}) => {\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{items && (\r\n\t\t\t\t<div>\r\n\t\t\t\t\t{Object.entries(items).map(([letter, sectionItems]) => (\r\n\t\t\t\t\t\t<IndexSectionWrapper key={letter}>\r\n\t\t\t\t\t\t\t<IndexHeading>{letter}</IndexHeading>\r\n\t\t\t\t\t\t\t<IndexSection>\r\n\t\t\t\t\t\t\t\t{sectionItems.map((item: SubjectAreaListingPageItem, index) => (\r\n\t\t\t\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t\t\t\t<IndexSectionItem\r\n\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\tshowLinkIcon={false}\r\n\t\t\t\t\t\t\t\t\t\t\tto={item.url}\r\n\t\t\t\t\t\t\t\t\t\t\texternal={false}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{item.image && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<img\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsrc={item.image.src}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsrcSet={item.image.srcSet}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talt={item.image.alt}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{item.name}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t</IndexSectionItem>\r\n\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t</IndexSection>\r\n\t\t\t\t\t\t</IndexSectionWrapper>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n","/**\r\n * NVseSubjectAreaListingPage - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\nimport { px2rem } from 'theme/utils';\r\n\r\nexport const Div = styled.div``;\r\n\r\nexport const ListingPageIndexPanelWrapper = styled.div`\r\n\tmargin-top: ${(props) => props.theme.spacing.space5}rem;\r\n\tmargin-bottom: ${px2rem(150)};\r\n\t${mediaQueries.phone} {\r\n\t\tmargin-top: ${(props) => props.theme.spacing.space3}rem;\r\n\t\tmargin-bottom: ${px2rem(253)};\r\n\t}\r\n`;\r\n","import EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport { ListingPageIndexPanel } from 'components/Panels/ListingPageIndexPanel';\r\nimport React, { useContext, useState } from 'react';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { ViewType } from 'types/enums';\r\nimport { NVseSubjectAreaListingPageModel } from './NVseSubjectAreaListingPage.model';\r\nimport ListingPageGrantsHeader from 'components/ListingPageGrantsHeader';\r\nimport { ListingPageIndexPanelWrapper } from './NVseSubjectAreaListingPage.styles';\r\n\r\n/**\r\n * # Listningssida för ämnen\r\n * Modeltype:<code>NVseSubjectAreaListingPage</code>\r\n *\r\n * [API contract](https://consid.atlassian.net/wiki/spaces/NNN/pages/2233892865/NVseSubjectAreaListingPage)\r\n *\r\n * Landningssida för webbplatsens ämnesomrÃ¥den\r\n */\r\nconst NVseSubjectAreaListingPage: React.FC<NVseSubjectAreaListingPageModel> = ({\r\n\theading,\r\n\tpreamble,\r\n\tbottomItems,\r\n\tepi,\r\n\tsubjectAreaListingPageItems,\r\n\ttopItems,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n\tthemeTop,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\t// TODO: hardcoded text\r\n\tconst showMoreLabel = 'Visa fler';\r\n\r\n\tlet lastBlockType = BlockType.Element;\r\n\tlet blockTypeBefore_bottomItems: BlockType = lastBlockType;\r\n\r\n\tif (topItems && topItems.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\ttopItems,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tif (\r\n\t\tsubjectAreaListingPageItems &&\r\n\t\tObject.keys(subjectAreaListingPageItems).length > 0\r\n\t) {\r\n\t\tlastBlockType = BlockType.Element;\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tif (bottomItems && bottomItems.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\tbottomItems,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t}\r\n\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<ListingPageGrantsHeader\r\n\t\t\t\theading={heading}\r\n\t\t\t\theadingLevel={1}\r\n\t\t\t\tpreamble={preamble}\r\n\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\tthemeTop={themeTop}\r\n\t\t\t\tthemeContext={themeContext}\r\n\t\t\t\tisSubjectAreaPage={true}\r\n\t\t\t></ListingPageGrantsHeader>\r\n\t\t\t<ListingPageIndexPanelWrapper>\r\n\t\t\t\t{subjectAreaListingPageItems &&\r\n\t\t\t\t\tObject.keys(subjectAreaListingPageItems).length > 0 && (\r\n\t\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t\t<ListingPageIndexPanel\r\n\t\t\t\t\t\t\t\titems={subjectAreaListingPageItems}\r\n\t\t\t\t\t\t\t></ListingPageIndexPanel>\r\n\t\t\t\t\t\t</Grid>\r\n\t\t\t\t\t)}\r\n\t\t\t</ListingPageIndexPanelWrapper>\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default NVseSubjectAreaListingPage;\r\n","import React, { useContext, useEffect, useState } from 'react';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport { NVseSubjectAreaPageModel } from './NVseSubjectAreaPage.model';\r\nimport PageTopBanner from 'components/PageTopBanner';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\nimport { FragmentModelTypes } from 'types/fragments';\r\nimport {\r\n\tPageOverviewBanner,\r\n\tPageOverviewContent,\r\n} from '../NVseThemePage/NVseThemePage.styles';\r\nimport Button from 'components/Button';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport MegaMenu from 'components/MegaMenu';\r\nimport { NavigationItem } from 'types/epi';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectLocalization } from 'store/modules/model';\r\nimport { translate } from 'utils/helper-utils';\r\nimport {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport {\r\n\tgetBlockBaseMenuItems,\r\n\tgetBlockBaseSections,\r\n\tOnPageNavigationContent,\r\n} from 'components/Panels/OnPageNavigationContent';\r\nimport { ThemeContext } from 'styled-components';\r\n\r\n/**\r\n * # ÄmnesomrÃ¥dessida\r\n * Modeltype:<code>NVseArticlePage</code>\r\n *\r\n * [API contract](https://consid.atlassian.net/wiki/spaces/NNN/pages/2234417153/NVseSubjectAreaPage)\r\n *\r\n * En sidtyp för ett specifikt ämnesomrÃ¥de\r\n */\r\nconst NVseSubjectAreaPage: React.FC<NVseSubjectAreaPageModel> = ({\r\n\tmainImage,\r\n\tthemeTop,\r\n\tdecal,\r\n\theading,\r\n\tlastReviewed,\r\n\tshowReviewDate,\r\n\tpreamble,\r\n\ttextAsModel,\r\n\tbottomItems,\r\n\tepi,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst [isMenuOpen, setIsMenuOpen] = useState(false);\r\n\tconst [sections, setSections] = useState<string[]>([]);\r\n\tconst [menuIndex, setMenuIndex] = useState<NavigationItem[]>([]);\r\n\tconst localization = useSelector(selectLocalization);\r\n\r\n\tconst ref = React.createRef<any>();\r\n\r\n\tconst findOnPageLabel = translate(\r\n\t\t'/frontend/pages/findonpage',\r\n\t\t'Find on page',\r\n\t\tlocalization\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst expanderModels = getBlockBaseSections(bottomItems);\r\n\t\tconst sectionStrings = expanderModels.map((item) => item.onPageMenuHeading);\r\n\r\n\t\tif (sectionStrings.length > 0) {\r\n\t\t\tconst menuIndexRoot = getBlockBaseMenuItems(sectionStrings);\r\n\t\t\tsetMenuIndex(menuIndexRoot);\r\n\t\t\tsetSections(sectionStrings);\r\n\t\t} else {\r\n\t\t\tsetMenuIndex([]);\r\n\t\t\tsetSections([]);\r\n\t\t}\r\n\t}, [bottomItems]);\r\n\r\n\tconst onCloseMenuEvent = (userClosed: boolean) => {\r\n\t\tsetIsMenuOpen(false);\r\n\t\tif (userClosed && ref.current) {\r\n\t\t\tref.current.focus();\r\n\t\t}\r\n\t};\r\n\r\n\tconst onOpenMenu = () => {\r\n\t\tsetIsMenuOpen(true);\r\n\t};\r\n\r\n\tlet lastBlockType = BlockType.Unknown;\r\n\tlet blockTypeBefore_bottomItems = BlockType.Element;\r\n\r\n\tif (textAsModel && textAsModel.fragments.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\ttextAsModel.fragments,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<PageTopBanner\r\n\t\t\t\tmainImage={mainImage}\r\n\t\t\t\tthemeTop={themeTop}\r\n\t\t\t\tdecal={decal}\r\n\t\t\t\tsubheading=\"\"\r\n\t\t\t\theading={heading}\r\n\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\tmainImage_htmlAttributes={_properties?.mainImage}\r\n\t\t\t\theadingLevel={1}\r\n\t\t\t></PageTopBanner>\r\n\r\n\t\t\t{sections.length > 1 && (\r\n\t\t\t\t<PageOverviewBanner>\r\n\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t<PageOverviewContent>\r\n\t\t\t\t\t\t\t<nav>\r\n\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\t\t\t\tonClick={onOpenMenu}\r\n\t\t\t\t\t\t\t\t\tvariant={ButtonVariant.Tertiary}\r\n\t\t\t\t\t\t\t\t\taria-expanded={isMenuOpen}\r\n\t\t\t\t\t\t\t\t\taria-haspopup=\"dialog\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{findOnPageLabel}\r\n\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t</nav>\r\n\t\t\t\t\t\t</PageOverviewContent>\r\n\t\t\t\t\t</Grid>\r\n\t\t\t\t</PageOverviewBanner>\r\n\t\t\t)}\r\n\r\n\t\t\t<Space top={themeContext.spacing.getElement()} bottom={spaceAfterLast}>\r\n\t\t\t\t<OnPageNavigationContent\r\n\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\theading={null}\r\n\t\t\t\t\theading_htmlAttributes={null}\r\n\t\t\t\t\tlastReviewed={lastReviewed}\r\n\t\t\t\t\tshowReviewDate={showReviewDate}\r\n\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t\ttextAsModel={textAsModel}\r\n\t\t\t\t\ttextAsModel_htmlAttributes={_properties?.mainBody}\r\n\t\t\t\t\tsections={sections}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t></OnPageNavigationContent>\r\n\r\n\t\t\t\t<EpiFragments\r\n\t\t\t\t\tpreviousBlockType={blockTypeBefore_bottomItems}\r\n\t\t\t\t\tepi={epi}\r\n\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\tfragments={bottomItems as FragmentModelTypes[]}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t/>\r\n\t\t\t</Space>\r\n\r\n\t\t\t{isMenuOpen && (\r\n\t\t\t\t<MegaMenu\r\n\t\t\t\t\titems={menuIndex}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\tonClose={onCloseMenuEvent}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default NVseSubjectAreaPage;\r\n","/**\r\n * ErrorHandler404Page\r\n */\r\n\r\nimport BannerLinks from 'components/Banners/BannerLinks';\r\nimport EpiFragments, {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport React, { useContext } from 'react';\r\nimport { ErrorHandler404PageModel } from './ErrorHandler404Page.model';\r\nimport Button from 'components/Button';\r\nimport { GrantsHeader } from 'components/Panels/GrantsHeader';\r\nimport { ThemeContext } from 'styled-components';\r\n\r\nconst ErrorHandler404Page: React.FC<ErrorHandler404PageModel> = ({\r\n\theading,\r\n\tpreamble,\r\n\thomeLink,\r\n\ttextAsModel,\r\n\tbottomItems,\r\n\tpopularList,\r\n\tepi,\r\n\t_properties,\r\n\tdisableCustomHeadingLogic\r\n}) => {\r\n\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\t// figure out the last block type, so we know the bottom padding (space between last element and footer)\r\n\tlet lastBlockType = BlockType.Element;\r\n\tlet blockTypeBefore_bottomItems: BlockType = lastBlockType;\r\n\tlet blockTypeBefore_popularList: BlockType = lastBlockType;\r\n\r\n\tif (textAsModel != null && textAsModel.fragments.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(textAsModel.fragments, themeContext, disableCustomHeadingLogic);\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t\tblockTypeBefore_popularList = lastBlockType;\r\n\t}\r\n\r\n\tif (bottomItems != null && bottomItems.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(bottomItems, themeContext, disableCustomHeadingLogic);\r\n\t\tblockTypeBefore_popularList = lastBlockType;\r\n\t}\r\n\r\n\tif (popularList && popularList.items.length > 0) {\r\n\t\tlastBlockType = BlockType.SectionBanner;\r\n\t}\r\n\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\tconst spaceBefore_popularList = getSpaceToAddBefore(\r\n\t\tblockTypeBefore_popularList,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\treturn (\r\n\t\t<Space top={themeContext.spacing.getPageTopPadding()} bottom={spaceAfterLast}>\r\n\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t<GrantsHeader\r\n\t\t\t\t\theadingLevel={1}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t></GrantsHeader>\r\n\t\t\t</Grid>\r\n\r\n\t\t\t{textAsModel != null && textAsModel.fragments.length > 0 && (\r\n\t\t\t\t<EpiFragments\r\n\t\t\t\t\tpreviousBlockType={BlockType.Element}\r\n\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\tepi={epi}\r\n\t\t\t\t\tfragments={textAsModel.fragments}\r\n\t\t\t\t\thtmlAttributes={_properties?.mainBody}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\r\n\t\t\t{homeLink && homeLink.url && homeLink.heading && (\r\n\t\t\t\t<Grid paddingTop={true} paddingBottom={false}>\r\n\t\t\t\t\t<Button variant={ButtonVariant.Primary} to={homeLink.url}>\r\n\t\t\t\t\t\t{homeLink.heading}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t</Grid>\r\n\t\t\t)}\r\n\r\n\t\t\t{bottomItems != null && bottomItems.length > 0 && (\r\n\t\t\t\t<EpiFragments\r\n\t\t\t\t\tpreviousBlockType={blockTypeBefore_bottomItems}\r\n\t\t\t\t\tepi={epi}\r\n\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\tfragments={bottomItems}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\r\n\t\t\t{popularList != null && popularList.items.length > 0 && (\r\n\t\t\t\t<Space top={spaceBefore_popularList}>\r\n\t\t\t\t\t<BannerLinks\r\n\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\tlinks={popularList.items}\r\n\t\t\t\t\t\theading={popularList.heading}\r\n\t\t\t\t\t></BannerLinks>\r\n\t\t\t\t</Space>\r\n\t\t\t)}\r\n\t\t</Space>\r\n\t);\r\n};\r\n\r\nexport default ErrorHandler404Page;\r\n","/**\r\n * NVseEventPage - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\n\r\nexport const TopImage = styled.img`\r\n\twidth: 100%;\r\n\tobject-fit: cover;\r\n\tmax-height: 640px;\r\n`;\r\n\r\nexport const ColumnContainer = styled.div`\r\n\tdisplay: flex;\r\n`;\r\n\r\nexport const AsideBoxStyle = styled.aside`\r\n\tbackground-color: ${(props) => props.theme.colors.white};\r\n\tpadding: ${(props) => props.theme.spacing.space4}rem\r\n\t\t${(props) => props.theme.spacing.space4}rem;\r\n`;\r\n","/**\r\n * InfoBox - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\n\r\nexport const EventInfoBoxContainer = styled.div`\r\n\twidth: 100%;\r\n\t${props => props.theme.typography.style6.getStyle()};\t\t\r\n`;\r\n\r\nexport const LabelStyle = styled.label`\r\n\tfont-weight: bold;\r\n`;\r\n\r\nexport const SpanStyle = styled.span`\r\n\tdisplay: block;\r\n`;\r\n\r\nexport const SectionStyle = styled.div`\r\n\tpadding-bottom: ${props => props.theme.spacing.space2}rem;\r\n`;\r\n\r\nexport const ButtonContainer = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tmargin-top: ${props => props.theme.spacing.space2}rem;\r\n\r\n\t> *:first-child {\r\n\t\tpadding-bottom: ${props => props.theme.spacing.space2}rem;\r\n\t}\r\n`;\r\n\r\nexport const ButtonWrapper = styled.div``;\r\n","import Button from 'components/Button';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport React from 'react';\r\nimport {\r\n\tconvertDateWithMonthWrittenOut,\r\n\tgetTimeFromDate,\r\n} from 'utils/helper-utils';\r\nimport {\r\n\tEventInfoBoxContainer,\r\n\tLabelStyle,\r\n\tButtonContainer,\r\n\tButtonWrapper,\r\n\tSpanStyle,\r\n\tSectionStyle,\r\n} from './EventInfoBox.styles';\r\n\r\nexport interface Props {\r\n\teventStartDate: string;\r\n\teventType: string;\r\n\teventPlace: string;\r\n\totherInfo: string;\r\n\tinfoBoxTitle: string;\r\n\tinfoBoxDateHeading: string;\r\n\tinfoBoxLocationHeading: string;\r\n\totherInfoHeading: string;\r\n\tregistrationLink: LinkType;\r\n\tiCalLink: LinkType;\r\n\tduration: string;\r\n\tdurationLabel: string;\r\n\teventTimeLabel: string;\r\n}\r\n\r\nconst EventInfoBox = ({\r\n\teventStartDate,\r\n\tduration,\r\n\tdurationLabel,\r\n\teventTimeLabel,\r\n\teventType,\r\n\teventPlace,\r\n\totherInfo,\r\n\tinfoBoxTitle,\r\n\tinfoBoxDateHeading,\r\n\tinfoBoxLocationHeading,\r\n\totherInfoHeading,\r\n\tregistrationLink,\r\n\tiCalLink,\r\n}: Props) => {\r\n\treturn (\r\n\t\t<EventInfoBoxContainer>\r\n\t\t\t{infoBoxTitle && (\r\n\t\t\t\t<Heading level={2} styleLevel={4} zeroBottom={false}>\r\n\t\t\t\t\t{infoBoxTitle}\r\n\t\t\t\t</Heading>\r\n\t\t\t)}\r\n\r\n\t\t\t{eventStartDate && (\r\n\t\t\t\t<SectionStyle>\r\n\t\t\t\t\t<LabelStyle>{infoBoxDateHeading}</LabelStyle>\r\n\t\t\t\t\t<SpanStyle>\r\n\t\t\t\t\t\t{convertDateWithMonthWrittenOut(eventStartDate)}\r\n\t\t\t\t\t</SpanStyle>\r\n\t\t\t\t\t<SpanStyle>\r\n\t\t\t\t\t\t{eventTimeLabel} {getTimeFromDate(eventStartDate)}\r\n\t\t\t\t\t</SpanStyle>\r\n\t\t\t\t</SectionStyle>\r\n\t\t\t)}\r\n\r\n\t\t\t{duration && (\r\n\t\t\t\t<SectionStyle>\r\n\t\t\t\t\t<LabelStyle>{durationLabel}</LabelStyle>\r\n\t\t\t\t\t<SpanStyle>{duration}</SpanStyle>\r\n\t\t\t\t</SectionStyle>\r\n\t\t\t)}\r\n\r\n\t\t\t{eventPlace && (\r\n\t\t\t\t<SectionStyle>\r\n\t\t\t\t\t<LabelStyle>{infoBoxLocationHeading}</LabelStyle>\r\n\t\t\t\t\t<SpanStyle>{eventPlace}</SpanStyle>\r\n\t\t\t\t</SectionStyle>\r\n\t\t\t)}\r\n\r\n\t\t\t{otherInfo && (\r\n\t\t\t\t<SectionStyle>\r\n\t\t\t\t\t<LabelStyle>{otherInfoHeading}</LabelStyle>\r\n\t\t\t\t\t<SpanStyle>{otherInfo}</SpanStyle>\r\n\t\t\t\t</SectionStyle>\r\n\t\t\t)}\r\n\r\n\t\t\t<ButtonContainer>\r\n\t\t\t\t{registrationLink && (\r\n\t\t\t\t\t<ButtonWrapper>\r\n\t\t\t\t\t\t<Button to={registrationLink.url} showLinkIcon={false}>\r\n\t\t\t\t\t\t\t{registrationLink.heading}\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</ButtonWrapper>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{iCalLink && (\r\n\t\t\t\t\t<ButtonWrapper>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tto={iCalLink.url}\r\n\t\t\t\t\t\t\tvariant={ButtonVariant.Tertiary}\r\n\t\t\t\t\t\t\tshowLinkIcon={false}\r\n\t\t\t\t\t\t\texternal={iCalLink.isFile}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{iCalLink.heading}\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</ButtonWrapper>\r\n\t\t\t\t)}\r\n\t\t\t</ButtonContainer>\r\n\t\t</EventInfoBoxContainer>\r\n\t);\r\n};\r\n\r\nexport default EventInfoBox;\r\n","/**\r\n * NVseEventPage\r\n */\r\n\r\nimport React, { useContext } from 'react';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport { NVseEventPageModel } from './NVseEventPage.model';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport { AsideBoxStyle } from './NVseEventPage.styles';\r\nimport {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n\tgetSpaceToAddBefore,\r\n\tOptions,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport EventInfoBox from 'components/EventInfoBox';\r\nimport { GrantsHeader } from 'components/Panels/GrantsHeader';\r\nimport { ColumnPageWithSidebar } from 'components/Panels/ColumnPageWithSidebar';\r\nimport { TopImage } from 'pages/NVseArticlePage/NVseArticlePage.styles';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { useImageTitle } from 'hooks/useImageTitle';\r\nimport EditableField from 'components/EditableField/EditableField';\r\n\r\n/**\r\n * # Evenemangssida\r\n * Modeltype:<code>NVseEventPage</code>\r\n *\r\n * [API contract](https://consid.atlassian.net/wiki/spaces/NNN/pages/2460057660/NVseEventPage)\r\n *\r\n * En sida för att beskriva ett specifikt evenemang, inkl datum för evenemanget\r\n */\r\nconst NVseEventPage: React.FC<NVseEventPageModel> = ({\r\n\teventStartDate,\r\n\tduration,\r\n\tdurationLabel,\r\n\teventType,\r\n\teventPlace,\r\n\totherInfo,\r\n\tinfoBoxTitle,\r\n\tinfoBoxDateHeading,\r\n\tinfoBoxLocationHeading,\r\n\teventTimeLabel,\r\n\totherInfoHeading,\r\n\tregistrationLink,\r\n\tiCalLink,\r\n\ttextAsModel,\r\n\theading,\r\n\tpreamble,\r\n\tbottomItems,\r\n\tmainImage,\r\n\tepi,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst title = useImageTitle(\r\n\t\tmainImage?.photographer,\r\n\t\tmainImage?.agency,\r\n\t\tmainImage?.illustrator\r\n\t);\r\n\r\n\t// figure out the last block type, so we know the bottom padding (space between last element and footer)\r\n\tlet lastBlockType = BlockType.Element;\r\n\tlet blockTypeBefore_bottomItems: BlockType = lastBlockType;\r\n\r\n\tif (textAsModel.fragments.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\ttextAsModel.fragments,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\tif (bottomItems.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\tbottomItems,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t}\r\n\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\tconst options = {\r\n\t\tepi: epi,\r\n\t\theadingLevel: 2,\r\n\t\tinsideGrid: true,\r\n\t\tinsideCell: true,\r\n\t\tinsideInnerGrid: true,\r\n\t} as Options;\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<EditableField opeProperty={_properties?.mainImage}>\r\n\t\t\t\t{mainImage && (\r\n\t\t\t\t\t<TopImage\r\n\t\t\t\t\t\talt={mainImage.alt}\r\n\t\t\t\t\t\tsrc={mainImage.src}\r\n\t\t\t\t\t\tsrcSet={mainImage.srcSet}\r\n\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\t\t\t</EditableField>\r\n\r\n\t\t\t<Space top={themeContext.spacing.getElement()} bottom={spaceAfterLast}>\r\n\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t<GrantsHeader\r\n\t\t\t\t\t\tcolumns={8}\r\n\t\t\t\t\t\theadingLevel={1}\r\n\t\t\t\t\t\theading={heading}\r\n\t\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\t></GrantsHeader>\r\n\t\t\t\t</Grid>\r\n\r\n\t\t\t\t<Grid paddingTop={true} paddingBottom={false}>\r\n\t\t\t\t\t<ColumnPageWithSidebar\r\n\t\t\t\t\t\toptions={options}\r\n\t\t\t\t\t\ttextAsModel={textAsModel}\r\n\t\t\t\t\t\tlink={null}\r\n\t\t\t\t\t\tbottomItems={bottomItems}\r\n\t\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t\t\tmainBody_htmlAttributes={_properties?.mainBody}\r\n\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<AsideBoxStyle>\r\n\t\t\t\t\t\t\t<EventInfoBox\r\n\t\t\t\t\t\t\t\teventStartDate={eventStartDate}\r\n\t\t\t\t\t\t\t\tduration={duration}\r\n\t\t\t\t\t\t\t\tdurationLabel={durationLabel}\r\n\t\t\t\t\t\t\t\teventTimeLabel={eventTimeLabel}\r\n\t\t\t\t\t\t\t\teventType={eventType}\r\n\t\t\t\t\t\t\t\teventPlace={eventPlace}\r\n\t\t\t\t\t\t\t\totherInfo={otherInfo}\r\n\t\t\t\t\t\t\t\tinfoBoxTitle={infoBoxTitle}\r\n\t\t\t\t\t\t\t\tinfoBoxDateHeading={infoBoxDateHeading}\r\n\t\t\t\t\t\t\t\tinfoBoxLocationHeading={infoBoxLocationHeading}\r\n\t\t\t\t\t\t\t\totherInfoHeading={otherInfoHeading}\r\n\t\t\t\t\t\t\t\tregistrationLink={registrationLink}\r\n\t\t\t\t\t\t\t\tiCalLink={iCalLink}\r\n\t\t\t\t\t\t\t></EventInfoBox>\r\n\t\t\t\t\t\t</AsideBoxStyle>\r\n\t\t\t\t\t</ColumnPageWithSidebar>\r\n\t\t\t\t</Grid>\r\n\t\t\t</Space>\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default NVseEventPage;\r\n","/**\r\n * EventListItem - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\nimport Link from 'components/Boilerplate/Link';\r\nimport { getLinkArrowStyle } from 'theme/styles';\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport { px2rem } from 'theme/utils';\r\n\r\nexport const CalendarEventItemLinkContainer = styled(Link)`\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\talign-items:center;\r\n\tbackground-color: ${props => props.theme.colors.white};\r\n\r\n\tmargin-bottom: ${props => props.theme.spacing.space2}rem;\r\n\r\n\t&:after {\r\n\t\tcontent:none;\r\n\t};\t \r\n\r\n\t&:after {\r\n\t\tcontent:none;\r\n\t};\t \r\n\r\n\t&:hover {\r\n\t\ttext-decoration: none;\r\n\t}\t\r\n\t\t\r\n`;\r\n\r\nexport const CalendarDateContainer = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\talign-items: center;\r\n\talign-self: normal;\r\n\r\n\tborder-right: 1px solid ${props => props.theme.colors.black}20;\r\n\r\n\tmargin: ${props => props.theme.spacing.space2}rem 0;\r\n\tflex: 0 0 122px;\r\n\r\n\t> :nth-child(1) {\r\n\t\t${props => props.theme.typography.style9.getStyle()};\t\t\r\n\t}\r\n\t> :nth-child(2) {\r\n\t\t${props => props.theme.typography.style2.getStyle()};\t\t\r\n\t\tcolor: ${props => props.theme.palette.text.primary};\t\t\t\r\n\t\tfont-weight: 700;\r\n\t}\r\n\t> :nth-child(3) {\r\n\t\t${props => props.theme.typography.style9.getStyle()};\t\t\r\n\t}\r\n`;\r\n\r\nexport const CalendarEventItemInformationContainer = styled.div`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tflex: 1 1 auto;\r\n\r\n\tpadding:${props => props.theme.spacing.space2}rem ${props => props.theme.spacing.space4}rem;\r\n\r\n`;\r\n\r\n\r\nexport const CalendarInformaitonDuration = styled.div`\r\n\t\t${props => props.theme.typography.style9.getStyle()};\t\t\r\n\tmargin-bottom: ${props => props.theme.spacing.space1}rem;\r\n`;\r\n\r\n\r\nexport const CalendarHeading = styled(Heading)`\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tfont-size: ${px2rem(16)};\r\n\t}\t\r\n\r\n\t${getLinkArrowStyle()}\r\n\r\n\t${CalendarEventItemLinkContainer}:hover &,${CalendarEventItemLinkContainer}:focus & {\r\n\t\ttext-decoration: underline;\r\n\t\t&:after {\r\n\t\t\topacity: 1;\r\n }\t\t\r\n \t}\t\r\n`;\r\n","/**\r\n * EventListItem\r\n */\r\n\r\nimport { CommonDecalStyle } from 'components/Panels/Panels.styles';\r\nimport React, { useContext } from 'react';\r\nimport { ThemeContext } from 'styled-components';\r\nimport {\r\n\tcapitalizeFirstLetter,\r\n\tgetLongWeekdayName,\r\n\tgetShortTimeName,\r\n} from 'utils/helper-utils';\r\nimport {\r\n\tCalendarDateContainer,\r\n\tCalendarEventItemLinkContainer,\r\n\tCalendarEventItemInformationContainer,\r\n\tCalendarInformaitonDuration,\r\n\tCalendarHeading,\r\n} from './EventListItem.styles';\r\nimport { CalendarEvent } from './NVseEventsListingPage';\r\n\r\nconst EventListItem: React.FC<CalendarEvent> = ({\r\n\tdecal,\r\n\theading,\r\n\tstartDate,\r\n\tduration,\r\n\tlink,\r\n\theadingLevel,\r\n}) => {\r\n\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\treturn (\r\n\t\t<CalendarEventItemLinkContainer to={link.url} aria-label={heading}>\r\n\t\t\t<CalendarDateContainer>\r\n\t\t\t\t<span>{capitalizeFirstLetter(getLongWeekdayName(startDate))}</span>\r\n\t\t\t\t<span>{startDate.getDate()}</span>\r\n\t\t\t\t<span>{getShortTimeName(startDate)}</span>\r\n\t\t\t</CalendarDateContainer>\r\n\r\n\t\t\t<CalendarEventItemInformationContainer>\r\n\t\t\t\t{decal && <CommonDecalStyle>{decal}</CommonDecalStyle>}\r\n\t\t\t\t{duration && (\r\n\t\t\t\t\t<CalendarInformaitonDuration>\r\n\t\t\t\t\t\t{duration}\r\n\t\t\t\t\t</CalendarInformaitonDuration>\r\n\t\t\t\t)}\r\n\t\t\t\t{heading && (\r\n\t\t\t\t\t<CalendarHeading level={headingLevel} zeroBottom={true} styleLevel={4} color={themeContext.colors.secondaryBlue}>\r\n\t\t\t\t\t\t{heading}\r\n\t\t\t\t\t</CalendarHeading>\r\n\t\t\t\t)}\r\n\r\n\t\t\t</CalendarEventItemInformationContainer>\r\n\t\t</CalendarEventItemLinkContainer>\r\n\t);\r\n};\r\n\r\nexport default EventListItem;\r\n","/**\r\n * NVseEventsListingPage - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\n\r\nexport const Div = styled.div``;\r\n\r\nexport const CalendarEventListGroup = styled.ol`\r\n\tlist-style-type: none;\r\n\tpadding: 0px;\r\n\tmargin: 0px;\r\n\tmargin-top: ${props => props.theme.spacing.space4}rem;\r\n\t> * li {\r\n\t\tlist-style-type: none;\r\n\t}\r\n\r\n\r\n\t> :first-child {\r\n\t\tmargin-top: 0;\r\n\t}\r\n`;\r\nexport const CalendarEventListMonthGroup = styled.li`\r\n\tmargin-top: ${props => props.theme.spacing.space6}rem;\r\n`;\r\n\r\nexport const CalendarEventListHeading = styled.div`\r\n\tbackground-color: ${props => props.theme.colors.blue2};\r\n\tpadding: ${props => props.theme.spacing.space4}rem;\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tpadding: ${props => props.theme.spacing.space2}rem;\r\n\t}\r\n`;\r\n\r\nexport const CalendarEventListContainer = styled.ol`\r\n\tpadding: 0;\r\n\tmargin: 0;\r\n\tmargin-top: ${props => props.theme.spacing.space2}rem;\r\n\t> :last-child {\r\n\t\tmargin-bottom: 0;\r\n\t\tpadding-bottom: 0;\r\n\t\tborder: none;\r\n\t}\r\n`;\r\n","import EpiFragments, {\r\n\tBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport { GrantsHeader } from 'components/Panels/GrantsHeader';\r\nimport { Select } from 'components/Typography';\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport React, { useContext, useEffect, useState } from 'react';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { FragmentModelTypes } from 'types/fragments';\r\nimport { capitalizeFirstLetter, getLongMonthName } from 'utils/helper-utils';\r\nimport EventListItem from './EventListItem';\r\nimport { NVseEventsListingPageModel } from './NVseEventsListingPage.model';\r\nimport {\r\n\tCalendarEventListContainer,\r\n\tCalendarEventListGroup,\r\n\tCalendarEventListHeading,\r\n\tCalendarEventListMonthGroup,\r\n} from './NVseEventsListingPage.styles';\r\n\r\nexport type CalendarEvent = {\r\n\tdecal: string;\r\n\theading: string;\r\n\tstartDate: Date;\r\n\tendDate: Date;\r\n\tduration: string;\r\n\tlink: LinkType;\r\n\theadingLevel: number;\r\n};\r\n\r\ntype YearNode = {\r\n\tyear: number;\r\n\tmonths: MonthNode[];\r\n};\r\n\r\ntype MonthNode = {\r\n\tmonth: number;\r\n\tmonthName: string;\r\n\tevents: CalendarEvent[];\r\n};\r\n\r\n/**\r\n * # Kalendarium \r\n * Modeltype:<code>NVseEventsListingPage</code>\r\n * \r\n * [API contract](https://consid.atlassian.net/wiki/spaces/NNN/pages/2469462021/NVseEventsListingPage)\r\n * \r\n * En sida som listar kommande evenemang\r\n */\r\nconst NVseEventsListingPage: React.FC<NVseEventsListingPageModel> = ({\r\n\theading,\r\n\tpreamble,\r\n\tshowAllLabel,\r\n\tselectMonthLabel,\r\n\tevents,\r\n\tbottomItems,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic\r\n}) => {\r\n\tconst [fixedEvents, setFixedEvents] = useState<CalendarEvent[]>([]);\r\n\r\n\tconst [selectNodes, setSelectNodes] = useState<YearNode[]>([]);\r\n\tconst [selectedFilter, setSelectedFilter] = useState<string>();\r\n\tconst [filteredEvents, setFilteredEvents] = useState<YearNode[]>([]);\r\n\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst fixedEvents = events.map((item) => {\r\n\t\t\treturn {\r\n\t\t\t\tdecal: item.decal,\r\n\t\t\t\theading: item.heading,\r\n\t\t\t\tstartDate: new Date(item.startDate),\r\n\t\t\t\tendDate: new Date(item.endDate),\r\n\t\t\t\tduration: item.duration,\r\n\t\t\t\tlink: item.link,\r\n\t\t\t} as CalendarEvent;\r\n\t\t});\r\n\r\n\t\tconst sorted = fixedEvents.sort((item1, item2) => {\r\n\t\t\tif (item1.startDate < item2.startDate) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tif (item1.startDate > item2.startDate) {\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t});\r\n\r\n\t\tsetFixedEvents(sorted);\r\n\r\n\t\tconst grouped = groupItems(sorted);\r\n\t\tsetSelectNodes(grouped);\r\n\t}, [events]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!selectedFilter) {\r\n\t\t\tsetFilteredEvents(groupItems(fixedEvents));\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst selectedYear = new Date(selectedFilter).getFullYear();\r\n\t\tconst selectedMonth = new Date(selectedFilter).getMonth() + 1;\r\n\r\n\t\tconst filteredEvents = fixedEvents.filter((item) => {\r\n\t\t\tif (\r\n\t\t\t\titem.startDate.getFullYear() === selectedYear &&\r\n\t\t\t\titem.startDate.getMonth() + 1 === selectedMonth\r\n\t\t\t) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t});\r\n\r\n\t\tconst grouped = groupItems(filteredEvents);\r\n\r\n\t\t// Filter\r\n\t\tsetFilteredEvents(grouped);\r\n\t}, [fixedEvents, selectedFilter]);\r\n\r\n\tconst groupItems = (events: CalendarEvent[]): YearNode[] => {\r\n\t\t// Group by year and month\r\n\t\tlet yearNodes: YearNode[] = [];\r\n\r\n\t\tevents.forEach((item) => {\r\n\t\t\tconst year = item.startDate.getFullYear();\r\n\t\t\tconst month = item.startDate.getMonth() + 1;\r\n\r\n\t\t\t// Assure year\r\n\t\t\tlet yearNode = yearNodes.find((item) => item.year === year);\r\n\r\n\t\t\tif (!yearNode) {\r\n\t\t\t\tyearNode = {\r\n\t\t\t\t\tyear: year,\r\n\t\t\t\t\tmonths: [],\r\n\t\t\t\t} as YearNode;\r\n\t\t\t\tyearNodes.push(yearNode);\r\n\t\t\t}\r\n\r\n\t\t\t// Assure month\r\n\t\t\tlet monthNode = yearNode.months.find((item) => item.month === month);\r\n\t\t\tif (!monthNode) {\r\n\t\t\t\tmonthNode = {\r\n\t\t\t\t\tmonth: month,\r\n\t\t\t\t\tmonthName: capitalizeFirstLetter(getLongMonthName(item.startDate)),\r\n\t\t\t\t\tevents: [],\r\n\t\t\t\t} as MonthNode;\r\n\t\t\t\tyearNode.months.push(monthNode);\r\n\t\t\t}\r\n\r\n\t\t\tmonthNode.events.push(item);\r\n\t\t});\r\n\t\treturn yearNodes;\r\n\t};\r\n\r\n\tconst onFilterChanged = (event: React.ChangeEvent<HTMLSelectElement>) => {\r\n\t\tconst value = event.target.value;\r\n\t\tsetSelectedFilter(value);\r\n\t};\r\n\r\n\tlet lastBlockType = BlockType.Element;\r\n\tlet blockTypeBefore_bottomItems: BlockType = lastBlockType;\r\n\r\n\tif (fixedEvents.length > 0 || selectNodes.length > 0) {\r\n\t\tlastBlockType = BlockType.Element;\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\treturn (\r\n\t\t<Space top={themeContext.spacing.getPageTopPadding()} bottom={spaceAfterLast}>\r\n\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t<GrantsHeader\r\n\t\t\t\t\tcolumns={8}\r\n\t\t\t\t\theadingLevel={1}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t></GrantsHeader>\r\n\t\t\t</Grid>\r\n\r\n\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t{selectNodes.length > 0 && (\r\n\t\t\t\t\t<Space top={themeContext.spacing.getElement()}>\r\n\t\t\t\t\t\t<form>\r\n\t\t\t\t\t\t\t<label>{selectMonthLabel}</label>\r\n\t\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\t\tname=\"filter\"\r\n\t\t\t\t\t\t\t\tvalue={selectedFilter}\r\n\t\t\t\t\t\t\t\taria-label=\"Filter\"\r\n\t\t\t\t\t\t\t\tonChange={onFilterChanged}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<option value=\"\">{showAllLabel}</option>\r\n\r\n\t\t\t\t\t\t\t\t{selectNodes.length > 1 ? (\r\n\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t{selectNodes.map((yearItem, index) => {\r\n\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<optgroup key={index} label={yearItem.year.toString()}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{yearItem.months.map((item, index) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={`${yearItem.year}-${item.month}`}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item.monthName}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</option>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</optgroup>\r\n\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\tselectNodes[0].months.map((item, index) => {\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t<option\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={`${selectNodes[0].year}-${item.month}`}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{item.monthName}\r\n\t\t\t\t\t\t\t\t\t\t\t</option>\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t\t</form>\r\n\t\t\t\t\t</Space>\r\n\t\t\t\t)}\r\n\t\t\t\t{filteredEvents.length > 0 && (\r\n\t\t\t\t\t<CalendarEventListGroup>\r\n\t\t\t\t\t\t{filteredEvents.map((yearItem) => {\r\n\t\t\t\t\t\t\treturn yearItem.months.map((monthItem, index) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<CalendarEventListMonthGroup key={index}>\r\n\t\t\t\t\t\t\t\t\t\t<CalendarEventListHeading>\r\n\t\t\t\t\t\t\t\t\t\t\t<Heading level={2} styleLevel={4} zeroBottom={true}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{monthItem.monthName}\r\n\t\t\t\t\t\t\t\t\t\t\t\t<br />\r\n\t\t\t\t\t\t\t\t\t\t\t\t{yearItem.year}\r\n\t\t\t\t\t\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t\t\t\t\t</CalendarEventListHeading>\r\n\r\n\t\t\t\t\t\t\t\t\t\t<CalendarEventListContainer>\r\n\t\t\t\t\t\t\t\t\t\t\t{monthItem.events.map((item, index) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<li key={index}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<EventListItem\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{...item}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theadingLevel={3}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t></EventListItem>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t\t\t</CalendarEventListContainer>\r\n\t\t\t\t\t\t\t\t\t</CalendarEventListMonthGroup>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t</CalendarEventListGroup>\r\n\t\t\t\t)}\r\n\t\t\t</Grid>\r\n\r\n\t\t\t<EpiFragments\r\n\t\t\t\tpreviousBlockType={blockTypeBefore_bottomItems}\r\n\t\t\t\theadingLevel={2}\r\n\t\t\t\tfragments={bottomItems as FragmentModelTypes[]}\r\n\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t/>\r\n\t\t</Space>\r\n\t);\r\n};\r\n\r\nexport default NVseEventsListingPage;\r\n","/**\r\n * NVseRegulationPage - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\n\r\nexport const Div = styled.div``;\r\n\r\nexport const SidebarContainer = styled.aside`\r\n\tbackground-color: ${props => props.theme.colors.white};\r\n\tpadding: ${props => props.theme.spacing.space4}rem ${props => props.theme.spacing.space4}rem;\r\n\r\n\tul {\r\n\t\tlist-style-type: none;\r\n\t\tpadding: 0px;\r\n\t\tmargin: 0px;\r\n\r\n\t\t> li:last-child {\r\n\t\t\tmargin-bottom: 0rem;\r\n\t\t}\r\n\t}\r\n\r\n\tli {\r\n\t\tmargin-bottom: ${props => props.theme.spacing.space2}rem;\r\n\t}\r\n`;\r\n","import styled from 'styled-components';\r\n\r\nexport const RegulationHistoryDescriptionStyle = styled.div`\r\n\t> span {\r\n\t\tdisplay: block;\r\n\t\tmargin-bottom: ${props => props.theme.spacing.space1}rem;\r\n\t\ttext-transform: uppercase;\r\n\t}\r\n`;\r\n","import Link from 'components/Boilerplate/Link';\r\nimport React from 'react';\r\nimport { RegulationHistory } from './NVseRegulationPage.model';\r\nimport { RegulationHistoryDescriptionStyle } from './RegulationHistoryDescription.styles';\r\n\r\n/**\r\n * RegulationHistoryDescription\r\n */\r\nexport const RegulationHistoryDescription: React.FC<RegulationHistory> = ({\r\n\toptionalTitle,\r\n\tregulationId,\r\n\tregulationType,\r\n\tdescription,\r\n\trelatedRegulationLinksLabel,\r\n\trelatedRegulationLinks,\r\n}) => {\r\n\tconst title = optionalTitle\r\n\t\t? optionalTitle\r\n\t\t: `${regulationId} - ${regulationType}`;\r\n\r\n\treturn (\r\n\t\t<RegulationHistoryDescriptionStyle>\r\n\t\t\t<span>{title}</span>\r\n\t\t\t{description && <p>{description}</p>}\r\n\t\t\t{relatedRegulationLinks.length > 0 && relatedRegulationLinksLabel && (\r\n\t\t\t\t<span>{relatedRegulationLinksLabel}</span>\r\n\t\t\t)}\r\n\r\n\t\t\t{relatedRegulationLinks.length > 0 && (\r\n\t\t\t\t<ul>\r\n\t\t\t\t\t{relatedRegulationLinks.map((item, index) => {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<li key={index}>\r\n\t\t\t\t\t\t\t\t<Link to={item.url} external={item.isFile}>\r\n\t\t\t\t\t\t\t\t\t{item.text}\r\n\t\t\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\t\t\t\t</ul>\r\n\t\t\t)}\r\n\t\t</RegulationHistoryDescriptionStyle>\r\n\t);\r\n};\r\n","import styled from 'styled-components';\r\n\r\nexport const RegulationHistoryNarrowStyle = styled.ul`\r\n\tborder-collapse: collapse;\r\n\tbackground-color: ${props => props.theme.colors.blue4};\r\n\t${props => props.theme.typography.style9.getStyle()};\t\t\r\n\tcolor: ${props => props.theme.palette.text.primary};\t\t\t\r\n\r\n\tlist-style-type: none;\r\n\tpadding: 0px;\r\n\tmargin: 0px;\r\n\r\n\tlabel {\r\n\t\tdisplay: block;\r\n\t\tfont-weight: bold;\r\n\t\ttext-transform: uppercase;\r\n\t}\r\n\r\n\tul {\r\n\t\tlist-style-type: none;\r\n\t\tpadding: 0px;\r\n\t\tmargin: 0px;\r\n\t}\r\n\r\n\tli {\r\n\t\tmargin-bottom: ${props => props.theme.spacing.space2}rem;\r\n\t}\r\n\r\n\t> li {\r\n\t\tpadding: ${props => props.theme.spacing.space2}rem;\r\n\t}\r\n\r\n\t> li:last-child {\r\n\t\tmargin-bottom: 0rem;\r\n\t}\r\n\r\n\t> li:nth-child(odd) {\r\n\t\tbackground-color: ${props => props.theme.colors.blue2};\r\n\t}\r\n`;\r\n","import Link from 'components/Boilerplate/Link';\r\nimport React from 'react';\r\nimport { RegulationHistoryDescription } from './RegulationHistoryDescription';\r\nimport { RegulationHistoryNarrowStyle } from './RegulationHistoryNarrow.styles';\r\nimport { RegulationHistoryTableProps } from './RegulationHistoryTable';\r\n\r\n/**\r\n * RegulationHistoryNarrow\r\n * (mobile view)\r\n */\r\nexport const RegulationHistoryNarrow: React.FC<RegulationHistoryTableProps> = ({\r\n\ttitleLabel,\r\n\tvalidFromDateLabel,\r\n\tdownloadPdfLinkLabel,\r\n\titems,\r\n}) => {\r\n\treturn (\r\n\t\t<RegulationHistoryNarrowStyle>\r\n\t\t\t{items.map((item, index) => {\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<li key={index}>\r\n\t\t\t\t\t\t<label>{titleLabel}</label>\r\n\t\t\t\t\t\t<RegulationHistoryDescription\r\n\t\t\t\t\t\t\t{...item}\r\n\t\t\t\t\t\t></RegulationHistoryDescription>\r\n\t\t\t\t\t\t<label>{validFromDateLabel}</label>\r\n\t\t\t\t\t\t{new Date(item.validFromDate).toLocaleDateString()}\r\n\t\t\t\t\t\t<label>{downloadPdfLinkLabel}</label>\r\n\t\t\t\t\t\t{item.downloadPdfLink && (\r\n\t\t\t\t\t\t\t<Link\r\n\t\t\t\t\t\t\t\tto={item.downloadPdfLink.url}\r\n\t\t\t\t\t\t\t\texternal={item.downloadPdfLink.isFile}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{item.downloadPdfLink.heading}\r\n\t\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</li>\r\n\t\t\t\t);\r\n\t\t\t})}\r\n\t\t</RegulationHistoryNarrowStyle>\r\n\t);\r\n};\r\n","import styled from 'styled-components';\r\n\r\nexport const RegulationHistoryTableStyle = styled.table`\r\n\tborder-collapse: collapse;\r\n\tbackground-color: ${(props) => props.theme.colors.blue4};\r\n\t${(props) => props.theme.typography.style9.getStyle()};\r\n\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\r\n\tul {\r\n\t\tlist-style-type: none;\r\n\t\tpadding: 0px;\r\n\t\tmargin: 0px;\r\n\t\t> li:last-child {\r\n\t\t\tmargin-bottom: 0rem;\r\n\t\t}\r\n\t}\r\n\r\n\tli {\r\n\t\tmargin-bottom: ${(props) => props.theme.spacing.space2}rem;\r\n\t}\r\n\tth {\r\n\t\ttext-transform: uppercase;\r\n\t}\r\n\r\n\ttd,\r\n\tth {\r\n\t\tborder-right: solid 1px ${(props) => props.theme.colors.black}40;\r\n\t\tborder-left: solid 1px ${(props) => props.theme.colors.black}40;\r\n\t\tpadding: ${(props) => props.theme.spacing.space2}rem;\r\n\t}\r\n\r\n\ttd:nth-child(1n + 2),\r\n\tth:nth-child(1n + 2) {\r\n\t\twhite-space: nowrap;\r\n\t}\r\n\r\n\ttr {\r\n\t\tborder: none;\r\n\t}\r\n\r\n\ttd {\r\n\t\tvertical-align: top;\r\n\t}\r\n\r\n\ttbody > tr:nth-child(odd) {\r\n\t\tbackground-color: ${(props) => props.theme.colors.blue2};\r\n\t}\r\n`;\r\n","import Button from 'components/Button';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport React from 'react';\r\nimport { RegulationHistory } from './NVseRegulationPage.model';\r\nimport { RegulationHistoryDescription } from './RegulationHistoryDescription';\r\nimport { RegulationHistoryTableStyle } from './RegulationHistoryTable.styles';\r\n\r\n/**\r\n * RegulationHistoryTable Props\r\n */\r\nexport type RegulationHistoryTableProps = {\r\n\ttitleLabel: string | null;\r\n\tvalidFromDateLabel: string | null;\r\n\tdownloadPdfLinkLabel: string | null;\r\n\titems: RegulationHistory[];\r\n};\r\n\r\n/**\r\n * RegulationHistoryTable\r\n */\r\nexport const RegulationHistoryTable: React.FC<RegulationHistoryTableProps> = ({\r\n\ttitleLabel,\r\n\tvalidFromDateLabel,\r\n\tdownloadPdfLinkLabel,\r\n\titems,\r\n}) => {\r\n\treturn (\r\n\t\t<RegulationHistoryTableStyle>\r\n\t\t\t<thead>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<th align=\"left\">{titleLabel}</th>\r\n\t\t\t\t\t<th align=\"left\">{validFromDateLabel}</th>\r\n\t\t\t\t\t<th align=\"left\">{downloadPdfLinkLabel}</th>\r\n\t\t\t\t</tr>\r\n\t\t\t</thead>\r\n\r\n\t\t\t<tbody>\r\n\t\t\t\t{items.map((item, index) => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<tr key={index}>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<RegulationHistoryDescription\r\n\t\t\t\t\t\t\t\t\t{...item}\r\n\t\t\t\t\t\t\t\t></RegulationHistoryDescription>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>{new Date(item.validFromDate).toLocaleDateString()}</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t{item.downloadPdfLink && (\r\n\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\tvariant={ButtonVariant.Link}\r\n\t\t\t\t\t\t\t\t\t\tto={item.downloadPdfLink.url}\r\n\t\t\t\t\t\t\t\t\t\tshowLinkIcon={false}\r\n\t\t\t\t\t\t\t\t\t\texternal={item.downloadPdfLink.isFile}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{item.downloadPdfLink.heading}\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t</tbody>\r\n\t\t</RegulationHistoryTableStyle>\r\n\t);\r\n};\r\n","/* PLOP_INJECT_IMPORT */\r\nimport NVseStandardListingPage from './NVseStandardListingPage';\r\nimport FjallStartPage from './microsite/Fjall/FjallStartPage';\r\nimport FjallArticlePage from './microsite/Fjall/FjallArticlePage';\r\nimport Microsite404Page from './microsite/Microsite404Page';\r\nimport MicrositeListingPage from './microsite/MicrositeListingPage';\r\nimport MicrositeSearchPage from './microsite/MicrositeSearchPage';\r\nimport MicrositeArticlePage from './microsite/MicrositeArticlePage';\r\nimport MicrositeStartPage from './microsite/MicrositeStartPage';\r\nimport MicrositeQuizPage from './microsite/MicrositeQuizPage';\r\nimport NVseJobListPage from './NVseJobListPage';\r\nimport NVseJobDetailPage from './NVseJobDetailPage';\r\nimport NVseGrantsListingPage from './NVseGrantsListingPage';\r\nimport NVseStatisticsPage from './NVseStatisticsPage';\r\nimport NVseStartPage from './NVseStartPage';\r\nimport NVseGrantPage from './NVseGrantPage';\r\nimport NVseGrantStartPage from './NVseGrantStartPage';\r\nimport NVseGuidanceStartPage from './NVseGuidanceStartPage';\r\nimport NVseNavigationPage from './NVseNavigationPage';\r\nimport NVseArticlePage from './NVseArticlePage';\r\nimport StandardPage from './StandardPage';\r\nimport { ContentTypes } from 'types/pages';\r\nimport NVseGuidanceCategoryPage from './NVseGuidanceCategoryPage';\r\nimport NVseGuidanceChapterPage from './NVseGuidanceChapterPage';\r\nimport NVseSearchPage from './NVseSearchPage';\r\nimport NVseThemePage from './NVseThemePage';\r\nimport NVseStatisticsCategoryPage from './NVseStatisticsCategoryPage';\r\nimport NVsePublicationPage from './NVsePublicationPage';\r\nimport NVsePublicationsCategoryPage from './NVsePublicationsCategoryPage';\r\nimport NVseSubjectAreaListingPage from './NVseSubjectAreaListingPage';\r\nimport NVseSubjectAreaPage from './NVseSubjectAreaPage';\r\nimport ErrorHandler404Page from './ErrorHandler404Page';\r\nimport NVseEventPage from './NVseEventPage';\r\nimport NVseEventsListingPage from './NVseEventsListingPage/NVseEventsListingPage';\r\nimport NVseRegulationPage from './NVseRegulationPage';\r\n// do not remove these line\r\nimport NVseGuidanceListingPage from './NVseGuidanceListingPage';\r\nimport NVseStatisticsListingPage from './NVseStatisticsListingPage';\r\nimport NVsePublicationsListingPage from './NVsePublicationsListingPage';\r\nimport NVseRegulationsListingPage from './NVseRegulationsListingPage';\r\n\r\nconst Pages: any = {\r\n\t/* PLOP_INJECT_PAGE */\r\n\tFjallStartPage,\r\n\tFjallArticlePage,\r\n\tMicrosite404Page,\r\n\tMicrositeListingPage,\r\n\tMicrositeSearchPage,\r\n\tMicrositeArticlePage,\r\n\tMicrositeStartPage,\r\n\tMicrositeQuizPage,\r\n\tNVseStartPage,\r\n\tErrorHandler404Page,\r\n\tNVseJobListPage,\r\n\tNVseJobDetailPage,\r\n\tNVseArticlePage,\r\n\tNVseGrantsListingPage,\r\n\tNVseGrantPage,\r\n\tNVseGrantStartPage,\r\n\tNVseGuidanceChapterPage,\r\n\tNVseGuidanceCategoryPage,\r\n\tNVseGuidanceStartPage,\r\n\tNVseNavigationPage,\r\n\tNVseSearchPage,\r\n\tStandardPage,\r\n\tNVseStatisticsPage,\r\n\tNVseThemePage,\r\n\tNVsePublicationPage,\r\n\tNVseStatisticsCategoryPage,\r\n\tNVsePublicationsCategoryPage,\r\n\tNVseSubjectAreaListingPage,\r\n\tNVseSubjectAreaPage,\r\n\tNVseEventsListingPage,\r\n\tNVseEventPage,\r\n\tNVseRegulationPage,\r\n\tNVseGuidanceListingPage: NVseStandardListingPage,\r\n\tNVseStatisticsListingPage: NVseStandardListingPage,\r\n\tNVsePublicationsListingPage: NVseStandardListingPage,\r\n\tNVseRegulationsListingPage: NVseStandardListingPage,\r\n};\r\n\r\nexport const PagesMapper = (pageContent: ContentTypes | undefined) => {\r\n\tif (pageContent) {\r\n\t\tlet page: any = Pages[pageContent.modelType!];\r\n\r\n\t\tif (page) {\r\n\t\t\treturn page;\r\n\t\t}\r\n\t}\r\n\r\n\treturn ErrorHandler404Page;\r\n};\r\n","import { NVseRegulationPageModel } from './NVseRegulationPage.model';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport EpiFragments, {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n\tgetSpaceToAddBefore,\r\n\tOptions,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport React, { useContext } from 'react';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport { SidebarContainer } from './NVseRegulationPage.styles';\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport Link from 'components/Boilerplate/Link';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport { RegulationHistoryNarrow } from './RegulationHistoryNarrow';\r\nimport { RegulationHistoryTable } from './RegulationHistoryTable';\r\nimport { SidebarRelatedPanel } from 'components/Panels/SidebarRelatedPanel';\r\nimport { GrantsHeader } from 'components/Panels/GrantsHeader';\r\nimport { ColumnPageWithSidebar } from 'components/Panels/ColumnPageWithSidebar';\r\nimport { ThemeContext } from 'styled-components';\r\nimport EditableField from 'components/EditableField/EditableField';\r\n\r\n/**\r\n * # NFS BehÃ¥llare\r\n * Modeltype:<code>NVseRegulationPage</code>\r\n *\r\n * [API contract](https://consid.atlassian.net/wiki/spaces/NNN/pages/2499477589/NVseRegulationPage)\r\n *\r\n * En behÃ¥llare för en ny Grundföreskrift, förordning eller allmänna rÃ¥d\r\n */\r\nconst NVseRegulationPage: React.FC<NVseRegulationPageModel> = ({\r\n\theading,\r\n\tdecal,\r\n\tpreamble,\r\n\ttextAsModel,\r\n\ttag,\r\n\thistory,\r\n\tlinkListHeadingLabel,\r\n\tlinkList,\r\n\tdownloadPdfLinkLabel,\r\n\tvalidFromDateLabel,\r\n\ttitleLabel,\r\n\tbottomItems,\r\n\t_properties = {},\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst isPhone = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.tablet - 1,\r\n\t});\r\n\r\n\tlet lastBlockType = BlockType.Element;\r\n\tlet blockTypeBefore_history: BlockType = lastBlockType;\r\n\tlet blockTypeBefore_bottomItems: BlockType = lastBlockType;\r\n\r\n\tif (textAsModel.fragments.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\ttextAsModel.fragments,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t\tblockTypeBefore_history = lastBlockType;\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\r\n\tif (history.length > 0) {\r\n\t\tlastBlockType = BlockType.Element;\r\n\t\tblockTypeBefore_bottomItems = lastBlockType;\r\n\t}\r\n\tif (bottomItems.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(\r\n\t\t\tbottomItems,\r\n\t\t\tthemeContext,\r\n\t\t\tdisableCustomHeadingLogic\r\n\t\t);\r\n\t}\r\n\r\n\tconst spaceBefore_history = getSpaceToAddBefore(\r\n\t\tblockTypeBefore_history,\r\n\t\tBlockType.Element,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\tconst spaceAfterLast = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.SectionBanner,\r\n\t\tthemeContext\r\n\t);\r\n\r\n\tconst options = {\r\n\t\theadingLevel: 2,\r\n\t\tinsideGrid: true,\r\n\t\tinsideCell: true,\r\n\t\tinsideInnerGrid: true,\r\n\t} as Options;\r\n\r\n\tconst related = [];\r\n\r\n\tif (tag) {\r\n\t\trelated.push({ label: '', items: [tag] });\r\n\t}\r\n\r\n\tconst relatedElement =\r\n\t\trelated.length > 0 &&\r\n\t\trelated.map((item, index) => {\r\n\t\t\treturn (\r\n\t\t\t\t<SidebarRelatedPanel\r\n\t\t\t\t\tkey={index}\r\n\t\t\t\t\tlabel={item.label}\r\n\t\t\t\t\titems={item.items}\r\n\t\t\t\t></SidebarRelatedPanel>\r\n\t\t\t);\r\n\t\t});\r\n\r\n\treturn (\r\n\t\t<Space\r\n\t\t\ttop={themeContext.spacing.getPageTopPadding()}\r\n\t\t\tbottom={spaceAfterLast}\r\n\t\t>\r\n\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t<GrantsHeader\r\n\t\t\t\t\tsectionHeading={decal}\r\n\t\t\t\t\tcolumns={10}\r\n\t\t\t\t\theadingLevel={1}\r\n\t\t\t\t\theading={heading}\r\n\t\t\t\t\theading_htmlAttributes={_properties?.heading}\r\n\t\t\t\t\tpreamble={preamble}\r\n\t\t\t\t\tpreamble_htmlAttributes={_properties?.preamble}\r\n\t\t\t\t></GrantsHeader>\r\n\r\n\t\t\t\t{relatedElement && relatedElement}\r\n\t\t\t</Grid>\r\n\r\n\t\t\t<EditableField opeProperty={_properties?.mainBody}>\r\n\t\t\t\t{linkList.length > 0 ? (\r\n\t\t\t\t\t<Grid paddingTop={true} paddingBottom={false}>\r\n\t\t\t\t\t\t<ColumnPageWithSidebar\r\n\t\t\t\t\t\t\toptions={options}\r\n\t\t\t\t\t\t\ttextAsModel={textAsModel}\r\n\t\t\t\t\t\t\ttextAsModel_htmlAttributes={_properties?.mainBody}\r\n\t\t\t\t\t\t\tlink={null}\r\n\t\t\t\t\t\t\tbottomItems={[]}\r\n\t\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<SidebarContainer>\r\n\t\t\t\t\t\t\t\t{linkListHeadingLabel && (\r\n\t\t\t\t\t\t\t\t\t<Heading level={2} styleLevel={4}>\r\n\t\t\t\t\t\t\t\t\t\t{linkListHeadingLabel}\r\n\t\t\t\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t<ul>\r\n\t\t\t\t\t\t\t\t\t{linkList.map((item, index) => {\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t<li key={index}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Link to={item.url} external={item.isFile}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{item.text}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t</SidebarContainer>\r\n\t\t\t\t\t\t</ColumnPageWithSidebar>\r\n\t\t\t\t\t</Grid>\r\n\t\t\t\t) : (\r\n\t\t\t\t\ttextAsModel &&\r\n\t\t\t\t\ttextAsModel.fragments.length > 0 && (\r\n\t\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\t\tpreviousBlockType={BlockType.Element}\r\n\t\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\t\tfragments={textAsModel.fragments}\r\n\t\t\t\t\t\t\thtmlAttributes={_properties?.mainBody}\r\n\t\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t)\r\n\t\t\t\t)}\r\n\t\t\t</EditableField>\r\n\r\n\t\t\t{history.length > 0 && (\r\n\t\t\t\t<Space top={spaceBefore_history}>\r\n\t\t\t\t\t<Grid paddingTop={true} paddingBottom={false}>\r\n\t\t\t\t\t\t{isPhone ? (\r\n\t\t\t\t\t\t\t<RegulationHistoryNarrow\r\n\t\t\t\t\t\t\t\titems={history}\r\n\t\t\t\t\t\t\t\ttitleLabel={titleLabel}\r\n\t\t\t\t\t\t\t\tvalidFromDateLabel={validFromDateLabel}\r\n\t\t\t\t\t\t\t\tdownloadPdfLinkLabel={downloadPdfLinkLabel}\r\n\t\t\t\t\t\t\t></RegulationHistoryNarrow>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<RegulationHistoryTable\r\n\t\t\t\t\t\t\t\titems={history}\r\n\t\t\t\t\t\t\t\ttitleLabel={titleLabel}\r\n\t\t\t\t\t\t\t\tvalidFromDateLabel={validFromDateLabel}\r\n\t\t\t\t\t\t\t\tdownloadPdfLinkLabel={downloadPdfLinkLabel}\r\n\t\t\t\t\t\t\t></RegulationHistoryTable>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Grid>\r\n\t\t\t\t</Space>\r\n\t\t\t)}\r\n\r\n\t\t\t<EpiFragments\r\n\t\t\t\tpreviousBlockType={blockTypeBefore_bottomItems}\r\n\t\t\t\theadingLevel={2}\r\n\t\t\t\tfragments={bottomItems}\r\n\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t/>\r\n\t\t</Space>\r\n\t);\r\n};\r\n\r\nexport default NVseRegulationPage;\r\n","/**\r\n * Loader\r\n */\r\n\r\nimport styled from 'styled-components';\r\n\r\nexport const Loader = styled.div`\r\n\tborder: 10px solid #ffffffff;\r\n\tborder-top-color: ${(props) =>\r\n\t\tprops.theme?.colors?.primary ? props.theme?.colors.primary : '#000000'};\r\n\r\n\tborder-radius: 50%;\r\n\twidth: 80px;\r\n\theight: 80px;\r\n\tbox-shadow: 0px 0px 3px 1px #00000020;\r\n\r\n\tanimation: fadeInAnimation 100ms ease-in 0s 1, spin 1s linear infinite;\r\n\r\n\t@keyframes fadeInAnimation {\r\n\t\t0% {\r\n\t\t\topacity: 0;\r\n\t\t}\r\n\t\t100% {\r\n\t\t\topacity: 1;\r\n\t\t}\r\n\t}\r\n\r\n\t@keyframes spin {\r\n\t\t0% {\r\n\t\t\ttransform: rotate(0deg);\r\n\t\t}\r\n\t\t100% {\r\n\t\t\ttransform: rotate(360deg);\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nexport const LoaderStatic = styled(Loader)`\r\n\tposition: fixed;\r\n\ttop: 35vh;\r\n\tleft: 50vw;\r\n\tmargin: -40px 0 0 -40px;\r\n\tz-index: 2;\r\n\tcursor: progress;\r\n`;\r\n","import React, { useRef, useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { useParams, useHistory } from 'react-router-dom';\r\nimport { PagesMapper } from 'pages';\r\nimport { LoaderStatic } from 'components/Boilerplate/Loader';\r\nimport {\r\n\tselectModel,\r\n\tselectContent,\r\n\tfetchPage,\r\n\tListingModelsType,\r\n} from 'store/modules/model';\r\nimport { updateRenderingState, selectReact } from 'store/modules/react';\r\nimport { RenderingStates } from 'types/epi';\r\nimport { selectEpi } from 'store/modules/epi';\r\nimport { ScreenReaderText } from 'components/Typography/Typography.styles';\r\nexport interface ParamTypes {\r\n\tsiteRoute: string;\r\n}\r\n\r\n/** Loads data and renders the correct page based on the route. */\r\nconst RouteHandler: React.FC = () => {\r\n\tlet { siteRoute } = useParams<ParamTypes>();\r\n\tsiteRoute = siteRoute || '/';\r\n\tconst ariaLiveRef = useRef<HTMLDivElement>(null);\r\n\tconst pageRef = useRef<any>(null);\r\n\tconst { action } = useHistory();\r\n\tconst dispatch = useDispatch();\r\n\tconst { error, loading } = useSelector(selectModel);\r\n\tconst { inEditMode } = useSelector(selectEpi);\r\n\tconst pageContent = useSelector(selectContent);\r\n\tconst { renderingState, apiUrl } = useSelector(selectReact);\r\n\tconst [loaderVisible, setLoaderVisible] = useState(false);\r\n\tconst Page = PagesMapper(pageContent);\r\n\r\n\t// Fix siteRoute so we don't request '//'.\r\n\tif (\r\n\t\tapiUrl &&\r\n\t\tsiteRoute &&\r\n\t\tapiUrl.charAt(apiUrl.length - 1) === '/' &&\r\n\t\tsiteRoute.charAt(0) === '/'\r\n\t) {\r\n\t\tsiteRoute = siteRoute.substr(1);\r\n\t}\r\n\r\n\t// Load the page\r\n\tuseEffect(() => {\r\n\t\t// First hydrate rendering we wont be doing any request, becase we already have the data from the SSR.\r\n\t\tif (renderingState !== RenderingStates.ClientSide && pageContent) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tdispatch(fetchPage(apiUrl, siteRoute));\r\n\t\t// eslint-disable-next-line\r\n\t}, [apiUrl, siteRoute, dispatch]);\r\n\r\n\t// Set renderingState to clientside after the first (hydration) render.\r\n\tuseEffect(() => {\r\n\t\tdispatch(updateRenderingState(RenderingStates.ClientSide));\r\n\t\t// eslint-disable-next-line\r\n\t}, []);\r\n\r\n\t// If we have been waiting for the response more than 400ms we display the loader\r\n\tuseEffect(() => {\r\n\t\tlet loaderTimeout: any;\r\n\r\n\t\tif (loading) {\r\n\t\t\tloaderTimeout = setTimeout(() => {\r\n\t\t\t\t// Tell sighted users\r\n\t\t\t\tsetLoaderVisible(true);\r\n\t\t\t\tif (ariaLiveRef.current) {\r\n\t\t\t\t\tariaLiveRef.current.innerHTML = 'Sidan laddar';\r\n\t\t\t\t}\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tif (ariaLiveRef.current) {\r\n\t\t\t\t\t\tariaLiveRef.current.innerHTML = '';\r\n\t\t\t\t\t}\r\n\t\t\t\t}, 500);\r\n\t\t\t}, 400);\r\n\t\t} else {\r\n\t\t\tsetLoaderVisible(false);\r\n\t\t\tif (action === 'PUSH') {\r\n\t\t\t\tif (\r\n\t\t\t\t\tpageContent?.modelType &&\r\n\t\t\t\t\t!ListingModelsType.includes(pageContent.modelType)\r\n\t\t\t\t) {\r\n\t\t\t\t\twindow.scrollTo(0, 0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\tif (loaderTimeout) {\r\n\t\t\t\tclearTimeout(loaderTimeout);\r\n\t\t\t}\r\n\t\t};\r\n\t\t// eslint-disable-next-line\r\n\t}, [loading]);\r\n\r\n\t// Page is loaded\r\n\tuseEffect(() => {\r\n\t\tif (pageContent && !inEditMode) {\r\n\t\t\tif (ariaLiveRef.current) {\r\n\t\t\t\tariaLiveRef.current.innerHTML = 'Sidan har laddats';\r\n\t\t\t}\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tif (ariaLiveRef.current) {\r\n\t\t\t\t\tariaLiveRef.current.innerHTML = '';\r\n\t\t\t\t}\r\n\t\t\t}, 500);\r\n\t\t}\r\n\t}, [pageContent]);\r\n\r\n\tconst epi = useSelector(selectEpi);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{loading && loaderVisible && <LoaderStatic />}\r\n\r\n\t\t\t<main\r\n\t\t\t\trole=\"main\"\r\n\t\t\t\tid=\"main\"\r\n\t\t\t\tref={pageRef}\r\n\t\t\t\ttabIndex={-1}\r\n\t\t\t\tstyle={{ outline: 'none' }}\r\n\t\t\t>\r\n\t\t\t\t{pageContent && <Page {...pageContent} epi={epi} />}\r\n\t\t\t</main>\r\n\r\n\t\t\t<ScreenReaderText\r\n\t\t\t\taria-live=\"assertive\"\r\n\t\t\t\tref={ariaLiveRef}\r\n\t\t\t></ScreenReaderText>\r\n\t\t</>\r\n\t);\r\n};\r\nexport { RouteHandler };\r\n","/**\r\n * MenuMobile - styles\r\n */\r\n\r\nimport { getCommonStyle } from 'components/Button/Button.styles';\r\nimport { isRedirectProps } from 'components/MegaMenu/MegaMenu';\r\nimport styled, { css } from 'styled-components';\r\nimport { accessibilityFocus } from 'theme/styles';\r\nimport { ItemProps } from './MenuMobile';\r\n\r\nconst getLevelStyle = (level: number) => {\r\n\tswitch (level) {\r\n\t\tdefault:\r\n\t\tcase 0:\r\n\t\t\treturn css``;\r\n\t\tcase 1:\r\n\t\t\treturn css`\r\n\t\t\t\tborder-left: 10px solid\r\n\t\t\t\t\t${(props) =>\r\n\t\t\t\t\t\tprops.theme.isMicrositeActive\r\n\t\t\t\t\t\t\t? props.theme.colors.secondary\r\n\t\t\t\t\t\t\t: '#0039A2'};\r\n\t\t\t\tbackground-color: ${(props) =>\r\n\t\t\t\t\tprops.theme.isMicrositeActive\r\n\t\t\t\t\t\t? props.theme.colors.tertiary\r\n\t\t\t\t\t\t: '#f6f6f6'};\r\n\t\t\t\theight: 100%;\r\n\t\t\t`;\r\n\t\tcase 2:\r\n\t\t\treturn css`\r\n\t\t\t\tborder-left: 10px solid\r\n\t\t\t\t\t${(props) =>\r\n\t\t\t\t\t\tprops.theme.isMicrositeActive\r\n\t\t\t\t\t\t\t? props.theme.colors.secondary\r\n\t\t\t\t\t\t\t: '#0039A2'}4D;\r\n\t\t\t\tbackground-color: ${(props) =>\r\n\t\t\t\t\tprops.theme.isMicrositeActive\r\n\t\t\t\t\t\t? props.theme.colors.tertiary\r\n\t\t\t\t\t\t: '#eeeeee'};\r\n\t\t\t`;\r\n\t\tcase 3:\r\n\t\t\treturn css`\r\n\t\t\t\tborder-left: 10px solid\r\n\t\t\t\t\t${(props) =>\r\n\t\t\t\t\t\tprops.theme.isMicrositeActive\r\n\t\t\t\t\t\t\t? props.theme.colors.secondary\r\n\t\t\t\t\t\t\t: '#0039A2'}4D;\r\n\t\t\t`;\r\n\t}\r\n};\r\n\r\nconst getLevelFontStyle = (level: number) => {\r\n\tswitch (level) {\r\n\t\tdefault:\r\n\t\tcase 0:\r\n\t\t\treturn css`\r\n\t\t\t\t${(props) => props.theme.typography.style4.getStyle()};\r\n\t\t\t`;\r\n\t\tcase 1:\r\n\t\t\treturn css`\r\n\t\t\t\t${(props) => props.theme.typography.style6.getStyle()};\r\n\t\t\t`;\r\n\t\tcase 2:\r\n\t\t\treturn css`\r\n\t\t\t\t${(props) => props.theme.typography.style6.getStyle()};\r\n\t\t\t`;\r\n\t\tcase 3:\r\n\t\t\treturn css`\r\n\t\t\t\t${(props) => props.theme.typography.style4.getStyle()};\r\n\t\t\t`;\r\n\t}\r\n};\r\n\r\nexport const MenuContainer = styled.div`\r\n\tbackground-color: ${(props) => props.theme.colors.white};\r\n\tmargin: 0px;\r\n\r\n\tposition: fixed;\r\n\ttop: 0vh;\r\n\tleft: 0vw;\r\n\twidth: 100vw;\r\n\theight: 100%;\r\n\toverflow-y: auto;\r\n\tz-index: 2;\r\n\r\n\tul {\r\n\t\tlist-style-type: none;\r\n\t\tmargin: 0px;\r\n\t\tpadding: 0px;\r\n\t}\r\n`;\r\n\r\nexport const MenuHeader = styled.div`\r\n\tdisplay: flex;\r\n\tjustify-content: space-between;\r\n\talign-items: normal;\r\n\tborder-bottom: 1px solid #f0f0f0;\r\n\r\n\t> img {\r\n\t\tmargin: 8px ${(props) => props.theme.spacing.space2}rem;\r\n\t\theight: 73px;\r\n\t}\r\n`;\r\n\r\ntype HeightProp = {\r\n\theight: string | undefined;\r\n};\r\n\r\nexport const MicrositeMenuHeader = styled.div<HeightProp>`\r\n\tdisplay: flex;\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n\tborder-bottom: 1px solid #cbcbcb;\r\n\tpadding: 1rem;\r\n\r\n\t> img {\r\n\t\theight: ${(props) => props.height || 'auto'};\r\n\t}\r\n`;\r\n\r\nexport const MenuListItemContainer = styled.li<ItemProps>`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\r\n\t${({ level }) => {\r\n\t\treturn getLevelStyle(level);\r\n\t}};\r\n\r\n\tbutton {\r\n\t\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\t}\r\n`;\r\n\r\nexport const MenuItemHeader = styled.button<ItemProps>`\r\n\tdisplay: flex;\r\n\tflex: 1;\r\n\r\n\tborder: none;\r\n\tcursor: pointer;\r\n\tbackground-color: transparent;\r\n\ttext-align: start;\r\n\tpadding: 0px;\r\n\r\n\t${({ level }) => getLevelFontStyle(level)};\r\n\tfont-weight: 400;\r\n\r\n\t&:focus {\r\n\t\t${accessibilityFocus('inset')};\r\n\t\toutline-offset: -2px;\r\n\t}\r\n\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n\r\n\tborder-bottom: 1px solid #eaeaea;\r\n\r\n\t${({ level }) => level === 0 && 'border-bottom: 1px solid #F0F0F0;'};\r\n\t${({ level }) => level === 1 && 'border-bottom: 1px solid #EAEAEA;'};\r\n\t${({ level }) => level === 2 && 'border-bottom: 1px solid #D3D3D3;'};\r\n\r\n\t> *:nth-child(1) {\r\n\t\tflex: 1;\r\n\t\tpadding: ${(props) => props.theme.spacing.space2}rem;\r\n\t}\r\n\r\n\t> *:nth-child(2) {\r\n\t\twidth: ${(props) => props.theme.spacing.space6}rem;\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: center;\r\n\t\talign-self: normal;\r\n\r\n\t\t${({ level }) => level === 0 && 'border-left: 1px solid #F0F0F0;'};\r\n\t\t${({ level }) => level === 1 && 'border-left: 1px solid #EAEAEA;'};\r\n\t\t${({ level }) => level === 2 && 'border-left: 1px solid #D3D3D3;'};\r\n\r\n\t\tbackground-color: ${({ isOpen, theme }) =>\r\n\t\t\tisOpen ? theme.colors.secondaryBlue : 'transparent'};\r\n\t\t${({ isOpen, theme }) => isOpen && `color ${theme.palette.text.secondary}`};\r\n\r\n\t\tsvg {\r\n\t\t\ttransform: ${({ isOpen }) =>\r\n\t\t\t\tisOpen ? 'rotate(-90deg)' : 'rotate(90deg)'};\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nexport const MicrositeMenuItemHeader = styled.button<ItemProps>`\r\n\tdisplay: flex;\r\n\tflex: 1;\r\n\r\n\tborder: none;\r\n\tcursor: pointer;\r\n\tbackground-color: transparent;\r\n\ttext-align: start;\r\n\tpadding: 0px;\r\n\r\n\t${({ level }) => getLevelFontStyle(level)};\r\n\tfont-weight: 400;\r\n\r\n\t&:focus {\r\n\t\t${accessibilityFocus('inset')};\r\n\t\toutline-offset: -2px;\r\n\t}\r\n\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n\r\n\tborder-bottom: 1px solid #cbcbcb;\r\n\r\n\t${({ level }) => level === 0 && 'border-bottom: 1px solid #CBCBCB;'};\r\n\t${({ level }) => level === 1 && 'border-bottom: 1px solid #CBCBCB;'};\r\n\t${({ level }) => level === 2 && 'border-bottom: 1px solid #CBCBCB;'};\r\n\r\n\t> *:nth-child(1) {\r\n\t\tflex: 1;\r\n\t\tpadding: ${(props) => props.theme.spacing.space2}rem;\r\n\t}\r\n\r\n\t> *:nth-child(2) {\r\n\t\twidth: ${(props) => props.theme.spacing.space6}rem;\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: center;\r\n\t\talign-self: normal;\r\n\r\n\t\t${({ level }) => level === 0 && 'border-left: 1px solid #CBCBCB;'};\r\n\t\t${({ level }) => level === 1 && 'border-left: 1px solid #CBCBCB;'};\r\n\t\t${({ level }) => level === 2 && 'border-left: 1px solid #CBCBCB;'};\r\n\r\n\t\tbackground-color: ${({ isOpen, theme }) =>\r\n\t\t\tisOpen ? theme.colors.secondary : 'transparent'};\r\n\t\t${({ isOpen, theme }) => isOpen && `color ${theme.palette.text.primary}`};\r\n\r\n\t\tsvg {\r\n\t\t\ttransform: ${({ isOpen }) =>\r\n\t\t\t\tisOpen ? 'rotate(-90deg)' : 'rotate(90deg)'};\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nexport const MenuLinkItem = styled.div<isRedirectProps>`\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\r\n\tborder-bottom: 1px solid\r\n\t\t${(props) => (props.theme.isMicrositeActive ? '#CBCBCB' : '#eaeaea')};\r\n\r\n\ta {\r\n\t\tdisplay: inline-block;\r\n\t\twidth: 100%;\r\n\t\tpadding: ${(props) => props.theme.spacing.space2}rem;\r\n\r\n\t\t${({ isRedirect, theme }) =>\r\n\t\t\t!isRedirect &&\r\n\t\t\t`\r\n\t\tcolor: ${theme.palette.text.primary};\r\n\t\t`}\r\n\t}\r\n`;\r\n\r\nexport const MenuLinkItemStyle1 = styled.div<ItemProps>`\r\n\tborder-bottom: 1px solid #eaeaea;\r\n\tdisplay: flex;\r\n\ta {\r\n\t\tflex: 1 1 auto;\r\n\t\tpadding: ${(props) => props.theme.spacing.space2}rem;\r\n\t\t${({ level }) => getLevelFontStyle(level)};\r\n\t\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\t\t&:focus {\r\n\t\t\t${accessibilityFocus('inset')};\r\n\t\t\toutline-offset: -2px;\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nexport const CloseButton = styled.button`\r\n\tbackground-color: transparent;\r\n\tborder: none;\r\n\r\n\tdisplay: flex;\r\n\talign-self: center;\r\n\talign-items: unset;\r\n\r\n\t${(props) => props.theme.typography.style12.getStyle()};\r\n\ttext-transform: uppercase;\r\n\r\n\tcursor: pointer;\r\n\tpadding: ${(props) =>\r\n\t\tprops.theme.isMicrositeActive ? '0' : props.theme.spacing.space2}rem;\r\n\r\n\tspan {\r\n\t\tdisplay: inline-flex;\r\n\t\talign-items: flex-end;\r\n\t}\r\n\r\n\tsvg {\r\n\t\tfill: ${(props) => props.theme.palette.text.primary};\r\n\t\tmargin-left: ${(props) => props.theme.spacing.space1}rem;\r\n\t}\r\n`;\r\n\r\nexport const MicrositeCloseButton = styled.button`\r\n\tbackground-color: transparent;\r\n\t${getCommonStyle()};\r\n\tborder-color: ${(props) => props.theme.palette.text.primary};\r\n\tpadding: 0 ${(props) => props.theme.spacing.space2}rem;\r\n\r\n\theight: 45px;\r\n\ttext-transform: none;\r\n\tspan {\r\n\t\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\t}\r\n`;\r\n","/**\r\n * MenuMobile\r\n * https://css-tricks.com/prevent-page-scrolling-when-a-modal-is-open/\r\n */\r\nimport Icon from './../Boilerplate/Icon';\r\nimport React, {\r\n\tuseCallback,\r\n\tuseContext,\r\n\tuseEffect,\r\n\tuseRef,\r\n\tuseState,\r\n} from 'react';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\nimport {\r\n\tMenuContainer,\r\n\tMenuListItemContainer,\r\n\tMenuItemHeader,\r\n\tMenuHeader,\r\n\tMenuLinkItemStyle1,\r\n\tMenuLinkItem,\r\n\tCloseButton,\r\n\tMicrositeCloseButton,\r\n\tMicrositeMenuItemHeader,\r\n\tMicrositeMenuHeader,\r\n} from './MenuMobile.styles';\r\nimport { ListingPageURLs } from 'types/common';\r\nimport Link from 'components/Boilerplate/Link';\r\nimport { LogoModel, NavigationItem } from 'types/epi';\r\nimport { selectLogo, toggleMenuItem } from 'store/modules/model';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { ThemeContext } from 'styled-components';\r\nimport FocusTrap from 'focus-trap-react';\r\n\r\nexport interface MenuMobileProps {\r\n\titems: NavigationItem[];\r\n\tonClose?: (focusOrigin: boolean) => void;\r\n\tmicrositeLogo?: LogoModel;\r\n}\r\n\r\nconst MenuMobile: React.FC<MenuMobileProps> = ({\r\n\titems,\r\n\tonClose,\r\n\tmicrositeLogo,\r\n}) => {\r\n\tconst location = useLocation();\r\n\tconst dispatch = useDispatch();\r\n\tconst [currentLocation, setCurrentLocation] = useState(location.pathname);\r\n\tconst ref = useRef(null);\r\n\t// bring logo props\r\n\tconst logo = useSelector(selectLogo);\r\n\r\n\tconst escapeListener = useCallback(\r\n\t\t(e: KeyboardEvent) => {\r\n\t\t\tif (e.key === 'Escape' && onClose) {\r\n\t\t\t\tonClose(true);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[onClose]\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\tdocument.addEventListener('keyup', escapeListener);\r\n\t\treturn () => document.removeEventListener('keyup', escapeListener);\r\n\t\t// eslint-disable-next-line\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst firstMenuItem: any = document?.querySelectorAll('#menu-list a')[0];\r\n\t\tfirstMenuItem?.focus();\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (onClose && currentLocation !== location.pathname) {\r\n\t\t\tonClose(false);\r\n\t\t}\r\n\t\tsetCurrentLocation(location.pathname);\r\n\t}, [onClose, currentLocation, location]);\r\n\r\n\tconst toggleOpenState = (item: NavigationItem) => {\r\n\t\t// UI => Action => Reducer => Store => UI > ...\r\n\r\n\t\t// Toggle the clicked/activated item\r\n\t\tconst result = createNodeIndexPath(items, item, []);\r\n\t\tif (result) {\r\n\t\t\tdispatch(toggleMenuItem(result));\r\n\t\t}\r\n\t};\r\n\r\n\tconst createNodeIndexPath = (\r\n\t\titems: NavigationItem[],\r\n\t\tfind: NavigationItem,\r\n\t\tpath: number[]\r\n\t): number[] | null => {\r\n\t\tfor (let i = 0; i < items.length; i++) {\r\n\t\t\tlet item = items[i];\r\n\t\t\tif (item === find) {\r\n\t\t\t\treturn [...path, i];\r\n\t\t\t}\r\n\r\n\t\t\tif (item.children.length > 0) {\r\n\t\t\t\tlet result = createNodeIndexPath(item.children, find, [...path, i]);\r\n\t\t\t\tif (result) {\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\r\n\tconst onHeaderClick = () => {\r\n\t\tif (onClose) {\r\n\t\t\tonClose(true);\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<FocusTrap active={true} focusTrapOptions={{ preventScroll: true }}>\r\n\t\t\t<MenuContainer ref={ref}>\r\n\t\t\t\t{micrositeLogo ? (\r\n\t\t\t\t\t<MicrositeMenuHeader height={micrositeLogo?.height}>\r\n\t\t\t\t\t\t<img\r\n\t\t\t\t\t\t\tdata-testid=\"logo microsite\"\r\n\t\t\t\t\t\t\tsrc={micrositeLogo?.src}\r\n\t\t\t\t\t\t\talt={micrositeLogo?.alt}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<MicrositeCloseButton onClick={onHeaderClick}>\r\n\t\t\t\t\t\t\t<span>Stäng</span>\r\n\t\t\t\t\t\t\t<Icon size={2} icon=\"cross\"></Icon>\r\n\t\t\t\t\t\t</MicrositeCloseButton>\r\n\t\t\t\t\t</MicrositeMenuHeader>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<MenuHeader>\r\n\t\t\t\t\t\t<img data-testid=\"logoImage\" src={logo?.src} alt={logo?.alt} />\r\n\t\t\t\t\t\t<CloseButton onClick={onHeaderClick}>\r\n\t\t\t\t\t\t\t<span>Stäng</span>\r\n\t\t\t\t\t\t\t<Icon size={2} icon=\"cross\"></Icon>\r\n\t\t\t\t\t\t</CloseButton>\r\n\t\t\t\t\t</MenuHeader>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t<MenuList items={items} onToggleOpenState={toggleOpenState} />\r\n\t\t\t</MenuContainer>\r\n\t\t</FocusTrap>\r\n\t);\r\n};\r\n\r\nexport default MenuMobile;\r\n\r\n/**\r\n * MenuList\r\n */\r\n\r\nexport interface MenuListProps {\r\n\titems: NavigationItem[];\r\n\tlevel?: number;\r\n\tonToggleOpenState?: (item: NavigationItem) => void;\r\n}\r\n\r\nconst MenuList: React.FC<MenuListProps> = ({\r\n\titems,\r\n\tlevel = 0,\r\n\tonToggleOpenState,\r\n}) => {\r\n\tconst toggleOpenState = (item: NavigationItem) => {\r\n\t\tif (onToggleOpenState) {\r\n\t\t\tonToggleOpenState(item);\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<nav>\r\n\t\t\t<ul id=\"menu-list\" tabIndex={-1} aria-labelledby=\"menu label\">\r\n\t\t\t\t{items.map((item, index) => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<MenuListItemContainer\r\n\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\tlevel={level}\r\n\t\t\t\t\t\t\tisOpen={item.isActive}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<MenuItemComponent\r\n\t\t\t\t\t\t\t\thasChildren={item.children.length > 0}\r\n\t\t\t\t\t\t\t\tlevel={level}\r\n\t\t\t\t\t\t\t\tisOpen={item.isActive}\r\n\t\t\t\t\t\t\t\turl={item.url}\r\n\t\t\t\t\t\t\t\tstyle={item.style}\r\n\t\t\t\t\t\t\t\theading={item.text}\r\n\t\t\t\t\t\t\t\tonChangeState={() => toggleOpenState(item)}\r\n\t\t\t\t\t\t\t\tisRedirect={item.isRedirect}\r\n\t\t\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t\t\t{item.isActive && (\r\n\t\t\t\t\t\t\t\t<MenuList\r\n\t\t\t\t\t\t\t\t\tonToggleOpenState={onToggleOpenState}\r\n\t\t\t\t\t\t\t\t\titems={item.children}\r\n\t\t\t\t\t\t\t\t\tlevel={level + 1}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</MenuListItemContainer>\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t</ul>\r\n\t\t</nav>\r\n\t);\r\n};\r\n\r\nexport type ItemProps = {\r\n\tlevel: number;\r\n\tisOpen?: boolean;\r\n};\r\n\r\nexport type MenuItemComponentProps = {\r\n\turl: string | null;\r\n\theading: string;\r\n\tlevel: number;\r\n\tisOpen: boolean;\r\n\thasChildren: boolean;\r\n\tstyle?: number;\r\n\tonClick?: () => void;\r\n\tonChangeState?: () => void;\r\n\tisRedirect: boolean;\r\n};\r\n\r\nconst MenuItemComponent: React.FC<MenuItemComponentProps> = ({\r\n\turl,\r\n\theading,\r\n\tlevel,\r\n\tisOpen,\r\n\thasChildren,\r\n\tstyle = 0,\r\n\tonClick,\r\n\tonChangeState,\r\n\tisRedirect,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tif (!hasChildren && url) {\r\n\t\tif (level === 0 || style === 1) {\r\n\t\t\treturn (\r\n\t\t\t\t<MenuLinkItemStyle1 level={level}>\r\n\t\t\t\t\t<Link\r\n\t\t\t\t\t\tshowLinkIcon={false}\r\n\t\t\t\t\t\tto={url}\r\n\t\t\t\t\t\taria-label={heading}\r\n\t\t\t\t\t\texternal={ListingPageURLs.includes(url)}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{heading}\r\n\t\t\t\t\t</Link>\r\n\t\t\t\t</MenuLinkItemStyle1>\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<MenuLinkItem isRedirect={isRedirect}>\r\n\t\t\t\t<Link\r\n\t\t\t\t\tshowLinkIcon={false}\r\n\t\t\t\t\tto={url}\r\n\t\t\t\t\taria-label={heading}\r\n\t\t\t\t\texternal={ListingPageURLs.includes(url)}\r\n\t\t\t\t>\r\n\t\t\t\t\t{heading}\r\n\t\t\t\t</Link>\r\n\t\t\t</MenuLinkItem>\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{themeContext.isMicrositeActive ? (\r\n\t\t\t\t<MicrositeMenuItemHeader\r\n\t\t\t\t\taria-expanded={isOpen}\r\n\t\t\t\t\taria-label={heading}\r\n\t\t\t\t\tlevel={level}\r\n\t\t\t\t\tisOpen={isOpen}\r\n\t\t\t\t\tonClick={onChangeState}\r\n\t\t\t\t>\r\n\t\t\t\t\t<div>{heading && <span>{heading}</span>}</div>\r\n\t\t\t\t\t{hasChildren && (\r\n\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t<Icon\r\n\t\t\t\t\t\t\t\ticon=\"chevron\"\r\n\t\t\t\t\t\t\t\tcolor={\r\n\t\t\t\t\t\t\t\t\tisOpen\r\n\t\t\t\t\t\t\t\t\t\t? themeContext.palette.text.secondary\r\n\t\t\t\t\t\t\t\t\t\t: themeContext.palette.text.primary\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</MicrositeMenuItemHeader>\r\n\t\t\t) : (\r\n\t\t\t\t<MenuItemHeader\r\n\t\t\t\t\taria-expanded={isOpen}\r\n\t\t\t\t\taria-label={heading}\r\n\t\t\t\t\tlevel={level}\r\n\t\t\t\t\tisOpen={isOpen}\r\n\t\t\t\t\tonClick={onChangeState}\r\n\t\t\t\t>\r\n\t\t\t\t\t<div>{heading && <span>{heading}</span>}</div>\r\n\t\t\t\t\t{hasChildren && (\r\n\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t<Icon\r\n\t\t\t\t\t\t\t\ticon=\"chevron\"\r\n\t\t\t\t\t\t\t\tcolor={\r\n\t\t\t\t\t\t\t\t\tisOpen\r\n\t\t\t\t\t\t\t\t\t\t? themeContext.palette.text.secondary\r\n\t\t\t\t\t\t\t\t\t\t: themeContext.palette.text.primary\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</MenuItemHeader>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n","/**\r\n * MicrositeHeader - styles\r\n */\r\n\r\nimport Link from 'components/Boilerplate/Link';\r\nimport styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\n\r\nexport const MicrositeHeaderLogoLink = styled(Link)`\r\n\tflex: 0 0 auto;\r\n\tmargin-right: ${(props) => props.theme.spacing.space6}rem;\r\n\tpadding-top: ${(props) => props.theme.spacing.space2}rem;\r\n\tpadding-bottom: ${(props) => props.theme.spacing.space2}rem;\r\n\timg {\r\n\t\theight: ${(props) => props.height || 'auto'};\r\n\t}\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tmargin-right: ${(props) => props.theme.spacing.space1}rem;\r\n\t}\r\n`;\r\n","/**\r\n * SiteHeader - styles\r\n */\r\n\r\nimport styled, { css } from 'styled-components';\r\nimport { mediaQueries } from 'theme/media-queries';\r\nimport { ActiveNode } from './SiteHeader';\r\nimport { accessibilityFocus, resetAccessibilityFocus } from 'theme/styles';\r\nimport Link from 'components/Boilerplate/Link';\r\n\r\nexport const Div = styled.div``;\r\n\r\nexport const SiteHeaderContainer = styled.header`\r\n\tbackground-color: ${(props) => props.theme.colors.white};\r\n\tborder-bottom: 1px solid rgba(151, 151, 151, 0.21);\r\n`;\r\n\r\nexport const SiteHeaderContent = styled.div`\r\n\tdisplay: flex;\r\n\tpadding-top: ${(props) => props.theme.spacing.space1}rem;\r\n\tpadding-bottom: ${(props) => props.theme.spacing.space1}rem;\r\n`;\r\n\r\nexport const SiteHeaderLogoLink = styled(Link)`\r\n\tflex: 0 0 auto;\r\n\tmargin-right: ${(props) => props.theme.spacing.space3}rem;\r\n\timg {\r\n\t\theight: 73px;\r\n\t}\r\n`;\r\n\r\nexport const SiterHeaderMenuAndSearch = styled.div`\r\n\tdisplay: flex;\r\n\tflex: 1 1 auto;\r\n\tgap: ${(props) => props.theme.spacing.space1}rem;\r\n\talign-items: center;\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tjustify-content: flex-end;\r\n\t}\r\n\r\n\tbutton {\r\n\t\ttext-transform: ${(props) =>\r\n\t\t\tprops.theme.isMicrositeActive ? 'none' : 'uppercase'};\r\n\r\n\t\t${mediaQueries.phone} {\r\n\t\t\tborder: none;\r\n\t\t\tpadding: ${(props) => (props.theme.isMicrositeActive ? '2px' : '0')};\r\n\t\t}\r\n\t}\r\n`;\r\nexport const SiteHeaderMenuAndQuickLinks = styled.nav`\r\n\tdisplay: flex;\r\n\tflex: 1 1 auto;\r\n\talign-items: center;\r\n\tgap: ${(props) => props.theme.spacing.space1}rem;\r\n\r\n\t${mediaQueries.phone} {\r\n\t\torder: 2;\r\n\t\tflex: 0 0 auto;\r\n\t}\r\n`;\r\n\r\nexport const QuickLinksList = styled.ul`\r\n\tmargin: 0px;\r\n\tmargin-left: ${(props) => (props.theme.isMicrositeActive ? '16px' : '0')};\r\n\tpadding: 0px;\r\n\tdisplay: flex;\r\n\tflex-wrap: wrap;\r\n\tflex: 1;\r\n\tjustify-content: ${(props) =>\r\n\t\tprops.theme.isMicrositeActive ? 'space-evenly' : 'flex-start'};\r\n`;\r\n\r\nfunction isActiveStyle() {\r\n\treturn css`\r\n\t\tborder-bottom: 5px solid ${(props) => props.theme.colors.primary};\r\n\t\ta:hover {\r\n\t\t\ttext-decoration: none;\r\n\t\t}\r\n\t`;\r\n}\r\n\r\nexport const QuickLinksListItem = styled.li<ActiveNode>`\r\n\tdisplay: inline-block;\r\n\talign-self: center;\r\n\torder: 1;\r\n\ttext-transform: ${(props) =>\r\n\t\tprops.theme.isMicrositeActive ? 'none' : 'uppercase'};\r\n\r\n\tmargin: 0 ${(props) => props.theme.spacing.space1}rem;\r\n\r\n\tmargin-top: 2px; // Quickfix woraround of button error\r\n\tborder-top: 5px solid transparent;\r\n\tborder-bottom: 5px solid transparent;\r\n\r\n\t${({ isActive }) => isActive && isActiveStyle()};\r\n\r\n\t> a {\r\n\t\t${(props) =>\r\n\t\t\tprops.theme.isMicrositeActive\r\n\t\t\t\t? props.theme.typography.style6.getStyle()\r\n\t\t\t\t: props.theme.typography.style11.getStyle()};\r\n\t\ttext-decoration: none;\r\n\t\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\t\t&:focus {\r\n\t\t\t${resetAccessibilityFocus()}\r\n\t\t}\r\n\t}\r\n\t&:focus-within {\r\n\t\t${accessibilityFocus()}\r\n\t}\r\n`;\r\n\r\nexport type transitionState = {\r\n\tstate: any;\r\n};\r\n\r\nexport const SearchContainer = styled.div<transitionState>`\r\n\tposition: absolute;\r\n\tpadding-top: ${(props) => props.theme.spacing.space4}rem;\r\n\tpadding-bottom: ${(props) => props.theme.spacing.space3}rem;\r\n\tleft: 0;\r\n\tright: 0;\r\n\twidth: 100vw;\r\n\tz-index: 1;\r\n\tbackground-color: ${(props) =>\r\n\t\tprops.theme.isMicrositeActive\r\n\t\t\t? props.theme.colors.commonBgColor\r\n\t\t\t: props.theme.colors.white};\r\n\tbox-shadow: 0px 5px 5px #00000020;\r\n\tborder-bottom: 1px solid rgba(151, 151, 151, 0.21);\r\n\tpadding-bottom: ${(props) => props.theme.spacing.space5}rem;\r\n\r\n\ttransition: transform 200ms ease-in-out;\r\n\ttransform: ${({ state }) => {\r\n\t\tswitch (state) {\r\n\t\t\tcase 'entering':\r\n\t\t\tcase 'entered':\r\n\t\t\t\treturn 'translateY(0)';\r\n\t\t\tcase 'exiting':\r\n\t\t\tcase 'exited':\r\n\t\t\t\treturn 'translateY(-100%)';\r\n\t\t}\r\n\t}};\r\n`;\r\n\r\nexport const SearchOverlay = styled.div<transitionState>`\r\n\tposition: fixed;\r\n\tz-index: 10;\r\n\tleft: 0;\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\toverflow-x: hidden;\r\n\tfont-weight: 400 !important;\r\n\r\n\ttransition: background-color 200ms ease-in-out;\r\n\tbackground-color: ${({ state }) => {\r\n\t\tswitch (state) {\r\n\t\t\tcase 'entering':\r\n\t\t\tcase 'entered':\r\n\t\t\t\treturn 'rgba(0, 0, 0, 0.17);';\r\n\t\t\tcase 'exiting':\r\n\t\t\tcase 'exited':\r\n\t\t\t\treturn 'rgba(0, 0, 0, 0);';\r\n\t\t}\r\n\t}};\r\n`;\r\n\r\nexport const SearchBackgroundOverlayStyle = styled.div<ActiveNode>`\r\n\t${({ isActive }) => isActive && 'background-color:rgba(0, 0, 0, 0.17);'};\r\n\ttransition: background-color 200ms ease-in-out;\r\n\tposition: fixed;\r\n\ttop: 0;\r\n\tleft: 0;\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\toverflow-x: hidden;\r\n`;\r\n\r\nexport const BreadcrumbsContainer = styled.div`\r\n\tbackground-color: ${(props) =>\r\n\t\tprops.theme.isMicrositeActive\r\n\t\t\t? props.theme.colors.bgBreadcrumbs\r\n\t\t\t: props.theme.colors.white};\r\n\tborder-bottom: 1px solid rgba(151, 151, 151, 0.21);\r\n`;\r\n","import { ItemProps } from './MenuDropdown';\r\nimport styled, { css } from 'styled-components';\r\n\r\nexport const Dropdown = styled.div<any>`\r\n\tposition: absolute;\r\n\tmargin-top: 0.25rem;\r\n\tmargin-left: 0.125rem;\r\n\tborder-radius: 12px;\r\n\tbackground: ${(props) => props.theme.colors.white};\r\n\tbox-shadow: -1px 1px 4px #20202040;\r\n\tpadding: 8px;\r\n\tz-index: 2147483647;\r\n`;\r\n\r\nexport const MainContainer = styled.div`\r\n\tposition: relative;\r\n\r\n\tbutton: {\r\n\t\tbackground: ${(props) => props.theme.colors.blue2};\r\n\t}\r\n`;\r\n\r\nconst getActiveStyle = (isActive?: boolean) => {\r\n\tif (isActive) {\r\n\t\treturn '1px solid';\r\n\t} else {\r\n\t\treturn 'none';\r\n\t}\r\n};\r\n\r\nexport const DropdownItem = styled.button<ItemProps>`\r\n\tpadding: 16px 10px;\r\n\tborder-radius: 12px;\r\n\tbackground: transparent;\r\n\tborder: ${({ isActive }) => getActiveStyle(isActive)};\r\n\twidth: 100%;\r\n\tfont-weight: 600;\r\n\r\n\t&:hover,\r\n\t&:focus,\r\n\t&:focus-within {\r\n\t\tcursor: pointer;\r\n\t\tbackground: ${(props) =>\r\n\t\t\tprops.theme.isMicrositeActive\r\n\t\t\t\t? props.theme.colors.primary\r\n\t\t\t\t: props.theme.colors.secondaryBlue};\r\n\t\tcolor: #fff;\r\n\t}\r\n`;\r\n","/**\r\n * MenuDropdown\r\n */\r\n\r\nimport Button from 'components/Button';\r\nimport { useOutsideClick } from 'hooks/useOutsideClick';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport React, { useEffect, useRef, useState } from 'react';\r\nimport { Link as LinkInterface } from 'types/global';\r\nimport { Dropdown, DropdownItem, MainContainer } from './MenuDropdown.styles';\r\n\r\ninterface Props {\r\n\t/**Default header to use for menu, if any. */\r\n\tmobileHeader?: string;\r\n\t/** Menu Item List containing links to other pages or sections */\r\n\tlinks?: Array<LinkInterface | (LinkInterface & { code: string })>;\r\n\t/** bool var to pass the correct button variant */\r\n\tisMicrosite?: boolean;\r\n}\r\n\r\n/** Dropdown Menu for PageHeader */\r\nconst MenuDropdown: React.FC<Props> = ({\r\n\tlinks = [],\r\n\tmobileHeader,\r\n\tisMicrosite = false,\r\n}) => {\r\n\tconst [dropdownExpanded, setDropdownExpanded] = useState(false);\r\n\tconst [menuTitle, setMenuTitle] = useState<string>();\r\n\tlet containerRef = useRef<any>();\r\n\r\n\tuseOutsideClick(containerRef, () => {\r\n\t\tsetDropdownExpanded(false);\r\n\t});\r\n\r\n\tuseEffect(() => {\r\n\t\tsetMenuTitle(mobileHeader);\r\n\t}, [mobileHeader]);\r\n\r\n\tconst onLangChange = (newUrl?: string) => {\r\n\t\tif (newUrl) document.location.href = newUrl;\r\n\t};\r\n\r\n\treturn (\r\n\t\t<MainContainer ref={containerRef} role=\"menu\">\r\n\t\t\t<Button\r\n\t\t\t\ttype=\"button\"\r\n\t\t\t\tvariant={isMicrosite ? ButtonVariant.Microsite : ButtonVariant.Tertiary}\r\n\t\t\t\tonClick={() => setDropdownExpanded(!dropdownExpanded)}\r\n\t\t\t>\r\n\t\t\t\t{menuTitle}\r\n\t\t\t</Button>\r\n\t\t\t{dropdownExpanded && (\r\n\t\t\t\t<Dropdown>\r\n\t\t\t\t\t{links?.map((link, index) => (\r\n\t\t\t\t\t\t<DropdownItem\r\n\t\t\t\t\t\t\tisActive={link.active}\r\n\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\tonClick={() => onLangChange(link?.url)}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{link.text}\r\n\t\t\t\t\t\t</DropdownItem>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Dropdown>\r\n\t\t\t)}\r\n\t\t</MainContainer>\r\n\t);\r\n};\r\n\r\nexport default MenuDropdown;\r\n\r\nexport type ItemProps = {\r\n\tisActive?: boolean;\r\n};\r\n","import { useEffect } from 'react';\r\n\r\ninterface UseOutsideClick {\r\n\t(ref: any, callback: any): void;\r\n}\r\n\r\nexport const useOutsideClick: UseOutsideClick = (ref, callback) => {\r\n\tuseEffect(() => {\r\n\t\tconst listener = (e: any) => {\r\n\t\t\tif (ref.current && !ref.current.contains(e.target)) {\r\n\t\t\t\tcallback(e);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tdocument.addEventListener('mousedown', listener);\r\n\t\tdocument.addEventListener('touchstart', listener);\r\n\t\tdocument.addEventListener('focusin', listener);\r\n\r\n\t\treturn () => {\r\n\t\t\tdocument.removeEventListener('mousedown', listener);\r\n\t\t\tdocument.removeEventListener('touchstart', listener);\r\n\t\t\tdocument.removeEventListener('focusin', listener);\r\n\t\t};\r\n\t}, [ref, callback]);\r\n};\r\n","/**\r\n * MicrositeHeader\r\n */\r\n\r\nimport React, { useEffect, useState } from 'react';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport Link from 'components/Boilerplate/Link';\r\nimport Button from 'components/Button/Button';\r\nimport { SearchInputForm } from 'components/Panels/SearchInputForm';\r\nimport FocusTrap from 'focus-trap-react';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport { useSelector } from 'react-redux';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { useHistory, useLocation } from 'react-router-dom';\r\nimport { Transition } from 'react-transition-group';\r\nimport {\r\n\tselectContent,\r\n\tselectLocalization,\r\n\tselectSearch,\r\n} from 'store/modules/model';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport {\r\n\tLang,\r\n\tLogoModel,\r\n\tModelQuickLinksItem,\r\n\tNavigationItem,\r\n} from 'types/epi';\r\nimport { translate } from 'utils/helper-utils';\r\nimport { MicrositeHeaderLogoLink } from './MicrositeHeader.styles';\r\nimport {\r\n\tQuickLinksList,\r\n\tQuickLinksListItem,\r\n\tSearchContainer,\r\n\tSearchOverlay,\r\n\tSiteHeaderContainer,\r\n\tSiteHeaderContent,\r\n\tSiteHeaderMenuAndQuickLinks,\r\n\tSiterHeaderMenuAndSearch,\r\n} from '../../SiteHeader/SiteHeader.styles';\r\nimport MenuDropdown from 'components/MenuDropdown';\r\n\r\ninterface Props {\r\n\thome?: NavigationItem;\r\n\titemsAria?: string;\r\n\tquickLinks?: ModelQuickLinksItem[];\r\n\tlang?: Lang;\r\n\tisPopupMenuOpen: boolean;\r\n\tstyle?: any;\r\n\tonOpenMenu?: (isOpen: boolean) => void;\r\n\tonOpenSearchMenu?: (isOpen: boolean) => void;\r\n\tisSearchOpen: boolean;\r\n\tisMenuOpen: boolean;\r\n\tmicrositeLogo?: LogoModel;\r\n}\r\n\r\n/** Main description for this component. */\r\nconst MicrositeHeader = React.forwardRef<any, Props>(\r\n\t(\r\n\t\t{\r\n\t\t\tquickLinks = [],\r\n\t\t\tlang = {},\r\n\t\t\titemsAria = '',\r\n\t\t\thome,\r\n\t\t\tisPopupMenuOpen,\r\n\t\t\tonOpenMenu,\r\n\t\t\tonOpenSearchMenu,\r\n\t\t\tisSearchOpen = false,\r\n\t\t\tisMenuOpen = false,\r\n\t\t\tmicrositeLogo,\r\n\t\t},\r\n\t\tmenuButtonRef\r\n\t) => {\r\n\t\tconst menuClick = () => {\r\n\t\t\tcloseSearchMenu();\r\n\t\t\tif (onOpenMenu) {\r\n\t\t\t\tonOpenMenu(true);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst [isSearchPanelOpen, setIsSearchPanelOpen] = useState<boolean>(\r\n\t\t\tisPopupMenuOpen\r\n\t\t);\r\n\t\tconst pageContent = useSelector(selectContent);\r\n\r\n\t\tconst [animate, setAnimate] = useState(false);\r\n\r\n\t\tconst animSpeed = 200;\r\n\t\tconst search = useSelector(selectSearch);\r\n\r\n\t\tconst searchButtonRef = React.createRef<any>();\r\n\t\tconst searchOverlayRef = React.createRef<any>();\r\n\r\n\t\tconst location = useLocation();\r\n\t\tconst history = useHistory();\r\n\t\tconst localization = useSelector(selectLocalization);\r\n\r\n\t\tconst ariaLabel = translate(\r\n\t\t\t'/frontend/components/searchBar/searcharialabel',\r\n\t\t\t'Search',\r\n\t\t\tlocalization\r\n\t\t);\r\n\t\tconst searchButtonLabel = translate(\r\n\t\t\t'/frontend/components/headerMenu/search',\r\n\t\t\t'Search',\r\n\t\t\tlocalization\r\n\t\t);\r\n\t\tconst menuButtonLabel = translate(\r\n\t\t\t'/frontend/components/headerMenu/menu',\r\n\t\t\t'Menu',\r\n\t\t\tlocalization\r\n\t\t);\r\n\r\n\t\titemsAria = translate(\r\n\t\t\t'/frontend/components/headerMenu/itemsaria',\r\n\t\t\t'Main menu',\r\n\t\t\tlocalization\r\n\t\t);\r\n\r\n\t\t// hide QuickLinks till 635 pixel width\r\n\t\tconst breakpointsQuickLinks: number = 635;\r\n\r\n\t\tconst isNarrowDisplay = useMediaQuery({\r\n\t\t\tminWidth: breakpointsNumber.phone,\r\n\t\t\tmaxWidth: breakpointsQuickLinks,\r\n\t\t});\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (isSearchPanelOpen) {\r\n\t\t\t\tcloseSearchMenu();\r\n\t\t\t}\r\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t\t}, [location]);\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\t// This is to updated epi quicknavigator link with current page id\r\n\t\t\tvar epiNavigator: HTMLAnchorElement | null = document.querySelector(\r\n\t\t\t\t'#epi-quickNavigator > li:first-of-type > a:first-of-type'\r\n\t\t\t);\r\n\t\t\tif (epiNavigator && pageContent && epiNavigator.href) {\r\n\t\t\t\tconst prefix = ':///';\r\n\t\t\t\tconst pos = epiNavigator.href.lastIndexOf(prefix);\r\n\t\t\t\tif (pos !== -1) {\r\n\t\t\t\t\tepiNavigator.href =\r\n\t\t\t\t\t\tepiNavigator.href.substring(0, pos) + prefix + pageContent.id;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, [location, pageContent]);\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (onOpenSearchMenu) {\r\n\t\t\t\tonOpenSearchMenu(isSearchPanelOpen);\r\n\t\t\t}\r\n\r\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t\t}, [isSearchPanelOpen, onOpenSearchMenu]);\r\n\r\n\t\tconst closeSearchMenu = () => {\r\n\t\t\tsetAnimate(false);\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tsetIsSearchPanelOpen(false);\r\n\t\t\t}, animSpeed);\r\n\t\t};\r\n\r\n\t\tconst openSearchMenu = () => {\r\n\t\t\tsetIsSearchPanelOpen(true);\r\n\t\t\tsetAnimate(true);\r\n\t\t};\r\n\r\n\t\tconst setFocusOnSearchButton = () => {\r\n\t\t\tif (searchButtonRef && searchButtonRef.current) {\r\n\t\t\t\tsearchButtonRef.current.focus();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst handleSearchSubmit = (query: string) => {\r\n\t\t\tcloseSearchMenu();\r\n\r\n\t\t\thistory.push({ pathname: search?.searchPageUrl, search: `?q=${query}` });\r\n\t\t\thistory.go(0);\r\n\t\t};\r\n\r\n\t\tconst onSearchMenuEsc = () => {\r\n\t\t\tsetFocusOnSearchButton();\r\n\t\t\tcloseSearchMenu();\r\n\t\t};\r\n\r\n\t\tconst onSearchMenuClick = () => {\r\n\t\t\tisSearchPanelOpen ? closeSearchMenu() : openSearchMenu();\r\n\t\t};\r\n\r\n\t\tconst onMouseClickOutsideSearchOverlay = (e: any) => {\r\n\t\t\tif (searchOverlayRef.current === e.target) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tcloseSearchMenu();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<FocusTrap\r\n\t\t\t\tactive={!isMenuOpen && isSearchOpen}\r\n\t\t\t\tfocusTrapOptions={{ preventScroll: true }}\r\n\t\t\t>\r\n\t\t\t\t<SiteHeaderContainer style={{ zIndex: 1 }}>\r\n\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t<SiteHeaderContent>\r\n\t\t\t\t\t\t\t<MicrositeHeaderLogoLink\r\n\t\t\t\t\t\t\t\tshowLinkIcon={false}\r\n\t\t\t\t\t\t\t\tdata-testid=\"logoLink\"\r\n\t\t\t\t\t\t\t\tto={home && home.url ? home.url : '/'}\r\n\t\t\t\t\t\t\t\theight={micrositeLogo?.height}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<img src={micrositeLogo?.src} alt={micrositeLogo?.alt} />\r\n\t\t\t\t\t\t\t</MicrositeHeaderLogoLink>\r\n\t\t\t\t\t\t\t<SiterHeaderMenuAndSearch>\r\n\t\t\t\t\t\t\t\t<SiteHeaderMenuAndQuickLinks aria-label={itemsAria}>\r\n\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\ticonName=\"menu\"\r\n\t\t\t\t\t\t\t\t\t\tref={menuButtonRef}\r\n\t\t\t\t\t\t\t\t\t\ticonPosition={isNarrowDisplay ? 0 : 1}\r\n\t\t\t\t\t\t\t\t\t\taria-expanded={isPopupMenuOpen}\r\n\t\t\t\t\t\t\t\t\t\taria-haspopup=\"dialog\"\r\n\t\t\t\t\t\t\t\t\t\tonClick={menuClick}\r\n\t\t\t\t\t\t\t\t\t\tvariant={ButtonVariant.Microsite}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{menuButtonLabel}\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t{!isNarrowDisplay && (\r\n\t\t\t\t\t\t\t\t\t\t<QuickLinks\r\n\t\t\t\t\t\t\t\t\t\t\titemsAria={itemsAria}\r\n\t\t\t\t\t\t\t\t\t\t\titems={quickLinks}\r\n\t\t\t\t\t\t\t\t\t\t></QuickLinks>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</SiteHeaderMenuAndQuickLinks>\r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t{(() => {\r\n\t\t\t\t\t\t\t\t\t\tif (lang && lang.items && lang.items?.length > 1) {\r\n\t\t\t\t\t\t\t\t\t\t\tconst { items, menuHeaderIsItem } = lang;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tconst activeItem = menuHeaderIsItem\r\n\t\t\t\t\t\t\t\t\t\t\t\t? items?.find((l) => !l.active)\r\n\t\t\t\t\t\t\t\t\t\t\t\t: items?.[0];\r\n\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<MenuDropdown\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tlinks={items}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmobileHeader={activeItem?.text}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tisMicrosite\r\n\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t})()}\r\n\t\t\t\t\t\t\t\t</>\r\n\r\n\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\tref={searchButtonRef}\r\n\t\t\t\t\t\t\t\t\taria-expanded={isSearchPanelOpen}\r\n\t\t\t\t\t\t\t\t\ticonPosition={isNarrowDisplay ? 0 : 1}\r\n\t\t\t\t\t\t\t\t\ticonName={isSearchPanelOpen ? 'cross' : 'search'}\r\n\t\t\t\t\t\t\t\t\tonClick={onSearchMenuClick}\r\n\t\t\t\t\t\t\t\t\tvariant={ButtonVariant.Microsite}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{searchButtonLabel}\r\n\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t</SiterHeaderMenuAndSearch>\r\n\t\t\t\t\t\t</SiteHeaderContent>\r\n\t\t\t\t\t</Grid>\r\n\r\n\t\t\t\t\t<Transition\r\n\t\t\t\t\t\tin={animate}\r\n\t\t\t\t\t\ttimeout={animSpeed}\r\n\t\t\t\t\t\tmountOnEnter={true}\r\n\t\t\t\t\t\tunmountOnExit={true}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{(state) => (\r\n\t\t\t\t\t\t\t<SearchOverlay\r\n\t\t\t\t\t\t\t\trole=\"dialog\"\r\n\t\t\t\t\t\t\t\taria-label={ariaLabel}\r\n\t\t\t\t\t\t\t\taria-modal={true}\r\n\t\t\t\t\t\t\t\tref={searchOverlayRef}\r\n\t\t\t\t\t\t\t\tstate={state}\r\n\t\t\t\t\t\t\t\tonClick={onMouseClickOutsideSearchOverlay}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<SearchContainer state={state}>\r\n\t\t\t\t\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t\t\t\t\t<SearchInputForm\r\n\t\t\t\t\t\t\t\t\t\t\tlabel={search?.searchLabel}\r\n\t\t\t\t\t\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t\t\t\t\t\tonSubmit={handleSearchSubmit}\r\n\t\t\t\t\t\t\t\t\t\t\tonEsc={onSearchMenuEsc}\r\n\t\t\t\t\t\t\t\t\t\t\tquery=\"\"\r\n\t\t\t\t\t\t\t\t\t\t\tmicrositeActive\r\n\t\t\t\t\t\t\t\t\t\t\tisNarrowDisplay={isNarrowDisplay}\r\n\t\t\t\t\t\t\t\t\t\t></SearchInputForm>\r\n\t\t\t\t\t\t\t\t\t</Grid>\r\n\t\t\t\t\t\t\t\t</SearchContainer>\r\n\t\t\t\t\t\t\t</SearchOverlay>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Transition>\r\n\t\t\t\t</SiteHeaderContainer>\r\n\t\t\t</FocusTrap>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nexport default MicrositeHeader;\r\n\r\ninterface QuickLinksProps {\r\n\titems: ModelQuickLinksItem[];\r\n\titemsAria: string;\r\n}\r\n\r\ntype ActiveNode = {\r\n\tisActive: boolean;\r\n};\r\n\r\nconst QuickLinks = ({ items, itemsAria }: QuickLinksProps) => {\r\n\tconst location = useLocation();\r\n\r\n\tfunction getPath(url: string): string | null {\r\n\t\tconst urlpaths = url.split('/');\r\n\t\tif (url.charAt(0) === '/' && urlpaths.length > 0) {\r\n\t\t\tvar paths = '/';\r\n\t\t\turlpaths.forEach((path) => {\r\n\t\t\t\tif (path != '') paths += path + '/';\r\n\t\t\t});\r\n\r\n\t\t\treturn paths;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (\r\n\t\t<QuickLinksList>\r\n\t\t\t{items.map((item, index) => {\r\n\t\t\t\tlet itemPath = getPath(item.url);\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<QuickLinksListItem\r\n\t\t\t\t\t\tisActive={location.pathname === itemPath}\r\n\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Link showLinkIcon={false} to={item.url}>\r\n\t\t\t\t\t\t\t{item.heading}\r\n\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t</QuickLinksListItem>\r\n\t\t\t\t);\r\n\t\t\t})}\r\n\t\t</QuickLinksList>\r\n\t);\r\n};\r\n","/**\r\n * MicrositeFooter - styles\r\n */\r\nimport Link from 'components/Boilerplate/Link';\r\nimport { mediaQueries } from 'theme';\r\nimport { P } from 'components/Typography';\r\nimport styled from 'styled-components';\r\nimport { px2rem } from 'theme/utils';\r\nexport const Div = styled.div``;\r\n\r\nexport const MicrositeFooterLogoLink = styled(Link)`\r\n\tflex: 0 0 auto;\r\n\timg {\r\n\t\theight: ${(props) => props.height || 'auto'};\r\n\t}\r\n`;\r\n\r\nexport const MicrositeContainer = styled(Div)`\r\n\tbackground-color: ${(p) => p.theme.colors.primary};\r\n\tcolor: ${(p) => p.theme.colors.white};\r\n\tpadding-bottom: ${px2rem(80)};\r\n\tpadding-top: ${px2rem(80)};\r\n\t${mediaQueries.phone} {\r\n\t\tpadding-top: ${px2rem(50)};\r\n\t\tpadding-bottom: ${px2rem(50)};\r\n\t}\r\n`;\r\n\r\nexport const MicrositeFooterSectionContainer = styled(Div)`\r\n\tpadding-top: ${px2rem(40)};\r\n`;\r\n\r\nexport const MicrositeFooterLinkContainer = styled(Div)`\r\n\tpadding-top: ${px2rem(8)};\r\n`;\r\n\r\nexport const MicrositeFooterTextContainer = styled(Div)`\r\n\tpadding-top: ${px2rem(12)};\r\n`;\r\n","import Link from 'components/Boilerplate/Link';\r\nimport { P } from 'components/Typography';\r\nimport styled from 'styled-components';\r\nimport { accessibilityFocus } from 'theme/styles';\r\nimport { px2rem } from 'theme/utils';\r\n\r\nexport const FooterSectionHeader = styled(Link)`\r\n\tdisplay: inline-block;\r\n\tletter-spacing: 1.2px;\r\n\tcolor: inherit;\r\n\ttext-transform: uppercase;\r\n\t&:focus {\r\n\t\t${accessibilityFocus()};\r\n\t}\r\n`;\r\n\r\nexport const FooterSectionItemList = styled.ul`\r\n\tlist-style-type: none;\r\n\tpadding: 0px;\r\n\tmargin: 0px;\r\n\r\n\t> *:first-child {\r\n\t\tmargin-top: ${(props) =>\r\n\t\t\tprops.theme.isMicrositeActive ? '0rem' : props.theme.spacing.space1}rem;\r\n\t}\r\n`;\r\n\r\nexport const FooterSectionItem = styled.li`\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n`;\r\n\r\nexport const FooterSectionLink = styled(Link)`\r\n\tline-height: ${(props) =>\r\n\t\tprops.theme.isMicrositeActive ? px2rem(27) : px2rem(32)};\r\n\tcolor: inherit;\r\n\t&:focus {\r\n\t\t${accessibilityFocus()};\r\n\t}\r\n`;\r\n\r\nexport const FooterSectionText = styled(P)`\r\n\t${(props) => props.theme.typography.style8.getStyle()};\r\n\tcolor: inherit;\r\n\tpadding: 0px;\r\n\tmargin: 0px;\r\n\r\n\t&:focus {\r\n\t\t${accessibilityFocus()};\r\n\t}\r\n`;\r\n\r\nexport const FooterSectionTextEmail = styled.a`\r\n\t${(props) => props.theme.typography.style8.getStyle()};\r\n\tcolor: white;\r\n\tpadding: 0px;\r\n\tmargin: 0px;\r\n\tcursor: pointer;\r\n\ttext-decoration: none;\r\n\t&:focus {\r\n\t\t${accessibilityFocus()};\r\n\t}\r\n\t&:hover {\r\n\t\ttext-decoration: underline;\r\n\t}\r\n`;\r\n\r\nexport const SocialLogoStyle = styled.img`\r\n\tmargin-right: ${(props) => props.theme.spacing.space1}rem;\r\n\tmax-width: 28px;\r\n\tmax-height: 28px;\r\n\tmargin-top: 7px;\r\n\tmargin-bottom: 9px;\r\n`;\r\n","/**\r\n * MicrositeFooter\r\n */\r\n\r\nimport React, { useContext } from 'react';\r\nimport { CustomerService, LogoModel, ModelFooterSection } from 'types/epi';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectLocalization } from 'store/modules/model';\r\nimport {\r\n\tMicrositeContainer,\r\n\tMicrositeFooterLinkContainer,\r\n\tMicrositeFooterLogoLink,\r\n\tMicrositeFooterSectionContainer,\r\n\tMicrositeFooterTextContainer,\r\n} from './MicrositeFooter.styles';\r\nimport { Cell, Grid } from 'components/Boilerplate/Grid';\r\nimport { ThemeContext } from 'styled-components';\r\nimport {\r\n\tFooterSectionItem,\r\n\tFooterSectionItemList,\r\n\tFooterSectionLink,\r\n\tFooterSectionText,\r\n\tFooterSectionTextEmail,\r\n\tSocialLogoStyle,\r\n} from 'components/SiteFooter/FooterSection.styles';\r\nimport { Heading } from 'components/Typography/Typography';\r\n\r\ninterface Props {\r\n\tfooterGroups: ModelFooterSection[];\r\n\tcustomerService: CustomerService;\r\n\tmicrositeLogo?: LogoModel;\r\n}\r\n\r\nconst MicrositeFooter: React.FC<Props> = ({\r\n\tcustomerService,\r\n\tmicrositeLogo,\r\n}) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\tconst localization = useSelector(selectLocalization);\r\n\treturn (\r\n\t\t<footer>\r\n\t\t\t<MicrositeContainer>\r\n\t\t\t\t<nav aria-label=\"footer navigation\">\r\n\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t<MicrositeFooterLogoLink\r\n\t\t\t\t\t\t\tshowLinkIcon={false}\r\n\t\t\t\t\t\t\tdata-testid=\"logoLink\"\r\n\t\t\t\t\t\t\tto={micrositeLogo && micrositeLogo.url ? micrositeLogo.url : '/'}\r\n\t\t\t\t\t\t\theight={micrositeLogo?.height}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<img\r\n\t\t\t\t\t\t\t\tdata-testid=\"logoImage\"\r\n\t\t\t\t\t\t\t\tsrc={micrositeLogo?.src}\r\n\t\t\t\t\t\t\t\talt={micrositeLogo?.alt}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</MicrositeFooterLogoLink>\r\n\t\t\t\t\t\t<MicrositeFooterSectionContainer>\r\n\t\t\t\t\t\t\t<Grid inner={true}>\r\n\t\t\t\t\t\t\t\t<Cell span={4} tablet={4} phone={4}>\r\n\t\t\t\t\t\t\t\t\t<Heading\r\n\t\t\t\t\t\t\t\t\t\tlevel={2}\r\n\t\t\t\t\t\t\t\t\t\tstyleLevel={2}\r\n\t\t\t\t\t\t\t\t\t\tzeroBottom={true}\r\n\t\t\t\t\t\t\t\t\t\tcolor={themeContext?.colors.white}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{customerService?.footerLinkList.heading}\r\n\t\t\t\t\t\t\t\t\t</Heading>\r\n\r\n\t\t\t\t\t\t\t\t\t<FooterSectionItemList>\r\n\t\t\t\t\t\t\t\t\t\t{customerService.footerLinkList.links.map((item, index) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<FooterSectionItem key={index}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<MicrositeFooterLinkContainer>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<FooterSectionLink to={item?.url}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item?.heading}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</FooterSectionLink>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</MicrositeFooterLinkContainer>\r\n\t\t\t\t\t\t\t\t\t\t\t</FooterSectionItem>\r\n\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t</FooterSectionItemList>\r\n\t\t\t\t\t\t\t\t</Cell>\r\n\t\t\t\t\t\t\t\t<Cell span={4} tablet={4} phone={4}>\r\n\t\t\t\t\t\t\t\t\t<Heading\r\n\t\t\t\t\t\t\t\t\t\tlevel={2}\r\n\t\t\t\t\t\t\t\t\t\tstyleLevel={2}\r\n\t\t\t\t\t\t\t\t\t\tzeroBottom={true}\r\n\t\t\t\t\t\t\t\t\t\tcolor={themeContext?.colors.white}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{customerService?.heading}\r\n\t\t\t\t\t\t\t\t\t</Heading>\r\n\r\n\t\t\t\t\t\t\t\t\t<FooterSectionItemList>\r\n\t\t\t\t\t\t\t\t\t\t{customerService?.contactInformation &&\r\n\t\t\t\t\t\t\t\t\t\t\tcustomerService?.contactInformation.map((item, index) => (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<FooterSectionItem key={index}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<MicrositeFooterTextContainer>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item?.key === 'Email' ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<FooterSectionTextEmail\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thref={`mailto:${item?.value}`}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item?.value}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</FooterSectionTextEmail>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<FooterSectionText>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item?.value}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</FooterSectionText>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</MicrositeFooterTextContainer>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</FooterSectionItem>\r\n\t\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t</FooterSectionItemList>\r\n\t\t\t\t\t\t\t\t</Cell>\r\n\t\t\t\t\t\t\t\t{customerService?.socialLinks && (\r\n\t\t\t\t\t\t\t\t\t<Cell span={4} tablet={4} phone={4}>\r\n\t\t\t\t\t\t\t\t\t\t<Heading\r\n\t\t\t\t\t\t\t\t\t\t\tlevel={2}\r\n\t\t\t\t\t\t\t\t\t\t\tstyleLevel={2}\r\n\t\t\t\t\t\t\t\t\t\t\tzeroBottom={true}\r\n\t\t\t\t\t\t\t\t\t\t\tcolor={themeContext?.colors.white}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{customerService?.socialLinks.heading}\r\n\t\t\t\t\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t\t\t\t\t<FooterSectionItemList>\r\n\t\t\t\t\t\t\t\t\t\t\t{customerService?.socialLinks &&\r\n\t\t\t\t\t\t\t\t\t\t\t\tcustomerService?.socialLinks.links.map(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(item, index) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<FooterSectionItem key={index}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item.icon && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<SocialLogoStyle\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth={item.icon?.width}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theight={item.icon?.height}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsrc={item.icon?.src}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\talt={item.icon?.alt}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t></SocialLogoStyle>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<FooterSectionLink\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tto={item.link?.url}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item.link?.heading}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</FooterSectionLink>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</FooterSectionItem>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</FooterSectionItemList>\r\n\t\t\t\t\t\t\t\t\t</Cell>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</Grid>\r\n\t\t\t\t\t\t</MicrositeFooterSectionContainer>\r\n\t\t\t\t\t</Grid>\r\n\t\t\t\t</nav>\r\n\t\t\t</MicrositeContainer>\r\n\t\t</footer>\r\n\t);\r\n};\r\n\r\nexport default MicrositeFooter;\r\n","/** Microsite Types & Themes */\r\nimport { css } from 'styled-components';\r\nimport { ThemeProvider } from 'styled-components';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectMicrosite } from 'store/modules/model';\r\nimport {\r\n\tColors,\r\n\tPalette,\r\n\tSpacing,\r\n\tTextPalette,\r\n\tThemeType,\r\n\tTypographyType,\r\n} from './theme';\r\nimport { px, px2rem } from './utils';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport { ModelMicrositeStyles } from 'types/epi';\r\n\r\ntype MicrositeFonts = {\r\n\tprimaryFontFamily: string;\r\n\tsecondaryFontFamily: string;\r\n};\r\n\r\nconst getCssStyle = (o: TypographyType): any => {\r\n\treturn css`\r\n\t\tfont-family: ${o.fontFamily};\r\n\t\tfont-weight: ${o.fontWeight};\r\n\t\tfont-size: ${o.fontSize};\r\n\t\tline-height: ${o.lineHeight};\r\n\t\tletter-spacing: ${o.letterSpacing};\r\n\t\ttext-transform: ${o.textTransform};\r\n\t\t${o.color && `color:${o.color};`};\r\n\t`;\r\n};\r\n\r\nconst MicrositeThemeProvider = ({ children }: any) => {\r\n\tconst isNarrowDisplay = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.desktop - 1,\r\n\t});\r\n\tconst microsite = useSelector(selectMicrosite);\r\n\tconst theme = microsite?.theme;\r\n\r\n\tconst micrositeColors = {\r\n\t\tprimary: theme?.colors.primaryColor,\r\n\t\tsecondary: theme?.colors.secondaryColor,\r\n\t\ttertiary: theme?.colors.tertiaryColor,\r\n\t\tquaternary: theme?.colors.quaternaryColor,\r\n\t\tbgBreadcrumbs: '#F8F8F8',\r\n\t\tcommonAccentHue: '#2B2B2B',\r\n\t\tcommonBgColor: '#F2F2F2',\r\n\t\tblack: '#000000',\r\n\t\twhite: '#FFFFFF',\r\n\t} as Colors;\r\n\r\n\tconst micrositePalette: Palette = {\r\n\t\ttext: {\r\n\t\t\tprimary: theme?.textPalette.primary, //'#454545',\r\n\t\t\tsecondary: theme?.textPalette.secondary, //'#FFFFFF', used in header buttons on hover\r\n\t\t\tdisabled: '#000000',\r\n\t\t\terror: '#E02C55',\r\n\t\t\thint: '#8C8279',\r\n\t\t} as TextPalette,\r\n\t};\r\n\r\n\tconst micrositeFonts = {\r\n\t\tprimaryFontFamily: theme?.typographyType.primaryFontFamily,\r\n\t\tsecondaryFontFamily: theme?.typographyType.secondaryFontFamily,\r\n\t} as MicrositeFonts;\r\n\r\n\tconst ThemeMicrositeDesktop: ThemeType = {\r\n\t\tname: 'Theme Microsite Desktop',\r\n\t\tisMicrositeActive: true,\r\n\t\tcolors: micrositeColors,\r\n\t\tpalette: micrositePalette,\r\n\t\ttypography: {\r\n\t\t\tstyle1: {\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tfontFamily: micrositeFonts.primaryFontFamily,\r\n\t\t\t\tfontWeight: 700,\r\n\t\t\t\tfontSize: px2rem(48),\r\n\t\t\t\tlineHeight: px2rem(57),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle2: {\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tfontFamily: micrositeFonts.primaryFontFamily,\r\n\t\t\t\tfontWeight: 700,\r\n\t\t\t\tfontSize: px2rem(32),\r\n\t\t\t\tlineHeight: px2rem(48),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle3: {\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tfontFamily: micrositeFonts.primaryFontFamily,\r\n\t\t\t\tfontWeight: 700,\r\n\t\t\t\tfontSize: px2rem(24),\r\n\t\t\t\tlineHeight: px2rem(36),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle4: {\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tfontFamily: micrositeFonts.primaryFontFamily,\r\n\t\t\t\tfontWeight: 500,\r\n\t\t\t\tfontSize: px2rem(20),\r\n\t\t\t\tlineHeight: px2rem(32),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle5: {\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tfontFamily: micrositeFonts.primaryFontFamily,\r\n\t\t\t\tfontWeight: 400,\r\n\t\t\t\tfontSize: px2rem(18),\r\n\t\t\t\tlineHeight: px2rem(28),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle6: {\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tfontFamily: micrositeFonts.primaryFontFamily,\r\n\t\t\t\tfontWeight: 500,\r\n\t\t\t\tfontSize: px2rem(18),\r\n\t\t\t\tlineHeight: px2rem(27),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle7: {\r\n\t\t\t\t// preamble\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tfontFamily: micrositeFonts.primaryFontFamily,\r\n\t\t\t\tfontWeight: 400,\r\n\t\t\t\tfontSize: px2rem(24),\r\n\t\t\t\tlineHeight: px2rem(36),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle8: {\r\n\t\t\t\t// paragraph\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tfontFamily: micrositeFonts.secondaryFontFamily,\r\n\t\t\t\tfontWeight: 400,\r\n\t\t\t\tfontSize: px2rem(16),\r\n\t\t\t\tlineHeight: px2rem(24),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle9: {\r\n\t\t\t\t// Byline (SimplePuff,GrantPuff,StandardPuff)\r\n\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\t\t\t\tfontFamily: micrositeFonts.secondaryFontFamily,\r\n\t\t\t\tfontWeight: 400,\r\n\t\t\t\tfontSize: px2rem(16),\r\n\t\t\t\tlineHeight: px2rem(24),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle10: {\r\n\t\t\t\t// EXTRA\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\t\t\t\tfontFamily: micrositeFonts.primaryFontFamily,\r\n\t\t\t\tfontWeight: 400,\r\n\t\t\t\tfontSize: px2rem(18),\r\n\t\t\t\tlineHeight: px2rem(28),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle11: {\r\n\t\t\t\t// EXTRA, Button text, Grant Puff\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\t\t\t\tfontFamily: micrositeFonts.primaryFontFamily,\r\n\t\t\t\tfontWeight: 400,\r\n\t\t\t\tfontSize: px2rem(18),\r\n\t\t\t\tlineHeight: px2rem(27),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle12: {\r\n\t\t\t\t// EXTRA, Menu desktop, second level menuitems, legends\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\t\t\t\tfontFamily: micrositeFonts.primaryFontFamily,\r\n\t\t\t\tfontWeight: 500,\r\n\t\t\t\tfontSize: px2rem(18),\r\n\t\t\t\tlineHeight: px2rem(27),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle13: {\r\n\t\t\t\t// EXTRA, figcaptions (image captions / bildtexter in RTE/TinyMCE)\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tfontFamily: micrositeFonts.secondaryFontFamily,\r\n\t\t\t\tfontSize: px2rem(14),\r\n\t\t\t\tlineHeight: '1.4',\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t},\r\n\t\tspacing: {\r\n\t\t\tgetSection() {\r\n\t\t\t\treturn this.space5;\r\n\t\t\t},\r\n\t\t\tgetElement() {\r\n\t\t\t\treturn this.space4;\r\n\t\t\t},\r\n\t\t\tgetTextAndElement() {\r\n\t\t\t\treturn this.space3;\r\n\t\t\t},\r\n\t\t\tgetText() {\r\n\t\t\t\treturn this.space1;\r\n\t\t\t},\r\n\t\t\tgetPageTopPadding() {\r\n\t\t\t\t// Page top padding\r\n\t\t\t\treturn this.space6;\r\n\t\t\t},\r\n\t\t\tspace1: px(8), // Between texts\r\n\t\t\tspace2: px(16),\r\n\t\t\tspace3: px(24), // Between texts and elements that should be close\r\n\t\t\tspace4: px(32),\r\n\t\t\tspace5: px(40), // Between Elements\r\n\t\t\tspace6: px(80),\r\n\t\t\tspace7: px(96), // Between Blocks\r\n\t\t\tspace8: px(144), // Between last block and footer\r\n\t\t},\r\n\t};\r\n\r\n\tconst ThemeMicrositeMobile: ThemeType = {\r\n\t\tname: 'Theme Microsite Mobile',\r\n\t\tisMicrositeActive: true,\r\n\t\tcolors: micrositeColors,\r\n\t\tpalette: micrositePalette,\r\n\t\ttypography: {\r\n\t\t\tstyle1: {\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tfontFamily: micrositeFonts.primaryFontFamily,\r\n\t\t\t\tfontWeight: 700,\r\n\t\t\t\tfontSize: px2rem(32),\r\n\t\t\t\tlineHeight: px2rem(41),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle2: {\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tfontFamily: micrositeFonts.primaryFontFamily,\r\n\t\t\t\tfontWeight: 700,\r\n\t\t\t\tfontSize: px2rem(24),\r\n\t\t\t\tlineHeight: px2rem(36),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle3: {\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tfontFamily: micrositeFonts.primaryFontFamily,\r\n\t\t\t\tfontWeight: 700,\r\n\t\t\t\tfontSize: px2rem(24),\r\n\t\t\t\tlineHeight: px2rem(36),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle4: {\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tfontFamily: micrositeFonts.primaryFontFamily,\r\n\t\t\t\tfontWeight: 400,\r\n\t\t\t\tfontSize: px2rem(18),\r\n\t\t\t\tlineHeight: px2rem(24),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle5: {\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tfontFamily: micrositeFonts.primaryFontFamily,\r\n\t\t\t\tfontWeight: 500,\r\n\t\t\t\tfontSize: px2rem(16),\r\n\t\t\t\tlineHeight: px2rem(20),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle6: {\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tfontFamily: micrositeFonts.primaryFontFamily,\r\n\t\t\t\tfontWeight: 400,\r\n\t\t\t\tfontSize: px2rem(18),\r\n\t\t\t\tlineHeight: px2rem(28),\r\n\t\t\t\tletterSpacing: px2rem(0),\r\n\t\t\t},\r\n\t\t\tstyle7: {\r\n\t\t\t\t// preamble\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tfontFamily: micrositeFonts.primaryFontFamily,\r\n\t\t\t\tfontWeight: 400,\r\n\t\t\t\tfontSize: px2rem(20),\r\n\t\t\t\tlineHeight: px2rem(30),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle8: {\r\n\t\t\t\t// paragraph\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tfontFamily: micrositeFonts.secondaryFontFamily,\r\n\t\t\t\tfontWeight: 400,\r\n\t\t\t\tfontSize: px2rem(16),\r\n\t\t\t\tlineHeight: px2rem(24),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle9: {\r\n\t\t\t\t// Byline (SimplePuff,GrantPuff,StandardPuff)\r\n\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\t\t\t\tfontFamily: micrositeFonts.secondaryFontFamily,\r\n\t\t\t\tfontWeight: 400,\r\n\t\t\t\tfontSize: px2rem(16),\r\n\t\t\t\tlineHeight: px2rem(24),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle10: {\r\n\t\t\t\t// EXTRA\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\t\t\t\tfontFamily: micrositeFonts.primaryFontFamily,\r\n\t\t\t\tfontWeight: 400,\r\n\t\t\t\tfontSize: px2rem(18),\r\n\t\t\t\tlineHeight: px2rem(28),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle11: {\r\n\t\t\t\t// EXTRA, Button text, Grant Puff\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\t\t\t\tfontFamily: micrositeFonts.primaryFontFamily,\r\n\t\t\t\tfontWeight: 400,\r\n\t\t\t\tfontSize: px2rem(18),\r\n\t\t\t\tlineHeight: px2rem(27),\r\n\t\t\t},\r\n\t\t\tstyle12: {\r\n\t\t\t\t// EXTRA, Menu desktop, second level menuitems, legends\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\t\t\t\tfontFamily: micrositeFonts.secondaryFontFamily,\r\n\t\t\t\tfontWeight: 400,\r\n\t\t\t\tfontSize: px2rem(18),\r\n\t\t\t\tlineHeight: px2rem(27),\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t\tstyle13: {\r\n\t\t\t\t// EXTRA, figcaptions (image captions / bildtexter in RTE/TinyMCE)\r\n\t\t\t\tgetStyle() {\r\n\t\t\t\t\treturn getCssStyle(this);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tfontFamily: micrositeFonts.secondaryFontFamily,\r\n\t\t\t\tfontSize: px2rem(14),\r\n\t\t\t\tlineHeight: '1.4',\r\n\t\t\t\tletterSpacing: '0',\r\n\t\t\t},\r\n\t\t},\r\n\t\tspacing: {\r\n\t\t\tgetSection() {\r\n\t\t\t\treturn this.space5;\r\n\t\t\t},\r\n\t\t\tgetElement() {\r\n\t\t\t\treturn this.space4;\r\n\t\t\t},\r\n\t\t\tgetTextAndElement() {\r\n\t\t\t\treturn this.space3;\r\n\t\t\t},\r\n\t\t\tgetText() {\r\n\t\t\t\treturn this.space1;\r\n\t\t\t},\r\n\t\t\tgetPageTopPadding() {\r\n\t\t\t\t// Page top padding\r\n\t\t\t\treturn this.space5;\r\n\t\t\t},\r\n\t\t\tspace1: px(8), // Between texts\r\n\t\t\tspace2: px(16),\r\n\t\t\tspace3: px(24), // Between texts and elements that should be close\r\n\t\t\tspace4: px(32),\r\n\t\t\tspace5: px(40), // Between Elements\r\n\t\t\tspace6: px(80),\r\n\t\t\tspace7: px(96), // Between Blocks\r\n\t\t\tspace8: px(144), // Between last block and footer\r\n\t\t},\r\n\t};\r\n\r\n\treturn (\r\n\t\t<ThemeProvider\r\n\t\t\ttheme={isNarrowDisplay ? ThemeMicrositeMobile : ThemeMicrositeDesktop}\r\n\t\t>\r\n\t\t\t{children}\r\n\t\t</ThemeProvider>\r\n\t);\r\n};\r\n\r\nexport default MicrositeThemeProvider;\r\n","import { useEffect, useRef, useState } from 'react';\r\nimport { AppProps, getLocation, routePatterns } from 'App';\r\nimport { selectMicrosite } from 'store/modules/model';\r\nimport { useSelector } from 'react-redux';\r\nimport { MicrositeGlobalStyle } from 'theme/micrositeGlobal';\r\nimport Breadcrumbs, {\r\n\tBreadcrumbItemtype,\r\n} from 'components/Breadcrumbs/Breadcrumbs';\r\nimport { Route, Switch } from 'react-router-dom';\r\nimport { RouteHandler } from 'routeHandler';\r\nimport MegaMenu from 'components/MegaMenu';\r\nimport MenuMobile from 'components/MenuMobile';\r\nimport MicrositeHeader from 'components/microsite/MicrositeHeader';\r\nimport MicrositeFooter from 'components/microsite/MicrositeFooter';\r\nimport MicrositeThemeProvider from 'theme/MicrositeTheme';\r\nimport { BreadcrumbsContainer } from 'components/SiteHeader/SiteHeader.styles';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\n\r\nconst MicrositeApp = ({\r\n\tisNarrowDisplay,\r\n\tRouter,\r\n\tbreadcrumbs,\r\n\tnavigation,\r\n\tquickLinks,\r\n\tskipToContent,\r\n\tlang,\r\n\tfooter,\r\n\tpageContent,\r\n}: AppProps) => {\r\n\tconst microsite = useSelector(selectMicrosite);\r\n\r\n\tconst [headerLogo, setHeaderLogo] = useState<any>();\r\n\tconst [footerLogo, setFooterLogo] = useState<any>();\r\n\r\n\tconst location = getLocation(pageContent);\r\n\tconst showBreadcrumbs: boolean = location !== '/' && location !== '/en';\r\n\r\n\tconst menuButtonRef = useRef<any>(null);\r\n\r\n\tconst [menuComponent, setMenuComponent] = useState<any>();\r\n\tconst [fixedBreadcrumbs, setFixedBreadcrumbs] = useState<\r\n\t\tBreadcrumbItemtype[]\r\n\t>([]);\r\n\r\n\tconst [isMenuOpen, setIsMenuOpen] = useState(false);\r\n\tconst [isSearchOpen, setIsSearchOpen] = useState(false);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst fixed = breadcrumbs\r\n\t\t\t? breadcrumbs.filter((item) => {\r\n\t\t\t\t\treturn item.url;\r\n\t\t\t })\r\n\t\t\t: [];\r\n\r\n\t\tsetFixedBreadcrumbs(fixed);\r\n\t}, [breadcrumbs]);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst onCloseMenuEvent = (focusOrigin: boolean) => {\r\n\t\t\tif (focusOrigin) {\r\n\t\t\t\tif (menuButtonRef && menuButtonRef.current) {\r\n\t\t\t\t\tmenuButtonRef.current.focus();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tsetIsMenuOpen(false);\r\n\t\t};\r\n\r\n\t\tconst menuRoot = navigation?.items ? navigation?.items : [];\r\n\r\n\t\tlet menuComponent2 = (\r\n\t\t\t<MegaMenu items={menuRoot} onClose={onCloseMenuEvent} />\r\n\t\t);\r\n\r\n\t\tif (isNarrowDisplay && menuRoot) {\r\n\t\t\tmenuComponent2 = (\r\n\t\t\t\t<MenuMobile\r\n\t\t\t\t\tonClose={onCloseMenuEvent}\r\n\t\t\t\t\titems={menuRoot}\r\n\t\t\t\t\tmicrositeLogo={microsite?.headerLogo?.mobile}\r\n\t\t\t\t/>\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tsetMenuComponent(menuComponent2);\r\n\t}, [navigation?.items, isNarrowDisplay]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (isNarrowDisplay) {\r\n\t\t\tsetHeaderLogo(microsite?.headerLogo.mobile);\r\n\t\t\tsetFooterLogo(microsite?.footerLogo.mobile);\r\n\t\t} else {\r\n\t\t\tsetHeaderLogo(microsite?.headerLogo.desktop);\r\n\t\t\tsetFooterLogo(microsite?.footerLogo.desktop);\r\n\t\t}\r\n\t}, [microsite]);\r\n\r\n\tconst onOpenMenu = (isOpen: boolean) => {\r\n\t\tsetIsMenuOpen(isOpen);\r\n\t};\r\n\r\n\tconst onOpenSearchMenu = (isOpen: boolean) => {\r\n\t\tsetIsSearchOpen(isOpen);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<MicrositeThemeProvider>\r\n\t\t\t<Router location={location} context={{}}>\r\n\t\t\t\t<a className=\"microsite-skip-to-content-link\" href=\"#main\">\r\n\t\t\t\t\t{skipToContent ?? 'GÃ¥ till innehÃ¥ll'}\r\n\t\t\t\t</a>\r\n\r\n\t\t\t\t<MicrositeHeader\r\n\t\t\t\t\tref={menuButtonRef}\r\n\t\t\t\t\thome={navigation?.home}\r\n\t\t\t\t\tquickLinks={quickLinks}\r\n\t\t\t\t\tlang={lang}\r\n\t\t\t\t\tisPopupMenuOpen={false}\r\n\t\t\t\t\tonOpenSearchMenu={onOpenSearchMenu}\r\n\t\t\t\t\tonOpenMenu={onOpenMenu}\r\n\t\t\t\t\tisSearchOpen={isSearchOpen}\r\n\t\t\t\t\tisMenuOpen={isMenuOpen}\r\n\t\t\t\t\tmicrositeLogo={headerLogo}\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t{showBreadcrumbs && fixedBreadcrumbs.length > 0 && (\r\n\t\t\t\t\t<BreadcrumbsContainer>\r\n\t\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t\t<Breadcrumbs items={fixedBreadcrumbs} />\r\n\t\t\t\t\t\t</Grid>\r\n\t\t\t\t\t</BreadcrumbsContainer>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t<Switch>\r\n\t\t\t\t\t{routePatterns.map((routePattern) => (\r\n\t\t\t\t\t\t<Route key={routePattern} path={routePattern}>\r\n\t\t\t\t\t\t\t<RouteHandler />\r\n\t\t\t\t\t\t</Route>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Switch>\r\n\r\n\t\t\t\t{footer && (\r\n\t\t\t\t\t<MicrositeFooter\r\n\t\t\t\t\t\tfooterGroups={footer.footerGroups}\r\n\t\t\t\t\t\tcustomerService={footer.customerService}\r\n\t\t\t\t\t\tmicrositeLogo={footerLogo}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{isMenuOpen && menuComponent}\r\n\r\n\t\t\t\t<MicrositeGlobalStyle\r\n\t\t\t\t\tisOpen={isMenuOpen || isSearchOpen ? true : false}\r\n\t\t\t\t/>\r\n\t\t\t</Router>\r\n\t\t</MicrositeThemeProvider>\r\n\t);\r\n};\r\n\r\nexport default MicrositeApp;\r\n","export default __webpack_public_path__ + \"static/media/AkkuratLLWeb-Regular.16f2e5fb.woff\";","export default __webpack_public_path__ + \"static/media/AkkuratLLWeb-Regular.59940514.woff2\";","export default __webpack_public_path__ + \"static/media/AkkuratLLWeb-Bold.5fe185c6.woff\";","export default __webpack_public_path__ + \"static/media/AkkuratLLWeb-Bold.2c1fb72f.woff2\";","export default __webpack_public_path__ + \"static/media/TiemposFineWeb-Light.3b9c24cb.woff\";","export default __webpack_public_path__ + \"static/media/TiemposFineWeb-Light.d062fb18.woff2\";","export default __webpack_public_path__ + \"static/media/TiemposText-Regular.7107d2d9.woff\";","export default __webpack_public_path__ + \"static/media/TiemposText-Regular.0e2b3ba4.woff2\";","import { createGlobalStyle } from 'styled-components';\r\n\r\n// Tiempos Fine Light\t:\tH1,H2,H3\r\n// Tiempos Text Regular\t:\tH4, H5, body\r\n// Akkurat Pro Regular\t:\ta,p,p2,byline\r\nimport akkuratRegularWoff from 'fonts/AkkuratLLWeb-Regular.woff';\r\nimport akkuratRegularWoff2 from 'fonts/AkkuratLLWeb-Regular.woff2';\r\nimport akkuratBoldWoff from 'fonts/AkkuratLLWeb-Bold.woff';\r\nimport akkuratBoldWoff2 from 'fonts/AkkuratLLWeb-Bold.woff2';\r\n\r\nimport tiemposFineLightWoff from 'fonts/TiemposFineWeb-Light.woff';\r\nimport tiemposFineLightWoff2 from 'fonts/TiemposFineWeb-Light.woff2';\r\n\r\nimport tiemposTextRegulatWoff from 'fonts/TiemposText-Regular.woff';\r\nimport tiemposTextRegulatWoff2 from 'fonts/TiemposText-Regular.woff2';\r\nimport {\r\n\tstyleForInput,\r\n\tstyleForLabel,\r\n\tstyleForP,\r\n\tstyleForSelect,\r\n} from 'components/Typography';\r\nimport { mediaQueries } from 'theme';\r\nimport { accessibilityFocus } from './styles';\r\n\r\n// How To Set Weights And Styles With The @font-face Declaration\r\n// https://www.smashingmagazine.com/2013/02/setting-weights-and-styles-at-font-face-declaration/\r\n\r\nexport type modalWindow = {\r\n\tisOpen?: boolean;\r\n};\r\n\r\nexport const GlobalStyle = createGlobalStyle<any>`\r\n\r\n\t@font-face {\r\n\t\tfont-family: 'Akkurat Pro';\r\n\t\tsrc: url(${akkuratRegularWoff2}) format('woff2'),\r\n\t\t \turl(${akkuratRegularWoff}) format('woff');\r\n\t\tfont-weight: 400;\r\n\t\tfont-style: normal;\t\t\r\n\t}\r\n\r\n\t@font-face {\r\n\t\tfont-family: 'Akkurat Pro';\r\n\t\tsrc: url(${akkuratBoldWoff2}) format('woff2'),\r\n\t\t \turl(${akkuratBoldWoff}) format('woff');\r\n\t\tfont-weight: 700;\r\n\t\tfont-style: normal;\t\t\r\n\t}\r\n\r\n\t@font-face {\r\n\t\tfont-family: 'Tiempos Fine';\r\n\t\tsrc: url(${tiemposFineLightWoff2}) format('woff2'),\r\n\t\t \turl(${tiemposFineLightWoff}) format('woff');\r\n\t\tfont-weight: 300;\r\n\t\tfont-style: normal;\t\t\r\n\t}\t\r\n\r\n\t@font-face {\r\n\t\tfont-family: 'Tiempos Text';\r\n\t\tsrc: url(${tiemposTextRegulatWoff2}) format('woff2'),\r\n\t\t \turl(${tiemposTextRegulatWoff}) format('woff');\r\n\t\tfont-weight: 400;\r\n\t\tfont-style: normal;\t\t\r\n\t}\r\n\r\n\t*,\r\n\t*:before,\r\n\t*:after {\r\n\t\tbox-sizing: inherit;\r\n\t}\r\n\thtml {\r\n\t\tbox-sizing: border-box;\r\n\t\tmargin: 0;\r\n\t\tpadding: 0;\r\n\t\twidth: 100vw;\r\n\t\toverflow-x: hidden;\r\n\r\n\t\t/* Font smoothing */\r\n\t\ttext-rendering: optimizeLegibility;\r\n\t\t-moz-osx-font-smoothing: grayscale;\r\n\t\tfont-smooth: antialiased;\r\n\t\t-webkit-font-smoothing: antialiased;\r\n\t\ttext-shadow: rgba(0, 0, 0, 0.01) 0 0 1px;\r\n\t}\r\n\tbody {\r\n\t\tmargin: 0;\r\n\t\tpadding: 0;\r\n\t\tbackground-color: ${(props) => props.theme.colors.grey5};\r\n\t\t\r\n\t\tcolor: ${(props) => props.theme.palette.text.primary};\r\n\r\n\t\t${(p) => p.isOpen && `top: -${window.scrollY}px`};\r\n\t\t${(p) => p.isOpen && 'position: fixed; right:0;left:0; overflow-y: hidden'};\r\n\r\n\t\t& label,& input, & textarea, & a, & select, & button, & li {\r\n\t\t\toutline-color:transparent;\r\n\t\t}\r\n\r\n\t\t& input:focus, & textarea:focus, & a:focus, & select:focus, & button:focus {\r\n\t\t\t${accessibilityFocus()};\r\n\t\t}\r\n\r\n\t}\r\n\th1,h2,h3,h4,h5,h6,a,p {\r\n\t\tword-break: normal;\r\n\t\toverflow-wrap: break-word;\r\n\t\thyphens: manual;\r\n\t}\r\n\r\n\timg {\r\n\t\tborder: 0 none;\r\n\t\theight: auto;\r\n\t\tmax-width: 100%;\r\n\t\tvertical-align: middle;\r\n\t}\r\n\t.usability--tab-focus {\r\n\t\toutline: 0.2rem solid ${(props) => props.theme.colors.accentBlue};\r\n\t}\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t.skip-to-content-link {\r\n\t\t${(props) => props.theme.typography.style8.getStyle()};\r\n\t\tcolor: ${(props) => props.theme.palette.text.secondary};\r\n\t\tpadding: 8px;\r\n\t\tposition: absolute;\r\n\t\tbackground-color: ${(props) => props.theme.colors.primary};\r\n\t\tleft: 0%;\r\n\t\ttransform: translateY(-100%);\r\n\t\ttransition: transform 200ms;\r\n\t\tclip: rect(0 0 0 0);\r\n\t\toutline: none;\r\n\t}\t\r\n\t.skip-to-content-link:focus {\r\n \t\ttransform: translateY(0%);\r\n\t\t width: 100%;\r\n \ttext-align: center;\t\t \r\n\t z-index: 1;\t\t \r\n\t\tclip: auto;\r\n\t}\t\t\t\t\t\t\r\n\r\n\tform {\r\n\r\n\t\theader {\r\n\t\t\tmargin-bottom: ${(props) => props.theme.spacing.space3}rem;\r\n\t\t}\r\n\r\n\r\n\t\tbutton {\r\n\t\t\t${(props) => props.theme.typography.style11.getStyle()};\r\n\t\t\tborder-radius: 24px;\r\n\t\t\tborder: 1px solid transparent;\r\n\t\t\tpadding:0;\r\n\r\n\t\t\tpadding-top: 16px;\r\n\t\t\tpadding-bottom: 11px;\r\n\r\n\t\t\tpadding-left: 20px;\r\n\t\t\tpadding-right: 20px;\r\n\t\t\tbackground-color: ${(props) => props.theme.colors.secondaryBlue};\r\n\t\t\tcolor: ${(props) => props.theme.palette.text.secondary};\r\n\r\n\t\t\t&:hover {\r\n\t\t\t\tbackground-color: ${(props) => props.theme.colors.primary};\r\n\t\t\t}\r\n\t\t\tmargin-right: ${(props) => props.theme.spacing.space2}rem;\r\n\t\t}\r\n\r\n\t\tinput, textarea {\r\n\t\t\t${styleForInput}\r\n\t\t}\r\n\r\n\t\tinput[type=\"file\"] {\r\n\t\t\t${styleForInput}\r\n\t\t\tborder: none;\r\n\t\t\tpadding: 0;\r\n\t\t\twidth: 100%;\r\n\t\t}\t\t\r\n\r\n\t\tfieldset {\r\n\t\t\tborder: none;\r\n\t \tpadding: 0;\t\t\r\n\t\t}\r\n\r\n\t\tabbr[title], acronym[title] {\r\n\t\t\ttext-decoration: unset;\r\n\t\t}\r\n\r\n\t\tlabel, legend { \r\n\t\t\tdisplay: block;\r\n\t\t\ttext-align: left;\r\n\t\t\t${styleForLabel}\r\n\t\t\tfont-weight: bold;\r\n\t\t\tmargin-right: ${(props) => props.theme.spacing.space1}rem;\r\n\t\t\tmargin-bottom: ${(props) => props.theme.spacing.space1}rem;\r\n\t\t}\r\n\r\n\t\tselect {\r\n\t\t\t${styleForSelect}\r\n\t\t\tmargin-right: ${(props) => props.theme.spacing.space2}rem;\r\n\t\t}\r\n\r\n\t\t.usability--tab-focus {\r\n\r\n\t\t}\r\n\r\n\t\t.radio {\r\n\t\t\r\n\t\t\tposition: relative;\r\n\t\t\tdisplay: flex;\r\n\r\n\t\t\t&:focus-within {\r\n\t\t\t\t${accessibilityFocus()};\r\n\t\t\t}\r\n\r\n\t\t\tlabel {\r\n\t\t\t\t${(props) => props.theme.typography.style6.getStyle()};\r\n \t\t\tdisplay: block;\r\n \t\t\tpadding: 0px 0 0px 32px;\r\n\t\t\t\tmargin:0px 0px 5px 0px;\r\n\t\r\n\t\t\t}\r\n\t\r\n\r\n\r\n\t\t\t/*style and hide original checkbox*/\r\n\t\t\tinput {\r\n\t\t\t\theight: 10px;\r\n\t\t\t\tleft: 0;\r\n\t\t\t\topacity: 0;\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\ttop: 0;\r\n\t\t\t\twidth: 10px;\r\n\t\t\t}\r\n\r\n\t\t\t/*position new box*/\r\n\t\t\tinput + label::before {\r\n\t\t\t\tborder: 2px solid ${(props) => props.theme.colors.primary};\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\theight: 24px;\r\n\t\t\t\tleft: 0;\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\ttop: 0;\r\n\t\t\t\twidth: 24px;\r\n\t\t\t\tborder-radius: 50%;\r\n\t\t\t}\r\n\r\n\t\t\t/*radio pseudo element styles*/\r\n\t\t\tinput + label::after {\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\topacity: 0;\r\n\t\t\t\tborder: 5px solid ${(props) => props.theme.colors.primary};\r\n\t\t\t\tborder-radius: 50%;\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tleft: 7px;\r\n\t\t\t\ttop: 7px;\r\n\t\t\t\ttransition: opacity 0.2s ease-in-out;\r\n\t\t\t}\r\n\r\n\t\t\t/*reveal check for 'on' state*/\r\n\t\t\tinput:checked + label::after {\r\n\t\t\t\topacity: 1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.block {\r\n\t\t\tdisplay:block;\r\n\t\t}\r\n\r\n\t\t.text-description {\r\n\t\t\t${(props) => props.theme.typography.style9.getStyle()};\r\n\t\t\tmargin-bottom:${(props) => props.theme.spacing.space1}rem;\r\n\r\n\t\t}\r\n\t\t\r\n\t\t// Epi forms\r\n\t\t.text-red-600 {\r\n\t\t\t${(props) => props.theme.typography.style9.getStyle()};\r\n\t\t\tcolor: ${(props) => props.theme.palette.text.error};\r\n\t\t\tmargin-top:${(props) => props.theme.spacing.space1}rem;\r\n\t\t\t${mediaQueries.phone} {\r\n\t\t\t\tcolor: ${(props) => props.theme.palette.text.error};\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.warning-symbol {\r\n\t\t\t\r\n\t\t}\r\n\r\n\t\t.warning-symbol::before {\r\n\t\t\tcontent:\"\\u2022\\u00a0\"\r\n\t\t}\r\n\r\n\t\t.border-red-400 {\r\n\t\t\tpadding: ${(props) => props.theme.spacing.space3}rem;\r\n\t\t\tborder: 2px solid ${(props) => props.theme.colors.accentRed};\r\n\t\t\tborder-left: 8px solid ${(props) => props.theme.colors.accentRed};\r\n\t\t\tbackground-color: ${(props) => props.theme.colors.white};\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tbox-shadow: 0 12px 18px 0 rgba(0, 0, 0, 0.03);\r\n\t\t}\r\n\r\n\t\t.border-green-400 {\r\n\t\t\tpadding: ${(props) => props.theme.spacing.space3}rem;\r\n\t\t\tborder: 2px solid ${(props) => props.theme.colors.green1};\r\n\t\t\tborder-left: 8px solid ${(props) => props.theme.colors.green1};\r\n\t\t\tbackground-color: ${(props) => props.theme.colors.white};\r\n\t\t\tdisplay: block;\r\n\t\t\tbox-shadow: 0 12px 18px 0 rgba(0, 0, 0, 0.03);\r\n\t\t}\r\n\r\n\t\t.border-green-400 > div {\r\n\t\t\t${styleForP}\r\n\t\t}\r\n\r\n\t\t// Epi forms error ul list\r\n\t\tul {\r\n\t\t\tlist-style-position: outside;\r\n\t\t\tmargin: 0;\r\n\t\t\tpadding: 0;\r\n\t\t\tpadding-left: ${(props) => props.theme.spacing.space2 + 0.25}rem;\r\n\t\t}\r\n\r\n\t\tli {\r\n\t\t\t${styleForP}\r\n\t\t\tmargin-bottom: 0;\r\n\t\t}\r\n\r\n\r\n\t\tli > span {\r\n\t\t\tcolor: ${(props) => props.theme.palette.text.error};\r\n\t\t\t${mediaQueries.phone} {\r\n\t\t\t\tcolor: ${(props) => props.theme.palette.text.error};\r\n\t\t\t}\r\n\r\n\t\t}\r\n}\r\n\r\n\r\n`;\r\n","import { css } from 'styled-components';\r\nimport { px, px2rem } from './utils';\r\n\r\nexport type Palette = {\r\n\ttext: TextPalette;\r\n};\r\n\r\nexport type TextPalette = {\r\n\tprimary: string;\r\n\tsecondary: string;\r\n\tdisabled: string;\r\n\terror: string;\r\n\thint: string;\r\n};\r\n\r\nexport type Spacing = {\r\n\tgetSection: Function;\r\n\tgetElement: Function;\r\n\tgetTextAndElement: Function;\r\n\tgetText: Function;\r\n\tgetPageTopPadding: Function;\r\n\tspace1: number;\r\n\tspace2: number;\r\n\tspace3: number;\r\n\tspace4: number;\r\n\tspace5: number;\r\n\tspace6: number;\r\n\tspace7: number;\r\n\tspace8: number;\r\n};\r\n\r\nexport type TypographyType = {\r\n\tgetStyle: Function;\r\n\tfontFamily?: string;\r\n\tfontWeight?: number;\r\n\tfontSize?: string;\r\n\tlineHeight?: string;\r\n\tletterSpacing?: string;\r\n\tfontStyle?: string;\r\n\ttextTransform?: string;\r\n\tcolor?: string;\r\n};\r\n\r\nexport type Colors = {\r\n\tprimary?: string;\r\n\tsecondary?: string;\r\n\ttertiary?: string;\r\n\tquaternary?: string;\r\n\tblack?: string;\r\n\twhite?: string;\r\n\tsecondaryBlue?: string;\r\n\tsecondaryGreen?: string;\r\n\tsecondaryBrown?: string;\r\n\tblue1?: string;\r\n\tblue2?: string;\r\n\tblue3?: string;\r\n\tblue4?: string;\r\n\tgreen1?: string;\r\n\tgreen2?: string;\r\n\tgreen3?: string;\r\n\tbrown1?: string;\r\n\tbrown2?: string;\r\n\tred1?: string;\r\n\taccentRed?: string;\r\n\taccentYellow?: string;\r\n\taccentBlue?: string;\r\n\taccentGreen?: string;\r\n\tgrey1?: string;\r\n\tgrey2?: string;\r\n\tgrey3?: string;\r\n\tgrey4?: string;\r\n\tgrey5?: string;\r\n\taccessibility?: string;\r\n\r\n\t/** common mircosite colors here */\r\n\tcommonBgColor?: string;\r\n\tcommonAccentHue?: string;\r\n\tbgBreadcrumbs?: string;\r\n};\r\n\r\nexport type ThemeType = {\r\n\tname: string;\r\n\tisMicrositeActive?: boolean;\r\n\tcolors: Colors;\r\n\tpalette: Palette;\r\n\ttypography: {\r\n\t\t/** H1 */\r\n\t\tstyle1: TypographyType;\r\n\t\t/** H2 */\r\n\t\tstyle2: TypographyType;\r\n\t\t/** H3 */\r\n\t\tstyle3: TypographyType;\r\n\t\t/** H4 */\r\n\t\tstyle4: TypographyType;\r\n\t\t/** H5 */\r\n\t\tstyle5: TypographyType;\r\n\r\n\t\t/** Link */\r\n\t\tstyle6: TypographyType;\r\n\r\n\t\t/** Preamble */\r\n\t\tstyle7: TypographyType;\r\n\r\n\t\t/** Paragraph */\r\n\t\tstyle8: TypographyType;\r\n\r\n\t\t/** Byline */\r\n\t\tstyle9: TypographyType;\r\n\r\n\t\t/** Extra */\r\n\t\tstyle10: TypographyType;\r\n\t\tstyle11: TypographyType;\r\n\t\tstyle12: TypographyType;\r\n\t\tstyle13: TypographyType;\r\n\t};\r\n\tspacing: Spacing;\r\n};\r\n\r\nconst getCssStyle = (o: TypographyType): any => {\r\n\treturn css`\r\n\t\tfont-family: ${o.fontFamily};\r\n\t\tfont-weight: ${o.fontWeight};\r\n\t\tfont-size: ${o.fontSize};\r\n\t\tline-height: ${o.lineHeight};\r\n\t\tletter-spacing: ${o.letterSpacing};\r\n\t\ttext-transform: ${o.textTransform};\r\n\t\t${o.color && `color:${o.color};`};\r\n\t`;\r\n};\r\n\r\n/** NaturvÃ¥rdsverket values */\r\n\r\nconst colors = {\r\n\tblack: '#000000',\r\n\twhite: '#ffffff',\r\n\tprimary: '#003366',\r\n\tsecondaryBlue: '#0039A2',\r\n\tsecondaryGreen: '#005643',\r\n\tsecondaryBrown: '#9B6C17',\r\n\tblue1: '#ACCFDB',\r\n\tblue2: '#DBF0F7',\r\n\tblue3: '#559CB4',\r\n\tblue4: '#C4DCE5',\r\n\r\n\tgreen1: '#98C49F',\r\n\tgreen2: '#BBD9C0',\r\n\tgreen3: '#2A855D',\r\n\tbrown1: '#F4DBA1',\r\n\tbrown2: '#F5E8CB',\r\n\tred1: '#9E2800', // Used for error texts\r\n\taccentRed: '#DE3600',\r\n\taccentYellow: '#F5FF21',\r\n\taccentBlue: '#9CF7FF',\r\n\taccentGreen: '#02FEAF',\r\n\tgrey1: '#7B8794',\r\n\tgrey2: '#595959',\r\n\tgrey3: '#CBD2D9',\r\n\tgrey4: '#E4E7EB',\r\n\tgrey5: '#F5F5F5',\r\n\taccessibility: '#fd0',\r\n} as Colors;\r\n\r\nconst palette: Palette = {\r\n\ttext: {\r\n\t\tprimary: '#2A2A2D',\r\n\t\tsecondary: '#ffffff',\r\n\t\tdisabled: '#ff0000',\r\n\t\terror: colors.red1,\r\n\t\thint: '#ff0000',\r\n\t} as TextPalette,\r\n};\r\n\r\n/** NaturvÃ¥rdsverket Themes */\r\n\r\nexport const ThemeDesktop: ThemeType = {\r\n\tname: 'Theme Desktop',\r\n\tcolors: colors,\r\n\tpalette: palette,\r\n\tisMicrositeActive: false,\r\n\ttypography: {\r\n\t\tstyle1: {\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\t\t\tfontFamily: 'Tiempos Fine', // Tiempos Fine Light\r\n\t\t\tfontWeight: 300,\r\n\t\t\tfontSize: px2rem(60),\r\n\t\t\tlineHeight: px2rem(80),\r\n\t\t\tletterSpacing: '0',\r\n\t\t},\r\n\t\tstyle2: {\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\t\t\tfontFamily: 'Tiempos Fine', // Tiempos Fine Light\r\n\t\t\tfontWeight: 300,\r\n\t\t\tfontSize: px2rem(40),\r\n\t\t\tlineHeight: px2rem(48),\r\n\t\t\tletterSpacing: '0',\r\n\t\t},\r\n\t\tstyle3: {\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\t\t\tfontFamily: 'Tiempos Fine', // Tiempos Fine Light\r\n\t\t\tfontWeight: 300,\r\n\t\t\tfontSize: px2rem(32),\r\n\t\t\tlineHeight: px2rem(38),\r\n\t\t\tletterSpacing: '0',\r\n\t\t},\r\n\t\tstyle4: {\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\t\t\tfontFamily: 'Tiempos Text', // Tiempos Text Regular\r\n\t\t\tfontWeight: 400,\r\n\t\t\tfontSize: px2rem(24),\r\n\t\t\tlineHeight: px2rem(32),\r\n\t\t\tletterSpacing: '0',\r\n\t\t},\r\n\t\tstyle5: {\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\t\t\tfontFamily: 'Akkurat Pro', // Akkurat Pro Regular\r\n\t\t\tfontWeight: 400,\r\n\t\t\tfontSize: px2rem(18),\r\n\t\t\tlineHeight: px2rem(25),\r\n\t\t\tletterSpacing: px2rem(1.2),\r\n\t\t\ttextTransform: 'uppercase',\r\n\t\t},\r\n\t\tstyle6: {\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\t\t\tfontFamily: 'Akkurat Pro', // Link..\r\n\t\t\tfontWeight: 400,\r\n\t\t\tfontSize: px2rem(18),\r\n\t\t\tlineHeight: px2rem(28),\r\n\t\t\tletterSpacing: px2rem(0),\r\n\t\t},\r\n\t\tstyle7: {\r\n\t\t\t// Preamble\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\t\t\tfontFamily: 'Akkurat Pro',\r\n\t\t\tfontWeight: 400,\r\n\t\t\tfontSize: px2rem(24),\r\n\t\t\tlineHeight: px2rem(36),\r\n\t\t\tletterSpacing: px2rem(0),\r\n\t\t},\r\n\t\tstyle8: {\r\n\t\t\t// Paragraph <p>\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\t\t\tfontFamily: 'Tiempos Text',\r\n\t\t\tfontWeight: 400,\r\n\t\t\tfontSize: px2rem(18),\r\n\t\t\tlineHeight: px2rem(28),\r\n\t\t\tletterSpacing: '0',\r\n\t\t},\r\n\t\tstyle9: {\r\n\t\t\t// Byline (SimplePuff,GrantPuff,StandardPuff)\r\n\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\t\t\tfontFamily: 'Akkurat Pro',\r\n\t\t\tfontWeight: 400,\r\n\t\t\tfontSize: px2rem(16),\r\n\t\t\tlineHeight: px2rem(24),\r\n\t\t\tletterSpacing: '0',\r\n\t\t\tcolor: colors.grey2,\r\n\t\t},\r\n\t\tstyle10: {\r\n\t\t\t// EXTRA\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\t\t\tfontFamily: 'Tiempos Text',\r\n\t\t\tfontWeight: 400,\r\n\t\t\tfontSize: px2rem(18),\r\n\t\t\tlineHeight: px2rem(28),\r\n\t\t\tletterSpacing: '0',\r\n\t\t},\r\n\t\tstyle11: {\r\n\t\t\t// EXTRA, Button text, Grant Puff\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\t\t\tfontFamily: 'Akkurat Pro', // Akkurat Pro Bold\r\n\t\t\tfontWeight: 700,\r\n\t\t\tfontSize: px2rem(16),\r\n\t\t\tlineHeight: px2rem(19),\r\n\t\t\tletterSpacing: '0',\r\n\t\t},\r\n\t\tstyle12: {\r\n\t\t\t// EXTRA, Menu desktop, second level menuitems, legends\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\t\t\tfontFamily: 'Akkurat Pro', // Akkurat Pro Bold\r\n\t\t\tfontWeight: 700,\r\n\t\t\tfontSize: px2rem(18),\r\n\t\t\tlineHeight: px2rem(19),\r\n\t\t\tletterSpacing: '0',\r\n\t\t},\r\n\t\tstyle13: {\r\n\t\t\t// EXTRA, figcaptions (image captions / bildtexter in RTE/TinyMCE)\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\r\n\t\t\tfontFamily: 'Akkurat Pro', // Akkurat Pro Bold\r\n\t\t\tfontSize: px2rem(14),\r\n\t\t\tlineHeight: '1.4',\r\n\t\t\tletterSpacing: '0',\r\n\t\t},\r\n\t},\r\n\tspacing: {\r\n\t\tgetSection() {\r\n\t\t\treturn this.space5;\r\n\t\t},\r\n\t\tgetElement() {\r\n\t\t\treturn this.space4;\r\n\t\t},\r\n\t\tgetTextAndElement() {\r\n\t\t\treturn this.space3;\r\n\t\t},\r\n\t\tgetText() {\r\n\t\t\treturn this.space1;\r\n\t\t},\r\n\t\tgetPageTopPadding() {\r\n\t\t\t// Page top padding\r\n\t\t\t// TODO: On mobile it should be this.space4\r\n\t\t\treturn this.space6;\r\n\t\t},\r\n\t\tspace1: px(8), // Between texts\r\n\t\tspace2: px(16),\r\n\t\tspace3: px(24), // Between texts and elements that should be close\r\n\t\tspace4: px(32),\r\n\t\tspace5: px(48), // Between Elements\r\n\t\tspace6: px(64),\r\n\t\tspace7: px(96), // Between Blocks\r\n\t\tspace8: px(144), // Between last block and footer\r\n\t},\r\n};\r\n\r\nexport const ThemeMobile: ThemeType = {\r\n\tname: 'Theme Mobile',\r\n\tcolors: colors,\r\n\tpalette: palette,\r\n\tisMicrositeActive: false,\r\n\ttypography: {\r\n\t\tstyle1: {\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\r\n\t\t\tfontFamily: 'Tiempos Fine', // Tiempos Fine Light\r\n\t\t\tfontWeight: 300,\r\n\t\t\tfontSize: px2rem(40),\r\n\t\t\tlineHeight: px2rem(40),\r\n\t\t\tletterSpacing: '0',\r\n\t\t},\r\n\t\tstyle2: {\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\r\n\t\t\tfontFamily: 'Tiempos Fine', // Tiempos Fine Light\r\n\t\t\tfontWeight: 300,\r\n\t\t\tfontSize: px2rem(32),\r\n\t\t\tlineHeight: px2rem(40),\r\n\t\t\tletterSpacing: '0',\r\n\t\t},\r\n\t\tstyle3: {\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\r\n\t\t\tfontFamily: 'Tiempos Fine', // Tiempos Fine Light\r\n\t\t\tfontWeight: 300,\r\n\t\t\tfontSize: px2rem(28),\r\n\t\t\tlineHeight: px2rem(40),\r\n\t\t\tletterSpacing: '0',\r\n\t\t},\r\n\t\tstyle4: {\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\r\n\t\t\tfontFamily: 'Tiempos Text', // Tiempos Text Regular\r\n\t\t\tfontWeight: 400,\r\n\t\t\tfontSize: px2rem(18), // Orginal 22\r\n\t\t\tlineHeight: px2rem(28),\r\n\t\t\tletterSpacing: '0',\r\n\t\t},\r\n\t\tstyle5: {\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\t\t\tfontFamily: 'Akkurat Pro', // Akkurat Pro Regular\r\n\t\t\tfontWeight: 400,\r\n\t\t\tfontSize: px2rem(18),\r\n\t\t\tlineHeight: px2rem(25),\r\n\t\t\tletterSpacing: px2rem(1.2),\r\n\t\t\ttextTransform: 'uppercase',\r\n\t\t},\r\n\t\tstyle6: {\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\r\n\t\t\tfontFamily: 'Akkurat Pro', // Link..\r\n\t\t\tfontWeight: 400,\r\n\t\t\tfontSize: px2rem(18),\r\n\t\t\tlineHeight: px2rem(28),\r\n\t\t\tletterSpacing: px2rem(0),\r\n\t\t},\r\n\t\tstyle7: {\r\n\t\t\t// Preamble\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\r\n\t\t\tfontFamily: 'Akkurat Pro',\r\n\t\t\tfontWeight: 400,\r\n\t\t\tfontSize: px2rem(20),\r\n\t\t\tlineHeight: px2rem(32),\r\n\t\t\tletterSpacing: px2rem(0),\r\n\t\t},\r\n\t\tstyle8: {\r\n\t\t\t// Paragraph <p>\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\r\n\t\t\tfontFamily: 'Tiempos Text',\r\n\t\t\tfontWeight: 400,\r\n\t\t\tfontSize: px2rem(18),\r\n\t\t\tlineHeight: px2rem(28),\r\n\t\t\tletterSpacing: '0',\r\n\t\t},\r\n\t\tstyle9: {\r\n\t\t\t// Byline (SimplePuff,GrantPuff,StandardPuff)\r\n\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\r\n\t\t\tfontFamily: 'Akkurat Pro',\r\n\t\t\tfontWeight: 400,\r\n\t\t\tfontSize: px2rem(16),\r\n\t\t\tlineHeight: px2rem(24),\r\n\t\t\tletterSpacing: '0',\r\n\t\t\tcolor: colors.grey2,\r\n\t\t},\r\n\t\tstyle10: {\r\n\t\t\t// EXTRA\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\r\n\t\t\tfontFamily: 'Tiempos Text',\r\n\t\t\tfontWeight: 400,\r\n\t\t\tfontSize: px2rem(18),\r\n\t\t\tlineHeight: px2rem(28),\r\n\t\t\tletterSpacing: '0',\r\n\t\t},\r\n\t\tstyle11: {\r\n\t\t\t// EXTRA, Button text, Grant Puff\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\r\n\t\t\tfontFamily: 'Akkurat Pro', // Akkurat Pro Bold\r\n\t\t\tfontWeight: 700,\r\n\t\t\tfontSize: px2rem(16),\r\n\t\t\tlineHeight: px2rem(19),\r\n\t\t\tletterSpacing: '0',\r\n\t\t},\r\n\t\tstyle12: {\r\n\t\t\t// EXTRA, Menu desktop, second level menuitems, legends\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\r\n\t\t\tfontFamily: 'Akkurat Pro', // Akkurat Pro Bold\r\n\t\t\tfontWeight: 700,\r\n\t\t\tfontSize: px2rem(18),\r\n\t\t\tlineHeight: px2rem(19),\r\n\t\t\tletterSpacing: '0',\r\n\t\t},\r\n\t\tstyle13: {\r\n\t\t\t// EXTRA, figcaptions (image captions / bildtexter in RTE/TinyMCE)\r\n\t\t\tgetStyle() {\r\n\t\t\t\treturn getCssStyle(this);\r\n\t\t\t},\r\n\t\t\tfontFamily: 'Akkurat Pro', // Akkurat Pro Bold\r\n\t\t\tfontSize: px2rem(14),\r\n\t\t\tlineHeight: '1.4',\r\n\t\t\tletterSpacing: '0',\r\n\t\t},\r\n\t},\r\n\tspacing: {\r\n\t\tgetSection() {\r\n\t\t\treturn this.space5; // 7\r\n\t\t},\r\n\t\tgetElement() {\r\n\t\t\treturn this.space4; // 5\r\n\t\t},\r\n\t\tgetTextAndElement() {\r\n\t\t\treturn this.space3;\r\n\t\t},\r\n\t\tgetText() {\r\n\t\t\treturn this.space1;\r\n\t\t},\r\n\t\tgetPageTopPadding() {\r\n\t\t\t// Page top padding\r\n\t\t\treturn this.space4; // 6\r\n\t\t},\r\n\t\tspace1: px(8), // Between texts\r\n\t\tspace2: px(16),\r\n\t\tspace3: px(24), // Between texts and elements that should be close\r\n\t\tspace4: px(32),\r\n\t\tspace5: px(48), // Between Elements\r\n\t\tspace6: px(64),\r\n\t\tspace7: px(96), // Between Blocks\r\n\t\tspace8: px(144), // Between last block and footer\r\n\t},\r\n};\r\n","/**\r\n * EnvironmentToaster - styles\r\n */\r\n\r\nimport styled from 'styled-components';\r\n\r\nexport const EnvironmentToasterContainer = styled.div`\r\n\tdisplay: flex;\r\n\tposition: relative;\r\n\ttop: 0;\r\n\r\n\tjustify-content: space-between;\r\n\tbackground-color: #f0f0f0;\r\n\r\n\tfont-family: 'Courier New', Courier, monospace;\r\n\tfont-size: 11px;\r\n\tline-height: normal;\r\n\r\n\tmargin: 0px 0px;\r\n\tpadding: 5px 18px;\r\n\tborder-bottom: 1px solid #b0b0b0;\r\n`;\r\n","/**\r\n * EnvironmentToaster\r\n */\r\n\r\nimport React from 'react';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport { EnvironmentId } from 'types/epi';\r\nimport { EnvironmentToasterContainer } from './EnvironmentToaster.styles';\r\n\r\ntype EnvironmentToasterProps = {\r\n\tenv: string;\r\n\tbuildDate?: string | null;\r\n};\r\n\r\nconst translateEnvironment = (env: string): string => {\r\n\tswitch (env.toUpperCase()) {\r\n\t\tcase EnvironmentId.DEV:\r\n\t\t\treturn 'Development';\r\n\t\tcase EnvironmentId.SMOKE:\r\n\t\t\treturn 'Smoke';\r\n\t\tcase EnvironmentId.INT:\r\n\t\t\treturn 'Integration';\r\n\t\tcase EnvironmentId.PREP:\r\n\t\t\treturn 'Pre-Production';\r\n\t\tcase EnvironmentId.PROD:\r\n\t\t\treturn 'Production';\r\n\t\tdefault:\r\n\t\t\treturn env;\r\n\t}\r\n};\r\n\r\nconst prittfyDate = (dateStr: string | null | undefined) => {\r\n\tif (dateStr) {\r\n\t\treturn new Date(dateStr ? dateStr : 0);\r\n\t}\r\n\treturn dateStr;\r\n};\r\n\r\n/** A EnvironmentToaster */\r\nexport const EnvironmentToaster = ({\r\n\tenv,\r\n\tbuildDate,\r\n}: EnvironmentToasterProps) => {\r\n\tlet environment = translateEnvironment(env);\r\n\r\n\tconst buildStr = prittfyDate(buildDate);\r\n\r\n\tconst isPhone = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.tablet - 1,\r\n\t});\r\n\tconst isTablet = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.tablet,\r\n\t\tmaxWidth: breakpointsNumber.desktop - 1,\r\n\t});\r\n\tconst isDesktop = useMediaQuery({ minWidth: breakpointsNumber.desktop });\r\n\r\n\treturn (\r\n\t\t<EnvironmentToasterContainer>\r\n\t\t\t<div>\r\n\t\t\t\tEnvironment: {environment}\r\n\t\t\t\t{isPhone && ' / Phone'}\r\n\t\t\t\t{isTablet && ' / Tablet'}\r\n\t\t\t\t{isDesktop && ' / Desktop'}\r\n\t\t\t</div>\r\n\t\t\t{buildStr && <div>Build: {buildStr.toLocaleString()}</div>}\r\n\t\t</EnvironmentToasterContainer>\r\n\t);\r\n};\r\n\r\nexport default EnvironmentToaster;\r\n","/**\r\n * useCookie\r\n */\r\n\r\nimport { useState } from 'react';\r\n\r\ninterface ISetCookieActionOptions {\r\n\tsecure?: any;\r\n\tsameSite?: any;\r\n\tdays?: number;\r\n\tpath: string;\r\n}\r\n\r\nconst setCookie = (\r\n\tname: string,\r\n\tvalue: string,\r\n\toptions: ISetCookieActionOptions\r\n) => {\r\n\tif (typeof document !== 'undefined') {\r\n\t\tconst expires = options.days\r\n\t\t\t? '; expires=' + new Date(Date.now() + options.days * 864e5).toUTCString()\r\n\t\t\t: '';\r\n\t\tconst sameSite = options.sameSite\r\n\t\t\t? '; SameSite=' + options.sameSite\r\n\t\t\t: '; SameSite=Lax';\r\n\t\tconst secure = options.secure ? '; Secure' : '';\r\n\r\n\t\tdocument.cookie =\r\n\t\t\tname +\r\n\t\t\t'=' +\r\n\t\t\tencodeURIComponent(value) +\r\n\t\t\texpires +\r\n\t\t\t'; path=' +\r\n\t\t\toptions.path +\r\n\t\t\tsameSite +\r\n\t\t\tsecure;\r\n\t}\r\n};\r\n\r\nconst getCookie = (name: string): string => {\r\n\tif (typeof document === 'undefined') {\r\n\t\treturn '';\r\n\t}\r\n\r\n\treturn document.cookie.split('; ').reduce((r, v) => {\r\n\t\tconst parts = v.split('=');\r\n\t\treturn parts[0] === name ? decodeURIComponent(parts[1]) : r;\r\n\t}, '');\r\n};\r\n\r\nexport const useCookie = (key: string, initialValue: string): [string, any] => {\r\n\tconst [item, setItem] = useState(() => {\r\n\t\treturn getCookie(key) || initialValue;\r\n\t});\r\n\r\n\tconst updateItem = (\r\n\t\tvalue: string,\r\n\t\toptions: ISetCookieActionOptions = { path: '/' }\r\n\t) => {\r\n\t\tsetItem(value);\r\n\t\tsetCookie(key, value, options);\r\n\t};\r\n\r\n\treturn [item, updateItem];\r\n};\r\n","import styled from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\n\r\nexport const MainContainer = styled.div`\r\n background-color: #accfdb;\r\n display: flex;\r\n padding: 1rem 2rem;\r\n`\r\n\r\nexport const Content = styled.p`\r\n p{\r\n margin: 0;\r\n font-size: 1.125rem;\r\n font-weight: 400;\r\n font-family: 'Tiempos Text', 'Times New Roman';\r\n }\r\n`\r\n\r\nexport const ContentWrapper = styled.div`\r\n max-width: 65%;\r\n margin: 0 auto;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n\r\n div {\r\n margin-right: 1rem;\r\n }\r\n\r\n ${mediaQueries.phone} { \r\n max-width: 95%;\r\n flex-direction: column;\r\n \r\n button {\r\n width: 100%;\r\n margin-top: 1rem;\r\n margin-bottom: 0.75rem;\r\n span {\r\n text-align: center;\r\n width: 100%;\r\n } \r\n }\r\n\t}\r\n`\r\n\r\nexport const CloseButton = styled.button`\r\n width: 1.5rem;\r\n height: 1.5rem;\r\n background: transparent;\r\n padding: 0;\r\n margin: 0;\r\n border-radius: 50%;\r\n border: none;\r\n cursor: pointer;\r\n &:focus {\r\n outline: none;\r\n }\r\n &:hover { \r\n svg {\r\n fill: white;\r\n }\r\n }\r\n`\r\n\r\nexport default {\r\n MainContainer,\r\n Content,\r\n ContentWrapper,\r\n CloseButton\r\n}","import CookieBar from \"./CookieBar\";\r\n\r\nexport default CookieBar;","/**\r\n * Cookiebar\r\n */\r\n\r\nimport React, { useState } from 'react';\r\nimport Link from 'components/Boilerplate/Link';\r\nimport { useCookie } from 'hooks';\r\nimport {\r\n\tMainContainer,\r\n\tContent,\r\n\tContentWrapper,\r\n\tCloseButton,\r\n} from './CookieBar.styles';\r\nimport { RawFragmentModel } from 'types/fragments';\r\nimport Button from 'components/Button';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport EpiFragments from 'components/Boilerplate/EpiFragments';\r\n\r\ninterface Props {\r\n\t/** Cookiebar content */\r\n\ttext: any;\r\n\r\n\t/** Cookiebar acceptance text */\r\n\tbuttonText?: string;\r\n\r\n\t/** Read more link text */\r\n\treadMoreText?: string;\r\n\r\n\t/** Read more link url */\r\n\treadMoreUrl?: string;\r\n}\r\n\r\n/** CookieBar component for accepting cookies. */\r\nconst CookieBar = ({ text, buttonText, readMoreText, readMoreUrl }: Props) => {\r\n\tconst [cookieIsAccepted, setCookieIsAccepted] = useState(false);\r\n\tconst [cookie, setCookie] = useCookie('NVse-CONSENT', '');\r\n\r\n\tif (cookie || cookieIsAccepted) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (\r\n\t\t<MainContainer>\r\n\t\t\t<ContentWrapper>\r\n\t\t\t\t<div>\r\n\t\t\t\t\t{text && (\r\n\t\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\t\tinsideGrid={true}\r\n\t\t\t\t\t\t\tinsideInnerGrid={true}\r\n\t\t\t\t\t\t\tfragments={text?.fragments}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{readMoreUrl && <Link href={readMoreUrl}>{readMoreText}</Link>}\r\n\t\t\t\t</div>\r\n\t\t\t\t<Button\r\n\t\t\t\t\tonClick={() => setCookie('NVse-CONSENT', { days: 365 })}\r\n\t\t\t\t\tvariant={ButtonVariant.Secondary}\r\n\t\t\t\t>\r\n\t\t\t\t\t{buttonText}\r\n\t\t\t\t</Button>\r\n\t\t\t</ContentWrapper>\r\n\t\t\t<CloseButton onClick={() => setCookieIsAccepted(true)}>\r\n\t\t\t\t<svg\r\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\r\n\t\t\t\t\tviewBox=\"-2 -2 24 24\"\r\n\t\t\t\t\twidth=\"24\"\r\n\t\t\t\t\theight=\"24\"\r\n\t\t\t\t\tpreserveAspectRatio=\"xMinYMin\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<path d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16zm0 2C4.477 20 0 15.523 0 10S4.477 0 10 0s10 4.477 10 10-4.477 10-10 10z\"></path>\r\n\t\t\t\t\t<path d=\"M11.414 10l2.829 2.828a1 1 0 0 1-1.415 1.415L10 11.414l-2.828 2.829a1 1 0 1 1-1.415-1.415L8.586 10 5.757 7.172a1 1 0 0 1 1.415-1.415L10 8.586l2.828-2.829a1 1 0 0 1 1.415 1.415L11.414 10z\"></path>\r\n\t\t\t\t</svg>\r\n\t\t\t</CloseButton>\r\n\t\t</MainContainer>\r\n\t);\r\n};\r\n\r\nexport default CookieBar;\r\n","import styled from 'styled-components';\r\n\r\nexport const MessageContainer = styled.div`\r\n\tbackground-color: #ffc017;\r\n\tfont-family: 'Tiempos Text', 'Times New Roman';\r\n`;\r\n\r\nexport const TopBorder = styled.div`\r\n\tborder-top: 1px solid #ffe69b;\r\n`;\r\n\r\nexport const HeaderContainer = styled.div`\r\n\tpadding: 1rem;\r\n\tmargin: 0 auto;\r\n\tmax-width: 1132px;\r\n\tdisplay: flex;\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n`;\r\n\r\nexport const MessageHeading = styled.h2`\r\n\tmargin: 0;\r\n\tfont-size: 1.17rem;\r\n`;\r\n\r\nexport const BackgroundWrapper = styled.div`\r\n\tmargin: 0 0 0 0;\r\n\tbackground-color: #ffe69b;\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n`;\r\n\r\nexport const TextWrapper = styled.div`\r\n\talign-self: center;\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tmax-width: 1132px;\r\n\tpadding: 0 1rem;\r\n`;\r\n\r\nexport const LinkWrapper = styled.div`\r\n\tpadding: 0 0 0.75rem 0;\r\n`;\r\n\r\nexport const Text = styled.p``;\r\n","import Link from 'components/Boilerplate/Link';\r\nimport Button from 'components/Button';\r\nimport { ScreenReaderText } from 'components/Typography';\r\nimport { useState } from 'react';\r\nimport {\r\n\tMessageContainer,\r\n\tTopBorder,\r\n\tHeaderContainer,\r\n\tMessageHeading,\r\n\tBackgroundWrapper,\r\n\tText,\r\n\tTextWrapper,\r\n\tLinkWrapper,\r\n} from './GlobalMessage.styles';\r\n\r\ninterface Props {\r\n\tindex: number;\r\n\theading: string | undefined;\r\n\tlink: string | undefined;\r\n\ttext: string | undefined;\r\n\tshowMoreText: string | undefined;\r\n\tshowLessText: string | undefined;\r\n\tlinkText: string | undefined;\r\n}\r\n\r\nconst GlobalMessage = ({\r\n\tindex,\r\n\theading,\r\n\tlink,\r\n\ttext,\r\n\tshowMoreText,\r\n\tshowLessText,\r\n\tlinkText,\r\n}: Props) => {\r\n\tconst [isOpen, setIsOpen] = useState(false);\r\n\r\n\tconst openMessageHandler = () => {\r\n\t\tsetIsOpen((prevState) => !prevState);\r\n\t};\r\n\r\n\tconst notFirst = index > 0;\r\n\r\n\treturn (\r\n\t\t<MessageContainer role=\"status\">\r\n\t\t\t{notFirst && <TopBorder />}\r\n\t\t\t<HeaderContainer>\r\n\t\t\t\t<MessageHeading>{heading}</MessageHeading>\r\n\t\t\t\t<Button\r\n\t\t\t\t\taria-expanded={isOpen}\r\n\t\t\t\t\taria-controls={`message-button-${index}`}\r\n\t\t\t\t\ticonName={isOpen ? 'arrowup' : 'arrowdown'}\r\n\t\t\t\t\tonClick={openMessageHandler}\r\n\t\t\t\t>\r\n\t\t\t\t\t{isOpen ? (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t{showLessText}\r\n\t\t\t\t\t\t\t<ScreenReaderText>om {heading}</ScreenReaderText>\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t{showMoreText}\r\n\t\t\t\t\t\t\t<ScreenReaderText>om {heading}</ScreenReaderText>\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Button>\r\n\t\t\t</HeaderContainer>\r\n\t\t\t<BackgroundWrapper>\r\n\t\t\t\t<TextWrapper>\r\n\t\t\t\t\t<Text hidden={!isOpen}>{text}</Text>\r\n\t\t\t\t\t{link && (\r\n\t\t\t\t\t\t<LinkWrapper hidden={!isOpen}>\r\n\t\t\t\t\t\t\t<Link href={link}>\r\n\t\t\t\t\t\t\t\t{linkText}\r\n\t\t\t\t\t\t\t\t<ScreenReaderText>om {heading}</ScreenReaderText>\r\n\t\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t\t</LinkWrapper>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</TextWrapper>\r\n\t\t\t</BackgroundWrapper>\r\n\t\t</MessageContainer>\r\n\t);\r\n};\r\n\r\nexport default GlobalMessage;\r\n","/**\r\n * SiteHeader\r\n */\r\n\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport Link from 'components/Boilerplate/Link';\r\nimport Button from 'components/Button/Button';\r\nimport MenuDropdown from 'components/MenuDropdown';\r\nimport { SearchInputForm } from 'components/Panels/SearchInputForm';\r\nimport FocusTrap from 'focus-trap-react';\r\nimport { ButtonVariant } from 'pages/sharedModelTypes';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { useHistory, useLocation } from 'react-router-dom';\r\nimport { Transition } from 'react-transition-group';\r\nimport {\r\n\tselectContent,\r\n\tselectLocalization,\r\n\tselectSearch,\r\n} from 'store/modules/model';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport {\r\n\tLang,\r\n\tLogoModel,\r\n\tModelQuickLinksItem,\r\n\tNavigationItem,\r\n} from 'types/epi';\r\nimport { translate } from 'utils/helper-utils';\r\nimport {\r\n\tQuickLinksList,\r\n\tQuickLinksListItem,\r\n\tSearchContainer,\r\n\tSearchOverlay,\r\n\tSiteHeaderContainer,\r\n\tSiteHeaderContent,\r\n\tSiteHeaderLogoLink,\r\n\tSiteHeaderMenuAndQuickLinks,\r\n\tSiterHeaderMenuAndSearch,\r\n} from './SiteHeader.styles';\r\nimport { ListingPageURLs } from 'types/common';\r\n\r\ninterface Props {\r\n\thome?: NavigationItem;\r\n\titemsAria?: string;\r\n\tquickLinks?: ModelQuickLinksItem[];\r\n\tlang?: Lang;\r\n\tisPopupMenuOpen: boolean;\r\n\tstyle?: any;\r\n\tonOpenMenu?: (isOpen: boolean) => void;\r\n\tonOpenSearchMenu?: (isOpen: boolean) => void;\r\n\tisSearchOpen: boolean;\r\n\tisMenuOpen: boolean;\r\n\tlogo: LogoModel | undefined;\r\n}\r\n\r\n/** Main description for this component. */\r\nconst SiteHeader = React.forwardRef<any, Props>(\r\n\t(\r\n\t\t{\r\n\t\t\thome = { text: 'Home' } as NavigationItem,\r\n\t\t\tquickLinks = [],\r\n\t\t\tlang = {},\r\n\t\t\titemsAria = '',\r\n\t\t\tisPopupMenuOpen,\r\n\t\t\tonOpenMenu,\r\n\t\t\tonOpenSearchMenu,\r\n\t\t\tisSearchOpen = false,\r\n\t\t\tisMenuOpen = false,\r\n\t\t\tlogo,\r\n\t\t},\r\n\t\tmenuButtonRef\r\n\t) => {\r\n\t\tconst menuClick = () => {\r\n\t\t\tcloseSearchMenu();\r\n\t\t\tif (onOpenMenu) {\r\n\t\t\t\tonOpenMenu(true);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst [isSearchPanelOpen, setIsSearchPanelOpen] = useState<boolean>(\r\n\t\t\tisPopupMenuOpen\r\n\t\t);\r\n\t\tconst pageContent = useSelector(selectContent);\r\n\r\n\t\tconst [animate, setAnimate] = useState(false);\r\n\r\n\t\tconst animSpeed = 200;\r\n\t\tconst search = useSelector(selectSearch);\r\n\r\n\t\tconst searchButtonRef = React.createRef<any>();\r\n\t\tconst searchOverlayRef = React.createRef<any>();\r\n\r\n\t\tconst location = useLocation();\r\n\t\tconst history = useHistory();\r\n\t\tconst localization = useSelector(selectLocalization);\r\n\r\n\t\tconst ariaLabel = translate(\r\n\t\t\t'/frontend/components/searchBar/searcharialabel',\r\n\t\t\t'Search',\r\n\t\t\tlocalization\r\n\t\t);\r\n\t\tconst searchButtonLabel = translate(\r\n\t\t\t'/frontend/components/headerMenu/search',\r\n\t\t\t'Search',\r\n\t\t\tlocalization\r\n\t\t);\r\n\t\tconst menuButtonLabel = translate(\r\n\t\t\t'/frontend/components/headerMenu/menu',\r\n\t\t\t'Menu',\r\n\t\t\tlocalization\r\n\t\t);\r\n\r\n\t\titemsAria = translate(\r\n\t\t\t'/frontend/components/headerMenu/itemsaria',\r\n\t\t\t'Main menu',\r\n\t\t\tlocalization\r\n\t\t);\r\n\r\n\t\t// hide QuickLinks till 635 pixel width\r\n\t\tconst breakpointsQuickLinks: number = 635;\r\n\r\n\t\tconst isNarrowDisplay = useMediaQuery({\r\n\t\t\tminWidth: breakpointsNumber.phone,\r\n\t\t\tmaxWidth: breakpointsQuickLinks,\r\n\t\t});\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (isSearchPanelOpen) {\r\n\t\t\t\tcloseSearchMenu();\r\n\t\t\t}\r\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t\t}, [location]);\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\t// This is to updated epi quicknavigator link with current page id\r\n\t\t\tvar epiNavigator: HTMLAnchorElement | null = document.querySelector(\r\n\t\t\t\t'#epi-quickNavigator > li:first-of-type > a:first-of-type'\r\n\t\t\t);\r\n\t\t\tif (epiNavigator && pageContent && epiNavigator.href) {\r\n\t\t\t\tconst prefix = ':///';\r\n\t\t\t\tconst pos = epiNavigator.href.lastIndexOf(prefix);\r\n\t\t\t\tif (pos !== -1) {\r\n\t\t\t\t\tepiNavigator.href =\r\n\t\t\t\t\t\tepiNavigator.href.substring(0, pos) + prefix + pageContent.id;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, [location, pageContent]);\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (onOpenSearchMenu) {\r\n\t\t\t\tonOpenSearchMenu(isSearchPanelOpen);\r\n\t\t\t}\r\n\r\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t\t}, [isSearchPanelOpen, onOpenSearchMenu]);\r\n\r\n\t\tconst closeSearchMenu = () => {\r\n\t\t\tsetAnimate(false);\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tsetIsSearchPanelOpen(false);\r\n\t\t\t}, animSpeed);\r\n\t\t};\r\n\r\n\t\tconst openSearchMenu = () => {\r\n\t\t\tsetIsSearchPanelOpen(true);\r\n\t\t\tsetAnimate(true);\r\n\t\t};\r\n\r\n\t\tconst setFocusOnSearchButton = () => {\r\n\t\t\tif (searchButtonRef && searchButtonRef.current) {\r\n\t\t\t\tsearchButtonRef.current.focus();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst handleSearchSubmit = (query: string) => {\r\n\t\t\tcloseSearchMenu();\r\n\r\n\t\t\thistory.push({ pathname: search?.searchPageUrl, search: `?q=${query}` });\r\n\t\t\thistory.go(0);\r\n\t\t};\r\n\r\n\t\tconst onSearchMenuEsc = () => {\r\n\t\t\tsetFocusOnSearchButton();\r\n\t\t\tcloseSearchMenu();\r\n\t\t};\r\n\r\n\t\tconst onSearchMenuClick = () => {\r\n\t\t\tisSearchPanelOpen ? closeSearchMenu() : openSearchMenu();\r\n\t\t};\r\n\r\n\t\tconst onMouseClickOutsideSearchOverlay = (e: any) => {\r\n\t\t\tif (searchOverlayRef.current === e.target) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tcloseSearchMenu();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<FocusTrap\r\n\t\t\t\tactive={!isMenuOpen && isSearchOpen}\r\n\t\t\t\tfocusTrapOptions={{ preventScroll: true }}\r\n\t\t\t>\r\n\t\t\t\t<SiteHeaderContainer style={{ zIndex: 1 }}>\r\n\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t<SiteHeaderContent>\r\n\t\t\t\t\t\t\t<SiteHeaderLogoLink\r\n\t\t\t\t\t\t\t\tshowLinkIcon={false}\r\n\t\t\t\t\t\t\t\tdata-testid=\"logoLink\"\r\n\t\t\t\t\t\t\t\tto={home && home.url ? home.url : '/'}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<img data-testid=\"logoImage\" src={logo?.src} alt={logo?.alt} />\r\n\t\t\t\t\t\t\t</SiteHeaderLogoLink>\r\n\t\t\t\t\t\t\t<SiterHeaderMenuAndSearch>\r\n\t\t\t\t\t\t\t\t<SiteHeaderMenuAndQuickLinks aria-label={itemsAria}>\r\n\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\ticonName=\"menu\"\r\n\t\t\t\t\t\t\t\t\t\tref={menuButtonRef}\r\n\t\t\t\t\t\t\t\t\t\ticonPosition={isNarrowDisplay ? 0 : 1}\r\n\t\t\t\t\t\t\t\t\t\taria-expanded={isPopupMenuOpen}\r\n\t\t\t\t\t\t\t\t\t\taria-haspopup=\"dialog\"\r\n\t\t\t\t\t\t\t\t\t\tonClick={menuClick}\r\n\t\t\t\t\t\t\t\t\t\tvariant={ButtonVariant.Tertiary}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{menuButtonLabel}\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\r\n\t\t\t\t\t\t\t\t\t{!isNarrowDisplay && (\r\n\t\t\t\t\t\t\t\t\t\t<QuickLinks\r\n\t\t\t\t\t\t\t\t\t\t\titemsAria={itemsAria}\r\n\t\t\t\t\t\t\t\t\t\t\titems={quickLinks}\r\n\t\t\t\t\t\t\t\t\t\t></QuickLinks>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</SiteHeaderMenuAndQuickLinks>\r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t{(() => {\r\n\t\t\t\t\t\t\t\t\t\tif (lang && lang.items && lang.items?.length > 1) {\r\n\t\t\t\t\t\t\t\t\t\t\tconst { items, menuHeaderIsItem } = lang;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tconst activeItem = menuHeaderIsItem\r\n\t\t\t\t\t\t\t\t\t\t\t\t? items?.find((l) => !l.active)\r\n\t\t\t\t\t\t\t\t\t\t\t\t: items?.[0];\r\n\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<MenuDropdown\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tlinks={items}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmobileHeader={activeItem?.text}\r\n\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t})()}\r\n\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\tref={searchButtonRef}\r\n\t\t\t\t\t\t\t\t\taria-expanded={isSearchPanelOpen}\r\n\t\t\t\t\t\t\t\t\ticonPosition={isNarrowDisplay ? 0 : 1}\r\n\t\t\t\t\t\t\t\t\ticonName={isSearchPanelOpen ? 'cross' : 'search'}\r\n\t\t\t\t\t\t\t\t\tonClick={onSearchMenuClick}\r\n\t\t\t\t\t\t\t\t\tvariant={ButtonVariant.Tertiary}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{searchButtonLabel}\r\n\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t</SiterHeaderMenuAndSearch>\r\n\t\t\t\t\t\t</SiteHeaderContent>\r\n\t\t\t\t\t</Grid>\r\n\r\n\t\t\t\t\t<Transition\r\n\t\t\t\t\t\tin={animate}\r\n\t\t\t\t\t\ttimeout={animSpeed}\r\n\t\t\t\t\t\tmountOnEnter={true}\r\n\t\t\t\t\t\tunmountOnExit={true}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{(state) => (\r\n\t\t\t\t\t\t\t<SearchOverlay\r\n\t\t\t\t\t\t\t\trole=\"dialog\"\r\n\t\t\t\t\t\t\t\taria-label={ariaLabel}\r\n\t\t\t\t\t\t\t\taria-modal={true}\r\n\t\t\t\t\t\t\t\tref={searchOverlayRef}\r\n\t\t\t\t\t\t\t\tstate={state}\r\n\t\t\t\t\t\t\t\tonClick={onMouseClickOutsideSearchOverlay}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<SearchContainer state={state}>\r\n\t\t\t\t\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t\t\t\t\t<SearchInputForm\r\n\t\t\t\t\t\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t\t\t\t\t\tonSubmit={handleSearchSubmit}\r\n\t\t\t\t\t\t\t\t\t\t\tonEsc={onSearchMenuEsc}\r\n\t\t\t\t\t\t\t\t\t\t\tquery=\"\"\r\n\t\t\t\t\t\t\t\t\t\t></SearchInputForm>\r\n\t\t\t\t\t\t\t\t\t</Grid>\r\n\t\t\t\t\t\t\t\t</SearchContainer>\r\n\t\t\t\t\t\t\t</SearchOverlay>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Transition>\r\n\t\t\t\t</SiteHeaderContainer>\r\n\t\t\t</FocusTrap>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nexport default SiteHeader;\r\n\r\n/**\r\n *\r\n *\r\n */\r\n\r\ninterface QuickLinksProps {\r\n\titems: ModelQuickLinksItem[];\r\n\titemsAria: string;\r\n}\r\n\r\nexport type ActiveNode = {\r\n\tisActive: boolean;\r\n};\r\n\r\n/** Main description for this component. */\r\nconst QuickLinks = ({ items, itemsAria }: QuickLinksProps) => {\r\n\tconst location = useLocation();\r\n\r\n\tfunction getPath(url: string): string | null {\r\n\t\tconst urlpaths = url.split('/');\r\n\t\tif (url.charAt(0) === '/' && urlpaths.length > 0) {\r\n\t\t\tvar paths = '/';\r\n\t\t\turlpaths.forEach((path) => {\r\n\t\t\t\tif (path != '') paths += path + '/';\r\n\t\t\t});\r\n\r\n\t\t\treturn paths;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (\r\n\t\t<QuickLinksList>\r\n\t\t\t{items.map((item, index) => {\r\n\t\t\t\tlet itemPath = getPath(item.url);\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<QuickLinksListItem\r\n\t\t\t\t\t\tisActive={location.pathname === itemPath}\r\n\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Link\r\n\t\t\t\t\t\t\tshowLinkIcon={false}\r\n\t\t\t\t\t\t\tto={item.url}\r\n\t\t\t\t\t\t\texternal={ListingPageURLs.includes(item.url)}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{item.heading}\r\n\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t</QuickLinksListItem>\r\n\t\t\t\t);\r\n\t\t\t})}\r\n\t\t</QuickLinksList>\r\n\t);\r\n};\r\n","export default __webpack_public_path__ + \"static/media/Twitter-white.4d73a492.png\";","import { ThemeProps } from 'components/Banner/Banner';\r\nimport { getThemeBorderColor } from 'pages/sharedModelTypes';\r\nimport styled, { css } from 'styled-components';\r\nimport { mediaQueries } from 'theme';\r\nimport { accessibilityFocus } from 'theme/styles';\r\nimport { SimpleExpanderStyleProps } from './SimpleExpander';\r\n\r\nexport const focusOutlineEffect = () => {\r\n\treturn css`\r\n\t\t&:focus {\r\n\t\t\t${accessibilityFocus()};\r\n\t\t}\r\n\t`;\r\n};\r\n\r\nexport const SimpleExpanderHeader = styled.div<SimpleExpanderStyleProps>`\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\t${(p) => p.isEnabled && `cursor: pointer;`}\r\n\r\n\t${mediaQueries.phone} {\r\n\t\t${(p) => p.isEnabled && focusOutlineEffect()};\r\n\t}\r\n`;\r\n\r\nconst cheveron = () => {\r\n\treturn css`\r\n\t\tmargin: 0px ${props => props.theme.spacing.space2}rem;\r\n\t\tflex: 0 1 auto;\r\n\t`;\r\n};\r\n\r\nexport const SimpleExpanderHeaderContent = styled.div<SimpleExpanderStyleProps>`\r\n\tdisplay: flex;\r\n\tflex: 1 1 auto;\r\n\r\n\t> *:first-child {\r\n\t\tflex: 1 1 auto;\r\n\t}\r\n\r\n\t${({ isEnabled }) => isEnabled && cheveron()};\r\n\r\n\tsvg {\r\n\t\ttransform: ${({ isOpen }) => (isOpen ? 'rotate(270deg)' : 'rotate(90deg)')};\r\n\t\talign-self: center;\r\n\t}\r\n`;\r\n\r\nexport const SimpleExpanderDevider = styled.div<ThemeProps>`\r\n\t${mediaQueries.phone} {\r\n\t\tmargin-top: 8px;\r\n\t\tborder-bottom: 1px solid;\r\n\t\topacity: 0.18;\r\n\t\tborder-bottom-color: ${(p) => `${getThemeBorderColor(p.theme, p.themeName)}`};\r\n\t}\r\n`;\r\n\r\nexport const SimpleExpanderContent = styled.div<SimpleExpanderStyleProps>`\r\n\tdisplay: ${(p) => (p.isOpen ? 'inherit' : 'none')};\r\n`;\r\n","/**\r\n * SimpleExpander\r\n */\r\n\r\nimport Icon from 'components/Boilerplate/Icon';\r\nimport { PuffTheme } from 'pages/sharedModelTypes';\r\nimport React, { useEffect, useState } from 'react';\r\nimport {\r\n\tSimpleExpanderContent,\r\n\tSimpleExpanderDevider,\r\n\tSimpleExpanderHeader,\r\n\tSimpleExpanderHeaderContent,\r\n} from './SimpleExpander.styles';\r\n\r\nexport type SimpleExpanderContainerProps = {\r\n\tisOpen: boolean;\r\n};\r\n\r\nexport type SimpleExpanderStyleProps = {\r\n\tisEnabled?: boolean;\r\n\tisOpen?: boolean;\r\n\tthemeName?: PuffTheme;\r\n};\r\n\r\nexport interface SimpleExpanderProps {\r\n\theading: string | JSX.Element | null;\r\n\tisOpen?: boolean;\r\n\tisEnabled?: boolean;\r\n\tariaLabel: string;\r\n\tid?: string;\r\n\tthemeName?: PuffTheme | null;\r\n}\r\n\r\n/** A ExpanderPrototype component. */\r\nexport const SimpleExpander: React.FC<SimpleExpanderProps> = ({\r\n\theading,\r\n\tisOpen = true,\r\n\tisEnabled = true,\r\n\tchildren,\r\n\tid = 'expander',\r\n\tariaLabel,\r\n\tthemeName,\r\n}) => {\r\n\tconst [isOpenState, setIsOpenState] = useState(isOpen);\r\n\r\n\tconst elementId = `${id}-content`;\r\n\tuseEffect(() => {\r\n\t\tsetIsOpenState(isOpen);\r\n\t}, [isOpen]);\r\n\r\n\tconst headerClicked = () => {\r\n\t\tsetIsOpenState(!isOpenState);\r\n\t};\r\n\r\n\tconst handleContainerKeyPress = (\r\n\t\tevent: React.KeyboardEvent<HTMLDivElement>\r\n\t) => {\r\n\t\tswitch (event.key) {\r\n\t\t\tcase 'Enter':\r\n\t\t\tcase ' ':\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tsetIsOpenState(!isOpenState);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<SimpleExpanderHeader\r\n\t\t\t\taria-expanded={isOpenState}\r\n\t\t\t\taria-controls={elementId}\r\n\t\t\t\ttabIndex={isEnabled ? 0 : -1}\r\n\t\t\t\trole={isEnabled ? 'button' : undefined}\r\n\t\t\t\taria-disabled={!isEnabled}\r\n\t\t\t\tonKeyDown={isEnabled ? handleContainerKeyPress : undefined}\r\n\t\t\t\tonClick={isEnabled ? headerClicked : undefined}\r\n\t\t\t\tisOpen={isOpenState}\r\n\t\t\t\tisEnabled={isEnabled}\r\n\t\t\t>\r\n\t\t\t\t<SimpleExpanderHeaderContent isOpen={isOpenState}>\r\n\t\t\t\t\t{heading !== null && heading}\r\n\t\t\t\t\t{isEnabled && children && (\r\n\t\t\t\t\t\t<Icon color=\"currentColor\" icon=\"chevron\" size={1} />\r\n\t\t\t\t\t)}\r\n\t\t\t\t</SimpleExpanderHeaderContent>\r\n\t\t\t</SimpleExpanderHeader>\r\n\r\n\t\t\t{!isOpenState && (\r\n\t\t\t\t<SimpleExpanderDevider themeName={themeName}></SimpleExpanderDevider>\r\n\t\t\t)}\r\n\r\n\t\t\t{isOpenState && (\r\n\t\t\t\t<>\r\n\t\t\t\t\t<SimpleExpanderContent\r\n\t\t\t\t\t\trole=\"region\"\r\n\t\t\t\t\t\taria-label={ariaLabel}\r\n\t\t\t\t\t\tid={elementId}\r\n\t\t\t\t\t\tisOpen={isOpenState}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{children}\r\n\t\t\t\t\t</SimpleExpanderContent>\r\n\t\t\t\t</>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default SimpleExpander;\r\n","import { Heading } from 'components/Typography/Typography';\r\nimport React, { useContext } from 'react';\r\nimport {\r\n\tFooterSectionHeader,\r\n\tFooterSectionItem,\r\n\tFooterSectionItemList,\r\n\tFooterSectionLink,\r\n\tSocialLogoStyle,\r\n} from './FooterSection.styles';\r\nimport { LinkSection } from './SiteFooter';\r\nimport facebookImg from './Facebook.png';\r\nimport twitterImg from './Twitter-white.png';\r\nimport linkedInImg from './LinkedIn.png';\r\nimport SimpleExpander from './SimpleExpander';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport { getThemeTextColor, PuffTheme } from 'pages/sharedModelTypes';\r\nimport { ThemeContext } from 'styled-components';\r\n\r\ntype FooterSectionProp = {\r\n\tsection: LinkSection;\r\n\tid?: string;\r\n\tariaLabel: string;\r\n\tthemeName?: PuffTheme;\r\n};\r\n\r\nexport const FooterSection = ({\r\n\tsection,\r\n\tid,\r\n\tariaLabel,\r\n\tthemeName,\r\n}: FooterSectionProp) => {\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst isPhone = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.tablet - 1,\r\n\t});\r\n\r\n\tlet linkHeading;\r\n\tif (section.heading.url && !isPhone) {\r\n\t\tlinkHeading = (\r\n\t\t\t<Heading\r\n\t\t\t\tlevel={2}\r\n\t\t\t\tstyleLevel={5}\r\n\t\t\t\tzeroBottom={true}\r\n\t\t\t\tcolor={getThemeTextColor(themeContext, themeName)}\r\n\t\t\t>\r\n\t\t\t\t<FooterSectionHeader showLinkIcon={false} to={section.heading.url}>\r\n\t\t\t\t\t{section.heading.heading}\r\n\t\t\t\t</FooterSectionHeader>\r\n\t\t\t</Heading>\r\n\t\t);\r\n\t} else {\r\n\t\t// Show expander with simple text header\r\n\t\tlinkHeading = (\r\n\t\t\t<Heading\r\n\t\t\t\tzeroBottom={true}\r\n\t\t\t\tlevel={2}\r\n\t\t\t\tstyleLevel={5}\r\n\t\t\t\tcolor={getThemeTextColor(themeContext, themeName)}\r\n\t\t\t>\r\n\t\t\t\t{section.heading.heading}\r\n\t\t\t</Heading>\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t<SimpleExpander\r\n\t\t\tariaLabel={ariaLabel}\r\n\t\t\tid={id}\r\n\t\t\tisEnabled={isPhone}\r\n\t\t\tisOpen={!isPhone}\r\n\t\t\theading={linkHeading}\r\n\t\t\tthemeName={themeName}\r\n\t\t>\r\n\t\t\t<FooterSectionItemList>\r\n\t\t\t\t{section.links.map((item, index) => {\r\n\t\t\t\t\tif (item.type) {\r\n\t\t\t\t\t\tlet socialLogo = { src: '', alt: '' };\r\n\t\t\t\t\t\tswitch (item.type.toLowerCase()) {\r\n\t\t\t\t\t\t\tcase 'facebook':\r\n\t\t\t\t\t\t\t\tsocialLogo.src = facebookImg;\r\n\t\t\t\t\t\t\t\tsocialLogo.alt = 'facebook image';\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'twitter':\r\n\t\t\t\t\t\t\t\tsocialLogo.src = twitterImg;\r\n\t\t\t\t\t\t\t\tsocialLogo.alt = 'twitter image';\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'linkedin':\r\n\t\t\t\t\t\t\t\tsocialLogo.src = linkedInImg;\r\n\t\t\t\t\t\t\t\tsocialLogo.alt = 'linkedin image';\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tconst customStyle =\r\n\t\t\t\t\t\t\tsocialLogo.src === twitterImg\r\n\t\t\t\t\t\t\t\t? { height: '24px', marginRight: '0.6rem' }\r\n\t\t\t\t\t\t\t\t: {};\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<FooterSectionItem key={index}>\r\n\t\t\t\t\t\t\t\t{socialLogo && (\r\n\t\t\t\t\t\t\t\t\t<SocialLogoStyle\r\n\t\t\t\t\t\t\t\t\t\tsrc={socialLogo.src}\r\n\t\t\t\t\t\t\t\t\t\talt={socialLogo.alt}\r\n\t\t\t\t\t\t\t\t\t\tstyle={customStyle}\r\n\t\t\t\t\t\t\t\t\t></SocialLogoStyle>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t<FooterSectionLink key={index} to={item.link?.url}>\r\n\t\t\t\t\t\t\t\t\t{item.link?.heading}\r\n\t\t\t\t\t\t\t\t</FooterSectionLink>\r\n\t\t\t\t\t\t\t</FooterSectionItem>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<FooterSectionItem key={index}>\r\n\t\t\t\t\t\t\t\t<FooterSectionLink to={item.link?.url}>\r\n\t\t\t\t\t\t\t\t\t{item.link?.heading}\r\n\t\t\t\t\t\t\t\t</FooterSectionLink>\r\n\t\t\t\t\t\t\t</FooterSectionItem>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t})}\r\n\t\t\t</FooterSectionItemList>\r\n\t\t</SimpleExpander>\r\n\t);\r\n};\r\n\r\nexport default FooterSection;\r\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAD3ElEQVR4nO2bTYgURxiGn68ZFpFFN4vIHmRdggQMgQQPQRBJIB6CeBEvEhMIEUwOIQqi6CF4c3NKQBBDiEH89yQRDIh6CIEccvBgyCEJZCWEEMSsqyyyjOO8OXRP7G12tqt626nuGR8o5q++6q/eqa76qrrKyCBpBNgJbAJWAEOpFAGNJEWpROZzNL9UGtnrONLKfG4nKfu+lXptJd+3gDmgCcwA3wMXzWy269UkfSLpgfqXfyW9m66zJRWPgBPAnoL/VN04bGafwVMBDgGTQV3qPbvM7LxJWgP8DiwL7VGPmQbWRsAHDF7lAUaBdyJgR2hPAvJWRDzUDSqj2fF60Bh6LsASjNvEUVY2WqsTjSICtIGvgfXASuAF4FXgFE9D07rQQNKURyj5OBtKppG0R9KTsuPXZ8jPvi3gSzM72+1HM/sKuOhZZki8boE2buHyFwWdCYKPAI/M7G+HfLeJp6F1oFAnmEdnPl4LfARYJmmVQ751wPKC/vSayEeABvHEKY8PCzoTAi8BAI5I2tjtR0lvAh8vyaUe4yvAcuC6pH2S/m/mkoYlHQSuEq8d1gaTNAVMFLCdAX4jFvEl6jmrvFN0tRZgBHi9LE9CMeizQe/1+vRavG+ZebbZ5wlt4AZxv/IX8cwzAoaBMWAzsJWl9jnymwxdkDSUk64uYPc46SgXszuXyn9N0ssOvo9LOuPhf5Yp7xZgZs0cp7r9y83FbCV1nuocAI6ZWW40aWZ/Au9JugacpEBrWEon+CzYbWanfY3M7KwkgDO+tlXqBI8XqXyHZJredarejcoIYGY/lVDMp8SdpTOVEaAMzOwO8J2PTV8JkPCtT+bKCSBpVNKkpF8k3Vc8TJ+QNOZYxI8+16vUKCBpHXATGE99PQJ8BGyTtDlp5ovxD/Fw6lS3yrQAxXsULjG/8mnWAMcdimrisSJVGQGALcCGnDxvS3olJ4/XklyVBHjNIU8E5IXILvOVeQVWhZVlFOISQqepkgCumzRcfK5lC3D1pW8FCDIk11GAUn2ukgCu9K0AQXypkgCu9G0LcKVvBQgxCrSrJIArZQpVKQEGvhMM4UulWoArz2+BEmkNvAC++wNmgbs5ecZYeI/QHzl2q4kffOZxD3iYk2cCN0Fv+d5Pw7g5uRAvFrTLsipJZVCpWyAEzUEXYC4CHoX2IiAzEXAltBcB+cEkTQC/UrPtbSUwC6yNkkdNnwd2JgSHzWy6c3K0AVwGtoX1qWccM7O9kAQLZtYCtgNH8dxgUDPmgP2dykNydjiNpHHgfeAN4ieznaPznSPzdaBzfL6ZpGni4/PfZM88/AeR9YC640xaGgAAAABJRU5ErkJggg==\"","import { ThemeProps } from 'components/Banner/Banner';\r\nimport { getThemeBackground, getThemeTextColor } from 'pages/sharedModelTypes';\r\nimport styled from 'styled-components';\r\nimport { grid, mediaQueries } from 'theme';\r\n\r\nexport const FooterLinksContainer = styled.div<ThemeProps>`\r\n\tbackground-color: ${(p) => getThemeBackground(p.theme, p.themeName)};\r\n\tcolor: ${(p) => getThemeTextColor(p.theme, p.themeName)};\r\n\r\n\tpadding-top: ${props => props.theme.spacing.space7}rem;\r\n\tpadding-bottom: ${props => props.theme.spacing.space7}rem;\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tpadding-top: ${grid.gutter.phone};\r\n\t\tpadding-bottom: ${grid.gutter.phone};\r\n\t}\r\n`;\r\n","import { Cell, Grid } from 'components/Boilerplate/Grid';\r\nimport { PuffTheme } from 'pages/sharedModelTypes';\r\nimport React from 'react';\r\nimport FooterSection from './FooterSection';\r\nimport { FooterLinksContainer } from './LinksFooter.styles';\r\nimport { LinkSection } from './SiteFooter';\r\n\r\ntype LinksFooterProps = {\r\n\tsections: LinkSection[];\r\n\titemsAria: string;\r\n};\r\n\r\nexport const LinksFooter: React.FC<LinksFooterProps> = ({\r\n\tsections,\r\n\titemsAria,\r\n}) => {\r\n\tconst themeName: PuffTheme = PuffTheme.BlueDark;\r\n\r\n\treturn (\r\n\t\t<FooterLinksContainer themeName={themeName}>\r\n\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t<nav aria-label={itemsAria}>\r\n\t\t\t\t\t<Grid inner={true}>\r\n\t\t\t\t\t\t{sections.map((section, index) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t<Cell key={index} span={3} tablet={4} phone={4}>\r\n\t\t\t\t\t\t\t\t\t<FooterSection\r\n\t\t\t\t\t\t\t\t\t\tthemeName={themeName}\r\n\t\t\t\t\t\t\t\t\t\tariaLabel={section.heading.heading}\r\n\t\t\t\t\t\t\t\t\t\tid={`linksfooter-${index}`}\r\n\t\t\t\t\t\t\t\t\t\tsection={section}\r\n\t\t\t\t\t\t\t\t\t></FooterSection>\r\n\t\t\t\t\t\t\t\t</Cell>\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t</Grid>\r\n\t\t\t\t</nav>\r\n\t\t\t</Grid>\r\n\t\t</FooterLinksContainer>\r\n\t);\r\n};\r\n\r\nexport default LinksFooter;\r\n","import { ThemeProps } from 'components/Banner/Banner';\r\nimport { getThemeBackground, getThemeTextColor } from 'pages/sharedModelTypes';\r\nimport styled from 'styled-components';\r\nimport { grid, mediaQueries } from 'theme';\r\n\r\nexport const FooterContactContainer = styled.div<ThemeProps>`\r\n\tbackground-color: ${(p) => getThemeBackground(p.theme, p.themeName)};\r\n\tcolor: ${(p) => getThemeTextColor(p.theme, p.themeName)};\r\n\tpadding-bottom: ${(props) => props.theme.spacing.space4}rem;\r\n\tpadding-top: ${(props) => props.theme.spacing.space4}rem;\r\n\r\n\t${mediaQueries.phone} {\r\n\t\tpadding-top: ${grid.gutter.phone};\r\n\t\tpadding-bottom: ${grid.gutter.phone};\r\n\t}\r\n\r\n\tp {\r\n\t\tcolor: ${(props) => props.theme.palette.text.secondary};\r\n\t}\r\n\r\n\ta {\r\n\t\tcolor: ${(props) => props.theme.colors.white};\r\n\t}\r\n`;\r\n","import EpiFragments, {\r\n\tBlockType,\r\n\tgetLastItemBlockType,\r\n\tgetSpaceToAddBefore,\r\n} from 'components/Boilerplate/EpiFragments/EpiFragments';\r\nimport { Cell, Grid } from 'components/Boilerplate/Grid';\r\nimport Space from 'components/Boilerplate/Space';\r\nimport Button from 'components/Button';\r\nimport { Heading } from 'components/Typography/Typography';\r\nimport {\r\n\tgetThemeTextColor,\r\n\tLinkType,\r\n\tPuffTheme,\r\n} from 'pages/sharedModelTypes';\r\nimport React, { useContext } from 'react';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { ThemeContext } from 'styled-components';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport { FragmentListModel } from 'types/fragments';\r\nimport { FooterContactContainer } from './ContactFooter.styles';\r\nimport FooterSection from './FooterSection';\r\nimport SimpleExpander from './SimpleExpander';\r\nimport { LinkSection } from './SiteFooter';\r\n\r\nexport type CustomerServiceFooter = {\r\n\theading: string | null;\r\n\ttext: string | null;\r\n\ttextAsModel: FragmentListModel;\r\n\tlink: LinkType | null;\r\n};\r\ntype ContactFooterProps = {\r\n\tcontact: CustomerServiceFooter | undefined;\r\n\tlinkSections: LinkSection[];\r\n\titemsAria: string;\r\n\tdisableCustomHeadingLogic: boolean;\r\n};\r\n\r\n/** Main description for this component. */\r\nconst ContactFooter: React.FC<ContactFooterProps> = ({\r\n\tcontact,\r\n\tlinkSections,\r\n\titemsAria,\r\n\tdisableCustomHeadingLogic\r\n}) => {\r\n\tconst themeName: PuffTheme = PuffTheme.Black;\r\n\tconst themeContext = useContext(ThemeContext);\r\n\r\n\tconst isPhone = useMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.tablet - 1,\r\n\t});\r\n\r\n\tif (!contact) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tlet contactHeading = (\r\n\t\t<Heading\r\n\t\t\tzeroBottom={true}\r\n\t\t\tlevel={2}\r\n\t\t\tstyleLevel={5}\r\n\t\t\tcolor={getThemeTextColor(themeContext, themeName)}\r\n\t\t>\r\n\t\t\t{contact.heading}\r\n\t\t</Heading>\r\n\t);\r\n\r\n\tlet lastBlockType = BlockType.Unknown;\r\n\r\n\tif (contact.textAsModel && contact.textAsModel.fragments.length > 0) {\r\n\t\tlastBlockType = getLastItemBlockType(contact.textAsModel.fragments, themeContext, disableCustomHeadingLogic);\r\n\t}\r\n\r\n\tconst spaceBefore_button = getSpaceToAddBefore(\r\n\t\tlastBlockType,\r\n\t\tBlockType.Element,\r\n\t\tthemeContext\r\n\t);\r\n\tconst spaceAfterLast = getSpaceToAddBefore(lastBlockType, BlockType.Element, themeContext);\r\n\r\n\treturn (\r\n\t\t<FooterContactContainer themeName={themeName}>\r\n\t\t\t<Grid>\r\n\t\t\t\t<nav aria-label={itemsAria}>\r\n\t\t\t\t\t<Grid inner={true}>\r\n\t\t\t\t\t\t<Cell span={6} tablet={8} phone={4}>\r\n\t\t\t\t\t\t\t<SimpleExpander\r\n\t\t\t\t\t\t\t\tthemeName={themeName}\r\n\t\t\t\t\t\t\t\tariaLabel=\"Kontakt vägar\"\r\n\t\t\t\t\t\t\t\tid={'contactFooter'}\r\n\t\t\t\t\t\t\t\tisEnabled={isPhone}\r\n\t\t\t\t\t\t\t\tisOpen={!isPhone}\r\n\t\t\t\t\t\t\t\theading={contactHeading}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Space top={themeContext.spacing.space1} bottom={spaceAfterLast}>\r\n\t\t\t\t\t\t\t\t\t{contact.textAsModel &&\r\n\t\t\t\t\t\t\t\t\t\tcontact.textAsModel.fragments.length > 0 && (\r\n\t\t\t\t\t\t\t\t\t\t\t<EpiFragments\r\n\t\t\t\t\t\t\t\t\t\t\t\tpreviousBlockType={BlockType.Unknown}\r\n\t\t\t\t\t\t\t\t\t\t\t\tinsideGrid={true}\r\n\t\t\t\t\t\t\t\t\t\t\t\tinsideInnerGrid={true}\r\n\t\t\t\t\t\t\t\t\t\t\t\tinsideCell={true}\r\n\t\t\t\t\t\t\t\t\t\t\t\theadingLevel={2}\r\n\t\t\t\t\t\t\t\t\t\t\t\tfragments={contact.textAsModel.fragments}\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t\t{contact.link !== null && (\r\n\t\t\t\t\t\t\t\t\t\t<Space top={spaceBefore_button}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Button to={contact.link.url}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{contact.link.heading}\r\n\t\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</Space>\r\n\t\t\t\t\t\t\t</SimpleExpander>\r\n\t\t\t\t\t\t</Cell>\r\n\r\n\t\t\t\t\t\t{linkSections.map((item, index) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t<Cell key={index} span={3} tablet={4} phone={4}>\r\n\t\t\t\t\t\t\t\t\t<FooterSection\r\n\t\t\t\t\t\t\t\t\t\tthemeName={themeName}\r\n\t\t\t\t\t\t\t\t\t\tariaLabel={item.heading.heading}\r\n\t\t\t\t\t\t\t\t\t\tid={`contactfooter-${index}`}\r\n\t\t\t\t\t\t\t\t\t\tsection={item}\r\n\t\t\t\t\t\t\t\t\t></FooterSection>\r\n\t\t\t\t\t\t\t\t</Cell>\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t</Grid>\r\n\t\t\t\t</nav>\r\n\t\t\t</Grid>\r\n\t\t</FooterContactContainer>\r\n\t);\r\n};\r\n\r\nexport default ContactFooter;\r\n","/**\r\n * SiteFooter\r\n */\r\n\r\nimport React, { useEffect, useState } from 'react';\r\nimport { CustomerService, ModelFooterSection } from 'types/epi';\r\nimport { LinkType } from 'pages/sharedModelTypes';\r\nimport LinksFooter from './LinksFooter';\r\nimport ContactFooter, { CustomerServiceFooter } from './ContactFooter';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectLocalization } from 'store/modules/model';\r\nimport { translate } from 'utils/helper-utils';\r\n\r\ntype DefinedLinkType = {\r\n\ttype: string | null;\r\n\tlink: LinkType | null;\r\n};\r\n\r\nexport type LinkSection = {\r\n\theading: LinkType;\r\n\tlinks: DefinedLinkType[];\r\n};\r\n\r\ninterface Props {\r\n\tfooterGroups: ModelFooterSection[];\r\n\tcustomerService: CustomerService;\r\n\tdisableCustomHeadingLogic: boolean;\r\n}\r\n\r\nconst SiteFooter: React.FC<Props> = ({\r\n\tfooterGroups,\r\n\tcustomerService,\r\n\tdisableCustomHeadingLogic,\r\n}) => {\r\n\tconst [contact, setContact] = useState<CustomerServiceFooter>();\r\n\tconst [footerSections, setFooterSections] = useState<LinkSection[]>([]);\r\n\tconst [contactSections, setContactSections] = useState<LinkSection[]>([]);\r\n\r\n\tconst localization = useSelector(selectLocalization);\r\n\tconst ariaLabel_links = translate(\r\n\t\t'/frontend/components/footer/arialabel_links',\r\n\t\t'Links',\r\n\t\tlocalization\r\n\t);\r\n\r\n\tconst ariaLabel_Contact = translate(\r\n\t\t'/frontend/components/footer/arialabel_contact',\r\n\t\t'Contacts',\r\n\t\tlocalization\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\tfunction generateFooterGroups(): LinkSection[] {\r\n\t\t\tlet footerSections = [] as LinkSection[];\r\n\t\t\tif (footerGroups && footerGroups.length > 0) {\r\n\t\t\t\tfooterSections = footerGroups.map((item, index) => {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\theading: {\r\n\t\t\t\t\t\t\theading: item.head.heading,\r\n\t\t\t\t\t\t\turl: item.head.url,\r\n\t\t\t\t\t\t} as LinkType,\r\n\t\t\t\t\t\tlinks: item.children.map((link) => {\r\n\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\ttype: null,\r\n\t\t\t\t\t\t\t\tlink: {\r\n\t\t\t\t\t\t\t\t\theading: link.heading,\r\n\t\t\t\t\t\t\t\t\turl: link.url,\r\n\t\t\t\t\t\t\t\t} as LinkType,\r\n\t\t\t\t\t\t\t} as DefinedLinkType;\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t} as LinkSection;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\treturn footerSections;\r\n\t\t}\r\n\r\n\t\tsetFooterSections(generateFooterGroups());\r\n\t}, [footerGroups]);\r\n\r\n\tuseEffect(() => {\r\n\t\tfunction generateLinkList(): LinkSection[] {\r\n\t\t\tlet sections = [] as LinkSection[];\r\n\r\n\t\t\tif (customerService && customerService.footerLinkList) {\r\n\t\t\t\tconst newSection = {\r\n\t\t\t\t\theading: {\r\n\t\t\t\t\t\theading: customerService.footerLinkList.heading,\r\n\t\t\t\t\t\turl: '',\r\n\t\t\t\t\t} as LinkType,\r\n\t\t\t\t\tlinks: [] as DefinedLinkType[],\r\n\t\t\t\t} as LinkSection;\r\n\r\n\t\t\t\tif (customerService.footerLinkList.links) {\r\n\t\t\t\t\tnewSection.links = customerService.footerLinkList.links.map(\r\n\t\t\t\t\t\t(item) => {\r\n\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\ttype: null,\r\n\t\t\t\t\t\t\t\tlink: item,\r\n\t\t\t\t\t\t\t} as DefinedLinkType;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsections.push(newSection);\r\n\t\t\t}\r\n\t\t\tif (customerService && customerService.socialLinks) {\r\n\t\t\t\tconst newSection = {\r\n\t\t\t\t\theading: {\r\n\t\t\t\t\t\theading: customerService.socialLinks.heading,\r\n\t\t\t\t\t\turl: '',\r\n\t\t\t\t\t} as LinkType,\r\n\t\t\t\t\tlinks: [] as DefinedLinkType[],\r\n\t\t\t\t} as LinkSection;\r\n\r\n\t\t\t\tif (customerService.socialLinks.links) {\r\n\t\t\t\t\tnewSection.links = customerService.socialLinks.links.map((item) => {\r\n\t\t\t\t\t\treturn item;\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsections.push(newSection);\r\n\t\t\t}\r\n\r\n\t\t\treturn sections;\r\n\t\t}\r\n\r\n\t\tsetContactSections(generateLinkList());\r\n\r\n\t\tif (customerService) {\r\n\t\t\tconst customerServiceFixed = {\r\n\t\t\t\theading: customerService.heading,\r\n\t\t\t\ttextAsModel: customerService.textAsModel,\r\n\t\t\t\ttext: customerService.text,\r\n\t\t\t\tlink: customerService.customerServiceLink,\r\n\t\t\t} as CustomerServiceFooter;\r\n\t\t\tsetContact(customerServiceFixed);\r\n\t\t} else {\r\n\t\t\tsetContact(undefined);\r\n\t\t}\r\n\t}, [customerService]);\r\n\r\n\treturn (\r\n\t\t<footer>\r\n\t\t\t{footerSections.length > 0 && (\r\n\t\t\t\t<LinksFooter\r\n\t\t\t\t\titemsAria={ariaLabel_links}\r\n\t\t\t\t\tsections={footerSections}\r\n\t\t\t\t></LinksFooter>\r\n\t\t\t)}\r\n\t\t\t{contact && (\r\n\t\t\t\t<ContactFooter\r\n\t\t\t\t\tcontact={contact}\r\n\t\t\t\t\titemsAria={ariaLabel_Contact}\r\n\t\t\t\t\tlinkSections={contactSections}\r\n\t\t\t\t\tdisableCustomHeadingLogic={disableCustomHeadingLogic}\r\n\t\t\t\t></ContactFooter>\r\n\t\t\t)}\r\n\t\t</footer>\r\n\t);\r\n};\r\n\r\nexport default SiteFooter;\r\n","import { useEffect, useRef, useState } from 'react';\r\nimport { AppProps, getLocation, routePatterns } from 'App';\r\nimport { GlobalStyle } from 'theme/global';\r\nimport Breadcrumbs, {\r\n\tBreadcrumbItemtype,\r\n} from 'components/Breadcrumbs/Breadcrumbs';\r\nimport MegaMenu from 'components/MegaMenu';\r\nimport MenuMobile from 'components/MenuMobile';\r\nimport { ThemeProvider } from 'styled-components';\r\nimport { ThemeDesktop, ThemeMobile } from 'theme/theme';\r\nimport EnvironmentToaster from 'components/EnvironmentToaster';\r\nimport CookieBar from 'components/CookieBar';\r\nimport GlobalMessage from 'components/GlobalMessage/GlobalMessage';\r\nimport SiteHeader from 'components/SiteHeader';\r\nimport { BreadcrumbsContainer } from 'components/SiteHeader/SiteHeader.styles';\r\nimport { Grid } from 'components/Boilerplate/Grid';\r\nimport { Route, Switch } from 'react-router-dom';\r\nimport { RouteHandler } from 'routeHandler';\r\nimport SiteFooter from 'components/SiteFooter';\r\nimport Meta from 'components/Boilerplate/Meta';\r\n\r\nconst NVseApp = ({\r\n\tisNarrowDisplay,\r\n\tRouter,\r\n\ttracer,\r\n\tcookieBar,\r\n\tglobalMessages,\r\n\tbreadcrumbs,\r\n\tnavigation,\r\n\tquickLinks,\r\n\tskipToContent,\r\n\tlang,\r\n\tfooter,\r\n\tpageContent,\r\n\tlogo,\r\n}: AppProps) => {\r\n\tconst location = getLocation(pageContent);\r\n\tconst menuButtonRef = useRef<any>(null);\r\n\r\n\tconst [menuComponent, setMenuComponent] = useState<any>();\r\n\tconst [fixedBreadcrumbs, setFixedBreadcrumbs] = useState<\r\n\t\tBreadcrumbItemtype[]\r\n\t>([]);\r\n\r\n\tconst [isMenuOpen, setIsMenuOpen] = useState(false);\r\n\tconst [isSearchOpen, setIsSearchOpen] = useState(false);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst fixed = breadcrumbs\r\n\t\t\t? breadcrumbs.filter((item) => {\r\n\t\t\t\t\treturn item.url;\r\n\t\t\t })\r\n\t\t\t: [];\r\n\r\n\t\tsetFixedBreadcrumbs(fixed);\r\n\t}, [breadcrumbs]);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst onCloseMenuEvent = (focusOrigin: boolean) => {\r\n\t\t\tif (focusOrigin) {\r\n\t\t\t\tif (menuButtonRef && menuButtonRef.current) {\r\n\t\t\t\t\tmenuButtonRef.current.focus();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tsetIsMenuOpen(false);\r\n\t\t};\r\n\r\n\t\tconst menuRoot = navigation?.items ? navigation?.items : [];\r\n\r\n\t\tlet menuComponent2 = (\r\n\t\t\t<MegaMenu items={menuRoot} onClose={onCloseMenuEvent} />\r\n\t\t);\r\n\r\n\t\tif (isNarrowDisplay && menuRoot) {\r\n\t\t\tmenuComponent2 = (\r\n\t\t\t\t<MenuMobile onClose={onCloseMenuEvent} items={menuRoot} />\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tsetMenuComponent(menuComponent2);\r\n\t}, [navigation?.items, isNarrowDisplay]);\r\n\r\n\tconst onOpenMenu = (isOpen: boolean) => {\r\n\t\tsetIsMenuOpen(isOpen);\r\n\t};\r\n\r\n\tconst onOpenSearchMenu = (isOpen: boolean) => {\r\n\t\tsetIsSearchOpen(isOpen);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{isNarrowDisplay !== undefined && (\r\n\t\t\t\t<ThemeProvider theme={isNarrowDisplay ? ThemeMobile : ThemeDesktop}>\r\n\t\t\t\t\t<Router location={location} context={{}}>\r\n\t\t\t\t\t\t<a className=\"skip-to-content-link\" href=\"#main\">\r\n\t\t\t\t\t\t\t{skipToContent ?? 'GÃ¥ till innehÃ¥ll'}\r\n\t\t\t\t\t\t</a>\r\n\r\n\t\t\t\t\t\t{tracer && tracer.environment && tracer.environment !== 'PROD' && (\r\n\t\t\t\t\t\t\t<EnvironmentToaster\r\n\t\t\t\t\t\t\t\tenv={tracer?.environment}\r\n\t\t\t\t\t\t\t\tbuildDate={tracer.buildDate}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{cookieBar && (\r\n\t\t\t\t\t\t\t<CookieBar\r\n\t\t\t\t\t\t\t\ttext={cookieBar.text}\r\n\t\t\t\t\t\t\t\tbuttonText={cookieBar.buttonText}\r\n\t\t\t\t\t\t\t\treadMoreText={cookieBar.readMoreText}\r\n\t\t\t\t\t\t\t\treadMoreUrl={cookieBar.readMoreUrl}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{globalMessages &&\r\n\t\t\t\t\t\t\tglobalMessages.messages.map((message, index) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<GlobalMessage\r\n\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\tindex={index}\r\n\t\t\t\t\t\t\t\t\t\theading={message.heading}\r\n\t\t\t\t\t\t\t\t\t\tlink={message.link}\r\n\t\t\t\t\t\t\t\t\t\ttext={message.text}\r\n\t\t\t\t\t\t\t\t\t\tshowMoreText={globalMessages.showMoreText}\r\n\t\t\t\t\t\t\t\t\t\tshowLessText={globalMessages.showLessText}\r\n\t\t\t\t\t\t\t\t\t\tlinkText={globalMessages.linkText}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})}\r\n\r\n\t\t\t\t\t\t<SiteHeader\r\n\t\t\t\t\t\t\tref={menuButtonRef}\r\n\t\t\t\t\t\t\thome={navigation?.home}\r\n\t\t\t\t\t\t\tquickLinks={quickLinks}\r\n\t\t\t\t\t\t\tlang={lang}\r\n\t\t\t\t\t\t\tisPopupMenuOpen={false}\r\n\t\t\t\t\t\t\tonOpenSearchMenu={onOpenSearchMenu}\r\n\t\t\t\t\t\t\tonOpenMenu={onOpenMenu}\r\n\t\t\t\t\t\t\tisSearchOpen={isSearchOpen}\r\n\t\t\t\t\t\t\tisMenuOpen={isMenuOpen}\r\n\t\t\t\t\t\t\tlogo={logo}\r\n\t\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t\t{pageContent?.modelType !== 'NVseStartPage' &&\r\n\t\t\t\t\t\t\tfixedBreadcrumbs.length > 0 && (\r\n\t\t\t\t\t\t\t\t<BreadcrumbsContainer>\r\n\t\t\t\t\t\t\t\t\t<Grid paddingTop={false} paddingBottom={false}>\r\n\t\t\t\t\t\t\t\t\t\t<Breadcrumbs items={fixedBreadcrumbs} />\r\n\t\t\t\t\t\t\t\t\t</Grid>\r\n\t\t\t\t\t\t\t\t</BreadcrumbsContainer>\r\n\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t<Switch>\r\n\t\t\t\t\t\t\t{routePatterns.map((routePattern) => (\r\n\t\t\t\t\t\t\t\t<Route key={routePattern} path={routePattern}>\r\n\t\t\t\t\t\t\t\t\t<RouteHandler />\r\n\t\t\t\t\t\t\t\t</Route>\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t</Switch>\r\n\t\t\t\t\t\t{footer && (\r\n\t\t\t\t\t\t\t<SiteFooter\r\n\t\t\t\t\t\t\t\tfooterGroups={footer.footerGroups}\r\n\t\t\t\t\t\t\t\tcustomerService={footer.customerService}\r\n\t\t\t\t\t\t\t\tdisableCustomHeadingLogic={\r\n\t\t\t\t\t\t\t\t\tpageContent?.disableCustomHeadingLogic ?? false\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{isMenuOpen && menuComponent}\r\n\r\n\t\t\t\t\t\t<GlobalStyle isOpen={isMenuOpen || isSearchOpen ? true : false} />\r\n\t\t\t\t\t</Router>\r\n\t\t\t\t</ThemeProvider>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default NVseApp;\r\n","import { useEffect } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { updateEpi } from 'store/modules/epi';\r\nimport { fetchPageWithContentLink } from 'store/modules/model';\r\nimport { ContentSavedEvent } from 'types/epi';\r\n\r\nexport const useEpiContextAndSavedEvent = () => {\r\n\tconst dispatch = useDispatch();\r\n\r\n\tconst handleContentSaved = () => {\r\n\t\tif (window.epi.isEditable) {\r\n\t\t\twindow.epi.subscribe('contentSaved', (event: ContentSavedEvent) => {\r\n\t\t\t\tdispatch(fetchPageWithContentLink(event.contentLink));\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tconst setContextAndEvent = () => {\r\n\t\tdispatch(\r\n\t\t\tupdateEpi({\r\n\t\t\t\tisEditable: window.epi.isEditable,\r\n\t\t\t\tinEditMode: window.epi.inEditMode,\r\n\t\t\t\tinPreviewMode: window.epi.inEditMode && !window.epi.isEditable,\r\n\t\t\t\tready: window.epi.ready,\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\thandleContentSaved();\r\n\t};\r\n\r\n\tconst handleSetContextAndEvent = () => {\r\n\t\t//epi object won't be available outside of Epi\r\n\t\tif (!window.epi) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (window.epi.ready === true) {\r\n\t\t\t// `epiReady` already fired.\r\n\t\t\tsetContextAndEvent();\r\n\r\n\t\t\t// The subscribe method won't be available outside of Epi.\r\n\t\t} else if (window.epi.subscribe) {\r\n\t\t\t// Subscribe if the `epiReady` event hasn't happened yet.\r\n\t\t\twindow.epi.subscribe('epiReady', () => setContextAndEvent());\r\n\t\t}\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tif (typeof window !== 'undefined') {\r\n\t\t\twindow.addEventListener('load', handleSetContextAndEvent);\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\tif (typeof window !== 'undefined') {\r\n\t\t\t\twindow.removeEventListener('load', handleSetContextAndEvent);\r\n\t\t\t}\r\n\t\t};\r\n\t}, []);\r\n};\r\n","/**\r\n * Meta\r\n */\r\n\r\nimport React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectLocalization, selectMetaData } from 'store/modules/model';\r\n\r\nimport { Helmet } from 'react-helmet';\r\nimport { FavIcon } from 'types/epi';\r\n\r\ninterface Props {\r\n\t/** Title for the page */\r\n\ttitle?: string;\r\n\r\n\t/** favIcons for the NaturvÃ¥rdsverktet page or Microsite */\r\n\tfavIcons?: FavIcon[];\r\n\r\n\t/** Meta description */\r\n\tdescription?: string;\r\n\r\n\t/** Meta keywords */\r\n\tkeywords?: string;\r\n\r\n\t/** Twitter card\r\n\t *\r\n\t * _The card type, which will be one of “summaryâ€, “summary_large_imageâ€, “appâ€, or “playerâ€._\r\n\t */\r\n\ttwitterCard?: string;\r\n\r\n\t/** Twitter card title\r\n\t *\r\n\t * _A concise title for the related content._\r\n\t */\r\n\ttwitterTitle?: string;\r\n\r\n\t/** Twitter card description\r\n\t *\r\n\t * _A description that concisely summarizes the content as appropriate for presentation within a Tweet. You should not re-use the title as the description or use this field to describe the general services provided by the website._\r\n\t */\r\n\ttwitterDescription?: string;\r\n\r\n\t/** Twitter card image\r\n\t *\r\n\t * _A URL to a unique image representing the content of the page. You should not use a generic image such as your website logo, author photo, or other image that spans multiple pages. Images for this Card support an aspect ratio of 2:1 with minimum dimensions of 300x157 or maximum of 4096x4096 pixels. Images must be less than 5MB in size. JPG, PNG, WEBP and GIF formats are supported. Only the first frame of an animated GIF will be used. SVG is not supported._\r\n\t *\r\n\t * Read more: [Formats for open graph images](https://whatabout.dev/formats-for-open-graph-images)\r\n\t */\r\n\ttwitterImage?: string;\r\n\r\n\t/** Open graph site name\r\n\t *\r\n\t * _A one to two sentence description of your object._\r\n\t */\r\n\togSiteName?: string;\r\n\r\n\t/** Open graph type\r\n\t *\r\n\t * _The [type](https://ogp.me/#types) of your object, e.g., \"video.movie\". Depending on the type you specify, other properties may also be required._\r\n\t */\r\n\togType?: string;\r\n\r\n\t/** Open graph title\r\n\t *\r\n\t * _The title of your object as it should appear within the graph, e.g., \"The Rock\"._\r\n\t */\r\n\togTitle?: string;\r\n\r\n\t/** Open graph url\r\n\t *\r\n\t * _The canonical URL of your object that will be used as its permanent ID in the graph, e.g., \"http://www.imdb.com/title/tt0117500/\"._\r\n\t */\r\n\togUrl?: string;\r\n\r\n\t/** Open graph description\r\n\t *\r\n\t * _A one to two sentence description of your object._\r\n\t */\r\n\togDescription?: string;\r\n\r\n\tcanonicalUrl?: string;\r\n}\r\n\r\n/**\r\n * Component that handles meta data for the <head>.\r\n *\r\n * - https://developer.twitter.com/en/docs/tweets/optimize-with-cards/overview/markup\r\n * - https://developer.twitter.com/en/docs/tweets/optimize-with-cards/guides/getting-started\r\n */\r\nconst Meta: React.FC<Props> = ({ keywords }) => {\r\n\tconst metaData = useSelector(selectMetaData);\r\n\tconst localizationData = useSelector(selectLocalization);\r\n\r\n\tconst mappedMetaData = {\r\n\t\ttitle: metaData?.title || undefined,\r\n\t\tfavIcons: metaData?.favIcons || null,\r\n\t\tdescription: metaData?.description || undefined,\r\n\t\tgoogleSiteVerificationTag: metaData?.googleSiteVerificationTag || undefined,\r\n\t\togSiteName: metaData?.openGraph?.siteName || undefined,\r\n\t\togType: metaData?.openGraph?.type || 'website',\r\n\t\togTitle: metaData?.openGraph?.title || undefined,\r\n\t\togUrl: metaData?.openGraph?.url || undefined,\r\n\t\togDescription: metaData?.openGraph?.description || undefined,\r\n\t\ttwitterCard: metaData?.twitter?.card || 'summary',\r\n\t\ttwitterTitle: metaData?.twitter?.title || undefined,\r\n\t\ttwitterDescription: metaData?.twitter?.description || undefined,\r\n\t\ttwitterImage: metaData?.twitter?.image || undefined,\r\n\t\texcludeFromIndex: metaData?.excludeFromIndex || undefined,\r\n\t\tcanonicalUrl: metaData?.canonicalUrl || undefined,\r\n\t};\r\n\tconst {\r\n\t\ttitle,\r\n\t\tfavIcons,\r\n\t\tdescription,\r\n\t\tgoogleSiteVerificationTag,\r\n\t\togSiteName,\r\n\t\togType,\r\n\t\togTitle,\r\n\t\togUrl,\r\n\t\togDescription = description,\r\n\t\ttwitterCard,\r\n\t\ttwitterTitle,\r\n\t\ttwitterImage,\r\n\t\ttwitterDescription = description,\r\n\t\texcludeFromIndex,\r\n\t\tcanonicalUrl,\r\n\t} = mappedMetaData;\r\n\r\n\tconst renderFavIcon = (favIcons: FavIcon[]) => {\r\n\t\treturn favIcons.map((icon: FavIcon, index: number) => {\r\n\t\t\treturn (\r\n\t\t\t\t<link\r\n\t\t\t\t\tkey={icon.src}\r\n\t\t\t\t\trel={icon.rel}\r\n\t\t\t\t\thref={icon.src}\r\n\t\t\t\t\ttype={icon.type}\r\n\t\t\t\t\tsizes={icon.sizes}\r\n\t\t\t\t/>\r\n\t\t\t);\r\n\t\t});\r\n\t};\r\n\r\n\t// prettier-ignore\r\n\treturn (\r\n\t\t<Helmet>\r\n\t\t\t{localizationData && <html lang={localizationData?.culture} />}\r\n\r\n\t\t\t{excludeFromIndex && excludeFromIndex === true && <meta name=\"robots\" content=\"noindex,nofollow\" />}\r\n\r\n\t\t\t{title && <title>{title}</title>}\r\n\t\t\t{canonicalUrl && <link rel=\"canonical\" href={canonicalUrl} />}\r\n\t\t\t{description && <meta name=\"description\" content={description} />}\r\n\t\t\t{keywords && <meta name=\"keywords\" content={keywords} />}\r\n\t\t\t{googleSiteVerificationTag && <meta name=\"google-site-verification\" content={googleSiteVerificationTag} />}\r\n\t\t\t{ogSiteName && <meta property=\"og:site_name\" content={ogSiteName} />}\r\n\t\t\t{ogType && <meta property=\"og:type\" content={ogType} />}\r\n\t\t\t{(ogTitle || title) && <meta property=\"og:title\" content={ogTitle || title} />}\r\n\t\t\t{ogUrl && <meta property=\"og:url\" content={ogUrl} />}\r\n\t\t\t{(ogDescription) && <meta property=\"og:description\" content={ogDescription} />}\r\n\t\t\t{twitterCard && <meta name=\"twitter:card\" content={twitterCard} />}\r\n\t\t\t{twitterCard && twitterTitle && <meta name=\"twitter:title\" content={twitterTitle} />}\r\n\t\t\t{twitterCard && (twitterDescription) && <meta name=\"twitter:description\" content={twitterDescription} />}\r\n\t\t\t{twitterCard && twitterImage && <meta name=\"twitter:image\" content={twitterImage} />}\r\n\t\t\t\r\n\r\n\t\t\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\" />\r\n\t\t\t<link rel=\"stylesheet\" href=\"https://use.typekit.net/oyr5sbc.css\" />\r\n\t\t\t\r\n\t\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\r\n\r\n\t\t\t{metaData?.sdg && metaData.sdg.includeSDGMetaTags && metaData.sdg.sdgMetaDataTags &&\r\n\t\t\t\tObject.keys(metaData.sdg.sdgMetaDataTags).map((item, index) => {\r\n\t\t\t\t\tif (metaData && metaData.sdg) {\r\n\t\t\t\t\t\tconst value = metaData.sdg.sdgMetaDataTags[item]\r\n\t\t\t\t\t\treturn <meta key={index} name={item} content={value} />\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t})\r\n\t\t\t}\t\r\n\r\n\t\t\t{favIcons && renderFavIcon(favIcons)}\r\n\t\t</Helmet>\r\n\t);\r\n};\r\n\r\nexport default Meta;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport {\r\n\tselectBreadcrumbs,\r\n\tselectContent,\r\n\tselectCookieBar,\r\n\tselectFooter,\r\n\tselectNavigation,\r\n\tselectQuickLinks,\r\n\tselectTracer,\r\n\tselectLang,\r\n\tselectGlobalMessages,\r\n\tselectLogo,\r\n\tgetSkipToContent,\r\n\tselectAppLayout,\r\n} from 'store/modules/model';\r\nimport { ContentTypes } from 'types/pages';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { breakpointsNumber } from 'theme/media-queries';\r\nimport {\r\n\tLang,\r\n\tModelBreadcrumb,\r\n\tModelCookieBar,\r\n\tModelFooter,\r\n\tModelGlobalMessages,\r\n\tModelNavigation,\r\n\tModelQuickLinksItem,\r\n\tModelTracer,\r\n\tLogoModel,\r\n} from 'types/epi';\r\nimport MicrositeApp from 'MicrositeApp';\r\nimport NVseApp from 'NVseApp';\r\nimport { LoaderStatic } from 'components/Boilerplate/Loader';\r\nimport { useEpiContextAndSavedEvent } from 'hooks/useEpiContextAndSavedEvent';\r\nimport Meta from 'components/Boilerplate/Meta/Meta';\r\n\r\ninterface PropsInterface {\r\n\tRouter: any;\r\n}\r\n\r\nexport interface AppProps {\r\n\tRouter: any;\r\n\tisNarrowDisplay: boolean;\r\n\ttracer: ModelTracer | undefined;\r\n\tcookieBar: ModelCookieBar | undefined;\r\n\tglobalMessages: ModelGlobalMessages | undefined;\r\n\tbreadcrumbs: ModelBreadcrumb[] | undefined;\r\n\tnavigation: ModelNavigation | undefined;\r\n\tquickLinks: ModelQuickLinksItem[] | undefined;\r\n\tskipToContent?: string;\r\n\tlang: Lang | undefined;\r\n\tfooter: ModelFooter | undefined;\r\n\tpageContent: ContentTypes | undefined;\r\n\tlogo?: LogoModel | undefined;\r\n}\r\n\r\nexport const routePatterns = ['/:siteRoute*'];\r\n\r\nexport const getLocation = (pageContent: ContentTypes | undefined) => {\r\n\tlet location = '';\r\n\r\n\tif (pageContent?.url) {\r\n\t\tlocation = pageContent.url;\r\n\t} else if (typeof window !== 'undefined') {\r\n\t\tlocation = window.location.pathname;\r\n\t}\r\n\r\n\treturn location;\r\n};\r\n\r\nconst App: React.FC<PropsInterface> = ({ Router }) => {\r\n\tconst pageContent = useSelector(selectContent);\r\n\tconst tracer = useSelector(selectTracer);\r\n\tconst globalMessages = useSelector(selectGlobalMessages);\r\n\tconst cookieBar = useSelector(selectCookieBar);\r\n\tconst navigation = useSelector(selectNavigation);\r\n\tconst quickLinks = useSelector(selectQuickLinks);\r\n\tconst skipToContent = useSelector(getSkipToContent);\r\n\tconst breadcrumbs = useSelector(selectBreadcrumbs);\r\n\tconst lang = useSelector(selectLang);\r\n\tconst footer = useSelector(selectFooter);\r\n\tconst logo = useSelector(selectLogo);\r\n\tconst appTypeLayout = useSelector(selectAppLayout);\r\n\r\n\tconst useClientSideMediaQuery = (query: any) => {\r\n\t\tconst [isClient, setIsClient] = useState(false);\r\n\t\tconst isNarrowDisplay = useMediaQuery(query);\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tsetIsClient(true);\r\n\t\t}, []);\r\n\r\n\t\treturn isClient ? isNarrowDisplay : false;\r\n\t};\r\n\r\n\tconst isNarrowDisplay = useClientSideMediaQuery({\r\n\t\tminWidth: breakpointsNumber.phone,\r\n\t\tmaxWidth: breakpointsNumber.desktop - 1,\r\n\t});\r\n\r\n\tuseEpiContextAndSavedEvent();\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Meta />\r\n\r\n\t\t\t{appTypeLayout === undefined && <LoaderStatic />}\r\n\t\t\t{appTypeLayout?.name === 'nvv' ? (\r\n\t\t\t\t<NVseApp\r\n\t\t\t\t\tisNarrowDisplay={isNarrowDisplay}\r\n\t\t\t\t\tRouter={Router}\r\n\t\t\t\t\ttracer={tracer}\r\n\t\t\t\t\tcookieBar={cookieBar}\r\n\t\t\t\t\tglobalMessages={globalMessages}\r\n\t\t\t\t\tbreadcrumbs={breadcrumbs}\r\n\t\t\t\t\tnavigation={navigation}\r\n\t\t\t\t\tquickLinks={quickLinks}\r\n\t\t\t\t\tskipToContent={skipToContent}\r\n\t\t\t\t\tlang={lang}\r\n\t\t\t\t\tfooter={footer}\r\n\t\t\t\t\tpageContent={pageContent}\r\n\t\t\t\t\tlogo={logo}\r\n\t\t\t\t/>\r\n\t\t\t) : (\r\n\t\t\t\t<MicrositeApp\r\n\t\t\t\t\tisNarrowDisplay={isNarrowDisplay}\r\n\t\t\t\t\tRouter={Router}\r\n\t\t\t\t\ttracer={tracer}\r\n\t\t\t\t\tcookieBar={cookieBar}\r\n\t\t\t\t\tglobalMessages={globalMessages}\r\n\t\t\t\t\tbreadcrumbs={breadcrumbs}\r\n\t\t\t\t\tnavigation={navigation}\r\n\t\t\t\t\tquickLinks={quickLinks}\r\n\t\t\t\t\tskipToContent={skipToContent}\r\n\t\t\t\t\tlang={lang}\r\n\t\t\t\t\tfooter={footer}\r\n\t\t\t\t\tpageContent={pageContent}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default App;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport initStore from 'store';\r\nimport { initialState as reactInitialState } from 'store/modules/react';\r\nimport Application from './App';\r\nimport { Model, RenderingStates } from 'types/epi';\r\nimport { unsetNavigationLinksIsActive } from 'store/modules/model';\r\n\r\n// Set default rendermethod and a basic model.\r\n// eslint-disable-next-line\r\nlet renderMethod = ReactDOM.render;\r\nlet model = {\r\n\thead: {},\r\n\tepi: {},\r\n\treact: reactInitialState, // ModelReact\r\n} as Model;\r\n\r\n// Replace our basic model if one exitst on the window-object,\r\n// then we also change rendermethod to hydrate.\r\nif (window.__model) {\r\n\trenderMethod = ReactDOM.hydrate;\r\n\tmodel = window.__model as Model;\r\n\tif (model.react) {\r\n\t\tmodel.react.renderingState = RenderingStates.Hydrate;\r\n\t}\r\n\r\n\tif (model.navigation && model.navigation.items) {\r\n\t\tunsetNavigationLinksIsActive(model.navigation.items);\r\n\t}\r\n}\r\n\r\nlet react = model.react;\r\ndelete model.react;\r\n\r\nconst preloadedState = {\r\n\treact,\r\n\tepi: model.epi,\r\n\tmodel: { model, sessionStorage: [] },\r\n};\r\n\r\n// Render the application to the DOM\r\nif (react) {\r\n\tconst element = document.getElementById(react.containerId);\r\n\tif (element) {\r\n\t\trenderMethod(\r\n\t\t\t<Provider store={initStore(preloadedState)}>\r\n\t\t\t\t<Application Router={BrowserRouter} />\r\n\t\t\t</Provider>,\r\n\t\t\telement\r\n\t\t);\r\n\t}\r\n}\r\n","import { LinkExtendedType, LinkType, PuffTheme } from 'pages/sharedModelTypes';\r\nimport { ContentTypes } from 'types/pages';\r\nimport { FragmentListModel, ImageFragmentModel } from './fragments';\r\nimport { SearchListingModel } from 'components/SearchByListngPage/SearchByListngPage.model';\r\n\r\ndeclare global {\r\n\tinterface Window {\r\n\t\t__model: any;\r\n\t\tepi: any;\r\n\t}\r\n\t// eslint-disable-next-line @typescript-eslint/no-namespace\r\n\tnamespace NodeJS {\r\n\t\tinterface Global {\r\n\t\t\twindow: any;\r\n\t\t\tdocument: any;\r\n\t\t\tStyled: any;\r\n\t\t\tReact: any;\r\n\t\t\tReactDOM: any;\r\n\t\t\tReactDOMServer: any;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport interface EpiEvent {\r\n\tisEditable: false;\r\n\tinEditMode: false;\r\n\tinPreviewMode: false;\r\n\tready: false;\r\n}\r\n\r\nexport interface Model {\r\n\thead?: ModelHead;\r\n\tmetadata?: ModelMetadata;\r\n\tcontent?: ContentTypes;\r\n\tnavigation?: ModelNavigation;\r\n\tlang?: Lang;\r\n\tquickLinks?: ModelQuickLinks;\r\n\tbreadcrumbs?: ModelBreadcrumbs;\r\n\tsearch?: ModelSearch;\r\n\tlocalization?: ModelLocalization;\r\n\tcookieBar?: ModelCookieBar;\r\n\ttracer?: ModelTracer;\r\n\tfooter?: ModelFooter;\r\n\treact: ModelReact | undefined | null;\r\n\thtml?: any;\r\n\tepi?: any;\r\n\tglobalMessages?: ModelGlobalMessages;\r\n\tmicrosite?: ModelMicrosite;\r\n\tlogo?: LogoModel;\r\n\tappTypeLayout?: AppTypeLayout;\r\n}\r\n\r\nexport interface LogoModel extends ImageFragmentModel {}\r\n\r\nexport interface ContentLinkResponse {\r\n\tstatus: number;\r\n\tresult: ContentTypes;\r\n}\r\nexport interface ContentSavedEvent {\r\n\tcontentLink: string;\r\n\tproperties: ContentSavedProperty[];\r\n}\r\n\r\nexport interface ContentSavedProperty {\r\n\tname: string;\r\n\tsuccessful: boolean;\r\n\tvalidationErrors: any;\r\n\tvalue: string;\r\n}\r\n\r\nexport interface SessionStorageModel {\r\n\tmodelType: string;\r\n\tid: string;\r\n\tdata: any;\r\n}\r\n\r\nexport interface SearchResultModel {\r\n\tquery: string;\r\n\tpage: number;\r\n\tsize: number;\r\n\ttotalPages: number;\r\n\tnumberOfHits: number;\r\n\tresults: any[];\r\n}\r\n\r\nexport interface SearchListingResultModel {\r\n\tsearchModel: SearchListingModel;\r\n\tnumberOfSearchResults: string;\r\n}\r\n\r\nexport interface ModelListingPage {\r\n\tmodelType: string;\r\n\tpreamble: string;\r\n\tsearchPlaceholder: string | null;\r\n\tdisplayedResultsText: string;\r\n\tthemeTop: PuffTheme | null;\r\n\tfilterLabel: string;\r\n\tsearchActionText: string;\r\n\tloadMoreSearchResults: string;\r\n\tsearchTopic: string;\r\n\tsearchResultLabel: string;\r\n\tsearchResultLabelNoMatchesHint: string;\r\n\tsearchResultLabelNoMatches: string;\r\n\tsearchModel: SearchListingModel;\r\n\tclearAllFiltersText: string;\r\n\tshowFiltersText: string;\r\n\tnumberOfSearchResults: string;\r\n\tapiEndpointSearch: string;\r\n\tapiEndpointAutoComplete: string;\r\n\tresetSearchInput: string;\r\n\tpublicationLink: LinkExtendedType | null;\r\n}\r\n\r\nexport interface ModelMicrosite {\r\n\ttheme: ModelMicrositeStyles;\r\n\theaderLogo: {\r\n\t\tdesktop: ImageFragmentModel;\r\n\t\tmobile: ImageFragmentModel;\r\n\t};\r\n\tfooterLogo: {\r\n\t\tdesktop: ImageFragmentModel;\r\n\t\tmobile: ImageFragmentModel;\r\n\t};\r\n}\r\n\r\nexport interface ModelMicrositeStyles {\r\n\tcolors: {\r\n\t\tprimaryColor: string;\r\n\t\tsecondaryColor: string;\r\n\t\ttertiaryColor: string;\r\n\t\tquaternaryColor: string;\r\n\t};\r\n\ttextPalette: {\r\n\t\tprimary: string;\r\n\t\tsecondary: string;\r\n\t};\r\n\ttypographyType: {\r\n\t\tprimaryFontFamily: string;\r\n\t\tsecondaryFontFamily: string;\r\n\t};\r\n}\r\nexport interface ModelBreadcrumbs {\r\n\tbreadcrumbs: ModelBreadcrumb[];\r\n}\r\n\r\nexport interface ModelLocalization {\r\n\tculture: string;\r\n\ttranslations: any;\r\n}\r\n\r\nexport interface ModelCookieBar {\r\n\theading: string;\r\n\ttext: any;\r\n\tbuttonText: string;\r\n\treadMoreText: string;\r\n\treadMoreUrl: string;\r\n}\r\nexport interface DefinedLinkType {\r\n\ttype: string;\r\n\tlink: LinkType;\r\n\ticon?: ImageFragmentModel;\r\n}\r\n\r\nexport interface CustomerService {\r\n\theading: string;\r\n\ttext: string;\r\n\ttextAsModel: FragmentListModel;\r\n\tcustomerServiceLink: LinkType;\r\n\tcontactInformation?: MicrositeInfo[];\r\n\tfooterLinkList: FooterLinkList;\r\n\tsocialLinks: SocialLinks;\r\n}\r\nexport interface MicrositeInfo {\r\n\tkey: string;\r\n\tvalue: string;\r\n}\r\nexport interface FooterLinkList {\r\n\theading: string;\r\n\tlinks: LinkType[];\r\n}\r\nexport interface SocialLinks {\r\n\theading: string;\r\n\tlinks: DefinedLinkType[];\r\n}\r\nexport interface ModelFooter {\r\n\tfooterGroups: ModelFooterSection[];\r\n\tcustomerService: CustomerService;\r\n}\r\n\r\nexport interface ModelTracer {\r\n\tserverUrl: string | null;\r\n\tserviceName: string | null;\r\n\tenvironment: string | null;\r\n\tenabled: boolean;\r\n\tlogLevel: string | null;\r\n\ttraceId: EnvironmentId | null;\r\n\tbuildDate: string | null | undefined;\r\n\tparentId: string | null;\r\n\tsample: boolean;\r\n}\r\n\r\nexport enum EnvironmentId {\r\n\tDEV = 'DEV',\r\n\tSMOKE = 'SMOKE',\r\n\tINT = 'INT',\r\n\tPREP = 'PREP',\r\n\tPROD = 'PROD',\r\n}\r\n\r\nexport interface FavIcon {\r\n\tsrc: string;\r\n\tsizes: string;\r\n\ttype: string;\r\n\trel: string;\r\n}\r\n\r\ninterface ModelMetadata {\r\n\ttitle?: string | null;\r\n\tfavIcons?: FavIcon[];\r\n\tkeywords?: string | null;\r\n\tdescription?: string | null;\r\n\tgoogleSiteVerificationTag?: string | null;\r\n\ttwitter?: {\r\n\t\tcard?: string | null;\r\n\t\ttitle?: string | null;\r\n\t\tdescription?: string | null;\r\n\t\timage?: string | null;\r\n\t};\r\n\topenGraph?: {\r\n\t\ttitle?: string | null;\r\n\t\tsiteName?: string | null;\r\n\t\ttype?: string | null;\r\n\t\turl?: string | null;\r\n\t\tdescription?: string | null;\r\n\t\timage?: string | null;\r\n\t};\r\n\tsdg?: {\r\n\t\tincludeSDGMetaTags: boolean;\r\n\t\tsdgMetaDataTags: any;\r\n\t};\r\n\texcludeFromIndex: boolean;\r\n\tcanonicalUrl?: string;\r\n}\r\n\r\nexport interface NavigationItem {\r\n\turl: string;\r\n\ttext: string;\r\n\tisActive: boolean;\r\n\tstyle?: number;\r\n\tisRedirect: boolean;\r\n\tchildren: NavigationItem[];\r\n}\r\nexport interface ModelNavigation {\r\n\thome: NavigationItem;\r\n\titems: NavigationItem[];\r\n}\r\n\r\nexport interface ModelQuickLinksItem {\r\n\theading: string;\r\n\turl: string;\r\n\ttype: string;\r\n}\r\n\r\ninterface ModelQuickLinks {\r\n\tskipToContent?: string;\r\n\tquickLinks: ModelQuickLinksItem[];\r\n}\r\n\r\nexport interface ModelBreadcrumb {\r\n\turl: string;\r\n\ttext: string;\r\n\tisActive: boolean;\r\n}\r\n\r\ninterface FooterSectionHead {\r\n\theading: string;\r\n\turl: string;\r\n}\r\n\r\nexport interface FooterSectionChildrenItem {\r\n\theading: string;\r\n\turl: string;\r\n}\r\n\r\nexport interface ModelFooterSection {\r\n\thead: FooterSectionHead;\r\n\tchildren: FooterSectionChildrenItem[];\r\n}\r\n\r\ninterface ModelMetadata {\r\n\ttitle?: string | null;\r\n\tkeywords?: string | null;\r\n\tdescription?: string | null;\r\n\ttwitter?: {\r\n\t\tcard?: string | null;\r\n\t\ttitle?: string | null;\r\n\t\tdescription?: string | null;\r\n\t\timage?: string | null;\r\n\t};\r\n\topenGraph?: {\r\n\t\ttitle?: string | null;\r\n\t\tsiteName?: string | null;\r\n\t\ttype?: string | null;\r\n\t\turl?: string | null;\r\n\t\tdescription?: string | null;\r\n\t\timage?: string | null;\r\n\t};\r\n}\r\n\r\ninterface ModelHead {\r\n\ttitle?: string | null;\r\n\tkeywords?: string | null;\r\n\tdescription?: string | null;\r\n\topenGraphTitle?: string | null;\r\n\topenGraphImageUrl?: string | null;\r\n\topenGraphDescription?: string | null;\r\n\ttwitterTitle?: string | null;\r\n\ttwitterDescription?: string | null;\r\n\ttwitterImageUrl?: string | null;\r\n}\r\n\r\ninterface ModelSearch {\r\n\tsearchPageUrl?: string;\r\n\tsearchLabel?: string;\r\n}\r\n\r\nexport interface ModelReact {\r\n\tcontainerId: string;\r\n\tclientOnly: boolean;\r\n\tsiteBaseUrl: string;\r\n\tapiUrl: string;\r\n\tapiEditUrl: string;\r\n\trenderingState: RenderingStates;\r\n}\r\n\r\nexport enum RenderingStates {\r\n\tServerSide = 1,\r\n\tHydrate,\r\n\tClientSide,\r\n}\r\n\r\nexport interface Lang {\r\n\tmenuHeaderIsItem: boolean;\r\n\titems: LangItems[];\r\n}\r\n\r\ninterface LangItems {\r\n\turl: string;\r\n\tcode: string;\r\n\tactive: boolean;\r\n\ttext: string;\r\n}\r\n\r\nexport interface ModelGlobalMessages {\r\n\tmessages: ModelGlobalMessage[];\r\n\tshowMoreText: string | undefined;\r\n\tshowLessText: string | undefined;\r\n\tlinkText: string | undefined;\r\n}\r\n\r\nexport interface ModelGlobalMessage {\r\n\theading: string;\r\n\ttext: any;\r\n\tlink: string;\r\n\tshowMoreText: string | undefined;\r\n\tshowLessText: string | undefined;\r\n}\r\n\r\ninterface AppTypeLayout {\r\n\tname: string;\r\n}\r\n","/**\r\n * React\r\n */\r\n\r\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit';\r\nimport { ModelReact, RenderingStates } from 'types/epi';\r\nimport { RootState } from 'store';\r\n\r\nexport const initialState: ModelReact = {\r\n\tcontainerId: 'root',\r\n\tclientOnly: true,\r\n\trenderingState: RenderingStates.ClientSide,\r\n\tsiteBaseUrl: process?.env?.PUBLIC_URL,\r\n\tapiUrl: `${process?.env?.PUBLIC_URL}/api/`,\r\n\tapiEditUrl: '/api/content',\r\n};\r\n\r\nconst slice = createSlice({\r\n\tname: 'react',\r\n\tinitialState,\r\n\treducers: {\r\n\t\tupdateRenderingState: (state, action: PayloadAction<RenderingStates>) => {\r\n\t\t\tstate.renderingState = action.payload;\r\n\t\t},\r\n\t},\r\n});\r\n\r\nexport const selectReact = (state: RootState) => state.react;\r\nexport const { updateRenderingState } = slice.actions;\r\n\r\nexport default slice.reducer;\r\n"],"sourceRoot":""}