{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./source/js/utils/prop-type-theme.js","webpack:///./source/components/button/button.jsx","webpack:///./source/assets/icons/icons.js","webpack:///./source/components/icon/icon.jsx","webpack:///./source/components/on-page-editing/on-page-editing.jsx","webpack:///./source/components/rich-text/rich-text.jsx","webpack:///./source/components/accordion/accordion.jsx","webpack:///./source/components/accordion-list/accordion-list.jsx","webpack:///./source/components/add-to-cart-button/add-to-cart-button.jsx","webpack:///./source/components/arrow-button/arrow-button.jsx","webpack:///./source/js/analytics.js","webpack:///./source/js/utils/messenger.js","webpack:///./source/js/api-helper.js","webpack:///./source/components/form/formsy-with-validation.js","webpack:///./source/components/form/form.jsx","webpack:///./source/components/formsy-wrapper/formsy-wrapper.jsx","webpack:///./source/components/form-elements/hidden-input/hidden-input.jsx","webpack:///./source/components/form-elements/select/select.jsx","webpack:///./source/components/cart/cart-product-details.jsx","webpack:///./source/components/link/link.jsx","webpack:///./source/components/cart/cart-product-status.jsx","webpack:///./source/components/contained-image/contained-image.jsx","webpack:///./source/js/responsive-images.js","webpack:///./source/components/image/image.jsx","webpack:///./source/components/price/price.jsx","webpack:///./source/components/cart/cart-product.jsx","webpack:///./source/components/content-container/content-container.jsx","webpack:///./source/components/modal/tab-trapper.jsx","webpack:///./source/components/modal/modal.jsx","webpack:///./source/components/spinner/spinner.jsx","webpack:///./source/components/page-spinner/page-spinner.jsx","webpack:///./source/components/add-to-cart-confirmation/add-to-cart-confirmation.jsx","webpack:///./source/components/appointments/appointments.jsx","webpack:///./source/js/log.js","webpack:///./source/components/react-component/react-component.jsx","webpack:///./source/components/component-list-item/component-list-item.jsx","webpack:///./source/components/component-list-item/supported-blocks.js","webpack:///./source/components/component-list/component-list.jsx","webpack:///./source/components/grid/grid.jsx","webpack:///./source/components/page-header/page-header-link-list.jsx","webpack:///./source/components/video/video.jsx","webpack:///./source/components/page-header/page-header.jsx","webpack:///./source/components/bomb/bomb.jsx","webpack:///./source/components/product-card/product-card.jsx","webpack:///./source/components/product-list/product-list.jsx","webpack:///./source/components/article-page/article-page.jsx","webpack:///./source/components/assistive-drawer/assistive-drawer.jsx","webpack:///./source/components/availability/availability.jsx","webpack:///./source/components/booking-page/booking-page.jsx","webpack:///./source/components/brand-page/brand-page.jsx","webpack:///./source/components/breadcrumbs/breadcrumbs.jsx","webpack:///./source/components/fluid-image/fluid-image.jsx","webpack:///./source/components/cta-block/cta-block.jsx","webpack:///./source/components/campaign-banner/campaign-banner.jsx","webpack:///./source/hooks/use-interval.js","webpack:///./source/contexts/carousel-context.jsx","webpack:///./source/contexts/carousel-context-provider.jsx","webpack:///./source/components/carousel/carousel.jsx","webpack:///./source/hooks/use-non-passive-event.js","webpack:///./source/components/campaign-banner-carousel/campaign-banner-carousel.jsx","webpack:///./source/components/form-elements/checkbox/checkbox-formsy.jsx","webpack:///./source/components/form-elements/checkbox/noop-wrapper.jsx","webpack:///./source/components/form-elements/checkbox/checkbox.jsx","webpack:///./source/components/debounce/debounce.jsx","webpack:///./source/components/form-elements/text-input/noop-wrapper.jsx","webpack:///./source/components/form-elements/text-input/text-input-formsy.jsx","webpack:///./source/components/form-elements/text-input/text-input.jsx","webpack:///./source/components/validation-error-texts/validation-error-texts.jsx","webpack:///./source/components/cart/cart-discount-form.jsx","webpack:///./source/components/cart/cart-discount-delete-form.jsx","webpack:///./source/components/cart/cart.jsx","webpack:///./source/components/category-block/category-block.jsx","webpack:///./source/components/collapse-list/collapse-list.jsx","webpack:///./source/components/form-elements/option-group/option-group.jsx","webpack:///./source/components/form-elements/checkbox-group/checkbox-group.jsx","webpack:///./source/components/form-elements/color-select/color-select.jsx","webpack:///./source/components/form-elements/gender-select/gender-select.jsx","webpack:///./source/components/form-elements/shape-select/shape-select-item.jsx","webpack:///./source/components/form-elements/shape-select/shape-select.jsx","webpack:///./source/components/category-filters/filter-group.jsx","webpack:///./source/components/category-filters/category-filters.jsx","webpack:///./source/js/breakpoints.js","webpack:///./source/components/category-page/create-filter-model.js","webpack:///./source/components/empty-list-message/empty-list-message.jsx","webpack:///./source/components/image-link-list/image-link-list.jsx","webpack:///./source/components/form-elements/search/search.jsx","webpack:///./source/components/category-page/solaris-banner.jsx","webpack:///./source/components/paginator/paginator-link.jsx","webpack:///./source/components/paginator/paginator.jsx","webpack:///./source/components/category-page/products-footer.jsx","webpack:///./source/components/category-page/category-page.jsx","webpack:///./source/components/my-page-form/my-page-form.jsx","webpack:///./source/components/my-page-layout/my-page-layout.jsx","webpack:///./source/components/my-page-section/my-page-section.jsx","webpack:///./source/components/change-email-page/change-email-page.jsx","webpack:///./source/components/change-password-page/change-password-page.jsx","webpack:///./source/components/chat/chat.jsx","webpack:///./source/components/checkout-button/checkout-button.jsx","webpack:///./source/components/checkout-page/checkout-context.js","webpack:///./source/components/checkout-login-form/checkout-login-form.jsx","webpack:///./source/components/checkout-register-form/checkout-register-form.jsx","webpack:///./source/components/checkout-login/checkout-login.jsx","webpack:///./source/components/checkout-logout/checkout-logout.jsx","webpack:///./source/hooks/use-previous.js","webpack:///./source/components/checkout-page/checkout-step.jsx","webpack:///./source/hooks/use-is-mounted.js","webpack:///./source/components/terms-form/terms-form.jsx","webpack:///./source/components/klarna-iframe/klarna-iframe.jsx","webpack:///./source/components/delivery-widget/porter-buddy.jsx","webpack:///./source/components/klarna-and-porterbuddy/klarna-and-porterbuddy.jsx","webpack:///./source/components/delivery-widget/delivery-widget.jsx","webpack:///./source/components/form-elements/radio/radio.jsx","webpack:///./source/components/delivery-form/delivery-form.jsx","webpack:///./source/components/checkout-page/checkout-page.jsx","webpack:///./source/components/checkout-page-legacy/checkout-page-legacy.jsx","webpack:///./source/components/collapsable-rich-text/collapsable-rich-text.jsx","webpack:///./source/components/consent-page/consent-page.jsx","webpack:///./source/js/check-api-prop-types.js","webpack:///./source/components/contact-lens-page/add-to-cart-response.jsx","webpack:///./source/components/form-elements/input-table/input-table.jsx","webpack:///./source/components/contact-lens-page/contact-lens-form.jsx","webpack:///./source/components/product-images/image-container.jsx","webpack:///./source/components/product-images/zoom-modal.jsx","webpack:///./source/components/product-images/product-images.jsx","webpack:///./source/components/product-logo/product-logo.jsx","webpack:///./source/components/product-selling-points/product-selling-points.jsx","webpack:///./source/components/contact-lens-page/replacement-product-banner.jsx","webpack:///./source/components/selling-points/selling-points.jsx","webpack:///./source/components/contact-lens-page/update-form-response.jsx","webpack:///./source/components/product-variant-text/product-variant-text.jsx","webpack:///./source/components/contact-lens-page/contact-lens-header.jsx","webpack:///./source/components/contact-lens-page/create-form-model.js","webpack:///./source/components/product-text/product-text.jsx","webpack:///./source/components/contact-lens-page/contact-lens-page.jsx","webpack:///./source/components/cta-block-small/cta-block-small.jsx","webpack:///./source/components/cta-carousel/cta-carousel.jsx","webpack:///./source/components/customer-data-import-form/customer-data-import-form.jsx","webpack:///./source/components/personal-information-form/validation-helper.js","webpack:///./source/components/personal-information-form/personal-information-login-form.jsx","webpack:///./source/components/personal-information-form/personal-information-form.jsx","webpack:///./source/components/personal-information-page/personal-information-page.jsx","webpack:///./source/components/edit-profile-page/edit-profile-page.jsx","webpack:///./source/components/email-template/email-template-content.jsx","webpack:///./source/components/email-template/email-template-header.jsx","webpack:///./source/components/email-template/email-template-summary.jsx","webpack:///./source/components/email-template/email-template.jsx","webpack:///./source/components/embed-video/embed-video.jsx","webpack:///./source/components/error-page/error-svg.jsx","webpack:///./source/components/error-page/error-page.jsx","webpack:///./source/js/google-maps-loader.js","webpack:///./source/components/find-store/filter-stores.js","webpack:///./source/components/find-store/get-place-matches.js","webpack:///./source/components/find-store/store.jsx","webpack:///./source/components/find-store/find-store.jsx","webpack:///./source/js/get-location.js","webpack:///./source/components/find-store-block/find-store-block.jsx","webpack:///./source/components/store-map/map-popup.jsx","webpack:///./source/components/store-map/store-map.jsx","webpack:///./source/components/find-store-page/stores-list.jsx","webpack:///./source/components/find-store-page/find-store-page.jsx","webpack:///./source/components/footer/footer-image-list.jsx","webpack:///./source/components/footer/footer-link-list.jsx","webpack:///./source/components/newsletter-form/newsletter-form.jsx","webpack:///./source/components/footer/footer-social-media.jsx","webpack:///./source/components/footer/footer.jsx","webpack:///./source/components/forgot-password-page/forgot-password-page.jsx","webpack:///./source/components/frontpage/frontpage.jsx","webpack:///./source/components/glasses-page/glasses-form.jsx","webpack:///./source/components/glasses-page/product-colors.jsx","webpack:///./source/components/glasses-page/glasses-header.jsx","webpack:///./source/components/glasses-page/glasses-measurement.jsx","webpack:///./source/components/lens-visualisation/lens-visualisation-slider.jsx","webpack:///./source/components/lens-visualisation/lens-visualisation.jsx","webpack:///./source/components/metadata/metadata.jsx","webpack:///./source/components/glasses-page/glasses-page.jsx","webpack:///./source/components/global-search/search-result-header.jsx","webpack:///./source/components/global-search/search-results.jsx","webpack:///./source/components/global-search/global-search-response.jsx","webpack:///./source/components/global-search/global-search.jsx","webpack:///./source/components/login-modal/login-modal.jsx","webpack:///./source/components/mouseover-link/mouseover-link.jsx","webpack:///./source/components/header/category-link.jsx","webpack:///./source/components/header/shape-link.jsx","webpack:///./source/components/header/sub-menu.jsx","webpack:///./source/components/header/main-nav.jsx","webpack:///./source/components/header/header.jsx","webpack:///./source/components/iframe-page/iframe-page.jsx","webpack:///./source/components/link-list/link-list.jsx","webpack:///./source/components/login-form/login-form.jsx","webpack:///./source/components/login-page/login-page.jsx","webpack:///./source/components/message/message.jsx","webpack:///./source/components/my-consents/my-consents.jsx","webpack:///./source/components/my-orders/my-orders-item.jsx","webpack:///./source/components/my-orders/my-orders.jsx","webpack:///./source/components/my-page/my-page-sidebar-section.jsx","webpack:///./source/components/order-again-button/order-again-button.jsx","webpack:///./source/components/order-list/order-list-item.jsx","webpack:///./source/components/order-list/order-list.jsx","webpack:///./source/components/personal-details/personal-details.jsx","webpack:///./source/components/my-page/my-page.jsx","webpack:///./source/components/newsletter-form-block/newsletter-form-block.jsx","webpack:///./source/components/openingHoursMeta/openingHoursMeta.jsx","webpack:///./source/components/registration-banner/registration-banner.jsx","webpack:///./source/components/order-summary/order-summary.jsx","webpack:///./source/components/quote/quote.jsx","webpack:///./source/components/register-page/register-page.jsx","webpack:///./source/components/search-page/search-page.jsx","webpack:///./source/components/site-info-banner/banner.jsx","webpack:///./source/components/site-info-banner/site-info-banner.jsx","webpack:///./source/components/static-container/static-container.jsx","webpack:///./source/components/store-page/store-page-header.jsx","webpack:///./source/components/store-page/store-page.jsx","webpack:///./source/app.components.js","webpack:///./source/components/chat/script.js","webpack:///./source/components/email-template/email-template.css","webpack:///./source/assets/logo.svg","webpack:///./source/app.components.js-exposed","webpack:///./source/assets/icons sync \\.svg$","webpack:///./source/assets/icons/basket.svg","webpack:///./source/assets/icons/big-arrow-right.svg","webpack:///./source/assets/icons/big-x.svg","webpack:///./source/assets/icons/category-kids-glasses.svg","webpack:///./source/assets/icons/category-kids.svg","webpack:///./source/assets/icons/category-man-glasses.svg","webpack:///./source/assets/icons/category-man.svg","webpack:///./source/assets/icons/category-woman-glasses.svg","webpack:///./source/assets/icons/category-woman.svg","webpack:///./source/assets/icons/checkmark-micro.svg","webpack:///./source/assets/icons/checkmark.svg","webpack:///./source/assets/icons/eye.svg","webpack:///./source/assets/icons/facebook.svg","webpack:///./source/assets/icons/heart.svg","webpack:///./source/assets/icons/instagram.svg","webpack:///./source/assets/icons/linkedin.svg","webpack:///./source/assets/icons/magnifier.svg","webpack:///./source/assets/icons/mail.svg","webpack:///./source/assets/icons/pause.svg","webpack:///./source/assets/icons/pen.svg","webpack:///./source/assets/icons/pin.svg","webpack:///./source/assets/icons/slider.svg","webpack:///./source/assets/icons/small-arrow-down.svg","webpack:///./source/assets/icons/small-arrow-left.svg","webpack:///./source/assets/icons/small-arrow-right.svg","webpack:///./source/assets/icons/small-minus.svg","webpack:///./source/assets/icons/small-plus.svg","webpack:///./source/assets/icons/small-x.svg","webpack:///./source/assets/icons/zoom.svg","webpack:///./source/components/error-page/error-page.css","webpack:///./source/js/polyfills/class-list.js","webpack:///./source/js/input-detection.js","webpack:///./source/js/input-detection-loader.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","0","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","window","oldJsonpFunction","slice","prop_type_theme","themes","singlePropType","PropTypes","oneOf","keys","map","oneOfType","arrayOf","big","circle","gray","orange","outline","light","mini","plain","white","uppercase","link","sizes","small","normal","Button","_ref","ButtonComponent","attributes","className","children","disabled","formId","tabIndex","htmlFor","onClick","prependChildren","text","theme","type","url","ctaTitle","ctaType","title","_ref$size","size","themeList","_typeof","_toConsumableArray","buttonProps","_objectSpread","cn","concat","has-children","size-small","form","data-cta-title","data-cta-type","href","react_default","a","createElement","_extends","propTypes","string","node","bool","number","func","propTypeTheme","values","defaultProps","req","require","reduce","icons","filename","icons_objectSpread","icons_defineProperty","replace","Icon","React","focusable","isRequired","editTypes","floating","flyout","inline","webcontrol","OnPageEditing","PureComponent","this","props","element","data-epi-property-name","data-epi-use-mvc","data-epi-property-edittype","editType","default","fancyBullets","centered","RichText","dangerouslySetInnerHTML","__html","Accordion","id","isExpanded","_this","setState","state","Component","_this2","requestAnimationFrame","Date","getTime","has-border","showBorder","button_button","aria-controls","aria-expanded","is-active","toggle","on_page_editing","OPE","icon","lib_default","componentProps","isOpen","rich_text","accordion_extends","exact","AccordionList","items","item","accordion","accordion_list_extends","AddToCartButton","data-test-add-to-cart-button","ArrowButton","_objectWithoutProperties","arrow_button_extends","Timeout","fn","delay","setTimeout","clear","cleared","clearTimeout","getCallbackEnhancedData","callback","callbackTimeout","assign","eventCallback","send","isRunningOnClient","dataLayer","forEach","dataObject","analytics","onProductClick","productId","price","brand","category","itemName","position","event","ecommerce","click","products","variant","document","location","onTopic","topic","PubSub","subscribe","message","_ref2","publish","messenger","onErrorMessage","topics","errorMessage","off","token","unsubscribe","onMessage","sendErrorMessage","_ref3","sendMessage","_ref4","defaultFetchOptions","headers","Accept","Content-Type","credentials","parseResponse","response","json","then","handleUserMessages","messageToUser","success","handleAnalytics","handleNotOk","ok","error","Error","statusText","status","handleRedirect","redirectUrl","handleResponse","_ref5","payload","handleFetchError","getData","Promise","reject","request","options","fetch","catch","api_helper","execute","endpoint","startsWith","console","log","resolve","body","method","post","JSON","stringify","rules","allFields","hasValue","formsy_with_validation_typeof","isBirthDate","match","day","parseInt","substr","month","isConditionallyRequired","otherFieldsString","otherFields","split","isEmailRepeat","otherField","isPhoneNumber","isPostalCode","addValidationRule","Form","isLoading","isValidating","responseObject","model","formsy","getModel","every","indexOf","formData","isEqual","onChange","deepClone","resetForm","invalidateForm","onBeforeSubmit","validationEndpoint","api","isValidationModel","onValidationResponse","doApiSubmit","onResponse","formsy_react_lib_default","action","onValid","onValidate","onValidSubmit","onInvalid","onInvalidSubmit","ref","onRef","noValidate","showSubmitButton","submitLabel","FormsyWrapper","isValid","initialValue","setValue","Fragment","getErrorMessage","getValue","isPristine","any","withFormsy","HiddenInput","formsy_wrapper","Select","dropdownIsVisible","isMounted","selectedOption","find","option","selected","firstValue","placeholder","e","fakeSelect","target","contains","scrollContainer","elementPosition","offsetTop","elementHeight","offsetHeight","containerHeight","scrollTop","scrollToSelectedOption","addEventListener","handleClickOutside","removeEventListener","getInitialValue","validationErrors","validations","fallback","ariaAttributes","ariaLabelledBy","aria-labelledby","label","showError","enableValidation","idPrefix","firstOption","_slicedToArray","hidden_input","select_extends","has-error","is-mounted","hideDropdown","data-test-select-button","toggleDropdown","div","shouldShowCheckmark","el","isSelected","isScrollToElement","defaultScrollToValue","stopPropagation","data-test-select-option","shape","CartProductDetails","inputs","colSpan","unmountClosed","form_form","detail","select_select","omit","bold","huge","noStyle","noUnderline","skew","skewUnderline","Link","role","_this$props","_this$props$tabindex","tabindex","useSpan","useSpanElement","link_extends","has-children-before","has-span","isActive","CartProductStatus","link_link","ContainedImage","alt","src","style","backgroundImage","backgroundPosition","transformBase","breakpointResolution","getNewSrc","originalSrc","imageNodeWidth","currentImageWidth","arguments","undefined","endsWith","adjustedWidth","devicePixelRatio","Math","ceil","loadAppropriateImage","imageNodeContainer","imageNode","getElementsByTagName","getAttribute","transform","width","offsetWidth","newSrc","setAttribute","responsive_images","activate","imageNodeContainers","getElementsByClassName","contained","Image","ImageLoader","initialSize","parentNode","image","parentElement","responsive","scale","contained_image","containedPosition","draggable","img","Price","discountedPrice","originalPrice","priceLabel","Element","smallPrice","bigPrice","has-discount","alignLeft","bigFont","lineThrough","mediumFontWeight","smallFont","vertical","CartProduct","isDetailsExpanded","preventDefault","priceThemes","data-test-cart-product","line-through","cart_product_status","cart_product_extends","image_image","productUrl","details","shouldShowDetails","collapseLabel","expandLabel","discount","quantityLabel","shouldBeEditable","decreaseQuantityEndpoint","onSubmit","onUpdate","decreaseQuantityLabel","quantity","increaseQuantityEndpoint","increaseQuantityLabel","unitPriceLabel","unitPrice","price_price","removeFromCartEndpoint","removeFromCartLabel","cart_product_details","ContentContainer","TabTrapper","shiftKeyIsPressed","shiftKey","afterWrapper","focus","beforeWrapper","height","left","overflow","container","onKeyDown","prevProps","previouslyFocusedElement","activeElement","onFocus","trapFirst","getButtonStyle","trapLast","Modal","contentHeight","fitsOnScreen","add","classList","modal","modalWrapper","innerHeight","scrollHeight","which","hideModal","hide","toggleBodyClass","handleEscPress","isVisible","onAfterShowModal","_this3","ReactDOM","createPortal","modal_extends","animation-enabled","animate","is-visible","fits-on-screen","aria-modal","content_container","containerClassName","minHeight","contentClassName","tab_trapper","showCloseButton","closeButtonText","Spinner","PageSpinner","shouldContainInParent","react_tiny_transition_lib_default","is-contained","spinner","AddToCartConfirmation","cartUpdate","subscriber","msg","confirmation","add_to_cart_confirmation_objectSpread","showAddToCartConfirmation","page_spinner","data-test-add-to-cart-confirmation","product","cart_product","add_to_cart_confirmation_extends","onProductEdit","onProductEditResponse","arrow_button","data-test-confirmation-go-to-cart-button","cartLink","Appointments","noop","ReactComponent","half","third","ComponentListItem","additionalComponentProps","blockNotSupportedText","onPageEditing","additionalProps","componentToRender","component_list_item_extends","OPEProps","contentId","data-epi-block-id","data-epi-content-name","contentName","data-content-group","enableElementSizing","ComponentList","additionalItemProps","components","block","component_list_item","component_list_extends","componentName","editorialPage","leftColumnWider","noMargin","Grid","Column","PageHeaderLinkList","page_header_link_list_extends","fill","Video","autoPlay","poster","PageHeader","headingLevel","ingress","linkList","shouldUseBlockStyling","video","Title","has-image","is-block","page_header_extends","page_header_link_list","video_video","green","Bomb","font-size-xl","font-size-lg","font-size-sm","productCategories","contactLens","Glass","Sunglass","EyeHealth","ProductCard","useLinkElement","cta","WrapperElement","wrapperProps","data-test-product-card","productClick","product_card_extends","bomb","bomb_bomb","bombIsGreen","smallPriceElement","bigPriceElement","is-highlighted","backgroundColor","horizontal","smallerImages","narrow","productBackgrounds","twoItemsPerRow","ProductList","productTheme","shouldAnimate","_ref$ctaType","ListWrapper","FlipMotion","listProps","component","childComponent","ChildWrapper","product_card","product_list_extends","ArticlePage","blocks","firstText","header","secondText","sidebar","page_header","grid","article_page_extends","component_list","AssistiveDrawer","description","_useState2","assistive_drawer_slicedToArray","useState","setIsOpen","assistive-drawer--open","aria-label","onBlur","Availability","inStock","BookingPage","iframeUrl","queryParams","innerWidth","getSrc","screenWidth","debounce","onResize","iframeResizer","iframe","debouncedResize","BrandPage","BreadCrumbs","itemScope","itemType","index","itemProp","content","FluidImage","fluid-image--cover","imageShouldCoverContainer","focusPoint","x","y","compact","CtaBlock","locateStoreLink","isFocusable","showImage","subtitle","cta_block_extends","fluid_image","ctaColors","getCtaTheme","ctaColor","CampaignBanner","ctaBlock","campaign_banner_extends","cta_block","product_list","useInterval","delayInSeconds","savedCallback","useRef","use_interval_slicedToArray","seconds","setSeconds","_useState4","isPaused","setIsPaused","_useState6","isStopped","setIsStopped","useEffect","current","interval","clearInterval","setInterval","reset","stop","start","pause","unpause","CarouselContext","createContext","CarouselContextProvider","currentSlideIndex","carousel_context","Provider","Carousel","nextItemText","pauseItemText","playItemText","stopItemText","autoPlayDelayInSeconds","numberOfSlidesToShow","previousItemText","dotButtonText","shouldShowDots","carouselLabelText","isAutoPlayEnabled","numberOfSlidesToJump","startIndex","thumbnails","shouldShowNavText","shouldLoop","carouselAnnouncementText","carouselItemLabelText","hasQuickAnimations","slidesCount","useMemo","Children","count","hasThumbnails","announcementText","slideRefs","_React$useState2","carousel_slicedToArray","currentIndex","_React$useState4","wrapper","setWrapper","_React$useState6","navVisible","setNavVisible","animationParams","stiffness","damping","precision","_useSpringStyle2","useSpringStyle","animationRef","transitionTo","update","newState","newIndex","lastIndex","newIndexClamped","clamp","currentIndexRounded","round","hasNextItem","hasPreviousItem","getNewState","goToItem","goToNextItem","_useInterval","resetTimer","isTimerPaused","isTimerStopped","stopTimer","startTimer","pauseTimer","unpauseTimer","hasMultiTouch","isZoomed","initialScreenWidth","indexOnTouchStart","previousX","touchStartX","listener","dependencies","passive","use_non_passive_event_toConsumableArray","useNonPassiveEvent","touches","touch","abs","travel","clientX","travelRelative","onTouchMove","itemWidth","currentSlide","maxSteps","steps","Array","_","memoizedAnnoucementText","carousel_context_provider","aria-roledescription","has-thumbnails","shows-multiple-slides","default-state","assistive_drawer","aria-live","aria-atomic","onMouseEnter","onMouseLeave","onTouchStart","onTouchEnd","child","isCurrent","aria-hidden","currentTarget","relatedTarget","is-current","carousel-status--paused","carousel-status--stopped","slideIndex","data-carousel-element","navigateByDot","shouldAutoRotate","BannerChild","useContext","campaign_banner","campaign_banner_carousel_extends","CampaignBannerCarousel","carousel","campaign_banner_carousel_BannerChild","CheckboxFormsy","checked","initiallyChecked","NoopWrapper","Checkbox","labelChild","useFormsy","Wrapper","onChangeFormsy","checkbox_extends","alignTop","Debounce","timer","wait","isInvalid","TextInputFormsy","autoFillLoop","shouldSetValueOnChange","detectAutofill","input","textInputProps","aloneInRow","bigText","hiddenLabel","noValidation","wide","validationString","separator","TextInput","detectAutoFill","autoComplete","autocomplete","defaultValue","togglePassword","togglePasswordLabel","debounce_debounce","animateChildren","forceInitialAnimation","shouldShowErrorMessage","ValidationErrorTexts","isEmail","CartDiscountForm","toggleCheckbox","_ref$onSubmit","_ref$onUpdate","cart_discount_form_slicedToArray","setIsExpanded","codeInput","checkbox_checkbox","cart_discount_form_extends","duration","easing","text_input","CartDiscountDeleteForm","discountCode","maxi","Cart","discountsList","discountLabel","numberOfProducts","shippingLabel","shippingCost","totalPrice","totalPriceLabel","showDiscountForm","cart","cart_objectSpread","discountCodeForm","didPublishNewCart","isMaxi","productLabels","cartSummaryClassNames","not-editable","cart_extends","onFormSubmit","cart_discount_delete_form","cart_discount_form","CategoryBlock","category_block_extends","CollapseList","maxLength","sliceIndex","visibleChildren","hiddenChildren","toggleExpanded","OptionGroup","checkbox","indexOfCheckbox","accum","onCheckboxChange","CheckboxGroup","checkboxTheme","labels","option_group","collapse_list","checkbox_group_extends","includes","colorNames","Black","Brown","Blue","Gold","Green","Grey","Grey/Black","Mirror","Multi","Silver","ColorSelect","kids","man","woman","GenderSelect","gender_select_defineProperty","genderName","ShapeSelectItem","shape_select_item_extends","ShapeSelect","shape_select_item","shape_select_extends","FilterGroup","colorSelect","genderSelect","genericFilter","shapeSelect","filter","color_select","filter_group_extends","gender_select","shape_select","checkbox_group","FilterComponent","CategoryFilters","submitButton","hideFilters","hideFiltersLabel","resetLabel","categoryId","filterGroups","group","filter_group","category_filters_extends","onReset","minWidth","matchMedia","matches","maxWidth","breakpoints","js_breakpoints","sm","md","lg","xl","xxl","smMax","mdMax","lgMax","xlMax","xxlMax","getFilter","filterGroup","EmptyListMessage","columnClassNames","2","3","ImageLinkList","columns","image_link_list_extends","Search","buttonText","textInputTheme","SolarisBanner","imageText","solaris_banner_slicedToArray","contentRef","setHeight","hasImage","updateHeight","getBoundingClientRect","solaris-banner--expanded","solaris-banner--has-image","maxHeight","PaginatorLink","isDisabled","Paginator","links","previousLink","nextLink","paginator__navigation--disabled","paginator__link--disabled","ProductsFooter","hasBottomMargin","search","CategoryPage","articles","articlesButtonText","filters","pagination","filtersVisible","hasMoreProducts","isArticlesVisible","showArticles","isDesktop","moreProductsEndpoint","productList","productsButtonText","productsFooter","showNewProductsOnly","sorting","newSearchTerm","searchTerm","shouldRefresh","previousFormData","history","replaceState","pathname","toQueryString","submit","mobileFilterContainer","shouldReplaceProducts","newFilterModel","create_filter_model_defineProperty","createFilterModel","previousState","oldProducts","newProducts","category_page_objectSpread","hasProducts","onFiltersChange","showProducts","category_page_extends","display","category_filters","solarisBanner","solaris_banner","showFilters","showFiltersLabel","smallPadding","empty_list_message","noResultsMessage","moreProductsLabel","paginator","products_footer","image_link_list","MyPageForm","MyPageLayout","logoutLink","my_page_layout_extends","MyPageSection","my_page_section_extends","ChangeEmailPage","layout","newEmail","oldEmail","section","my_page_layout","my_page_section","change_email_page_extends","my_page_form","ChangePasswordPage","newPassword","oldPassword","change_password_page_extends","Chat","script","scriptElement","styleElement","innerHTML","chatScript","async","appendChild","removeChild","CheckoutButton","Context","setIsLoading","iframeHTML","setIframeHTML","CheckoutLoginForm","forgotPasswordLink","onLoggedIn","password","userId","CheckoutContext","isLoggedIn","checkout_login_form_extends","CheckoutRegisterForm","bullets","onRegistered","isRegistered","bullet","checkout_register_form_extends","CheckoutLogin","login","onComplete","register","buttonAttributes","data-test-checkout-step-2-button","checkout_login_form","checkout_login_extends","checkout_register_form","is-right-aligned","checkout_button","CheckoutLogout","logoutText","logoutUrl","usePrevious","padding","CheckoutStep","isEnabled","isComplete","checkout_step_slicedToArray","setElement","use_is_mounted_slicedToArray","setIsMounted","useIsMounted","wasComplete","wasEnabled","scrollToElement","is-completed","is-enabled","disableInitialAnimation","checkout-step-content-non-js","TermsForm","marketingConsentsTitle","marketingConsents","serviceConsents","hideServiceConsents","isDesktopKey","terms","termsDescriptionTitle","termsDescriptionText","termsLink","validationMessage","terms_form_slicedToArray","setValid","setPristine","useCallback","terms_form_objectSpread","terms_form_defineProperty","terms-form-service-consents--hidden","terms_form_extends","data-test-checkout-checkbox","data-test-checkout-step-3-button","KlarnaIframe","htmlString","shouldEvalScript","scriptsTags","newScriptTag","data-test-klarna-iframe","PorterBuddy","config","onSelect","scriptSrc","styleHref","hasError","onload","rel","porterbuddy","porter_buddy_objectSpread","onSelectDeliveryWindow","onSetCallbacks","forceRefresh","setSelectedDeliveryWindow","handleOnRefresh","handleOnSelectDeliveryWindow","deliveryWindow","onUpdateDeliveryWindows","availabilityResponse","deliveryWindows","porter-buddy--hidden","KlarnaAndPorterbuddy","klarnaIframeHtml","porterBuddyConfig","onKlarnaChange","onDeliveryWindowChange","klarnaErrorMessage","klarna_and_porterbuddy_slicedToArray","klarna_and_porterbuddy_objectSpread","setConfig","availability","setAvailability","activePostalCode","setActivePostalCode","_handleOnDeliveryWindowSelect","_asyncToGenerator","regeneratorRuntime","mark","_callee","wrap","_context","prev","next","handleOnKlarnaSuspend","handleOnKlarnaResume","_handleOnUpdateDeliveryWindows","_callee2","additionalInfo","_context2","sent","handleOnKlarnaChange","_x4","_x5","_handleOnKlarnaChange","_callee3","postalCode","_context3","t0","_klarnaCheckout","on","suspend","resume","load","shipping_address","postal_code","shipping_address_change","validation_callback","_ref6","_data","should_proceed","_ref7","porter_buddy","_x","_x2","_x3","fetchHeaders","content-type","accept","DeliveryWidget","porterBuddyWidgetConfig","porterBuddyPublicToken","porterBuddyAvailabilityEndpoint","priceEndpoint","porterBuddyErrorMessage","handleDeliveryFail","handleDeliverySucceed","delivery_widget_slicedToArray","setHasError","currentHasError","handleOnDeliveryWindowChange","delivery_widget_asyncToGenerator","abrupt","toString","fetchPorterBuddyAvailability","errors","_errors$","code","delivery_widget_objectSpread","destinationAddress","x-public-token","klarna_and_porterbuddy","originAddress","streetName","streetNumber","city","country","parcels","widthCm","heightCm","depthCm","weightGrams","view","Radio","radio_extends","DeliveryForm","deliveryTitle","deliveryWidget","deliveryOptions","deliveryOptionsLabels","_React$useContext","setHasIframeHTML","delivery_form_slicedToArray","showPorterBuddy","setShowPorterBuddy","showOnlyKlarna","setShowOnlyKlarna","klarnaIframe","setKlarnaIframe","_React$useState8","currentShipmentId","setCurrentShipmentId","currentShipmentRef","handleOnChange","delivery_form_asyncToGenerator","enablePorterBuddy","_handleDeliveryFail","firstShipping","_handleDeliverySucceed","radio_radio","delivery_form_extends","data-test-checkout-radio-button","delivery_widget","klarna_iframe","stepIds","CheckoutPage","_React$useState7","analyticsEndpoint","cartButtonText","cartTitle","delivery","termsTitle","paymentTitle","logout","loginTitle","checkout_page_slicedToArray","hasIframeHTML","checkout_page_defineProperty","stepCompletenessMap","setStepCompletnessMap","stepIsComplete","stepId","setStepComplete","stepNumber","currentActiveStep","validities","checkout_page_objectSpread","onCartUpdate","reload","checkout_context","checkout_step","cart_cart","checkout_page_extends","data-test-checkout-step-1-button","checkout_logout","checkout_login","didLoginOrRegister","terms_form","delivery_form","CheckoutPageLegacy","deliveryAndTerms","deliveryAndTermsTitle","klarnaTitle","checkout_page_legacy_slicedToArray","checkout_page_legacy_defineProperty","checkout_page_legacy_objectSpread","checkout_page_legacy_extends","Boolean","CollapsableRichText","hiddenText","showInlineCloseButton","readLessButtonText","onCloseClick","readMoreButtonText","isInitiallyOpen","collapsable_rich_text_slicedToArray","textIsExpanded","setTextIsExpanded","showButton","setShowButton","handleOnReadMoreClick","classNames","beforeEnter","entering","beforeLeave","leaving","ConsentPage","abortLink","consentGroups","consent_page_extends","_ref2$optionDescripti","optionDescriptions","labelDescriptions","checkApiPropTypes","typeSpec","typeName","process","AddToCartResponse","InputTable","columnLabels","rows","row","rowIndex","colIndex","ariaId","input_table_extends","ContactLensForm","changeTimeout","priceSummary","productSelect","propertySelect","shippingBanner","addToCartEndpoint","onAddToCartResponse","contact_lens_form_extends","productPrices","input_table","availability_availability","availabilityBanner","summary","add_to_cart_button","ImageContainer","ZoomModal","imageHeight","posX","posY","imagePadding","imageWidth","winW","winH","xDiff","yDiff","rangeMap","clientY","complete","naturalHeight","onMouseMove","react_motion","defaultStyle","spring","interpolatedStyle","onCloseButtonClick","ProductImages","modalIsVisible","modalSrc","portalNode","firstImage","images","imageScale","documentElement","image_container","showModal","product_images_extends","zoom_modal","ProductLogo","fallbackText","smallText","ProductSellingPoints","ReplacementProductBanner","productName","productType","SellingPoints","selling_points_extends","UpdateFormResponse","purchaseForm","ProductVariantText","textHtml","ContactLensHeader","productVariantText","transformedFormData","entries","contact_lens_header_slicedToArray","val","contact_lens_header_defineProperty","updateFormEndpoint","createFormModel","getAvailabilityEndpoint","replacementProductBanner","replacement_product_banner","replacementProductTitle","productSellingPoints","product_selling_points","contact_lens_header_extends","product_images","productImages","product_logo","productLogo","contact_lens_form","onFormChange","product_variant_text","selling_points","sellingPoints","ProductText","isCentered","ContactLensPage","productInformation","productMetadata","relatedProducts","productTextHtml","contact_lens_header","product_text","CtaBlockSmall","cta_block_small_extends","BlockChild","cta_carousel_extends","CtaCarousel","react","cta_carousel_BlockChild","CustomerDataImportForm","secondaryAction","textInput","customer_data_import_form_extends","validation_helper","validation_helper_defineProperty","firstName","lastName","email","phone","address","birthDate","toggleDeliveryAddress","requireDeliveryAddress","newModel","validation_helper_objectSpread","deliveryFirstName","deliveryLastName","deliveryAddress","deliveryPostalCode","validate","PersonalInformationLoginForm","groupClassName","personal_information_login_form_extends","PersonalInformationForm","showDeliveryAddress","validationHelper","inputValidation","personal_information_form_objectSpread","personal_information_form_defineProperty","validateAll","validation","personal_information_form_extends","personal_information_form_assertThisInitialized","_TextInput$themes","loginForm","personal_information_login_form","loginFormId","getTextInput","changeEmailLink","changePasswordLink","separateDeliveryAddress","showDeliveryAddressCheckbox","toggleSeparateDeliveryAddress","deliveryAddressTitle","deliveryCity","birthDateLink","registerAccount","PersonalInformationPage","formContent","personal_information_page_extends","personal_information_form","EditProfilePage","personal_information_page","edit_profile_page_extends","EmailTemplateContent","expectedDeliveryDate","orderConfirmationLabel","orderNumber","orderDateLabel","orderDate","EmailTemplateHeader","logo","EmailTemplateSummary","addressLabel","customerName","paymentMethodLabel","paymentMethod","reorderLink","EmailTemplate","customerLabel","customer","orderDetails","css","align","email_template_header","email_template_content","email_template_extends","email_template_summary","array","EmbedVideo","embed","ErrorSvg","errorCode","version","xmlns","xmlnsXlink","viewBox","enableBackground","xmlSpace","x1","y1","x2","y2","ErrorPage","linkUrl","linkText","error_svg","GoogleMapsLoader","google_maps_loader","apiKey","KEY","LIBRARIES","google","filter_stores","APIKey","stores","googleMapsLoader","geocoder","maps","Geocoder","lat","long","nameMatches","toLowerCase","geocoderProps","componentRestrictions","LatLng","geocode","googleMatches","googlePlacesData","addressComponents","bounds","geometry","viewport","types","isValidResult","storesInBounds","store","lng","nearbyStores","p1","p2","spherical","computeDistanceBetween","getDistance","storesByAddress","addressMatches","str","postPlace","postCode","county","some","filterByAddressComponents","getPlaceMatches","allMatches","Store","openingHours","FindStore","isUsingLocation","userLatitude","userLongitude","doSubmit","leading","shouldDoLiveSearch","updateOnChange","debouncedSubmit","defaultStores","googleMapsAPIKey","shouldUseLocation","navigator","geolocation","getCurrentPosition","coords","latitude","longitude","onSearch","find_store_extends","onSearchInput","geolocationText","FindStoreBlock","resultsVisible","searchWrapper","onInteract","find_store","find_store_block_extends","findStore","noResultsText","MapPopup","map_popup_extends","StoreMap","LatLngBounds","extend","getBounds","setCenter","getCenter","setZoom","fitBounds","Map","fitMapToStores","popupsAndMarkers","popup","InfoWindow","ReactDOMServer","renderToString","map_popup","marker","Marker","mapMarker","addListener","close","open","StoresList","storeLabels","hours","stores_list_extends","FindStorePage","list","find_store_page_extends","stores_list","store_map","FooterImageList","footer_image_list_extends","linkThemes","FooterLinkList","footer_link_list_extends","NewsletterForm","newsletter_form_extends","FooterSocialMedia","provider","Row","Footer","imageLists","linkLists","mainLinks","newsLetterForm","richText","newsLetterTermsLink","secondaryLinks","socialMedia","footer_Row","footer_Column","footer_extends","footer_link_list","newsletter_form","footer_image_list","footer_social_media","ForgotPasswordPage","forgot_password_page_extends","Frontpage","GlassesForm","updateSizeEndpoint","onBeforeUpdateSize","updateSize","sizeSelect","onBeforeAddToCart","is-hidden","glasses_form_extends","ProductColors","colors","GlassesHeader","productColors","productModel","purchaseInformation","glasses_header_extends","glasses_form","product_colors","GlassesMeasurement","altText","_ref2$measures","measures","LensVisualisationSlider","isDragging","slider-wrapper-hovered","LensVisualisation","pageX","visualisationWrapper","xStart","sliderIsMoving","xMove","slider","onMouseUp","onMouseDown","lensColor","isOverlayEnabled","lens_visualisation_slider","Metadata","descriptionList","button","tag","metadata_extends","GlassesPage","glasses_page_objectSpread","glasses_header","glasses_page_extends","beforeUpdateSize","glasses_measurement","glassesMeasurement","metadata","frameMetadata","lensVisualisation","lens_visualisation","lenseMetadata","editorialContent","SearchResultHeader","is-centered","SearchResults","articlesHeader","productsHeader","hasResults","search_result_header","search_results_extends","article","GlobalSearchResponse","searchResults","GlobalSearch","isSearchResultsVisible","wrapperStyle","getComputedStyle","onMeasure","paddingTop","paddingBottom","suggestionEndpoint","global_search_defineProperty","global_search_objectSpread","global_search_extends","search_results","queryParameter","LoginModal","registerLink","registerLinkLabel","login_modal_extends","MouseoverLink","createRef","timeout","mouseover_link_assertThisInitialized","onMousehold","onMouseIn","onMouseOut","mouseover_link_objectWithoutProperties","mouseover_link_extends","CategoryLink","categoryName","_ref$tabIndex","ShapeLink","shape_link_extends","SubMenu","categoriesTitle","categories","shapesTitle","shapes","closeLabel","linkListsTitle","_ref$isHidden","isHidden","linksTabindex","category_link","sub_menu_extends","shape_link","is-editorial","editorial","is-only-list","is-two-columns","MainNav","activeSubMenu","hasActiveSubMenu","menuName","shouldAnimateSubMenu","TinyTransition","is-mobile","is-expanded","mouseover_link","main_nav_extends","data-test-main-nav-link","toggleSubMenu","main-nav-submenu--active","main-nav-submenu--animate","sub_menu","hideSubMenus","supportMenu","myPageLink","toggleLogin","bookAppointmentLink","hideMobileMenu","topPosition","SCROLL_THRESHOLD","Header","headerBarHeight","isCartVisible","isLoginVisible","isSearchVisible","isTablet","mobileMenuIsOpen","isScrolled","isMobileHeaderBarHidden","headerStickyWrapper","headerOffsetTop","scrollIntoView","scrollY","headerBar","lastScrollY","toggleMobileMenu","headerNode","findDOMNode","header_assertThisInitialized","isNaN","bottomPosition","closest","handleScroll","detectHeaderStickyWrapperOffset","infoBannerVisibilityChanged","searchPageLink","wishListLink","bookAppointmentLinkMobile","_this$state","ModalContentWrapper","searchId","header-scrolled","header-bar-hidden","header-mobile-menu-opened","header_extends","hideMenuText","showMenuText","linkToHome","toggleSearch","has-products","toggleCart","main_nav","mainNavigation","hideModals","login_modal","loginModal","global_search","IframePage","iframeURL","LinkList","link_list_extends","LoginForm","login_form_extends","forgotPassword","LoginPage","login_form","login_page_extends","Message","isErrorMessage","numberOfSecondsToShowMessage","show","is-error","MyConsents","consentList","consent","MyOrdersItem","date","packageTrackingLink","my_orders_item_extends","MyOrders","visibleRows","hiddenRows","my_orders_item","my_orders_extends","MyPageSidebarSection","linkIcon","my_page_sidebar_section_extends","OrderAgainButton","order_again_button_extends","OrderListItem","amount","productDescription","OrderList","orderAgain","order_list_item","order_list_extends","order_again_button","PersonalDetails","MyPage","appointments","appointmentsSection","customerDataImport","customerDataImportSection","orders","ordersSection","previousOrder","previousOrderSection","previousStorePurchase","previousStorePurchaseSection","consentListSection","personalDetails","personalDetailsSection","customer_data_import_form","order_list","my_orders","my_page_sidebar_section","my_page_extends","showLinkIcon","appointments_appointments","my_consents","personal_details","NewsletterFormBlock","newsletter_form_block_extends","OpeningHoursMeta","monday","tuesday","wednesday","thursday","friday","saturday","sunday","itemprop","RegistrationBanner","registration_banner_extends","print","OrderSummary","getIframeEndpoint","orderConfirmationHeading","orderConfirmationDescription","order_summary_extends","registrationBanner","registration_banner","order","printLabel","Quote","RegisterPage","SearchPage","category_page","search_page_extends","Banner","collapsable_rich_text","banner_extends","cookies","Cookies","SiteInfoBanner","cookieExpirationTimeInSeconds","rest","site_info_banner_objectWithoutProperties","site_info_banner_slicedToArray","showBanner","setShowBanner","banner","site_info_banner_extends","set","path","maxAge","StaticContainer","shouldUpdate","StorePageHeader","openingHoursMeta","openingHoursLabel","addressMeta","geoMeta","openingHoursMeta_openingHoursMeta","streetAddress","addressLocality","StorePage","mapEmbedUrl","mapLink","store_page_extends","store_page_header","__webpack_exports__","accordion_list","add_to_cart_confirmation","article_page","booking_page","brand_page","breadcrumbs","campaign_banner_carousel","category_block","change_email_page","change_password_page","chat","checkout_page","checkout_page_legacy","consent_page","contact_lens_page","cta_block_small","cta_carousel","edit_profile_page","email_template_email_template","embed_video_embed_video","error_page","find_store_block","find_store_page","footer","forgot_password_page","frontpage","glasses_page","header_header","iframe_page","link_list","login_page","message_message","my_page","newsletter_form_block","order_summary","quote","react_component","register_page","search_page","site_info_banner","static_container","store_page","validation_error_texts","global","./basket.svg","./big-arrow-right.svg","./big-x.svg","./category-kids-glasses.svg","./category-kids.svg","./category-man-glasses.svg","./category-man.svg","./category-woman-glasses.svg","./category-woman.svg","./checkmark-micro.svg","./checkmark.svg","./eye.svg","./facebook.svg","./heart.svg","./instagram.svg","./linkedin.svg","./magnifier.svg","./mail.svg","./pause.svg","./pen.svg","./pin.svg","./slider.svg","./small-arrow-down.svg","./small-arrow-left.svg","./small-arrow-right.svg","./small-minus.svg","./small-plus.svg","./small-x.svg","./zoom.svg","webpackContext","webpackContextResolve","Basket","BigArrowRight","BigX","CategoryKidsGlasses","cx","cy","CategoryKids","CategoryManGlasses","CategoryMan","CategoryWomanGlasses","CategoryWoman","CheckmarkMicro","stroke","strokeWidth","fillRule","strokeLinecap","Checkmark","Eye","Facebook","xlinkHref","mask","Heart","Instagram","Linkedin","Magnifier","Mail","Pause","Pen","Pin","Slider","SmallArrowDown","SmallArrowLeft","SmallArrowRight","SmallMinus","SmallPlus","SmallX","Zoom","class_list","HTMLElement","self","classes","join","ret","remove","touchEndHappened","classListPolyfill","keyCodeWhiteList"],"mappings":"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","file":"client.3093438ff3c488b8a402.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(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 \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 = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\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([330,3]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import PropTypes from 'prop-types';\r\n\r\n// Creates proptype definition from themes\r\nexport default function(themes) {\r\n const singlePropType = PropTypes.oneOf(\r\n Object.keys(themes).map(key => themes[key])\r\n );\r\n\r\n return PropTypes.oneOfType([\r\n singlePropType,\r\n PropTypes.arrayOf(singlePropType)\r\n ]);\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport propTypeTheme from 'utils/prop-type-theme';\r\n\r\nconst themes = {\r\n big: 'theme-big',\r\n circle: 'theme-circle',\r\n gray: 'theme-gray',\r\n orange: 'theme-orange',\r\n outline: 'theme-outline',\r\n light: 'theme-light',\r\n mini: 'theme-mini',\r\n plain: 'theme-plain',\r\n white: 'theme-white',\r\n uppercase: 'theme-uppercase',\r\n link: 'theme-link'\r\n};\r\n\r\nconst sizes = {\r\n small: 'small',\r\n normal: 'normal'\r\n};\r\n\r\nconst Button = ({\r\n attributes,\r\n className,\r\n children,\r\n disabled,\r\n formId,\r\n tabIndex,\r\n htmlFor,\r\n onClick,\r\n prependChildren,\r\n text,\r\n theme,\r\n type,\r\n url,\r\n ctaTitle,\r\n ctaType,\r\n title,\r\n size = sizes.normal\r\n}) => {\r\n // NOTE: The backend will occasionally send Button models where every property is null or an empty string. To avoid rendering buttons in these cases, a lot of null checking is needed.\r\n if (!(text || children) && !url && !onClick && !htmlFor) {\r\n return null;\r\n }\r\n\r\n let ButtonComponent;\r\n const themeList =\r\n typeof theme === 'object' && theme !== null ? [...theme] : [theme];\r\n\r\n let buttonProps = {\r\n ...attributes,\r\n className: cn('button', className, ...themeList, {\r\n 'has-children': children,\r\n 'size-small': size === sizes.small\r\n }),\r\n form: formId,\r\n onClick: onClick,\r\n 'data-cta-title': ctaTitle ? ctaTitle : null,\r\n 'data-cta-type': ctaType ? ctaType : null,\r\n title: title ? title : null\r\n };\r\n\r\n if (htmlFor) {\r\n ButtonComponent = 'label';\r\n buttonProps = { ...buttonProps, htmlFor };\r\n } else if (url) {\r\n ButtonComponent = 'a';\r\n buttonProps = { ...buttonProps, href: url };\r\n } else {\r\n ButtonComponent = 'button';\r\n buttonProps = { ...buttonProps, disabled: disabled, type: type };\r\n }\r\n\r\n return (\r\n <ButtonComponent {...buttonProps} tabIndex={tabIndex}>\r\n {prependChildren && children}\r\n {text && <span>{text}</span>}\r\n {!prependChildren && children}\r\n </ButtonComponent>\r\n );\r\n};\r\n\r\nButton.propTypes = {\r\n attributes: PropTypes.object,\r\n className: PropTypes.string,\r\n children: PropTypes.node,\r\n disabled: PropTypes.bool,\r\n formId: PropTypes.string,\r\n htmlFor: PropTypes.string,\r\n tabIndex: PropTypes.number,\r\n onClick: PropTypes.func,\r\n prependChildren: PropTypes.bool,\r\n text: PropTypes.string,\r\n theme: propTypeTheme(themes),\r\n type: PropTypes.oneOf(['button', 'submit']),\r\n url: PropTypes.string,\r\n ctaTitle: PropTypes.string,\r\n ctaType: PropTypes.string,\r\n title: PropTypes.string,\r\n size: PropTypes.oneOf(Object.values(sizes))\r\n};\r\n\r\nButton.propTypesMeta = {\r\n attributes: 'exclude',\r\n className: 'exclude',\r\n disabled: 'exclude',\r\n tabIndex: 'exclude',\r\n formId: 'exclude',\r\n htmlFor: 'exclude',\r\n prependChildren: 'exclude',\r\n theme: 'exclude',\r\n type: 'exclude',\r\n ctaTitle: 'exclude',\r\n ctaType: 'exclude',\r\n title: 'exclude',\r\n size: 'exclude'\r\n};\r\n\r\nButton.defaultProps = {\r\n type: 'button',\r\n theme: []\r\n};\r\n\r\nButton.themes = themes;\r\nButton.sizes = sizes;\r\n\r\nexport default Button;\r\n","const req = require.context('./', true, /\\.svg$/);\r\n\r\nexport default req.keys().reduce((icons, filename) => {\r\n const id = filename.replace('./', '').replace('.svg', '');\r\n return { ...icons, [id]: req(filename) };\r\n}, {});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport icons from '../../assets/icons/icons';\r\n\r\nconst Icon = ({ className, name }) =>\r\n icons[name]\r\n ? React.createElement(icons[name], {\r\n className: cn('icon', className),\r\n focusable: 'false'\r\n })\r\n : null;\r\n\r\nIcon.propTypes = {\r\n className: PropTypes.string,\r\n name: PropTypes.oneOf(Object.keys(icons)).isRequired\r\n};\r\n\r\nIcon.propTypesMeta = 'exclude';\r\n\r\nexport default Icon;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst editTypes = {\r\n floating: 'floating',\r\n flyout: 'flyout',\r\n inline: 'inlin',\r\n webcontrol: 'webcontrol'\r\n};\r\n\r\nclass OnPageEditing extends React.PureComponent {\r\n static propTypes = {\r\n children: PropTypes.node,\r\n editType: PropTypes.oneOf(Object.values(editTypes)),\r\n element: PropTypes.string,\r\n name: PropTypes.string\r\n };\r\n\r\n static propTypesMeta = 'exclude';\r\n\r\n render() {\r\n if (this.props.name) {\r\n return React.createElement(\r\n this.props.element || 'div',\r\n {\r\n 'data-epi-property-name': this.props.name,\r\n 'data-epi-use-mvc': 'True',\r\n 'data-epi-property-edittype': this.props.editType\r\n },\r\n this.props.children\r\n );\r\n }\r\n\r\n return this.props.children || null;\r\n }\r\n}\r\n\r\nOnPageEditing.editTypes = editTypes;\r\n\r\nexport default OnPageEditing;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nconst themes = {\r\n default: 'default',\r\n fancyBullets: 'theme-fancy-bullets',\r\n centered: 'theme-centered',\r\n white: 'theme-white'\r\n};\r\n\r\nconst RichText = ({ className, element, text, theme }) =>\r\n React.createElement(element, {\r\n className: cn('rich-text', className, theme),\r\n dangerouslySetInnerHTML: { __html: text }\r\n });\r\n\r\nRichText.propTypes = {\r\n className: PropTypes.string,\r\n element: PropTypes.string,\r\n text: PropTypes.string,\r\n theme: PropTypes.oneOf(Object.values(themes))\r\n};\r\n\r\nRichText.propTypesMeta = {\r\n className: 'exclude',\r\n element: 'exclude',\r\n theme: 'exclude'\r\n};\r\n\r\nRichText.defaultProps = {\r\n element: 'div'\r\n};\r\n\r\nRichText.themes = themes;\r\n\r\nexport default RichText;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport Collapse from 'react-tiny-collapse';\r\n\r\nimport Button from '../button';\r\nimport Icon from '../icon';\r\nimport OnPageEditing from '../on-page-editing';\r\nimport RichText from '../rich-text';\r\n\r\nclass Accordion extends React.Component {\r\n static propTypes = {\r\n id: PropTypes.string, // NOTE: Used as key in AccordionList\r\n OPE: PropTypes.exact({\r\n text: PropTypes.string,\r\n title: PropTypes.string\r\n }),\r\n showBorder: PropTypes.bool,\r\n text: PropTypes.exact(RichText.propTypes),\r\n title: PropTypes.string\r\n };\r\n\r\n static propTypesMeta = {\r\n showBorder: 'exclude'\r\n };\r\n\r\n static defaultProps = {\r\n OPE: {},\r\n showBorder: true\r\n };\r\n\r\n state = {\r\n id: null,\r\n isExpanded: false\r\n };\r\n\r\n toggle = () => {\r\n this.setState(state => ({ isExpanded: !state.isExpanded }));\r\n };\r\n\r\n componentDidMount() {\r\n // Setting the id inside of a requestAnimationFrame callback seems to ensure that no two Accordions get the same id.\r\n requestAnimationFrame(() => {\r\n this.setState({ id: new Date().getTime() });\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n <div\r\n className={cn('accordion', { 'has-border': this.props.showBorder })}\r\n key={this.props.id}\r\n >\r\n <Button\r\n attributes={{\r\n 'aria-controls': this.state.id,\r\n 'aria-expanded': this.state.isExpanded\r\n }}\r\n className={cn({ 'is-active': this.state.isExpanded })}\r\n onClick={this.toggle}\r\n theme={Button.themes.plain}\r\n type=\"button\"\r\n >\r\n <div className=\"accordion-header\">\r\n <OnPageEditing name={this.props.OPE.title}>\r\n <span>{this.props.title}</span>\r\n </OnPageEditing>\r\n <div className=\"accordion-icon\">\r\n <Icon name=\"small-arrow-down\" />\r\n </div>\r\n </div>\r\n </Button>\r\n\r\n <Collapse\r\n componentProps={{ id: this.state.id }}\r\n isOpen={this.state.isExpanded}\r\n >\r\n <OnPageEditing name={this.props.OPE.text}>\r\n <RichText\r\n className=\"accordion-content\"\r\n theme={RichText.themes.centered}\r\n {...this.props.text}\r\n />\r\n </OnPageEditing>\r\n </Collapse>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default Accordion;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Accordion from '../accordion';\r\n\r\nconst AccordionList = ({ items }) =>\r\n !items.length ? null : (\r\n <ul className=\"accordion-list\">\r\n {items.map(item => (\r\n <li key={item.id}>\r\n <Accordion showBorder={false} {...item} />\r\n </li>\r\n ))}\r\n </ul>\r\n );\r\n\r\nAccordionList.propTypes = {\r\n items: PropTypes.arrayOf(PropTypes.exact(Accordion.propTypes))\r\n};\r\n\r\nAccordionList.defaultProps = {\r\n items: []\r\n};\r\n\r\nexport default AccordionList;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Button from '../button';\r\nimport Icon from '../icon';\r\n\r\nconst AddToCartButton = ({ text }) => (\r\n <Button\r\n attributes={{ 'data-test-add-to-cart-button': '' }}\r\n className=\"add-to-cart-button\"\r\n theme={[Button.themes.orange, Button.themes.uppercase]}\r\n type=\"submit\"\r\n text={text}\r\n >\r\n <Icon className=\"add-to-cart-button-icon\" name=\"basket\" />\r\n </Button>\r\n);\r\n\r\nAddToCartButton.propTypes = {\r\n text: PropTypes.string\r\n};\r\n\r\nAddToCartButton.propTypesMeta = 'exclude';\r\n\r\nAddToCartButton.defaultProps = {\r\n text: 'Legg i handlevogn'\r\n};\r\n\r\nexport default AddToCartButton;\r\n","import React from 'react';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport Button from '../button';\r\nimport Icon from '../icon';\r\n\r\n// eslint-disable-next-line react/prop-types\r\nconst ArrowButton = ({ className, theme, ...props }) => (\r\n <Button className={cn('arrow-button', className)} theme={theme} {...props}>\r\n <Icon className=\"arrow-button-icon\" name=\"big-arrow-right\" />\r\n </Button>\r\n);\r\n\r\nArrowButton.propTypes = Button.propTypes;\r\n\r\nArrowButton.defaultProps = {\r\n theme: Button.themes.orange\r\n};\r\n\r\nexport default ArrowButton;\r\n","/*eslint no-unused-vars: 0*/\r\nimport get from 'lodash/get';\r\nimport merge from 'lodash/merge';\r\n\r\nimport isRunningOnClient from '@creuna/utils/is-running-on-client';\r\nimport stripUndefined from '@creuna/utils/strip-undefined';\r\nimport tryParseJson from '@creuna/utils/try-parse-json';\r\n\r\n/* NOTE: Implement Google Tag Manager for this module to work correctly\r\n\r\n Step 1\r\n Copy the following JavaScript and paste it as close to the opening <head> tag as possible on every page of your website\r\n <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-XXXXXXX');</script>\r\n\r\n Step 2\r\n Copy the following snippet and paste it immediately after the opening <body> tag on every page of your website\r\n <noscript><iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-XXXXXXX\" height=\"0\" width=\"0\" style=\"display:none visibility:hidden\"></iframe></noscript>\r\n*/\r\n\r\n// NOTE: See https://docs.google.com/spreadsheets/d/1Q5eLVcFdGxVhnz-17I_V77QQeCZPPum7PwAeuMkwFms/ for the initial/incomplete/confusing tracking spec.\r\n\r\nfunction Timeout(fn, delay) {\r\n const id = setTimeout(() => {\r\n this.clear();\r\n fn();\r\n }, delay);\r\n\r\n this.cleared = false;\r\n this.clear = () => {\r\n this.cleared = true;\r\n clearTimeout(id);\r\n };\r\n}\r\n\r\nfunction getCallbackEnhancedData(data, callback) {\r\n if (typeof callback !== 'function') {\r\n return data;\r\n }\r\n\r\n // NOTE: The timeout will call the callback after the delay unless eventCallback is called first, clearing the timeout.\r\n // This ensures that the callback will be called even if GTM is unavailable or can't handle the event fast enough.\r\n const callbackTimeout = new Timeout(callback, 300);\r\n\r\n return Object.assign({}, data, {\r\n eventCallback: () => {\r\n if (!callbackTimeout.cleared) {\r\n callbackTimeout.clear();\r\n callback();\r\n }\r\n }\r\n });\r\n}\r\n\r\nfunction send(data, callback) {\r\n if (!data || !isRunningOnClient) {\r\n return;\r\n }\r\n\r\n window.dataLayer = window.dataLayer || [];\r\n\r\n if (data.length) {\r\n data.forEach(dataObject => {\r\n window.dataLayer.push(getCallbackEnhancedData(dataObject, callback));\r\n });\r\n } else {\r\n window.dataLayer.push(getCallbackEnhancedData(data, callback));\r\n }\r\n}\r\n\r\nfunction onProductClick(\r\n { name, id, productId, price, brand, category, itemName, position, url },\r\n callback\r\n) {\r\n if (!(id || name)) {\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n\r\n return;\r\n }\r\n\r\n send(\r\n {\r\n event: 'productClick',\r\n ecommerce: {\r\n click: {\r\n products: [\r\n {\r\n name,\r\n id: productId,\r\n price,\r\n brand,\r\n category,\r\n variant: itemName,\r\n position: position - 1\r\n }\r\n ]\r\n }\r\n },\r\n eventCallback: function() {\r\n document.location = url;\r\n }\r\n },\r\n\r\n callback\r\n );\r\n}\r\n\r\nexport default {\r\n onProductClick,\r\n send\r\n};\r\n","import PubSub from 'pubsub-js';\r\n\r\nimport topics from 'js/topics.json';\r\n\r\nfunction onTopic(topic, func) {\r\n if (typeof func !== 'function') {\r\n return;\r\n }\r\n\r\n return PubSub.subscribe(topic, (topic, { message, title }) => {\r\n func({ message, title });\r\n });\r\n}\r\n\r\nfunction send(topic, { message, title }) {\r\n PubSub.publish(topic, { message, title });\r\n}\r\n\r\nconst onErrorMessage = func => onTopic(topics.errorMessage, func);\r\n\r\nfunction off(token) {\r\n if (!token) {\r\n return;\r\n }\r\n\r\n PubSub.unsubscribe(token);\r\n}\r\n\r\nconst onMessage = func => onTopic(topics.message, func);\r\n\r\nconst sendErrorMessage = ({ message, title }) =>\r\n send(topics.errorMessage, { message, title });\r\n\r\nconst sendMessage = ({ message, title }) =>\r\n send(topics.message, { message, title });\r\n\r\nexport default {\r\n onErrorMessage,\r\n off,\r\n onMessage,\r\n sendErrorMessage,\r\n sendMessage\r\n};\r\n","import analytics from './analytics';\r\nimport getData from '@creuna/utils/get-data';\r\nimport messenger from './utils/messenger';\r\n\r\nconst defaultFetchOptions = {\r\n headers: {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json'\r\n },\r\n credentials: 'include'\r\n};\r\n\r\nfunction parseResponse(response) {\r\n return response.json().then(json => ({ json, response }));\r\n}\r\n\r\nfunction handleUserMessages({ json, response }) {\r\n if (json.messageToUser) {\r\n if (json.success) {\r\n messenger.sendMessage({ message: json.messageToUser });\r\n } else {\r\n messenger.sendErrorMessage({ message: json.messageToUser });\r\n }\r\n }\r\n\r\n return { json, response };\r\n}\r\n\r\nfunction handleAnalytics({ json, response }) {\r\n if (json.analytics) {\r\n analytics.send(json.analytics);\r\n }\r\n\r\n return { json, response };\r\n}\r\n\r\nfunction handleNotOk({ json, response }) {\r\n // NOTE: `response.ok` is true when the returned status is in the inclusive range 200-299.\r\n if (!response.ok && !json.messageToUser) {\r\n const error = new Error(response.statusText);\r\n\r\n error.name = `${response.status} on ${response.url}`;\r\n\r\n throw error;\r\n }\r\n\r\n return { json, response };\r\n}\r\n\r\nfunction handleRedirect({ json }) {\r\n if (json.redirectUrl) {\r\n window.location = json.redirectUrl;\r\n }\r\n return { json };\r\n}\r\n\r\nfunction handleResponse({ json }) {\r\n return json.payload || json;\r\n}\r\n\r\nfunction handleFetchError(error) {\r\n messenger.sendErrorMessage({\r\n message:\r\n getData('generic-error-message') ||\r\n 'Noe gikk galt. Vennligst prøv igjen senere.'\r\n });\r\n\r\n return Promise.reject(error);\r\n}\r\n\r\nfunction request(url, options) {\r\n return fetch(url, options)\r\n .then(parseResponse)\r\n .then(handleUserMessages)\r\n .then(handleAnalytics)\r\n .then(handleNotOk)\r\n .then(handleRedirect)\r\n .then(handleResponse)\r\n .catch(handleFetchError);\r\n}\r\n\r\nfunction post(endpoint, data) {\r\n return request(\r\n endpoint,\r\n Object.assign({}, defaultFetchOptions, {\r\n body: data,\r\n method: 'post'\r\n })\r\n );\r\n}\r\n\r\nfunction get(endpoint) {\r\n return request(endpoint, defaultFetchOptions);\r\n}\r\n\r\nfunction execute(endpoint, data) {\r\n if (endpoint.startsWith('/static-site/api')) {\r\n console.log('Requesting mock data from', endpoint, Object.assign({}, data)); // eslint-disable-line no-console\r\n return new Promise(resolve => {\r\n setTimeout(() => {\r\n resolve(\r\n request(endpoint, defaultFetchOptions).then(result => {\r\n console.log('Response from', endpoint, result); // eslint-disable-line no-console\r\n return result;\r\n })\r\n );\r\n }, 1000);\r\n });\r\n }\r\n\r\n return post(endpoint, JSON.stringify(data));\r\n}\r\n\r\nexport default {\r\n execute,\r\n get\r\n};\r\n","import { addValidationRule } from 'formsy-react';\r\n\r\nconst rules = {\r\n isRequired: (allFields, value) => {\r\n var hasValue = !!value && value.length !== 0;\r\n\r\n if (typeof value === 'object') {\r\n hasValue = hasValue && Object.keys(value).length !== 0;\r\n }\r\n\r\n return hasValue;\r\n },\r\n isBirthDate: (allFields, value) => {\r\n if (value) {\r\n if (!value.match(/\\d{6}/)) {\r\n return false;\r\n }\r\n\r\n const day = parseInt(value.substr(0, 2));\r\n const month = parseInt(value.substr(2, 2));\r\n\r\n if (day < 1 || day > 31 || month < 1 || month > 12) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n isConditionallyRequired: (allFields, value, otherFieldsString) => {\r\n var otherFields = otherFieldsString.split('.');\r\n\r\n for (var i = 0; i < otherFields.length; i++) {\r\n if (!allFields[otherFields[i]] && !value) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n isEmailRepeat: (allFields, value, otherField) => {\r\n return !value || value === allFields[otherField];\r\n },\r\n isPhoneNumber: (allFields, value) => {\r\n return !value || value.match(/^\\+?[\\d-()\\s]{7,}\\d$/);\r\n },\r\n isPostalCode: (allFields, value) => {\r\n if (value && !value.match(/^\\d{4}$/)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n};\r\n\r\nfor (var key in rules) {\r\n addValidationRule(key, rules[key]);\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport api from '../../js/api-helper';\r\nimport deepClone from '@creuna/utils/deep-clone';\r\nimport isEqual from '@creuna/utils/is-equal';\r\n\r\nimport Button from '../button';\r\nimport Formsy from 'formsy-react';\r\nimport './formsy-with-validation';\r\n\r\nclass Form extends React.Component {\r\n static propTypes = {\r\n children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\r\n className: PropTypes.string,\r\n endpoint: PropTypes.string.isRequired,\r\n id: PropTypes.string,\r\n onBeforeSubmit: PropTypes.func,\r\n onChange: PropTypes.func,\r\n onInvalidSubmit: PropTypes.func,\r\n onResponse: PropTypes.func,\r\n onRef: PropTypes.func,\r\n onValidate: PropTypes.func, // Local Formsy validation\r\n onValidationResponse: PropTypes.func, // Server side validation\r\n showSubmitButton: PropTypes.bool,\r\n submitLabel: PropTypes.string,\r\n validationEndpoint: PropTypes.string\r\n };\r\n\r\n static propTypesMeta = 'exclude';\r\n\r\n static defaultProps = {\r\n onBeforeSubmit: () => {},\r\n onChange: () => {},\r\n onInvalidSubmit: () => {},\r\n onResponse: () => {},\r\n onRef: () => {},\r\n onValidate: () => {},\r\n onValidationResponse: () => {},\r\n showSubmitButton: true\r\n };\r\n\r\n state = {\r\n isLoading: false,\r\n isValidating: false\r\n };\r\n\r\n formData = {};\r\n\r\n isValidationModel = responseObject => {\r\n if (!Object.keys(responseObject).length) {\r\n return false;\r\n }\r\n\r\n const model = this.formsy.getModel();\r\n return Object.keys(responseObject).every(\r\n key => Object.keys(model).indexOf(key) !== -1\r\n );\r\n };\r\n\r\n onChange = formData => {\r\n if (!isEqual(formData, this.formData)) {\r\n this.props.onChange(formData);\r\n this.formData = deepClone(formData);\r\n }\r\n };\r\n\r\n onValidSubmit = (formData, resetForm, invalidateForm) => {\r\n if (this.state.isLoading) {\r\n return;\r\n }\r\n\r\n // Use formdata from onBeforeSubmit only if it returned data\r\n formData = this.props.onBeforeSubmit(formData)\r\n ? this.props.onBeforeSubmit(formData)\r\n : formData;\r\n\r\n if (this.props.validationEndpoint) {\r\n this.setState({ isLoading: true }, () => {\r\n api\r\n .execute(this.props.validationEndpoint, formData)\r\n .then(response => {\r\n if (this.isValidationModel(response)) {\r\n invalidateForm(response);\r\n this.props.onValidationResponse(false);\r\n this.setState({ isLoading: false });\r\n } else {\r\n this.props.onValidationResponse(true);\r\n this.doApiSubmit(formData);\r\n }\r\n })\r\n .catch(() => {\r\n this.setState({ isLoading: false });\r\n this.props.onResponse({});\r\n });\r\n });\r\n } else {\r\n this.doApiSubmit(formData);\r\n }\r\n };\r\n\r\n doApiSubmit = formData => {\r\n this.setState(\r\n {\r\n isLoading: true\r\n },\r\n () => {\r\n api\r\n .execute(this.props.endpoint, formData)\r\n .then(response => {\r\n this.setState({ isLoading: false });\r\n this.props.onResponse(response);\r\n })\r\n .catch(() => {\r\n this.setState({ isLoading: false });\r\n this.props.onResponse({});\r\n });\r\n }\r\n );\r\n };\r\n\r\n render() {\r\n return (\r\n <Formsy\r\n action={this.props.endpoint}\r\n className={cn('form', this.props.className)}\r\n id={this.props.id}\r\n method=\"post\"\r\n onChange={this.onChange}\r\n onValid={() => this.props.onValidate(true)}\r\n onValidSubmit={this.onValidSubmit}\r\n onInvalid={() => this.props.onValidate(false)}\r\n onInvalidSubmit={this.props.onInvalidSubmit}\r\n ref={formsy => {\r\n this.formsy = formsy;\r\n this.props.onRef(formsy);\r\n }}\r\n tabIndex={-1}\r\n noValidate\r\n >\r\n {typeof this.props.children === 'function'\r\n ? this.props.children({ isLoading: this.state.isLoading })\r\n : this.props.children}\r\n {this.props.showSubmitButton && (\r\n <div className=\"form-nav\">\r\n <Button\r\n className=\"form-submit\"\r\n disabled={this.state.isLoading}\r\n text={this.props.submitLabel}\r\n type=\"submit\"\r\n />\r\n </div>\r\n )}\r\n </Formsy>\r\n );\r\n }\r\n}\r\n\r\nexport default Form;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { withFormsy } from 'formsy-react';\r\n\r\n// This component uses the withFormsy HOC. See the supported props here: https://github.com/formsy/formsy-react/blob/master/API.md\r\nclass FormsyWrapper extends React.Component {\r\n static propTypes = {\r\n children: PropTypes.func,\r\n getErrorMessage: PropTypes.func, // From Formsy HOC\r\n getValue: PropTypes.func, // From Formsy HOC\r\n initialValue: PropTypes.any,\r\n isPristine: PropTypes.func, // From Formsy HOC\r\n isValid: PropTypes.func, // From Formsy HOC\r\n onValidate: PropTypes.func,\r\n setValue: PropTypes.func // From Formsy HOC\r\n };\r\n\r\n static propTypesMeta = 'exclude';\r\n\r\n isValid = this.props.isValid();\r\n\r\n static defaultProps = {\r\n onValidate: () => {}\r\n };\r\n\r\n componentDidMount() {\r\n if (this.props.initialValue) {\r\n this.props.setValue(this.props.initialValue);\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.props.isValid() !== this.isValid) {\r\n this.isValid = this.props.isValid();\r\n this.props.onValidate(this.props.isValid());\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <React.Fragment>\r\n {this.props.children({\r\n getErrorMessage: this.props.getErrorMessage,\r\n getValue: this.props.getValue,\r\n isPristine: this.props.isPristine,\r\n isValid: this.props.isValid,\r\n setValue: this.props.setValue\r\n })}\r\n </React.Fragment>\r\n );\r\n }\r\n}\r\n\r\nexport default withFormsy(FormsyWrapper);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport FormsyWrapper from 'components/formsy-wrapper';\r\n\r\nconst HiddenInput = ({ name, value }) => (\r\n <FormsyWrapper name={name} value={value}>\r\n {() => <input type=\"hidden\" name={name} value={value} />}\r\n </FormsyWrapper>\r\n);\r\n\r\nHiddenInput.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.string\r\n};\r\n\r\nexport default HiddenInput;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\nimport get from 'lodash/get';\r\n\r\nimport Collapse from 'react-tiny-collapse';\r\n\r\nimport propTypeTheme from 'utils/prop-type-theme';\r\n\r\nimport FormsyWrapper from 'components/formsy-wrapper';\r\nimport HiddenInput from 'components/form-elements/hidden-input';\r\nimport Icon from 'components/icon';\r\n\r\nconst themes = {\r\n gray: 'theme-gray'\r\n};\r\n\r\nconst getLabel = (options, value, placeholder) => {\r\n const fallback =\r\n get(options.find(o => o.selected), 'label', placeholder) ||\r\n get(options, '[0].label');\r\n\r\n return get(options.find(o => o.value === value), 'label', fallback);\r\n};\r\n\r\nclass Select extends React.Component {\r\n static propTypes = {\r\n ariaLabelledBy: PropTypes.string,\r\n defaultScrollToValue: PropTypes.string,\r\n enableValidation: PropTypes.bool,\r\n idPrefix: PropTypes.string,\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n options: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n label: PropTypes.string,\r\n value: PropTypes.string,\r\n selected: PropTypes.bool\r\n })\r\n ),\r\n placeholder: PropTypes.string,\r\n shouldShowCheckmark: PropTypes.bool,\r\n theme: propTypeTheme(themes),\r\n validations: PropTypes.string,\r\n validationErrors: PropTypes.object\r\n };\r\n\r\n static propTypesMeta = {\r\n ariaLabelledBy: 'exclude',\r\n enableValidation: 'exclude',\r\n idPrefix: 'exclude',\r\n shouldShowCheckmark: 'exclude',\r\n theme: 'exclude',\r\n validations: 'exclude',\r\n validationErrors: 'exclude'\r\n };\r\n\r\n selectedOption = null;\r\n scrollContainer = null;\r\n\r\n static defaultProps = {\r\n enableValidation: true,\r\n options: [],\r\n shouldShowCheckmark: true\r\n };\r\n\r\n state = {\r\n dropdownIsVisible: false,\r\n isMounted: false\r\n };\r\n\r\n getInitialValue = () => {\r\n const selectedOption = this.props.options.find(option => option.selected);\r\n const firstValue = get(this.props.options[0], 'value', {});\r\n const initialValue =\r\n get(selectedOption, 'value') ||\r\n (this.props.placeholder ? '' : firstValue);\r\n return initialValue;\r\n };\r\n\r\n componentDidMount() {\r\n this.setState({ isMounted: true });\r\n\r\n window.addEventListener('click', this.handleClickOutside);\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('click', this.handleClickOutside);\r\n }\r\n\r\n handleClickOutside = e => {\r\n if (\r\n this.fakeSelect &&\r\n e.target !== this.fakeSelect &&\r\n !this.fakeSelect.contains(e.target)\r\n ) {\r\n this.setState({ dropdownIsVisible: false });\r\n }\r\n };\r\n\r\n scrollToSelectedOption = () => {\r\n if (!this.selectedOption || !this.scrollContainer) return;\r\n\r\n const elementPosition = this.selectedOption.offsetTop;\r\n const elementHeight = this.selectedOption.offsetHeight;\r\n const containerHeight = this.scrollContainer.offsetHeight;\r\n this.scrollContainer.scrollTop =\r\n elementPosition + elementHeight - containerHeight / 2;\r\n };\r\n\r\n hideDropdown = () => {\r\n this.setState({ dropdownIsVisible: false });\r\n };\r\n\r\n toggleDropdown = () => {\r\n this.setState(\r\n state => ({ dropdownIsVisible: !state.dropdownIsVisible }),\r\n () => {\r\n if (this.state.dropdownIsVisible) {\r\n this.scrollToSelectedOption();\r\n }\r\n }\r\n );\r\n };\r\n\r\n render() {\r\n return (\r\n <FormsyWrapper\r\n initialValue={this.getInitialValue()}\r\n name={this.props.name}\r\n validationErrors={this.props.validationErrors}\r\n validations={this.props.validations}\r\n >\r\n {({ getValue, getErrorMessage, isPristine, isValid, setValue }) => {\r\n const ariaAttributes = this.props.ariaLabelledBy\r\n ? { 'aria-labelledby': this.props.ariaLabelledBy }\r\n : {};\r\n\r\n const label = getLabel(\r\n this.props.options,\r\n getValue(),\r\n this.props.placeholder\r\n );\r\n\r\n const showError =\r\n this.props.enableValidation && !isPristine() && !isValid();\r\n\r\n const id = this.props.label\r\n ? (this.props.idPrefix || '') + '-' + this.props.name\r\n : null;\r\n\r\n if (this.props.options.length === 1) {\r\n const [firstOption] = this.props.options;\r\n return (\r\n <React.Fragment>\r\n <div className=\"select-no-options\">{firstOption.label}</div>\r\n {this.props.name && (\r\n <HiddenInput name={this.props.name} {...firstOption} />\r\n )}\r\n </React.Fragment>\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n className={cn('select', this.props.theme, {\r\n 'has-error': showError,\r\n 'is-active': this.state.dropdownIsVisible,\r\n 'is-mounted': this.state.isMounted\r\n })}\r\n >\r\n <select\r\n name={this.props.name}\r\n id={id}\r\n onChange={e => {\r\n setValue(e.target.value);\r\n this.hideDropdown();\r\n }}\r\n value={getValue() || ''}\r\n {...ariaAttributes}\r\n >\r\n {this.props.placeholder && (\r\n <option value=\"\">{this.props.placeholder}</option>\r\n )}\r\n {this.props.options.map(option => (\r\n <option key={option.value} value={option.value}>\r\n {option.label}\r\n </option>\r\n ))}\r\n </select>\r\n\r\n <div className=\"select-fake\">\r\n <div\r\n data-test-select-button\r\n className=\"select-element\"\r\n onClick={this.toggleDropdown}\r\n ref={div => (this.fakeSelect = div)}\r\n >\r\n {this.props.label && (\r\n <label htmlFor={id}>{this.props.label}</label>\r\n )}\r\n\r\n {label}\r\n {(!getValue() || !this.props.shouldShowCheckmark) && (\r\n <Icon className=\"arrow\" name=\"small-arrow-down\" />\r\n )}\r\n {this.props.shouldShowCheckmark && !!getValue() && (\r\n <div className=\"select-checkmark\">\r\n <Icon name=\"checkmark\" />\r\n </div>\r\n )}\r\n </div>\r\n <Collapse\r\n className=\"select-dropdown\"\r\n isOpen={this.state.dropdownIsVisible}\r\n >\r\n <ul ref={el => (this.scrollContainer = el)}>\r\n {this.props.options.map(option => {\r\n const isSelected = option.value === getValue();\r\n const isScrollToElement =\r\n isSelected ||\r\n option.value === this.props.defaultScrollToValue;\r\n\r\n return (\r\n <li\r\n className={cn({ 'is-active': isSelected })}\r\n key={option.value}\r\n onClick={e => {\r\n e.stopPropagation();\r\n setValue(option.value);\r\n this.hideDropdown();\r\n }}\r\n ref={el => {\r\n if (isScrollToElement) this.selectedOption = el;\r\n }}\r\n {...(option.value\r\n ? { 'data-test-select-option': '' }\r\n : {})}\r\n >\r\n <span>{option.label}</span>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </Collapse>\r\n </div>\r\n\r\n <Collapse isOpen={showError}>\r\n <div className=\"select-error\">{getErrorMessage()}</div>\r\n </Collapse>\r\n </div>\r\n );\r\n }}\r\n </FormsyWrapper>\r\n );\r\n }\r\n}\r\n\r\nSelect.themes = themes;\r\n\r\nexport default Select;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport omit from 'lodash/omit';\r\n\r\nimport Collapse from 'react-tiny-collapse';\r\n\r\nimport Form from 'components/form';\r\nimport Select from 'components/form-elements/select';\r\n\r\nconst CartProductDetails = ({ endpoint, inputs, isExpanded }) => {\r\n return (\r\n <tr className=\"cart-product-details\">\r\n <td />\r\n <td colSpan={2}>\r\n <Collapse isOpen={isExpanded} unmountClosed={false}>\r\n <Form endpoint={endpoint} showSubmitButton={false}>\r\n <div className=\"cart-product-details-content\">\r\n {inputs.map(detail => (\r\n <div className=\"cart-product-detail\" key={detail.name}>\r\n <label>{detail.label}</label>\r\n <Select {...omit(detail, 'label')} />\r\n </div>\r\n ))}\r\n </div>\r\n </Form>\r\n </Collapse>\r\n </td>\r\n </tr>\r\n );\r\n};\r\n\r\nCartProductDetails.propTypes = {\r\n endpoint: PropTypes.string,\r\n inputs: PropTypes.arrayOf(PropTypes.exact(Select.propTypes)),\r\n isExpanded: PropTypes.bool\r\n};\r\n\r\nCartProductDetails.propTypesMeta = {\r\n isExpanded: 'exclude'\r\n};\r\n\r\nCartProductDetails.defaultProps = {\r\n endpoint: ''\r\n};\r\n\r\nexport default CartProductDetails;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport { logError } from '../../js/console';\r\nimport propTypeTheme from 'utils/prop-type-theme';\r\n\r\nconst themes = {\r\n big: 'theme-big',\r\n light: 'theme-light',\r\n bold: 'theme-bold',\r\n huge: 'theme-huge',\r\n mini: 'theme-mini',\r\n noStyle: 'theme-no-style',\r\n noUnderline: 'theme-no-underline',\r\n skew: 'theme-skew',\r\n skewUnderline: 'theme-skew-underline',\r\n white: 'theme-white'\r\n};\r\n\r\nclass Link extends React.Component {\r\n static propTypes = {\r\n attributes: PropTypes.object,\r\n children: PropTypes.node,\r\n className: PropTypes.string,\r\n isActive: PropTypes.bool,\r\n onClick: PropTypes.func,\r\n onRef: PropTypes.object,\r\n prependChildren: PropTypes.bool,\r\n text: PropTypes.string,\r\n theme: propTypeTheme(themes),\r\n url: PropTypes.string,\r\n useSpanElement: PropTypes.bool,\r\n tabindex: PropTypes.number\r\n };\r\n\r\n static propTypesMeta = {\r\n attributes: 'exclude',\r\n className: 'exclude',\r\n isActive: 'exclude',\r\n onRef: 'exclude',\r\n prependChildren: 'exclude',\r\n theme: 'exclude',\r\n useSpanElement: 'exclude',\r\n tabindex: 'exclude'\r\n };\r\n\r\n state = {\r\n role: null\r\n };\r\n\r\n componentDidMount() {\r\n this.setState({ role: this.props.onClick ? 'button' : null });\r\n }\r\n\r\n render() {\r\n const {\r\n children,\r\n className,\r\n prependChildren,\r\n text,\r\n theme,\r\n url,\r\n tabindex = null\r\n } = this.props;\r\n\r\n if (!url) {\r\n logError(\r\n `Url missing for 'Link' with text: ${text}, and className: ${className}`\r\n );\r\n return null;\r\n }\r\n\r\n const useSpan =\r\n this.props.useSpanElement ||\r\n !!children ||\r\n theme === themes.skew ||\r\n theme === themes.skewUnderline ||\r\n (theme && theme.indexOf(themes.skew) !== -1) ||\r\n (theme && theme.indexOf(themes.skewUnderline) !== -1);\r\n\r\n return (\r\n <a\r\n className={cn('link', className, theme, {\r\n 'has-children': !!children,\r\n 'has-children-before': !!children && prependChildren,\r\n 'has-span': useSpan,\r\n 'is-active': this.props.isActive\r\n })}\r\n href={url}\r\n onClick={this.props.onClick}\r\n ref={this.props.onRef}\r\n role={this.state.role}\r\n {...this.props.attributes}\r\n tabIndex={tabindex}\r\n >\r\n {prependChildren && children}\r\n {useSpan && text ? <span>{text}</span> : text}\r\n {!prependChildren && children}\r\n </a>\r\n );\r\n }\r\n}\r\n\r\nLink.themes = themes;\r\n\r\nexport default Link;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Link from 'components/link';\r\n\r\nconst CartProductStatus = ({ colSpan, text, link }) => (\r\n <tr className=\"cart-product-status\">\r\n <td colSpan={colSpan}>\r\n <span className=\"cart-product-status-text\">{text}</span>\r\n {link && <Link {...link} />}\r\n </td>\r\n </tr>\r\n);\r\n\r\nCartProductStatus.propTypes = {\r\n colSpan: PropTypes.number,\r\n text: PropTypes.string,\r\n link: PropTypes.exact(Link.propTypes)\r\n};\r\n\r\nCartProductStatus.propTypesMeta = {\r\n colSpan: 'exclude'\r\n};\r\n\r\nexport default CartProductStatus;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nconst ContainedImage = ({ alt, className, position, src }) => {\r\n return !src ? null : (\r\n <div\r\n className={cn('contained-image', className)}\r\n style={{\r\n backgroundImage: `url(${src})`,\r\n backgroundPosition: position\r\n }}\r\n >\r\n <img src={src} alt={alt} />\r\n </div>\r\n );\r\n};\r\n\r\nContainedImage.propTypes = {\r\n alt: PropTypes.string,\r\n className: PropTypes.string,\r\n position: PropTypes.string,\r\n src: PropTypes.string\r\n};\r\n\r\nContainedImage.propTypesMeta = 'exclude';\r\n\r\nexport default ContainedImage;\r\n","var transformBase = '?transform=DownFit&width=';\r\nvar breakpointResolution = 100;\r\n\r\nfunction getNewSrc(originalSrc, imageNodeWidth, currentImageWidth = 0) {\r\n if (typeof originalSrc !== 'string') {\r\n return originalSrc;\r\n }\r\n\r\n // NOTE: the image resizer plugin can't scale animated GIFs, so they are left as is.\r\n if (originalSrc.endsWith('.gif')) {\r\n return originalSrc;\r\n }\r\n\r\n var devicePixelRatio =\r\n typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;\r\n var adjustedWidth = imageNodeWidth * devicePixelRatio;\r\n\r\n // Return image resized up to closest 100px relative to imageNodeWidth\r\n return (\r\n originalSrc +\r\n transformBase +\r\n (adjustedWidth > currentImageWidth\r\n ? Math.ceil(adjustedWidth / breakpointResolution) * breakpointResolution\r\n : currentImageWidth)\r\n );\r\n}\r\n\r\nfunction loadAppropriateImage(imageNodeContainer) {\r\n var imageNode = imageNodeContainer.getElementsByTagName('img')[0],\r\n src = imageNodeContainer.getAttribute('data-src');\r\n\r\n // Remove transforms to get precise width\r\n imageNodeContainer.style.transform = 'none';\r\n var width = imageNodeContainer.offsetWidth;\r\n imageNodeContainer.style.transform = '';\r\n\r\n var newSrc = getNewSrc(src, width);\r\n\r\n imageNode.setAttribute('src', newSrc);\r\n imageNodeContainer.style.backgroundImage = `url(\"${newSrc}\")`;\r\n}\r\n\r\nfunction activate() {\r\n if (typeof window !== 'undefined' && window.document) {\r\n var imageNodeContainers = document.getElementsByClassName('fluid-image');\r\n var length = imageNodeContainers.length;\r\n\r\n for (var i = 0; i < length; i++) {\r\n loadAppropriateImage(imageNodeContainers[i]);\r\n }\r\n }\r\n}\r\n\r\nexport default {\r\n activate,\r\n getNewSrc,\r\n loadAppropriateImage\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport ContainedImage from 'components/contained-image';\r\nimport ImageLoader from '../../js/responsive-images';\r\n\r\nconst themes = {\r\n contained: 'theme-contained'\r\n};\r\n\r\nclass Image extends React.Component {\r\n static propTypes = {\r\n alt: PropTypes.string,\r\n className: PropTypes.string,\r\n containedPosition: PropTypes.string,\r\n draggable: PropTypes.bool,\r\n initialSize: PropTypes.number,\r\n responsive: PropTypes.bool,\r\n scale: PropTypes.number,\r\n src: PropTypes.string,\r\n theme: PropTypes.oneOf(Object.values(themes))\r\n };\r\n\r\n static propTypesMeta = {\r\n className: 'exclude',\r\n containedPosition: 'exclude',\r\n draggable: 'exclude',\r\n initialSize: 'exclude',\r\n responsive: 'exclude',\r\n scale: 'exclude',\r\n theme: 'exclude'\r\n };\r\n\r\n static defaultProps = {\r\n initialSize: 300,\r\n scale: 1,\r\n responsive: true\r\n };\r\n\r\n state = {\r\n src: ImageLoader.getNewSrc(this.props.src, this.props.initialSize)\r\n };\r\n\r\n componentDidMount() {\r\n const parentNode = this.image && this.image.parentElement;\r\n\r\n if (parentNode && this.props.responsive) {\r\n this.setState({\r\n src: ImageLoader.getNewSrc(\r\n this.props.src,\r\n parentNode.offsetWidth * this.props.scale,\r\n this.props.initialSize\r\n )\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n if (!this.props.src) {\r\n return null;\r\n }\r\n if (this.props.theme === themes.contained) {\r\n return (\r\n <ContainedImage\r\n alt={this.props.alt}\r\n className={this.props.className}\r\n initialSize={this.props.initialSize}\r\n position={this.props.containedPosition}\r\n src={this.state.src}\r\n />\r\n );\r\n }\r\n\r\n return !this.props.src ? null : (\r\n <img\r\n className={cn('image', this.props.className)}\r\n src={this.state.src}\r\n alt={this.props.alt}\r\n draggable={this.props.draggable}\r\n ref={img => (this.image = img)}\r\n />\r\n );\r\n }\r\n}\r\n\r\nImage.themes = themes;\r\n\r\nexport default Image;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport propTypeTheme from 'utils/prop-type-theme';\r\n\r\nconst Price = ({\r\n children,\r\n className,\r\n discountedPrice,\r\n element,\r\n originalPrice,\r\n priceLabel,\r\n theme\r\n}) => {\r\n const Element = element;\r\n const smallPrice = discountedPrice && (\r\n <div className={cn('price-small', theme)} key=\"price-small\">\r\n {originalPrice}\r\n </div>\r\n );\r\n const bigPrice = (\r\n <div\r\n className={cn('price-big', theme, {\r\n 'has-discount': discountedPrice\r\n })}\r\n key=\"price-big\"\r\n >\r\n {priceLabel && <span className=\"price-label\">{priceLabel}</span>}\r\n {discountedPrice || originalPrice}\r\n </div>\r\n );\r\n\r\n return children ? (\r\n children(smallPrice, bigPrice)\r\n ) : (\r\n <Element className={cn('price', className, theme)}>\r\n {smallPrice}\r\n {bigPrice}\r\n </Element>\r\n );\r\n};\r\n\r\nconst themes = {\r\n alignLeft: 'theme-align-left',\r\n bigFont: 'theme-big-font',\r\n centered: 'theme-centered',\r\n lineThrough: 'theme-line-through',\r\n mediumFontWeight: 'theme-medium-font-weight',\r\n orange: 'theme-orange',\r\n smallFont: 'theme-small-font',\r\n vertical: 'theme-vertical',\r\n white: 'theme-white'\r\n};\r\n\r\nPrice.propTypes = {\r\n children: PropTypes.func,\r\n className: PropTypes.string,\r\n discountedPrice: PropTypes.string,\r\n element: PropTypes.string,\r\n originalPrice: PropTypes.string,\r\n priceLabel: PropTypes.string,\r\n theme: propTypeTheme(themes)\r\n};\r\n\r\nPrice.propTypesMeta = {\r\n className: 'exclude',\r\n element: 'exclude',\r\n theme: 'exclude'\r\n};\r\n\r\nPrice.defaultProps = {\r\n element: 'div'\r\n};\r\n\r\nPrice.themes = themes;\r\n\r\nexport default Price;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport Button from '../button';\r\nimport CartProductDetails from './cart-product-details';\r\nimport CartProductStatus from './cart-product-status';\r\nimport Image from '../image';\r\nimport Form from '../form';\r\nimport Icon from '../icon';\r\nimport Link from '../link';\r\nimport Price from '../price';\r\n\r\nclass CartProduct extends React.Component {\r\n static propTypes = {\r\n collapseLabel: PropTypes.string,\r\n decreaseQuantityEndpoint: PropTypes.string,\r\n decreaseQuantityLabel: PropTypes.string,\r\n details: PropTypes.exact(CartProductDetails.propTypes),\r\n discount: PropTypes.string,\r\n expandLabel: PropTypes.string,\r\n id: PropTypes.string, // NOTE: Used as key in Cart\r\n image: PropTypes.exact(Image.propTypes),\r\n increaseQuantityEndpoint: PropTypes.string,\r\n increaseQuantityLabel: PropTypes.string,\r\n lineThrough: PropTypes.bool,\r\n onSubmit: PropTypes.func,\r\n onUpdate: PropTypes.func,\r\n price: PropTypes.exact(Price.propTypes),\r\n priceLabel: PropTypes.string,\r\n productUrl: PropTypes.string,\r\n quantity: PropTypes.number,\r\n quantityLabel: PropTypes.string,\r\n removeFromCartEndpoint: PropTypes.string,\r\n removeFromCartLabel: PropTypes.string,\r\n shouldBeEditable: PropTypes.bool,\r\n shouldShowDetails: PropTypes.bool,\r\n status: PropTypes.exact(CartProductStatus.propTypes),\r\n title: PropTypes.string,\r\n unitPrice: PropTypes.exact(Price.propTypes),\r\n unitPriceLabel: PropTypes.string\r\n };\r\n\r\n static propTypesMeta = {\r\n decreaseQuantityLabel: 'exclude', // NOTE: Provided by Cart\r\n increaseQuantityLabel: 'exclude', // NOTE: Provided by Cart\r\n removeFromCartLabel: 'exclude', // NOTE: Provided by Cart\r\n shouldBeEditable: 'exclude',\r\n shouldShowDetails: 'exclude'\r\n };\r\n\r\n state = {\r\n isDetailsExpanded: false\r\n };\r\n\r\n toggle = e => {\r\n e.preventDefault();\r\n this.setState(state => ({ isDetailsExpanded: !state.isDetailsExpanded }));\r\n };\r\n\r\n render() {\r\n const priceThemes = [Price.themes.smallFont, Price.themes.vertical].concat(\r\n this.props.lineThrough ? Price.themes.lineThrough : []\r\n );\r\n\r\n return (\r\n <tbody\r\n data-test-cart-product\r\n className={cn('cart-product', {\r\n 'line-through': this.props.lineThrough\r\n })}\r\n >\r\n {this.props.status && (\r\n <CartProductStatus colSpan={5} {...this.props.status} />\r\n )}\r\n <tr>\r\n <td className=\"cart-product-image\">\r\n <div className=\"cart-product-image\">\r\n <Image theme={Image.themes.contained} {...this.props.image} />\r\n </div>\r\n </td>\r\n\r\n <td className=\"cart-product-name\">\r\n {this.props.productUrl ? (\r\n <Link\r\n theme={Link.themes.noUnderline}\r\n url={this.props.productUrl}\r\n text={this.props.title}\r\n />\r\n ) : (\r\n <p>{this.props.title}</p>\r\n )}\r\n {this.props.details && this.props.shouldShowDetails && (\r\n <div className=\"cart-product-show-details\">\r\n <Link\r\n url=\"#\"\r\n onClick={this.toggle}\r\n text={\r\n this.state.isDetailsExpanded\r\n ? this.props.collapseLabel\r\n : this.props.expandLabel\r\n }\r\n />\r\n </div>\r\n )}\r\n {this.props.discount && (\r\n <div className=\"cart-product-discount\">{this.props.discount}</div>\r\n )}\r\n </td>\r\n\r\n <td className=\"cart-product-quantity\">\r\n {this.props.quantityLabel && (\r\n <div className=\"cart-product-quantity-label\">\r\n {this.props.quantityLabel}\r\n </div>\r\n )}\r\n <div className=\"cart-product-form\">\r\n {this.props.shouldBeEditable && (\r\n <Form\r\n endpoint={this.props.decreaseQuantityEndpoint}\r\n onBeforeSubmit={this.props.onSubmit}\r\n onResponse={this.props.onUpdate}\r\n showSubmitButton={false}\r\n >\r\n <Button\r\n type=\"submit\"\r\n theme={[Button.themes.light, Button.themes.circle]}\r\n >\r\n <span>{this.props.decreaseQuantityLabel}</span>\r\n <Icon name=\"small-minus\" />\r\n </Button>\r\n </Form>\r\n )}\r\n\r\n <p>{this.props.quantity}</p>\r\n\r\n {this.props.shouldBeEditable && (\r\n <Form\r\n endpoint={this.props.increaseQuantityEndpoint}\r\n onBeforeSubmit={this.props.onSubmit}\r\n onResponse={this.props.onUpdate}\r\n showSubmitButton={false}\r\n >\r\n <Button\r\n type=\"submit\"\r\n theme={[Button.themes.light, Button.themes.circle]}\r\n >\r\n <span>{this.props.increaseQuantityLabel}</span>\r\n <Icon name=\"small-plus\" />\r\n </Button>\r\n </Form>\r\n )}\r\n </div>\r\n </td>\r\n\r\n {this.props.unitPriceLabel && this.props.unitPrice && (\r\n <td>\r\n {this.props.unitPriceLabel && (\r\n <div className=\"cart-product-unit-price-label\">\r\n {this.props.unitPriceLabel}\r\n </div>\r\n )}\r\n <div className=\"cart-product-price\">\r\n <Price\r\n theme={priceThemes.concat(Price.themes.mediumFontWeight)}\r\n {...this.props.unitPrice}\r\n />\r\n </div>\r\n </td>\r\n )}\r\n\r\n <td>\r\n {this.props.priceLabel && (\r\n <div className=\"cart-product-price-label\">\r\n {this.props.priceLabel}\r\n </div>\r\n )}\r\n <div className=\"cart-product-price\">\r\n <Price theme={priceThemes} {...this.props.price} />\r\n </div>\r\n </td>\r\n\r\n {this.props.shouldBeEditable && (\r\n <td className=\"cart-product-remove\">\r\n <Form\r\n endpoint={this.props.removeFromCartEndpoint}\r\n onBeforeSubmit={this.props.onSubmit}\r\n onResponse={this.props.onUpdate}\r\n showSubmitButton={false}\r\n >\r\n <Button\r\n type=\"submit\"\r\n theme={[Button.themes.light, Button.themes.circle]}\r\n >\r\n <span>{this.props.removeFromCartLabel}</span>\r\n <Icon name=\"small-x\" />\r\n </Button>\r\n </Form>\r\n </td>\r\n )}\r\n </tr>\r\n {this.props.details && this.props.shouldShowDetails && (\r\n <CartProductDetails\r\n isExpanded={this.state.isDetailsExpanded}\r\n {...this.props.details}\r\n />\r\n )}\r\n </tbody>\r\n );\r\n }\r\n}\r\n\r\nexport default CartProduct;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\n// Use class component to be able to ref\r\nclass ContentContainer extends React.Component {\r\n static propTypes = {\r\n children: PropTypes.node,\r\n className: PropTypes.string,\r\n element: PropTypes.string\r\n };\r\n\r\n static propTypesMeta = 'exclude';\r\n\r\n static defaultProps = {\r\n element: 'div'\r\n };\r\n\r\n state = {};\r\n\r\n render() {\r\n const Element = this.props.element;\r\n\r\n return (\r\n <Element className={cn('content-container', this.props.className)}>\r\n {this.props.children}\r\n </Element>\r\n );\r\n }\r\n}\r\n\r\nexport default ContentContainer;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nclass TabTrapper extends React.Component {\r\n static propTypes = {\r\n children: PropTypes.oneOfType([\r\n PropTypes.node,\r\n PropTypes.arrayOf(PropTypes.node)\r\n ]),\r\n isActive: PropTypes.bool\r\n };\r\n\r\n static propTypesMeta = 'exclude';\r\n\r\n state = {\r\n shiftKeyIsPressed: false\r\n };\r\n\r\n previouslyFocusedElement = null;\r\n\r\n componentDidMount() {\r\n this.container.addEventListener('keydown', this.onKeyDown);\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (!prevProps.isActive && this.props.isActive) {\r\n this.previouslyFocusedElement = document.activeElement;\r\n }\r\n\r\n if (\r\n prevProps.isActive &&\r\n !this.props.isActive &&\r\n this.previouslyFocusedElement\r\n ) {\r\n this.previouslyFocusedElement.focus();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.container.removeEventListener('keydown', this.onKeyDown);\r\n\r\n if (this.previouslyFocusedElement) {\r\n this.previouslyFocusedElement.focus();\r\n }\r\n }\r\n\r\n onKeyDown = e => {\r\n this.setState({ shiftKeyIsPressed: e.shiftKey });\r\n };\r\n\r\n trapFirst = () => {\r\n this.afterWrapper.focus();\r\n };\r\n\r\n trapLast = () => {\r\n this.beforeWrapper.focus();\r\n };\r\n\r\n getButtonStyle = () => {\r\n return {\r\n position: 'absolute',\r\n width: 0,\r\n height: 0,\r\n left: '-999em',\r\n overflow: 'hidden'\r\n };\r\n };\r\n\r\n render() {\r\n return (\r\n <div ref={div => (this.container = div)}>\r\n {this.props.isActive && (\r\n <button\r\n onFocus={this.trapFirst}\r\n style={this.getButtonStyle()}\r\n disabled={!this.state.shiftKeyIsPressed}\r\n />\r\n )}\r\n <div ref={div => (this.beforeWrapper = div)} tabIndex={-1} />\r\n\r\n {this.props.children}\r\n\r\n <div ref={div => (this.afterWrapper = div)} tabIndex={-1} />\r\n {this.props.isActive && (\r\n <button onFocus={this.trapLast} style={this.getButtonStyle()} />\r\n )}\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default TabTrapper;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport Button from '../button';\r\nimport ContentContainer from '../content-container';\r\nimport Icon from '../icon';\r\nimport TabTrapper from './tab-trapper';\r\n\r\nclass Modal extends React.Component {\r\n static propTypes = {\r\n animate: PropTypes.bool,\r\n className: PropTypes.string,\r\n children: PropTypes.oneOfType([\r\n PropTypes.node,\r\n PropTypes.arrayOf(PropTypes.node)\r\n ]).isRequired,\r\n closeButtonText: PropTypes.string,\r\n containerClassName: PropTypes.string,\r\n contentClassName: PropTypes.string,\r\n hide: PropTypes.func.isRequired, // will be triggered by click on close button, modal background or by pressing the esc key\r\n id: PropTypes.string,\r\n isVisible: PropTypes.bool,\r\n showCloseButton: PropTypes.bool\r\n };\r\n\r\n static propTypesMeta = 'exclude';\r\n\r\n static defaultProps = {\r\n animate: true,\r\n closeButtonText: 'Lukk',\r\n showCloseButton: true\r\n };\r\n\r\n state = {\r\n contentHeight: 0,\r\n fitsOnScreen: false,\r\n isMounted: false\r\n };\r\n\r\n componentDidMount() {\r\n this.setState({ isMounted: true }, () => {\r\n this.modal.addEventListener('keyup', this.handleEscPress);\r\n this.setState({\r\n fitsOnScreen: this.modal.offsetHeight < window.innerHeight\r\n });\r\n });\r\n }\r\n\r\n componentWillUnmount() {\r\n this.modal.removeEventListener('keyup', this.handleEscPress);\r\n this.toggleBodyClass(false);\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (this.props.isVisible !== prevProps.isVisible) {\r\n if (this.props.isVisible) {\r\n this.onAfterShowModal();\r\n }\r\n this.toggleBodyClass(this.props.isVisible);\r\n }\r\n }\r\n\r\n toggleBodyClass = add => {\r\n if (document && document.body) {\r\n document.body.classList.toggle('modal-opened', add);\r\n }\r\n };\r\n\r\n onAfterShowModal = () => {\r\n requestAnimationFrame(() => {\r\n this.modal.focus();\r\n this.modalWrapper.scrollTop = 0;\r\n });\r\n\r\n this.setState(\r\n {\r\n fitsOnScreen: this.modal.offsetHeight < window.innerHeight\r\n },\r\n () => {\r\n this.setState({ contentHeight: this.modalWrapper.scrollHeight });\r\n }\r\n );\r\n };\r\n\r\n handleEscPress = e => {\r\n if (e.which === 27) {\r\n this.hideModal();\r\n }\r\n };\r\n\r\n hideModal = () => {\r\n this.props.hide();\r\n this.toggleBodyClass(false);\r\n };\r\n\r\n render() {\r\n const ariaProps = { 'aria-modal': true, role: 'dialog' };\r\n\r\n return !this.state.isMounted\r\n ? null\r\n : ReactDOM.createPortal(\r\n <div\r\n className={cn('modal', this.props.className, {\r\n 'animation-enabled': this.props.animate,\r\n 'is-visible': this.props.isVisible,\r\n 'fits-on-screen': this.state.fitsOnScreen\r\n })}\r\n id={this.props.id}\r\n ref={d => (this.modalWrapper = d)}\r\n {...ariaProps}\r\n >\r\n <ContentContainer className={this.props.containerClassName}>\r\n <div\r\n className=\"modal-background\"\r\n style={{\r\n minHeight: this.state.contentHeight\r\n }}\r\n onClick={this.hideModal}\r\n />\r\n\r\n <div\r\n className={cn('modal-content', this.props.contentClassName)}\r\n ref={d => (this.modal = d)}\r\n tabIndex={-1}\r\n >\r\n <TabTrapper isActive={this.props.isVisible}>\r\n {this.props.children}\r\n {this.props.showCloseButton && (\r\n <Button\r\n className=\"modal-close\"\r\n onClick={this.hideModal}\r\n theme={[Button.themes.light, Button.themes.circle]}\r\n >\r\n <span>{this.props.closeButtonText}</span>\r\n <Icon name=\"small-x\" />\r\n </Button>\r\n )}\r\n </TabTrapper>\r\n </div>\r\n </ContentContainer>\r\n </div>,\r\n document.body\r\n );\r\n }\r\n}\r\n\r\nexport default Modal;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport propTypeTheme from 'utils/prop-type-theme';\r\n\r\nconst themes = {\r\n big: 'theme-big',\r\n white: 'theme-white'\r\n};\r\n\r\nconst Spinner = ({ className, theme }) => (\r\n <div className={cn('spinner', theme, className)} />\r\n);\r\n\r\nSpinner.propTypes = {\r\n className: PropTypes.string,\r\n theme: propTypeTheme(themes)\r\n};\r\n\r\nSpinner.propTypesMeta = 'exclude';\r\n\r\nSpinner.themes = themes;\r\n\r\nexport default Spinner;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport TinyTransition from 'react-tiny-transition';\r\n\r\nimport Spinner from 'components/spinner';\r\n\r\nconst PageSpinner = ({ shouldContainInParent, isLoading }) => (\r\n <TinyTransition>\r\n {isLoading && (\r\n <div\r\n className={cn('page-spinner', {\r\n 'is-contained': shouldContainInParent\r\n })}\r\n >\r\n <div className=\"page-spinner-wrapper\">\r\n <Spinner theme={Spinner.themes.big} />\r\n </div>\r\n </div>\r\n )}\r\n </TinyTransition>\r\n);\r\n\r\nPageSpinner.propTypes = {\r\n shouldContainInParent: PropTypes.bool,\r\n isLoading: PropTypes.bool\r\n};\r\n\r\nPageSpinner.propTypesMeta = 'exclude';\r\n\r\nexport default PageSpinner;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport PubSub from 'pubsub-js';\r\n\r\nimport topics from 'js/topics.json';\r\n\r\nimport Collapse from 'react-tiny-collapse';\r\n\r\nimport Button from '../button';\r\nimport ArrowButton from '../arrow-button';\r\nimport CartProduct from '../cart/cart-product';\r\nimport Icon from '../icon';\r\nimport Modal from '../modal';\r\nimport PageSpinner from '../page-spinner';\r\n\r\nclass AddToCartConfirmation extends React.Component {\r\n static propTypes = {\r\n cartLink: PropTypes.exact(ArrowButton.propTypes),\r\n closeButtonText: PropTypes.string,\r\n products: PropTypes.arrayOf(PropTypes.exact(CartProduct.propTypes)),\r\n showAddToCartConfirmation: PropTypes.bool,\r\n title: PropTypes.string\r\n };\r\n\r\n static defaultProps = {\r\n showAddToCartConfirmation: true\r\n };\r\n\r\n state = {\r\n isLoading: false,\r\n isVisible: false,\r\n products: []\r\n };\r\n\r\n componentDidMount() {\r\n this.subscriber = PubSub.subscribe(\r\n topics.cartUpdate,\r\n (msg, { confirmation }) => {\r\n if (!confirmation || !confirmation.products) return;\r\n\r\n this.setState({\r\n ...confirmation,\r\n isVisible: this.props.showAddToCartConfirmation\r\n });\r\n }\r\n );\r\n }\r\n\r\n hide = () => {\r\n this.setState({ isVisible: false });\r\n };\r\n\r\n onProductEdit = () => {\r\n this.setState({ isLoading: true });\r\n };\r\n\r\n onProductEditResponse = response => {\r\n this.setState({ isLoading: false });\r\n PubSub.publish(topics.cartUpdate, response);\r\n };\r\n\r\n render() {\r\n return (\r\n <Modal\r\n containerClassName=\"add-to-cart-confirmation\"\r\n hide={this.hide}\r\n isVisible={this.state.isVisible}\r\n showCloseButton={false}\r\n >\r\n <PageSpinner\r\n shouldContainInParent={true}\r\n isLoading={this.state.isLoading}\r\n />\r\n\r\n <div\r\n data-test-add-to-cart-confirmation\r\n className=\"add-to-cart-confirmation-content\"\r\n >\r\n <h2>\r\n <Icon className=\"add-to-cart-confirmation-icon\" name=\"checkmark\" />\r\n {this.props.title}\r\n </h2>\r\n {this.state.products.length > 0 && (\r\n <React.Fragment>\r\n <Collapse isOpen={true} unmountClosed={false}>\r\n <table>\r\n {this.state.products.map(product => (\r\n <CartProduct\r\n onSubmit={this.onProductEdit}\r\n onUpdate={this.onProductEditResponse}\r\n key={product.id}\r\n shouldBeEditable={false}\r\n shouldShowDetails={false}\r\n {...product}\r\n />\r\n ))}\r\n </table>\r\n </Collapse>\r\n <div className=\"add-to-cart-confirmation-buttons\">\r\n <div className=\"add-to-cart-confirmation-button\">\r\n <Button\r\n className=\"add-to-cart-confirmation-close\"\r\n onClick={this.hide}\r\n text={this.props.closeButtonText}\r\n />\r\n </div>\r\n <div className=\"add-to-cart-confirmation-button\">\r\n <ArrowButton\r\n attributes={{\r\n 'data-test-confirmation-go-to-cart-button': ''\r\n }}\r\n {...this.props.cartLink}\r\n />\r\n </div>\r\n </div>\r\n </React.Fragment>\r\n )}\r\n </div>\r\n </Modal>\r\n );\r\n }\r\n}\r\n\r\nexport default AddToCartConfirmation;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst Appointments = ({ items, text }) => (\r\n <div className=\"appointments\">\r\n {items && (\r\n <dl>\r\n {items.map(({ label, value }) => (\r\n <React.Fragment key={label + value}>\r\n <dt>{label}</dt>\r\n <dd>{value}</dd>\r\n </React.Fragment>\r\n ))}\r\n </dl>\r\n )}\r\n\r\n {text && <p>{text}</p>}\r\n </div>\r\n);\r\n\r\nAppointments.propTypes = {\r\n items: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n label: PropTypes.string,\r\n value: PropTypes.string\r\n })\r\n ),\r\n text: PropTypes.string\r\n};\r\n\r\nAppointments.defaultProps = {\r\n items: []\r\n};\r\n\r\nexport default Appointments;\r\n","/* eslint-disable no-console */\r\nconst shouldLog = process.env.NODE_ENV === 'development';\r\nconst noop = () => {};\r\n\r\nexport const log = shouldLog ? console.log : noop;\r\nexport const warn = shouldLog ? console.warn : noop;\r\nexport const error = shouldLog ? console.error : noop;\r\n","const ReactComponent = {};\r\n\r\n// Empty propTypes needed in order for ReactComponent.cs to be generated.\r\nReactComponent.propTypes = {};\r\n\r\n// This component exists in order to generate ReactComponent.cs, and to be able to reference this class in propTypes. The ReactComponent C# class is used in order to have a type that matches any React component view model. It is used in component-list-item.jsx to describe 'props'.\r\n// 'ReactComponent' is used as the base class in all generated .cs-files (configurerd in CSharpWebpackPlugin options in webpack.config.js)\r\nexport default ReactComponent;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport supportedBlocks from './supported-blocks';\r\nimport { error } from 'js/log';\r\n\r\nimport ReactComponent from 'components/react-component';\r\n\r\nconst sizes = {\r\n half: 'size-half',\r\n third: 'size-third'\r\n};\r\n\r\nconst ComponentListItem = ({\r\n additionalComponentProps,\r\n blockNotSupportedText,\r\n name,\r\n props,\r\n id,\r\n onPageEditing,\r\n size\r\n}) => {\r\n const Component = supportedBlocks()[name];\r\n\r\n if (!Component) {\r\n error(`😵 ContentArea does not support rendering of '${name}'.`);\r\n return blockNotSupportedText ? (\r\n <div className=\"component-list-item-fallback\">\r\n {blockNotSupportedText} <i>{name}</i>\r\n </div>\r\n ) : null;\r\n }\r\n\r\n if (!props || !Object.keys(props).length) {\r\n return null;\r\n }\r\n\r\n const additionalProps = additionalComponentProps[name];\r\n\r\n const componentToRender = (\r\n <Component key={id} {...props} {...additionalProps} />\r\n );\r\n\r\n if (process.env.NODE_ENV !== 'production') {\r\n // NOTE: wrapping in 'props' in order to do strict validation with 'exact' (top level propTypes are loosely validated)\r\n PropTypes.checkPropTypes(\r\n { props: PropTypes.exact(Component.propTypes) },\r\n { props: { ...props, ...additionalProps } },\r\n 'prop',\r\n name\r\n );\r\n }\r\n\r\n const OPEProps = onPageEditing.contentId\r\n ? {\r\n 'data-epi-block-id': onPageEditing.contentId,\r\n 'data-epi-content-name': onPageEditing.contentName,\r\n 'data-epi-use-mvc': 'True',\r\n 'data-content-group': true\r\n }\r\n : {};\r\n\r\n return (\r\n <div className={cn('component-list-item', size)} key={id} {...OPEProps}>\r\n {componentToRender}\r\n </div>\r\n );\r\n};\r\n\r\nComponentListItem.propTypes = {\r\n additionalComponentProps: PropTypes.object,\r\n blockNotSupportedText: PropTypes.string,\r\n id: PropTypes.string.isRequired,\r\n name: PropTypes.string.isRequired,\r\n onPageEditing: PropTypes.exact({\r\n contentName: PropTypes.string,\r\n contentId: PropTypes.string\r\n }),\r\n props: PropTypes.shape(ReactComponent.propTypes).isRequired, // Intentional use of 'shape' because validation of 'componentData' is handled by the components themselves\r\n size: PropTypes.oneOf(Object.values(sizes))\r\n};\r\n\r\nComponentListItem.propTypesMeta = {\r\n additionalComponentProps: 'exclude',\r\n blockNotSupportedText: 'exclude',\r\n theme: 'exclude'\r\n};\r\n\r\nComponentListItem.defaultProps = {\r\n blockNotSupportedText: null,\r\n enableElementSizing: true,\r\n onPageEditing: {}\r\n};\r\n\r\nComponentListItem.sizes = sizes;\r\n\r\nexport default ComponentListItem;\r\n","/*\r\nThis is exported as a function rather than a plain object because:\r\n - This file imports all components\r\n - Some components indirectly import this file, creating a circular dependency\r\n - Webpack solves the problem of circular dependencies by setting the circular imports to 'undefined', meaning rendering will fail\r\n - Exporting as a function rather than a plain object magically solves this\r\n*/\r\n\r\nexport default function() {\r\n return require('../../app.components');\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport OnPageEditing from 'components/on-page-editing';\r\n\r\nimport ComponentListItem from 'components/component-list-item';\r\n\r\n/*\r\nNOTE: additionalComponentProps can be used to send props to all components of a specific type.\r\nThis only applies to the components rendered directly by ContentAreaItem (in other words these props don't trickle all the way down the render tree)\r\nExample: forcing the 'green' theme for all CtaBlock rendered by a content area:\r\n <ComponentList additionalComponentProps={{ CtaBlock: { theme: CtaBlock.themes.green } }} />\r\n*/\r\n\r\n/*\r\nNOTE: additionalItemProps works in much the same way as 'additionalComponentProps', except for the fact that it controls the ContentAreaItem wrapper instead of the component itself.\r\n \r\nExample: forcing full width for all wrappers around InfoBlocks rendered by a content area:\r\n <ComponentList additionalItemProps={{ InfoBlock: { size: ContentAreaItem.sizes.fullScreen } }} />\r\n*/\r\n\r\nconst ComponentList = ({\r\n additionalComponentProps, // See above comment\r\n additionalItemProps, // Same as 'additionalComponentProps' but for the ContentAreaItem component\r\n components,\r\n blockNotSupportedText,\r\n className,\r\n onPageEditing\r\n}) =>\r\n components.length === 0 && !onPageEditing.name ? null : (\r\n <OnPageEditing name={onPageEditing.name}>\r\n <div className={cn('component-list', className)}>\r\n {components.map(block => (\r\n <ComponentListItem\r\n additionalComponentProps={additionalComponentProps}\r\n blockNotSupportedText={blockNotSupportedText}\r\n key={block.id}\r\n {...block}\r\n {...additionalItemProps[block.componentName]}\r\n />\r\n ))}\r\n </div>\r\n </OnPageEditing>\r\n );\r\n\r\nComponentList.propTypes = {\r\n additionalComponentProps: PropTypes.object,\r\n additionalItemProps: PropTypes.object,\r\n blockNotSupportedText: PropTypes.string,\r\n components: PropTypes.arrayOf(PropTypes.exact(ComponentListItem.propTypes)),\r\n className: PropTypes.string,\r\n onPageEditing: PropTypes.exact({\r\n name: PropTypes.string\r\n })\r\n};\r\n\r\nComponentList.propTypesMeta = {\r\n additionalComponentProps: 'exclude',\r\n additionalItemProps: 'exclude',\r\n className: 'exclude'\r\n};\r\n\r\nComponentList.defaultProps = {\r\n additionalComponentProps: {},\r\n additionalItemProps: {},\r\n components: [],\r\n onPageEditing: {}\r\n};\r\n\r\nexport default ComponentList;\r\n","/* eslint-disable react/no-multi-comp */\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport propTypeTheme from 'utils/prop-type-theme';\r\n\r\nconst themes = {\r\n editorialPage: 'theme-editorial-page',\r\n leftColumnWider: 'theme-left-column-wider',\r\n noMargin: 'theme-no-margin'\r\n};\r\n\r\nconst Grid = ({ children, className, theme }) => (\r\n <div className={cn('grid', className, theme)}>{children}</div>\r\n);\r\n\r\nGrid.propTypes = {\r\n children: PropTypes.node,\r\n className: PropTypes.string,\r\n theme: propTypeTheme(themes)\r\n};\r\n\r\nGrid.propTypesMeta = 'exclude';\r\n\r\nGrid.Column = ({ children }) => <div className=\"grid-column\">{children}</div>;\r\n\r\nGrid.themes = themes;\r\n\r\nGrid.Column.propTypes = {\r\n children: PropTypes.node\r\n};\r\n\r\nexport default Grid;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Button from 'components/button';\r\nimport Icon from 'components/icon';\r\n\r\nconst PageHeaderLinkList = ({ items }) => (\r\n <div className=\"page-header-link-list\">\r\n {items.map(link => {\r\n return (\r\n <Button\r\n className=\"page-header-link\"\r\n key={link.text}\r\n theme={Button.themes.white}\r\n {...link}\r\n >\r\n <Icon className=\"page-header-link-icon\" name=\"small-arrow-right\" />\r\n </Button>\r\n );\r\n })}\r\n </div>\r\n);\r\n\r\nPageHeaderLinkList.propTypes = {\r\n items: PropTypes.arrayOf(PropTypes.exact(Button.propTypes))\r\n};\r\n\r\nPageHeaderLinkList.defaultProps = {\r\n items: []\r\n};\r\n\r\nexport default PageHeaderLinkList;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nconst themes = {\r\n fill: 'theme-fill'\r\n};\r\n\r\n// NOTE: Uses dangerouslySetInnerHTML because react for some reason strips the 'muted' attribute, breaking autoplay. See https://github.com/facebook/react/issues/10389\r\nconst Video = ({ autoPlay, poster, src, theme }) => {\r\n const attributes = autoPlay ? 'muted autoplay playsinline loop' : 'controls';\r\n\r\n return (\r\n <div\r\n className={cn('video', theme)}\r\n dangerouslySetInnerHTML={{\r\n __html: `<video ${attributes} poster=\"${poster}\" src=\"${src}\" />`\r\n }}\r\n />\r\n );\r\n};\r\n\r\nVideo.propTypes = {\r\n autoPlay: PropTypes.bool,\r\n poster: PropTypes.string,\r\n src: PropTypes.string,\r\n theme: PropTypes.oneOf(Object.values(themes))\r\n};\r\n\r\nVideo.propTypesMeta = {\r\n theme: 'exclude'\r\n};\r\n\r\nVideo.themes = themes;\r\n\r\nexport default Video;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport ContentContainer from '../content-container';\r\nimport Image from '../image';\r\nimport OnPageEditing from '../on-page-editing';\r\nimport PageHeaderLinkList from './page-header-link-list';\r\nimport RichText from '../rich-text';\r\nimport Video from '../video';\r\n\r\nconst PageHeader = ({\r\n headingLevel,\r\n image,\r\n ingress,\r\n linkList,\r\n OPE,\r\n shouldUseBlockStyling,\r\n text,\r\n title,\r\n video\r\n}) => {\r\n const Title = 'h' + headingLevel;\r\n\r\n return (\r\n <div\r\n className={cn('page-header', {\r\n 'has-image': !!image || !!video,\r\n 'is-block': shouldUseBlockStyling\r\n })}\r\n >\r\n <ContentContainer className=\"page-header-content\">\r\n <OnPageEditing name={OPE.title}>\r\n <Title>{title}</Title>\r\n </OnPageEditing>\r\n\r\n <OnPageEditing name={OPE.ingress}>\r\n {ingress && (\r\n <div className=\"page-header-text\">\r\n {ingress && (\r\n <RichText\r\n className=\"page-header-ingress\"\r\n theme={RichText.themes.centered}\r\n {...ingress}\r\n />\r\n )}\r\n <OnPageEditing name={OPE.linkList}>\r\n {linkList && <PageHeaderLinkList {...linkList} />}\r\n </OnPageEditing>\r\n </div>\r\n )}\r\n </OnPageEditing>\r\n\r\n <OnPageEditing name={OPE.text}>\r\n {text && (\r\n <div className=\"page-header-text\">\r\n {text && <RichText text={text} />}\r\n </div>\r\n )}\r\n </OnPageEditing>\r\n\r\n {video ? (\r\n <div className=\"page-header-image\">\r\n <Video {...video} />\r\n </div>\r\n ) : (\r\n <OnPageEditing name={OPE.image}>\r\n {image && (\r\n <div className=\"page-header-image\">\r\n <Image {...image} />\r\n </div>\r\n )}\r\n </OnPageEditing>\r\n )}\r\n </ContentContainer>\r\n </div>\r\n );\r\n};\r\n\r\nPageHeader.propTypes = {\r\n headingLevel: PropTypes.number,\r\n image: PropTypes.exact(Image.propTypes),\r\n ingress: PropTypes.exact(RichText.propTypes),\r\n linkList: PropTypes.exact(PageHeaderLinkList.propTypes),\r\n OPE: PropTypes.exact({\r\n image: PropTypes.string,\r\n ingress: PropTypes.string,\r\n text: PropTypes.string,\r\n title: PropTypes.string\r\n }),\r\n title: PropTypes.string,\r\n text: PropTypes.string,\r\n shouldUseBlockStyling: PropTypes.bool,\r\n video: PropTypes.exact(Video.propTypes)\r\n};\r\n\r\nPageHeader.defaultProps = {\r\n headingLevel: 1,\r\n OPE: {}\r\n};\r\n\r\nPageHeader.propTypesMeta = {\r\n headingLevel: 'exclude'\r\n};\r\n\r\nexport default PageHeader;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nconst themes = {\r\n green: 'theme-green'\r\n};\r\n\r\nconst Bomb = ({ text, theme }) => (\r\n <div\r\n className={cn('bomb', theme, {\r\n 'font-size-xl': text.length < 4,\r\n 'font-size-lg': text.length >= 4 && text.length < 8,\r\n 'font-size-sm': text.length >= 8\r\n })}\r\n >\r\n {text}\r\n </div>\r\n);\r\n\r\nBomb.propTypes = {\r\n text: PropTypes.string,\r\n theme: PropTypes.oneOf(Object.values(themes))\r\n};\r\n\r\nBomb.propTypesMeta = 'exclude';\r\n\r\nBomb.defaultProps = {\r\n text: ''\r\n};\r\n\r\nBomb.themes = themes;\r\n\r\nexport default Bomb;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\nimport get from 'lodash/get';\r\n\r\nimport analytics from '../../js/analytics';\r\n\r\nimport Bomb from '../bomb';\r\nimport Button from '../button';\r\nimport Image from 'components/image';\r\nimport Price from '../price';\r\n\r\nconst productCategories = {\r\n contactLens: 'ContactLens',\r\n Glass: 'Glass',\r\n Sunglass: 'Sunglass',\r\n EyeHealth: 'EyeHealth'\r\n};\r\n\r\nconst themes = {\r\n backgroundColor: 'theme-background-color',\r\n horizontal: 'theme-horizontal',\r\n smallerImages: 'theme-smaller-images'\r\n};\r\n\r\nclass ProductCard extends React.Component {\r\n static propTypes = {\r\n bomb: PropTypes.string,\r\n bombIsGreen: PropTypes.bool,\r\n brand: PropTypes.string,\r\n cta: PropTypes.exact(Button.propTypes),\r\n id: PropTypes.string,\r\n image: PropTypes.exact(Image.propTypes),\r\n price: PropTypes.exact(Price.propTypes),\r\n category: PropTypes.oneOf(Object.values(productCategories)),\r\n details: PropTypes.arrayOf(PropTypes.string),\r\n name: PropTypes.string,\r\n url: PropTypes.string,\r\n theme: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.arrayOf(PropTypes.string)\r\n ]),\r\n variant: PropTypes.string,\r\n ctaType: PropTypes.string\r\n };\r\n\r\n static propTypesMeta = {\r\n theme: 'exclude',\r\n ctaType: 'exclude'\r\n };\r\n\r\n static defaultProps = {\r\n details: [],\r\n ctaType: 'product-card'\r\n };\r\n\r\n productClick = e => {\r\n e.preventDefault();\r\n\r\n let price = '';\r\n if (this.props.price) {\r\n price = this.props.price.discountedPrice\r\n ? this.props.price.discountedPrice\r\n : this.props.price.originalPrice;\r\n\r\n price = price.replace(/,/g, '.').replace(/\\s/g, ''); //remove space and change comma to dot\r\n }\r\n\r\n analytics.onProductClick(\r\n Object.assign({}, this.props, {\r\n price: price\r\n }),\r\n () => {\r\n if (this.props.url) {\r\n window.location = this.props.url;\r\n }\r\n }\r\n );\r\n };\r\n\r\n render() {\r\n const className = cn('product-card', this.props.theme);\r\n const useLinkElement = this.props.url && !this.props.cta;\r\n\r\n const WrapperElement = useLinkElement ? 'a' : 'div';\r\n const wrapperProps = useLinkElement\r\n ? {\r\n 'data-test-product-card': '',\r\n href: this.props.url,\r\n className,\r\n onClick: this.productClick,\r\n 'data-cta-title': this.props.name ? this.props.name : null,\r\n 'data-cta-type': this.props.ctaType ? this.props.ctaType : null\r\n }\r\n : { className };\r\n\r\n return (\r\n <WrapperElement {...wrapperProps}>\r\n <div className=\"product-card-content\">\r\n <div className=\"product-card-image\">\r\n <div className=\"product-card-image-inner\">\r\n <Image\r\n theme={Image.themes.contained}\r\n containedPosition=\"center bottom\"\r\n {...this.props.image}\r\n />\r\n </div>\r\n </div>\r\n {this.props.bomb && (\r\n <div className=\"product-card-bomb\">\r\n <Bomb\r\n text={this.props.bomb}\r\n theme={this.props.bombIsGreen && Bomb.themes.green}\r\n />\r\n </div>\r\n )}\r\n <Price theme={Price.themes.smallFont} {...this.props.price}>\r\n {(smallPriceElement, bigPriceElement) => (\r\n <React.Fragment>\r\n <div className=\"product-card-details\">\r\n {!!this.props.details.length && (\r\n <ul>\r\n {this.props.details.map(text => (\r\n <li key={text}>{text}</li>\r\n ))}\r\n </ul>\r\n )}\r\n <div className=\"product-card-small-price\">\r\n {smallPriceElement}\r\n </div>\r\n </div>\r\n <div className=\"product-card-text\">\r\n <div className=\"product-card-text-inner\">\r\n <p className=\"product-card-brand\">{this.props.name}</p>\r\n <p\r\n className={cn('product-card-name', {\r\n 'is-highlighted':\r\n this.props.category === productCategories.contactLens\r\n })}\r\n >\r\n {this.props.brand}\r\n </p>\r\n </div>\r\n <div className=\"product-card-big-price\">\r\n {bigPriceElement}\r\n </div>\r\n </div>\r\n </React.Fragment>\r\n )}\r\n </Price>\r\n {this.props.cta && (\r\n <Button className=\"product-card-cta\" {...this.props.cta} />\r\n )}\r\n </div>\r\n </WrapperElement>\r\n );\r\n }\r\n}\r\n\r\nProductCard.themes = themes;\r\n\r\nexport default ProductCard;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport propTypeTheme from 'utils/prop-type-theme';\r\n\r\nimport FlipMotion from 'react-flip-motion';\r\n\r\nimport ProductCard from '../product-card';\r\n\r\nconst themes = {\r\n narrow: 'theme-narrow',\r\n noMargin: 'theme-no-margin',\r\n productBackgrounds: 'theme-product-backgrounds',\r\n vertical: 'theme-vertical',\r\n twoItemsPerRow: 'theme-two-items-per-row'\r\n};\r\n\r\nconst ProductList = ({\r\n products,\r\n productTheme,\r\n shouldAnimate,\r\n theme,\r\n title,\r\n ctaType = 'product-list'\r\n}) => {\r\n const ListWrapper = shouldAnimate ? FlipMotion : 'ul';\r\n const listProps = shouldAnimate\r\n ? { component: 'ul', childComponent: 'li' }\r\n : {};\r\n const ChildWrapper = shouldAnimate ? React.Fragment : 'li';\r\n\r\n return (\r\n <div className={cn('product-list', theme)}>\r\n {title && <h2>{title}</h2>}\r\n <ListWrapper {...listProps}>\r\n {products.map(product => (\r\n <ChildWrapper key={product.url}>\r\n <ProductCard theme={productTheme} {...product} ctaType={ctaType} />\r\n </ChildWrapper>\r\n ))}\r\n </ListWrapper>\r\n </div>\r\n );\r\n};\r\n\r\nProductList.propTypes = {\r\n products: PropTypes.arrayOf(PropTypes.exact(ProductCard.propTypes)),\r\n productTheme: PropTypes.any,\r\n shouldAnimate: PropTypes.bool,\r\n theme: propTypeTheme(themes),\r\n title: PropTypes.string,\r\n ctaType: PropTypes.string\r\n};\r\n\r\nProductList.propTypesMeta = {\r\n productTheme: 'exclude',\r\n shouldAnimate: 'exclude',\r\n theme: 'exclude',\r\n ctaType: 'exclude'\r\n};\r\n\r\nProductList.defaultProps = {\r\n products: []\r\n};\r\n\r\nProductList.themes = themes;\r\n\r\nexport default ProductList;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport ComponentList from 'components/component-list';\r\nimport ContentContainer from 'components/content-container';\r\nimport Grid from 'components/grid';\r\nimport PageHeader from 'components/page-header';\r\nimport ProductList from 'components/product-list';\r\nimport RichText from 'components/rich-text';\r\n\r\nconst ArticlePage = ({ blocks, firstText, header, secondText, sidebar }) => {\r\n return (\r\n <React.Fragment>\r\n {header && <PageHeader {...header} />}\r\n\r\n <ContentContainer>\r\n <Grid theme={[Grid.themes.leftColumnWider, Grid.themes.editorialPage]}>\r\n <Grid.Column>\r\n {firstText && (\r\n <RichText theme={RichText.themes.centered} {...firstText} />\r\n )}\r\n {blocks && (\r\n <ComponentList\r\n className=\"article-page-blocks\"\r\n additionalComponentProps={{\r\n ProductList: { theme: ProductList.themes.twoItemsPerRow }\r\n }}\r\n {...blocks}\r\n />\r\n )}\r\n {secondText && <RichText {...secondText} />}\r\n </Grid.Column>\r\n\r\n {sidebar && (\r\n <Grid.Column>\r\n <ComponentList {...sidebar} />\r\n </Grid.Column>\r\n )}\r\n </Grid>\r\n </ContentContainer>\r\n </React.Fragment>\r\n );\r\n};\r\n\r\nArticlePage.propTypes = {\r\n blocks: PropTypes.exact(ComponentList.propTypes),\r\n firstText: PropTypes.exact(RichText.propTypes),\r\n header: PropTypes.exact(PageHeader.propTypes),\r\n secondText: PropTypes.exact(RichText.propTypes),\r\n sidebar: PropTypes.exact(ComponentList.propTypes)\r\n};\r\n\r\nexport default ArticlePage;\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\n\r\n// Wrapper component that appears during keyboard navigation. Usefull for adding assistive functions like skipping content, etc.\r\n\r\nconst AssistiveDrawer = ({ description, children }) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n return (\r\n <aside\r\n className={cn('assistive-drawer', {\r\n 'assistive-drawer--open': isOpen\r\n })}\r\n aria-label={description}\r\n tabIndex=\"-1\"\r\n onFocus={() => setIsOpen(true)}\r\n onBlur={() => setIsOpen(false)}\r\n >\r\n <div className=\"assistive-drawer__content\">{children}</div>\r\n </aside>\r\n );\r\n};\r\n\r\nAssistiveDrawer.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n description: PropTypes.string.isRequired\r\n};\r\n\r\nAssistiveDrawer.propTypesMeta = 'exclude';\r\n\r\nexport default AssistiveDrawer;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Icon from 'components/icon';\r\n\r\nconst Availability = ({ inStock, text }) =>\r\n !text ? null : (\r\n <div className=\"availability\">\r\n {inStock && (\r\n <div className=\"availability-icon\">\r\n <Icon name=\"checkmark\" />\r\n </div>\r\n )}\r\n {text}\r\n </div>\r\n );\r\n\r\nAvailability.propTypes = {\r\n inStock: PropTypes.bool,\r\n text: PropTypes.string\r\n};\r\n\r\nexport default Availability;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport debounce from 'lodash/debounce';\r\nimport { iframeResizer } from 'iframe-resizer';\r\n\r\nimport isRunningOnClient from '@creuna/utils/is-running-on-client';\r\n\r\nimport ContentContainer from '../content-container';\r\nimport RichText from '../rich-text';\r\n\r\nclass BookingPage extends React.Component {\r\n static propTypes = {\r\n iframeUrl: PropTypes.string,\r\n text: PropTypes.string,\r\n title: PropTypes.string\r\n };\r\n\r\n getSrc = () => {\r\n if (!this.props.iframeUrl) {\r\n return '';\r\n }\r\n\r\n const isMobile = isRunningOnClient && window.innerWidth < 700;\r\n const queryParams = (isMobile ? '?mobil=1&' : '?') + new Date().getTime();\r\n\r\n return this.props.iframeUrl + queryParams;\r\n };\r\n\r\n state = {\r\n src: this.getSrc()\r\n };\r\n\r\n screenWidth = 0;\r\n\r\n onResize = () => {\r\n if (window.innerWidth !== this.screenWidth) {\r\n this.screenWidth = window.innerWidth;\r\n this.setState({ src: this.getSrc() });\r\n }\r\n };\r\n\r\n debouncedResize = debounce(this.onResize, 300);\r\n\r\n componentDidMount() {\r\n iframeResizer(null, this.iframe);\r\n\r\n this.screenWidth = window.innerWidth;\r\n window.addEventListener('resize', this.debouncedResize);\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('resize', this.debouncedResize);\r\n }\r\n\r\n render() {\r\n return (\r\n <ContentContainer>\r\n <div className=\"booking-page\">\r\n <h1>{this.props.title}</h1>\r\n <RichText theme={RichText.themes.centered} text={this.props.text} />\r\n\r\n {this.state.src && (\r\n <iframe\r\n src={this.state.src}\r\n ref={iframe => (this.iframe = iframe)}\r\n />\r\n )}\r\n </div>\r\n </ContentContainer>\r\n );\r\n }\r\n}\r\n\r\nexport default BookingPage;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport ComponentList from 'components/component-list';\r\nimport ContentContainer from 'components/content-container';\r\nimport PageHeader from 'components/page-header';\r\n\r\nconst BrandPage = ({ blocks, header }) => {\r\n return (\r\n <React.Fragment>\r\n {header && <PageHeader {...header} />}\r\n\r\n <ContentContainer>\r\n {blocks && <ComponentList {...blocks} />}\r\n </ContentContainer>\r\n </React.Fragment>\r\n );\r\n};\r\n\r\nBrandPage.propTypes = {\r\n blocks: PropTypes.exact(ComponentList.propTypes),\r\n header: PropTypes.exact(PageHeader.propTypes)\r\n};\r\n\r\nexport default BrandPage;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport ContentContainer from '../content-container';\r\n\r\nconst BreadCrumbs = ({ items }) =>\r\n !items.length ? null : (\r\n <div className=\"breadcrumbs\">\r\n <ContentContainer>\r\n <ul itemScope itemType=\"http://schema.org/BreadcrumbList\">\r\n {items.map(({ text, url }, index) => (\r\n <li\r\n key={text + url}\r\n itemProp=\"itemListElement\"\r\n itemScope\r\n itemType=\"http://schema.org/ListItem\"\r\n >\r\n {url ? (\r\n <a href={url} itemProp=\"item\">\r\n <span itemProp=\"name\">{text}</span>\r\n </a>\r\n ) : (\r\n <span itemProp=\"name\">{text}</span>\r\n )}\r\n <meta itemProp=\"position\" content={index + 1} />\r\n </li>\r\n ))}\r\n </ul>\r\n </ContentContainer>\r\n </div>\r\n );\r\n\r\nBreadCrumbs.propTypes = {\r\n items: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n url: PropTypes.string,\r\n text: PropTypes.string.isRequired\r\n })\r\n )\r\n};\r\n\r\nBreadCrumbs.defaultProps = {\r\n items: []\r\n};\r\n\r\nexport default BreadCrumbs;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport ImageLoader from '../../js/responsive-images';\r\n\r\nclass FluidImage extends React.Component {\r\n static propTypes = {\r\n alt: PropTypes.string,\r\n className: PropTypes.string,\r\n imageShouldCoverContainer: PropTypes.bool,\r\n focusPoint: PropTypes.shape({\r\n x: PropTypes.number.isRequired,\r\n y: PropTypes.number.isRequired\r\n }),\r\n initialSize: PropTypes.number,\r\n src: PropTypes.string\r\n };\r\n\r\n static propTypesMeta = {\r\n className: 'exclude',\r\n imageShouldCoverContainer: 'exclude',\r\n focusPoint: { x: 'float', y: 'float' }\r\n };\r\n\r\n static defaultProps = {\r\n initialSize: 200,\r\n imageShouldCoverContainer: true\r\n };\r\n\r\n state = {\r\n src: ImageLoader.getNewSrc(this.props.src, this.props.initialSize)\r\n };\r\n\r\n componentDidMount() {\r\n if (this.container) {\r\n this.setState({\r\n src: ImageLoader.getNewSrc(\r\n this.props.src,\r\n this.container.offsetWidth,\r\n this.props.initialSize\r\n )\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n return !this.props.src ? null : (\r\n <div\r\n className={cn(\r\n 'fluid-image',\r\n { 'fluid-image--cover': this.props.imageShouldCoverContainer },\r\n this.props.className\r\n )}\r\n style={{\r\n backgroundImage: `url(${this.state.src})`,\r\n backgroundPosition: this.props.focusPoint\r\n ? `${this.props.focusPoint.x}% ${this.props.focusPoint.y}%`\r\n : null\r\n }}\r\n ref={div => (this.container = div)}\r\n >\r\n <img src={this.state.src} alt={this.props.alt} />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default FluidImage;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport propTypeTheme from 'utils/prop-type-theme';\r\n\r\nimport Button from '../button';\r\nimport FluidImage from '../fluid-image';\r\nimport Icon from '../icon';\r\nimport OnPageEditing from '../on-page-editing';\r\nimport Price from '../price';\r\nimport Video from 'components/video';\r\n\r\nconst themes = {\r\n compact: 'theme-compact',\r\n green: 'theme-green',\r\n mini: 'theme-mini',\r\n white: 'theme-white'\r\n};\r\n\r\nconst CtaBlock = ({\r\n image,\r\n link,\r\n locateStoreLink,\r\n OPE,\r\n price,\r\n isFocusable,\r\n showImage,\r\n subtitle,\r\n text,\r\n theme,\r\n title,\r\n video,\r\n ctaType = 'cta-block'\r\n}) => {\r\n const tabIndex = isFocusable ? 0 : -1;\r\n\r\n return (\r\n <div\r\n className={cn('cta-block', theme, {\r\n 'has-image': !!image && showImage\r\n })}\r\n >\r\n {showImage &&\r\n (video ? (\r\n <div className=\"cta-block-image\">\r\n <Video theme={Video.themes.fill} {...video} />\r\n </div>\r\n ) : (\r\n <OnPageEditing name={OPE.image}>\r\n {image && (\r\n <div className=\"cta-block-image\">\r\n <FluidImage {...image} />\r\n </div>\r\n )}\r\n </OnPageEditing>\r\n ))}\r\n <div className=\"cta-block-text\">\r\n <OnPageEditing name={OPE.title}>\r\n {title && <h2>{title}</h2>}\r\n </OnPageEditing>\r\n\r\n <OnPageEditing name={OPE.price}>\r\n {price && (\r\n <Price\r\n className=\"cta-block-price\"\r\n theme={[\r\n Price.themes.centered,\r\n theme && theme.indexOf(themes.green) !== -1\r\n ? Price.themes.white\r\n : Price.themes.orange\r\n ]}\r\n {...price}\r\n />\r\n )}\r\n </OnPageEditing>\r\n\r\n <OnPageEditing name={OPE.subtitle}>\r\n {subtitle && <h3>{subtitle}</h3>}\r\n </OnPageEditing>\r\n\r\n <OnPageEditing name={OPE.text}>{text && <p>{text}</p>}</OnPageEditing>\r\n\r\n <OnPageEditing name={OPE.link}>\r\n {link && (\r\n <Button\r\n className=\"cta-block-link\"\r\n tabIndex={tabIndex}\r\n theme={\r\n theme && theme.indexOf(themes.green) !== -1\r\n ? Button.themes.white\r\n : undefined\r\n }\r\n {...link}\r\n ctaType={ctaType}\r\n ctaTitle={title}\r\n />\r\n )}\r\n </OnPageEditing>\r\n\r\n <OnPageEditing name={OPE.locateStoreLink}>\r\n {locateStoreLink && (\r\n <Button\r\n className=\"cta-block-store-link\"\r\n theme={Button.themes.white}\r\n tabIndex={tabIndex}\r\n {...locateStoreLink}\r\n ctaType={ctaType}\r\n ctaTitle={title}\r\n >\r\n <Icon name=\"pin\" />\r\n </Button>\r\n )}\r\n </OnPageEditing>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nCtaBlock.propTypes = {\r\n image: PropTypes.exact(FluidImage.propTypes),\r\n link: PropTypes.exact(Button.propTypes),\r\n locateStoreLink: PropTypes.exact(Button.propTypes),\r\n OPE: PropTypes.exact({\r\n image: PropTypes.string,\r\n link: PropTypes.string,\r\n locateStoreLink: PropTypes.string,\r\n price: PropTypes.string,\r\n subtitle: PropTypes.string,\r\n text: PropTypes.string,\r\n title: PropTypes.string\r\n }),\r\n price: PropTypes.exact(Price.propTypes),\r\n showImage: PropTypes.bool,\r\n isFocusable: PropTypes.bool,\r\n subtitle: PropTypes.string,\r\n text: PropTypes.string,\r\n theme: propTypeTheme(themes),\r\n title: PropTypes.string,\r\n video: PropTypes.exact(Video.propTypes),\r\n ctaType: PropTypes.string\r\n};\r\n\r\nCtaBlock.propTypesMeta = {\r\n showImage: 'exclude',\r\n theme: 'exclude',\r\n isFocusable: 'exclude',\r\n ctaType: 'exclude'\r\n};\r\n\r\nCtaBlock.defaultProps = {\r\n OPE: {},\r\n showImage: true,\r\n isFocusable: true\r\n};\r\n\r\nCtaBlock.themes = themes;\r\n\r\nexport default CtaBlock;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport propTypeTheme from 'utils/prop-type-theme';\r\n\r\nimport CtaBlock from '../cta-block';\r\nimport FluidImage from '../fluid-image';\r\nimport OnPageEditing from '../on-page-editing';\r\nimport ProductCard from '../product-card';\r\nimport ProductList from '../product-list';\r\nimport Video from '../video';\r\n\r\nconst ctaColors = {\r\n green: 'green',\r\n white: 'white'\r\n};\r\n\r\nfunction getCtaTheme(ctaColor) {\r\n if (ctaColor === ctaColors.green) {\r\n return CtaBlock.themes.green;\r\n } else if (ctaColor === ctaColors.white) {\r\n return CtaBlock.themes.white;\r\n }\r\n}\r\n\r\nconst themes = {\r\n contained: 'theme-contained'\r\n};\r\n\r\nconst CampaignBanner = ({\r\n ctaBlock,\r\n ctaColor,\r\n image,\r\n OPE,\r\n isFocusable,\r\n products,\r\n video,\r\n theme,\r\n ctaType = 'campaign-banner'\r\n}) => (\r\n <div className={cn('campaign-banner', theme)}>\r\n <div className=\"campaign-banner-header\">\r\n <div className=\"campaign-banner-image\">\r\n {video ? (\r\n <Video theme={Video.themes.fill} {...video} />\r\n ) : (\r\n <OnPageEditing name={OPE.image}>\r\n <FluidImage initialSize={800} {...image} />\r\n </OnPageEditing>\r\n )}\r\n </div>\r\n\r\n <div className=\"campaign-banner-cta\">\r\n <OnPageEditing name={OPE.ctaBlock}>\r\n {ctaBlock && (\r\n <CtaBlock\r\n showImage={false}\r\n isFocusable={isFocusable}\r\n theme={[getCtaTheme(ctaColor), CtaBlock.themes.compact]}\r\n {...ctaBlock}\r\n ctaType={ctaType}\r\n />\r\n )}\r\n </OnPageEditing>\r\n </div>\r\n </div>\r\n\r\n <OnPageEditing name={OPE.products}>\r\n {products && (\r\n <div className=\"campaign-banner-products\">\r\n <ProductList\r\n productTheme={[ProductCard.themes.backgroundColor]}\r\n theme={[\r\n ProductList.themes.noMargin,\r\n ProductList.themes.productBackgrounds\r\n ]}\r\n {...products}\r\n ctaType=\"campaign-banner-products\"\r\n />\r\n </div>\r\n )}\r\n </OnPageEditing>\r\n </div>\r\n);\r\n\r\nCampaignBanner.propTypes = {\r\n ctaBlock: PropTypes.exact(CtaBlock.propTypes),\r\n ctaColor: PropTypes.oneOf(Object.values(ctaColors)),\r\n image: PropTypes.exact(FluidImage.propTypes),\r\n OPE: PropTypes.exact({\r\n ctaBlock: PropTypes.string,\r\n image: PropTypes.string,\r\n products: PropTypes.string\r\n }),\r\n products: PropTypes.exact(ProductList.propTypes),\r\n video: PropTypes.exact(Video.propTypes),\r\n isFocusable: PropTypes.bool,\r\n theme: propTypeTheme(themes),\r\n ctaType: PropTypes.string\r\n};\r\n\r\nCampaignBanner.propTypesMeta = {\r\n theme: 'exclude',\r\n isFocusable: 'exclude',\r\n ctaType: 'exclude'\r\n};\r\n\r\nCampaignBanner.defaultProps = {\r\n ctaColor: ctaColors.white,\r\n OPE: {}\r\n};\r\n\r\nCampaignBanner.themes = themes;\r\n\r\nexport default CampaignBanner;\r\n","import { useEffect, useRef, useState } from 'react';\r\n\r\nconst useInterval = (callback, delayInSeconds) => {\r\n const savedCallback = useRef();\r\n\r\n const [seconds, setSeconds] = useState(0);\r\n\r\n const [isPaused, setIsPaused] = useState(false);\r\n const [isStopped, setIsStopped] = useState(false);\r\n\r\n // Remember the latest callback.\r\n useEffect(() => {\r\n savedCallback.current = callback;\r\n }, [callback]);\r\n\r\n function reset() {\r\n setSeconds(0);\r\n }\r\n\r\n function stop() {\r\n setIsStopped(true);\r\n }\r\n\r\n function start() {\r\n setIsStopped(false);\r\n }\r\n\r\n function pause() {\r\n setIsPaused(true);\r\n }\r\n\r\n function unpause() {\r\n setIsPaused(false);\r\n }\r\n\r\n // Set up the interval.\r\n useEffect(() => {\r\n let interval = null;\r\n\r\n if (!delayInSeconds) return () => clearInterval(interval);\r\n\r\n function tick() {\r\n savedCallback.current();\r\n }\r\n\r\n if (!isPaused && !isStopped) {\r\n interval = setInterval(() => {\r\n setSeconds(seconds => seconds + 1);\r\n\r\n if (seconds === 0) return; // we skip the first iteration\r\n\r\n if (seconds % delayInSeconds === 0) tick();\r\n }, 1000);\r\n } else if ((isPaused || isStopped) && seconds !== 0) {\r\n clearInterval(interval);\r\n }\r\n\r\n return () => clearInterval(interval);\r\n }, [isPaused, isStopped, seconds]);\r\n\r\n return {\r\n reset,\r\n stop,\r\n start,\r\n pause,\r\n unpause,\r\n isPaused,\r\n isStopped\r\n };\r\n};\r\n\r\nexport default useInterval;\r\n","import React from 'react';\r\n\r\nconst CarouselContext = React.createContext();\r\n\r\nCarouselContext.propTypes = {};\r\n\r\nCarouselContext.propTypesMeta = 'exclude';\r\n\r\nexport default CarouselContext;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport CarouselContext from './carousel-context';\r\n\r\nconst CarouselContextProvider = ({ children, currentSlideIndex }) => {\r\n return (\r\n <CarouselContext.Provider value={{ currentSlideIndex }}>\r\n {children}\r\n </CarouselContext.Provider>\r\n );\r\n};\r\n\r\nCarouselContextProvider.propTypes = {\r\n children: PropTypes.node,\r\n currentSlideIndex: PropTypes.number\r\n};\r\n\r\nCarouselContextProvider.propTypesMeta = 'exclude';\r\n\r\nexport default CarouselContextProvider;\r\n","import React, { useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\nimport clamp from '@creuna/utils/clamp';\r\nimport { useSpringStyle } from 'use-spring-effect';\r\n\r\nimport propTypeTheme from 'utils/prop-type-theme';\r\nimport useNonPassiveEvent from 'hooks/use-non-passive-event';\r\n\r\nimport useInterval from '../../hooks/use-interval';\r\nimport CarouselContextProvider from '../../contexts/carousel-context-provider';\r\nimport AssistiveDrawer from 'components/assistive-drawer';\r\n\r\nimport Icon from '../icon';\r\n\r\nconst themes = {\r\n block: 'theme-block',\r\n green: 'theme-green',\r\n small: 'theme-small',\r\n cta: 'theme-cta'\r\n};\r\n\r\nconst getNewState = (newIndex, children, numberOfSlidesToShow) => {\r\n const numberOfItems = React.Children.count(children);\r\n const lastIndex = numberOfItems - numberOfSlidesToShow;\r\n const newIndexClamped = clamp(newIndex, 0, lastIndex);\r\n\r\n return {\r\n currentIndex: newIndexClamped,\r\n currentIndexRounded: Math.round(newIndexClamped),\r\n hasNextItem: newIndexClamped < lastIndex,\r\n hasPreviousItem: newIndexClamped > 0\r\n };\r\n};\r\n\r\nconst Carousel = ({\r\n children,\r\n nextItemText,\r\n pauseItemText,\r\n playItemText,\r\n stopItemText,\r\n autoPlayDelayInSeconds,\r\n numberOfSlidesToShow,\r\n previousItemText,\r\n dotButtonText,\r\n shouldShowDots,\r\n carouselLabelText,\r\n isAutoPlayEnabled,\r\n numberOfSlidesToJump,\r\n startIndex,\r\n theme,\r\n thumbnails,\r\n shouldShowNavText,\r\n shouldLoop,\r\n title,\r\n carouselAnnouncementText,\r\n carouselItemLabelText,\r\n hasQuickAnimations\r\n}) => {\r\n const slidesCount = React.useMemo(() => React.Children.count(children), [\r\n children\r\n ]);\r\n\r\n const hasThumbnails = React.Children.count(thumbnails) > 0;\r\n\r\n const announcementText = carouselAnnouncementText.replace(\r\n /\\$\\{1\\}/g,\r\n slidesCount\r\n );\r\n\r\n const slideRefs = useRef([]);\r\n\r\n // const [shouldAutoPlay, setShouldAutoPlay] = React.useState(isAutoPlayEnabled);\r\n\r\n const [state, setState] = React.useState({ currentIndex: startIndex });\r\n const [wrapper, setWrapper] = React.useState();\r\n const [navVisible, setNavVisible] = React.useState(slidesCount > 0);\r\n\r\n const animationParams = hasQuickAnimations\r\n ? { stiffness: 2000, damping: 50, precision: 1000 }\r\n : { stiffness: 130, damping: 20, precision: 1000 };\r\n\r\n const [animationRef, transitionTo] = useSpringStyle(\r\n startIndex,\r\n x => ({\r\n transform: `translateX(${-((100 / slidesCount) * x) /\r\n numberOfSlidesToShow}%)`\r\n }),\r\n animationParams,\r\n [slidesCount, numberOfSlidesToShow]\r\n );\r\n\r\n const update = index => {\r\n const newState = getNewState(index, children, numberOfSlidesToShow);\r\n setState(newState);\r\n transitionTo(newState.currentIndex);\r\n };\r\n\r\n const goToItem = newIndex => update(Math.round(newIndex));\r\n\r\n const goToNextItem = () => {\r\n if (shouldLoop && state.currentIndex === slidesCount - 1) {\r\n goToItem(0);\r\n return;\r\n }\r\n\r\n goToItem(state.currentIndex + numberOfSlidesToJump);\r\n };\r\n\r\n const goToPreviousItem = () => {\r\n if (shouldLoop && state.currentIndex === startIndex) {\r\n goToItem(slidesCount);\r\n return;\r\n }\r\n\r\n goToItem(state.currentIndex - numberOfSlidesToJump);\r\n };\r\n\r\n //TODO: conditional if isAutoPlayEnabled, else new component?\r\n const {\r\n reset: resetTimer,\r\n isPaused: isTimerPaused,\r\n isStopped: isTimerStopped,\r\n stop: stopTimer,\r\n start: startTimer,\r\n pause: pauseTimer,\r\n unpause: unpauseTimer\r\n } = useInterval(\r\n () => {\r\n goToNextItem();\r\n },\r\n isAutoPlayEnabled ? autoPlayDelayInSeconds : undefined\r\n );\r\n\r\n // On children update\r\n React.useEffect(() => {\r\n update(startIndex);\r\n setNavVisible(slidesCount);\r\n }, [slidesCount]);\r\n\r\n // Non-render state\r\n const hasMultiTouch = React.useRef();\r\n const isZoomed = React.useRef();\r\n const initialScreenWidth = React.useRef();\r\n const indexOnTouchStart = React.useRef();\r\n const previousX = React.useRef();\r\n const touchStartX = React.useRef();\r\n\r\n React.useEffect(() => {\r\n initialScreenWidth.current = window.innerWidth;\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n goToItem(startIndex);\r\n }, [startIndex]);\r\n\r\n const onTouchEnd = () => {\r\n goToItem(state.currentIndex);\r\n touchStartX.current = undefined;\r\n previousX.current = 0;\r\n };\r\n\r\n const onTouchStart = touch => {\r\n if (!touch) return;\r\n\r\n touchStartX.current = touch.clientX;\r\n indexOnTouchStart.current = state.currentIndex;\r\n previousX.current = touch.clientX;\r\n };\r\n\r\n const onTouchMove = (e, touch) => {\r\n isZoomed.current =\r\n Math.abs(window.innerWidth - initialScreenWidth.current) > 10;\r\n\r\n if (isZoomed.current || hasMultiTouch.current || !touch) {\r\n return;\r\n }\r\n\r\n const travel = touchStartX.current - touch.clientX;\r\n\r\n if (Math.abs(travel) > 5) {\r\n e.preventDefault(); // Disable scrolling while interacting with carousel\r\n }\r\n\r\n // NOTE: Go to next slide on fast swipe\r\n if (Math.abs(touch.clientX - previousX.current) > 20) {\r\n update(indexOnTouchStart.current + (travel > 0 ? 1 : -1));\r\n return;\r\n }\r\n\r\n const travelRelative = travel / wrapper.offsetWidth;\r\n\r\n previousX.current = touch.clientX;\r\n\r\n update(indexOnTouchStart.current + travelRelative);\r\n };\r\n\r\n const navigateByDot = index => {\r\n resetTimer();\r\n goToItem(index);\r\n // slideRefs.current[index].focus();\r\n };\r\n\r\n const onWrapperTouchMove = e => {\r\n hasMultiTouch.current = e.touches.length > 1;\r\n onTouchMove(e, e.touches[0]);\r\n };\r\n\r\n const toggleStopAutoPlay = () => {\r\n isTimerStopped ? startTimer() : stopTimer();\r\n };\r\n\r\n // NOTE: Using non-passive event because passive event listeners can't call event.preventDefault\r\n useNonPassiveEvent('touchmove', wrapper, onWrapperTouchMove);\r\n\r\n const itemWidth = 100 / slidesCount;\r\n const currentSlide = state.currentIndexRounded;\r\n const maxSteps = Math.ceil(slidesCount / numberOfSlidesToShow);\r\n const steps = new Array(maxSteps).fill(0).map((_, i) => i);\r\n\r\n const memoizedAnnoucementText = React.useMemo(() => {\r\n return announcementText.replace(/\\$\\{0\\}/g, currentSlide + 1);\r\n }, [currentSlide]);\r\n\r\n return slidesCount === 0 ? null : (\r\n <CarouselContextProvider currentSlideIndex={currentSlide}>\r\n <section\r\n role=\"region\"\r\n aria-label={carouselLabelText}\r\n aria-roledescription=\"karusell\"\r\n className={cn('carousel', theme, {\r\n 'has-thumbnails': hasThumbnails,\r\n 'shows-multiple-slides': numberOfSlidesToShow > 1,\r\n 'default-state': !state.hasPreviousItem\r\n })}\r\n >\r\n {isAutoPlayEnabled && (\r\n <AssistiveDrawer description=\"karusellfunksjoner\">\r\n <button\r\n type=\"button\"\r\n className=\"carousel-assistive-button\"\r\n onClick={isTimerStopped ? startTimer : stopTimer}\r\n >\r\n {isTimerStopped ? playItemText : stopItemText}\r\n </button>\r\n </AssistiveDrawer>\r\n )}\r\n {carouselAnnouncementText && (\r\n <div\r\n className=\"carousel-live-region\"\r\n aria-live=\"polite\"\r\n aria-atomic={true}\r\n >\r\n {memoizedAnnoucementText}\r\n </div>\r\n )}\r\n <div className=\"carousel-content\">\r\n <div\r\n className=\"carousel-content-wrapper\"\r\n onMouseEnter={pauseTimer}\r\n onMouseLeave={unpauseTimer}\r\n >\r\n <div\r\n className=\"carousel-items-wrapper\"\r\n ref={setWrapper}\r\n onTouchStart={e => onTouchStart(e.touches[0])}\r\n onTouchEnd={onTouchEnd}\r\n >\r\n <ul\r\n aria-live={isAutoPlayEnabled ? 'off' : 'polite'}\r\n ref={animationRef}\r\n className=\"carousel-items\"\r\n style={{\r\n width: `${slidesCount * 100}%`\r\n }}\r\n >\r\n {React.Children.map(children, (child, index) => {\r\n const isCurrent = currentSlide === index;\r\n\r\n return (\r\n <li\r\n role=\"group\"\r\n aria-label={`${index} av ${slidesCount}`}\r\n aria-hidden={!isCurrent}\r\n aria-roledescription={carouselItemLabelText}\r\n ref={ref => (slideRefs.current[index] = ref)}\r\n tabIndex=\"-1\"\r\n onFocus={e => {\r\n if (!e.currentTarget.contains(e.relatedTarget))\r\n pauseTimer();\r\n }}\r\n onBlur={e => {\r\n if (!e.currentTarget.contains(e.relatedTarget))\r\n unpauseTimer();\r\n }}\r\n className={cn({ 'is-current': isCurrent })}\r\n style={{ width: `${itemWidth / numberOfSlidesToShow}%` }}\r\n >\r\n {child}\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </div>\r\n {navVisible && (\r\n <React.Fragment>\r\n {title && <span className=\"carousel-title\">{title}</span>}\r\n <div className=\"carousel-nav\">\r\n <button\r\n aria-label={previousItemText}\r\n className=\"carousel-prev\"\r\n type=\"button\"\r\n disabled={!shouldLoop && !state.hasPreviousItem}\r\n onClick={() => {\r\n resetTimer();\r\n goToPreviousItem();\r\n }}\r\n >\r\n {shouldShowNavText && (\r\n <span className=\"carousel-prev-text\">\r\n {previousItemText}\r\n </span>\r\n )}\r\n <Icon name=\"big-arrow-right\" />\r\n </button>\r\n <button\r\n aria-label={nextItemText}\r\n className=\"carousel-next\"\r\n disabled={!shouldLoop && !state.hasNextItem}\r\n onClick={() => {\r\n resetTimer();\r\n goToNextItem();\r\n }}\r\n type=\"button\"\r\n >\r\n {shouldShowNavText && (\r\n <span className=\"carousel-next-text\">{nextItemText}</span>\r\n )}\r\n <Icon name=\"big-arrow-right\" />\r\n </button>\r\n </div>\r\n </React.Fragment>\r\n )}\r\n </div>\r\n\r\n {shouldShowDots && (\r\n <div className=\"carousel-dots\">\r\n {isAutoPlayEnabled && (\r\n <>\r\n <button\r\n aria-label={pauseItemText}\r\n onClick={toggleStopAutoPlay}\r\n type=\"button\"\r\n className={cn('carousel-status', {\r\n 'carousel-status--paused': isTimerPaused,\r\n 'carousel-status--stopped': isTimerStopped\r\n })}\r\n >\r\n {shouldShowNavText && (\r\n <span className=\"carousel-status-text\">\r\n {pauseItemText}\r\n </span>\r\n )}\r\n <span aria-hidden={true} className=\"carousel-status-icons\">\r\n <span className=\"carousel-status-icon carousel-play-icon\">\r\n <Icon name=\"pause\" className=\"carousel-icon\" />\r\n </span>\r\n <span className=\"carousel-status-icon carousel-pause-icon\">\r\n <div className=\"makeshift-pause-icon\" />\r\n </span>\r\n <span className=\"carousel-status-icon carousel-stop-icon\">\r\n <div className=\"makeshift-pause-icon\" />\r\n </span>\r\n </span>\r\n </button>\r\n </>\r\n )}\r\n {steps.map(index => {\r\n const isActive = index === currentSlide;\r\n const slideIndex = index + 1;\r\n\r\n return (\r\n <div key={index}>\r\n <button\r\n data-carousel-element={slideIndex}\r\n onClick={() => navigateByDot(index)}\r\n disabled={isActive}\r\n className={cn('carousel-dot', {\r\n 'is-active': isActive\r\n })}\r\n >\r\n <span className=\"carousel-dot-text\">\r\n {`${dotButtonText} ${slideIndex} ${\r\n isActive ? '(aktiv)' : ''\r\n }`}\r\n </span>\r\n </button>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n )}\r\n {hasThumbnails && (\r\n <ul aria-hidden={true} className=\"carousel-thumbnails\">\r\n {React.Children.map(thumbnails, (child, index) => (\r\n <li>\r\n <button\r\n className={cn('carousel-thumbnail', {\r\n 'is-active': index === currentSlide\r\n })}\r\n type=\"button\"\r\n onClick={() => goToItem(index)}\r\n >\r\n {child}\r\n </button>\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n </div>\r\n </section>\r\n </CarouselContextProvider>\r\n );\r\n};\r\n\r\nCarousel.propTypes = {\r\n children: PropTypes.arrayOf(PropTypes.node).isRequired,\r\n nextItemText: PropTypes.string,\r\n pauseItemText: PropTypes.string,\r\n playItemText: PropTypes.string,\r\n stopItemText: PropTypes.string,\r\n numberOfSlidesToShow: PropTypes.number,\r\n previousItemText: PropTypes.string,\r\n dotButtonText: PropTypes.string,\r\n shouldShowDots: PropTypes.bool,\r\n shouldLoop: PropTypes.bool,\r\n isAutoPlayEnabled: PropTypes.bool,\r\n autoPlayDelayInSeconds: PropTypes.number,\r\n startIndex: PropTypes.number,\r\n numberOfSlidesToJump: PropTypes.number,\r\n theme: propTypeTheme(themes),\r\n thumbnails: PropTypes.arrayOf(PropTypes.node),\r\n shouldShowNavText: PropTypes.bool,\r\n hasQuickAnimations: PropTypes.bool,\r\n title: PropTypes.string,\r\n carouselAnnouncementText: PropTypes.string,\r\n carouselLabelText: PropTypes.string,\r\n carouselItemLabelText: PropTypes.string\r\n};\r\n\r\nCarousel.propTypesMeta = 'exclude';\r\n\r\nCarousel.defaultProps = {\r\n nextItemText: 'Neste bilde',\r\n carouselLabelText: 'karusell',\r\n numberOfSlidesToShow: 1,\r\n carouselItemLabelText: 'Karusellelement',\r\n dotButtonText: 'Karusellelement',\r\n pauseItemText: 'Pause karusell',\r\n stopItemText: 'Stopp karusell',\r\n playItemText: 'Spill av karusell',\r\n carouselAnnouncementText: 'Side ${0} av ${1}',\r\n previousItemText: 'Forrige bilde',\r\n shouldShowDots: true,\r\n shouldLoop: true,\r\n shouldAutoRotate: false,\r\n hasQuickAnimations: false,\r\n autoPlayDelayInSeconds: 0,\r\n startIndex: 0,\r\n shouldShowNavText: false,\r\n title: '',\r\n numberOfSlidesToJump: 1\r\n};\r\n\r\nCarousel.themes = themes;\r\n\r\nexport default Carousel;\r\n","import React from 'react';\r\n\r\n/** Attach an event listener to `element` with the `passive` option set to false. */\r\nexport default function useNonPassiveEvent(\r\n event,\r\n element,\r\n listener,\r\n dependencies = []\r\n) {\r\n React.useEffect(() => {\r\n if (!element) return;\r\n const options = { passive: false };\r\n element.addEventListener(event, listener, options);\r\n return () => element.removeEventListener(event, listener, options);\r\n }, [event, element, ...dependencies]);\r\n}\r\n","/* eslint-disable react/no-multi-comp */\r\nimport React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport CampaignBanner from 'components/campaign-banner';\r\nimport Carousel from 'components/carousel';\r\n\r\nimport CarouselContext from '../../contexts/carousel-context';\r\n\r\nconst BannerChild = ({ item, index }) => {\r\n const { currentSlideIndex } = useContext(CarouselContext);\r\n\r\n const isCurrent = currentSlideIndex === index;\r\n\r\n return (\r\n <CampaignBanner\r\n theme={CampaignBanner.themes.contained}\r\n isFocusable={isCurrent}\r\n key={item.id}\r\n {...item}\r\n ctaType=\"campaign-banner-carousel\"\r\n />\r\n );\r\n};\r\n\r\nBannerChild.propTypes = {\r\n index: PropTypes.number,\r\n item: PropTypes.shape(CampaignBanner.propTypes)\r\n};\r\n\r\nconst CampaignBannerCarousel = ({\r\n items,\r\n title,\r\n isAutoPlayEnabled,\r\n autoPlayDelayInSeconds,\r\n pauseItemText,\r\n playItemText,\r\n stopItemText,\r\n previousItemText,\r\n nextItemText,\r\n carouselLabelText,\r\n carouselAnnouncementText\r\n}) => {\r\n return (\r\n <div className=\"campaign-banner-carousel\">\r\n <Carousel\r\n theme={Carousel.themes.block}\r\n numberOfSlidesToShow={1}\r\n shouldShowDots={true}\r\n carouselAnnouncementText={carouselAnnouncementText}\r\n shouldLoop={true}\r\n pauseItemText={pauseItemText}\r\n playItemText={playItemText}\r\n stopItemText={stopItemText}\r\n isAutoPlayEnabled={isAutoPlayEnabled}\r\n autoPlayDelayInSeconds={autoPlayDelayInSeconds}\r\n title={title}\r\n previousItemText={previousItemText}\r\n nextItemText={nextItemText}\r\n carouselLabelText={carouselLabelText}\r\n >\r\n {items.map((item, index) => (\r\n <BannerChild item={item} key={index} index={index} />\r\n ))}\r\n </Carousel>\r\n </div>\r\n );\r\n};\r\n\r\nCampaignBannerCarousel.propTypes = {\r\n items: PropTypes.arrayOf(PropTypes.shape(CampaignBanner.propTypes)),\r\n title: PropTypes.string,\r\n carouselLabelText: PropTypes.string.isRequired,\r\n previousItemText: PropTypes.string,\r\n nextItemText: PropTypes.string,\r\n pauseItemText: PropTypes.string,\r\n playItemText: PropTypes.string,\r\n stopItemText: PropTypes.string,\r\n carouselAnnouncementText: PropTypes.string,\r\n isAutoPlayEnabled: PropTypes.bool,\r\n autoPlayDelayInSeconds: PropTypes.number\r\n};\r\n\r\nCampaignBannerCarousel.defaultProps = {\r\n items: [],\r\n autoPlayDelayInSeconds: 8\r\n};\r\n\r\nexport default CampaignBannerCarousel;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { withFormsy } from 'formsy-react';\r\n\r\nclass CheckboxFormsy extends React.Component {\r\n static propTypes = {\r\n children: PropTypes.func,\r\n getValue: PropTypes.func, // From Formsy HOC\r\n setValue: PropTypes.func, // From Formsy HOC\r\n initiallyChecked: PropTypes.bool\r\n };\r\n\r\n static defaultProps = {\r\n onChange: () => {}\r\n };\r\n\r\n onChange = ({ checked }) => {\r\n this.props.setValue(checked);\r\n };\r\n\r\n componentDidMount() {\r\n if (typeof this.props.initiallyChecked !== 'undefined') {\r\n this.props.setValue(this.props.initiallyChecked);\r\n }\r\n }\r\n\r\n render() {\r\n return this.props.children({\r\n checked: !!this.props.getValue(),\r\n onChange: this.onChange\r\n });\r\n }\r\n}\r\n\r\nexport default withFormsy(CheckboxFormsy);\r\n","import PropTypes from 'prop-types';\r\n\r\n// NOTE: This component is used to provide noops in order to use Checkbox without Formsy\r\nconst NoopWrapper = ({ checked, children }) =>\r\n children({ checked, onChange: () => {} });\r\n\r\nNoopWrapper.propTypes = {\r\n children: PropTypes.func\r\n};\r\n\r\nNoopWrapper.propTypesMeta = 'exclude';\r\n\r\nexport default NoopWrapper;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport propTypeTheme from 'utils/prop-type-theme';\r\n\r\nimport CheckboxFormsy from './checkbox-formsy';\r\nimport Icon from '../../icon';\r\nimport NoopWrapper from './noop-wrapper';\r\n\r\nconst Checkbox = ({\r\n attributes,\r\n checked, // NOTE: When used without Formsy, this can be used to set the checked state\r\n className,\r\n disabled,\r\n idPrefix,\r\n label,\r\n description,\r\n labelChild,\r\n name,\r\n onChange,\r\n theme,\r\n useFormsy,\r\n selected,\r\n value,\r\n validations\r\n}) => {\r\n const Wrapper = useFormsy ? CheckboxFormsy : NoopWrapper;\r\n const id = idPrefix + '-' + name + (value ? '-' + value : '');\r\n\r\n return (\r\n <Wrapper\r\n checked={checked}\r\n name={name}\r\n initiallyChecked={selected}\r\n validations={validations}\r\n >\r\n {({ checked, onChange: onChangeFormsy }) => (\r\n <>\r\n <div className={cn('checkbox', theme, className)}>\r\n <input\r\n {...attributes}\r\n type=\"checkbox\"\r\n checked={checked}\r\n disabled={disabled}\r\n id={id}\r\n name={name}\r\n onChange={e => {\r\n const data = { value: value, checked: e.target.checked };\r\n onChange(data);\r\n onChangeFormsy(data);\r\n }}\r\n value={value}\r\n />\r\n <label htmlFor={id}>\r\n <div className=\"checkbox-fake\">\r\n <Icon name=\"checkmark\" className=\"checkbox-checkmark\" />\r\n </div>\r\n {labelChild ? labelChild : <span>{label}</span>}\r\n </label>\r\n </div>\r\n {description && <p className=\"checkbox-description\">{description}</p>}\r\n </>\r\n )}\r\n </Wrapper>\r\n );\r\n};\r\n\r\nconst themes = {\r\n alignTop: 'theme-align-top',\r\n grid: 'theme-grid',\r\n link: 'theme-link'\r\n};\r\n\r\nCheckbox.propTypes = {\r\n attributes: PropTypes.object,\r\n checked: PropTypes.bool,\r\n className: PropTypes.string,\r\n disabled: PropTypes.bool,\r\n idPrefix: PropTypes.string,\r\n label: PropTypes.string,\r\n description: PropTypes.string,\r\n labelChild: PropTypes.node,\r\n name: PropTypes.string,\r\n onChange: PropTypes.func,\r\n theme: propTypeTheme(themes),\r\n useFormsy: PropTypes.bool,\r\n selected: PropTypes.bool,\r\n value: PropTypes.string,\r\n validations: PropTypes.string\r\n};\r\n\r\nCheckbox.propTypesMeta = {\r\n attributes: 'exclude',\r\n checked: 'exclude',\r\n className: 'exclude',\r\n idPrefix: 'exclude',\r\n theme: 'exclude',\r\n useFormsy: 'exclude',\r\n validations: 'exclude'\r\n};\r\n\r\nCheckbox.defaultProps = {\r\n idPrefix: '',\r\n onChange: () => {},\r\n useFormsy: true\r\n};\r\n\r\nCheckbox.themes = themes;\r\n\r\nexport default Checkbox;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nclass Debounce extends React.Component {\r\n static propTypes = {\r\n children: PropTypes.node,\r\n wait: PropTypes.number\r\n };\r\n\r\n static propTypesMeta = 'exclude';\r\n\r\n static defaultProps = {\r\n wait: 0\r\n };\r\n\r\n state = {\r\n children: this.props.children\r\n };\r\n\r\n timer = null;\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps !== this.props) {\r\n clearTimeout(this.timer);\r\n this.timer = setTimeout(() => {\r\n this.setState({ children: this.props.children });\r\n }, this.props.wait);\r\n }\r\n }\r\n\r\n render() {\r\n return this.state.children;\r\n }\r\n}\r\n\r\nexport default Debounce;\r\n","import PropTypes from 'prop-types';\r\n\r\n// NOTE: This component is used to provide noops in order to use TextInput without Formsy\r\nconst NoopWrapper = ({ children }) =>\r\n children({\r\n errorMessage: undefined,\r\n isInvalid: undefined,\r\n onBlur: () => {},\r\n onChange: () => {},\r\n onRef: () => {}\r\n });\r\n\r\nNoopWrapper.propTypes = {\r\n children: PropTypes.func\r\n};\r\n\r\nNoopWrapper.propTypesMeta = 'exclude';\r\n\r\nexport default NoopWrapper;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { withFormsy } from 'formsy-react';\r\n\r\nclass TextInputFormsy extends React.Component {\r\n static propTypes = {\r\n children: PropTypes.func,\r\n detectAutofill: PropTypes.bool,\r\n errorMessage: PropTypes.string, // Validation message from backend. Any frontend validation message will override this\r\n getErrorMessage: PropTypes.func, // From Formsy HOC\r\n isPristine: PropTypes.func, // From Formsy HOC\r\n isValid: PropTypes.func, // From Formsy HOC\r\n initialValue: PropTypes.string,\r\n // eslint-disable-next-line\r\n name: PropTypes.string.isRequired, // Required by Formsy HOC\r\n onValidate: PropTypes.func,\r\n setValue: PropTypes.func, // From Formsy HOC\r\n showError: PropTypes.func, // From Formsy HOC\r\n shouldSetValueOnChange: PropTypes.bool,\r\n // eslint-disable-next-line\r\n validations: PropTypes.string, // This string is used to set the validation type(s) for the Formsy HOC. (Comma separated list without spaces)\r\n // eslint-disable-next-line\r\n validationErrors: PropTypes.object // This object should contain a message for each validation type. (Used by the Formsy HOC).\r\n };\r\n\r\n static propTypesMeta = 'exclude';\r\n\r\n static defaultProps = {\r\n onValidate: () => {},\r\n textInputProps: {},\r\n type: 'text'\r\n };\r\n\r\n autoFillLoop = null;\r\n state = {\r\n errorMessage: this.props.errorMessage,\r\n isMounted: false\r\n };\r\n\r\n isValid = this.props.isValid();\r\n\r\n onBlur = value => {\r\n clearInterval(this.autoFillLoop);\r\n\r\n if (this.props.isPristine()) {\r\n this.props.setValue(value);\r\n }\r\n };\r\n\r\n onChange = value => {\r\n clearInterval(this.autoFillLoop);\r\n this.setState({ errorMessage: '' });\r\n\r\n // NOTE: if 'isRequired' is the only applied validation rule the value should be updated immediately so that the user can submit the form using the enter key without moving focus out of the input first\r\n if (\r\n !this.props.isPristine() ||\r\n this.props.shouldSetValueOnChange ||\r\n this.props.detectAutofill ||\r\n this.props.validations === 'isRequired'\r\n ) {\r\n this.props.setValue(value);\r\n }\r\n };\r\n\r\n onRef = input => {\r\n this.input = input;\r\n };\r\n\r\n componentDidUpdate() {\r\n if (this.props.isValid() !== this.isValid) {\r\n this.isValid = this.props.isValid();\r\n this.props.onValidate(this.props.isValid());\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({ isMounted: true });\r\n\r\n if (this.props.initialValue) {\r\n this.props.setValue(this.props.initialValue);\r\n this.props.onValidate(this.props.isValid());\r\n } else if (this.input && this.input.value) {\r\n this.props.setValue(this.input.value);\r\n } else if (this.props.detectAutofill && this.props.isPristine()) {\r\n this.autoFillLoop = setInterval(() => {\r\n if (this.props.isPristine() && this.input && this.input.value) {\r\n clearInterval(this.autoFillLoop);\r\n this.props.setValue(this.input.value);\r\n }\r\n }, 2000);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n clearInterval(this.autoFillLoop);\r\n }\r\n\r\n render() {\r\n const showError =\r\n this.state.errorMessage ||\r\n (this.props.isPristine() ? false : this.props.showError());\r\n\r\n return this.props.children({\r\n errorMessage:\r\n (showError && this.props.getErrorMessage()) || this.state.errorMessage,\r\n isInvalid:\r\n showError && (!this.props.isValid() || !!this.state.errorMessage),\r\n onBlur: this.onBlur,\r\n onChange: this.onChange,\r\n onRef: this.onRef\r\n });\r\n }\r\n}\r\n\r\nexport default withFormsy(TextInputFormsy);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\nimport Collapse from 'react-tiny-collapse';\r\n\r\nimport propTypeTheme from 'utils/prop-type-theme';\r\n\r\nimport Icon from 'components/icon';\r\nimport Debounce from 'components/debounce';\r\nimport NoopWrapper from './noop-wrapper';\r\nimport TextInputFormsy from './text-input-formsy';\r\n\r\nconst themes = {\r\n aloneInRow: 'theme-alone-in-row',\r\n bigText: 'theme-big-text',\r\n grid: 'theme-grid',\r\n hiddenLabel: 'theme-hidden-label',\r\n narrow: 'theme-narrow',\r\n noValidation: 'theme-no-validation',\r\n white: 'theme-white',\r\n wide: 'theme-wide'\r\n};\r\n\r\nfunction validationString(validations = '', isRequired = false) {\r\n if (!validations && !isRequired) {\r\n return;\r\n }\r\n\r\n const separator = validations.length ? ',' : '';\r\n return validations + (isRequired ? `${separator}isRequired` : '');\r\n}\r\n\r\n// NOTE: This component can be (but is not always) rendered by TextInputFormsy (./text-input-formsy.jsx). When rendered in this way, TextInputFormsy uses the propTypes definition exported from this file to filter props passed to this component. Therefore, any prop that is not defined in 'propTypes' below will not be passed to this component from TextInputFormsy.\r\n\r\nclass TextInput extends React.Component {\r\n static propTypes = {\r\n autocomplete: PropTypes.oneOf(['off', 'on']),\r\n className: PropTypes.string,\r\n detectAutoFill: PropTypes.bool,\r\n disabled: PropTypes.bool,\r\n errorMessage: PropTypes.string, // Validation message from outside the component (like server side valudation)\r\n formId: PropTypes.string,\r\n idPrefix: PropTypes.string,\r\n isRequired: PropTypes.bool,\r\n label: PropTypes.string,\r\n name: PropTypes.string,\r\n onChange: PropTypes.func,\r\n onRef: PropTypes.func,\r\n onValidate: PropTypes.func,\r\n placeholder: PropTypes.string,\r\n shouldSetValueOnChange: PropTypes.bool,\r\n shouldShowErrorMessage: PropTypes.bool,\r\n theme: propTypeTheme(themes),\r\n togglePasswordLabel: PropTypes.string,\r\n type: PropTypes.string,\r\n useFormsy: PropTypes.bool,\r\n validations: PropTypes.string,\r\n value: PropTypes.string,\r\n validationErrors: PropTypes.object\r\n };\r\n\r\n static propTypesMeta = {\r\n autocomplete: 'exclude',\r\n className: 'exclude',\r\n detectAutoFill: 'exclude',\r\n disabled: 'exclude',\r\n formId: 'exclude',\r\n idPrefix: 'exclude',\r\n shouldSetValueOnChange: 'exclude',\r\n shouldShowErrorMessage: 'exclude',\r\n type: 'exclude',\r\n theme: 'exclude',\r\n useFormsy: 'exclude',\r\n validations: 'exclude',\r\n validationErrors: 'exclude'\r\n };\r\n\r\n static defaultProps = {\r\n onChange: () => {},\r\n onRef: () => {},\r\n shouldShowErrorMessage: true,\r\n type: 'text',\r\n useFormsy: true\r\n };\r\n\r\n state = {\r\n type: this.props.type\r\n };\r\n\r\n togglePassword = () => {\r\n if (this.props.type === 'password') {\r\n this.setState(state => ({\r\n type: state.type === 'text' ? 'password' : 'text'\r\n }));\r\n }\r\n };\r\n\r\n render() {\r\n const Wrapper = this.props.useFormsy ? TextInputFormsy : NoopWrapper;\r\n const idPrefix = this.props.idPrefix ? this.props.idPrefix + '-' : '';\r\n const id = `${idPrefix}${this.props.name}`;\r\n\r\n return (\r\n <Wrapper\r\n detectAutoFill={this.props.detectAutoFill}\r\n errorMessage={this.props.errorMessage}\r\n initialValue={this.props.value}\r\n name={this.props.name}\r\n onValidate={this.props.onValidate}\r\n shouldSetValueOnChange={this.props.shouldSetValueOnChange}\r\n validations={validationString(\r\n this.props.validations,\r\n this.props.isRequired\r\n )}\r\n validationErrors={this.props.validationErrors}\r\n >\r\n {({ errorMessage, isInvalid, onBlur, onChange, onRef }) => (\r\n <div\r\n className={cn(\r\n 'text-input',\r\n this.props.className,\r\n this.props.theme,\r\n { 'has-error': isInvalid }\r\n )}\r\n >\r\n {this.props.label && <label htmlFor={id}>{this.props.label}</label>}\r\n <input\r\n autoComplete={this.props.autocomplete}\r\n defaultValue={this.props.value}\r\n disabled={this.props.disabled}\r\n form={this.props.formId}\r\n id={id}\r\n name={this.props.name}\r\n onBlur={e => onBlur(e.target.value)}\r\n onChange={e => {\r\n onChange(e.target.value);\r\n this.props.onChange(e.target.value);\r\n }}\r\n placeholder={this.props.placeholder}\r\n ref={input => {\r\n onRef(input);\r\n this.props.onRef(input);\r\n }}\r\n type={this.state.type}\r\n />\r\n\r\n {this.props.type === 'password' && (\r\n <button\r\n className={cn('text-input-password-button', {\r\n 'is-active': this.state.type === 'password'\r\n })}\r\n type=\"button\"\r\n onClick={this.togglePassword}\r\n >\r\n <span>{this.props.togglePasswordLabel}</span>\r\n <span className=\"text-input-password-icon\">\r\n <Icon name=\"eye\" />\r\n </span>\r\n </button>\r\n )}\r\n\r\n <Debounce wait={50}>\r\n <Collapse\r\n animateChildren={false}\r\n className=\"text-input-error\"\r\n forceInitialAnimation={true}\r\n isOpen={this.props.shouldShowErrorMessage && !!errorMessage}\r\n >\r\n <div>{errorMessage}</div>\r\n </Collapse>\r\n </Debounce>\r\n </div>\r\n )}\r\n </Wrapper>\r\n );\r\n }\r\n}\r\n\r\nTextInput.themes = themes;\r\n\r\nexport default TextInput;\r\n","import PropTypes from 'prop-types';\r\n\r\n// NOTE: This file exists in order to generate a viewmodel for validation messages. Do not use this for rendering.\r\nconst ValidationErrorTexts = {};\r\nValidationErrorTexts.propTypes = {\r\n isRequired: PropTypes.string,\r\n isBirthDate: PropTypes.string,\r\n isEmail: PropTypes.string,\r\n isPostalCode: PropTypes.string,\r\n isPhoneNumber: PropTypes.string\r\n};\r\n\r\nexport default ValidationErrorTexts;\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Collapse from 'react-tiny-collapse';\r\nimport Form from 'components/form';\r\nimport Checkbox from 'components/form-elements/checkbox';\r\nimport TextInput from 'components/form-elements/text-input';\r\nimport Button from 'components/button';\r\nimport cn from 'classnames';\r\nimport ValidationErrorTexts from 'components/validation-error-texts';\r\n\r\nconst CartDiscountForm = ({\r\n className,\r\n endpoint,\r\n toggleCheckbox,\r\n input,\r\n submitLabel,\r\n onSubmit = () => {},\r\n onUpdate = () => {},\r\n validationErrors\r\n}) => {\r\n const [isExpanded, setIsExpanded] = useState(false);\r\n\r\n const toggleSeparateDeliveryAddress = data => {\r\n setIsExpanded(data.checked);\r\n };\r\n\r\n let codeInput = null;\r\n\r\n const onInputRef = el => {\r\n codeInput = el;\r\n };\r\n\r\n React.useEffect(() => {\r\n if (isExpanded && codeInput) {\r\n codeInput.focus();\r\n }\r\n }, [isExpanded]);\r\n\r\n return (\r\n <div className={cn('cart-discount-form', className)}>\r\n <div className=\"cart-discount-form__container\">\r\n <Checkbox\r\n idPrefix=\"card-discount-form\"\r\n onChange={toggleSeparateDeliveryAddress}\r\n {...toggleCheckbox}\r\n useFormsy={false}\r\n />\r\n <Collapse\r\n isOpen={isExpanded}\r\n duration={300}\r\n easing=\"cubic-bezier(0,0,1,1)\"\r\n unmountClosed={false}\r\n >\r\n <Form\r\n endpoint={endpoint}\r\n showSubmitButton={false}\r\n onBeforeSubmit={onSubmit}\r\n onResponse={onUpdate}\r\n >\r\n <div className=\"cart-discount-form__wrapper\">\r\n <div className=\"cart-discount-form__input-column\">\r\n <TextInput\r\n onRef={onInputRef}\r\n validations=\"isRequired\"\r\n validationErrors={validationErrors}\r\n {...input}\r\n className=\"cart-discount-form__input text-input--in-card-discount-form\"\r\n />\r\n </div>\r\n <div className=\"cart-discount-form__button-column\">\r\n <Button\r\n className=\"cart-discount-form__button\"\r\n type=\"submit\"\r\n text={submitLabel}\r\n />\r\n </div>\r\n </div>\r\n </Form>\r\n </Collapse>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nCartDiscountForm.propTypes = {\r\n endpoint: PropTypes.string.isRequired,\r\n toggleCheckbox: PropTypes.exact(Checkbox.propTypes).isRequired,\r\n input: PropTypes.exact(TextInput.propTypes).isRequired,\r\n submitLabel: PropTypes.string.isRequired,\r\n onSubmit: PropTypes.func,\r\n onUpdate: PropTypes.func,\r\n className: PropTypes.string,\r\n validationErrors: PropTypes.exact(ValidationErrorTexts.propTypes)\r\n};\r\n\r\nCartDiscountForm.propTypesMeta = {\r\n className: 'exclude'\r\n};\r\n\r\nCartDiscountForm.defaultProps = {\r\n endpoint: ''\r\n};\r\n\r\nexport default CartDiscountForm;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Form from 'components/form';\r\nimport HiddenInput from '../form-elements/hidden-input';\r\nimport Button from 'components/button';\r\nimport Icon from '../icon';\r\nimport cn from 'classnames';\r\n\r\nconst CartDiscountDeleteForm = ({\r\n text,\r\n discountCode,\r\n className,\r\n endpoint,\r\n submitLabel,\r\n onSubmit = () => {},\r\n onUpdate = () => {}\r\n}) => {\r\n return (\r\n <div className={cn('cart-discount-delete-form', className)}>\r\n <div className=\"cart-discount-delete-form__form-wrapper\">\r\n <Form\r\n endpoint={endpoint}\r\n showSubmitButton={false}\r\n onBeforeSubmit={onSubmit}\r\n onResponse={onUpdate}\r\n >\r\n <HiddenInput name=\"discountCode\" value={discountCode} />\r\n <Button\r\n type=\"submit\"\r\n theme={[Button.themes.light, Button.themes.circle]}\r\n className=\"cart-discount-delete-form__button\"\r\n title={submitLabel}\r\n >\r\n <Icon name=\"small-x\" />\r\n </Button>\r\n </Form>\r\n </div>\r\n <div className=\"cart-discount-delete-form__text-wrapper\">{text}</div>\r\n </div>\r\n );\r\n};\r\n\r\nCartDiscountDeleteForm.propTypes = {\r\n discountCode: PropTypes.string,\r\n text: PropTypes.string,\r\n endpoint: PropTypes.string.isRequired,\r\n submitLabel: PropTypes.string.isRequired,\r\n onSubmit: PropTypes.func,\r\n onUpdate: PropTypes.func,\r\n className: PropTypes.string\r\n};\r\n\r\nCartDiscountDeleteForm.propTypesMeta = {\r\n className: 'exclude'\r\n};\r\n\r\nCartDiscountDeleteForm.defaultProps = {\r\n endpoint: ''\r\n};\r\n\r\nexport default CartDiscountDeleteForm;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\nimport PubSub from 'pubsub-js';\r\n\r\nimport topics from 'js/topics.json';\r\n\r\nimport Collapse from 'react-tiny-collapse';\r\n\r\nimport CartProduct from './cart-product';\r\n\r\nimport CartDiscountForm from './cart-discount-form';\r\nimport CartDiscountDeleteForm from './cart-discount-delete-form';\r\n\r\nimport PageSpinner from '../page-spinner';\r\nimport Price from '../price';\r\n\r\nconst themes = {\r\n maxi: 'theme-maxi',\r\n mini: 'theme-mini'\r\n};\r\n\r\nclass Cart extends React.Component {\r\n static propTypes = {\r\n children: PropTypes.node,\r\n decreaseQuantityLabel: PropTypes.string,\r\n discount: PropTypes.string,\r\n discountLabel: PropTypes.string,\r\n discountCodeForm: PropTypes.exact(CartDiscountForm.propTypes),\r\n discountsList: PropTypes.arrayOf(\r\n PropTypes.exact(CartDiscountDeleteForm.propTypes)\r\n ),\r\n increaseQuantityLabel: PropTypes.string,\r\n numberOfProducts: PropTypes.string,\r\n onUpdate: PropTypes.func,\r\n priceLabel: PropTypes.string,\r\n products: PropTypes.arrayOf(PropTypes.exact(CartProduct.propTypes)),\r\n quantityLabel: PropTypes.string,\r\n removeFromCartLabel: PropTypes.string,\r\n shippingLabel: PropTypes.string,\r\n shippingCost: PropTypes.string,\r\n shouldBeEditable: PropTypes.bool,\r\n theme: PropTypes.oneOf(Object.keys(themes).map(key => themes[key])),\r\n totalPrice: PropTypes.string,\r\n totalPriceLabel: PropTypes.string,\r\n unitPriceLabel: PropTypes.string\r\n };\r\n\r\n static propTypesMeta = {\r\n shouldBeEditable: 'exclude',\r\n theme: 'exclude'\r\n };\r\n\r\n static defaultProps = {\r\n onUpdate: () => {},\r\n products: [],\r\n theme: themes.maxi,\r\n shouldBeEditable: true\r\n };\r\n\r\n state = {\r\n decreaseQuantityLabel: this.props.decreaseQuantityLabel,\r\n discount: this.props.discount,\r\n discountsList: this.props.discountsList,\r\n discountLabel: this.props.discountLabel,\r\n increaseQuantityLabel: this.props.increaseQuantityLabel,\r\n isLoading: false,\r\n numberOfProducts: this.props.numberOfProducts,\r\n priceLabel: this.props.priceLabel,\r\n products: this.props.products,\r\n quantityLabel: this.props.quantityLabel,\r\n removeFromCartLabel: this.props.removeFromCartLabel,\r\n shippingLabel: this.props.shippingLabel,\r\n shippingCost: this.props.shippingCost,\r\n totalPrice: this.props.totalPrice,\r\n totalPriceLabel: this.props.totalPriceLabel,\r\n unitPriceLabel: this.props.unitPriceLabel,\r\n showDiscountForm: true\r\n };\r\n\r\n // This flag allows the current instance of Cart to ignore data on the subscriber if the data comes from the instance itself. This is done to prevent unnecessary calls to setState. (Useful on the Checkout page where the cart compnent is rendered both in the header and on the page)\r\n didPublishNewCart = false;\r\n\r\n componentDidMount() {\r\n this.subscriber = PubSub.subscribe(topics.cartUpdate, (msg, newState) => {\r\n if (this.didPublishNewCart) {\r\n this.didPublishNewCart = false;\r\n } else {\r\n const { cart } = newState;\r\n\r\n if (cart) {\r\n this.setState({ ...cart });\r\n this.props.onUpdate(newState);\r\n }\r\n }\r\n });\r\n }\r\n\r\n componentWillUnmount() {\r\n PubSub.unsubscribe(this.subscriber);\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps !== this.props) {\r\n this.setState({ isLoading: false });\r\n }\r\n }\r\n\r\n onFormSubmit = () => {\r\n this.setState({ isLoading: true });\r\n };\r\n\r\n onResponse = response => {\r\n const { cart } = response;\r\n this.setState({\r\n isLoading: false,\r\n showDiscountForm: !!cart.discountCodeForm,\r\n ...cart\r\n });\r\n this.props.onUpdate(response);\r\n this.didPublishNewCart = true;\r\n PubSub.publish(topics.cartUpdate, response);\r\n };\r\n\r\n render() {\r\n const isMaxi = this.props.theme === themes.maxi;\r\n\r\n // These labels are omitted for the 'mini' theme to avoid rendering them\r\n const productLabels = isMaxi\r\n ? {\r\n priceLabel: this.state.priceLabel,\r\n quantityLabel: this.state.quantityLabel,\r\n unitPriceLabel: this.state.unitPriceLabel\r\n }\r\n : {};\r\n\r\n const cartSummaryClassNames = cn('cart-summary', {\r\n 'not-editable': !this.props.shouldBeEditable\r\n });\r\n\r\n return (\r\n <div className={cn('cart', this.props.theme)}>\r\n <PageSpinner\r\n shouldContainInParent={true}\r\n isLoading={this.state.isLoading}\r\n />\r\n\r\n {this.state.numberOfProducts && (\r\n <p className=\"cart-number-of-products\">\r\n {this.state.numberOfProducts}\r\n </p>\r\n )}\r\n\r\n {!!this.state.products.length && (\r\n <Collapse isOpen={true} unmountClosed={false}>\r\n <div className=\"cart-products\">\r\n <table>\r\n {this.state.products.map(product => (\r\n <CartProduct\r\n decreaseQuantityLabel={this.state.decreaseQuantityLabel}\r\n increaseQuantityLabel={this.state.increaseQuantityLabel}\r\n onSubmit={this.onFormSubmit}\r\n onUpdate={this.onResponse}\r\n removeFromCartLabel={this.state.removeFromCartLabel}\r\n key={product.id}\r\n shouldBeEditable={this.props.shouldBeEditable}\r\n shouldShowDetails={isMaxi}\r\n {...productLabels}\r\n {...product}\r\n />\r\n ))}\r\n </table>\r\n </div>\r\n </Collapse>\r\n )}\r\n\r\n {this.state.discount && (\r\n <div className={cartSummaryClassNames}>\r\n <p>{this.state.discountLabel}</p>\r\n <Price\r\n originalPrice={this.state.discount}\r\n theme={Price.themes.smallFont}\r\n />\r\n\r\n {this.state.discountsList && (\r\n <ul className=\"cart__discounts-list\">\r\n {this.state.discountsList.map((discount, i) => (\r\n <li className=\"cart__discounts-list-item\" key={i}>\r\n <CartDiscountDeleteForm\r\n {...discount}\r\n onSubmit={this.onFormSubmit}\r\n onUpdate={this.onResponse}\r\n />\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n </div>\r\n )}\r\n\r\n {this.state.shippingCost && (\r\n <div className={cartSummaryClassNames}>\r\n <p>{this.state.shippingLabel}</p>\r\n <Price\r\n originalPrice={this.state.shippingCost}\r\n theme={Price.themes.smallFont}\r\n />\r\n </div>\r\n )}\r\n\r\n {this.state.totalPrice && (\r\n <div className={cartSummaryClassNames}>\r\n <p>{this.state.totalPriceLabel}</p>\r\n <Price\r\n originalPrice={this.state.totalPrice}\r\n theme={\r\n this.props.theme === themes.mini\r\n ? Price.themes.smallFont\r\n : Price.themes.bigFont\r\n }\r\n />\r\n </div>\r\n )}\r\n\r\n {this.props.discountCodeForm && this.state.showDiscountForm && (\r\n <CartDiscountForm\r\n {...this.props.discountCodeForm}\r\n onSubmit={this.onFormSubmit}\r\n onUpdate={this.onResponse}\r\n />\r\n )}\r\n\r\n {this.props.children && (\r\n <div className=\"cart-children\">{this.props.children}</div>\r\n )}\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nCart.themes = themes;\r\n\r\nexport default Cart;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport FluidImage from '../fluid-image';\r\nimport Icon from '../icon';\r\nimport Link from '../link';\r\nimport ProductCard from '../product-card';\r\nimport ProductList from '../product-list';\r\n\r\nconst CategoryBlock = ({ image, link, products, title }) => (\r\n <div className=\"category-block\">\r\n <div className=\"category-block-text\">\r\n {title && <h2>{title}</h2>}\r\n {link && (\r\n <Link theme={Link.themes.noUnderline} {...link}>\r\n <Icon name=\"small-arrow-right\" />\r\n </Link>\r\n )}\r\n </div>\r\n\r\n <div className=\"category-block-image\">\r\n <FluidImage {...image} />\r\n </div>\r\n\r\n <div className=\"category-block-products\">\r\n {products && (\r\n <ProductList\r\n productTheme={ProductCard.themes.horizontal}\r\n theme={ProductList.themes.vertical}\r\n {...products}\r\n ctaType=\"category-block\"\r\n />\r\n )}\r\n </div>\r\n </div>\r\n);\r\n\r\nCategoryBlock.propTypes = {\r\n image: PropTypes.exact(FluidImage.propTypes),\r\n link: PropTypes.exact(Link.propTypes),\r\n products: PropTypes.exact(ProductList.propTypes),\r\n title: PropTypes.string\r\n};\r\n\r\nexport default CategoryBlock;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport Collapse from 'react-tiny-collapse';\r\n\r\nimport Icon from 'components/icon';\r\n\r\nclass CollapseList extends React.Component {\r\n static propTypes = {\r\n children: PropTypes.node,\r\n collapseLabel: PropTypes.string,\r\n expandLabel: PropTypes.string,\r\n maxLength: PropTypes.number\r\n };\r\n\r\n state = {\r\n isExpanded: false\r\n };\r\n\r\n toggleExpanded = () => {\r\n this.setState(state => ({ isExpanded: !state.isExpanded }));\r\n };\r\n\r\n render() {\r\n const { maxLength, children } = this.props;\r\n const sliceIndex = maxLength || React.Children.count(children);\r\n const visibleChildren = children.slice(0, sliceIndex);\r\n const hiddenChildren = children.slice(\r\n sliceIndex,\r\n React.Children.count(children)\r\n );\r\n\r\n return (\r\n <div className=\"collapse-list\">\r\n <ul>\r\n {React.Children.map(visibleChildren, child => (\r\n <li>{child}</li>\r\n ))}\r\n </ul>\r\n {!!hiddenChildren.length && [\r\n <Collapse\r\n isOpen={this.state.isExpanded}\r\n key=\"list\"\r\n unmountClosed={false}\r\n >\r\n <ul>\r\n {React.Children.map(hiddenChildren, child => (\r\n <li>{child}</li>\r\n ))}\r\n </ul>\r\n </Collapse>,\r\n <button\r\n type=\"button\"\r\n onClick={this.toggleExpanded}\r\n key=\"toggle\"\r\n className={cn({ 'is-active': this.state.isExpanded })}\r\n >\r\n <span>\r\n {this.state.isExpanded\r\n ? this.props.collapseLabel\r\n : this.props.expandLabel}\r\n </span>\r\n <Icon name=\"small-arrow-down\" />\r\n </button>\r\n ]}\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default CollapseList;\r\n","/* eslint-disable react/no-unused-prop-types */\r\n// Need to disable prop-types rule in order to keep 'name' proptype, used by formsy\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { withFormsy } from 'formsy-react';\r\n\r\nclass OptionGroup extends React.Component {\r\n static propTypes = {\r\n children: PropTypes.func.isRequired,\r\n getValue: PropTypes.func, // From formsy HOC\r\n name: PropTypes.string.isRequired,\r\n options: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n disabled: PropTypes.bool,\r\n label: PropTypes.string,\r\n selected: PropTypes.bool,\r\n value: PropTypes.string\r\n })\r\n ).isRequired,\r\n setValue: PropTypes.func, // From formsy HOC\r\n onChange: PropTypes.func\r\n };\r\n\r\n static propTypesMeta = 'exclude';\r\n\r\n static defaultProps = {\r\n options: [],\r\n onChange: () => {}\r\n };\r\n\r\n componentDidMount() {\r\n this.props.setValue(\r\n this.props.options.reduce((accum, option) => {\r\n if (option.selected) {\r\n accum.push(option.value);\r\n }\r\n return accum;\r\n }, [])\r\n );\r\n }\r\n\r\n onCheckboxChange = checkbox => {\r\n const value = this.props.getValue() || [];\r\n const indexOfCheckbox = value.indexOf(checkbox.value);\r\n\r\n if (checkbox.checked && indexOfCheckbox === -1) {\r\n value.push(checkbox.value);\r\n } else {\r\n value.splice(indexOfCheckbox, 1);\r\n }\r\n\r\n this.props.setValue(value);\r\n this.props.onChange(value);\r\n };\r\n\r\n render() {\r\n return this.props.children({\r\n value: this.props.getValue() || [],\r\n onChange: this.onCheckboxChange\r\n });\r\n }\r\n}\r\n\r\nexport default withFormsy(OptionGroup);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Checkbox from '../checkbox';\r\nimport CollapseList from '../../collapse-list';\r\nimport OptionGroup from '../option-group';\r\n\r\nconst CheckboxGroup = ({\r\n collapseLabel,\r\n checkboxTheme,\r\n expandLabel,\r\n idPrefix,\r\n labels,\r\n maxLength,\r\n name,\r\n options\r\n}) => {\r\n return (\r\n <OptionGroup name={name} options={options}>\r\n {({ value, onChange }) => {\r\n return (\r\n <CollapseList {...{ collapseLabel, expandLabel, maxLength }}>\r\n {options.map((option, i) => {\r\n return (\r\n <Checkbox\r\n key={i}\r\n checked={value.includes(option.value)}\r\n idPrefix={idPrefix}\r\n labelChild={labels && labels[i]}\r\n name={name}\r\n onChange={onChange}\r\n theme={checkboxTheme}\r\n useFormsy={false}\r\n {...option}\r\n />\r\n );\r\n })}\r\n </CollapseList>\r\n );\r\n }}\r\n </OptionGroup>\r\n );\r\n};\r\n\r\nCheckboxGroup.propTypes = {\r\n collapseLabel: PropTypes.string,\r\n checkboxTheme: PropTypes.any,\r\n expandLabel: PropTypes.string,\r\n idPrefix: PropTypes.string,\r\n labels: PropTypes.node,\r\n maxLength: PropTypes.number,\r\n name: PropTypes.string.isRequired,\r\n options: PropTypes.arrayOf(PropTypes.shape(Checkbox.propTypes))\r\n};\r\n\r\nCheckboxGroup.propTypesMeta = {\r\n checkboxTheme: 'exclude',\r\n idPrefix: 'exclude'\r\n};\r\n\r\nCheckboxGroup.defaultProps = {\r\n options: []\r\n};\r\n\r\nexport default CheckboxGroup;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport Icon from 'components/icon';\r\nimport OptionGroup from '../option-group';\r\n\r\nconst colorNames = {\r\n Black: 'color-filter-black',\r\n Brown: 'color-filter-brown',\r\n Blue: 'color-filter-blue',\r\n Gold: 'color-filter-gold',\r\n Green: 'color-filter-green',\r\n Grey: 'color-filter-gray',\r\n 'Grey/Black': 'color-filter-gray-black',\r\n Mirror: 'color-filter-mirror',\r\n Multi: 'color-filter-multi',\r\n Silver: 'color-filter-silver'\r\n};\r\n\r\nconst ColorSelect = ({ idPrefix, name, options }) => {\r\n return (\r\n <div className=\"color-filter\">\r\n <OptionGroup name={name} options={options}>\r\n {({ value, onChange }) => (\r\n <ul>\r\n {options.map(option =>\r\n colorNames[option.value] ? (\r\n <li key={option.value}>\r\n <input\r\n type=\"checkbox\"\r\n checked={value.indexOf(option.value) !== -1}\r\n disabled={option.disabled}\r\n id={idPrefix + name + option.value}\r\n name={name}\r\n onChange={e => {\r\n onChange({\r\n value: option.value,\r\n checked: e.target.checked\r\n });\r\n }}\r\n value={option.value}\r\n />\r\n <label\r\n className={cn(\r\n 'color-filter-item',\r\n colorNames[option.value]\r\n )}\r\n htmlFor={idPrefix + name + option.value}\r\n title={option.label}\r\n >\r\n <span>{option.label}</span>\r\n <Icon name=\"checkmark\" />\r\n </label>\r\n </li>\r\n ) : null\r\n )}\r\n </ul>\r\n )}\r\n </OptionGroup>\r\n </div>\r\n );\r\n};\r\n\r\nColorSelect.propTypes = {\r\n idPrefix: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n options: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n disabled: PropTypes.bool,\r\n label: PropTypes.string,\r\n selected: PropTypes.bool,\r\n value: PropTypes.oneOf(Object.keys(colorNames)).isRequired\r\n })\r\n )\r\n};\r\n\r\nColorSelect.propTypesMeta = {\r\n idPrefix: 'exclude'\r\n};\r\n\r\nColorSelect.defaultProps = {\r\n options: []\r\n};\r\n\r\nexport default ColorSelect;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport Icon from '../../icon';\r\nimport OptionGroup from '../option-group';\r\n\r\nconst icons = {\r\n kids: 'category-kids',\r\n man: 'category-man',\r\n woman: 'category-woman'\r\n};\r\n\r\nconst GenderSelect = ({ idPrefix, name, options }) => {\r\n return (\r\n <div className=\"gender-select\">\r\n <OptionGroup name={name} options={options}>\r\n {({ value, onChange }) => (\r\n <ul>\r\n {options.map(option => (\r\n <li key={option.value}>\r\n <input\r\n type=\"checkbox\"\r\n checked={value.indexOf(option.value) !== -1}\r\n disabled={option.disabled}\r\n id={idPrefix + option.value}\r\n name={name}\r\n onChange={e => {\r\n onChange({\r\n value: option.value,\r\n checked: e.target.checked\r\n });\r\n }}\r\n value={option.value}\r\n />\r\n <label\r\n className=\"gender-select-label\"\r\n htmlFor={idPrefix + option.value}\r\n >\r\n <div\r\n className={cn('gender-select-icon-wrapper', {\r\n ['gender-select-selected']:\r\n value.indexOf(option.value) !== -1\r\n })}\r\n >\r\n <Icon\r\n name={\r\n value.indexOf(option.value) !== -1\r\n ? 'checkmark'\r\n : icons[option.genderName]\r\n }\r\n />\r\n </div>\r\n <span>{option.label}</span>\r\n </label>\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n </OptionGroup>\r\n </div>\r\n );\r\n};\r\n\r\nGenderSelect.propTypes = {\r\n idPrefix: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n options: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n disabled: PropTypes.bool,\r\n genderName: PropTypes.oneOf(Object.keys(icons)).isRequired,\r\n label: PropTypes.string,\r\n selected: PropTypes.bool,\r\n value: PropTypes.string\r\n })\r\n )\r\n};\r\n\r\nGenderSelect.propTypesMeta = {\r\n idPrefix: 'exclude'\r\n};\r\n\r\nGenderSelect.defaultProps = {\r\n options: []\r\n};\r\n\r\nexport default GenderSelect;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Icon from 'components/icon';\r\nimport Image from 'components/image';\r\n\r\n// NOTE: The 'selected' prop is used by 'create-filter-model.js' to reset the input state on API response\r\nconst ShapeSelectItem = ({\r\n checked,\r\n disabled,\r\n idPrefix,\r\n image,\r\n label,\r\n name,\r\n onChange,\r\n selected, // eslint-disable-line no-unused-vars\r\n value\r\n}) => {\r\n const id = idPrefix + '-' + name + '-' + value;\r\n\r\n return (\r\n <div className=\"shape-select-item\">\r\n <input\r\n checked={checked}\r\n disabled={disabled}\r\n id={id}\r\n name={name}\r\n type=\"checkbox\"\r\n onChange={e => {\r\n onChange({ value: value, checked: e.target.checked });\r\n }}\r\n value={value}\r\n />\r\n <label htmlFor={id}>\r\n <div className=\"shape-select-image\">\r\n <Image responsive={false} {...image} />\r\n <div className=\"shape-select-checkmark\">\r\n <Icon name=\"checkmark\" />\r\n </div>\r\n </div>\r\n\r\n <div className=\"shape-select-label\">{label}</div>\r\n </label>\r\n </div>\r\n );\r\n};\r\n\r\nShapeSelectItem.propTypes = {\r\n checked: PropTypes.bool,\r\n disabled: PropTypes.bool,\r\n idPrefix: PropTypes.string,\r\n image: PropTypes.exact(Image.propTypes),\r\n label: PropTypes.string,\r\n name: PropTypes.string,\r\n onChange: PropTypes.func,\r\n selected: PropTypes.bool,\r\n value: PropTypes.string\r\n};\r\n\r\nShapeSelectItem.propTypesMeta = {\r\n checked: 'exclude',\r\n idPrefix: 'exclude',\r\n name: 'exclude' // NOTE: name is provided by ShapeSelect\r\n};\r\n\r\nexport default ShapeSelectItem;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport CollapseList from '../../collapse-list';\r\nimport OptionGroup from '../option-group';\r\nimport ShapeSelectItem from './shape-select-item';\r\n\r\nconst ShapeSelect = ({\r\n collapseLabel,\r\n expandLabel,\r\n idPrefix,\r\n maxLength,\r\n name,\r\n options\r\n}) => {\r\n return (\r\n <div className=\"shape-select\">\r\n <OptionGroup name={name} options={options}>\r\n {({ value, onChange }) => (\r\n <CollapseList {...{ collapseLabel, expandLabel, maxLength }}>\r\n {options.map(option => (\r\n <ShapeSelectItem\r\n checked={value.includes(option.value)}\r\n idPrefix={idPrefix}\r\n key={option.value}\r\n name={name}\r\n onChange={onChange}\r\n {...option}\r\n />\r\n ))}\r\n </CollapseList>\r\n )}\r\n </OptionGroup>\r\n </div>\r\n );\r\n};\r\n\r\nShapeSelect.propTypes = {\r\n collapseLabel: PropTypes.string,\r\n expandLabel: PropTypes.string,\r\n idPrefix: PropTypes.string,\r\n maxLength: PropTypes.number,\r\n name: PropTypes.string,\r\n options: PropTypes.arrayOf(PropTypes.shape(ShapeSelectItem.propTypes))\r\n};\r\n\r\nShapeSelect.propTypesMeta = {\r\n idPrefix: 'exclude'\r\n};\r\n\r\nShapeSelect.defaultProps = {\r\n options: []\r\n};\r\n\r\nexport default ShapeSelect;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Checkbox from 'components/form-elements/checkbox';\r\nimport CheckboxGroup from 'components/form-elements/checkbox-group';\r\nimport ColorSelect from 'components/form-elements/color-select';\r\nimport GenderSelect from 'components/form-elements/gender-select';\r\nimport Link from 'components/link';\r\nimport ShapeSelect from 'components/form-elements/shape-select';\r\n\r\nconst FilterGroup = ({\r\n colorSelect,\r\n genderSelect,\r\n genericFilter,\r\n link,\r\n shapeSelect,\r\n title\r\n}) => {\r\n let FilterComponent;\r\n\r\n const filter = colorSelect ? (\r\n <ColorSelect idPrefix=\"color-filter-\" {...colorSelect} />\r\n ) : genderSelect ? (\r\n <GenderSelect idPrefix=\"gender-filter-\" {...genderSelect} />\r\n ) : shapeSelect ? (\r\n <ShapeSelect idPrefix=\"category-filter\" {...shapeSelect} />\r\n ) : genericFilter ? (\r\n <CheckboxGroup\r\n checkboxTheme={Checkbox.themes.link}\r\n idPrefix=\"category-filter\"\r\n {...genericFilter}\r\n />\r\n ) : null;\r\n\r\n return !FilterComponent && !filter ? null : (\r\n <div className=\"filter-group\">\r\n <h3>{title}</h3>\r\n <div className=\"filter-group-content\">\r\n {filter}\r\n {FilterComponent}\r\n </div>\r\n {link && <Link useSpanElement={true} {...link} />}\r\n </div>\r\n );\r\n};\r\n\r\nFilterGroup.propTypes = {\r\n colorSelect: PropTypes.exact(ColorSelect.propTypes),\r\n genderSelect: PropTypes.exact(GenderSelect.propTypes),\r\n genericFilter: PropTypes.exact(CheckboxGroup.propTypes),\r\n link: PropTypes.exact(Link.propTypes),\r\n shapeSelect: PropTypes.exact(ShapeSelect.propTypes),\r\n title: PropTypes.string\r\n};\r\n\r\nFilterGroup.defaultProps = {\r\n options: []\r\n};\r\n\r\nexport default FilterGroup;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport Button from '../button';\r\nimport ContentContainer from '../content-container';\r\nimport FilterGroup from './filter-group';\r\nimport HiddenInput from '../form-elements/hidden-input';\r\nimport Icon from '../icon';\r\n\r\nclass CategoryFilters extends React.Component {\r\n static propTypes = {\r\n categoryId: PropTypes.exact(HiddenInput.propTypes),\r\n filterGroups: PropTypes.arrayOf(PropTypes.exact(FilterGroup.propTypes)),\r\n hideFilters: PropTypes.func,\r\n hideFiltersLabel: PropTypes.string,\r\n isVisible: PropTypes.bool,\r\n resetLabel: PropTypes.string,\r\n submitLabel: PropTypes.string,\r\n title: PropTypes.string\r\n };\r\n\r\n static propTypesMeta = {\r\n isVisible: 'exclude'\r\n };\r\n\r\n static defaultProps = {\r\n filterGroups: [],\r\n submitLabel: 'Filtrér'\r\n };\r\n\r\n state = {\r\n isMounted: false\r\n };\r\n\r\n componentDidMount() {\r\n this.setState({ isMounted: true });\r\n }\r\n\r\n onReset = e => {\r\n e.preventDefault();\r\n this.formsy && this.formsy.reset();\r\n\r\n // Reset needs to be applied before submitting\r\n setTimeout(() => {\r\n this.submitButton.click();\r\n }, 200);\r\n };\r\n\r\n render() {\r\n return (\r\n <div\r\n className={cn('category-filters', {\r\n 'is-visible': this.props.isVisible\r\n })}\r\n >\r\n <h2>{this.props.title}</h2>\r\n <div className=\"category-filters-nav\">\r\n <ContentContainer>\r\n <div className=\"category-filters-hide-wrapper\">\r\n <Button\r\n className=\"category-filters-hide\"\r\n onClick={this.props.hideFilters}\r\n prependChildren={true}\r\n text={this.props.hideFiltersLabel}\r\n theme={Button.themes.plain}\r\n >\r\n <Icon name=\"small-arrow-left\" />\r\n </Button>\r\n </div>\r\n <Button\r\n htmlFor=\"category-filters-submit\"\r\n className=\"category-filters-apply\"\r\n text={this.props.submitLabel}\r\n theme={Button.themes.mini}\r\n />\r\n <Button\r\n htmlFor=\"category-filters-reset\"\r\n className=\"category-filters-reset\"\r\n text={this.props.resetLabel}\r\n theme={[Button.themes.outline, Button.themes.mini]}\r\n />\r\n </ContentContainer>\r\n </div>\r\n {this.props.categoryId && <HiddenInput {...this.props.categoryId} />}\r\n <div className=\"category-filters-content\">\r\n {this.props.filterGroups.map(group => (\r\n <FilterGroup key={group.title} {...group} />\r\n ))}\r\n </div>\r\n <input\r\n type=\"reset\"\r\n id=\"category-filters-reset\"\r\n className={cn('category-filters-reset', 'is-hidden')}\r\n value={this.props.resetLabel}\r\n onClick={this.onReset}\r\n />\r\n <input\r\n id=\"category-filters-submit\"\r\n type=\"submit\"\r\n className={cn('category-filters-submit', {\r\n 'is-mounted': this.state.isMounted\r\n })}\r\n ref={input => (this.submitButton = input)}\r\n value={this.props.submitLabel}\r\n />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default CategoryFilters;\r\n","import isRunningOnClient from '@creuna/utils/is-running-on-client';\r\n\r\nfunction minWidth(size) {\r\n return function() {\r\n return isRunningOnClient\r\n ? window.matchMedia(`(min-width: ${size}px)`).matches\r\n : null;\r\n };\r\n}\r\n\r\nfunction maxWidth(size) {\r\n return function() {\r\n return isRunningOnClient\r\n ? window.matchMedia(`(max-width: ${size}px)`).matches\r\n : null;\r\n };\r\n}\r\n\r\nconst breakpoints = {\r\n sm: 480,\r\n md: 700,\r\n lg: 1024,\r\n xl: 1280,\r\n xxl: 1600\r\n};\r\n\r\nexport default {\r\n sm: minWidth(breakpoints.sm),\r\n md: minWidth(breakpoints.md),\r\n lg: minWidth(breakpoints.lg),\r\n xl: minWidth(breakpoints.xl),\r\n xxl: minWidth(breakpoints.xxl),\r\n\r\n smMax: maxWidth(breakpoints.sm - 1),\r\n mdMax: maxWidth(breakpoints.md - 1),\r\n lgMax: maxWidth(breakpoints.lg - 1),\r\n xlMax: maxWidth(breakpoints.xl - 1),\r\n xxlMax: maxWidth(breakpoints.xxl - 1)\r\n};\r\n","import get from 'lodash/get';\r\n\r\nconst getFilter = filterGroup =>\r\n filterGroup.colorSelect ||\r\n filterGroup.genderSelect ||\r\n filterGroup.shapeSelect ||\r\n filterGroup.genericFilter;\r\n\r\nexport default function CreateFilterModel({\r\n filters,\r\n showNewProductsOnly,\r\n sorting\r\n}) {\r\n if (!filters || !filters.filterGroups) {\r\n return;\r\n }\r\n\r\n const { filterGroups } = filters;\r\n\r\n return Object.assign(\r\n {},\r\n filterGroups.reduce((accum, filterGroup) => {\r\n const filter = getFilter(filterGroup);\r\n return Object.assign({}, accum, {\r\n [filter.name]: filter.options\r\n .filter(option => option.selected)\r\n .map(option => get(option, 'value'))\r\n });\r\n }, {}),\r\n sorting\r\n ? {\r\n [sorting.name]: get(\r\n sorting.options.find(option => option.selected),\r\n 'value'\r\n )\r\n }\r\n : {},\r\n showNewProductsOnly\r\n ? {\r\n [showNewProductsOnly.name]: showNewProductsOnly.selected\r\n }\r\n : {}\r\n );\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nconst EmptyListMessage = ({ className, text }) => (\r\n <div className={cn('empty-list-message', className)}>{text}</div>\r\n);\r\n\r\nEmptyListMessage.propTypes = {\r\n className: PropTypes.string,\r\n text: PropTypes.string\r\n};\r\n\r\nEmptyListMessage.propTypesMeta = 'exclude';\r\n\r\nexport default EmptyListMessage;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport propTypeTheme from 'utils/prop-type-theme';\r\n\r\nimport FluidImage from '../fluid-image';\r\nimport Link from 'components/link';\r\n\r\nconst themes = {\r\n grid: 'theme-grid'\r\n};\r\n\r\nconst columnClassNames = {\r\n 2: 'two-columns',\r\n 3: 'three-columns'\r\n};\r\n\r\nconst ImageLinkList = ({ columns, items, title, theme }) => (\r\n <div className={cn('image-link-list', columnClassNames[columns], theme)}>\r\n {title && <h2>{title}</h2>}\r\n\r\n <ul>\r\n {items.map(item => (\r\n <li key={item.text + item.url}>\r\n <Link\r\n url={item.url}\r\n className={cn({ 'has-image': !!item.image })}\r\n theme={[Link.themes.noStyle, Link.themes.skew]}\r\n >\r\n {item.image ? (\r\n <React.Fragment>\r\n <div className=\"image-link-list-image\">\r\n <div className=\"image-link-list-image-inner\">\r\n <FluidImage\r\n {...item.image}\r\n imageShouldCoverContainer={false}\r\n />\r\n </div>\r\n </div>\r\n <span className=\"image-link-list-text\">{item.text}</span>\r\n {item.ingress && (\r\n <span className=\"image-link-list-ingress\">\r\n {item.ingress}\r\n </span>\r\n )}\r\n </React.Fragment>\r\n ) : (\r\n <span className=\"image-link-list-big-text\">{item.text}</span>\r\n )}\r\n </Link>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n);\r\n\r\nImageLinkList.propTypes = {\r\n columns: PropTypes.oneOf([2, 3]),\r\n title: PropTypes.string,\r\n theme: propTypeTheme(themes),\r\n items: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n ingress: PropTypes.string,\r\n image: PropTypes.exact(FluidImage.propTypes),\r\n text: PropTypes.string,\r\n url: PropTypes.string\r\n })\r\n )\r\n};\r\n\r\nImageLinkList.propTypesMeta = {\r\n theme: 'exclude'\r\n};\r\n\r\nImageLinkList.defaultProps = {\r\n columns: 3,\r\n items: []\r\n};\r\n\r\nImageLinkList.themes = themes;\r\n\r\nexport default ImageLinkList;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport propTypeTheme from 'utils/prop-type-theme';\r\n\r\nimport Button from '../../button';\r\nimport Icon from '../../icon';\r\nimport TextInput from '../text-input';\r\n\r\nconst Search = ({\r\n autoComplete,\r\n buttonText,\r\n name,\r\n value,\r\n onChange,\r\n onRef,\r\n placeholder,\r\n showSubmitButton,\r\n theme,\r\n textInputTheme,\r\n useFormsy\r\n}) => (\r\n <div className={cn('search', theme)}>\r\n <TextInput\r\n autoComplete={autoComplete}\r\n className=\"search-input\"\r\n defaultValue={value}\r\n name={name}\r\n onChange={onChange}\r\n onRef={onRef}\r\n placeholder={placeholder}\r\n shouldShowErrorMessage={false}\r\n shouldSetValueOnChange={true}\r\n type=\"search\"\r\n theme={textInputTheme}\r\n useFormsy={useFormsy}\r\n />\r\n\r\n {showSubmitButton && (\r\n <div className=\"search-button-container\">\r\n <Button className=\"search-button\" type=\"submit\" text={buttonText}>\r\n <Icon name=\"magnifier\" />\r\n </Button>\r\n </div>\r\n )}\r\n </div>\r\n);\r\n\r\nconst themes = {\r\n big: 'theme-big'\r\n};\r\n\r\nSearch.propTypes = {\r\n autoComplete: PropTypes.string,\r\n buttonText: PropTypes.string,\r\n name: PropTypes.string,\r\n onChange: PropTypes.func,\r\n onRef: PropTypes.func,\r\n placeholder: PropTypes.string,\r\n useFormsy: PropTypes.bool,\r\n showSubmitButton: PropTypes.bool,\r\n theme: propTypeTheme(themes),\r\n textInputTheme: PropTypes.any,\r\n value: PropTypes.string\r\n};\r\n\r\nSearch.propTypesMeta = {\r\n autoComplete: 'exclude',\r\n useFormsy: 'exclude',\r\n showSubmitButton: 'exclude',\r\n theme: 'exclude',\r\n textInputTheme: 'exclude'\r\n};\r\n\r\nSearch.defaultProps = {\r\n name: 'search-term',\r\n showSubmitButton: true,\r\n value: ''\r\n};\r\n\r\nSearch.themes = themes;\r\n\r\nexport default Search;\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Image from '../image';\r\nimport RichText from 'components/rich-text';\r\nimport Icon from 'components/icon';\r\nimport cn from 'classnames';\r\n\r\nconst SolarisBanner = ({ image, imageText, title, text }) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const contentRef = useRef(null);\r\n const [height, setHeight] = useState(0);\r\n const hasImage = image && image.src;\r\n\r\n useEffect(() => {\r\n const updateHeight = () => {\r\n if (contentRef.current) {\r\n const content = contentRef.current;\r\n setHeight(isOpen ? content.getBoundingClientRect().height : 0);\r\n }\r\n };\r\n\r\n updateHeight();\r\n\r\n if (isOpen) {\r\n window.addEventListener('resize', updateHeight);\r\n } else {\r\n window.removeEventListener('resize', updateHeight);\r\n }\r\n\r\n return () => {\r\n window.removeEventListener('resize', updateHeight);\r\n };\r\n }, [isOpen]);\r\n\r\n const handleToggle = event => {\r\n event.preventDefault();\r\n setIsOpen(!isOpen);\r\n };\r\n\r\n const ariaControl = 'solaris-banner-content';\r\n const ariaLabelledby = 'solaris-banner-title';\r\n\r\n return (\r\n <div\r\n className={cn('solaris-banner', {\r\n 'solaris-banner--expanded': isOpen,\r\n 'solaris-banner--has-image': hasImage\r\n })}\r\n >\r\n <button\r\n className=\"solaris-banner-toggle\"\r\n onClick={handleToggle}\r\n aria-expanded={isOpen}\r\n aria-controls={ariaControl}\r\n id={ariaLabelledby}\r\n >\r\n <span>{title}</span>\r\n <Icon className=\"solaris-banner-icon\" name=\"small-arrow-down\" />\r\n </button>\r\n\r\n <div\r\n id={ariaControl}\r\n className=\"solaris-banner-expandable-content\"\r\n style={{ maxHeight: `${height}px` }}\r\n role=\"region\"\r\n aria-labelledby={ariaLabelledby}\r\n >\r\n <div className=\"solaris-banner-content\" ref={contentRef}>\r\n {image && (\r\n <div className=\"solaris-logo-block\">\r\n <Image {...image} />\r\n <span>{imageText}</span>\r\n </div>\r\n )}\r\n <div className=\"solaris-text-block\">\r\n <div className=\"solaris-text-block-content\">\r\n <RichText text={text} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nSolarisBanner.propTypes = {\r\n image: PropTypes.exact(Image.propTypes),\r\n imageText: PropTypes.string,\r\n title: PropTypes.string,\r\n text: PropTypes.string\r\n};\r\n\r\nexport default SolarisBanner;\r\n","import PropTypes from 'prop-types';\r\n\r\nconst PaginatorLink = () => {};\r\n\r\nPaginatorLink.propTypes = {\r\n text: PropTypes.string,\r\n url: PropTypes.string,\r\n isDisabled: PropTypes.bool\r\n};\r\n\r\nexport default PaginatorLink;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\n\r\nimport Link from '../link';\r\nimport PaginatorLink from './paginator-link';\r\n\r\nconst Paginator = ({ links, previousLink, nextLink }) => (\r\n <div className=\"paginator\">\r\n <div className=\"paginator__content\">\r\n {previousLink && (\r\n <div\r\n className={cn('paginator__navigation', {\r\n 'paginator__navigation--disabled': previousLink.isDisabled\r\n })}\r\n >\r\n {previousLink.isDisabled ? (\r\n <span className=\"paginator__navigation-placeholder\">\r\n {previousLink.text}\r\n </span>\r\n ) : (\r\n <Link\r\n text={previousLink.text}\r\n url={previousLink.url}\r\n theme={Link.themes.light}\r\n />\r\n )}\r\n </div>\r\n )}\r\n <ul className=\"paginator__list\">\r\n {links.map((link, index) => (\r\n <li key={index} className={cn('paginator__item')}>\r\n <a\r\n className={cn('paginator__link', {\r\n 'paginator__link--disabled': link.isDisabled\r\n })}\r\n href={link.isDisabled ? undefined : link.url}\r\n >\r\n {link.text}\r\n </a>\r\n </li>\r\n ))}\r\n </ul>\r\n {nextLink && (\r\n <div\r\n className={cn('paginator__navigation', {\r\n 'paginator__navigation--disabled': nextLink.isDisabled\r\n })}\r\n >\r\n {nextLink.isDisabled ? (\r\n <span className=\"paginator__navigation-placeholder\">\r\n {nextLink.text}\r\n </span>\r\n ) : (\r\n <Link\r\n text={nextLink.text}\r\n url={nextLink.url}\r\n theme={Link.themes.light}\r\n />\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n);\r\n\r\nPaginator.propTypes = {\r\n nextLink: PropTypes.exact(PaginatorLink.propTypes),\r\n previousLink: PropTypes.exact(PaginatorLink.propTypes),\r\n links: PropTypes.arrayOf(PropTypes.exact(PaginatorLink.propTypes))\r\n};\r\n\r\nPaginator.defaultProps = {\r\n links: []\r\n};\r\n\r\nexport default Paginator;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport RichText from 'components/rich-text';\r\n\r\nconst ProductsFooter = ({ title, text }) => {\r\n return (\r\n <div className=\"products-footer\">\r\n {title && <h3 className=\"products-footer__title\">{title}</h3>}\r\n {text && (\r\n <RichText\r\n text={text}\r\n hasBottomMargin={false}\r\n className=\"products-footer__lead\"\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nProductsFooter.propTypes = {\r\n title: PropTypes.string,\r\n text: PropTypes.string\r\n};\r\n\r\nProductsFooter.propTypesMeta = {};\r\n\r\nexport default ProductsFooter;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\nimport debounce from 'lodash/debounce';\r\nimport get from 'lodash/get';\r\nimport toQueryString from '@creuna/utils/to-query-string';\r\n\r\nimport breakpoints from 'js/breakpoints';\r\nimport createFilterModel from './create-filter-model';\r\nimport propTypeTheme from 'utils/prop-type-theme';\r\n\r\nimport Button from '../button';\r\nimport CategoryFilters from '../category-filters';\r\nimport ContentContainer from '../content-container';\r\nimport Checkbox from '../form-elements/checkbox';\r\nimport EmptyListMessage from '../empty-list-message';\r\nimport Form from '../form';\r\nimport ImageLinkList from '../image-link-list';\r\nimport PageSpinner from '../page-spinner';\r\nimport ProductList from '../product-list';\r\nimport Select from '../form-elements/select';\r\nimport Search from 'components/form-elements/search';\r\nimport SolarisBanner from './solaris-banner';\r\nimport Paginator from '../paginator';\r\nimport ProductsFooter from './products-footer';\r\n\r\nconst themes = {\r\n search: 'theme-search'\r\n};\r\n\r\nclass CategoryPage extends React.Component {\r\n static propTypes = {\r\n articles: PropTypes.exact(ImageLinkList.propTypes),\r\n articlesButtonText: PropTypes.string,\r\n pagination: PropTypes.exact(Paginator.propTypes),\r\n endpoint: PropTypes.string.isRequired,\r\n filters: PropTypes.exact(CategoryFilters.propTypes),\r\n hasMoreProducts: PropTypes.bool,\r\n moreProductsEndpoint: PropTypes.string,\r\n moreProductsLabel: PropTypes.string,\r\n noResultsMessage: PropTypes.string,\r\n numberOfProducts: PropTypes.string,\r\n productList: PropTypes.exact(ProductList.propTypes),\r\n productsButtonText: PropTypes.string,\r\n search: PropTypes.exact(Search.propTypes),\r\n showArticles: PropTypes.bool,\r\n showFiltersLabel: PropTypes.string,\r\n showNewProductsOnly: PropTypes.exact(Checkbox.propTypes),\r\n solarisBanner: PropTypes.exact(SolarisBanner.propTypes),\r\n sorting: PropTypes.exact(Select.propTypes),\r\n theme: propTypeTheme(themes),\r\n title: PropTypes.string,\r\n productsFooter: PropTypes.exact(ProductsFooter.propTypes)\r\n };\r\n\r\n static propTypesMeta = {\r\n theme: 'exclude'\r\n };\r\n\r\n static defaultProps = {\r\n products: []\r\n };\r\n\r\n state = {\r\n articles: this.props.articles,\r\n articlesButtonText: this.props.articlesButtonText,\r\n filters: this.props.filters,\r\n pagination: this.props.pagination,\r\n filtersVisible: false,\r\n hasMoreProducts: this.props.hasMoreProducts,\r\n isArticlesVisible: this.props.showArticles,\r\n isDesktop: true,\r\n isLoading: false,\r\n moreProductsEndpoint: this.props.moreProductsEndpoint,\r\n numberOfProducts: this.props.numberOfProducts,\r\n productList: this.props.productList,\r\n productsButtonText: this.props.productsButtonText,\r\n title: this.props.title,\r\n productsFooter: this.props.productsFooter\r\n };\r\n\r\n searchTerm = get(this.props.search, 'value', '');\r\n previousFormData = {\r\n [get(this.props.showNewProductsOnly, 'name', '')]: get(\r\n this.props.showNewProductsOnly,\r\n 'selected'\r\n ),\r\n [get(this.props.sorting, 'name', '')]:\r\n get(this.props.sorting, 'options', []).find(option => option.selected) ||\r\n get(this.props.sorting, 'options[0].value')\r\n };\r\n\r\n componentDidMount() {\r\n this.onResize();\r\n window.addEventListener('resize', this.debouncedResize);\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('resize', this.debouncedResize);\r\n }\r\n\r\n onFiltersChange = data => {\r\n if (this.state.isLoading) {\r\n return;\r\n }\r\n\r\n if (this.props.search) {\r\n const newSearchTerm = get(data, get(this.props.search, 'name', ''), '');\r\n\r\n if (this.searchTerm !== newSearchTerm) {\r\n // NOTE: We don't want to search while the user is typing\r\n this.searchTerm = newSearchTerm;\r\n return;\r\n }\r\n }\r\n\r\n // We need a separate check for 'show only new products' and result sorting, because these should refresh page on change\r\n let shouldRefresh = false;\r\n\r\n if (this.props.showNewProductsOnly) {\r\n const key = get(this.props.showNewProductsOnly, 'name', '');\r\n if (this.previousFormData[key] !== data[key]) {\r\n shouldRefresh = true;\r\n }\r\n }\r\n\r\n if (this.props.sorting) {\r\n const key = get(this.props.sorting, 'name', '');\r\n if (this.previousFormData[key] !== data[key]) {\r\n shouldRefresh = true;\r\n }\r\n }\r\n\r\n this.previousFormData = data;\r\n\r\n if ((this.formsy && this.state.isDesktop) || shouldRefresh) {\r\n window.history.replaceState(\r\n {},\r\n null,\r\n window.location.pathname + toQueryString(data)\r\n );\r\n this.formsy.submit();\r\n }\r\n };\r\n\r\n onResize = () => {\r\n this.setState({ isDesktop: breakpoints.md() });\r\n };\r\n\r\n debouncedResize = debounce(this.onResize, 400);\r\n\r\n hideFilters = () => {\r\n document.body.style.position = '';\r\n document.body.style.overflow = '';\r\n this.setState({ filtersVisible: false });\r\n };\r\n\r\n showFilters = () => {\r\n if (!this.state.isDesktop) {\r\n document.body.style.position = 'fixed';\r\n document.body.style.overflow = 'hidden';\r\n this.mobileFilterContainer.scrollTop = 0;\r\n }\r\n this.setState({ filtersVisible: true });\r\n };\r\n\r\n showArticles = () => {\r\n this.setState({ isArticlesVisible: true });\r\n };\r\n\r\n showProducts = () => {\r\n this.setState({ isArticlesVisible: false });\r\n };\r\n\r\n onBeforeSubmit = () => {\r\n this.setState({ isLoading: true });\r\n };\r\n\r\n onResponse = (response, shouldReplaceProducts) => {\r\n const newFilterModel = Object.assign(\r\n {},\r\n this.formsy.getModel(),\r\n createFilterModel(response)\r\n );\r\n\r\n this.formsy.reset(newFilterModel);\r\n this.previousFormData = this.formsy.getModel();\r\n\r\n this.setState(\r\n previousState => {\r\n const products = get(response, 'productList.products', []);\r\n const oldProducts = get(previousState, 'productList.products', []);\r\n const newProducts = shouldReplaceProducts\r\n ? products\r\n : oldProducts.concat(products);\r\n\r\n return Object.assign({}, response, {\r\n isLoading: false,\r\n productList: {\r\n ...previousState.productList,\r\n products: newProducts\r\n },\r\n pagination: response.pagination\r\n });\r\n },\r\n () => {\r\n this.hideFilters();\r\n }\r\n );\r\n };\r\n\r\n render() {\r\n const loadMoreFormId = 'load-more-products';\r\n const hasProducts = get(this.state.productList, 'products', []).length > 0;\r\n\r\n return (\r\n <div className={cn('category-page', this.props.theme)}>\r\n <Form\r\n endpoint={this.props.endpoint}\r\n onChange={this.onFiltersChange}\r\n onBeforeSubmit={this.onBeforeSubmit}\r\n onResponse={response => {\r\n this.onResponse(response, true);\r\n }}\r\n onRef={formsy => {\r\n this.formsy = formsy;\r\n }}\r\n showSubmitButton={false}\r\n >\r\n <PageSpinner isLoading={this.state.isLoading} />\r\n <ContentContainer className=\"category-page-header\">\r\n <h1>{this.state.title}</h1>\r\n {this.props.search && (\r\n <React.Fragment>\r\n <div className=\"category-page-search-tabs\">\r\n <button\r\n className={cn('category-page-search-tab', {\r\n 'is-active': !this.state.isArticlesVisible\r\n })}\r\n type=\"button\"\r\n onClick={this.showProducts}\r\n >\r\n {this.state.productsButtonText}\r\n </button>\r\n <button\r\n className={cn('category-page-search-tab', {\r\n 'is-active': this.state.isArticlesVisible\r\n })}\r\n type=\"button\"\r\n onClick={this.showArticles}\r\n >\r\n {this.state.articlesButtonText}\r\n </button>\r\n </div>\r\n\r\n <div className=\"category-page-search\">\r\n <Search useFormsy={true} {...this.props.search} />\r\n </div>\r\n </React.Fragment>\r\n )}\r\n </ContentContainer>\r\n\r\n <div style={{ display: this.state.isArticlesVisible ? 'none' : '' }}>\r\n <ContentContainer className=\"category-page-content\">\r\n <div\r\n className={cn('category-page-filters', {\r\n 'is-visible': this.state.filtersVisible\r\n })}\r\n ref={div => (this.mobileFilterContainer = div)}\r\n >\r\n <div className=\"category-page-filters-content\">\r\n <CategoryFilters\r\n hideFilters={this.hideFilters}\r\n isVisible={this.state.filtersVisible}\r\n onRef={formsy => (this.formsy = formsy)}\r\n {...this.state.filters}\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"category-page-products\">\r\n {this.props.solarisBanner && (\r\n <SolarisBanner {...this.props.solarisBanner} />\r\n )}\r\n\r\n <div className=\"category-page-filter-sort-container\">\r\n <div className=\"category-page-number-of-products\">\r\n {this.state.numberOfProducts}\r\n </div>\r\n\r\n <div className=\"category-page-news\">\r\n {this.props.showNewProductsOnly && (\r\n <Checkbox\r\n idPrefix=\"category-show\"\r\n {...this.props.showNewProductsOnly}\r\n />\r\n )}\r\n </div>\r\n\r\n <div className=\"category-page-filter-sort\">\r\n <Button\r\n className=\"category-page-show-filters\"\r\n onClick={this.showFilters}\r\n text={this.props.showFiltersLabel}\r\n theme={Button.themes.gray}\r\n />\r\n\r\n {this.props.sorting && (\r\n <div className=\"category-page-sort\">\r\n <Select\r\n idPrefix=\"category-page-sort\"\r\n shouldShowCheckmark={false}\r\n theme={[\r\n Select.themes.gray,\r\n Select.themes.smallPadding\r\n ]}\r\n {...this.props.sorting}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {hasProducts ? (\r\n <div className=\"category-page-product-list\">\r\n <ProductList\r\n shouldAnimate={true}\r\n theme={[\r\n ProductList.themes.narrow,\r\n ProductList.themes.noMargin\r\n ]}\r\n {...this.state.productList}\r\n />\r\n </div>\r\n ) : (\r\n <EmptyListMessage text={this.props.noResultsMessage} />\r\n )}\r\n\r\n <div className=\"category-page-load-more\">\r\n {this.state.hasMoreProducts &&\r\n !this.state.isArticlesVisible && (\r\n <Button\r\n formId={loadMoreFormId}\r\n theme={[Button.themes.light, Button.themes.big]}\r\n text={this.props.moreProductsLabel}\r\n type=\"submit\"\r\n />\r\n )}\r\n </div>\r\n {this.state.pagination && (\r\n <div className=\"category-page-load-more\">\r\n <Paginator {...this.state.pagination} />\r\n </div>\r\n )}\r\n\r\n {this.state.productsFooter && (\r\n <div className=\"category-page-products-footer\">\r\n <ProductsFooter {...this.state.productsFooter} />\r\n </div>\r\n )}\r\n </div>\r\n </ContentContainer>\r\n </div>\r\n </Form>\r\n\r\n <Form\r\n endpoint={this.state.moreProductsEndpoint}\r\n id={loadMoreFormId}\r\n onBeforeSubmit={this.onBeforeSubmit}\r\n onResponse={this.onResponse}\r\n showSubmitButton={false}\r\n />\r\n\r\n {this.state.isArticlesVisible && (\r\n <ContentContainer className=\"category-page-content\">\r\n <ImageLinkList\r\n theme={ImageLinkList.themes.grid}\r\n {...this.state.articles}\r\n />\r\n </ContentContainer>\r\n )}\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nCategoryPage.themes = themes;\r\n\r\nexport default CategoryPage;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Form from '../form';\r\nimport PageSpinner from '../page-spinner';\r\n\r\nconst MyPageForm = ({\r\n children,\r\n endpoint,\r\n onResponse,\r\n submitLabel,\r\n showSubmitButton,\r\n validationEndpoint\r\n}) => (\r\n <Form\r\n endpoint={endpoint}\r\n onResponse={onResponse}\r\n submitLabel={submitLabel}\r\n validationEndpoint={validationEndpoint}\r\n showSubmitButton={showSubmitButton}\r\n >\r\n {({ isLoading }) => (\r\n <React.Fragment>\r\n <PageSpinner shouldContainInParent={true} isLoading={isLoading} />\r\n {children}\r\n </React.Fragment>\r\n )}\r\n </Form>\r\n);\r\n\r\nMyPageForm.propTypes = {\r\n children: PropTypes.node,\r\n endpoint: PropTypes.string,\r\n onResponse: PropTypes.func,\r\n showSubmitButton: PropTypes.bool,\r\n submitLabel: PropTypes.string,\r\n validationEndpoint: PropTypes.string\r\n};\r\n\r\nMyPageForm.propTypesMeta = {\r\n showSubmitButton: 'exclude'\r\n};\r\n\r\nMyPageForm.defaultProps = {\r\n onResponse: () => {}\r\n};\r\n\r\nexport default MyPageForm;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport ContentContainer from '../content-container';\r\nimport Icon from '../icon';\r\nimport Link from '../link';\r\n\r\nconst MyPageLayout = ({\r\n children,\r\n className,\r\n ingress,\r\n title,\r\n link,\r\n logoutLink\r\n}) => (\r\n <div className={cn('my-page-layout', className)}>\r\n <ContentContainer>\r\n {link && (\r\n <Link prependChildren={true} theme={Link.themes.skew} {...link}>\r\n <Icon name=\"small-arrow-left\" />\r\n </Link>\r\n )}\r\n\r\n {(title || ingress) && (\r\n <div className=\"my-page-layout-header\">\r\n {title && <h1>{title}</h1>}\r\n {ingress && <p>{ingress}</p>}\r\n {logoutLink && (\r\n <Link className=\"my-page-layout-logout\" {...logoutLink} />\r\n )}\r\n </div>\r\n )}\r\n\r\n <div className=\"my-page-layout-content\">{children}</div>\r\n </ContentContainer>\r\n </div>\r\n);\r\n\r\nMyPageLayout.propTypes = {\r\n children: PropTypes.node,\r\n className: PropTypes.string,\r\n ingress: PropTypes.string,\r\n title: PropTypes.string,\r\n link: PropTypes.exact(Link.propTypes),\r\n logoutLink: PropTypes.exact(Link.propTypes)\r\n};\r\n\r\nMyPageLayout.propTypesMeta = {\r\n className: 'exclude'\r\n};\r\n\r\nexport default MyPageLayout;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Icon from '../icon';\r\nimport Link from '../link';\r\nimport RichText from '../rich-text';\r\n\r\nconst MyPageSection = ({\r\n children,\r\n headingLevel,\r\n ingress,\r\n label,\r\n link,\r\n links,\r\n title\r\n}) => {\r\n const Title = 'h' + headingLevel;\r\n\r\n return (\r\n <div className=\"my-page-section\">\r\n <div className=\"my-page-section-header\">\r\n <Title>{title}</Title>\r\n {ingress && (\r\n <RichText\r\n className=\"my-page-section-ingress\"\r\n theme={RichText.themes.centered}\r\n {...ingress}\r\n />\r\n )}\r\n\r\n {label && <p>{label}</p>}\r\n {link && (\r\n <Link theme={Link.themes.skew} {...link}>\r\n <Icon className=\"my-orders-link-icon\" name=\"small-arrow-right\" />\r\n </Link>\r\n )}\r\n\r\n {links.length > 0 &&\r\n links.map(link => (\r\n <Link key={link.url} theme={Link.themes.skew} {...link}>\r\n <Icon className=\"my-orders-link-icon\" name=\"small-arrow-right\" />\r\n </Link>\r\n ))}\r\n </div>\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\nMyPageSection.propTypes = {\r\n children: PropTypes.node,\r\n headingLevel: PropTypes.number,\r\n ingress: PropTypes.exact(RichText.propTypes),\r\n label: PropTypes.string,\r\n link: PropTypes.exact(Link.propTypes),\r\n links: PropTypes.arrayOf(PropTypes.exact(Link.propTypes)),\r\n title: PropTypes.string\r\n};\r\n\r\nMyPageSection.propTypesMeta = {\r\n headingLevel: 'exclude'\r\n};\r\n\r\nMyPageSection.defaultProps = {\r\n headingLevel: 2,\r\n links: []\r\n};\r\n\r\nexport default MyPageSection;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Grid from '../grid';\r\nimport TextInput from '../form-elements/text-input';\r\nimport MyPageForm from '../my-page-form';\r\nimport MyPageLayout from 'components/my-page-layout';\r\nimport MyPageSection from 'components/my-page-section';\r\nimport ValidationErrorTexts from 'components/validation-error-texts';\r\n\r\nconst ChangeEmailPage = ({\r\n form,\r\n layout,\r\n newEmail,\r\n oldEmail,\r\n section,\r\n validationErrors\r\n}) => {\r\n return (\r\n <MyPageLayout {...layout}>\r\n <Grid theme={Grid.themes.leftColumnWider}>\r\n <Grid.Column>\r\n <MyPageSection headingLevel={1} {...section}>\r\n <MyPageForm {...form}>\r\n <TextInput\r\n validations=\"isRequired,isEmail\"\r\n validationErrors={validationErrors}\r\n {...oldEmail}\r\n />\r\n <TextInput\r\n validations=\"isRequired,isEmail\"\r\n validationErrors={validationErrors}\r\n {...newEmail}\r\n />\r\n </MyPageForm>\r\n </MyPageSection>\r\n </Grid.Column>\r\n </Grid>\r\n </MyPageLayout>\r\n );\r\n};\r\n\r\nChangeEmailPage.propTypes = {\r\n form: PropTypes.exact(MyPageForm.propTypes),\r\n layout: PropTypes.exact(MyPageLayout.propTypes),\r\n newEmail: PropTypes.exact(TextInput.propTypes),\r\n oldEmail: PropTypes.exact(TextInput.propTypes),\r\n section: PropTypes.exact(MyPageSection.propTypes),\r\n validationErrors: PropTypes.exact(ValidationErrorTexts.propTypes)\r\n};\r\n\r\nexport default ChangeEmailPage;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Grid from '../grid';\r\nimport TextInput from '../form-elements/text-input';\r\nimport MyPageForm from '../my-page-form';\r\nimport MyPageLayout from 'components/my-page-layout';\r\nimport MyPageSection from 'components/my-page-section';\r\nimport ValidationErrorTexts from 'components/validation-error-texts';\r\n\r\nconst ChangePasswordPage = ({\r\n form,\r\n layout,\r\n newPassword,\r\n oldPassword,\r\n section,\r\n validationErrors\r\n}) => {\r\n return (\r\n <MyPageLayout {...layout}>\r\n <Grid theme={Grid.themes.leftColumnWider}>\r\n <Grid.Column>\r\n <MyPageSection headingLevel={1} {...section}>\r\n <MyPageForm {...form}>\r\n {oldPassword && (\r\n <TextInput\r\n validations=\"isRequired\"\r\n validationErrors={validationErrors}\r\n type=\"password\"\r\n {...oldPassword}\r\n />\r\n )}\r\n {newPassword && (\r\n <TextInput\r\n validations=\"isRequired\"\r\n validationErrors={validationErrors}\r\n type=\"password\"\r\n {...newPassword}\r\n />\r\n )}\r\n </MyPageForm>\r\n </MyPageSection>\r\n </Grid.Column>\r\n </Grid>\r\n </MyPageLayout>\r\n );\r\n};\r\n\r\nChangePasswordPage.propTypes = {\r\n form: PropTypes.exact(MyPageForm.propTypes),\r\n layout: PropTypes.exact(MyPageLayout.propTypes),\r\n newPassword: PropTypes.shape(TextInput.propTypes),\r\n oldPassword: PropTypes.shape(TextInput.propTypes),\r\n section: PropTypes.exact(MyPageSection.propTypes),\r\n validationErrors: PropTypes.exact(ValidationErrorTexts.propTypes)\r\n};\r\n\r\nexport default ChangePasswordPage;\r\n","import { useEffect } from 'react';\r\nimport isRunningOnClient from '@creuna/utils/is-running-on-client';\r\n\r\nimport chatScript from '!raw-loader!./script.js';\r\n\r\nconst Chat = () => {\r\n if (!isRunningOnClient) return null;\r\n\r\n let script = '';\r\n let style = '';\r\n\r\n const createScriptElement = () => {\r\n const scriptElement = document.createElement('script');\r\n\r\n scriptElement.innerHTML = chatScript;\r\n scriptElement.async = true;\r\n\r\n return scriptElement;\r\n };\r\n\r\n const createStyleElement = () => {\r\n const styleElement = document.createElement('style');\r\n\r\n styleElement.innerHTML = `\r\n @media (max-width: 700px) {\r\n #magic-widget-launcher-parent { bottom: 25px !important; }\r\n }`;\r\n styleElement.async = true;\r\n\r\n return styleElement;\r\n };\r\n\r\n useEffect(() => {\r\n script = createScriptElement();\r\n style = createStyleElement();\r\n\r\n document.body.appendChild(script);\r\n document.body.appendChild(style);\r\n\r\n return () => {\r\n document.body.removeChild(script);\r\n document.body.removeChild(style);\r\n };\r\n }, []);\r\n\r\n return null;\r\n};\r\n\r\nChat.propTypesMeta = 'exclude';\r\n\r\nexport default Chat;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Button from 'components/button';\r\nimport Icon from 'components/icon';\r\n\r\nconst CheckoutButton = ({ attributes, disabled, onClick, text, type }) => {\r\n return (\r\n <Button\r\n attributes={attributes}\r\n className=\"checkout-button\"\r\n disabled={disabled}\r\n onClick={onClick}\r\n text={text}\r\n theme={[Button.themes.orange, Button.themes.uppercase]}\r\n type={type}\r\n >\r\n <Icon className=\"checkout-button-icon\" name=\"small-arrow-right\" />\r\n </Button>\r\n );\r\n};\r\n\r\nCheckoutButton.propTypes = {\r\n attributes: PropTypes.object,\r\n disabled: PropTypes.bool,\r\n onClick: PropTypes.func,\r\n text: PropTypes.string,\r\n type: PropTypes.string\r\n};\r\n\r\nCheckoutButton.propTypesMeta = 'exclude';\r\n\r\nexport default CheckoutButton;\r\n","import React from 'react';\r\n\r\nconst Context = React.createContext({\r\n isLoading: false,\r\n setIsLoading: () => {},\r\n iframeHTML: '',\r\n setIframeHTML: () => {}\r\n});\r\n\r\nexport default Context;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport CheckoutContext from 'components/checkout-page/checkout-context';\r\n\r\nimport Button from 'components/button';\r\nimport Form from 'components/form';\r\nimport Link from 'components/link';\r\nimport TextInput from 'components/form-elements/text-input';\r\n\r\nconst CheckoutLoginForm = ({\r\n endpoint,\r\n forgotPasswordLink,\r\n onLoggedIn,\r\n password,\r\n submitLabel,\r\n text,\r\n title,\r\n userId\r\n}) => {\r\n const { setIsLoading } = React.useContext(CheckoutContext);\r\n\r\n return (\r\n <Form\r\n className=\"checkout-login-form\"\r\n endpoint={endpoint}\r\n onBeforeSubmit={() => setIsLoading(true)}\r\n onResponse={({ isLoggedIn }) => {\r\n isLoggedIn && onLoggedIn();\r\n setIsLoading(false);\r\n }}\r\n showSubmitButton={false}\r\n >\r\n {title && <h3>{title}</h3>}\r\n {text && <p>{text}</p>}\r\n <TextInput detectAutofill={true} validations=\"isRequired\" {...userId} />\r\n <TextInput\r\n detectAutofill={true}\r\n type=\"password\"\r\n validations=\"isRequired\"\r\n {...password}\r\n />\r\n\r\n <div className=\"checkout-login-form-footer\">\r\n <Button\r\n className=\"checkout-login-form-submit\"\r\n type=\"submit\"\r\n text={submitLabel}\r\n theme={Button.themes.orange}\r\n />\r\n {forgotPasswordLink && <Link {...forgotPasswordLink} />}\r\n </div>\r\n </Form>\r\n );\r\n};\r\n\r\nCheckoutLoginForm.propTypes = {\r\n endpoint: PropTypes.string,\r\n forgotPasswordLink: PropTypes.exact(Link.propTypes),\r\n onLoggedIn: PropTypes.func,\r\n password: PropTypes.exact(TextInput.propTypes),\r\n submitLabel: PropTypes.string,\r\n text: PropTypes.string,\r\n title: PropTypes.string,\r\n userId: PropTypes.exact(TextInput.propTypes)\r\n};\r\n\r\nCheckoutLoginForm.defaultProps = {\r\n onLoggedIn: () => {}\r\n};\r\n\r\nexport default CheckoutLoginForm;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport CheckoutContext from 'components/checkout-page/checkout-context';\r\n\r\nimport Button from 'components/button';\r\nimport Form from 'components/form';\r\nimport TextInput from 'components/form-elements/text-input';\r\n\r\nconst CheckoutRegisterForm = ({\r\n bullets,\r\n endpoint,\r\n onRegistered,\r\n submitLabel,\r\n text,\r\n title,\r\n userId\r\n}) => {\r\n const { setIsLoading } = React.useContext(CheckoutContext);\r\n\r\n return (\r\n <Form\r\n className=\"checkout-register-form\"\r\n endpoint={endpoint}\r\n onBeforeSubmit={() => setIsLoading(true)}\r\n onResponse={({ isRegistered }) => {\r\n isRegistered && onRegistered();\r\n setIsLoading(false);\r\n }}\r\n showSubmitButton={false}\r\n >\r\n {title && <h3>{title}</h3>}\r\n {bullets.length > 0 && (\r\n <ul className=\"checkout-register-form-bullets\">\r\n {bullets.map(bullet => (\r\n <li key={bullet}>{bullet}</li>\r\n ))}\r\n </ul>\r\n )}\r\n {text && <p>{text}</p>}\r\n <TextInput detectAutofill={true} validations=\"isRequired\" {...userId} />\r\n\r\n <div className=\"checkout-register-form-footer\">\r\n <Button\r\n className=\"checkout-register-form-submit\"\r\n type=\"submit\"\r\n text={submitLabel}\r\n />\r\n </div>\r\n </Form>\r\n );\r\n};\r\n\r\nCheckoutRegisterForm.propTypes = {\r\n bullets: PropTypes.arrayOf(PropTypes.string),\r\n endpoint: PropTypes.string,\r\n onRegistered: PropTypes.func,\r\n submitLabel: PropTypes.string,\r\n text: PropTypes.string,\r\n title: PropTypes.string,\r\n userId: PropTypes.exact(TextInput.propTypes)\r\n};\r\n\r\nCheckoutRegisterForm.defaultProps = {\r\n bullets: []\r\n};\r\n\r\nexport default CheckoutRegisterForm;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport Button from 'components/button';\r\nimport CheckoutButton from 'components/checkout-button';\r\nimport CheckoutLoginForm from 'components/checkout-login-form';\r\nimport CheckoutRegisterForm from 'components/checkout-register-form';\r\n\r\nconst CheckoutLogin = ({\r\n login,\r\n isRegistered,\r\n onComplete,\r\n register,\r\n buttonText\r\n}) => {\r\n const buttonAttributes = { 'data-test-checkout-step-2-button': '' };\r\n return (\r\n <div className=\"checkout-login\">\r\n {login && (\r\n <div className=\"checkout-login-login\">\r\n <CheckoutLoginForm onLoggedIn={() => onComplete(true)} {...login} />\r\n </div>\r\n )}\r\n\r\n {register && (\r\n <div className=\"checkout-login-register\">\r\n <CheckoutRegisterForm\r\n onRegistered={() => onComplete(true)}\r\n {...register}\r\n />\r\n </div>\r\n )}\r\n\r\n <div\r\n className={cn('checkout-login-footer', {\r\n 'is-right-aligned': !isRegistered\r\n })}\r\n >\r\n {isRegistered ? (\r\n <CheckoutButton\r\n attributes={buttonAttributes}\r\n onClick={() => onComplete(false)}\r\n text={buttonText}\r\n />\r\n ) : (\r\n <Button\r\n attributes={buttonAttributes}\r\n onClick={() => onComplete(false)}\r\n text={buttonText}\r\n theme={Button.themes.outline}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nCheckoutLogin.propTypes = {\r\n login: PropTypes.exact(CheckoutLoginForm.propTypes),\r\n isRegistered: PropTypes.bool,\r\n onComplete: PropTypes.func,\r\n register: PropTypes.exact(CheckoutRegisterForm.propTypes),\r\n buttonText: PropTypes.string\r\n};\r\n\r\nexport default CheckoutLogin;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Button from 'components/button';\r\nimport CheckoutButton from 'components/checkout-button';\r\n\r\nconst CheckoutLogout = ({\r\n buttonText,\r\n logoutText,\r\n logoutUrl,\r\n onComplete,\r\n text\r\n}) => {\r\n return (\r\n <div className=\"checkout-logout\">\r\n <div className=\"checkout-logout-content\">\r\n <p>{text}</p>\r\n <Button\r\n className=\"checkout-logout-button\"\r\n url={logoutUrl}\r\n text={logoutText}\r\n theme={Button.themes.outline}\r\n />\r\n </div>\r\n\r\n <CheckoutButton onClick={onComplete} text={buttonText} />\r\n </div>\r\n );\r\n};\r\n\r\nCheckoutLogout.propTypes = {\r\n buttonText: PropTypes.string.isRequired,\r\n logoutText: PropTypes.string,\r\n logoutUrl: PropTypes.string,\r\n onComplete: PropTypes.func,\r\n text: PropTypes.string.isRequired\r\n};\r\n\r\nexport default CheckoutLogout;\r\n","import React from 'react';\r\n\r\n/** Returns the value of `value` from the previous render.\r\n```js\r\nconst [value, setValue] = useState();\r\nconst previousValue = usePrevious(value);\r\n```\r\n */\r\nexport default function usePrevious(value, initialValue) {\r\n const state = React.useRef(initialValue);\r\n\r\n React.useEffect(() => {\r\n state.current = value;\r\n }, [value]);\r\n\r\n return state.current;\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\nimport scrollToElement from '@creuna/utils/scroll-to-element';\r\n\r\nimport Collapse from 'react-tiny-collapse';\r\nimport TinyTransition from 'react-tiny-transition';\r\n\r\nimport useIsMounted from 'hooks/use-is-mounted';\r\nimport usePrevious from 'hooks/use-previous';\r\n\r\nimport Button from 'components/button';\r\nimport Icon from 'components/icon';\r\n\r\nconst themes = {\r\n padding: 'theme-padding'\r\n};\r\n\r\nconst CheckoutStep = ({\r\n children,\r\n collapseLabel,\r\n forceInitialAnimation,\r\n expandLabel,\r\n isEnabled,\r\n isComplete,\r\n number,\r\n theme,\r\n title\r\n}) => {\r\n const [element, setElement] = React.useState();\r\n const [isExpanded, setIsExpanded] = React.useState(true);\r\n\r\n const isMounted = useIsMounted();\r\n\r\n const toggle = () => setIsExpanded(isExpanded => !isExpanded);\r\n\r\n const wasComplete = usePrevious(isComplete);\r\n const wasEnabled = usePrevious(isEnabled);\r\n\r\n React.useEffect(() => {\r\n if (!wasComplete && isComplete) setIsExpanded(false);\r\n }, [isComplete]);\r\n\r\n React.useEffect(() => {\r\n if (!wasEnabled && isEnabled) {\r\n setTimeout(() => {\r\n element && scrollToElement(element);\r\n }, 500);\r\n }\r\n }, [isEnabled]);\r\n\r\n return (\r\n <div\r\n className={cn('checkout-step', theme, {\r\n 'is-completed': isComplete,\r\n 'is-enabled': isEnabled\r\n })}\r\n ref={setElement}\r\n >\r\n <div\r\n className=\"checkout-step-header\"\r\n onClick={isComplete ? toggle : () => {}}\r\n >\r\n <TinyTransition\r\n delay={isComplete ? 0 : 200}\r\n disableInitialAnimation={true}\r\n >\r\n {!isComplete && (\r\n <div className=\"checkout-step-number\">\r\n <span>{number}</span>\r\n </div>\r\n )}\r\n </TinyTransition>\r\n\r\n <TinyTransition delay={isComplete ? 200 : 0}>\r\n {isComplete && (\r\n <div className=\"checkout-step-checkmark\">\r\n <Icon name=\"checkmark\" />\r\n </div>\r\n )}\r\n </TinyTransition>\r\n <h2>{title}</h2>\r\n\r\n {isComplete && (\r\n <div className=\"checkout-step-info\">\r\n <Button\r\n onClick={e => {\r\n e.stopPropagation();\r\n toggle();\r\n }}\r\n text={isExpanded ? collapseLabel : expandLabel}\r\n theme={[Button.themes.link]}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n\r\n {(!isMounted || isEnabled) && (\r\n <Collapse\r\n animateChildren={false}\r\n forceInitialAnimation={isMounted && forceInitialAnimation}\r\n isOpen={isExpanded}\r\n unmountClosed={false}\r\n >\r\n <div\r\n className={cn('checkout-step-content', {\r\n 'checkout-step-content-non-js': !isMounted\r\n })}\r\n >\r\n {children}\r\n </div>\r\n </Collapse>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nCheckoutStep.propTypes = {\r\n children: PropTypes.node,\r\n collapseLabel: PropTypes.string,\r\n forceInitialAnimation: PropTypes.bool,\r\n expandLabel: PropTypes.string,\r\n isEnabled: PropTypes.bool,\r\n isComplete: PropTypes.bool,\r\n number: PropTypes.number,\r\n theme: PropTypes.oneOf(Object.values(themes)),\r\n title: PropTypes.string\r\n};\r\n\r\nCheckoutStep.propTypesMeta = 'exclude';\r\n\r\nCheckoutStep.themes = themes;\r\n\r\nexport default CheckoutStep;\r\n","import React from 'react';\r\n\r\nexport default function useIsMounted() {\r\n const [isMounted, setIsMounted] = React.useState(false);\r\n React.useEffect(() => setIsMounted(true), []);\r\n return isMounted;\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\n\r\nimport Collapse from 'react-tiny-collapse';\r\n\r\nimport CheckoutContext from 'components/checkout-page/checkout-context';\r\n\r\nimport CheckoutButton from 'components/checkout-button';\r\nimport Checkbox from 'components/form-elements/checkbox';\r\nimport CheckboxGroup from 'components/form-elements/checkbox-group';\r\nimport Form from 'components/form';\r\nimport Link from 'components/link';\r\nimport RichText from 'components/rich-text';\r\n\r\nconst TermsForm = ({\r\n buttonText,\r\n marketingConsentsTitle,\r\n marketingConsents,\r\n serviceConsents,\r\n hideServiceConsents,\r\n endpoint,\r\n isDesktopKey,\r\n onResponse,\r\n terms,\r\n termsDescriptionTitle,\r\n termsDescriptionText,\r\n termsLink,\r\n validationMessage\r\n}) => {\r\n const { setIsLoading } = React.useContext(CheckoutContext);\r\n const [isValid, setValid] = React.useState(false);\r\n const [isPristine, setPristine] = React.useState(true);\r\n\r\n const onBeforeSubmit = React.useCallback(\r\n formData => {\r\n setPristine(false);\r\n setIsLoading(true);\r\n return { ...formData, [isDesktopKey]: window.innerWidth > 780 };\r\n },\r\n [isDesktopKey]\r\n );\r\n\r\n return (\r\n <div className=\"terms-form\">\r\n <Form\r\n endpoint={endpoint}\r\n onBeforeSubmit={onBeforeSubmit}\r\n onInvalidSubmit={() => setPristine(false)}\r\n onValidate={setValid}\r\n onResponse={data => {\r\n onResponse(data);\r\n setIsLoading(false);\r\n setPristine(false);\r\n }}\r\n showSubmitButton={false}\r\n >\r\n <div className=\"terms-form-terms\">\r\n {serviceConsents && (\r\n <div className=\"terms-form-panel\">\r\n {termsDescriptionTitle && (\r\n <h3 className=\"terms-form-description-title\">\r\n {termsDescriptionTitle}\r\n </h3>\r\n )}\r\n <div\r\n className={cn('terms-form-service-consents', {\r\n 'terms-form-service-consents--hidden': hideServiceConsents\r\n })}\r\n >\r\n <CheckboxGroup {...serviceConsents} />\r\n </div>\r\n {termsDescriptionText && (\r\n <RichText\r\n theme={RichText.themes.fancyBullets}\r\n text={termsDescriptionText}\r\n />\r\n )}\r\n </div>\r\n )}\r\n <div className=\"terms-form-checkboxes\">\r\n {terms && (\r\n <Checkbox\r\n attributes={{ 'data-test-checkout-checkbox': '' }}\r\n className=\"terms-form-checkbox is-required\"\r\n validations=\"isRequired\"\r\n {...terms}\r\n />\r\n )}\r\n {termsLink && (\r\n <div className=\"terms-form-link-wrapper\">\r\n <Link {...termsLink} />\r\n </div>\r\n )}\r\n <div className=\"terms-form-marketing\">\r\n {marketingConsentsTitle && (\r\n <h3 className=\"terms-form-marketing-title\">\r\n {marketingConsentsTitle}\r\n </h3>\r\n )}\r\n {marketingConsents && (\r\n <div className=\"terms-form-marketing-checkbox\">\r\n <CheckboxGroup {...marketingConsents} />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"terms-form-errors\">\r\n <Collapse isOpen={!isPristine && !isValid}>\r\n <div className=\"terms-form-error\">\r\n <p>{validationMessage}</p>\r\n </div>\r\n </Collapse>\r\n </div>\r\n\r\n <CheckoutButton\r\n attributes={{ 'data-test-checkout-step-3-button': '' }}\r\n text={buttonText}\r\n type=\"submit\"\r\n />\r\n </Form>\r\n </div>\r\n );\r\n};\r\n\r\nTermsForm.propTypes = {\r\n buttonText: PropTypes.string.isRequired,\r\n marketingConsentsTitle: PropTypes.string.isRequired,\r\n marketingConsents: PropTypes.exact(CheckboxGroup.propTypes),\r\n serviceConsents: PropTypes.exact(CheckboxGroup.propTypes),\r\n hideServiceConsents: PropTypes.bool,\r\n endpoint: PropTypes.string.isRequired,\r\n isDesktopKey: PropTypes.string.isRequired,\r\n onResponse: PropTypes.func,\r\n terms: PropTypes.exact(Checkbox.propTypes),\r\n termsDescriptionText: PropTypes.string,\r\n termsDescriptionTitle: PropTypes.string,\r\n termsLink: PropTypes.exact(Link.propTypes),\r\n validationMessage: PropTypes.string\r\n};\r\n\r\nexport default TermsForm;\r\n","import React, { useEffect, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst KlarnaIframe = ({ htmlString, shouldEvalScript }) => {\r\n const container = useRef();\r\n\r\n useEffect(() => {\r\n if (shouldEvalScript) {\r\n const scriptsTags = container.current.getElementsByTagName('script');\r\n\r\n for (var i = 0; i < scriptsTags.length; i++) {\r\n const parentNode = scriptsTags[i].parentNode;\r\n const newScriptTag = document.createElement('script');\r\n newScriptTag.type = 'text/javascript';\r\n newScriptTag.text = scriptsTags[i].text;\r\n parentNode.removeChild(scriptsTags[i]);\r\n parentNode.appendChild(newScriptTag);\r\n }\r\n }\r\n }, []);\r\n\r\n return (\r\n <div ref={container} className=\"klarna-iframe\">\r\n <div\r\n data-test-klarna-iframe\r\n dangerouslySetInnerHTML={{ __html: htmlString }}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nKlarnaIframe.propTypes = {\r\n htmlString: PropTypes.string,\r\n shouldEvalScript: PropTypes.bool\r\n};\r\n\r\nKlarnaIframe.propTypesMeta = 'exclude';\r\n\r\nexport default KlarnaIframe;\r\n","import React, { useEffect, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\n\r\nconst PORTER_BUDDY_ID = 'porterbuddy-widget';\r\n\r\nconst PorterBuddy = ({\r\n config,\r\n onSelect,\r\n onUpdate,\r\n scriptSrc,\r\n styleHref,\r\n hasError\r\n}) => {\r\n const container = useRef();\r\n\r\n useEffect(() => {\r\n const script = document.createElement('script');\r\n const link = document.createElement('link');\r\n\r\n script.src = scriptSrc;\r\n script.async = true;\r\n script.onload = () => {\r\n // console.log('--> Loaded script');\r\n };\r\n\r\n link.href = styleHref;\r\n link.rel = 'stylesheet';\r\n link.type = 'text/css';\r\n\r\n container.current.appendChild(script);\r\n container.current.appendChild(link);\r\n\r\n return () => {\r\n container.current.removeChild(script);\r\n container.current.removeChild(link);\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n window.porterbuddy = {\r\n ...window.porterbuddy,\r\n ...config,\r\n onSelectDeliveryWindow: onSelect,\r\n onSetCallbacks: ({ forceRefresh, setSelectedDeliveryWindow }) => {\r\n PorterBuddy.handleOnRefresh = () => {\r\n // console.log('--> Refreshing porterbuddy');\r\n\r\n forceRefresh(null, true);\r\n };\r\n PorterBuddy.handleOnSelectDeliveryWindow = deliveryWindow => {\r\n // console.log(\r\n // '--> Setting default window in porterbuddy',\r\n // deliveryWindow\r\n // );\r\n\r\n setSelectedDeliveryWindow(deliveryWindow);\r\n };\r\n },\r\n onUpdateDeliveryWindows: onUpdate\r\n };\r\n\r\n if (!config.availabilityResponse) return;\r\n\r\n PorterBuddy.handleOnRefresh();\r\n\r\n PorterBuddy.handleOnSelectDeliveryWindow(\r\n config.availabilityResponse.deliveryWindows[0]\r\n );\r\n\r\n return () => {\r\n window.porterbuddy = undefined;\r\n };\r\n }, [config]);\r\n\r\n return (\r\n <div\r\n aria-live=\"polite\"\r\n className={cn('porter-buddy', {\r\n 'porter-buddy--hidden': hasError\r\n })}\r\n ref={container}\r\n >\r\n <div id={PORTER_BUDDY_ID} />\r\n </div>\r\n );\r\n};\r\n\r\nPorterBuddy.handleOnRefresh = () => {};\r\nPorterBuddy.handleOnSelectDeliveryWindow = () => {};\r\n\r\nPorterBuddy.propTypes = {\r\n styleHref: PropTypes.string,\r\n scriptSrc: PropTypes.string,\r\n hasError: PropTypes.bool,\r\n onSelect: PropTypes.func,\r\n onUpdate: PropTypes.func,\r\n config: PropTypes.shape({\r\n availabilityResponse: PropTypes.object\r\n })\r\n};\r\n\r\nPorterBuddy.defaultProps = {\r\n styleHref: 'https://widget.porterbuddy.com/porterbuddy-widget.css',\r\n scriptSrc: 'https://widget.porterbuddy.com/porterbuddy-widget.js'\r\n};\r\n\r\nPorterBuddy.propTypesMeta = 'exclude';\r\n\r\nexport default PorterBuddy;\r\n","import React, { useEffect, useState, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport PorterBuddy from 'components/delivery-widget/porter-buddy';\r\n\r\nconst KlarnaAndPorterbuddy = ({\r\n klarnaIframeHtml,\r\n porterBuddyConfig,\r\n onKlarnaChange,\r\n onDeliveryWindowChange,\r\n hasError,\r\n klarnaErrorMessage\r\n}) => {\r\n const container = useRef();\r\n\r\n const [config, setConfig] = useState({\r\n ...porterBuddyConfig,\r\n availabilityResponse: undefined\r\n });\r\n const [availability, setAvailability] = useState();\r\n const [activePostalCode, setActivePostalCode] = useState();\r\n\r\n async function handleOnDeliveryWindowSelect(deliveryWindow) {\r\n KlarnaAndPorterbuddy.handleOnKlarnaSuspend();\r\n\r\n await onDeliveryWindowChange(deliveryWindow);\r\n\r\n KlarnaAndPorterbuddy.handleOnKlarnaResume();\r\n }\r\n\r\n async function handleOnUpdateDeliveryWindows(callback, additionalInfo) {\r\n KlarnaAndPorterbuddy.handleOnKlarnaSuspend();\r\n\r\n const availability = await onKlarnaChange(activePostalCode, additionalInfo);\r\n\r\n callback({ ...availability, additionalInfo });\r\n\r\n KlarnaAndPorterbuddy.handleOnKlarnaResume();\r\n }\r\n\r\n async function handleOnKlarnaChange(postalCode, additionalInfo) {\r\n let availabilityResponse = {};\r\n\r\n setActivePostalCode(postalCode);\r\n\r\n try {\r\n availabilityResponse = await onKlarnaChange(postalCode, additionalInfo);\r\n\r\n setAvailability(availabilityResponse);\r\n } catch (e) {\r\n console.log(e);\r\n setAvailability(undefined);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n const scriptsTags = container.current.getElementsByTagName('script');\r\n\r\n for (var i = 0; i < scriptsTags.length; i++) {\r\n const parentNode = scriptsTags[i].parentNode;\r\n const newScriptTag = document.createElement('script');\r\n newScriptTag.type = 'text/javascript';\r\n newScriptTag.text = scriptsTags[i].text;\r\n parentNode.removeChild(scriptsTags[i]);\r\n parentNode.appendChild(newScriptTag);\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n window._klarnaCheckout(({ on, suspend, resume }) => {\r\n on({\r\n load: ({ shipping_address }) => {\r\n const { postal_code } = shipping_address;\r\n\r\n // console.log('--> Loaded Klarna!');\r\n\r\n handleOnKlarnaChange(postal_code);\r\n },\r\n shipping_address_change: ({ postal_code }) => {\r\n // console.log('--> Klarna changed!');\r\n\r\n handleOnKlarnaChange(postal_code);\r\n }\r\n });\r\n\r\n KlarnaAndPorterbuddy.handleOnKlarnaSuspend = () => {\r\n // console.log('--> Suspending Klarna!');\r\n\r\n suspend();\r\n };\r\n\r\n KlarnaAndPorterbuddy.handleOnKlarnaResume = () => {\r\n // console.log('--> Resuming Klarna!');\r\n\r\n resume();\r\n };\r\n });\r\n\r\n return () => {\r\n window._klarnaCheckout(({ on }) => {\r\n on({\r\n load: undefined,\r\n shipping_address_change: undefined,\r\n validation_callback: undefined\r\n });\r\n });\r\n\r\n window._klarnaCheckout = undefined;\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n KlarnaAndPorterbuddy.handleOnKlarnaSuspend();\r\n if (hasError) {\r\n console.log('--> Klarna validation enabled, should_proceed: false');\r\n window._klarnaCheckout(({ on }) => {\r\n on({\r\n validation_callback: function(_data, callback) {\r\n callback({\r\n should_proceed: false,\r\n message: klarnaErrorMessage\r\n });\r\n }\r\n });\r\n });\r\n } else {\r\n console.log(\r\n '--> Klarna validation removed, validation_callback: undefined'\r\n );\r\n window._klarnaCheckout(({ on }) => {\r\n on({\r\n validation_callback: undefined\r\n });\r\n });\r\n }\r\n KlarnaAndPorterbuddy.handleOnKlarnaResume();\r\n }, [hasError]);\r\n\r\n useEffect(() => {\r\n setConfig({\r\n ...config,\r\n availabilityResponse: availability\r\n });\r\n }, [availability]);\r\n\r\n return (\r\n <div className=\"klarna-and-porterbuddy\">\r\n <div className=\"klarna-and-porterbuddy__porterbuddy\">\r\n <PorterBuddy\r\n config={config}\r\n onSelect={handleOnDeliveryWindowSelect}\r\n onUpdate={handleOnUpdateDeliveryWindows}\r\n hasError={hasError}\r\n />\r\n </div>\r\n <div className=\"klarna-and-porterbuddy__klarna\">\r\n <div ref={container}>\r\n <div\r\n data-test-klarna-iframe\r\n dangerouslySetInnerHTML={{ __html: klarnaIframeHtml }}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nKlarnaAndPorterbuddy.handleOnKlarnaSuspend = () => {};\r\nKlarnaAndPorterbuddy.handleOnKlarnaResume = () => {};\r\n\r\nKlarnaAndPorterbuddy.propTypes = {\r\n klarnaIframeHtml: PropTypes.string,\r\n porterBuddyConfig: PropTypes.object,\r\n onKlarnaChange: PropTypes.func,\r\n onDeliveryWindowChange: PropTypes.func,\r\n hasError: PropTypes.bool,\r\n klarnaErrorMessage: PropTypes.string\r\n};\r\n\r\nKlarnaAndPorterbuddy.propTypesMeta = 'exclude';\r\n\r\nexport default KlarnaAndPorterbuddy;\r\n","import React, { useState, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport api from '../../js/api-helper';\r\n\r\nimport KlarnaAndPorterbuddy from 'components/klarna-and-porterbuddy';\r\n\r\nconst fetchHeaders = {\r\n 'content-type': 'application/json',\r\n accept: 'application/json'\r\n};\r\n\r\nconst DeliveryWidget = ({\r\n klarnaIframeHtml,\r\n porterBuddyConfig,\r\n porterBuddyWidgetConfig,\r\n porterBuddyPublicToken,\r\n porterBuddyAvailabilityEndpoint,\r\n priceEndpoint,\r\n porterBuddyErrorMessage,\r\n klarnaErrorMessage,\r\n handleDeliveryFail,\r\n handleDeliverySucceed\r\n}) => {\r\n const [hasError, setHasError] = useState(false);\r\n const currentHasError = useRef();\r\n currentHasError.current = hasError;\r\n\r\n const handleOnDeliveryWindowChange = async deliveryWindow => {\r\n if (currentHasError.current) {\r\n await handleDeliverySucceed();\r\n }\r\n\r\n setHasError(false);\r\n\r\n try {\r\n return await api.execute(priceEndpoint, { deliveryWindow });\r\n } catch (e) {\r\n console.log(e.toString());\r\n setHasError(true);\r\n await handleDeliveryFail();\r\n }\r\n };\r\n\r\n const fetchPorterBuddyAvailability = async (postalCode, additionalInfo) => {\r\n const payload = JSON.stringify({\r\n ...porterBuddyConfig,\r\n additionalInfo,\r\n destinationAddress: {\r\n ...porterBuddyConfig.destinationAddress,\r\n postalCode\r\n }\r\n });\r\n\r\n try {\r\n const availabilityResponse = await fetch(\r\n porterBuddyAvailabilityEndpoint,\r\n {\r\n method: 'POST',\r\n headers: {\r\n ...fetchHeaders,\r\n 'x-public-token': porterBuddyPublicToken\r\n },\r\n body: payload\r\n }\r\n );\r\n\r\n if (!availabilityResponse.ok) {\r\n // conditionally, the response is an array of error objects.\r\n const errors = await availabilityResponse.json();\r\n\r\n const { code, message } = errors[0];\r\n\r\n // We assume this is because porterBuddy does not deliver to the specificed postalCode\r\n if (code === 'LOCATION_NODELIVERY') throw Error(message);\r\n\r\n // We assume that this is because of missing data from Klarna on init\r\n throw Error(message);\r\n }\r\n\r\n return await availabilityResponse.json();\r\n } catch (e) {\r\n console.log(e.toString());\r\n setHasError(true);\r\n await handleDeliveryFail();\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"delivery-widget\">\r\n {hasError && (\r\n <div className=\"delivery-widget__error\">\r\n <p className=\"delivery-widget__error-text\">\r\n {porterBuddyErrorMessage}\r\n </p>\r\n </div>\r\n )}\r\n <div className=\"delivery-widget__widget\">\r\n <KlarnaAndPorterbuddy\r\n onDeliveryWindowChange={handleOnDeliveryWindowChange}\r\n porterBuddyConfig={porterBuddyWidgetConfig}\r\n klarnaIframeHtml={klarnaIframeHtml}\r\n shouldEvalScript={true}\r\n hasError={hasError}\r\n onKlarnaChange={fetchPorterBuddyAvailability}\r\n klarnaErrorMessage={klarnaErrorMessage}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nDeliveryWidget.propTypes = {\r\n klarnaIframeHtml: PropTypes.string,\r\n porterBuddyAvailabilityEndpoint: PropTypes.string.isRequired,\r\n porterBuddyConfig: PropTypes.shape({\r\n originAddress: PropTypes.shape({\r\n streetName: PropTypes.string.isRequired,\r\n streetNumber: PropTypes.string.isRequired,\r\n city: PropTypes.string.isRequired,\r\n postalCode: PropTypes.string.isRequired,\r\n country: PropTypes.string.isRequired\r\n }).isRequired,\r\n destinationAddress: PropTypes.shape({\r\n postalCode: PropTypes.string.isRequired,\r\n country: PropTypes.string.isRequired\r\n }).isRequired,\r\n products: PropTypes.arrayOf(PropTypes.string),\r\n parcels: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n widthCm: PropTypes.number,\r\n heightCm: PropTypes.number,\r\n depthCm: PropTypes.number,\r\n weightGrams: PropTypes.number\r\n })\r\n )\r\n }).isRequired,\r\n porterBuddyWidgetConfig: PropTypes.shape({\r\n token: PropTypes.string.isRequired,\r\n view: PropTypes.string.isRequired\r\n }).isRequired,\r\n priceEndpoint: PropTypes.string.isRequired,\r\n porterBuddyErrorMessage: PropTypes.string.isRequired,\r\n klarnaErrorMessage: PropTypes.string.isRequired,\r\n handleDeliveryFail: PropTypes.func,\r\n handleDeliverySucceed: PropTypes.func,\r\n porterBuddyPublicToken: PropTypes.string.isRequired\r\n};\r\n\r\nDeliveryWidget.propTypesMeta = {\r\n klarnaIframeHtml: 'exclude'\r\n};\r\n\r\nexport default DeliveryWidget;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport get from 'lodash/get';\r\n\r\nimport FormsyWrapper from 'components/formsy-wrapper';\r\n\r\nclass Radio extends React.Component {\r\n static propTypes = {\r\n attributes: PropTypes.object,\r\n idPrefix: PropTypes.string,\r\n labels: PropTypes.node,\r\n name: PropTypes.string.isRequired,\r\n onChange: PropTypes.func,\r\n onValidate: PropTypes.func,\r\n options: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n label: PropTypes.string.isRequired,\r\n selected: PropTypes.bool,\r\n value: PropTypes.string.isRequired\r\n })\r\n ).isRequired,\r\n validations: PropTypes.string,\r\n validationErrors: PropTypes.object\r\n };\r\n\r\n static propTypesMeta = {\r\n attributes: 'exclude',\r\n idPrefix: 'exclude',\r\n validations: 'exclude',\r\n validationErrors: 'exclude'\r\n };\r\n\r\n static defaultProps = {\r\n idPrefix: '',\r\n onChange: () => {},\r\n onValidate: () => {},\r\n options: []\r\n };\r\n\r\n onChange = value => {\r\n const selectedOption = this.props.options.find(\r\n option => option.value === value\r\n );\r\n\r\n this.props.onChange(value, selectedOption && selectedOption.label);\r\n };\r\n\r\n render() {\r\n return (\r\n <FormsyWrapper\r\n name={this.props.name}\r\n initialValue={get(this.props.options.find(o => o.selected), 'value')}\r\n onValidate={this.props.onValidate}\r\n validations={this.props.validations}\r\n validationErrors={this.props.validationErrors}\r\n >\r\n {({ getValue, setValue }) => (\r\n <fieldset className=\"radio\">\r\n {this.props.options.map((option, index) => {\r\n const id =\r\n this.props.idPrefix +\r\n '-' +\r\n this.props.name +\r\n '-' +\r\n option.value;\r\n\r\n return (\r\n <div className=\"radio-input\" key={option.value}>\r\n <input\r\n type=\"radio\"\r\n checked={option.value === getValue()}\r\n id={id}\r\n onChange={e => {\r\n setValue(e.target.value);\r\n this.onChange(e.target.value);\r\n }}\r\n name={this.props.name}\r\n value={option.value}\r\n {...this.props.attributes}\r\n />\r\n <label htmlFor={id}>\r\n {this.props.labels\r\n ? this.props.labels[index]\r\n : option.label}\r\n </label>\r\n </div>\r\n );\r\n })}\r\n </fieldset>\r\n )}\r\n </FormsyWrapper>\r\n );\r\n }\r\n}\r\n\r\nexport default Radio;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport api from '../../js/api-helper';\r\n\r\nimport get from 'lodash/get';\r\n\r\nimport CheckoutContext from 'components/checkout-page/checkout-context';\r\nimport KlarnaIframe from '../klarna-iframe';\r\nimport DeliveryWidget from '../delivery-widget';\r\nimport Form from 'components/form';\r\n\r\nimport Radio from 'components/form-elements/radio';\r\n\r\nconst DeliveryForm = ({\r\n deliveryTitle,\r\n deliveryWidget,\r\n deliveryOptions,\r\n deliveryOptionsLabels, // NOTE: Is matched to `deliveryOptions` items by index\r\n endpoint\r\n}) => {\r\n const { setIsLoading, setHasIframeHTML } = React.useContext(CheckoutContext);\r\n\r\n const [showPorterBuddy, setShowPorterBuddy] = React.useState(false);\r\n const [showOnlyKlarna, setShowOnlyKlarna] = React.useState(false);\r\n const [klarnaIframe, setKlarnaIframe] = React.useState();\r\n const [currentShipmentId, setCurrentShipmentId] = React.useState('');\r\n const currentShipmentRef = React.useRef();\r\n currentShipmentRef.current = currentShipmentId;\r\n\r\n const handleOnChange = async value => {\r\n setIsLoading(true);\r\n setShowPorterBuddy(false);\r\n setShowOnlyKlarna(false);\r\n setKlarnaIframe('');\r\n setCurrentShipmentId('');\r\n setHasIframeHTML(false);\r\n\r\n const { iframeHTML, enablePorterBuddy } = await api.execute(endpoint, {\r\n value\r\n });\r\n\r\n if (iframeHTML) {\r\n setHasIframeHTML(true);\r\n setKlarnaIframe(iframeHTML);\r\n }\r\n\r\n enablePorterBuddy ? setShowPorterBuddy(true) : setShowOnlyKlarna(true);\r\n setCurrentShipmentId(value);\r\n\r\n setIsLoading(false);\r\n };\r\n\r\n async function handleDeliveryFail() {\r\n //console.log('delivery failed: method id = ' + currentShipmentRef.current);\r\n const firstShipping = deliveryOptions\r\n ? deliveryOptions.options.find(\r\n option => option.value !== currentShipmentRef.current\r\n )\r\n : undefined;\r\n\r\n //console.log('setting another method id: ');\r\n //console.log(firstShipping);\r\n if (firstShipping !== undefined) {\r\n await api.execute(endpoint, {\r\n value: firstShipping.value\r\n });\r\n }\r\n }\r\n\r\n async function handleDeliverySucceed() {\r\n //console.log('delivery succeed: method id = ' + currentShipmentRef.current)\r\n if (currentShipmentRef.current !== '') {\r\n await api.execute(endpoint, {\r\n value: currentShipmentRef.current\r\n });\r\n }\r\n }\r\n\r\n return (\r\n <div className=\"delivery-form\">\r\n <div className=\"delivery-form-delivery\">\r\n {deliveryTitle && <h3>{deliveryTitle}</h3>}\r\n <Form endpoint={endpoint}>\r\n {deliveryOptions && (\r\n <Radio\r\n onChange={handleOnChange}\r\n className=\"checkout-radio\"\r\n attributes={{ 'data-test-checkout-radio-button': '' }}\r\n validations=\"isRequired\"\r\n idPrefix={`checkout-${deliveryOptions.name}-`}\r\n labels={get(deliveryOptions, 'options', []).map(\r\n (option, index) => {\r\n const { price, description } =\r\n deliveryOptionsLabels[index] || {};\r\n return (\r\n <span key={option.value}>\r\n <span className=\"checkout-label\">\r\n {option.label} {price || ''}\r\n </span>\r\n {description && (\r\n <span className=\"checkout-label-description\">\r\n {description}\r\n </span>\r\n )}\r\n </span>\r\n );\r\n }\r\n )}\r\n {...deliveryOptions}\r\n />\r\n )}\r\n </Form>\r\n <div className=\"delivery-form-payment\">\r\n {showPorterBuddy && (\r\n <DeliveryWidget\r\n klarnaIframeHtml={klarnaIframe}\r\n handleDeliveryFail={handleDeliveryFail}\r\n handleDeliverySucceed={handleDeliverySucceed}\r\n {...deliveryWidget}\r\n />\r\n )}\r\n {showOnlyKlarna && (\r\n <KlarnaIframe htmlString={klarnaIframe} shouldEvalScript={true} />\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nDeliveryForm.propTypes = {\r\n deliveryOptions: PropTypes.exact(Radio.propTypes),\r\n deliveryTitle: PropTypes.string,\r\n deliveryWidget: PropTypes.shape(DeliveryWidget.propTypes),\r\n deliveryOptionsLabels: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n description: PropTypes.string,\r\n price: PropTypes.string\r\n })\r\n ),\r\n endpoint: PropTypes.string.isRequired\r\n};\r\n\r\nDeliveryForm.defaultProps = {\r\n deliveryOptionsLabels: []\r\n};\r\n\r\nexport default DeliveryForm;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport get from 'lodash/get';\r\n\r\nimport CheckoutContext from './checkout-context';\r\n\r\nimport Cart from 'components/cart';\r\nimport CheckoutButton from 'components/checkout-button';\r\nimport CheckoutLogin from 'components/checkout-login';\r\nimport CheckoutLogout from 'components/checkout-logout';\r\nimport CheckoutStep from './checkout-step';\r\nimport ContentContainer from '../content-container';\r\nimport TermsForm from 'components/terms-form';\r\nimport DeliveryForm from 'components/delivery-form';\r\nimport PageSpinner from '../page-spinner';\r\n\r\nimport api from 'js/api-helper';\r\n\r\nconst stepIds = {\r\n cart: 'cart',\r\n terms: 'terms',\r\n login: 'login',\r\n payment: 'payment'\r\n};\r\n\r\nconst CheckoutPage = ({\r\n analyticsEndpoint,\r\n cart,\r\n cartButtonText,\r\n cartTitle,\r\n collapseLabel,\r\n delivery,\r\n terms,\r\n termsTitle,\r\n expandLabel,\r\n isLoggedIn,\r\n paymentTitle,\r\n logout,\r\n login,\r\n loginTitle,\r\n title\r\n}) => {\r\n const [hasIframeHTML, setHasIframeHTML] = React.useState();\r\n const [isLoading, setIsLoading] = React.useState(false);\r\n const [stepCompletenessMap, setStepCompletnessMap] = React.useState({\r\n [stepIds.cart]: false,\r\n [stepIds.terms]: false,\r\n [stepIds.payment]: false\r\n });\r\n\r\n const stepIsComplete = stepId => stepCompletenessMap[stepId];\r\n const setStepComplete = React.useCallback((stepId, stepNumber) => {\r\n // NOTE: `stepNumber` is the number of the completed step (the previously active step). The analytics endpoint is interested in what the currently active step is, which is the step after `stepNumber`.\r\n analyticsEndpoint &&\r\n api.execute(analyticsEndpoint, { currentActiveStep: stepNumber + 1 });\r\n setStepCompletnessMap(validities => ({ ...validities, [stepId]: true }));\r\n }, []);\r\n\r\n const onCartUpdate = React.useCallback(() => {\r\n // If the Klarna iframe has been loaded, the page needs to be refreshed when the cart changes in order to update the cart in the iframe.\r\n hasIframeHTML && window.location.reload();\r\n }, [hasIframeHTML]);\r\n\r\n return (\r\n <CheckoutContext.Provider\r\n value={{ isLoading, setIsLoading, hasIframeHTML, setHasIframeHTML }}\r\n >\r\n <PageSpinner isLoading={isLoading} />\r\n\r\n <div className=\"checkout-page\">\r\n <ContentContainer>\r\n <h1>{title}</h1>\r\n\r\n <CheckoutStep\r\n collapseLabel={collapseLabel}\r\n expandLabel={expandLabel}\r\n isComplete={stepIsComplete(stepIds.cart)}\r\n isEnabled={get(cart, 'products', []).length > 0}\r\n number={1}\r\n theme={CheckoutStep.themes.padding}\r\n title={cartTitle}\r\n >\r\n <React.Fragment>\r\n <Cart {...cart} onUpdate={onCartUpdate} />\r\n <CheckoutButton\r\n attributes={{ 'data-test-checkout-step-1-button': '' }}\r\n onClick={() => setStepComplete(stepIds.cart, 1)}\r\n text={cartButtonText}\r\n />\r\n </React.Fragment>\r\n </CheckoutStep>\r\n\r\n {login && (\r\n <CheckoutStep\r\n collapseLabel={collapseLabel}\r\n expandLabel={expandLabel}\r\n forceInitialAnimation={true}\r\n isEnabled={stepIsComplete(stepIds.cart)}\r\n isComplete={stepIsComplete(stepIds.login)}\r\n number={2}\r\n theme={CheckoutStep.themes.padding}\r\n title={loginTitle}\r\n >\r\n {isLoggedIn ? (\r\n <CheckoutLogout\r\n onComplete={() => setStepComplete(stepIds.login, 2)}\r\n {...logout}\r\n />\r\n ) : (\r\n <CheckoutLogin\r\n onComplete={didLoginOrRegister => {\r\n setStepComplete(stepIds.login, 2);\r\n didLoginOrRegister &&\r\n hasIframeHTML &&\r\n window.location.reload();\r\n }}\r\n {...login}\r\n />\r\n )}\r\n </CheckoutStep>\r\n )}\r\n\r\n {terms && (\r\n <CheckoutStep\r\n collapseLabel={collapseLabel}\r\n expandLabel={expandLabel}\r\n forceInitialAnimation={true}\r\n isEnabled={stepIsComplete(stepIds.login)}\r\n isComplete={stepIsComplete(stepIds.terms)}\r\n number={3}\r\n theme={CheckoutStep.themes.padding}\r\n title={termsTitle}\r\n >\r\n <TermsForm\r\n {...terms}\r\n onResponse={() => {\r\n setStepComplete(stepIds.terms, 3);\r\n }}\r\n />\r\n </CheckoutStep>\r\n )}\r\n\r\n <CheckoutStep\r\n collapseLabel={collapseLabel}\r\n expandLabel={expandLabel}\r\n forceInitialAnimation={true}\r\n isEnabled={stepIsComplete(stepIds.terms)}\r\n isComplete={false}\r\n theme={CheckoutStep.themes.padding}\r\n number={4}\r\n title={paymentTitle}\r\n >\r\n <DeliveryForm {...delivery} />\r\n </CheckoutStep>\r\n </ContentContainer>\r\n </div>\r\n </CheckoutContext.Provider>\r\n );\r\n};\r\n\r\nCheckoutPage.propTypes = {\r\n cart: PropTypes.exact(Cart.propTypes),\r\n analyticsEndpoint: PropTypes.string,\r\n cartButtonText: PropTypes.string,\r\n cartTitle: PropTypes.string,\r\n collapseLabel: PropTypes.string,\r\n delivery: PropTypes.shape(DeliveryForm.propTypes),\r\n terms: PropTypes.shape(TermsForm.propTypes),\r\n termsTitle: PropTypes.string,\r\n expandLabel: PropTypes.string,\r\n isLoggedIn: PropTypes.bool,\r\n paymentTitle: PropTypes.string,\r\n logout: PropTypes.exact(CheckoutLogout.propTypes),\r\n login: PropTypes.exact(CheckoutLogin.propTypes),\r\n loginTitle: PropTypes.string,\r\n title: PropTypes.string\r\n};\r\n\r\nexport default CheckoutPage;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport get from 'lodash/get';\r\n\r\n// NOTE: This component exists so that the server can have a feature toggle for signup/login on the checkout page. CheckoutPageLegacy is very similar to CheckoutPage except that it doesn't render any signup/login forms.\r\nimport CheckoutContext from '../checkout-page/checkout-context';\r\nimport Cart from 'components/cart';\r\nimport CheckoutStep from '../checkout-page/checkout-step';\r\n\r\nimport CheckoutButton from 'components/checkout-button';\r\nimport ContentContainer from '../content-container';\r\nimport TermsForm from 'components/terms-form';\r\nimport KlarnaIframe from '../klarna-iframe';\r\nimport PageSpinner from '../page-spinner';\r\nimport api from 'js/api-helper';\r\n\r\nconst stepIds = {\r\n cart: 'cart',\r\n terms: 'terms',\r\n payment: 'payment'\r\n};\r\n\r\nconst CheckoutPageLegacy = ({\r\n analyticsEndpoint,\r\n cart,\r\n cartButtonText,\r\n cartTitle,\r\n collapseLabel,\r\n deliveryAndTerms,\r\n deliveryAndTermsTitle,\r\n expandLabel,\r\n klarnaTitle,\r\n title\r\n}) => {\r\n const [iframeHTML, setIframeHTML] = React.useState();\r\n const [isLoading, setIsLoading] = React.useState(false);\r\n const [stepCompletenessMap, setStepCompletnessMap] = React.useState({\r\n [stepIds.cart]: false,\r\n [stepIds.terms]: false,\r\n [stepIds.payment]: false\r\n });\r\n\r\n const stepIsComplete = stepId => stepCompletenessMap[stepId];\r\n const setStepComplete = React.useCallback((stepId, stepNumber) => {\r\n // NOTE: `stepNumber` is the number of the completed step (the previously active step). The analytics endpoint is interested in what the currently active step is, which is the step after `stepNumber`.\r\n analyticsEndpoint &&\r\n api.execute(analyticsEndpoint, { currentActiveStep: stepNumber + 1 });\r\n setStepCompletnessMap(validities => ({ ...validities, [stepId]: true }));\r\n }, []);\r\n\r\n const onCartUpdate = React.useCallback(() => {\r\n // If the Klarna iframe has been loaded, the page needs to be refreshed when the cart changes in order to update the cart in the iframe.\r\n iframeHTML && window.location.reload();\r\n }, [iframeHTML]);\r\n\r\n return (\r\n <CheckoutContext.Provider value={{ isLoading, setIsLoading }}>\r\n <PageSpinner isLoading={isLoading} />\r\n\r\n <div className=\"checkout-page\">\r\n <ContentContainer>\r\n <h1>{title}</h1>\r\n\r\n <CheckoutStep\r\n collapseLabel={collapseLabel}\r\n expandLabel={expandLabel}\r\n isComplete={stepIsComplete(stepIds.cart)}\r\n isEnabled={get(cart, 'products', []).length > 0}\r\n number={1}\r\n theme={CheckoutStep.themes.padding}\r\n title={cartTitle}\r\n >\r\n <React.Fragment>\r\n <Cart onUpdate={onCartUpdate} {...cart} />\r\n <CheckoutButton\r\n attributes={{ 'data-test-checkout-step-1-button': '' }}\r\n onClick={() => setStepComplete(stepIds.cart, 1)}\r\n text={cartButtonText}\r\n />\r\n </React.Fragment>\r\n </CheckoutStep>\r\n\r\n {deliveryAndTerms && (\r\n <CheckoutStep\r\n collapseLabel={collapseLabel}\r\n expandLabel={expandLabel}\r\n forceInitialAnimation={true}\r\n isEnabled={stepIsComplete(stepIds.cart)}\r\n isComplete={stepIsComplete(stepIds.terms)}\r\n number={2}\r\n theme={CheckoutStep.themes.padding}\r\n title={deliveryAndTermsTitle}\r\n >\r\n <TermsForm\r\n onResponse={({ iframeHTML }) => {\r\n if (iframeHTML) {\r\n setStepComplete(stepIds.terms, 2);\r\n setIframeHTML(iframeHTML);\r\n }\r\n }}\r\n {...deliveryAndTerms}\r\n />\r\n </CheckoutStep>\r\n )}\r\n\r\n <CheckoutStep\r\n collapseLabel={collapseLabel}\r\n expandLabel={expandLabel}\r\n forceInitialAnimation={true}\r\n isEnabled={stepIsComplete(stepIds.terms) && Boolean(iframeHTML)}\r\n isComplete={false}\r\n number={3}\r\n title={klarnaTitle}\r\n >\r\n {iframeHTML && (\r\n <KlarnaIframe htmlString={iframeHTML} shouldEvalScript={true} />\r\n )}\r\n </CheckoutStep>\r\n </ContentContainer>\r\n </div>\r\n </CheckoutContext.Provider>\r\n );\r\n};\r\n\r\nCheckoutPageLegacy.propTypes = {\r\n analyticsEndpoint: PropTypes.string,\r\n cart: PropTypes.exact(Cart.propTypes),\r\n cartButtonText: PropTypes.string,\r\n cartTitle: PropTypes.string,\r\n collapseLabel: PropTypes.string,\r\n deliveryAndTerms: PropTypes.exact(TermsForm.propTypes),\r\n deliveryAndTermsTitle: PropTypes.string,\r\n expandLabel: PropTypes.string,\r\n klarnaTitle: PropTypes.string,\r\n title: PropTypes.string\r\n};\r\n\r\nexport default CheckoutPageLegacy;\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Collapse from 'react-tiny-collapse';\r\nimport TinyTransition from 'react-tiny-transition';\r\nimport Icon from '../icon';\r\n\r\nimport RichText from '../rich-text';\r\n\r\nconst CollapsableRichText = ({\r\n text,\r\n children,\r\n hiddenText,\r\n showInlineCloseButton,\r\n readLessButtonText,\r\n onCloseClick,\r\n readMoreButtonText,\r\n closeButtonText,\r\n isInitiallyOpen\r\n}) => {\r\n const [textIsExpanded, setTextIsExpanded] = useState(isInitiallyOpen);\r\n const [showButton, setShowButton] = useState(!isInitiallyOpen);\r\n\r\n const handleOnReadMoreClick = () => {\r\n setTextIsExpanded(!textIsExpanded);\r\n setShowButton(textIsExpanded);\r\n };\r\n\r\n return (\r\n <div className=\"collapsable-rich-text\">\r\n {showInlineCloseButton && (\r\n <button\r\n className=\"collapsable-rich-text-close-button\"\r\n onClick={onCloseClick}\r\n >\r\n <span className=\"collapsable-rich-text-close-text\">\r\n {closeButtonText}\r\n </span>\r\n <span className=\"collapsable-rich-text-close-icon\">\r\n <Icon name=\"big-x\" />\r\n </span>\r\n </button>\r\n )}\r\n <RichText\r\n theme={RichText.themes.white}\r\n className=\"collapsable-rich-text\"\r\n element=\"span\"\r\n text={text}\r\n />\r\n {readMoreButtonText && (\r\n <TinyTransition\r\n disableInitialAnimation={true}\r\n duration={200}\r\n delay={200}\r\n classNames={{\r\n beforeEnter: 'collapsable-rich-text-before-enter',\r\n entering: 'collapsable-rich-text-entering',\r\n beforeLeave: 'collapsable-rich-text-before-leave',\r\n leaving: 'collapsable-rich-text-leaving'\r\n }}\r\n >\r\n {showButton && (\r\n <button\r\n className=\"collapsable-rich-text-button collapsable-rich-text-button--more\"\r\n onClick={handleOnReadMoreClick}\r\n >\r\n {readMoreButtonText}\r\n </button>\r\n )}\r\n </TinyTransition>\r\n )}\r\n <Collapse isOpen={textIsExpanded}>\r\n <div className=\"collapsable-rich-text-collsapsed\">\r\n <div className=\"collapsable-rich-text-hidden-text\">\r\n <RichText theme={RichText.themes.white} text={hiddenText} />\r\n </div>\r\n {children && (\r\n <div className=\"collapsable-rich-text-content\">{children}</div>\r\n )}\r\n {readLessButtonText && (\r\n <button\r\n className=\"collapsable-rich-text-button\"\r\n onClick={handleOnReadMoreClick}\r\n >\r\n {readLessButtonText}\r\n </button>\r\n )}\r\n </div>\r\n </Collapse>\r\n </div>\r\n );\r\n};\r\n\r\nCollapsableRichText.propTypesMeta = {\r\n closeButtonText: 'exclude',\r\n showInlineCloseButton: 'exclude'\r\n};\r\n\r\nCollapsableRichText.propTypes = {\r\n isInitiallyOpen: PropTypes.bool,\r\n children: PropTypes.node,\r\n onCloseClick: PropTypes.func,\r\n closeButtonText: PropTypes.string,\r\n showInlineCloseButton: PropTypes.bool,\r\n readLessButtonText: PropTypes.string,\r\n readMoreButtonText: PropTypes.string,\r\n text: PropTypes.string.isRequired,\r\n hiddenText: PropTypes.string.isRequired\r\n};\r\n\r\nexport default CollapsableRichText;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Button from '../button';\r\nimport Checkbox from 'components/form-elements/checkbox';\r\nimport CheckboxGroup from '../form-elements/checkbox-group';\r\nimport Grid from '../grid';\r\nimport MyPageForm from '../my-page-form';\r\nimport MyPageLayout from 'components/my-page-layout';\r\nimport MyPageSection from 'components/my-page-section';\r\n\r\nconst ConsentPage = ({\r\n form,\r\n abortLink,\r\n consentGroups,\r\n layout,\r\n section,\r\n submitLabel\r\n}) => (\r\n <MyPageLayout {...layout}>\r\n <Grid theme={Grid.themes.leftColumnWider}>\r\n <Grid.Column>\r\n <MyPageSection headingLevel={1} {...section}>\r\n <MyPageForm showSubmitButton={false} {...form}>\r\n {consentGroups.map(\r\n ({ title, options, optionDescriptions = [] }) => (\r\n <div className=\"consent-checkbox-group\" key={title}>\r\n <h3>{title}</h3>\r\n <CheckboxGroup\r\n checkboxTheme={Checkbox.themes.alignTop}\r\n {...options}\r\n labels={(options.options || []).map((option, i) => (\r\n <span className=\"consent-checkbox-wrapper\">\r\n <span className=\"consent-checkbox-label\">\r\n {option.label}\r\n </span>\r\n <span className=\"consent-checkbox-description\">\r\n {optionDescriptions[i]}\r\n </span>\r\n </span>\r\n ))}\r\n />\r\n </div>\r\n )\r\n )}\r\n\r\n <div className=\"consent-button-wrapper\">\r\n <Button\r\n className=\"consent-button\"\r\n type=\"submit\"\r\n text={submitLabel}\r\n />\r\n <Button\r\n className=\"consent-button\"\r\n theme={Button.themes.outline}\r\n {...abortLink}\r\n />\r\n </div>\r\n </MyPageForm>\r\n </MyPageSection>\r\n </Grid.Column>\r\n </Grid>\r\n </MyPageLayout>\r\n);\r\n\r\nConsentPage.propTypes = {\r\n abortLink: PropTypes.shape(Button.propTypes),\r\n form: PropTypes.exact(MyPageForm.propTypes),\r\n consentGroups: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n title: PropTypes.string,\r\n // NOTE: optionDescriptions are matched to options by index\r\n optionDescriptions: PropTypes.arrayOf(PropTypes.string),\r\n options: PropTypes.exact(CheckboxGroup.propTypes)\r\n })\r\n ),\r\n layout: PropTypes.exact(MyPageLayout.propTypes),\r\n section: PropTypes.exact(MyPageSection.propTypes),\r\n submitLabel: PropTypes.string\r\n};\r\n\r\nConsentPage.defaultProps = {\r\n consentGroups: [],\r\n labelDescriptions: []\r\n};\r\n\r\nexport default ConsentPage;\r\n","import PropTypes from 'prop-types';\r\n\r\nexport default function checkApiPropTypes(data, typeSpec, typeName) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n PropTypes.checkPropTypes(\r\n { response: PropTypes.exact(typeSpec) },\r\n { response: data },\r\n '',\r\n typeName\r\n );\r\n }\r\n}\r\n","import PropTypes from 'prop-types';\r\n\r\nimport Cart from 'components/cart';\r\nimport AddToCartConfirmation from 'components/add-to-cart-confirmation';\r\n\r\nconst AddToCartResponse = {};\r\nAddToCartResponse.propTypes = {\r\n cartLink: PropTypes.exact({\r\n numberOfProducts: PropTypes.number,\r\n text: PropTypes.string,\r\n url: PropTypes.string\r\n }),\r\n cart: PropTypes.exact(Cart.propTypes),\r\n confirmation: PropTypes.exact(AddToCartConfirmation.propTypes)\r\n};\r\n\r\nexport default AddToCartResponse;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Select from '../select';\r\nimport ValidationErrorTexts from 'components/validation-error-texts';\r\n\r\nconst InputTable = ({ columnLabels, rows, validationErrors }) =>\r\n !rows ? null : (\r\n <table className=\"input-table\">\r\n <thead>\r\n <tr>\r\n <th />\r\n {columnLabels.map((label, index) => (\r\n <th id={`column-${index}-header`} key={label}>\r\n {label}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n {rows.map((row, rowIndex) => (\r\n <tr key={row.label}>\r\n <th id={`row-${rowIndex}-header`}>{row.label}</th>\r\n {row.inputs.map((input, colIndex) => {\r\n const ariaId = `colum-${colIndex}-header row-${rowIndex}-header`;\r\n\r\n return (\r\n <td key={input.name}>\r\n <Select\r\n ariaLabelledBy={ariaId}\r\n validationErrors={validationErrors}\r\n {...input}\r\n />\r\n </td>\r\n );\r\n })}\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n );\r\n\r\nInputTable.propTypes = {\r\n columnLabels: PropTypes.arrayOf(PropTypes.string),\r\n rows: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n label: PropTypes.string,\r\n inputs: PropTypes.arrayOf(PropTypes.exact(Select.propTypes))\r\n })\r\n ),\r\n validationErrors: PropTypes.exact(ValidationErrorTexts.propTypes)\r\n};\r\n\r\nInputTable.defaultProps = {\r\n columnLabels: [],\r\n rows: []\r\n};\r\n\r\nexport default InputTable;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport PubSub from 'pubsub-js';\r\n\r\nimport topics from '../../js/topics.json';\r\nimport checkApiPropTypes from 'js/check-api-prop-types.js';\r\n\r\nimport AddToCartButton from '../add-to-cart-button';\r\nimport AddToCartResponse from './add-to-cart-response';\r\nimport Availability from '../availability';\r\nimport Form from '../form';\r\nimport Icon from 'components/icon';\r\nimport InputTable from '../form-elements/input-table';\r\nimport PageSpinner from '../page-spinner';\r\nimport Price from '../price';\r\nimport Radio from '../form-elements/radio';\r\n\r\nclass ContactLensForm extends React.Component {\r\n static propTypes = {\r\n addToCartEndpoint: PropTypes.string,\r\n availability: PropTypes.exact(Availability.propTypes),\r\n availabilityBanner: PropTypes.string,\r\n onChange: PropTypes.func,\r\n onRef: PropTypes.func,\r\n priceSummary: PropTypes.exact({\r\n price: PropTypes.string,\r\n priceLabel: PropTypes.string,\r\n summary: PropTypes.string\r\n }),\r\n productSelect: PropTypes.exact(Radio.propTypes),\r\n productPrices: PropTypes.arrayOf(PropTypes.exact(Price.propTypes)), // NOTE: Is matched to productSelect options by index\r\n propertySelect: PropTypes.exact(InputTable.propTypes),\r\n shippingBanner: PropTypes.string,\r\n submitLabel: PropTypes.string,\r\n validationEndpoint: PropTypes.string\r\n };\r\n\r\n static defaultProps = {\r\n productPrices: [],\r\n onRef: () => {}\r\n };\r\n\r\n state = {\r\n enableValidation: false,\r\n isLoading: false\r\n };\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps !== this.props) {\r\n this.setState({ isLoading: false });\r\n }\r\n }\r\n\r\n onChange = formData => {\r\n clearTimeout(this.changeTimeout);\r\n this.changeTimeout = setTimeout(() => {\r\n this.setState({ isLoading: true }, () => {\r\n this.props.onChange(formData);\r\n });\r\n }, 100);\r\n };\r\n\r\n onAddToCartResponse = response => {\r\n checkApiPropTypes(\r\n response,\r\n AddToCartResponse.propTypes,\r\n 'AddToCartResponse'\r\n );\r\n PubSub.publish(topics.cartUpdate, response);\r\n };\r\n\r\n render() {\r\n const {\r\n priceSummary,\r\n productSelect,\r\n propertySelect,\r\n shippingBanner\r\n } = this.props;\r\n\r\n return !productSelect || !propertySelect ? null : (\r\n <Form\r\n className=\"contact-lens-form\"\r\n endpoint={this.props.addToCartEndpoint}\r\n onChange={this.onChange}\r\n onInvalidSubmit={this.onInvalidSubmit}\r\n onRef={this.props.onRef}\r\n onResponse={this.onAddToCartResponse}\r\n showSubmitButton={false}\r\n validationEndpoint={this.props.validationEndpoint}\r\n >\r\n {({ isLoading }) => (\r\n <React.Fragment>\r\n <PageSpinner\r\n shouldContainInParent={true}\r\n isLoading={isLoading || this.state.isLoading}\r\n />\r\n\r\n {productSelect && (\r\n <div className=\"contact-lens-product-select\">\r\n <Radio\r\n idPrefix=\"lens-select-\"\r\n {...productSelect}\r\n labels={productSelect.options.map((option, index) => (\r\n <span\r\n className=\"contact-lens-form-price\"\r\n key={option.value}\r\n >\r\n <span>{option.label}</span>\r\n {this.props.productPrices[index] && (\r\n <Price {...this.props.productPrices[index]} />\r\n )}\r\n </span>\r\n ))}\r\n />\r\n </div>\r\n )}\r\n\r\n {shippingBanner && (\r\n <div className=\"contact-lens-shipping-banner\">\r\n <p>{shippingBanner}</p>\r\n </div>\r\n )}\r\n\r\n {propertySelect && (\r\n <div className=\"contact-lens-property-select\">\r\n <InputTable {...propertySelect} />\r\n </div>\r\n )}\r\n {this.props.availability && (\r\n <div className=\"contact-lens-availability\">\r\n <Availability {...this.props.availability} />\r\n </div>\r\n )}\r\n {this.props.availabilityBanner && (\r\n <div className=\"contact-lens-availability-banner\">\r\n <Icon\r\n className=\"contact-lens-availability-banner-icon\"\r\n name=\"checkmark\"\r\n />\r\n {this.props.availabilityBanner}\r\n </div>\r\n )}\r\n {priceSummary && (\r\n <div className=\"contact-lens-form-summary\">\r\n <p>{priceSummary.summary}</p>\r\n <div className=\"contact-lens-form-summary-price\">\r\n <p>{priceSummary.priceLabel}</p>\r\n <Price originalPrice={priceSummary.price} />\r\n </div>\r\n </div>\r\n )}\r\n <AddToCartButton text={this.props.submitLabel} />\r\n </React.Fragment>\r\n )}\r\n </Form>\r\n );\r\n }\r\n}\r\n\r\nexport default ContactLensForm;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Icon from 'components/icon';\r\n\r\nconst ImageContainer = ({ children, onClick }) => (\r\n <div className=\"product-image-container\">\r\n <div className=\"product-image-hover-icon\" onClick={onClick}>\r\n <Icon name=\"zoom\" />\r\n </div>\r\n {children}\r\n </div>\r\n);\r\n\r\nImageContainer.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n onClick: PropTypes.func.isRequired\r\n};\r\n\r\nImageContainer.propTypesMeta = 'exclude';\r\n\r\nexport default ImageContainer;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Motion, spring } from 'react-motion';\r\nimport rangeMap from '@creuna/utils/range-map';\r\nimport transform from 'css-transform-string';\r\n\r\nimport ImageLoader from 'js/responsive-images';\r\n\r\nimport Button from 'components/button';\r\nimport Icon from 'components/icon';\r\nimport Spinner from 'components/spinner';\r\n\r\nclass ZoomModal extends React.Component {\r\n static propTypes = {\r\n src: PropTypes.string.isRequired,\r\n imagePadding: PropTypes.number,\r\n imageWidth: PropTypes.number,\r\n onCloseButtonClick: PropTypes.func.isRequired\r\n };\r\n\r\n static propTypesMeta = 'exclude';\r\n\r\n static defaultProps = {\r\n imagePadding: 100,\r\n imageWidth: 1400\r\n };\r\n\r\n state = {\r\n imageHeight: 0,\r\n posX: 0,\r\n posY: 0\r\n };\r\n\r\n onMouseMove = e => {\r\n const padding = this.props.imagePadding;\r\n const { imageWidth } = this.props;\r\n const { imageHeight } = this.state;\r\n const winW = window.innerWidth;\r\n const winH = window.innerHeight;\r\n const xDiff = (imageWidth - winW) / 2 + padding;\r\n const yDiff = (imageHeight - winH) / 2 + padding;\r\n\r\n this.setState({\r\n posX:\r\n winW < imageWidth + 2 * padding\r\n ? rangeMap(e.clientX, 0, winW, xDiff, -xDiff)\r\n : 0,\r\n posY:\r\n winH < imageHeight + 2 * padding\r\n ? rangeMap(e.clientY, 0, winH, yDiff, -yDiff)\r\n : 0\r\n });\r\n };\r\n\r\n componentDidMount() {\r\n if (!this.image.complete || !this.image.naturalHeight) {\r\n this.image.onload = () => {\r\n this.setState({ imageHeight: this.image.offsetHeight });\r\n };\r\n } else {\r\n this.setState({ imageHeight: this.image.offsetHeight });\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"product-image-zoom\" onMouseMove={this.onMouseMove}>\r\n <div className=\"product-image-zoom-spinner\">\r\n <Spinner theme={Spinner.themes.big} />\r\n </div>\r\n\r\n <Motion\r\n defaultStyle={{ x: 0, y: 0 }}\r\n style={{ x: spring(this.state.posX), y: spring(this.state.posY) }}\r\n >\r\n {interpolatedStyle => (\r\n <img\r\n src={ImageLoader.getNewSrc(this.props.src, this.props.imageWidth)}\r\n style={{\r\n width: this.props.imageWidth,\r\n transform: transform(interpolatedStyle)\r\n }}\r\n ref={img => (this.image = img)}\r\n />\r\n )}\r\n </Motion>\r\n <Button\r\n className=\"product-image-zoom-close\"\r\n onClick={this.props.onCloseButtonClick}\r\n >\r\n <Icon name=\"big-x\" />\r\n </Button>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default ZoomModal;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport isRunningOnClient from '@creuna/utils/is-running-on-client';\r\n\r\nimport TinyTransition from 'react-tiny-transition';\r\n\r\nimport Carousel from 'components/carousel';\r\nimport Image from 'components/image';\r\nimport ImageContainer from './image-container';\r\nimport ZoomModal from './zoom-modal';\r\n\r\nclass ProductImages extends React.Component {\r\n static propTypes = {\r\n images: PropTypes.arrayOf(PropTypes.exact(Image.propTypes))\r\n };\r\n\r\n static defaultProps = {\r\n images: []\r\n };\r\n\r\n state = {\r\n modalIsVisible: false,\r\n modalSrc: '',\r\n portalNode: null\r\n };\r\n\r\n componentDidMount() {\r\n this.setState({ portalNode: document.body });\r\n }\r\n\r\n showModal(src) {\r\n this.setState({\r\n modalIsVisible: true,\r\n modalSrc: src\r\n });\r\n }\r\n\r\n hideModal = () => {\r\n this.setState({ modalIsVisible: false });\r\n };\r\n\r\n render() {\r\n const firstImage = this.props.images[0];\r\n const isTouch =\r\n isRunningOnClient && 'ontouchstart' in document.documentElement;\r\n const imageScale = isTouch ? 2 : 1;\r\n\r\n return (\r\n <div className=\"product-images\">\r\n {this.props.images.length === 1 ? (\r\n <ImageContainer onClick={this.showModal.bind(this, firstImage.src)}>\r\n <Image scale={imageScale} {...firstImage} />\r\n </ImageContainer>\r\n ) : (\r\n <Carousel>\r\n {this.props.images.map(image => (\r\n <ImageContainer\r\n key={image.src}\r\n onClick={this.showModal.bind(this, image.src)}\r\n >\r\n <Image scale={imageScale} {...image} />\r\n </ImageContainer>\r\n ))}\r\n </Carousel>\r\n )}\r\n\r\n {this.state.portalNode &&\r\n ReactDOM.createPortal(\r\n <TinyTransition>\r\n {this.state.modalIsVisible && (\r\n <ZoomModal\r\n src={this.state.modalSrc}\r\n onCloseButtonClick={this.hideModal}\r\n />\r\n )}\r\n </TinyTransition>,\r\n this.state.portalNode\r\n )}\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default ProductImages;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Image from '../image';\r\n\r\nconst ProductLogo = ({ alt, fallbackText, src }) => (\r\n <div className=\"product-logo\">\r\n {src ? (\r\n <Image src={src} alt={alt} responsive={false} />\r\n ) : (\r\n <p>{fallbackText}</p>\r\n )}\r\n </div>\r\n);\r\n\r\nProductLogo.propTypes = {\r\n alt: PropTypes.string,\r\n fallbackText: PropTypes.string,\r\n src: PropTypes.string\r\n};\r\n\r\nexport default ProductLogo;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport Icon from '../icon';\r\n\r\nconst themes = {\r\n smallText: 'theme-small-text'\r\n};\r\n\r\nconst ProductSellingPoints = ({ className, items, theme }) => (\r\n <ul className={cn('product-selling-points', className, theme)}>\r\n {items.map(item => (\r\n <li key={item}>\r\n <Icon name=\"checkmark\" />\r\n <span>{item}</span>\r\n </li>\r\n ))}\r\n </ul>\r\n);\r\n\r\nProductSellingPoints.propTypes = {\r\n className: PropTypes.string,\r\n items: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n theme: PropTypes.oneOf(Object.values(themes))\r\n};\r\n\r\nProductSellingPoints.propTypesMeta = {\r\n className: 'exclude',\r\n theme: 'exclude'\r\n};\r\n\r\nProductSellingPoints.defaultProps = {\r\n items: []\r\n};\r\n\r\nProductSellingPoints.themes = themes;\r\n\r\nexport default ProductSellingPoints;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Image from '../image';\r\n\r\nconst ReplacementProductBanner = ({\r\n image,\r\n productName,\r\n productType,\r\n text,\r\n title\r\n}) => (\r\n <div className=\"replacement-product-banner\">\r\n <h2>{title}</h2>\r\n <h1>{productName}</h1>\r\n <p className=\"replacement-product-banner-type\">{productType}</p>\r\n <p className=\"replacement-product-banner-text\">{text}</p>\r\n {image && (\r\n <div className=\"replacement-product-banner-image\">\r\n <Image {...image} />\r\n </div>\r\n )}\r\n </div>\r\n);\r\n\r\nReplacementProductBanner.propTypes = {\r\n image: PropTypes.exact(Image.propTypes),\r\n productName: PropTypes.string,\r\n productType: PropTypes.string,\r\n text: PropTypes.string,\r\n title: PropTypes.string\r\n};\r\n\r\nexport default ReplacementProductBanner;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Image from '../image';\r\n\r\nconst SellingPoints = ({ items }) => (\r\n <div className=\"selling-points\">\r\n {items.map(({ image, text, url } = {}) => {\r\n const Element = url ? 'a' : 'div';\r\n\r\n return (\r\n <Element className=\"selling-points-item\" href={url} key={text}>\r\n <div className=\"selling-points-icon\">\r\n <Image responsive={false} {...image} />\r\n </div>\r\n <div className=\"selling-points-text\">{text}</div>\r\n </Element>\r\n );\r\n })}\r\n </div>\r\n);\r\n\r\nSellingPoints.propTypes = {\r\n items: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n image: PropTypes.exact(Image.propTypes),\r\n text: PropTypes.string,\r\n url: PropTypes.string\r\n })\r\n )\r\n};\r\n\r\nSellingPoints.defaultProps = {\r\n items: []\r\n};\r\n\r\nexport default SellingPoints;\r\n","import PropTypes from 'prop-types';\r\n\r\nimport ContactLensForm from './contact-lens-form';\r\n\r\nconst UpdateFormResponse = {};\r\nUpdateFormResponse.propTypes = {\r\n purchaseForm: PropTypes.exact(ContactLensForm.propTypes)\r\n};\r\n\r\nexport default UpdateFormResponse;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\n\r\nconst ProductVariantText = ({ textHtml, className }) => {\r\n return textHtml ? (\r\n <div\r\n className={cn('product-variant-text', className)}\r\n dangerouslySetInnerHTML={{ __html: textHtml }}\r\n />\r\n ) : null;\r\n};\r\n\r\nProductVariantText.propTypes = {\r\n textHtml: PropTypes.string,\r\n className: PropTypes.string\r\n};\r\n\r\nProductVariantText.propTypesMeta = 'exclude';\r\n\r\nexport default ProductVariantText;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport api from '../../js/api-helper';\r\nimport checkApiPropTypes from 'js/check-api-prop-types';\r\nimport createFormModel from './create-form-model';\r\n\r\nimport Bomb from 'components/bomb';\r\nimport ContactLensForm from './contact-lens-form';\r\nimport Grid from '../grid';\r\nimport Icon from '../icon';\r\nimport ProductImages from '../product-images';\r\nimport ProductLogo from '../product-logo';\r\nimport ProductSellingPoints from '../product-selling-points';\r\nimport ReplacementProductBanner from './replacement-product-banner';\r\nimport SellingPoints from '../selling-points';\r\nimport UpdateFormResponse from './update-form-response';\r\nimport ProductVariantText from 'components/product-variant-text';\r\n\r\nclass ContactLensHeader extends React.Component {\r\n static propTypes = {\r\n bomb: PropTypes.string,\r\n getAvailabilityEndpoint: PropTypes.string,\r\n productImages: PropTypes.exact(ProductImages.propTypes),\r\n productLogo: PropTypes.exact(ProductLogo.propTypes),\r\n productName: PropTypes.string,\r\n productSellingPoints: PropTypes.exact(ProductSellingPoints.propTypes),\r\n productType: PropTypes.string,\r\n purchaseForm: PropTypes.exact(ContactLensForm.propTypes),\r\n replacementProductBanner: PropTypes.exact(\r\n ReplacementProductBanner.propTypes\r\n ),\r\n replacementProductTitle: PropTypes.string,\r\n sellingPoints: PropTypes.exact(SellingPoints.propTypes),\r\n updateFormEndpoint: PropTypes.string,\r\n productVariantText: PropTypes.string\r\n };\r\n\r\n static defaultProps = {\r\n productSellingPoints: []\r\n };\r\n\r\n state = {\r\n purchaseForm: this.props.purchaseForm,\r\n productVariantText: this.props.productVariantText\r\n };\r\n\r\n isLoading = false;\r\n\r\n onFormChange = formData => {\r\n if (this.isLoading) {\r\n return;\r\n }\r\n\r\n this.isLoading = true;\r\n\r\n const transformedFormData = Object.entries(formData).reduce(\r\n (accum, [key, val]) => Object.assign({}, accum, { [key]: val || '' }),\r\n {}\r\n );\r\n\r\n api\r\n .execute(this.props.updateFormEndpoint, transformedFormData)\r\n .then(({ purchaseForm, productVariantText }) => {\r\n this.isLoading = false;\r\n\r\n checkApiPropTypes(\r\n { purchaseForm },\r\n UpdateFormResponse.propTypes,\r\n 'UpdateFormResponse'\r\n );\r\n\r\n this.formsy && this.formsy.reset(createFormModel(purchaseForm));\r\n\r\n this.setState(state => ({\r\n purchaseForm: Object.assign({}, state.purchaseForm, purchaseForm),\r\n productVariantText: productVariantText\r\n }));\r\n });\r\n\r\n // NOTE: This endpoint is separate from updateFormEndpoint because the availability check is much slower on the server than the price calculation.\r\n if (this.props.getAvailabilityEndpoint) {\r\n api\r\n .execute(this.props.getAvailabilityEndpoint, transformedFormData)\r\n .then(({ purchaseForm }) => {\r\n checkApiPropTypes(\r\n { purchaseForm },\r\n UpdateFormResponse.propTypes,\r\n 'UpdateFormResponse'\r\n );\r\n this.setState(state => ({\r\n purchaseForm: Object.assign({}, state.purchaseForm, purchaseForm)\r\n }));\r\n });\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n <Grid className=\"contact-lens-header\" theme={Grid.themes.leftColumnWider}>\r\n <Grid.Column>\r\n <div className=\"contact-lens-product-wrapper\">\r\n {this.props.replacementProductBanner && (\r\n <div className=\"contact-lens-replacement-product\">\r\n <ReplacementProductBanner\r\n {...this.props.replacementProductBanner}\r\n />\r\n </div>\r\n )}\r\n\r\n <div className=\"contact-lens-main-product\">\r\n <div className=\"contact-lens-title\">\r\n {this.props.replacementProductTitle && (\r\n <h2>\r\n <div className=\"contact-lens-checkmark\">\r\n <Icon name=\"checkmark\" />\r\n </div>\r\n {this.props.replacementProductTitle}\r\n </h2>\r\n )}\r\n {this.props.replacementProductBanner ? (\r\n <h2 className=\"contact-lens-product-title\">\r\n {this.props.productName}\r\n </h2>\r\n ) : (\r\n <h1>{this.props.productName}</h1>\r\n )}\r\n <p>{this.props.productType}</p>\r\n </div>\r\n\r\n {this.props.productSellingPoints && (\r\n <div className=\"contact-lens-selling-points\">\r\n <ProductSellingPoints\r\n theme={\r\n this.props.replacementProductBanner\r\n ? ProductSellingPoints.themes.smallText\r\n : undefined\r\n }\r\n {...this.props.productSellingPoints}\r\n />\r\n </div>\r\n )}\r\n\r\n <div className=\"contact-lens-image\">\r\n {this.props.bomb && (\r\n <div className=\"contact-lens-bomb\">\r\n <Bomb text={this.props.bomb} />\r\n </div>\r\n )}\r\n <ProductImages {...this.props.productImages} />\r\n </div>\r\n\r\n <div className=\"contact-lens-logo\">\r\n <ProductLogo {...this.props.productLogo} />\r\n </div>\r\n </div>\r\n </div>\r\n </Grid.Column>\r\n\r\n <Grid.Column>\r\n <ContactLensForm\r\n onChange={this.onFormChange}\r\n onRef={formsy => (this.formsy = formsy)}\r\n {...this.state.purchaseForm}\r\n />\r\n {this.state.productVariantText && (\r\n <ProductVariantText\r\n textHtml={this.state.productVariantText}\r\n className=\"product-variant-text--in-contact-lens\"\r\n />\r\n )}\r\n <SellingPoints {...this.props.sellingPoints} />\r\n </Grid.Column>\r\n </Grid>\r\n );\r\n }\r\n}\r\n\r\nexport default ContactLensHeader;\r\n","import get from 'lodash/get';\r\n\r\nexport default function createFormModel(purchaseForm) {\r\n const { productSelect, propertySelect } = purchaseForm;\r\n\r\n if (!productSelect || !propertySelect) {\r\n return;\r\n }\r\n\r\n const model = {};\r\n\r\n model[productSelect.name] = get(\r\n productSelect.options.find(option => option.selected),\r\n 'value',\r\n get(productSelect.options, '[0].value')\r\n );\r\n\r\n propertySelect.rows.forEach(row => {\r\n row.inputs.forEach(input => {\r\n model[input.name] = get(\r\n input.options.find(option => option.selected),\r\n 'value'\r\n );\r\n });\r\n });\r\n\r\n return model;\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport RichText from 'components/rich-text';\r\n\r\nconst ProductText = ({ textHtml }) => (\r\n <RichText text={textHtml} className=\"product-text\" isCentered={false} />\r\n);\r\nProductText.propTypes = {\r\n textHtml: PropTypes.string\r\n};\r\n\r\nProductText.propTypesMeta = 'exclude';\r\n\r\nexport default ProductText;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport ContentContainer from '../content-container';\r\nimport ContactLensHeader from './contact-lens-header';\r\nimport Grid from '../grid';\r\nimport ProductList from '../product-list';\r\nimport ProductText from 'components/product-text';\r\n\r\nconst ContactLensPage = ({\r\n header,\r\n productInformation,\r\n productMetadata,\r\n relatedProducts,\r\n productTextHtml\r\n}) => (\r\n <div className=\"contact-lens-page\">\r\n <ContentContainer>\r\n <ContactLensHeader {...header} />\r\n {productTextHtml && <ProductText textHtml={productTextHtml} />}\r\n <Grid\r\n className=\"contact-lens-content\"\r\n theme={Grid.themes.leftColumnWider}\r\n >\r\n <Grid.Column>\r\n {productInformation && (\r\n <div className=\"contact-lens-information\">\r\n <h2>{productInformation.title}</h2>\r\n {productInformation.content.map(item => [\r\n <h3 key={item.title}>{item.title}</h3>,\r\n <p key={item.text}>{item.text}</p>\r\n ])}\r\n </div>\r\n )}\r\n {productMetadata && (\r\n <div className=\"contact-lens-metadata\">\r\n <h2>{productMetadata.title}</h2>\r\n <table>\r\n <tbody>\r\n {productMetadata.content.map(item => (\r\n <tr key={item.title}>\r\n <td>{`${item.title}:`}</td>\r\n <td>{item.text}</td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n )}\r\n </Grid.Column>\r\n <Grid.Column />\r\n </Grid>\r\n\r\n {relatedProducts && <ProductList {...relatedProducts} />}\r\n </ContentContainer>\r\n </div>\r\n);\r\n\r\nContactLensPage.propTypes = {\r\n header: PropTypes.exact(ContactLensHeader.propTypes),\r\n productTextHtml: PropTypes.string,\r\n productType: PropTypes.string,\r\n productInformation: PropTypes.exact({\r\n title: PropTypes.string,\r\n content: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n title: PropTypes.string,\r\n text: PropTypes.string\r\n })\r\n )\r\n }),\r\n productMetadata: PropTypes.exact({\r\n title: PropTypes.string,\r\n content: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n title: PropTypes.string,\r\n text: PropTypes.string\r\n })\r\n )\r\n }),\r\n relatedProducts: PropTypes.exact(ProductList.propTypes)\r\n};\r\n\r\nexport default ContactLensPage;\r\n","import React from 'react';\r\n\r\nimport CtaBlock from '../cta-block';\r\n\r\nconst CtaBlockSmall = props => (\r\n <CtaBlock theme={CtaBlock.themes.mini} {...props} />\r\n);\r\n\r\nCtaBlockSmall.propTypes = CtaBlock.propTypes;\r\n\r\nexport default CtaBlockSmall;\r\n","/* eslint-disable react/no-multi-comp */\r\nimport React, { Fragment, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Carousel from 'components/carousel';\r\nimport CtaBlock from 'components/cta-block';\r\n\r\nimport CarouselContext from '../../contexts/carousel-context';\r\n\r\nconst BlockChild = ({ block, index }) => {\r\n const { currentSlideIndex } = useContext(CarouselContext);\r\n\r\n const isCurrent = currentSlideIndex === index;\r\n\r\n return (\r\n <div>\r\n <CtaBlock {...block} isFocusable={isCurrent} />\r\n </div>\r\n );\r\n};\r\n\r\nBlockChild.propTypes = {\r\n index: PropTypes.number,\r\n block: PropTypes.exact(CtaBlock.propTypes)\r\n};\r\n\r\nBlockChild.propTypesMeta = 'exclude';\r\n\r\nconst CtaCarousel = ({\r\n title,\r\n blocks,\r\n isAutoPlayEnabled,\r\n autoPlayDelayInSeconds,\r\n pauseItemText,\r\n playItemText,\r\n stopItemText,\r\n previousItemText,\r\n nextItemText,\r\n carouselLabelText,\r\n carouselAnnouncementText\r\n}) => {\r\n return (\r\n <div className=\"cta-carousel\">\r\n <Carousel\r\n theme={Carousel.themes.cta}\r\n numberOfSlidesToShow={1}\r\n shouldShowDots={true}\r\n carouselAnnouncementText={carouselAnnouncementText}\r\n shouldLoop={true}\r\n pauseItemText={pauseItemText}\r\n playItemText={playItemText}\r\n stopItemText={stopItemText}\r\n isAutoPlayEnabled={isAutoPlayEnabled}\r\n autoPlayDelayInSeconds={autoPlayDelayInSeconds}\r\n title={title}\r\n previousItemText={previousItemText}\r\n nextItemText={nextItemText}\r\n carouselLabelText={carouselLabelText}\r\n >\r\n {blocks.map((block, index) => {\r\n return (\r\n <Fragment key={index}>\r\n <BlockChild block={block} index={index} />\r\n </Fragment>\r\n );\r\n })}\r\n </Carousel>\r\n </div>\r\n );\r\n};\r\n\r\nCtaCarousel.propTypes = {\r\n title: PropTypes.string,\r\n carouselLabelText: PropTypes.string.isRequired,\r\n previousItemText: PropTypes.string,\r\n nextItemText: PropTypes.string,\r\n pauseItemText: PropTypes.string,\r\n playItemText: PropTypes.string,\r\n stopItemText: PropTypes.string,\r\n carouselAnnouncementText: PropTypes.string,\r\n blocks: PropTypes.arrayOf(PropTypes.exact(CtaBlock.propTypes)),\r\n isAutoPlayEnabled: PropTypes.bool,\r\n autoPlayDelayInSeconds: PropTypes.number\r\n};\r\n\r\nCtaCarousel.propTypesMeta = {};\r\n\r\nCtaCarousel.defaultProps = {\r\n blocks: [],\r\n autoPlayDelayInSeconds: 0\r\n};\r\n\r\nexport default CtaCarousel;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Button from '../button';\r\nimport TextInput from '../form-elements/text-input';\r\n\r\nconst CustomerDataImportForm = ({\r\n endpoint,\r\n secondaryAction,\r\n submitLabel,\r\n textInput\r\n}) => (\r\n <div className=\"customer-data-import-form\">\r\n <form action={endpoint} method=\"POST\">\r\n <div className=\"customer-data-import-form-input\">\r\n <TextInput useFormsy={false} {...textInput} />\r\n </div>\r\n\r\n <div className=\"customer-data-import-form-actions\">\r\n <Button type=\"submit\" text={submitLabel} />\r\n {secondaryAction && (\r\n <Button theme={Button.themes.outline} {...secondaryAction} />\r\n )}\r\n </div>\r\n </form>\r\n </div>\r\n);\r\n\r\nCustomerDataImportForm.propTypes = {\r\n endpoint: PropTypes.string,\r\n secondaryAction: PropTypes.exact(Button.propTypes),\r\n submitLabel: PropTypes.string,\r\n textInput: PropTypes.exact(TextInput.propTypes)\r\n};\r\n\r\nexport default CustomerDataImportForm;\r\n","function create(props) {\r\n try {\r\n return {\r\n [props.firstName.name]: !props.firstName.isRequired,\r\n [props.lastName.name]: !props.lastName.isRequired,\r\n [props.email.name]: !props.email.isRequired,\r\n [props.phone.name]: !props.phone.isRequired,\r\n [props.address.name]: !props.address.isRequired,\r\n [props.postalCode.name]: !props.postalCode.isRequired,\r\n [props.birthDate.name]: !props.birthDate.isRequired\r\n };\r\n } catch (e) {\r\n return {};\r\n }\r\n}\r\n\r\nfunction toggleDeliveryAddress(props, model, requireDeliveryAddress) {\r\n try {\r\n const newModel = { ...model };\r\n\r\n if (requireDeliveryAddress) {\r\n newModel[props.deliveryFirstName.name] = !props.deliveryFirstName\r\n .isRequired;\r\n newModel[props.deliveryLastName.name] = !props.deliveryLastName\r\n .isRequired;\r\n newModel[props.deliveryAddress.name] = !props.deliveryAddress.isRequired;\r\n newModel[props.deliveryPostalCode.name] = !props.deliveryPostalCode\r\n .isRequired;\r\n } else {\r\n delete newModel[props.deliveryFirstName.name];\r\n delete newModel[props.deliveryLastName.name];\r\n delete newModel[props.deliveryAddress.name];\r\n delete newModel[props.deliveryPostalCode.name];\r\n }\r\n\r\n return newModel;\r\n } catch (e) {\r\n return model;\r\n }\r\n}\r\n\r\nfunction validate(model) {\r\n return Object.keys(model).every(key => model[key]);\r\n}\r\n\r\nexport default {\r\n create,\r\n toggleDeliveryAddress,\r\n validate\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Button from '../button';\r\nimport Link from '../link';\r\nimport TextInput from '../form-elements/text-input';\r\n\r\nconst PersonalInformationLoginForm = ({\r\n buttonText,\r\n forgotPasswordLink,\r\n formId,\r\n groupClassName,\r\n password,\r\n title,\r\n userId\r\n}) => (\r\n <div className=\"personal-information-login\">\r\n {userId && password && (\r\n <div className={groupClassName}>\r\n <h3>{title}</h3>\r\n <TextInput\r\n formId={formId}\r\n theme={TextInput.themes.grid}\r\n useFormsy={false}\r\n {...userId}\r\n />\r\n <TextInput\r\n formId={formId}\r\n theme={TextInput.themes.grid}\r\n type=\"password\"\r\n useFormsy={false}\r\n {...password}\r\n />\r\n </div>\r\n )}\r\n <Button\r\n className=\"personal-information-login-submit\"\r\n formId={formId}\r\n type=\"submit\"\r\n text={buttonText}\r\n />\r\n {forgotPasswordLink && (\r\n <div className=\"personal-information-forgot-password\">\r\n <Link {...forgotPasswordLink} />\r\n </div>\r\n )}\r\n </div>\r\n);\r\n\r\nPersonalInformationLoginForm.propTypes = {\r\n buttonText: PropTypes.string,\r\n forgotPasswordLink: PropTypes.exact(Link.propTypes),\r\n formId: PropTypes.string.isRequired,\r\n groupClassName: PropTypes.string,\r\n password: PropTypes.exact(TextInput.propTypes),\r\n title: PropTypes.string,\r\n userId: PropTypes.exact(TextInput.propTypes)\r\n};\r\n\r\nPersonalInformationLoginForm.propTypesMeta = {\r\n formId: 'exclude',\r\n groupClassName: 'exclude'\r\n};\r\n\r\nexport default PersonalInformationLoginForm;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport Collapse from 'react-tiny-collapse';\r\n\r\nimport propTypeTheme from 'utils/prop-type-theme';\r\nimport validationHelper from './validation-helper';\r\n\r\nimport Checkbox from '../form-elements/checkbox';\r\nimport Link from '../link';\r\nimport PersonalInformationLoginForm from './personal-information-login-form';\r\nimport TextInput from '../form-elements/text-input';\r\nimport ValidationErrorTexts from 'components/validation-error-texts';\r\n\r\nconst themes = {\r\n narrow: 'theme-narrow'\r\n};\r\n\r\nclass PersonalInformationForm extends React.Component {\r\n static propTypes = {\r\n address: PropTypes.exact(TextInput.propTypes).isRequired,\r\n birthDate: PropTypes.exact(TextInput.propTypes).isRequired,\r\n birthDateLink: PropTypes.exact(Link.propTypes),\r\n changeEmailLink: PropTypes.exact(Link.propTypes),\r\n changePasswordLink: PropTypes.exact(Link.propTypes),\r\n city: PropTypes.exact(TextInput.propTypes),\r\n deliveryAddress: PropTypes.exact(TextInput.propTypes),\r\n deliveryAddressTitle: PropTypes.string,\r\n deliveryCity: PropTypes.exact(TextInput.propTypes),\r\n deliveryFirstName: PropTypes.exact(TextInput.propTypes),\r\n deliveryLastName: PropTypes.exact(TextInput.propTypes),\r\n deliveryPostalCode: PropTypes.exact(TextInput.propTypes),\r\n email: PropTypes.exact(TextInput.propTypes).isRequired,\r\n firstName: PropTypes.exact(TextInput.propTypes).isRequired,\r\n isLoggedIn: PropTypes.bool,\r\n lastName: PropTypes.exact(TextInput.propTypes).isRequired,\r\n loginForm: PropTypes.exact(PersonalInformationLoginForm.propTypes),\r\n loginFormId: PropTypes.string,\r\n onValidate: PropTypes.func,\r\n password: PropTypes.exact(TextInput.propTypes),\r\n phone: PropTypes.exact(TextInput.propTypes).isRequired,\r\n postalCode: PropTypes.exact(TextInput.propTypes).isRequired,\r\n registerAccount: PropTypes.exact(Checkbox.propTypes),\r\n separateDeliveryAddress: PropTypes.exact(Checkbox.propTypes),\r\n showDeliveryAddress: PropTypes.bool,\r\n showDeliveryAddressCheckbox: PropTypes.bool,\r\n theme: propTypeTheme(themes),\r\n title: PropTypes.string,\r\n validationErrors: PropTypes.exact(ValidationErrorTexts.propTypes)\r\n };\r\n\r\n static propTypesMeta = {\r\n loginFormId: 'exclude',\r\n showDeliveryAddress: 'exclude',\r\n showDeliveryAddressCheckbox: 'exclude',\r\n theme: 'exclude'\r\n };\r\n\r\n static defaultProps = {\r\n onValidate: () => {},\r\n showDeliveryAddress: false,\r\n showDeliveryAddressCheckbox: true\r\n };\r\n\r\n state = {\r\n isMounted: false,\r\n showDeliveryAddress: this.props.showDeliveryAddress\r\n };\r\n\r\n componentDidMount() {\r\n this.setState({ isMounted: true });\r\n }\r\n\r\n // List keeping track of whether inputs are valid or not\r\n inputValidation = validationHelper.create(this.props);\r\n\r\n validateAll = () => {\r\n this.props.onValidate(validationHelper.validate(this.inputValidation));\r\n };\r\n\r\n onValidate = ({ name }, isValid) => {\r\n this.inputValidation = { ...this.inputValidation, [name]: isValid };\r\n this.validateAll();\r\n };\r\n\r\n toggleSeparateDeliveryAddress = showDeliveryAddress => {\r\n this.setState({ showDeliveryAddress });\r\n this.inputValidation = validationHelper.toggleDeliveryAddress(\r\n this.props,\r\n this.inputValidation,\r\n showDeliveryAddress\r\n );\r\n this.validateAll();\r\n };\r\n\r\n getTextInput = (textInputProps, validation, theme, formId, type) =>\r\n textInputProps ? (\r\n // Utility method to make the render method more compact. Just look at all those props that would have to be repeated 😱!\r\n <TextInput\r\n detectAutofill={true}\r\n formId={formId}\r\n idPrefix=\"personal-information\"\r\n onValidate={this.onValidate.bind(this, textInputProps)}\r\n validations={validation}\r\n theme={[TextInput.themes.grid].concat(theme)}\r\n type={type}\r\n validationErrors={this.props.validationErrors}\r\n {...textInputProps}\r\n />\r\n ) : null;\r\n\r\n render() {\r\n const groupClassName = cn('personal-information-group', this.props.theme);\r\n\r\n const { aloneInRow, narrow, wide } = TextInput.themes;\r\n\r\n return (\r\n <React.Fragment>\r\n {this.props.loginForm && !this.props.isLoggedIn && (\r\n <PersonalInformationLoginForm\r\n formId={this.props.loginFormId}\r\n groupClassName={groupClassName}\r\n {...this.props.loginForm}\r\n />\r\n )}\r\n\r\n <div className={groupClassName}>\r\n {this.props.title && <h3>{this.props.title}</h3>}\r\n {this.getTextInput(this.props.email, 'isEmail', wide)}\r\n\r\n {(this.props.changeEmailLink || this.props.changePasswordLink) && (\r\n <div className=\"personal-information-form-links\">\r\n {this.props.changeEmailLink && (\r\n <Link {...this.props.changeEmailLink} />\r\n )}\r\n {this.props.changePasswordLink && (\r\n <Link {...this.props.changePasswordLink} />\r\n )}\r\n </div>\r\n )}\r\n\r\n {this.getTextInput(\r\n this.props.password,\r\n '',\r\n aloneInRow,\r\n null,\r\n 'password'\r\n )}\r\n {this.getTextInput(this.props.firstName)}\r\n {this.getTextInput(this.props.lastName)}\r\n {this.getTextInput(this.props.phone, 'isPhoneNumber', aloneInRow)}\r\n {this.getTextInput(this.props.address)}\r\n {this.getTextInput(this.props.postalCode, 'isPostalCode', narrow)}\r\n {this.getTextInput(this.props.city, '', narrow)}\r\n\r\n {this.props.separateDeliveryAddress &&\r\n this.props.showDeliveryAddressCheckbox && (\r\n <Checkbox\r\n idPrefix=\"personal-information\"\r\n theme={Checkbox.themes.grid}\r\n onChange={this.toggleSeparateDeliveryAddress}\r\n {...this.props.separateDeliveryAddress}\r\n />\r\n )}\r\n </div>\r\n\r\n {this.props.deliveryFirstName &&\r\n this.props.deliveryLastName &&\r\n this.props.deliveryAddress &&\r\n this.props.deliveryPostalCode && (\r\n <div className=\"personal-information-collapse\">\r\n <Collapse\r\n isOpen={!this.state.isMounted || this.state.showDeliveryAddress}\r\n >\r\n <div className={groupClassName}>\r\n <h3>{this.props.deliveryAddressTitle}</h3>\r\n\r\n {this.getTextInput(this.props.deliveryFirstName)}\r\n {this.getTextInput(this.props.deliveryLastName)}\r\n {this.getTextInput(this.props.deliveryAddress)}\r\n {this.getTextInput(\r\n this.props.deliveryPostalCode,\r\n 'isPostalCode',\r\n narrow\r\n )}\r\n {this.getTextInput(this.props.deliveryCity, '', narrow)}\r\n </div>\r\n </Collapse>\r\n </div>\r\n )}\r\n\r\n <div className={groupClassName}>\r\n {this.getTextInput(this.props.birthDate, 'isBirthDate', narrow)}\r\n {this.props.birthDateLink && (\r\n <Link\r\n className=\"personal-information-link\"\r\n theme={Link.themes.skewUnderline}\r\n {...this.props.birthDateLink}\r\n />\r\n )}\r\n </div>\r\n\r\n {this.props.registerAccount && (\r\n <div className={groupClassName}>\r\n <Checkbox\r\n idPrefix=\"personal-information\"\r\n theme={Checkbox.themes.grid}\r\n {...this.props.registerAccount}\r\n />\r\n </div>\r\n )}\r\n </React.Fragment>\r\n );\r\n }\r\n}\r\n\r\nPersonalInformationForm.themes = themes;\r\n\r\nexport default PersonalInformationForm;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Grid from '../grid';\r\nimport MyPageForm from '../my-page-form';\r\nimport MyPageLayout from 'components/my-page-layout';\r\nimport MyPageSection from 'components/my-page-section';\r\nimport PersonalInformationForm from '../personal-information-form';\r\n\r\nconst PersonalInformationPage = ({\r\n form,\r\n formContent,\r\n layout,\r\n section,\r\n showDeliveryAddress\r\n}) => {\r\n return (\r\n <MyPageLayout {...layout}>\r\n <Grid theme={Grid.themes.leftColumnWider}>\r\n <Grid.Column>\r\n <MyPageSection headingLevel={1} {...section}>\r\n <MyPageForm {...form}>\r\n <PersonalInformationForm\r\n showDeliveryAddress={showDeliveryAddress}\r\n showDeliveryAddressCheckbox={false}\r\n {...formContent}\r\n />\r\n </MyPageForm>\r\n </MyPageSection>\r\n </Grid.Column>\r\n </Grid>\r\n </MyPageLayout>\r\n );\r\n};\r\n\r\nPersonalInformationPage.propTypes = {\r\n form: PropTypes.exact(MyPageForm.propTypes),\r\n formContent: PropTypes.exact(PersonalInformationForm.propTypes),\r\n layout: PropTypes.exact(MyPageLayout.propTypes),\r\n section: PropTypes.exact(MyPageSection.propTypes),\r\n showDeliveryAddress: PropTypes.bool\r\n};\r\n\r\nPersonalInformationPage.propTypesMeta = {\r\n showDeliveryAddress: 'exclude'\r\n};\r\n\r\nexport default PersonalInformationPage;\r\n","import React from 'react';\r\n\r\nimport PersonalInformationPage from 'components/personal-information-page';\r\n\r\nconst EditProfilePage = props => (\r\n <PersonalInformationPage\r\n showDeliveryAddress={true}\r\n showDeliveryAddressCheckbox={false}\r\n {...props}\r\n />\r\n);\r\n\r\nEditProfilePage.propTypes = PersonalInformationPage.propTypes;\r\n\r\nexport default EditProfilePage;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst EmailTemplateContent = ({\r\n expectedDeliveryDate,\r\n orderConfirmationLabel,\r\n orderNumber,\r\n orderDateLabel,\r\n orderDate,\r\n products,\r\n quantityLabel,\r\n totalPriceLabel,\r\n unitPriceLabel\r\n}) => (\r\n <div className=\"email-template-content\">\r\n <p>\r\n {orderConfirmationLabel}: <strong>{orderNumber}</strong>\r\n </p>\r\n <p>\r\n {orderDateLabel}: <strong>{orderDate}</strong>\r\n </p>\r\n <p>{expectedDeliveryDate}</p>\r\n <div className=\"email-template-product-list\">\r\n <hr />\r\n {products.map(product => (\r\n <div className=\"email-template-product\" key={product.id}>\r\n <img src={product.image.src} />\r\n <h2>{product.title}</h2>\r\n <p>\r\n {product.details.map((detail, i) => (\r\n <React.Fragment key={detail.label}>\r\n {detail.label}: <strong>{detail.data}</strong>\r\n {product.details.length - 1 > i ? (\r\n <React.Fragment>, </React.Fragment>\r\n ) : null}\r\n </React.Fragment>\r\n ))}\r\n </p>\r\n <div className=\"email-template-price\">\r\n <p>\r\n {quantityLabel}: <strong>{product.quantity}</strong>,{' '}\r\n {unitPriceLabel}:{' '}\r\n <strong>{product.unitPrice.originalPrice}</strong>\r\n </p>\r\n <p className=\"email-template-unit-total\">\r\n {totalPriceLabel}: <strong>{product.price.originalPrice}</strong>\r\n </p>\r\n </div>\r\n <hr />\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n);\r\n\r\nEmailTemplateContent.defaultProps = {\r\n products: []\r\n};\r\n\r\nEmailTemplateContent.propTypes = {\r\n expectedDeliveryDate: PropTypes.string,\r\n orderConfirmationLabel: PropTypes.string,\r\n orderNumber: PropTypes.string,\r\n orderDateLabel: PropTypes.string,\r\n orderDate: PropTypes.string,\r\n products: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n details: PropTypes.arrayOf(\r\n PropTypes.shape({ label: PropTypes.string, data: PropTypes.string })\r\n ),\r\n image: PropTypes.object,\r\n price: PropTypes.shape({\r\n originalPrice: PropTypes.string\r\n }),\r\n id: PropTypes.string,\r\n productUrl: PropTypes.string,\r\n quantity: PropTypes.number,\r\n title: PropTypes.string,\r\n unitPrice: PropTypes.shape({\r\n originalPrice: PropTypes.string\r\n })\r\n })\r\n ),\r\n quantityLabel: PropTypes.string,\r\n totalPriceLabel: PropTypes.string,\r\n unitPriceLabel: PropTypes.string\r\n};\r\n\r\nEmailTemplateContent.propTypesMeta = 'exclude';\r\n\r\nexport default EmailTemplateContent;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Image from '../image';\r\n\r\nconst EmailTemplateHeader = ({ title, logo, text }) => (\r\n <div className=\"email-template-header\">\r\n <Image {...logo} />\r\n <h1>{title}</h1>\r\n <p>{text}</p>\r\n </div>\r\n);\r\n\r\nEmailTemplateHeader.propTypes = {\r\n title: PropTypes.string,\r\n logo: PropTypes.object,\r\n text: PropTypes.string\r\n};\r\n\r\nEmailTemplateHeader.propTypesMeta = 'exclude';\r\n\r\nexport default EmailTemplateHeader;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst EmailTemplateSummary = ({\r\n addressLabel,\r\n address,\r\n customerName,\r\n discount,\r\n discountLabel,\r\n email,\r\n paymentMethodLabel,\r\n paymentMethod,\r\n phone,\r\n reorderLink,\r\n shippingLabel,\r\n shippingCost,\r\n totalPriceLabel,\r\n totalPrice\r\n}) => (\r\n <div className=\"email-template-summary\">\r\n <div className=\"email-template-summary-price\">\r\n <p>\r\n {discountLabel}: <strong>{discount}</strong>\r\n </p>\r\n <p>\r\n {shippingLabel}: <strong>{shippingCost}</strong>\r\n </p>\r\n <p className=\"email-template-summary-total-price\">\r\n <span>\r\n {totalPriceLabel}: <strong>{totalPrice}</strong>\r\n </span>\r\n </p>\r\n <a href={reorderLink.url}>{reorderLink.text}</a>\r\n </div>\r\n <div className=\"email-template-payment-informastion\">\r\n <p>\r\n <strong>{paymentMethodLabel}</strong>\r\n </p>\r\n <p>{paymentMethod}</p>\r\n </div>\r\n <div className=\"email-template-delivery-information\">\r\n <p>\r\n <strong>{addressLabel}</strong>\r\n </p>\r\n <p>{customerName}</p>\r\n <p>{phone}</p>\r\n <p>\r\n <a href={`mailto: ${email}`}>{email}</a>\r\n </p>\r\n <p>{address}</p>\r\n </div>\r\n </div>\r\n);\r\n\r\nEmailTemplateSummary.propTypes = {\r\n addressLabel: PropTypes.string,\r\n address: PropTypes.string,\r\n customerName: PropTypes.string,\r\n discount: PropTypes.string,\r\n discountLabel: PropTypes.string,\r\n email: PropTypes.string,\r\n paymentMethodLabel: PropTypes.string,\r\n paymentMethod: PropTypes.string,\r\n phone: PropTypes.string,\r\n reorderLink: PropTypes.object,\r\n shippingLabel: PropTypes.string,\r\n shippingCost: PropTypes.string,\r\n totalPriceLabel: PropTypes.string,\r\n totalPrice: PropTypes.string\r\n};\r\n\r\nEmailTemplateSummary.propTypesMeta = 'exclude';\r\n\r\nexport default EmailTemplateSummary;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport EmailTemplateContent from './email-template-content';\r\nimport EmailTemplateHeader from './email-template-header';\r\nimport EmailTemplateSummary from './email-template-summary';\r\n\r\nimport css from './email-template.css';\r\n\r\nconst EmailTemplate = ({\r\n addressLabel,\r\n address,\r\n cart,\r\n customerLabel,\r\n customerName,\r\n customer,\r\n email,\r\n expectedDeliveryDate,\r\n logo,\r\n title,\r\n orderConfirmationLabel,\r\n orderDetails,\r\n orderDate,\r\n orderDateLabel,\r\n orderNumber,\r\n paymentMethodLabel,\r\n paymentMethod,\r\n phone,\r\n reorderLink,\r\n text\r\n}) => (\r\n <React.Fragment>\r\n <style>{css}</style>\r\n <table className=\"email-template-wrapper\">\r\n <tr>\r\n <td />\r\n <td align=\"center\" width=\"600\">\r\n <div className=\"email-template\">\r\n <EmailTemplateHeader logo={logo} title={title} text={text} />\r\n <EmailTemplateContent\r\n orderConfirmationLabel={orderConfirmationLabel}\r\n orderNumber={orderNumber}\r\n orderDate={orderDate}\r\n orderDateLabel={orderDateLabel}\r\n expectedDeliveryDate={expectedDeliveryDate}\r\n {...cart}\r\n />\r\n <EmailTemplateSummary\r\n reorderLink={reorderLink}\r\n orderDetails={orderDetails}\r\n paymentMethodLabel={paymentMethodLabel}\r\n paymentMethod={paymentMethod}\r\n customerLabel={customerLabel}\r\n addressLabel={addressLabel}\r\n customerName={customerName}\r\n email={email}\r\n phone={phone}\r\n customer={customer}\r\n address={address}\r\n {...cart}\r\n />\r\n </div>\r\n </td>\r\n <td />\r\n </tr>\r\n </table>\r\n </React.Fragment>\r\n);\r\n\r\nEmailTemplate.propTypes = {\r\n addressLabel: PropTypes.string,\r\n address: PropTypes.string,\r\n cart: PropTypes.object,\r\n customerLabel: PropTypes.string,\r\n customerName: PropTypes.string,\r\n customer: PropTypes.string,\r\n email: PropTypes.string,\r\n expectedDeliveryDate: PropTypes.string,\r\n logo: PropTypes.object,\r\n title: PropTypes.string,\r\n orderConfirmationLabel: PropTypes.string,\r\n orderDetails: PropTypes.array,\r\n orderDate: PropTypes.string,\r\n orderDateLabel: PropTypes.string,\r\n orderNumber: PropTypes.string,\r\n paymentMethodLabel: PropTypes.string,\r\n paymentMethod: PropTypes.string,\r\n phone: PropTypes.string,\r\n reorderLink: PropTypes.object,\r\n text: PropTypes.string\r\n};\r\n\r\nEmailTemplate.propTypesMeta = 'exclude';\r\n\r\nexport default EmailTemplate;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport embed from 'embed-video';\r\n\r\nimport OnPageEditing from '../on-page-editing';\r\n\r\nconst EmbedVideo = ({ OPE, url }) => {\r\n const iframe = embed(url) || '';\r\n\r\n return (\r\n <div className=\"embed-video\">\r\n <OnPageEditing name={OPE.url} editType={OnPageEditing.editTypes.flyout}>\r\n <div dangerouslySetInnerHTML={{ __html: iframe }} />\r\n </OnPageEditing>\r\n </div>\r\n );\r\n};\r\n\r\nEmbedVideo.propTypes = {\r\n OPE: PropTypes.exact({\r\n url: PropTypes.string\r\n }),\r\n url: PropTypes.string.isRequired\r\n};\r\n\r\nEmbedVideo.defaultProps = {\r\n OPE: {}\r\n};\r\n\r\nexport default EmbedVideo;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst ErrorSvg = ({ errorCode }) => (\r\n <svg\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n width=\"352px\"\r\n height=\"352px\"\r\n viewBox=\"0 0 352 352\"\r\n style={{\r\n enableBackground: 'new 0 0 352 352',\r\n maxWidth: '100%'\r\n }}\r\n xmlSpace=\"preserve\"\r\n >\r\n <style type=\"text/css\">{`\r\n\t.st0{fill:#0A6431;}\r\n\t.st1{fill:none;stroke:#0A6431;stroke-width:10;stroke-miterlimit:10;}\r\n\t.st2{fill:#FFFFFF;}\r\n\t.st3{font-family:Verdana,sans-serif;font-weight:bold;}\r\n\t.st4{font-size:32;}\r\n\t.st5{fill:none;stroke:#0A6431;stroke-width:10;stroke-linecap:round;stroke-miterlimit:10;}\r\n`}</style>\r\n <path\r\n className=\"st0\"\r\n d=\"M238.8,158.2c-21.5,0-39.7,13.7-46.5,32.9c-4.6-3.1-9.8-4.8-14.7-4.8c-5,0-10.1,1.6-14.6,4.7\r\n\tc-6.8-19.1-25-32.8-46.5-32.8c-27.3,0-49.4,22.1-49.4,49.4c0,27.3,22.1,49.4,49.4,49.4c21.9,0,40.5-14.3,47-34.1l0,0.8\r\n\tc5-11.9,3.4-25.1,14.1-25.1c10.5,0,10.1,12.3,13.8,22.8c5.9,20.6,24.9,35.7,47.4,35.7c27.3,0,49.4-22.1,49.4-49.4\r\n\tC288.2,180.4,266.1,158.2,238.8,158.2z\"\r\n />\r\n <path\r\n className=\"st1\"\r\n d=\"M328.1,167.4c11.3,6,18.9,18.1,18.9,31.9c0,19.9-15.9,36-35.5,36c-1.6,0-3.1-0.1-4.6-0.3\r\n\tC291.4,293.7,247,347,176,347c-70.3,0-115.4-53.3-130.9-112c-1.5,0.2-3.1,0.3-4.6,0.3c-19.6,0-35.5-16.1-35.5-36\r\n\tc0-19.9,15.9-36,35.5-36c19.2,4.3,105.9,10.8,168-32c17.9-12.4,12.5-36.1,12.5-36.1c37.8-3,35.7,74.8,108.9,72.2L329,158\r\n\tc0-73.3-44.3-122.7-98.5-142.8C212.4,8.5,193.2,5,174.2,5C85.4,5,23,64.2,23,156.9V167\"\r\n />\r\n <text transform=\"matrix(1 0 0 1 81.5575 221.1479)\" className=\"st2 st3 st4\">\r\n {errorCode}\r\n </text>\r\n <text transform=\"matrix(1 0 0 1 203.6404 221.2861)\" className=\"st2 st3 st4\">\r\n {errorCode}\r\n </text>\r\n <line className=\"st5\" x1=\"136\" y1=\"294\" x2=\"222\" y2=\"294\" />\r\n </svg>\r\n);\r\n\r\nErrorSvg.propTypes = {\r\n errorCode: PropTypes.string\r\n};\r\n\r\nErrorSvg.propTypesMeta = 'exclude';\r\n\r\nexport default ErrorSvg;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport ErrorSvg from './error-svg';\r\nimport Icon from 'components/icon';\r\n\r\nconst css = require('./error-page.css');\r\n\r\nconst ErrorPage = ({ errorCode, linkUrl, linkText, text, title }) => (\r\n <React.Fragment>\r\n <style>{css}</style>\r\n <div className=\"error-page\">\r\n <h1>{title}</h1>\r\n {text && <p>{text}</p>}\r\n {linkUrl && linkText && (\r\n <a href={linkUrl}>\r\n {linkText}\r\n <Icon name=\"small-arrow-right\" />\r\n </a>\r\n )}\r\n <div className=\"error-page-image\">\r\n <ErrorSvg errorCode={errorCode} />\r\n </div>\r\n </div>\r\n </React.Fragment>\r\n);\r\n\r\nErrorPage.propTypes = {\r\n errorCode: PropTypes.string,\r\n linkUrl: PropTypes.string,\r\n linkText: PropTypes.string,\r\n text: PropTypes.string,\r\n title: PropTypes.string\r\n};\r\n\r\nexport default ErrorPage;\r\n","import isRunningOnClient from '@creuna/utils/is-running-on-client';\r\n\r\nconst GoogleMapsLoader = isRunningOnClient ? require('google-maps') : false;\r\n\r\nexport default function(apiKey) {\r\n return new Promise(resolve => {\r\n GoogleMapsLoader.KEY = apiKey;\r\n GoogleMapsLoader.LIBRARIES = ['geometry', 'places'];\r\n GoogleMapsLoader.load(google => {\r\n resolve(google);\r\n });\r\n });\r\n}\r\n","import googleMapsLoader from 'js/google-maps-loader';\r\nimport getPlaceMatches from './get-place-matches';\r\n\r\nconst removeDuplicates = arr =>\r\n arr.reduce(\r\n (accum, value) => (accum.includes(value) ? accum : accum.concat(value)),\r\n []\r\n );\r\n\r\n// Returns a filter function that takes a search term, a lat and a long\r\nexport default function(APIKey, stores) {\r\n return new Promise(resolve => {\r\n googleMapsLoader(APIKey).then(google => {\r\n const geocoder = new google.maps.Geocoder();\r\n\r\n // Return filter function\r\n resolve((searchTerm, lat, long) => {\r\n return new Promise(resolve => {\r\n if (!searchTerm && !lat && !long) {\r\n return resolve(stores);\r\n }\r\n\r\n const nameMatches = stores.filter(\r\n ({ name }) =>\r\n searchTerm &&\r\n name.toLowerCase().includes(searchTerm.toLowerCase())\r\n );\r\n\r\n const geocoderProps = searchTerm\r\n ? { address: searchTerm, componentRestrictions: { country: 'NO' } }\r\n : { location: new google.maps.LatLng(lat, long) };\r\n\r\n geocoder.geocode(geocoderProps, data => {\r\n const googleMatches = getPlaceMatches(google, stores, data);\r\n\r\n const allMatches = removeDuplicates(\r\n [].concat(nameMatches, googleMatches)\r\n );\r\n\r\n resolve(allMatches);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n}\r\n","import get from 'lodash/get';\r\n\r\nexport default (google, stores, googlePlacesData) => {\r\n // No matches\r\n if (!googlePlacesData || googlePlacesData.length === 0) {\r\n return [];\r\n }\r\n\r\n const result = googlePlacesData[0];\r\n const addressComponents = get(result, 'address_components', []);\r\n const bounds = result.geometry.bounds || result.geometry.viewport;\r\n const location = result.geometry.location;\r\n\r\n if (!isValidResult(addressComponents)) {\r\n return [];\r\n }\r\n\r\n // Attempt to find a store in the bounds provided by google\r\n if (bounds) {\r\n const storesInBounds = stores.filter(store =>\r\n bounds.contains(new google.maps.LatLng(store.lat, store.lng))\r\n );\r\n\r\n if (storesInBounds.length) {\r\n return storesInBounds;\r\n }\r\n }\r\n\r\n // If no match was found within bounds, try to find a match in a larger area around the match\r\n const nearbyStores = stores.filter(\r\n ({ lat, lng }) =>\r\n getDistance(google, new google.maps.LatLng(lat, lng), location) < 5000 // look within 5km\r\n );\r\n\r\n if (nearbyStores.length) {\r\n return nearbyStores;\r\n }\r\n\r\n // If no match was dound within or near bounds, try to find a match to one of the address components\r\n const storesByAddress = filterByAddressComponents(stores, addressComponents);\r\n\r\n if (storesByAddress.length) {\r\n return storesByAddress;\r\n }\r\n\r\n return [];\r\n};\r\n\r\n// Google, being helpful, will always return a match. If no useful match is found, there will be one match, matching the entire country. This function checks whether this has happened in order to detect cases where no match is found\r\nfunction isValidResult(addressComponents) {\r\n return addressComponents.length === 1 &&\r\n addressComponents[0].types.includes('country')\r\n ? false\r\n : true;\r\n}\r\n\r\nfunction getDistance(google, p1, p2) {\r\n return google.maps.geometry.spherical.computeDistanceBetween(p1, p2);\r\n}\r\n\r\nfunction filterByAddressComponents(stores, addressComponents) {\r\n // Convert google maps address_components (array of objects) into an array of strings\r\n const addressMatches = addressComponents\r\n .reduce((accum, component) => accum.concat(component['long_name']), [])\r\n .filter(str => str); // Remove any undefined values\r\n\r\n return stores.filter(({ postPlace, postCode, county }) => {\r\n // Include store in search result if one or more of the address components match postPlace, postCode or county\r\n return addressMatches.some(match =>\r\n [postPlace, postCode, county].includes(match)\r\n );\r\n });\r\n}\r\n","import PropTypes from 'prop-types';\r\n\r\nimport RichText from 'components/rich-text';\r\n\r\n// NOTE: This propType definition is shared between several components, including `find-store.jsx`, `store-list.jsx` and `store-map.jsx` in order to not duplicate a lot of data.\r\nconst Store = {};\r\nStore.propTypes = {\r\n name: PropTypes.string,\r\n lat: PropTypes.number,\r\n lng: PropTypes.number,\r\n address: PropTypes.string,\r\n phone: PropTypes.string,\r\n email: PropTypes.string,\r\n url: PropTypes.string,\r\n postPlace: PropTypes.string,\r\n postCode: PropTypes.string,\r\n county: PropTypes.string,\r\n openingHours: PropTypes.exact(RichText.propTypes)\r\n};\r\n\r\nStore.propTypesMeta = {\r\n lat: 'float',\r\n lng: 'float'\r\n};\r\n\r\nexport default Store;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport debounce from 'lodash/debounce';\r\n\r\nimport getFilter from './filter-stores';\r\nimport getLocation from 'js/get-location';\r\n\r\nimport Search from '../form-elements/search';\r\nimport Store from './store';\r\n\r\nclass FindStore extends React.Component {\r\n static propTypes = {\r\n children: PropTypes.func,\r\n className: PropTypes.string,\r\n geolocationText: PropTypes.string,\r\n googleMapsAPIKey: PropTypes.string,\r\n search: PropTypes.exact(Search.propTypes),\r\n stores: PropTypes.arrayOf(PropTypes.exact(Store.propTypes)),\r\n shouldUseLocation: PropTypes.bool,\r\n textInputTheme: PropTypes.any,\r\n updateOnChange: PropTypes.bool\r\n };\r\n\r\n static propTypesMeta = {\r\n className: 'exclude',\r\n shouldUseLocation: 'exclude',\r\n textInputTheme: 'exclude',\r\n updateOnChange: 'exclude'\r\n };\r\n\r\n static defaultProps = {\r\n search: {},\r\n stores: []\r\n };\r\n\r\n state = {\r\n isLoading: false,\r\n isUsingLocation: false,\r\n searchTerm: '',\r\n stores: this.props.stores,\r\n userLatitude: null,\r\n userLongitude: null\r\n };\r\n\r\n defaultStores = this.props.stores;\r\n\r\n doSubmit = () => {\r\n this.setState({ isLoading: true }, () => {\r\n this.filter(\r\n this.state.searchTerm,\r\n this.state.userLatitude,\r\n this.state.userLongitude\r\n )\r\n .then(stores => {\r\n this.setState({ isLoading: false, stores });\r\n })\r\n .catch(() => {\r\n this.setState({ isLoading: false });\r\n });\r\n });\r\n };\r\n\r\n debouncedSubmit = debounce(this.doSubmit, 500, { leading: true });\r\n\r\n onSearchInput = searchTerm => {\r\n const shouldDoLiveSearch =\r\n this.props.updateOnChange && searchTerm.length >= 2;\r\n\r\n this.setState({ searchTerm });\r\n\r\n // If the input had a value but is now empty, run doSubmit in order to reset the stores list\r\n if (shouldDoLiveSearch) {\r\n this.debouncedSubmit(searchTerm);\r\n }\r\n\r\n if (!searchTerm) {\r\n this.setState({ stores: this.defaultStores });\r\n }\r\n };\r\n\r\n onSearch = e => {\r\n e.preventDefault();\r\n this.setState({ isUsingLocation: false }, () => {\r\n this.doSubmit();\r\n });\r\n };\r\n\r\n componentDidMount() {\r\n getFilter(this.props.googleMapsAPIKey, this.props.stores)\r\n .then(filter => {\r\n this.filter = filter;\r\n })\r\n .then(() => {\r\n if (this.props.shouldUseLocation) {\r\n getLocation().then(({ latitude, longitude }) => {\r\n this.setState(\r\n {\r\n isUsingLocation: true,\r\n userLatitude: latitude,\r\n userLongitude: longitude\r\n },\r\n () => {\r\n this.doSubmit();\r\n }\r\n );\r\n });\r\n }\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n <React.Fragment>\r\n <form className={this.props.className} onSubmit={this.onSearch}>\r\n <Search\r\n useFormsy={false}\r\n onChange={this.onSearchInput}\r\n showSubmitButton={!this.props.updateOnChange}\r\n textInputTheme={this.props.textInputTheme}\r\n {...this.props.search}\r\n />\r\n </form>\r\n\r\n {this.state.isUsingLocation && this.props.geolocationText && (\r\n <h2 className=\"find-store-geolocation-title\">\r\n {this.props.geolocationText}\r\n </h2>\r\n )}\r\n\r\n {this.props.children({\r\n apiKey: this.props.googleMapsAPIKey,\r\n isLoading: this.state.isLoading,\r\n searchTerm: this.state.searchTerm,\r\n stores: this.state.stores\r\n })}\r\n </React.Fragment>\r\n );\r\n }\r\n}\r\n\r\nexport default FindStore;\r\n","export default function() {\r\n return new Promise((resolve, reject) => {\r\n if (navigator.geolocation) {\r\n navigator.geolocation.getCurrentPosition(({ coords }) => resolve(coords));\r\n } else {\r\n reject();\r\n }\r\n });\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport FindStore from '../find-store';\r\nimport Icon from '../icon';\r\nimport Link from '../link';\r\nimport TextInput from '../form-elements/text-input';\r\n\r\nclass FindStoreBlock extends React.Component {\r\n static propTypes = {\r\n backgroundColor: PropTypes.string,\r\n findStore: PropTypes.exact(FindStore.propTypes),\r\n noResultsText: PropTypes.string,\r\n title: PropTypes.string\r\n };\r\n\r\n static defaultProps = {\r\n backgroundColor: '#dfefed'\r\n };\r\n\r\n state = {\r\n resultsVisible: false\r\n };\r\n\r\n onInteract = e => {\r\n if (!this.searchWrapper || !this.searchWrapper.contains) {\r\n return;\r\n }\r\n\r\n this.setState({\r\n resultsVisible: this.searchWrapper.contains(e.target)\r\n });\r\n };\r\n\r\n componentDidMount() {\r\n window.addEventListener('focusin', this.onInteract);\r\n window.addEventListener('click', this.onInteract);\r\n }\r\n\r\n componentWillUnmount() {\r\n window.addEventListener('focusin', this.onInteract);\r\n window.removeEventListener('click', this.onInteract);\r\n }\r\n\r\n render() {\r\n return (\r\n <div\r\n className=\"find-store-block\"\r\n style={{ backgroundColor: this.props.backgroundColor }}\r\n >\r\n <h2>{this.props.title}</h2>\r\n <div\r\n className=\"find-store-block-content\"\r\n ref={div => (this.searchWrapper = div)}\r\n >\r\n <div className=\"find-store-block-icon\">\r\n <Icon name=\"pin\" />\r\n </div>\r\n <FindStore\r\n textInputTheme={[TextInput.themes.white, TextInput.themes.bigText]}\r\n updateOnChange={true}\r\n {...this.props.findStore}\r\n >\r\n {({ isLoading, searchTerm, stores }) =>\r\n this.state.resultsVisible &&\r\n !isLoading &&\r\n searchTerm &&\r\n searchTerm.length >= 2 ? (\r\n <ul className=\"find-store-block-results\">\r\n {stores.length > 0 ? (\r\n stores.map(store => (\r\n <li key={store.name + store.email}>\r\n <Link text={store.name} url={store.url} />\r\n </li>\r\n ))\r\n ) : (\r\n <li>{this.props.noResultsText}</li>\r\n )}\r\n </ul>\r\n ) : null\r\n }\r\n </FindStore>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default FindStoreBlock;\r\n","import React from 'react';\r\n\r\nimport Link from 'components/link';\r\nimport RichText from 'components/rich-text';\r\nimport Store from 'components/find-store/store';\r\n\r\n// NOTE: This component inherits propTypes from 'components/find-store/store.jsx'.\r\n/* eslint-disable react/prop-types */\r\nconst MapPopup = ({\r\n name,\r\n address,\r\n phone,\r\n email,\r\n url,\r\n openingHours,\r\n postPlace,\r\n postCode\r\n}) => (\r\n <div className=\"store-map-popup\">\r\n <Link className=\"store-map-popup-name\" text={name} url={url} />\r\n <p>{address}</p>\r\n <p>{`${postCode} ${postPlace}`}</p>\r\n\r\n <RichText\r\n className=\"store-map-popup-hours\"\r\n theme={RichText.themes.centered}\r\n {...openingHours}\r\n />\r\n\r\n <div className=\"store-map-popup-contact\">\r\n <Link text={phone} url={`tel:${phone}`} />\r\n <Link text={email} url={`mailto:${email}`} />\r\n </div>\r\n </div>\r\n);\r\n\r\nMapPopup.propTypes = Store.propTypes;\r\n\r\nexport default MapPopup;\r\n","import React from 'react';\r\nimport ReactDOMServer from 'react-dom/server';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport googleMapsLoader from 'js/google-maps-loader';\r\n\r\nimport MapPopup from './map-popup';\r\nimport Store from 'components/find-store/store';\r\n\r\nclass StoreMap extends React.Component {\r\n static propTypes = {\r\n googleMapsAPIKey: PropTypes.string,\r\n mapMarker: PropTypes.string,\r\n stores: PropTypes.arrayOf(PropTypes.exact(Store.propTypes))\r\n };\r\n\r\n // NOTE: All props are provided by FindStorePage\r\n static propTypesMeta = 'exclude';\r\n\r\n state = {};\r\n\r\n google = null;\r\n map = null;\r\n\r\n getBounds = stores => {\r\n const google = this.google;\r\n const bounds = new google.maps.LatLngBounds();\r\n\r\n //loop through all markers and create bounds\r\n if (stores && stores.length) {\r\n stores.forEach(store => {\r\n bounds.extend(new google.maps.LatLng(store.lat, store.lng));\r\n });\r\n }\r\n\r\n return bounds;\r\n };\r\n\r\n fitMapToStores = stores => {\r\n const bounds = this.getBounds(stores);\r\n // only 1 marker?\r\n if (stores.length === 1) {\r\n this.map.setCenter(bounds.getCenter());\r\n this.map.setZoom(16);\r\n } else {\r\n // fit to bounds\r\n this.map.fitBounds(bounds);\r\n }\r\n };\r\n\r\n componentDidMount() {\r\n googleMapsLoader(this.props.googleMapsAPIKey).then(google => {\r\n this.google = google;\r\n this.map = new google.maps.Map(this.wrapper);\r\n\r\n this.fitMapToStores(this.props.stores);\r\n\r\n const popupsAndMarkers = this.props.stores.map(store => {\r\n return {\r\n popup: new google.maps.InfoWindow({\r\n content: ReactDOMServer.renderToString(<MapPopup {...store} />)\r\n }),\r\n marker: new google.maps.Marker({\r\n position: { lat: store.lat, lng: store.lng },\r\n icon: this.props.mapMarker,\r\n title: store.name,\r\n map: this.map\r\n })\r\n };\r\n });\r\n\r\n popupsAndMarkers.forEach(({ popup, marker }) => {\r\n marker.addListener('click', () => {\r\n popupsAndMarkers.forEach(({ popup }) => popup.close());\r\n popup.open(this.map, marker);\r\n });\r\n });\r\n });\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.stores !== this.props.stores) {\r\n this.fitMapToStores(this.props.stores);\r\n }\r\n }\r\n\r\n render() {\r\n return <div className=\"store-map\" ref={div => (this.wrapper = div)} />;\r\n }\r\n}\r\n\r\nexport default StoreMap;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Icon from '../icon';\r\nimport Link from '../link';\r\nimport RichText from 'components/rich-text';\r\nimport Store from 'components/find-store/store';\r\n\r\nconst StoresList = ({ storeLabels, stores }) => {\r\n const { name, address, hours, phone, email } = storeLabels;\r\n\r\n return (\r\n <table className=\"stores-list\">\r\n <thead>\r\n <tr key=\"header\">\r\n <th>{name}</th>\r\n <th>{address}</th>\r\n <th>{hours}</th>\r\n <th>{phone}</th>\r\n <th>{email}</th>\r\n <th />\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {stores.map(store => (\r\n <tr key={store.name + store.email}>\r\n <td className=\"stores-list-name\">\r\n <Link text={store.name} url={store.url} />\r\n </td>\r\n <td className=\"stores-list-address\">{store.address}</td>\r\n <RichText\r\n element=\"td\"\r\n className=\"stores-list-hours\"\r\n theme={RichText.themes.centered}\r\n {...store.openingHours}\r\n />\r\n <td className=\"stores-list-phone\">\r\n <Link text={store.phone} url={`tel:${store.phone}`} />\r\n </td>\r\n <td className=\"stores-list-email\">\r\n <Link text={store.email} url={`mailto:${store.email}`} />\r\n </td>\r\n <td>\r\n <Link className=\"stores-list-icon\" url={store.url}>\r\n <Icon name=\"pin\" />\r\n </Link>\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n );\r\n};\r\n\r\nStoresList.propTypes = {\r\n storeLabels: PropTypes.shape({\r\n name: PropTypes.string,\r\n address: PropTypes.string,\r\n hours: PropTypes.string,\r\n phone: PropTypes.string,\r\n email: PropTypes.string\r\n }),\r\n stores: PropTypes.arrayOf(PropTypes.exact(Store.propTypes))\r\n};\r\n\r\nStoresList.propTypesMeta = {\r\n stores: 'exclude' // NOTE: stores are provided by FindStorePage\r\n};\r\n\r\nStoresList.defaultProps = {\r\n stores: [],\r\n storeLabels: {}\r\n};\r\n\r\nexport default StoresList;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport ContentContainer from '../content-container';\r\nimport FindStore from '../find-store';\r\nimport StoreMap from '../store-map';\r\nimport PageSpinner from '../page-spinner';\r\nimport StoresList from './stores-list';\r\n\r\nconst FindStorePage = ({\r\n findStore,\r\n title,\r\n ingress,\r\n list,\r\n mapMarker,\r\n noResultsText\r\n}) => {\r\n return (\r\n <ContentContainer className=\"find-store-page\">\r\n <h1>{title}</h1>\r\n <p className=\"find-store-page-ingress\">{ingress}</p>\r\n\r\n <FindStore\r\n className=\"find-store-page-search\"\r\n shouldUseLocation={true}\r\n {...findStore}\r\n >\r\n {({ apiKey, isLoading, stores }) => (\r\n <React.Fragment>\r\n <PageSpinner isLoading={isLoading} />\r\n\r\n {stores.length > 0 ? (\r\n <React.Fragment>\r\n <div className=\"find-store-page-stores\">\r\n <StoresList stores={stores} {...list} />\r\n </div>\r\n\r\n <div className=\"find-store-page-map\">\r\n <StoreMap\r\n googleMapsAPIKey={apiKey}\r\n mapMarker={mapMarker}\r\n stores={stores}\r\n />\r\n </div>\r\n </React.Fragment>\r\n ) : (\r\n <div className=\"find-store-page-no-results\">{noResultsText}</div>\r\n )}\r\n </React.Fragment>\r\n )}\r\n </FindStore>\r\n </ContentContainer>\r\n );\r\n};\r\n\r\nFindStorePage.propTypes = {\r\n findStore: PropTypes.exact(FindStore.propTypes),\r\n title: PropTypes.string,\r\n ingress: PropTypes.string,\r\n list: PropTypes.exact(StoresList.propTypes),\r\n mapMarker: PropTypes.string,\r\n noResultsText: PropTypes.string\r\n};\r\n\r\nFindStorePage.defaultProps = {\r\n noResultsText: 'Vi fant dessverre ingen butikker.'\r\n};\r\n\r\nexport default FindStorePage;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Image from '../image';\r\n\r\nconst FooterImageList = ({ title, images }) => (\r\n <div className=\"footer-image-list\">\r\n <p>{title}</p>\r\n <ul>\r\n {images.map(image => (\r\n <li key={image.src}>\r\n <Image\r\n className=\"footer-image-list-image\"\r\n responsive={false}\r\n {...image}\r\n />\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n);\r\n\r\nFooterImageList.propTypes = {\r\n title: PropTypes.string,\r\n images: PropTypes.arrayOf(PropTypes.exact(Image.propTypes))\r\n};\r\n\r\nFooterImageList.defaultProps = {\r\n images: []\r\n};\r\n\r\nexport default FooterImageList;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Icon from '../icon';\r\nimport Link from '../link';\r\n\r\nconst linkThemes = [\r\n Link.themes.big,\r\n Link.themes.bold,\r\n Link.themes.default,\r\n Link.themes.skew,\r\n Link.themes.white\r\n];\r\n\r\nconst FooterLinkList = ({ id, links }) => (\r\n <div className=\"footer-link-list\" key={id}>\r\n <ul>\r\n {links.map(link => (\r\n <li key={link.text}>\r\n <Link prependChildren={true} theme={linkThemes} {...link}>\r\n <Icon className=\"footer-link-list-icon\" name=\"small-arrow-right\" />\r\n </Link>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n);\r\n\r\nFooterLinkList.defaultProps = {\r\n linkList: []\r\n};\r\n\r\nFooterLinkList.propTypes = {\r\n id: PropTypes.string,\r\n links: PropTypes.arrayOf(PropTypes.exact(Link.propTypes))\r\n};\r\n\r\nexport default FooterLinkList;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Button from 'components/button';\r\nimport Form from 'components/form';\r\nimport TextInput from '../form-elements/text-input';\r\nimport Link from 'components/link';\r\nimport Icon from '../icon';\r\nimport cn from 'classnames';\r\n\r\nconst NewsletterForm = ({\r\n endpoint,\r\n submitLabel,\r\n input,\r\n termsLink,\r\n className\r\n}) => (\r\n <div className={cn('newsletter-form', className)}>\r\n <Form endpoint={endpoint} showSubmitButton={false}>\r\n <div className=\"newsletter-form__body\">\r\n <TextInput\r\n className=\"newsletter-form__input\"\r\n type=\"email\"\r\n autocomplete=\"email\"\r\n theme={[TextInput.themes.hiddenLabel, TextInput.themes.noValidation]}\r\n {...input}\r\n />\r\n <div className=\"newsletter-form__button-container\">\r\n <Button\r\n type=\"submit\"\r\n className=\"newsletter-form__button\"\r\n theme={[Button.themes.orange, Button.themes.uppercase]}\r\n >\r\n <Icon name=\"mail\" />\r\n <span>{submitLabel}</span>\r\n </Button>\r\n </div>\r\n </div>\r\n </Form>\r\n\r\n {termsLink && (\r\n <div className=\"newsletter-form__terms-link-container\">\r\n <Link\r\n className=\"newsletter-form__terms-link\"\r\n theme={[Link.themes.mini, Link.themes.white]}\r\n {...termsLink}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n);\r\n\r\nNewsletterForm.propTypes = {\r\n input: PropTypes.exact(TextInput.propTypes),\r\n endpoint: PropTypes.string,\r\n submitLabel: PropTypes.string,\r\n termsLink: PropTypes.exact(Link.propTypes),\r\n className: PropTypes.string\r\n};\r\n\r\nNewsletterForm.propTypesMeta = {\r\n className: 'exclude'\r\n};\r\n\r\nexport default NewsletterForm;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Button from '../button';\r\nimport Icon from '../icon';\r\n\r\nconst FooterSocialMedia = ({ title, links }) => (\r\n <div className=\"footer-social-media-wrapper\">\r\n <p>{title}</p>\r\n <ul>\r\n {links.map(link => (\r\n <li key={link.provider}>\r\n <Button className=\"footer-social-media-button\" url={link.url}>\r\n <Icon name={link.provider} />\r\n </Button>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n);\r\n\r\nFooterSocialMedia.defaultProps = {\r\n links: []\r\n};\r\n\r\nFooterSocialMedia.propTypes = {\r\n title: PropTypes.string,\r\n links: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n url: PropTypes.string,\r\n provider: PropTypes.oneOf(['facebook', 'instagram', 'linkedin'])\r\n .isRequired\r\n })\r\n )\r\n};\r\n\r\nexport default FooterSocialMedia;\r\n","/* eslint-disable react/no-multi-comp */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Button from '../button';\r\nimport ContentContainer from '../content-container';\r\nimport FooterImageList from './footer-image-list';\r\nimport FooterLinkList from './footer-link-list';\r\nimport NewsletterForm from 'components/newsletter-form';\r\nimport FooterSocialMedia from './footer-social-media';\r\nimport Image from '../image';\r\nimport Link from '../link';\r\nimport RichText from '../rich-text';\r\n\r\nconst Row = ({ children }) => <div className=\"footer-row\">{children}</div>;\r\nRow.propTypes = { children: PropTypes.node };\r\n\r\nconst Column = ({ children }) => (\r\n <div className=\"footer-column\">{children}</div>\r\n);\r\nColumn.propTypes = { children: PropTypes.node };\r\n\r\nconst Footer = ({\r\n imageLists,\r\n linkLists,\r\n mainLinks,\r\n newsLetterForm,\r\n newsLetterTermsLink,\r\n richText,\r\n secondaryLinks,\r\n socialMedia\r\n}) => (\r\n <footer className=\"footer\">\r\n <div className=\"footer-section\">\r\n <ContentContainer className=\"footer-content\">\r\n <Row>\r\n {mainLinks.map(({ link, image }) => (\r\n <Column key={link.url}>\r\n <div className=\"footer-image-link\">\r\n <Image {...image} />\r\n <Link\r\n theme={[\r\n Link.themes.huge,\r\n Link.themes.bold,\r\n Link.themes.skewUnderline,\r\n Link.themes.white\r\n ]}\r\n {...link}\r\n />\r\n </div>\r\n </Column>\r\n ))}\r\n </Row>\r\n\r\n <Row>\r\n {linkLists.map(linkList => (\r\n <Column key={linkList.id}>\r\n <FooterLinkList {...linkList} />\r\n </Column>\r\n ))}\r\n </Row>\r\n\r\n <Row>\r\n {secondaryLinks.map(link => (\r\n <Column key={link.text + link.url}>\r\n <Button\r\n className=\"footer-button\"\r\n theme={Button.themes.white}\r\n {...link}\r\n />\r\n </Column>\r\n ))}\r\n\r\n <Column>\r\n <NewsletterForm {...newsLetterForm} />\r\n </Column>\r\n </Row>\r\n </ContentContainer>\r\n </div>\r\n\r\n <div className=\"footer-section\">\r\n <ContentContainer className=\"footer-content\">\r\n <Row>\r\n {imageLists.map(list => (\r\n <Column key={list.title}>\r\n <FooterImageList {...list} />\r\n </Column>\r\n ))}\r\n <Column>\r\n <FooterSocialMedia {...socialMedia} />\r\n </Column>\r\n </Row>\r\n\r\n <Row>\r\n <RichText\r\n className=\"footer-rich-text\"\r\n theme={RichText.themes.centered}\r\n {...richText}\r\n />\r\n </Row>\r\n </ContentContainer>\r\n </div>\r\n </footer>\r\n);\r\n\r\nFooter.propTypes = {\r\n imageLists: PropTypes.arrayOf(PropTypes.exact(FooterImageList.propTypes)),\r\n linkLists: PropTypes.arrayOf(PropTypes.exact(FooterLinkList.propTypes)),\r\n mainLinks: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n image: PropTypes.exact(Image.propTypes),\r\n link: PropTypes.exact(Link.propTypes)\r\n })\r\n ),\r\n newsLetterForm: PropTypes.exact(NewsletterForm.propTypes),\r\n newsLetterTermsLink: PropTypes.exact(Link.propTypes),\r\n richText: PropTypes.exact(RichText.propTypes),\r\n secondaryLinks: PropTypes.arrayOf(PropTypes.exact(Button.propTypes)),\r\n socialMedia: PropTypes.exact(FooterSocialMedia.propTypes)\r\n};\r\n\r\nFooter.defaultProps = {\r\n imageLists: [],\r\n linkLists: [],\r\n mainLinks: [],\r\n secondaryLinks: []\r\n};\r\n\r\nexport default Footer;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Grid from '../grid';\r\nimport TextInput from '../form-elements/text-input';\r\nimport MyPageForm from '../my-page-form';\r\nimport MyPageLayout from 'components/my-page-layout';\r\nimport MyPageSection from 'components/my-page-section';\r\nimport ValidationErrorTexts from 'components/validation-error-texts';\r\n\r\nconst ForgotPasswordPage = ({\r\n form,\r\n email,\r\n layout,\r\n section,\r\n validationErrors\r\n}) => {\r\n return (\r\n <MyPageLayout {...layout}>\r\n <Grid theme={Grid.themes.leftColumnWider}>\r\n <Grid.Column>\r\n <MyPageSection headingLevel={1} {...section}>\r\n <MyPageForm {...form}>\r\n <TextInput\r\n validations=\"isRequired,isEmail\"\r\n isRequired={true}\r\n validationErrors={validationErrors}\r\n {...email}\r\n />\r\n </MyPageForm>\r\n </MyPageSection>\r\n </Grid.Column>\r\n </Grid>\r\n </MyPageLayout>\r\n );\r\n};\r\n\r\nForgotPasswordPage.propTypes = {\r\n form: PropTypes.exact(MyPageForm.propTypes),\r\n email: PropTypes.exact(TextInput.propTypes),\r\n layout: PropTypes.exact(MyPageLayout.propTypes),\r\n section: PropTypes.exact(MyPageSection.propTypes),\r\n validationErrors: PropTypes.exact(ValidationErrorTexts.propTypes)\r\n};\r\n\r\nexport default ForgotPasswordPage;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport ContentContainer from 'components/content-container';\r\nimport ComponentList from 'components/component-list';\r\n\r\nconst Frontpage = ({ blocks }) => {\r\n return (\r\n <ContentContainer>\r\n <ComponentList {...blocks} />\r\n </ContentContainer>\r\n );\r\n};\r\n\r\nFrontpage.propTypes = {\r\n blocks: PropTypes.exact(ComponentList.propTypes)\r\n};\r\n\r\nexport default Frontpage;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport PubSub from 'pubsub-js';\r\n\r\nimport api from 'js/api-helper';\r\nimport checkApiPropTypes from 'js/check-api-prop-types';\r\nimport topics from 'js/topics.json';\r\n\r\nimport AddToCartButton from '../add-to-cart-button';\r\nimport AddToCartResponse from 'components/contact-lens-page/add-to-cart-response';\r\nimport Form from 'components/form';\r\nimport PageSpinner from 'components/page-spinner';\r\nimport Select from 'components/form-elements/select';\r\nimport ValidationErrorTexts from 'components/validation-error-texts';\r\nimport cn from 'classnames';\r\n\r\nclass GlassesForm extends React.Component {\r\n static propTypes = {\r\n updateSizeEndpoint: PropTypes.string,\r\n addToCartEndpoint: PropTypes.string,\r\n onBeforeUpdateSize: PropTypes.func,\r\n onRef: PropTypes.func,\r\n sizeSelect: PropTypes.exact(Select.propTypes),\r\n submitLabel: PropTypes.string,\r\n updateSize: PropTypes.func,\r\n validationErrors: PropTypes.exact(ValidationErrorTexts.propTypes)\r\n };\r\n\r\n static defaultProps = {\r\n onRef: () => {}\r\n };\r\n\r\n state = {\r\n isLoading: false\r\n };\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps !== this.props) {\r\n this.setState({ isLoading: false });\r\n }\r\n }\r\n\r\n onBeforeAddToCart = () => {\r\n this.setState({ isLoading: true });\r\n };\r\n\r\n onAddToCartResponse = response => {\r\n PubSub.publish(topics.cartUpdate, response);\r\n checkApiPropTypes(\r\n response,\r\n AddToCartResponse.propTypes,\r\n 'AddToCartResponse'\r\n );\r\n this.setState({ isLoading: false });\r\n };\r\n\r\n onChange = value => {\r\n if (this.props.updateSizeEndpoint) {\r\n this.props.onBeforeUpdateSize();\r\n\r\n api.execute(this.props.updateSizeEndpoint, value).then(response => {\r\n this.props.updateSize(response);\r\n });\r\n }\r\n };\r\n\r\n render() {\r\n const { sizeSelect } = this.props;\r\n\r\n return !sizeSelect ? null : (\r\n <Form\r\n className=\"glasses-form\"\r\n endpoint={this.props.addToCartEndpoint}\r\n onBeforeSubmit={this.onBeforeAddToCart}\r\n onChange={this.onChange}\r\n onRef={this.props.onRef}\r\n onResponse={this.onAddToCartResponse}\r\n showSubmitButton={false}\r\n >\r\n {sizeSelect && sizeSelect.options && sizeSelect.options.length > 0 && (\r\n <div\r\n className={cn('glasses-form-select', {\r\n 'is-hidden': sizeSelect.options.length === 1\r\n })}\r\n >\r\n <Select\r\n onChange={this.onChange}\r\n validationErrors={this.props.validationErrors}\r\n validations=\"isRequired\"\r\n {...sizeSelect}\r\n />\r\n </div>\r\n )}\r\n\r\n <PageSpinner\r\n shouldContainInParent={true}\r\n isLoading={this.state.isLoading}\r\n />\r\n <AddToCartButton text={this.props.submitLabel} />\r\n </Form>\r\n );\r\n }\r\n}\r\n\r\nexport default GlassesForm;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport debounce from 'lodash/debounce';\r\n\r\nimport breakpoints from '../../js/breakpoints';\r\n\r\nimport Carousel from '../carousel';\r\nimport Image from '../image';\r\nimport Link from '../link';\r\n\r\nclass ProductColors extends React.Component {\r\n static defaultProps = {\r\n colors: []\r\n };\r\n\r\n static propTypes = {\r\n title: PropTypes.string,\r\n numberOfSlidesToShow: PropTypes.number,\r\n colors: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n image: PropTypes.exact(Image.propTypes),\r\n link: PropTypes.exact(Link.propTypes)\r\n })\r\n )\r\n };\r\n\r\n static propTypesMeta = {\r\n numberOfSlidesToShow: 'exclude'\r\n };\r\n\r\n state = {\r\n numberOfSlidesToShow: 3\r\n };\r\n\r\n componentDidMount() {\r\n this.onResize();\r\n window.addEventListener('resize', this.debouncedResize);\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('resize', this.debouncedResize);\r\n }\r\n\r\n onResize = () => {\r\n let numberOfSlidesToShow = this.state.numberOfSlidesToShow;\r\n\r\n if (breakpoints.smMax()) {\r\n numberOfSlidesToShow = 2;\r\n } else if (breakpoints.mdMax()) {\r\n numberOfSlidesToShow = 3;\r\n } else if (breakpoints.lgMax()) {\r\n numberOfSlidesToShow = 2;\r\n } else {\r\n numberOfSlidesToShow = 3;\r\n }\r\n\r\n this.setState({\r\n numberOfSlidesToShow\r\n });\r\n };\r\n\r\n debouncedResize = debounce(this.onResize, 400);\r\n\r\n render() {\r\n const { title, colors } = this.props;\r\n\r\n return colors.length === 0 ? null : (\r\n <div className=\"glasses-color-slideshow\">\r\n <h2>{title}</h2>\r\n {colors.length > 0 && (\r\n <Carousel\r\n numberOfSlidesToShow={this.state.numberOfSlidesToShow}\r\n theme={[Carousel.themes.small, Carousel.themes.green]}\r\n shouldShowDots={false}\r\n >\r\n {colors.map(({ link, image } = {}) => (\r\n <Link\r\n className=\"glasses-color\"\r\n url={link.url}\r\n key={image.src}\r\n theme={Link.themes.noStyle}\r\n >\r\n <Image {...image} />\r\n <span className=\"glasses-color-label\">{link.text}</span>\r\n </Link>\r\n ))}\r\n </Carousel>\r\n )}\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default ProductColors;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Availability from '../availability';\r\nimport Bomb from 'components/bomb';\r\nimport Button from '../button';\r\nimport GlassesForm from './glasses-form';\r\nimport Grid from '../grid';\r\nimport Price from '../price';\r\nimport ProductColors from './product-colors';\r\nimport ProductImages from '../product-images';\r\nimport ProductLogo from '../product-logo';\r\nimport ProductSellingPoints from '../product-selling-points';\r\nimport SellingPoints from '../selling-points';\r\nimport ProductVariantText from 'components/product-variant-text';\r\n\r\nconst GlassesHeader = ({\r\n availability,\r\n bomb,\r\n onBeforeUpdateSize,\r\n price,\r\n productColors,\r\n productImages,\r\n productLogo,\r\n productModel,\r\n productName,\r\n productSellingPoints,\r\n purchaseForm,\r\n purchaseInformation,\r\n sellingPoints,\r\n updateSize,\r\n productVariantText\r\n}) => {\r\n return (\r\n <Grid className=\"glasses-header\" theme={Grid.themes.leftColumnWider}>\r\n <Grid.Column>\r\n <div className=\"glasses-title glasses-title-mobile\">\r\n <h1>{productName}</h1>\r\n <p>{productModel}</p>\r\n </div>\r\n\r\n <div className=\"glasses-logo\">\r\n <ProductLogo {...productLogo} />\r\n </div>\r\n\r\n <div className=\"glasses-image\">\r\n {bomb && <Bomb text={bomb} />}\r\n <ProductImages {...productImages} />\r\n </div>\r\n </Grid.Column>\r\n\r\n <Grid.Column>\r\n <div className=\"glasses-title glasses-title-desktop\">\r\n <h1>{productName}</h1>\r\n <p>{productModel}</p>\r\n </div>\r\n\r\n <div className=\"glasses-price\">\r\n <Price\r\n theme={[Price.themes.alignLeft, Price.themes.bigFont]}\r\n {...price}\r\n />\r\n {availability && <Availability {...availability} />}\r\n </div>\r\n\r\n {purchaseForm && (\r\n <GlassesForm\r\n onBeforeUpdateSize={onBeforeUpdateSize}\r\n updateSize={updateSize}\r\n {...purchaseForm}\r\n />\r\n )}\r\n\r\n {purchaseInformation && (\r\n <div className=\"glasses-purchase-information\">\r\n <p>{purchaseInformation.text}</p>\r\n <Button {...purchaseInformation.link} />\r\n </div>\r\n )}\r\n {productVariantText && (\r\n <ProductVariantText textHtml={productVariantText} />\r\n )}\r\n {productSellingPoints && (\r\n <div className=\"glasses-selling-points\">\r\n <ProductSellingPoints {...productSellingPoints} />\r\n </div>\r\n )}\r\n <SellingPoints {...sellingPoints} />\r\n {productColors && <ProductColors {...productColors} />}\r\n </Grid.Column>\r\n </Grid>\r\n );\r\n};\r\n\r\nGlassesHeader.propTypes = {\r\n availability: PropTypes.exact(Availability.propTypes),\r\n bomb: PropTypes.string,\r\n onBeforeUpdateSize: PropTypes.func,\r\n price: PropTypes.exact(Price.propTypes),\r\n productColors: PropTypes.exact(ProductColors.propTypes),\r\n productImages: PropTypes.exact(ProductImages.propTypes),\r\n productLogo: PropTypes.exact(ProductLogo.propTypes),\r\n productModel: PropTypes.string,\r\n productName: PropTypes.string,\r\n productSellingPoints: PropTypes.exact(ProductSellingPoints.propTypes),\r\n purchaseForm: PropTypes.exact(GlassesForm.propTypes),\r\n purchaseInformation: PropTypes.exact({\r\n text: PropTypes.string,\r\n link: PropTypes.exact(Button.propTypes)\r\n }),\r\n sellingPoints: PropTypes.exact(SellingPoints.propTypes),\r\n updateFormEndpoint: PropTypes.string,\r\n updateSize: PropTypes.func,\r\n productVariantText: PropTypes.string\r\n};\r\n\r\nGlassesHeader.defaultProps = {\r\n productSellingPoints: []\r\n};\r\n\r\nGlassesHeader.propTypesMeta = {\r\n productVariantText: 'exclude'\r\n};\r\n\r\nexport default GlassesHeader;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Image from '../image';\r\n\r\nconst GlassesMeasurement = ({ items }) => (\r\n <div className=\"glasses-measurement-wrapper\">\r\n {items.map(({ image, altText, measures = [] } = {}) => (\r\n <div key={image} className=\"glasses-measurement\">\r\n <Image responsive={false} alt={altText} src={image} />\r\n <div className=\"glasses-measurement-text-wrapper\">\r\n {measures.map(({ label, value } = {}) => (\r\n <div className=\"glasses-measurement-text\" key={label}>\r\n <span>{label}</span>\r\n <span>{value}</span>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n);\r\n\r\nGlassesMeasurement.defaultProps = {\r\n items: []\r\n};\r\n\r\nGlassesMeasurement.propTypes = {\r\n items: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n image: PropTypes.string,\r\n altText: PropTypes.string,\r\n measures: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n label: PropTypes.string,\r\n value: PropTypes.string\r\n })\r\n )\r\n })\r\n )\r\n};\r\n\r\nexport default GlassesMeasurement;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport Icon from '../icon';\r\n\r\nconst LensVisualisationSlider = ({ x, isDragging }) => (\r\n <div\r\n className=\"lens-visualisation-slider-wrapper\"\r\n style={{ transform: `translateX(${x}px)` }}\r\n >\r\n <div\r\n className={cn('lens-visualisation-slider', {\r\n 'slider-wrapper-hovered': isDragging\r\n })}\r\n >\r\n <div className=\"slider-see-through-filter\" />\r\n <span className=\"slider-line-top\" />\r\n <div className=\"slider-arrow-group\">\r\n <Icon className=\"slider-arrow-left\" name=\"big-arrow-right\" />\r\n <div className=\"slider-square\">\r\n <Icon name=\"slider\" />\r\n </div>\r\n <Icon className=\"slider-arrow-right\" name=\"big-arrow-right\" />\r\n </div>\r\n <span className=\"slider-line-bottom\" />\r\n </div>\r\n </div>\r\n);\r\n\r\nLensVisualisationSlider.propTypes = {\r\n x: PropTypes.number,\r\n isDragging: PropTypes.bool\r\n};\r\n\r\nLensVisualisationSlider.propTypesMeta = 'exclude';\r\n\r\nexport default LensVisualisationSlider;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Motion, spring } from 'react-motion';\r\n\r\nimport Image from '../image';\r\nimport LensVisualisationSlider from './lens-visualisation-slider';\r\n\r\nconst colorNames = {\r\n 'Grey/Black': 'lens-visualisation-overlay-gray-black',\r\n Brown: 'lens-visualisation-overlay-brown',\r\n Green: 'lens-visualisation-overlay-green'\r\n};\r\n\r\nclass LensVisualisation extends React.Component {\r\n static propTypes = {\r\n image: PropTypes.exact(Image.propTypes),\r\n lensColor: PropTypes.oneOf(Object.keys(colorNames)),\r\n text: PropTypes.string,\r\n isOverlayEnabled: PropTypes.bool\r\n };\r\n\r\n state = {\r\n posX: 0\r\n };\r\n\r\n isDragging = false;\r\n sliderIsMoving = false;\r\n xStart = null;\r\n\r\n componentDidMount() {\r\n if (this.visualisationWrapper) {\r\n this.visualisationWrapper.addEventListener('mousemove', this.onMouseMove);\r\n this.visualisationWrapper.addEventListener('mouseup', this.onMouseUp);\r\n this.visualisationWrapper.addEventListener('mousedown', this.onMouseDown);\r\n this.visualisationWrapper.addEventListener(\r\n 'touchstart',\r\n this.onTouchStart\r\n );\r\n this.visualisationWrapper.addEventListener('touchmove', this.onTouchMove);\r\n this.visualisationWrapper.addEventListener('touchend', this.onTouchEnd);\r\n this.visualisationWrapper.addEventListener(\r\n 'touchcancel',\r\n this.onTouchEnd\r\n );\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.visualisationWrapper) {\r\n this.visualisationWrapper.removeEventListener(\r\n 'mousemove',\r\n this.onMouseMove\r\n );\r\n this.visualisationWrapper.removeEventListener('mouseup', this.onMouseUp);\r\n this.visualisationWrapper.removeEventListener(\r\n 'mousedown',\r\n this.onMouseDown\r\n );\r\n this.visualisationWrapper.removeEventListener(\r\n 'touchstart',\r\n this.onTouchStart\r\n );\r\n this.visualisationWrapper.removeEventListener(\r\n 'touchmove',\r\n this.onTouchMove\r\n );\r\n this.visualisationWrapper.removeEventListener(\r\n 'touchend',\r\n this.onTouchEnd\r\n );\r\n this.visualisationWrapper.removeEventListener(\r\n 'touchcancel',\r\n this.onTouchEnd\r\n );\r\n }\r\n }\r\n\r\n onMouseDown = () => {\r\n this.isDragging = true;\r\n };\r\n\r\n onMouseUp = () => {\r\n this.isDragging = false;\r\n };\r\n\r\n slider = event => {\r\n const x =\r\n event.pageX -\r\n this.visualisationWrapper.getBoundingClientRect().left -\r\n this.visualisationWrapper.offsetWidth / 2;\r\n\r\n this.setState({\r\n posX: x\r\n });\r\n };\r\n\r\n onTouchStart = event => {\r\n this.xStart = event.touches[0].clientX;\r\n };\r\n\r\n onTouchEnd = () => {\r\n this.sliderIsMoving = false;\r\n };\r\n\r\n onTouchMove = event => {\r\n if (!this.xStart) {\r\n return;\r\n }\r\n\r\n const xMove = event.touches[0].clientX;\r\n\r\n const xDiff = this.xStart - xMove;\r\n\r\n if (Math.abs(xDiff) > 20 || this.sliderIsMoving) {\r\n event.preventDefault();\r\n this.slider(event.touches[0]);\r\n this.sliderIsMoving = true;\r\n }\r\n };\r\n\r\n onMouseMove = event => {\r\n if (this.isDragging) {\r\n this.slider(event);\r\n }\r\n };\r\n\r\n render() {\r\n const { image, lensColor, text, isOverlayEnabled } = this.props;\r\n\r\n return (\r\n <div className=\"lens-visualisation-wrapper\">\r\n {isOverlayEnabled && colorNames[lensColor] ? (\r\n <div>\r\n <Motion style={{ x: spring(this.state.posX) }}>\r\n {({ x }) => {\r\n return (\r\n <div\r\n className=\"lens-visualisation\"\r\n ref={visualisationWrapper => {\r\n this.visualisationWrapper = visualisationWrapper;\r\n }}\r\n >\r\n <div\r\n className={\r\n 'lens-visualisation-overlay ' + colorNames[lensColor]\r\n }\r\n style={{ transform: `translateX(${x}px)` }}\r\n />\r\n <Image src={image.src} alt={image.alt} draggable={false} />\r\n <LensVisualisationSlider\r\n x={x}\r\n isDragging={this.isDragging}\r\n />\r\n </div>\r\n );\r\n }}\r\n </Motion>\r\n <p>{text}</p>\r\n </div>\r\n ) : (\r\n <div className=\"lens-visualisation\">\r\n <Image src={image.src} alt={image.alt} draggable={false} />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default LensVisualisation;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Button from '../button';\r\nimport RichText from '../rich-text';\r\n\r\nconst Metadata = ({ title, descriptionList, text, button }) => (\r\n <div className=\"metadata\">\r\n <h2>{title}</h2>\r\n <dl className=\"metadata-description-list\">\r\n {descriptionList.map(description => (\r\n <React.Fragment key={description.tag}>\r\n <dt>{description.tag}</dt>\r\n <dd>{description.description}</dd>\r\n </React.Fragment>\r\n ))}\r\n </dl>\r\n <RichText theme={RichText.themes.centered} text={text} />\r\n {button && (\r\n <div className=\"metadata-button-wrapper\">\r\n <Button className=\"metadata-button\" {...button} />\r\n </div>\r\n )}\r\n </div>\r\n);\r\n\r\nMetadata.defaultProps = {\r\n descriptionList: []\r\n};\r\n\r\nMetadata.propTypes = {\r\n title: PropTypes.string,\r\n descriptionList: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n tag: PropTypes.string,\r\n description: PropTypes.string\r\n })\r\n ),\r\n text: PropTypes.string,\r\n button: PropTypes.exact(Button.propTypes)\r\n};\r\n\r\nexport default Metadata;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Grid from '../grid';\r\nimport ContentContainer from '../content-container';\r\nimport GlassesHeader from './glasses-header';\r\nimport GlassesMeasurement from './glasses-measurement';\r\nimport LensVisualisation from '../lens-visualisation';\r\nimport Metadata from '../metadata';\r\nimport PageHeader from '../page-header';\r\nimport PageSpinner from '../page-spinner';\r\nimport ProductList from '../product-list';\r\nimport ProductText from 'components/product-text';\r\n\r\nclass GlassesPage extends React.Component {\r\n static propTypes = {\r\n editorialContent: PropTypes.exact(PageHeader.propTypes),\r\n frameMetadata: PropTypes.exact(Metadata.propTypes),\r\n glassesMeasurement: PropTypes.exact(GlassesMeasurement.propTypes),\r\n header: PropTypes.exact(GlassesHeader.propTypes),\r\n productTextHtml: PropTypes.string,\r\n lenseMetadata: PropTypes.exact(Metadata.propTypes),\r\n lensVisualisation: PropTypes.exact(LensVisualisation.propTypes),\r\n relatedProducts: PropTypes.exact(ProductList.propTypes),\r\n productVariantText: PropTypes.string\r\n };\r\n\r\n state = {\r\n ...this.props,\r\n isLoading: false\r\n };\r\n\r\n beforeUpdateSize = () => {\r\n this.setState({ isLoading: true });\r\n };\r\n\r\n updateSize = newState => {\r\n this.setState({ ...newState, isLoading: false });\r\n };\r\n\r\n render() {\r\n return (\r\n <div className=\"glasses-page\">\r\n <PageSpinner isLoading={this.state.isLoading} />\r\n <ContentContainer>\r\n <GlassesHeader\r\n isLoading={this.state.isLoading}\r\n onBeforeUpdateSize={this.beforeUpdateSize}\r\n updateSize={this.updateSize}\r\n {...this.state.header}\r\n productVariantText={this.state.productVariantText}\r\n />\r\n {this.props.productTextHtml && (\r\n <ProductText textHtml={this.props.productTextHtml} />\r\n )}\r\n <Grid\r\n className=\"glasses-page-content\"\r\n theme={Grid.themes.leftColumnWider}\r\n >\r\n <Grid.Column>\r\n <GlassesMeasurement {...this.state.glassesMeasurement} />\r\n </Grid.Column>\r\n <Grid.Column>\r\n <Metadata {...this.state.frameMetadata} />\r\n </Grid.Column>\r\n </Grid>\r\n <Grid\r\n className=\"glasses-page-content\"\r\n theme={Grid.themes.leftColumnWider}\r\n >\r\n <Grid.Column>\r\n {this.state.lensVisualisation && (\r\n <LensVisualisation {...this.state.lensVisualisation} />\r\n )}\r\n </Grid.Column>\r\n <Grid.Column>\r\n {this.state.lenseMetadata && (\r\n <Metadata {...this.state.lenseMetadata} />\r\n )}\r\n </Grid.Column>\r\n </Grid>\r\n </ContentContainer>\r\n\r\n {this.state.editorialContent && (\r\n <PageHeader\r\n headingLevel={2}\r\n shouldUseBlockStyling={true}\r\n {...this.state.editorialContent}\r\n />\r\n )}\r\n\r\n <ContentContainer className=\"glasses-page-bottom-content\">\r\n {this.state.relatedProducts && (\r\n <ProductList {...this.state.relatedProducts} />\r\n )}\r\n </ContentContainer>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default GlassesPage;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport Link from '../link';\r\n\r\nconst SearchResultHeader = ({ isCentered, label, link }) => (\r\n <div\r\n className={cn('global-search-results-header', {\r\n 'is-centered': isCentered\r\n })}\r\n >\r\n <span>{label}</span>\r\n <Link {...link} />\r\n </div>\r\n);\r\n\r\nSearchResultHeader.propTypes = {\r\n isCentered: PropTypes.bool,\r\n label: PropTypes.string,\r\n link: PropTypes.exact(Link.propTypes)\r\n};\r\n\r\nSearchResultHeader.propTypesMeta = {\r\n isCentered: 'exclude'\r\n};\r\n\r\nexport default SearchResultHeader;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport get from 'lodash/get';\r\n\r\nimport Grid from '../grid';\r\nimport Link from '../link';\r\nimport ProductCard from '../product-card';\r\nimport ProductList from '../product-list';\r\nimport SearchResultHeader from './search-result-header';\r\n\r\nconst SearchResults = ({\r\n articles,\r\n articlesHeader,\r\n children,\r\n products,\r\n productsHeader\r\n}) => {\r\n const hasResults =\r\n get(products, 'products', []).length > 0 || articles.length > 0;\r\n return (\r\n <React.Fragment>\r\n {hasResults && (\r\n <Grid theme={[Grid.themes.leftColumnWider]}>\r\n <Grid.Column>\r\n {productsHeader && <SearchResultHeader {...productsHeader} />}\r\n {products && (\r\n <div className=\"global-search-results-products\">\r\n <ProductList\r\n shouldAnimate={true}\r\n productTheme={ProductCard.themes.smallerImages}\r\n theme={[\r\n ProductList.themes.narrow,\r\n ProductList.themes.noMargin\r\n ]}\r\n {...products}\r\n />\r\n </div>\r\n )}\r\n </Grid.Column>\r\n\r\n <Grid.Column>\r\n {articlesHeader && (\r\n <SearchResultHeader isCentered={true} {...articlesHeader} />\r\n )}\r\n {articles.length > 0 && (\r\n <ul className=\"global-search-articles\">\r\n {articles.map(article => (\r\n <li key={article.url}>\r\n <Link theme={[Link.themes.noUnderline]} {...article} />\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n </Grid.Column>\r\n </Grid>\r\n )}\r\n\r\n {children(hasResults)}\r\n </React.Fragment>\r\n );\r\n};\r\n\r\nSearchResults.propTypes = {\r\n articles: PropTypes.arrayOf(PropTypes.exact(Link.propTypes)),\r\n articlesHeader: PropTypes.exact(SearchResultHeader.propTypes),\r\n children: PropTypes.func,\r\n products: PropTypes.exact(ProductList.propTypes),\r\n productsHeader: PropTypes.exact(SearchResultHeader.propTypes)\r\n};\r\n\r\nSearchResults.defaultProps = {\r\n articles: [],\r\n children: () => {}\r\n};\r\n\r\nexport default SearchResults;\r\n","import PropTypes from 'prop-types';\r\n\r\nimport SearchResults from './search-results';\r\n\r\nconst GlobalSearchResponse = {};\r\nGlobalSearchResponse.propTypes = {\r\n searchResults: PropTypes.exact(SearchResults.propTypes)\r\n};\r\n\r\nexport default GlobalSearchResponse;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport debounce from 'lodash/debounce';\r\n\r\nimport api from '../../js/api-helper';\r\nimport checkApiPropTypes from 'js/check-api-prop-types';\r\n\r\nimport Collapse from 'react-tiny-collapse';\r\n\r\nimport EmptyListMessage from '../empty-list-message';\r\nimport GlobalSearchResponse from './global-search-response';\r\nimport PageSpinner from '../page-spinner';\r\nimport SearchResults from './search-results';\r\nimport Search from '../form-elements/search';\r\n\r\nclass GlobalSearch extends React.Component {\r\n static propTypes = {\r\n label: PropTypes.string.isRequired,\r\n noResultsMessage: PropTypes.string,\r\n onMeasure: PropTypes.func,\r\n search: PropTypes.exact(Search.propTypes),\r\n suggestionEndpoint: PropTypes.string,\r\n url: PropTypes.string.isRequired\r\n };\r\n\r\n static defaultProps = {\r\n onMeasure: () => {},\r\n queryParameter: 'q'\r\n };\r\n\r\n state = {\r\n isLoading: false,\r\n isSearchResultsVisible: false,\r\n searchResults: null\r\n };\r\n\r\n isLoading = false;\r\n searchTerm = '';\r\n\r\n onMeasure = height => {\r\n if (this.wrapper) {\r\n const wrapperStyle = getComputedStyle(this.wrapper);\r\n this.props.onMeasure(\r\n height +\r\n parseInt(wrapperStyle.paddingTop) +\r\n parseInt(wrapperStyle.paddingBottom)\r\n );\r\n }\r\n };\r\n\r\n onSearchInput = debounce(searchTerm => {\r\n if (!this.props.search || !this.props.search.name) return;\r\n\r\n this.searchTerm = searchTerm;\r\n\r\n if (searchTerm && searchTerm.length >= 3 && !this.isLoading) {\r\n this.isLoading = true;\r\n\r\n this.setState({ isLoading: true }, () => {\r\n api\r\n .execute(this.props.suggestionEndpoint, {\r\n [this.props.search.name]: searchTerm\r\n })\r\n .then(newState => {\r\n this.isLoading = false;\r\n\r\n checkApiPropTypes(\r\n newState,\r\n GlobalSearchResponse.propTypes,\r\n 'GlobalSearchResponse'\r\n );\r\n\r\n this.setState({\r\n ...newState,\r\n isLoading: false,\r\n isSearchResultsVisible: true\r\n });\r\n\r\n // In case someone types while loading\r\n if (this.searchTerm !== searchTerm) {\r\n this.onSearchInput(this.searchTerm);\r\n }\r\n })\r\n .catch(() => {\r\n this.isLoading = false;\r\n this.setState({ isLoading: false });\r\n });\r\n });\r\n }\r\n }, 500);\r\n\r\n render() {\r\n return (\r\n <div className=\"global-search\" ref={div => (this.wrapper = div)}>\r\n <form action={this.props.url} method=\"get\">\r\n <label>\r\n <span className=\"global-search-label-text\">{this.props.label}</span>\r\n <Search\r\n autoComplete=\"off\"\r\n onChange={this.onSearchInput}\r\n onRef={input => (this.input = input)}\r\n theme={Search.themes.big}\r\n useFormsy={false}\r\n {...this.props.search}\r\n />\r\n </label>\r\n </form>\r\n\r\n <Collapse\r\n className=\"global-search-results\"\r\n isOpen={this.state.isLoading || this.state.isSearchResultsVisible}\r\n onMeasure={this.onMeasure}\r\n >\r\n <div aria-live=\"polite\" className=\"global-search-results-content\">\r\n <SearchResults {...this.state.searchResults}>\r\n {hasResults =>\r\n !this.state.isLoading &&\r\n !hasResults && (\r\n <EmptyListMessage\r\n className=\"global-search-empty-results\"\r\n text={this.props.noResultsMessage}\r\n />\r\n )\r\n }\r\n </SearchResults>\r\n <PageSpinner\r\n isLoading={this.state.isLoading}\r\n shouldContainInParent={true}\r\n />\r\n </div>\r\n </Collapse>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default GlobalSearch;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Button from 'components/button';\r\nimport Link from 'components/link';\r\n\r\nconst LoginModal = ({ links, registerLink, registerLinkLabel, title }) => (\r\n <div className=\"login-modal\">\r\n <h2>{title}</h2>\r\n {links.map(link => (\r\n <div className=\"login-modal-link-wrapper\" key={link.label}>\r\n <p>{link.label}</p>\r\n <Button\r\n className=\"login-modal-button\"\r\n theme={[Button.themes.orange, Button.themes.uppercase]}\r\n {...link.link}\r\n />\r\n </div>\r\n ))}\r\n <div className=\"login-modal-register\">\r\n <p>{registerLinkLabel}</p>\r\n <Link className=\"login-modal-register-link\" {...registerLink} />\r\n </div>\r\n </div>\r\n);\r\n\r\nLoginModal.propTypes = {\r\n links: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n label: PropTypes.string,\r\n link: PropTypes.exact(Link.propTypes)\r\n })\r\n ),\r\n registerLink: PropTypes.exact(Link.propTypes),\r\n registerLinkLabel: PropTypes.string,\r\n title: PropTypes.string\r\n};\r\n\r\nLoginModal.defaultProps = {\r\n links: []\r\n};\r\n\r\nexport default LoginModal;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Link from '../link';\r\n\r\nclass MouseoverLink extends React.Component {\r\n static propTypes = {\r\n ...Link.propTypes,\r\n delay: PropTypes.number,\r\n onMousehold: PropTypes.func.isRequired\r\n };\r\n\r\n static propTypesMeta = 'exclude';\r\n\r\n static defaultProps = {\r\n delay: 500\r\n };\r\n\r\n link = React.createRef();\r\n timeout = null;\r\n\r\n onMouseIn = () => {\r\n this.timeout = setTimeout(() => {\r\n if (!this) return;\r\n\r\n this.props.onMousehold();\r\n }, this.props.delay);\r\n };\r\n\r\n onMouseOut = () => {\r\n clearTimeout(this.timeout);\r\n };\r\n\r\n componentDidMount() {\r\n if (!this.link.current) return;\r\n\r\n this.link.current.addEventListener('mouseenter', this.onMouseIn);\r\n this.link.current.addEventListener('mouseleave', this.onMouseOut);\r\n }\r\n\r\n componentWillUnmount() {\r\n if (!this.link.current) return;\r\n\r\n this.link.current.removeEventListener('mouseenter', this.onMouseIn);\r\n this.link.current.removeEventListener('mouseleave', this.onMouseOut);\r\n }\r\n\r\n render() {\r\n // Eslint rule is ignored so that 'delay' and 'onMouseover' can be omitted from Link props\r\n // eslint-disable-next-line no-unused-vars\r\n const { delay, onMousehold, ...props } = this.props;\r\n\r\n return <Link onRef={this.link} {...props} />;\r\n }\r\n}\r\n\r\nexport default MouseoverLink;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Icon from '../icon';\r\n\r\nconst icons = {\r\n kids: 'category-kids',\r\n man: 'category-man',\r\n woman: 'category-woman'\r\n};\r\n\r\nconst CategoryLink = ({ categoryName, text, url, tabIndex = null }) => {\r\n return (\r\n <a className=\"category-link\" href={url} tabIndex={tabIndex}>\r\n <div className=\"category-link-icon\">\r\n <Icon name={icons[categoryName]} />\r\n <Icon name={icons[categoryName] + '-glasses'} />\r\n </div>\r\n <div className=\"category-link-text\">{text}</div>\r\n </a>\r\n );\r\n};\r\n\r\nCategoryLink.propTypes = {\r\n categoryName: PropTypes.oneOf(Object.keys(icons)).isRequired,\r\n text: PropTypes.string,\r\n url: PropTypes.string,\r\n tabIndex: PropTypes.number\r\n};\r\n\r\nCategoryLink.propTypesMeta = {\r\n tabIndex: 'exclude'\r\n};\r\n\r\nexport default CategoryLink;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Image from 'components/image';\r\n\r\nconst ShapeLink = ({ image, text, url, tabIndex = null }) => {\r\n return (\r\n <a className=\"shape-link\" href={url} tabIndex={tabIndex}>\r\n <div className=\"shape-link-image\">\r\n <Image responsive={false} {...image} />\r\n </div>\r\n <div className=\"shape-link-text\">{text}</div>\r\n </a>\r\n );\r\n};\r\n\r\nShapeLink.propTypes = {\r\n image: PropTypes.exact(Image.propTypes),\r\n text: PropTypes.string,\r\n url: PropTypes.string,\r\n tabIndex: PropTypes.number\r\n};\r\n\r\nShapeLink.propTypesMeta = {\r\n tabIndex: 'exclude'\r\n};\r\n\r\nexport default ShapeLink;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport Button from '../button';\r\nimport CategoryLink from './category-link';\r\nimport ShapeLink from './shape-link';\r\nimport ContentContainer from 'components/content-container';\r\nimport Icon from 'components/icon';\r\nimport Link from 'components/link';\r\n\r\nconst SubMenu = ({\r\n categoriesTitle,\r\n categories,\r\n shapesTitle,\r\n shapes,\r\n closeLabel,\r\n hide,\r\n linkListsTitle,\r\n linkLists,\r\n isHidden = false\r\n}) => {\r\n const linksTabindex = isHidden ? -1 : null;\r\n\r\n return (\r\n <div className=\"submenu\">\r\n <ContentContainer className=\"submenu-content\">\r\n {(categories.length > 0 || (shapes && shapes.length > 0)) && (\r\n <div className=\"submenu-category-container\">\r\n {categories.length > 0 && (\r\n <>\r\n {categoriesTitle && <h2>{categoriesTitle}</h2>}\r\n <ul>\r\n {categories.map(link => (\r\n <li key={link.url}>\r\n <CategoryLink {...link} tabIndex={linksTabindex} />\r\n </li>\r\n ))}\r\n </ul>\r\n </>\r\n )}\r\n {shapes && shapes.length > 0 && (\r\n <>\r\n {shapesTitle && <h2>{shapesTitle}</h2>}\r\n <ul>\r\n {shapes.map(link => (\r\n <li key={link.url}>\r\n <ShapeLink {...link} tabIndex={linksTabindex} />\r\n </li>\r\n ))}\r\n </ul>\r\n </>\r\n )}\r\n </div>\r\n )}\r\n <div className=\"submenu-links-container\">\r\n {linkListsTitle && <h2>{linkListsTitle}</h2>}\r\n <div className=\"submenu-link-lists\">\r\n {linkLists.map((linkList, index) => (\r\n <div\r\n className={cn('submenu-link-list', {\r\n 'is-editorial': linkList.links.every(link => link.editorial),\r\n 'is-only-list': linkLists.length === 1,\r\n 'is-two-columns': linkList.links.length > 10\r\n })}\r\n key={linkList.title || index}\r\n >\r\n {linkList.title && <h3>{linkList.title}</h3>}\r\n <ul>\r\n {linkList.links.map(({ editorial, link }) => (\r\n <li key={link.url}>\r\n <Link\r\n className=\"submenu-link\"\r\n prependChildren={editorial}\r\n theme={[Link.themes.noStyle, Link.themes.skew]}\r\n {...link}\r\n tabindex={linksTabindex}\r\n >\r\n {editorial && (\r\n <Icon\r\n className=\"submenu-link-icon\"\r\n name=\"small-arrow-right\"\r\n />\r\n )}\r\n </Link>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </ContentContainer>\r\n <Button\r\n className=\"submenu-close\"\r\n onClick={hide}\r\n theme={[Button.themes.light, Button.themes.circle]}\r\n disabled={isHidden}\r\n >\r\n <span>{closeLabel}</span>\r\n <Icon name=\"small-x\" />\r\n </Button>\r\n </div>\r\n );\r\n};\r\n\r\nSubMenu.propTypes = {\r\n categoriesTitle: PropTypes.string,\r\n categories: PropTypes.arrayOf(PropTypes.exact(CategoryLink.propTypes)),\r\n shapesTitle: PropTypes.string,\r\n shapes: PropTypes.arrayOf(PropTypes.exact(ShapeLink.propTypes)),\r\n closeLabel: PropTypes.string,\r\n hide: PropTypes.func,\r\n linkListsTitle: PropTypes.string,\r\n linkLists: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n title: PropTypes.string,\r\n links: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n editorial: PropTypes.bool,\r\n link: PropTypes.exact(Link.propTypes)\r\n })\r\n )\r\n })\r\n ),\r\n isHidden: PropTypes.bool\r\n};\r\n\r\nSubMenu.propTypesMeta = {\r\n isHidden: 'exclude'\r\n};\r\n\r\nSubMenu.defaultProps = {\r\n categories: [],\r\n linkLists: []\r\n};\r\n\r\nexport default SubMenu;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport Collapse from 'react-tiny-collapse';\r\nimport TinyTransition from 'react-tiny-transition';\r\n\r\nimport Button from '../button';\r\nimport ContentContainer from '../content-container';\r\nimport Icon from '../icon';\r\nimport Link from '../link';\r\nimport MouseoverLink from '../mouseover-link';\r\nimport SubMenu from './sub-menu';\r\n\r\nclass MainNav extends React.Component {\r\n static propTypes = {\r\n bookAppointmentLink: PropTypes.exact(Button.propTypes),\r\n hideMobileMenu: PropTypes.func,\r\n isDesktop: PropTypes.bool,\r\n isExpanded: PropTypes.bool,\r\n items: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n link: PropTypes.exact({\r\n url: PropTypes.string,\r\n text: PropTypes.string\r\n }),\r\n content: PropTypes.exact(SubMenu.propTypes)\r\n })\r\n ),\r\n myPageLink: PropTypes.exact(Link.propTypes),\r\n supportMenu: PropTypes.arrayOf(PropTypes.exact(Link.propTypes)),\r\n toggleLogin: PropTypes.func,\r\n topPosition: PropTypes.number\r\n };\r\n\r\n static propTypesMeta = {\r\n isDesktop: 'exclude',\r\n isExpanded: 'exclude',\r\n myPageLink: 'exclude', // NOTE: This is provided by Header,\r\n supportMenu: 'exclude', // NOTE: This is provided by Header\r\n topPosition: 'exclude'\r\n };\r\n\r\n static defaultProps = {\r\n items: [],\r\n supportMenu: []\r\n };\r\n\r\n state = {\r\n activeSubMenu: '',\r\n hasActiveSubMenu: false\r\n };\r\n\r\n toggleSubMenu = menuName => {\r\n this.setState(\r\n state => {\r\n const hasActiveSubMenu =\r\n !state.hasActiveSubMenu || state.activeSubMenu !== menuName;\r\n return {\r\n shouldAnimateSubMenu:\r\n state.hasActiveSubMenu !== hasActiveSubMenu || !this.props.isDesktop\r\n };\r\n },\r\n () => {\r\n requestAnimationFrame(() => {\r\n this.setState(state => {\r\n const hasActiveSubMenu =\r\n !state.hasActiveSubMenu || state.activeSubMenu !== menuName;\r\n return {\r\n activeSubMenu: menuName,\r\n hasActiveSubMenu\r\n };\r\n });\r\n });\r\n }\r\n );\r\n };\r\n\r\n hideSubMenus = () => {\r\n this.setState({ activeSubMenu: '', hasActiveSubMenu: false });\r\n };\r\n\r\n render() {\r\n const { isDesktop, isExpanded } = this.props;\r\n\r\n const shouldAnimate = this.state.shouldAnimateSubMenu || !isDesktop;\r\n const WrapperElement = isDesktop ? 'div' : TinyTransition;\r\n\r\n return (\r\n <React.Fragment>\r\n <WrapperElement key=\"content\">\r\n {(this.props.isDesktop || this.props.isExpanded) && (\r\n <div\r\n className={cn('main-nav', {\r\n 'is-mobile': !this.props.isDesktop,\r\n 'is-expanded': this.props.isExpanded\r\n })}\r\n >\r\n <ContentContainer className=\"main-nav-content\">\r\n <ul className=\"main-nav-items\">\r\n {this.props.items.map(({ link, content }) => {\r\n const isActive =\r\n this.state.hasActiveSubMenu &&\r\n this.state.activeSubMenu === link.url;\r\n\r\n return (\r\n <li key={link.url}>\r\n <div className=\"main-nav-item-header\">\r\n <MouseoverLink\r\n attributes={{\r\n 'data-test-main-nav-link': link.text\r\n }}\r\n className=\"main-nav-link\"\r\n theme={[Link.themes.noStyle, Link.themes.skew]}\r\n onMousehold={() => this.toggleSubMenu(link.url)}\r\n {...link}\r\n />\r\n\r\n <Button\r\n className={cn('main-nav-button', {\r\n 'is-active': isActive\r\n })}\r\n onClick={() => this.toggleSubMenu(link.url)}\r\n theme={Button.themes.plain}\r\n >\r\n <Icon name=\"small-arrow-down\" />\r\n </Button>\r\n </div>\r\n\r\n <div\r\n className={cn('main-nav-submenu', {\r\n 'main-nav-submenu--active': isActive,\r\n 'main-nav-submenu--animate': shouldAnimate\r\n })}\r\n aria-expanded={isActive}\r\n >\r\n <SubMenu\r\n hide={this.hideSubMenus}\r\n {...content}\r\n isHidden={!isActive}\r\n />\r\n </div>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n\r\n <ul className=\"main-nav-support-menu\">\r\n {this.props.supportMenu.map(item => (\r\n <li key={item.url}>\r\n <Link theme={Link.themes.noStyle} {...item} />\r\n </li>\r\n ))}\r\n\r\n {this.props.myPageLink && (\r\n <li>\r\n <Link\r\n onClick={this.props.toggleLogin}\r\n theme={Link.themes.noStyle}\r\n {...this.props.myPageLink}\r\n />\r\n </li>\r\n )}\r\n </ul>\r\n\r\n <Button\r\n className=\"main-nav-book-appointment\"\r\n {...this.props.bookAppointmentLink}\r\n />\r\n </ContentContainer>\r\n </div>\r\n )}\r\n </WrapperElement>\r\n\r\n <TinyTransition duration={500}>\r\n {isDesktop && this.state.hasActiveSubMenu && (\r\n <div className=\"main-nav-overlay\" onClick={this.hideSubMenus} />\r\n )}\r\n </TinyTransition>\r\n\r\n <TinyTransition duration={500}>\r\n {!isDesktop && isExpanded && (\r\n <div\r\n className=\"main-nav-overlay\"\r\n onClick={this.props.hideMobileMenu}\r\n />\r\n )}\r\n </TinyTransition>\r\n </React.Fragment>\r\n );\r\n }\r\n}\r\n\r\nexport default MainNav;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\nimport debounce from 'lodash/debounce';\r\n\r\nimport analytics from '../../js/analytics';\r\nimport breakpoints from '../../js/breakpoints';\r\n\r\nimport Collapse from 'react-tiny-collapse';\r\nimport PubSub from 'pubsub-js';\r\n\r\nimport ArrowButton from '../arrow-button';\r\nimport ContentContainer from '../content-container';\r\nimport Cart from '../cart';\r\nimport GlobalSearch from '../global-search';\r\nimport Icon from '../icon';\r\nimport Link from '../link';\r\nimport Button from '../button';\r\nimport LoginModal from '../login-modal';\r\nimport MainNav from './main-nav';\r\nimport Modal from '../modal';\r\n\r\nimport logo from '../../assets/logo.svg';\r\nimport topics from 'js/topics.json';\r\n\r\nconst SCROLL_THRESHOLD = 20;\r\n\r\nclass Header extends React.Component {\r\n static propTypes = {\r\n cart: PropTypes.exact(Cart.propTypes),\r\n cartLink: PropTypes.exact({\r\n numberOfProducts: PropTypes.number,\r\n text: PropTypes.string,\r\n url: PropTypes.string\r\n }),\r\n hideMenuText: PropTypes.string,\r\n isLoggedIn: PropTypes.bool,\r\n linkToHome: PropTypes.exact(Link.propTypes),\r\n locateStoreLink: PropTypes.exact(Link.propTypes),\r\n loginModal: PropTypes.exact(LoginModal.propTypes),\r\n myPageLink: PropTypes.exact(Link.propTypes),\r\n mainNavigation: PropTypes.exact(MainNav.propTypes),\r\n search: PropTypes.exact(GlobalSearch.propTypes),\r\n searchPageLink: PropTypes.exact(Link.propTypes),\r\n showMenuText: PropTypes.string,\r\n supportMenu: PropTypes.arrayOf(PropTypes.exact(Link.propTypes)),\r\n wishListLink: PropTypes.exact(Link.propTypes),\r\n bookAppointmentLinkMobile: PropTypes.exact(Link.propTypes)\r\n };\r\n\r\n state = {\r\n activeSubMenu: '',\r\n cartLink: this.props.cartLink,\r\n headerBarHeight: undefined,\r\n isCartVisible: false,\r\n isDesktop: true,\r\n isLoginVisible: false,\r\n isSearchVisible: false,\r\n isTablet: true,\r\n mobileMenuIsOpen: false,\r\n isScrolled: false,\r\n isMobileHeaderBarHidden: false\r\n };\r\n\r\n componentDidMount() {\r\n this.headerStickyWrapper = this.header.closest('.header-sticky-wrapper');\r\n this.screenWidth = window.innerWidth;\r\n this.onResize();\r\n this.handleScroll();\r\n this.detectHeaderStickyWrapperOffset();\r\n this.subscriber = PubSub.subscribe(\r\n topics.infoBannerVisibilityChanged,\r\n this.detectHeaderStickyWrapperOffset\r\n );\r\n\r\n window.addEventListener('resize', this.debouncedResize);\r\n window.addEventListener('scroll', this.handleScroll);\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('resize', this.debouncedResize);\r\n window.removeEventListener('scroll', this.handleScroll);\r\n PubSub.unsubscribe(this.subscriber);\r\n }\r\n\r\n componentDidUpdate() {\r\n this.mobileMenuIsOpen = this.state.mobileMenuIsOpen;\r\n }\r\n\r\n detectHeaderStickyWrapperOffset = () => {\r\n if (this.headerStickyWrapper) {\r\n this.headerOffsetTop = this.headerStickyWrapper.offsetTop;\r\n }\r\n };\r\n\r\n onResize = () => {\r\n const isDesktop = breakpoints.lg();\r\n const isTablet = breakpoints.md();\r\n document.body.style.position = '';\r\n\r\n this.setState(\r\n Object.assign(\r\n {},\r\n {\r\n headerBarHeight: this.header.offsetHeight,\r\n isDesktop,\r\n isTablet\r\n },\r\n window.innerWidth !== this.screenWidth\r\n ? { mobileMenuIsOpen: false }\r\n : {}\r\n ),\r\n () => {\r\n this.screenWidth = window.innerWidth;\r\n }\r\n );\r\n };\r\n\r\n debouncedResize = debounce(this.onResize, 400);\r\n\r\n toggleMobileMenu = (e, isOpen) => {\r\n this.setState(state => {\r\n isOpen = isOpen || !state.mobileMenuIsOpen;\r\n\r\n if (isOpen && !state.isDesktop) {\r\n this.header.scrollIntoView(true);\r\n\r\n document.body.style.position = 'fixed';\r\n document.body.style.overflow = 'hidden';\r\n } else {\r\n document.body.style.position = '';\r\n document.body.style.overflow = 'unset';\r\n }\r\n\r\n return {\r\n isCartVisible: false,\r\n isLoginVisible: false,\r\n isSearchVisible: false,\r\n mobileMenuIsOpen: isOpen\r\n };\r\n });\r\n };\r\n\r\n handleScroll = () => {\r\n const isScrolled = window.scrollY > SCROLL_THRESHOLD;\r\n const headerBarHeight = this.headerBar.offsetHeight;\r\n\r\n if (this.state.isScrolled !== isScrolled) {\r\n this.setState({ isScrolled });\r\n }\r\n\r\n if (\r\n window.scrollY > window.lastScrollY &&\r\n window.scrollY > headerBarHeight &&\r\n window.scrollY > this.headerOffsetTop &&\r\n !this.mobileMenuIsOpen\r\n ) {\r\n this.setState({ isMobileHeaderBarHidden: true });\r\n } else if (window.scrollY < window.lastScrollY) {\r\n this.setState({ isMobileHeaderBarHidden: false });\r\n }\r\n window.lastScrollY = window.scrollY;\r\n };\r\n\r\n hideMobileMenu = () => {\r\n this.toggleMobileMenu(null, false);\r\n };\r\n\r\n toggleLogin = e => {\r\n e.preventDefault();\r\n\r\n this.setState(previousState => ({\r\n isLoginVisible: !previousState.isLoginVisible,\r\n mobileMenuIsOpen: false,\r\n isCartVisible: false\r\n }));\r\n };\r\n\r\n toggleCart = e => {\r\n e.preventDefault();\r\n this.setState(previousState => {\r\n if (!previousState.isCartVisible) {\r\n analytics.send({ event: 'cart-open' });\r\n }\r\n\r\n return {\r\n isCartVisible: !previousState.isCartVisible,\r\n isLoginVisible: false,\r\n isSearchVisible: false,\r\n mobileMenuIsOpen: false\r\n };\r\n });\r\n };\r\n\r\n toggleSearch = e => {\r\n e.preventDefault();\r\n this.setState(previousState => {\r\n if (!previousState.isSearchVisible) {\r\n analytics.send({ event: 'search-open' });\r\n }\r\n\r\n return {\r\n isCartVisible: false,\r\n isLoginVisible: false,\r\n isSearchVisible: !previousState.isSearchVisible,\r\n mobileMenuIsOpen: false\r\n };\r\n });\r\n };\r\n\r\n hideModals = () => {\r\n this.setState({\r\n isCartVisible: false,\r\n isLoginVisible: false,\r\n isSearchVisible: false,\r\n mobileMenuIsOpen: false\r\n });\r\n };\r\n\r\n onCartUpdate = ({ cartLink }) => {\r\n if (cartLink) {\r\n this.setState({ cartLink });\r\n }\r\n };\r\n\r\n onMeasure = height => {\r\n if (\r\n !this.state.isCartVisible &&\r\n !this.state.isLoginVisible &&\r\n !this.state.isSearchVisible\r\n ) {\r\n document.body.style.position = '';\r\n return;\r\n }\r\n\r\n const headerNode = ReactDOM.findDOMNode(this);\r\n\r\n if (!isNaN(height) && headerNode) {\r\n const bottomPosition = headerNode.offsetHeight + height;\r\n document.body.style.position =\r\n bottomPosition > window.innerHeight ? 'fixed' : '';\r\n } else {\r\n document.body.style.position = '';\r\n }\r\n };\r\n\r\n render() {\r\n const {\r\n locateStoreLink,\r\n myPageLink,\r\n searchPageLink,\r\n wishListLink,\r\n bookAppointmentLinkMobile\r\n } = this.props;\r\n const { mobileMenuIsOpen, cartLink } = this.state;\r\n const ModalContentWrapper = this.state.isTablet ? 'div' : ContentContainer;\r\n const loginId = 'header-login-modal';\r\n const searchId = 'header-search-modal';\r\n const cartId = 'header-cart-modal';\r\n\r\n return (\r\n <header\r\n className={cn('header', {\r\n 'header-scrolled': this.state.isScrolled,\r\n 'header-bar-hidden': this.state.isMobileHeaderBarHidden,\r\n 'header-mobile-menu-opened': this.state.mobileMenuIsOpen\r\n })}\r\n ref={header => (this.header = header)}\r\n >\r\n {bookAppointmentLinkMobile && (\r\n <div className=\"header-mobile-top-bar\">\r\n <Button\r\n className=\"header-mobile-top-bar-button\"\r\n theme={[Button.themes.green, Button.themes.uppercase]}\r\n size={Button.sizes.small}\r\n {...bookAppointmentLinkMobile}\r\n />\r\n </div>\r\n )}\r\n <div\r\n className={cn('header-bar')}\r\n ref={headerBar => (this.headerBar = headerBar)}\r\n >\r\n <ContentContainer className=\"header-bar-content\">\r\n <button\r\n className={cn('header-mobile-menu-toggle', {\r\n 'is-active': mobileMenuIsOpen\r\n })}\r\n onClick={this.toggleMobileMenu}\r\n >\r\n <i className=\"header-hamburger\">\r\n <i className=\"header-hamburger-line top\" />\r\n <i className=\"header-hamburger-line mid\" />\r\n <i className=\"header-hamburger-line bot\" />\r\n </i>\r\n <span>\r\n {mobileMenuIsOpen\r\n ? this.props.hideMenuText\r\n : this.props.showMenuText}\r\n </span>\r\n </button>\r\n <Link\r\n className=\"header-logo\"\r\n useSpanElement={true}\r\n {...this.props.linkToHome}\r\n >\r\n <img src={logo} alt=\"Brilleland logo\" />\r\n </Link>\r\n\r\n <ul className=\"header-bar-nav\">\r\n {this.props.supportMenu.map(link => (\r\n <li key={link.url} className=\"header-support-menu-link\">\r\n <Link\r\n theme={[Link.themes.noStyle, Link.themes.skew]}\r\n {...link}\r\n />\r\n </li>\r\n ))}\r\n {this.state.isDesktop && myPageLink && (\r\n <li>\r\n <Link\r\n attributes={{\r\n 'aria-controls': loginId,\r\n 'aria-expanded': this.state.isLoginVisible\r\n }}\r\n className=\"header-login-link\"\r\n onClick={this.props.isLoggedIn ? null : this.toggleLogin}\r\n theme={[Link.themes.noStyle, Link.themes.skew]}\r\n {...myPageLink}\r\n />\r\n </li>\r\n )}\r\n {locateStoreLink && (\r\n <li>\r\n <Link\r\n className=\"header-locate-store-link\"\r\n theme={[Link.themes.noStyle, Link.themes.skew]}\r\n {...locateStoreLink}\r\n >\r\n <Icon name=\"pin\" />\r\n </Link>\r\n </li>\r\n )}\r\n {searchPageLink && (\r\n <li>\r\n <Link\r\n attributes={{\r\n 'aria-controls': searchId,\r\n 'aria-expanded': this.state.isSearchVisible\r\n }}\r\n className=\"header-search-button\"\r\n onClick={this.toggleSearch}\r\n theme={[Link.themes.noStyle, Link.themes.skew]}\r\n {...searchPageLink}\r\n >\r\n <Icon name=\"magnifier\" />\r\n </Link>\r\n </li>\r\n )}\r\n </ul>\r\n\r\n {(cartLink || wishListLink) && (\r\n <div className=\"header-cart-n-stuff\">\r\n {wishListLink && (\r\n <Link className=\"header-wish-list-button\" {...wishListLink}>\r\n <Icon name=\"heart\" />\r\n </Link>\r\n )}\r\n {cartLink && (\r\n <Link\r\n attributes={{\r\n 'aria-controls': cartId,\r\n 'aria-expanded': this.state.isCartVisible\r\n }}\r\n className={cn('header-cart-button', {\r\n 'has-products': cartLink.numberOfProducts\r\n })}\r\n onClick={this.toggleCart}\r\n text={cartLink.text}\r\n url={cartLink.url}\r\n >\r\n <div className=\"header-cart-icon\">\r\n <Icon name=\"basket\" />\r\n <span className=\"header-cart-count\">\r\n {cartLink.numberOfProducts}\r\n </span>\r\n </div>\r\n </Link>\r\n )}\r\n </div>\r\n )}\r\n </ContentContainer>\r\n </div>\r\n <MainNav\r\n hideMobileMenu={this.hideMobileMenu}\r\n isDesktop={this.state.isDesktop}\r\n isExpanded={mobileMenuIsOpen}\r\n myPageLink={myPageLink}\r\n supportMenu={this.props.supportMenu}\r\n toggleLogin={this.toggleLogin}\r\n topPosition={this.state.headerBarHeight}\r\n {...this.props.mainNavigation}\r\n />\r\n\r\n <Modal\r\n animate={false}\r\n className=\"header-login\"\r\n containerClassName=\"header-login-inner\"\r\n contentClassName=\"header-login-content\"\r\n id={searchId}\r\n isVisible={this.state.isLoginVisible}\r\n hide={this.hideModals}\r\n >\r\n <Collapse\r\n isOpen={this.state.isLoginVisible}\r\n onMeasure={this.onMeasure}\r\n >\r\n <ModalContentWrapper>\r\n <LoginModal {...this.props.loginModal} />\r\n </ModalContentWrapper>\r\n </Collapse>\r\n </Modal>\r\n\r\n <Modal\r\n animate={false}\r\n className=\"header-search\"\r\n containerClassName=\"header-search-inner\"\r\n contentClassName=\"header-search-content\"\r\n hide={this.hideModals}\r\n id={searchId}\r\n isVisible={this.state.isSearchVisible}\r\n >\r\n <ContentContainer>\r\n <Collapse\r\n animateChildren={false}\r\n isOpen={this.state.isSearchVisible}\r\n onMeasure={this.onMeasure}\r\n >\r\n <GlobalSearch onMeasure={this.onMeasure} {...this.props.search} />\r\n </Collapse>\r\n </ContentContainer>\r\n </Modal>\r\n\r\n <Modal\r\n animate={false}\r\n className=\"header-cart\"\r\n containerClassName=\"header-cart-inner\"\r\n contentClassName=\"header-cart-content\"\r\n hide={this.hideModals}\r\n id={cartId}\r\n isVisible={this.state.isCartVisible}\r\n >\r\n <Collapse\r\n animateChildren={false}\r\n isOpen={this.state.isCartVisible}\r\n onMeasure={this.onMeasure}\r\n unmountClosed={false}\r\n >\r\n <ModalContentWrapper>\r\n <Cart\r\n onUpdate={this.onCartUpdate}\r\n theme={Cart.themes.mini}\r\n {...this.props.cart}\r\n >\r\n <ArrowButton text={cartLink.text} url={cartLink.url} />\r\n </Cart>\r\n </ModalContentWrapper>\r\n </Collapse>\r\n </Modal>\r\n </header>\r\n );\r\n }\r\n}\r\n\r\nexport default Header;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport debounce from 'lodash/debounce';\r\nimport { iframeResizer } from 'iframe-resizer';\r\n\r\n// solution uses iframeResizer library:\r\n// https://github.com/davidjbradshaw/iframe-resizer\r\n\r\n// the iframe content page must include the file\r\n// 'iframeResizer.contentWindow.min.js', which will automagically\r\n// communicate with this IFramePage component to resize iframe\r\n// to the height of its content.\r\n//\r\n// https://raw.github.com/davidjbradshaw/iframe-resizer/master/js/iframeResizer.contentWindow.min.js\r\n\r\nclass IframePage extends React.Component {\r\n static propTypes = {\r\n iframeURL: PropTypes.string\r\n };\r\n\r\n state = { iframeURL: this.props.iframeURL };\r\n\r\n screenWidth = 0;\r\n\r\n onResize = () => {\r\n if (window.innerWidth !== this.screenWidth) {\r\n this.screenWidth = window.innerWidth;\r\n }\r\n };\r\n\r\n debouncedResize = debounce(this.onResize, 300);\r\n\r\n componentDidMount() {\r\n iframeResizer(null, this.iframe);\r\n\r\n this.screenWidth = window.innerWidth;\r\n window.addEventListener('resize', this.debouncedResize);\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('resize', this.debouncedResize);\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"iframe-page\">\r\n {this.state.iframeURL ? (\r\n <iframe\r\n src={this.state.iframeURL}\r\n ref={iframe => (this.iframe = iframe)}\r\n />\r\n ) : null}\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default IframePage;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Button from '../button';\r\nimport Icon from '../icon';\r\nimport OnPageEditing from '../on-page-editing';\r\n\r\nconst LinkList = ({ items, OPE, title }) => (\r\n <div className=\"link-list\">\r\n <OnPageEditing name={OPE.title}>{title && <h2>{title}</h2>}</OnPageEditing>\r\n\r\n <OnPageEditing name={OPE.items}>\r\n <ul>\r\n {items.map(item => (\r\n <li key={item.url + item.text}>\r\n <Button\r\n className=\"link-list-item\"\r\n theme={Button.themes.light}\r\n {...item}\r\n >\r\n <Icon className=\"link-list-icon\" name=\"small-arrow-right\" />\r\n </Button>\r\n </li>\r\n ))}\r\n </ul>\r\n </OnPageEditing>\r\n </div>\r\n);\r\n\r\nLinkList.propTypes = {\r\n items: PropTypes.arrayOf(PropTypes.exact(Button.propTypes)),\r\n OPE: PropTypes.exact({\r\n items: PropTypes.string,\r\n title: PropTypes.string\r\n }),\r\n title: PropTypes.string\r\n};\r\n\r\nLinkList.defaultProps = {\r\n items: [],\r\n OPE: {}\r\n};\r\n\r\nexport default LinkList;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport propTypeTheme from 'utils/prop-type-theme';\r\n\r\nimport Button from '../button';\r\nimport ContentContainer from '../content-container';\r\nimport Form from '../form';\r\nimport ValidationErrorTexts from 'components/validation-error-texts';\r\n\r\nimport Link from '../link';\r\nimport PageSpinner from '../page-spinner';\r\nimport TextInput from '../form-elements/text-input';\r\n\r\nconst themes = {\r\n maxi: 'theme-maxi',\r\n mini: 'theme-mini'\r\n};\r\n\r\nclass LoginForm extends React.Component {\r\n static propTypes = {\r\n endpoint: PropTypes.string,\r\n forgotPassword: PropTypes.exact(Link.propTypes),\r\n headingLevel: PropTypes.number,\r\n idPrefix: PropTypes.string,\r\n password: PropTypes.exact(TextInput.propTypes),\r\n registerLink: PropTypes.exact(Link.propTypes),\r\n registerLinkLabel: PropTypes.string,\r\n submitLabel: PropTypes.string,\r\n title: PropTypes.string,\r\n theme: propTypeTheme(themes),\r\n userId: PropTypes.exact(TextInput.propTypes),\r\n validationErrors: PropTypes.exact(ValidationErrorTexts.propTypes)\r\n };\r\n\r\n static propTypesMeta = {\r\n headingLevel: 'exclude',\r\n idPrefix: 'exclude',\r\n theme: 'exclude'\r\n };\r\n\r\n static defaultProps = {\r\n headingLevel: 1\r\n };\r\n\r\n state = {\r\n isLoading: false\r\n };\r\n\r\n onBeforeSubmit = () => {\r\n this.setState({ isLoading: true });\r\n };\r\n\r\n onResponse = () => {\r\n this.setState({ isLoading: false });\r\n };\r\n\r\n render() {\r\n const Title = 'h' + this.props.headingLevel;\r\n const Wrapper = this.props.theme === themes.maxi ? ContentContainer : 'div';\r\n\r\n return (\r\n <Wrapper className={cn('login-form', this.props.theme)}>\r\n <PageSpinner\r\n isLoading={this.state.isLoading}\r\n shouldContainInParent={true}\r\n />\r\n\r\n <Title>{this.props.title}</Title>\r\n\r\n <Form\r\n className=\"login-form-form\"\r\n endpoint={this.props.endpoint}\r\n onBeforeSubmit={this.onBeforeSubmit}\r\n onResponse={this.onResponse}\r\n showSubmitButton={false}\r\n >\r\n <TextInput\r\n detectAutofill={true}\r\n idPrefix={this.props.idPrefix}\r\n validations=\"isRequired\"\r\n validationErrors={this.props.validationErrors}\r\n {...this.props.userId}\r\n />\r\n <TextInput\r\n detectAutofill={true}\r\n idPrefix={this.props.idPrefix}\r\n type=\"password\"\r\n validations=\"isRequired\"\r\n validationErrors={this.props.validationErrors}\r\n {...this.props.password}\r\n />\r\n\r\n {this.props.forgotPassword && (\r\n <Link\r\n className=\"login-form-forgot-password\"\r\n {...this.props.forgotPassword}\r\n />\r\n )}\r\n\r\n <Button\r\n className=\"login-form-submit\"\r\n text={this.props.submitLabel}\r\n theme={[Button.themes.orange, Button.themes.uppercase]}\r\n type=\"submit\"\r\n />\r\n </Form>\r\n\r\n <div className=\"login-form-register\">\r\n <p>{this.props.registerLinkLabel}</p>\r\n <Link {...this.props.registerLink} />\r\n </div>\r\n </Wrapper>\r\n );\r\n }\r\n}\r\n\r\nLoginForm.themes = themes;\r\n\r\nexport default LoginForm;\r\n","import React from 'react';\r\n\r\nimport LoginForm from '../login-form';\r\n\r\nconst LoginPage = props => (\r\n <LoginForm theme={LoginForm.themes.maxi} {...props} />\r\n);\r\n\r\nLoginPage.propTypes = LoginForm.propTypes;\r\n\r\nexport default LoginPage;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nimport messenger from 'utils/messenger';\r\n\r\nimport TinyTransition from 'react-tiny-transition';\r\n\r\nimport Button from '../button';\r\nimport ContentContainer from '../content-container';\r\nimport Icon from '../icon';\r\n\r\nclass Message extends React.Component {\r\n static propTypes = {\r\n numberOfSecondsToShowMessage: PropTypes.number,\r\n isErrorMessage: PropTypes.bool,\r\n text: PropTypes.string\r\n };\r\n\r\n static defaultProps = {\r\n numberOfSecondsToShowMessage: 10\r\n };\r\n\r\n state = {\r\n isErrorMessage: this.props.isErrorMessage,\r\n isVisible: false,\r\n text: this.props.text\r\n };\r\n\r\n show = ({ message, isErrorMessage }) => {\r\n this.setState(\r\n { isVisible: !!message, isErrorMessage, text: message },\r\n () => {\r\n if (!this.state.isErrorMessage) {\r\n setTimeout(() => {\r\n this.hide();\r\n }, this.props.numberOfSecondsToShowMessage * 1000);\r\n }\r\n }\r\n );\r\n };\r\n\r\n hide = () => {\r\n this.setState({ isVisible: false });\r\n };\r\n\r\n componentDidMount() {\r\n if (this.props.text) {\r\n this.show({\r\n message: this.props.text,\r\n isErrorMessage: this.props.isErrorMessage\r\n });\r\n }\r\n\r\n messenger.onErrorMessage(({ message }) => {\r\n this.show({ message, isErrorMessage: true });\r\n });\r\n\r\n messenger.onMessage(({ message }) => {\r\n this.show({ message, isErrorMessage: false });\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n <TinyTransition>\r\n {this.state.isVisible && (\r\n <div\r\n className={cn('message', {\r\n 'is-error': this.state.isErrorMessage\r\n })}\r\n >\r\n <ContentContainer>\r\n <div className=\"message-inner\">\r\n <p>{this.state.text}</p>\r\n <Button\r\n className=\"message-close\"\r\n onClick={this.hide}\r\n theme={Button.themes.plain}\r\n >\r\n <Icon name=\"big-x\" />\r\n </Button>\r\n </div>\r\n </ContentContainer>\r\n </div>\r\n )}\r\n </TinyTransition>\r\n );\r\n }\r\n}\r\n\r\nexport default Message;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Icon from '../icon';\r\n\r\nconst MyConsents = ({ consentList }) => (\r\n <ul className=\"my-consents\">\r\n {consentList.map(consent => {\r\n return (\r\n <li key={consent.id}>\r\n <Icon name=\"checkmark-micro\" />\r\n {consent.text}\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n);\r\n\r\nMyConsents.propTypes = {\r\n consentList: PropTypes.arrayOf(\r\n PropTypes.exact({ id: PropTypes.string, text: PropTypes.string })\r\n )\r\n};\r\n\r\nMyConsents.defaultProps = {\r\n consentList: []\r\n};\r\n\r\nexport default MyConsents;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Link from '../link';\r\n\r\nconst MyOrdersItem = ({\r\n columnLabels,\r\n date,\r\n id,\r\n orderNumber,\r\n status,\r\n packageTrackingLink\r\n}) => (\r\n <tr key={id}>\r\n <td>\r\n <span>{columnLabels[0]}</span>\r\n <span>{date}</span>\r\n </td>\r\n <td>\r\n {orderNumber && (\r\n <React.Fragment>\r\n <span>{columnLabels[1]}</span>\r\n <span>\r\n <Link theme={Link.themes.skewUnderline} {...orderNumber} />\r\n </span>\r\n </React.Fragment>\r\n )}\r\n </td>\r\n <td>\r\n <span>{columnLabels[2]}</span>\r\n <span>{status}</span>\r\n </td>\r\n <td>\r\n {packageTrackingLink && (\r\n <React.Fragment>\r\n <span>\r\n <Link theme={Link.themes.skewUnderline} {...packageTrackingLink} />\r\n </span>\r\n </React.Fragment>\r\n )}\r\n </td>\r\n </tr>\r\n);\r\n\r\nMyOrdersItem.propTypes = {\r\n columnLabels: PropTypes.arrayOf(PropTypes.string),\r\n date: PropTypes.string,\r\n id: PropTypes.string, // NOTE: Used as key in MyOrders\r\n orderNumber: PropTypes.exact(Link.propTypes),\r\n status: PropTypes.string,\r\n packageTrackingLink: PropTypes.exact(Link.propTypes)\r\n};\r\n\r\nMyOrdersItem.propTypesMeta = {\r\n columnLabels: 'exclude'\r\n};\r\n\r\nMyOrdersItem.defaultProps = {\r\n columnLabels: []\r\n};\r\n\r\nexport default MyOrdersItem;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Collapse from 'react-tiny-collapse';\r\n\r\nimport Button from '../button';\r\nimport MyOrdersItem from './my-orders-item';\r\n\r\nclass MyOrders extends React.Component {\r\n static propTypes = {\r\n columnLabels: PropTypes.arrayOf(PropTypes.string),\r\n collapseLabel: PropTypes.string,\r\n expandLabel: PropTypes.string,\r\n maxLength: PropTypes.number,\r\n rows: PropTypes.arrayOf(PropTypes.exact(MyOrdersItem.propTypes)),\r\n title: PropTypes.string\r\n };\r\n\r\n static defaultProps = {\r\n columnLabels: [],\r\n maxLength: 3,\r\n rows: []\r\n };\r\n\r\n state = {\r\n isExpanded: false\r\n };\r\n\r\n toggle = () => {\r\n this.setState(state => ({ isExpanded: !state.isExpanded }));\r\n };\r\n\r\n render() {\r\n const visibleRows = this.props.rows.slice(0, this.props.maxLength);\r\n const hiddenRows = this.props.rows.slice(\r\n this.props.maxLength,\r\n this.props.rows.length\r\n );\r\n\r\n return (\r\n <div className=\"my-orders\">\r\n <Collapse isOpen={true}>\r\n <table>\r\n <thead>\r\n <tr>\r\n {this.props.columnLabels.map(label => (\r\n <th key={label}>{label}</th>\r\n ))}\r\n <th />\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {visibleRows\r\n .concat(this.state.isExpanded ? hiddenRows : [])\r\n .map(row => (\r\n <MyOrdersItem\r\n columnLabels={this.props.columnLabels}\r\n key={row.id}\r\n {...row}\r\n />\r\n ))}\r\n </tbody>\r\n </table>\r\n </Collapse>\r\n\r\n <div className=\"my-orders-button-container\">\r\n <Button\r\n text={\r\n this.state.isExpanded\r\n ? this.props.collapseLabel\r\n : this.props.expandLabel\r\n }\r\n theme={Button.themes.light}\r\n onClick={this.toggle}\r\n />\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default MyOrders;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Icon from '../icon';\r\nimport Link from '../link';\r\n\r\nconst MyPageSidebarSection = ({ children, ingress, link, linkIcon, title }) => (\r\n <div className=\"my-page-sidebar-section\">\r\n <h2>{title}</h2>\r\n <p>{ingress}</p>\r\n {children}\r\n {link && (\r\n <Link\r\n className=\"my-page-sidebar-section-button\"\r\n prependChildren={true}\r\n theme={Link.themes.skewUnderline}\r\n {...link}\r\n >\r\n {linkIcon && <Icon name={linkIcon} />}\r\n </Link>\r\n )}\r\n </div>\r\n);\r\n\r\nMyPageSidebarSection.propTypes = {\r\n children: PropTypes.node,\r\n ingress: PropTypes.string,\r\n link: PropTypes.exact(Link.propTypes),\r\n linkIcon: PropTypes.string,\r\n title: PropTypes.string\r\n};\r\n\r\nMyPageSidebarSection.propTypesMeta = {\r\n linkIcon: 'exclude'\r\n};\r\n\r\nexport default MyPageSidebarSection;\r\n","import React from 'react';\r\n\r\nimport Button from 'components/button';\r\nimport Icon from 'components/icon';\r\n\r\nconst OrderAgainButton = props => {\r\n return (\r\n <Button\r\n className=\"order-again-button\"\r\n theme={[Button.themes.orange, Button.themes.uppercase]}\r\n type=\"submit\"\r\n {...props}\r\n >\r\n <Icon className=\"order-again-button-icon\" name=\"basket\" />\r\n </Button>\r\n );\r\n};\r\n\r\nOrderAgainButton.propTypes = Button.propTypes;\r\n\r\nexport default OrderAgainButton;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst OrderListItem = ({ amount, details, product, productDescription }) => (\r\n <tr>\r\n <td>\r\n <div className=\"order-list-item\">\r\n <span>{product}</span>\r\n <span>{productDescription}</span>\r\n </div>\r\n\r\n {details && (\r\n <div className=\"order-list-details\">\r\n {details.map(({ label, value }) => (\r\n <div className=\"order-list-details-item\" key={label + value}>\r\n <div>{label}</div>\r\n <div>{value}</div>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </td>\r\n\r\n {amount && (\r\n <td>\r\n <span>{amount}</span>\r\n </td>\r\n )}\r\n </tr>\r\n);\r\n\r\nOrderListItem.propTypes = {\r\n amount: PropTypes.number,\r\n details: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n label: PropTypes.string,\r\n value: PropTypes.string\r\n })\r\n ),\r\n product: PropTypes.string,\r\n productDescription: PropTypes.string\r\n};\r\n\r\nexport default OrderListItem;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport OrderAgainButton from 'components/order-again-button';\r\nimport OrderListItem from './order-list-item';\r\n\r\nconst OrderList = ({ columnLabels, orderAgain, rows }) => (\r\n <div className=\"order-list\">\r\n <table>\r\n <thead>\r\n <tr>\r\n {columnLabels.map(label => (\r\n <th key={label}>{label}</th>\r\n ))}\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n {rows.map((row, i) => (\r\n <OrderListItem key={i} {...row} />\r\n ))}\r\n </tbody>\r\n </table>\r\n\r\n <div className=\"order-list-button-container\">\r\n {orderAgain && <OrderAgainButton {...orderAgain} />}\r\n </div>\r\n </div>\r\n);\r\n\r\nOrderList.defaultProps = {\r\n columnLabels: [],\r\n rows: []\r\n};\r\n\r\nOrderList.propTypes = {\r\n columnLabels: PropTypes.arrayOf(PropTypes.string),\r\n orderAgain: PropTypes.exact(OrderAgainButton.propTypes),\r\n rows: PropTypes.arrayOf(PropTypes.exact(OrderListItem.propTypes))\r\n};\r\n\r\nexport default OrderList;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst PersonalDetails = ({ items }) => (\r\n <dl className=\"personal-details\">\r\n {items.map(detail => (\r\n <React.Fragment key={detail.id}>\r\n <dt>{detail.tag}</dt>\r\n <dd>{detail.detail}</dd>\r\n </React.Fragment>\r\n ))}\r\n </dl>\r\n);\r\n\r\nPersonalDetails.propTypes = {\r\n items: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n id: PropTypes.string,\r\n tag: PropTypes.string,\r\n detail: PropTypes.string\r\n })\r\n )\r\n};\r\n\r\nPersonalDetails.defaultProps = {\r\n items: []\r\n};\r\n\r\nexport default PersonalDetails;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Appointments from '../appointments';\r\nimport CustomerDataImportForm from '../customer-data-import-form';\r\nimport MyConsents from '../my-consents';\r\nimport MyPageSidebarSection from './my-page-sidebar-section';\r\nimport MyPageLayout from '../my-page-layout';\r\nimport Grid from '../grid';\r\nimport MyOrders from '../my-orders';\r\nimport MyPageSection from '../my-page-section';\r\nimport OrderList from '../order-list';\r\nimport PersonalDetails from '../personal-details';\r\n\r\nconst MyPage = ({\r\n appointments,\r\n appointmentsSection,\r\n customerDataImport,\r\n customerDataImportSection,\r\n layout,\r\n orders,\r\n ordersSection,\r\n previousOrder,\r\n previousOrderSection,\r\n previousStorePurchase,\r\n previousStorePurchaseSection,\r\n consentList,\r\n consentListSection,\r\n personalDetails,\r\n personalDetailsSection\r\n}) => {\r\n return (\r\n <MyPageLayout {...layout}>\r\n <Grid className=\"my-page-content\" theme={Grid.themes.leftColumnWider}>\r\n <Grid.Column>\r\n {customerDataImport && (\r\n <MyPageSection {...customerDataImportSection}>\r\n <CustomerDataImportForm {...customerDataImport} />\r\n </MyPageSection>\r\n )}\r\n {previousStorePurchase && (\r\n <MyPageSection {...previousStorePurchaseSection}>\r\n <OrderList {...previousStorePurchase} />\r\n </MyPageSection>\r\n )}\r\n {previousOrder && (\r\n <MyPageSection {...previousOrderSection}>\r\n <OrderList {...previousOrder} />\r\n </MyPageSection>\r\n )}\r\n {orders && (\r\n <MyPageSection {...ordersSection}>\r\n <MyOrders {...orders} />\r\n </MyPageSection>\r\n )}\r\n </Grid.Column>\r\n\r\n <Grid.Column>\r\n <div className=\"my-page-sidebar\">\r\n {appointments && (\r\n <MyPageSidebarSection\r\n showLinkIcon={false}\r\n {...appointmentsSection}\r\n >\r\n <Appointments {...appointments} />\r\n </MyPageSidebarSection>\r\n )}\r\n {consentList && (\r\n <MyPageSidebarSection linkIcon=\"pen\" {...consentListSection}>\r\n <MyConsents {...consentList} />\r\n </MyPageSidebarSection>\r\n )}\r\n {personalDetails && (\r\n <MyPageSidebarSection linkIcon=\"pen\" {...personalDetailsSection}>\r\n <PersonalDetails {...personalDetails} />\r\n </MyPageSidebarSection>\r\n )}\r\n </div>\r\n </Grid.Column>\r\n </Grid>\r\n </MyPageLayout>\r\n );\r\n};\r\n\r\nMyPage.propTypes = {\r\n appointments: PropTypes.exact(Appointments.propTypes),\r\n appointmentsSection: PropTypes.exact(MyPageSidebarSection.propTypes),\r\n customerDataImportSection: PropTypes.exact(MyPageSection.propTypes),\r\n customerDataImport: PropTypes.exact(CustomerDataImportForm.propTypes),\r\n layout: PropTypes.exact(MyPageLayout.propTypes),\r\n orders: PropTypes.exact(MyOrders.propTypes),\r\n ordersSection: PropTypes.exact(MyPageSection.propTypes),\r\n previousStorePurchase: PropTypes.exact(OrderList.propTypes),\r\n previousStorePurchaseSection: PropTypes.exact(MyPageSection.propTypes),\r\n previousOrder: PropTypes.exact(OrderList.propTypes),\r\n previousOrderSection: PropTypes.exact(MyPageSection.propTypes),\r\n consentList: PropTypes.exact(MyConsents.propTypes),\r\n consentListSection: PropTypes.exact(MyPageSidebarSection.propTypes),\r\n personalDetails: PropTypes.exact(PersonalDetails.propTypes),\r\n personalDetailsSection: PropTypes.exact(MyPageSidebarSection.propTypes)\r\n};\r\n\r\nexport default MyPage;\r\n","/* eslint-disable react/prop-types */\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport NewsletterForm from 'components/newsletter-form';\r\nimport cn from 'classnames';\r\n\r\nconst themes = {\r\n small: 'theme-mini',\r\n compact: 'theme-compact'\r\n};\r\n\r\nconst NewsletterFormBlock = ({ ...props }) => {\r\n return (\r\n <div className={cn('newsletter-form-block', props.theme)}>\r\n <NewsletterForm {...props} className=\"newsletter-form--in-block\" />\r\n </div>\r\n );\r\n};\r\n\r\nNewsletterFormBlock.propTypes = Object.assign({}, NewsletterForm.propTypes, {\r\n theme: PropTypes.oneOf(Object.values(themes))\r\n});\r\n\r\nNewsletterFormBlock.themes = themes;\r\n\r\nexport default NewsletterFormBlock;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst OpeningHoursMeta = ({\r\n monday,\r\n tuesday,\r\n wednesday,\r\n thursday,\r\n friday,\r\n saturday,\r\n sunday\r\n}) => (\r\n <>\r\n {monday && <meta itemprop=\"openingHours\" content={'Mo ' + monday} />}\r\n {tuesday && <meta itemprop=\"openingHours\" content={'Tu ' + tuesday} />}\r\n {wednesday && <meta itemprop=\"openingHours\" content={'We ' + wednesday} />}\r\n {thursday && <meta itemprop=\"openingHours\" content={'Th ' + thursday} />}\r\n {friday && <meta itemprop=\"openingHours\" content={'Fr ' + friday} />}\r\n {saturday && <meta itemprop=\"openingHours\" content={'Sa ' + saturday} />}\r\n {sunday && <meta itemprop=\"openingHours\" content={'Su ' + sunday} />}\r\n </>\r\n);\r\nOpeningHoursMeta.propTypes = {\r\n monday: PropTypes.string,\r\n tuesday: PropTypes.string,\r\n wednesday: PropTypes.string,\r\n thursday: PropTypes.string,\r\n friday: PropTypes.string,\r\n saturday: PropTypes.string,\r\n sunday: PropTypes.string\r\n};\r\n\r\nexport default OpeningHoursMeta;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport ArrowButton from 'components/arrow-button';\r\nimport Icon from 'components/icon';\r\n\r\nconst RegistrationBanner = ({ description, link, title }) => (\r\n <div className=\"registration-banner\">\r\n <h2>{title}</h2>\r\n <ArrowButton className=\"registration-banner-link\" theme={null} {...link} />\r\n <ul className=\"registration-banner-text\">\r\n {description.map(text => (\r\n <li key={text}>\r\n <Icon className=\"registration-banner-icon\" name=\"checkmark\" />\r\n {text}\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n);\r\n\r\nRegistrationBanner.propTypes = {\r\n description: PropTypes.arrayOf(PropTypes.string),\r\n link: PropTypes.exact(ArrowButton.propTypes),\r\n title: PropTypes.string\r\n};\r\n\r\nexport default RegistrationBanner;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport isRunningOnClient from '@creuna/utils/is-running-on-client';\r\n\r\nimport api from 'js/api-helper';\r\n\r\nimport Button from 'components/button';\r\nimport Cart from 'components/cart';\r\nimport KlarnaIFrame from 'components/klarna-iframe';\r\nimport MyPageSection from 'components/my-page-section';\r\nimport MyPageLayout from 'components/my-page-layout';\r\nimport OrderAgainButton from 'components/order-again-button';\r\nimport RegistrationBanner from 'components/registration-banner';\r\n\r\nconst print = () => {\r\n window.print();\r\n};\r\n\r\nclass OrderSummary extends React.Component {\r\n static propTypes = {\r\n layout: PropTypes.exact(MyPageLayout.propTypes),\r\n getIframeEndpoint: PropTypes.string,\r\n orderAgain: PropTypes.exact(OrderAgainButton.propTypes),\r\n orderDetails: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n label: PropTypes.string,\r\n detail: PropTypes.string\r\n })\r\n ),\r\n cart: PropTypes.exact(Cart.propTypes),\r\n printLabel: PropTypes.string,\r\n section: PropTypes.exact(MyPageSection.propTypes),\r\n registrationBanner: PropTypes.exact(RegistrationBanner.propTypes),\r\n orderConfirmationHeading: PropTypes.string,\r\n orderConfirmationDescription: PropTypes.string\r\n };\r\n\r\n static defaultProps = {\r\n orderDetails: []\r\n };\r\n\r\n state = {\r\n iframeHTML: null\r\n };\r\n\r\n componentDidMount() {\r\n if (this.props.getIframeEndpoint) {\r\n api.execute(this.props.getIframeEndpoint).then(({ iframeHTML }) => {\r\n this.setState({ iframeHTML });\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n const {\r\n orderConfirmationHeading,\r\n orderConfirmationDescription\r\n } = this.props;\r\n\r\n return (\r\n <MyPageLayout {...this.props.layout}>\r\n <MyPageSection headingLevel={1} {...this.props.section}>\r\n {this.props.registrationBanner && (\r\n <RegistrationBanner {...this.props.registrationBanner} />\r\n )}\r\n {orderConfirmationHeading && (\r\n <h2 className=\"order-confirmation-heading\">\r\n {orderConfirmationHeading}\r\n </h2>\r\n )}\r\n {orderConfirmationDescription && (\r\n <p className=\"order-confirmation-description\">\r\n {orderConfirmationDescription}\r\n </p>\r\n )}\r\n {this.state.iframeHTML && (\r\n <KlarnaIFrame\r\n htmlString={this.state.iframeHTML}\r\n shouldEvalScript={true}\r\n />\r\n )}\r\n <div className=\"order-summary-info\">\r\n <table>\r\n <thead>\r\n <tr>\r\n {this.props.orderDetails.map(order => (\r\n <th key={order.label}>{order.label}</th>\r\n ))}\r\n <th />\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr>\r\n {this.props.orderDetails.map(order => (\r\n <td key={order.detail}>\r\n <span>{order.label}</span>\r\n <span>{order.detail}</span>\r\n </td>\r\n ))}\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <Cart shouldBeEditable={false} {...this.props.cart}>\r\n <div className=\"order-summary-button-wrapper\">\r\n {this.props.orderAgain && (\r\n <OrderAgainButton {...this.props.orderAgain} />\r\n )}\r\n {isRunningOnClient && (\r\n <Button\r\n className=\"order-summary-print-button\"\r\n onClick={print}\r\n text={this.props.printLabel}\r\n theme={Button.themes.outline}\r\n />\r\n )}\r\n </div>\r\n </Cart>\r\n </MyPageSection>\r\n </MyPageLayout>\r\n );\r\n }\r\n}\r\n\r\nexport default OrderSummary;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport OnPageEditing from '../on-page-editing';\r\n\r\nconst Quote = ({ OPE, text }) => (\r\n <blockquote className=\"quote\">\r\n <OnPageEditing element=\"span\" name={OPE.text}>\r\n {text}\r\n </OnPageEditing>\r\n </blockquote>\r\n);\r\n\r\nQuote.propTypes = {\r\n OPE: PropTypes.exact({\r\n text: PropTypes.string\r\n }),\r\n text: PropTypes.string\r\n};\r\n\r\nQuote.defaultProps = {\r\n OPE: {}\r\n};\r\n\r\nexport default Quote;\r\n","import React from 'react';\r\n\r\nimport PersonalInformationPage from 'components/personal-information-page';\r\n\r\nconst RegisterPage = props => <PersonalInformationPage {...props} />;\r\n\r\nRegisterPage.propTypes = PersonalInformationPage.propTypes;\r\n\r\nexport default RegisterPage;\r\n","import React from 'react';\r\nimport CategoryPage from '../category-page';\r\n\r\nconst SearchPage = props => (\r\n <CategoryPage theme={CategoryPage.themes.search} {...props} />\r\n);\r\n\r\nSearchPage.propTypes = CategoryPage.propTypes;\r\n\r\nexport default SearchPage;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport TinyTransition from 'react-tiny-transition';\r\nimport Icon from '../icon';\r\nimport CollapsableRichText from '../collapsable-rich-text';\r\nimport Button from '../button';\r\n\r\nconst Banner = ({ richText, onClick, title, buttonText, link }) => {\r\n return (\r\n <div className=\"site-info-banner\">\r\n <TinyTransition\r\n duration={300}\r\n disableInitialAnimation={true}\r\n classNames={{\r\n beforeEnter: 'site-info-banner-before-enter',\r\n entering: 'site-info-banner-entering',\r\n beforeLeave: 'site-info-banner-before-leave',\r\n leaving: 'site-info-banner-leaving'\r\n }}\r\n >\r\n <div className=\"site-info-banner-wrapper\">\r\n <div className=\"site-info-banner-content\">\r\n {title && (\r\n <>\r\n <div className=\"site-info-banner-close\">\r\n <button\r\n className=\"site-info-banner-close-button\"\r\n onClick={onClick}\r\n >\r\n <span className=\"site-info-banner-close-text\">\r\n {buttonText}\r\n </span>\r\n <span className=\"site-info-banner-close-icon\">\r\n <Icon name=\"big-x\" />\r\n </span>\r\n </button>\r\n </div>\r\n <h2 className=\"site-info-banner-header\">{title}</h2>\r\n </>\r\n )}\r\n {richText && (\r\n <CollapsableRichText\r\n {...richText}\r\n onCloseClick={onClick}\r\n showInlineCloseButton={!title}\r\n closeButtonText={buttonText}\r\n >\r\n <Button {...link} theme={Button.themes.white} />\r\n </CollapsableRichText>\r\n )}\r\n </div>\r\n </div>\r\n </TinyTransition>\r\n </div>\r\n );\r\n};\r\n\r\nBanner.propTypesMeta = 'exclude';\r\n\r\nBanner.propTypes = {\r\n title: PropTypes.string,\r\n onClick: PropTypes.func,\r\n richText: PropTypes.exact(CollapsableRichText.propTypes),\r\n buttonText: PropTypes.string,\r\n link: PropTypes.exact(Button.propTypes)\r\n};\r\n\r\nexport default Banner;\r\n","import React, { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Cookies from 'universal-cookie';\r\nimport CollapsableRichText from '../collapsable-rich-text';\r\nimport Button from '../button';\r\nimport Banner from './banner';\r\nimport PubSub from 'pubsub-js';\r\nimport topics from 'js/topics.json';\r\n\r\nconst COOKIE_ID = 'user_closed_info_banner';\r\n\r\nconst cookies = new Cookies();\r\n\r\nconst SiteInfoBanner = props => {\r\n const { cookieExpirationTimeInSeconds, ...rest } = props;\r\n\r\n const [showBanner, setShowBanner] = useState(false);\r\n\r\n const setCookie = () => {\r\n cookies.set(COOKIE_ID, true, {\r\n path: '/',\r\n maxAge: cookieExpirationTimeInSeconds\r\n });\r\n };\r\n\r\n const handleOnClick = () => {\r\n setShowBanner(false);\r\n setCookie();\r\n };\r\n\r\n useEffect(() => {\r\n setShowBanner(!cookies.get(COOKIE_ID));\r\n }, []);\r\n\r\n useEffect(() => {\r\n PubSub.publish(topics.infoBannerVisibilityChanged);\r\n }, [showBanner]);\r\n\r\n return showBanner ? <Banner onClick={handleOnClick} {...rest} /> : null;\r\n};\r\n\r\nSiteInfoBanner.defaultProps = {\r\n cookieExpirationTimeInSeconds: 86400 // 24 hours\r\n};\r\n\r\nSiteInfoBanner.propTypes = {\r\n title: PropTypes.string,\r\n cookieExpirationTimeInSeconds: PropTypes.number,\r\n onClick: PropTypes.func,\r\n richText: PropTypes.exact(CollapsableRichText.propTypes),\r\n buttonText: PropTypes.string,\r\n link: PropTypes.exact(Button.propTypes)\r\n};\r\n\r\nexport default SiteInfoBanner;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nclass StaticContainer extends React.Component {\r\n static propTypes = {\r\n children: PropTypes.node,\r\n shouldUpdate: PropTypes.bool\r\n };\r\n\r\n static propTypesMeta = 'exclude';\r\n\r\n shouldComponentUpdate() {\r\n return this.props.shouldUpdate;\r\n }\r\n\r\n render() {\r\n return this.props.children;\r\n }\r\n}\r\n\r\nexport default StaticContainer;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Link from '../link';\r\nimport OpeningHoursMeta from 'components/openingHoursMeta/openingHoursMeta';\r\n\r\nconst StorePageHeader = ({\r\n title,\r\n openingHours,\r\n openingHoursMeta,\r\n openingHoursLabel,\r\n address,\r\n addressMeta,\r\n geoMeta,\r\n phone,\r\n email\r\n}) => (\r\n <div\r\n className=\"store-page-header\"\r\n itemScope\r\n itemType=\"http://schema.org/Optician\"\r\n >\r\n <h1 itemProp=\"name\">{title}</h1>\r\n <p>{openingHoursLabel}</p>\r\n <div\r\n className=\"opening-hours\"\r\n dangerouslySetInnerHTML={{ __html: openingHours }}\r\n />\r\n\r\n {openingHoursMeta && <OpeningHoursMeta {...openingHoursMeta} />}\r\n <p>{address}</p>\r\n\r\n {addressMeta && (\r\n <div\r\n itemScope\r\n itemProp=\"address\"\r\n itemType=\"http://schema.org/PostalAddress\"\r\n >\r\n {addressMeta.streetAddress && (\r\n <meta itemProp=\"streetAddress\" content={addressMeta.streetAddress} />\r\n )}\r\n {addressMeta.postalCode && (\r\n <meta itemProp=\"postalCode\" content={addressMeta.postalCode} />\r\n )}\r\n {addressMeta.addressLocality && (\r\n <meta\r\n itemProp=\"addressLocality\"\r\n content={addressMeta.addressLocality}\r\n />\r\n )}\r\n </div>\r\n )}\r\n {geoMeta && (\r\n <div itemProp=\"geo\" itemScope itemType=\"http://schema.org/GeoCoordinates\">\r\n {geoMeta.latitude && (\r\n <meta itemprop=\"latitude\" content={geoMeta.latitude} />\r\n )}\r\n {geoMeta.longitude && (\r\n <meta itemprop=\"longitude\" content={geoMeta.longitude} />\r\n )}\r\n </div>\r\n )}\r\n <p>\r\n <Link {...phone} />\r\n </p>\r\n <p>\r\n <Link {...email} />\r\n </p>\r\n {phone && phone.text && <meta itemProp=\"telephone\" content={phone.text} />}\r\n {email && email.text && <meta itemProp=\"email\" content={email.text} />}\r\n </div>\r\n);\r\nStorePageHeader.propTypes = {\r\n title: PropTypes.string,\r\n openingHours: PropTypes.string,\r\n openingHoursMeta: PropTypes.exact(OpeningHoursMeta.propTypes),\r\n openingHoursLabel: PropTypes.string,\r\n address: PropTypes.string,\r\n addressMeta: PropTypes.shape({\r\n streetAddress: PropTypes.string,\r\n postalCode: PropTypes.string,\r\n addressLocality: PropTypes.string\r\n }),\r\n geoMeta: PropTypes.shape({\r\n latitude: PropTypes.string,\r\n longitude: PropTypes.string\r\n }),\r\n phone: PropTypes.exact(Link.propTypes),\r\n email: PropTypes.exact(Link.propTypes)\r\n};\r\n\r\nexport default StorePageHeader;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Button from '../button';\r\nimport ContentContainer from '../content-container';\r\nimport Icon from '../icon';\r\nimport Image from '../image';\r\nimport Link from '../link';\r\nimport StorePageHeader from './store-page-header';\r\nimport RichText from '../rich-text';\r\n\r\nconst StorePage = ({ header, image, link, mapEmbedUrl, mapLink, richText }) => (\r\n <div className=\"store-page\">\r\n <ContentContainer>\r\n {link && (\r\n <Link prependChildren={true} theme={Link.themes.noUnderline} {...link}>\r\n <Icon name=\"small-arrow-left\" />\r\n </Link>\r\n )}\r\n <StorePageHeader {...header} />\r\n\r\n <iframe className=\"store-page-map\" src={mapEmbedUrl} />\r\n\r\n {mapLink && (\r\n <Button\r\n className=\"store-page-button\"\r\n theme={Button.themes.big}\r\n {...mapLink}\r\n />\r\n )}\r\n\r\n <div className=\"store-info\">\r\n <Image {...image} />\r\n <RichText theme={RichText.themes.centered} {...richText} />\r\n </div>\r\n </ContentContainer>\r\n </div>\r\n);\r\n\r\nStorePage.propTypes = {\r\n header: PropTypes.exact(StorePageHeader.propTypes),\r\n image: PropTypes.exact(Image.propTypes),\r\n link: PropTypes.exact(Link.propTypes),\r\n mapEmbedUrl: PropTypes.string,\r\n mapLink: PropTypes.exact(Link.propTypes),\r\n richText: PropTypes.exact(RichText.propTypes)\r\n};\r\n\r\nexport default StorePage;\r\n","// NOTE: Do not edit this file. It is built by running `/codegen/components.js`\n// NOTE: The imported/exported components are exposed to the global scope\n\nimport Accordion from './components/accordion/accordion.jsx';\nimport AccordionList from './components/accordion-list/accordion-list.jsx';\nimport AddToCartButton from './components/add-to-cart-button/add-to-cart-button.jsx';\nimport AddToCartConfirmation from './components/add-to-cart-confirmation/add-to-cart-confirmation.jsx';\nimport Appointments from './components/appointments/appointments.jsx';\nimport ArrowButton from './components/arrow-button/arrow-button.jsx';\nimport ArticlePage from './components/article-page/article-page.jsx';\nimport AssistiveDrawer from './components/assistive-drawer/assistive-drawer.jsx';\nimport Availability from './components/availability/availability.jsx';\nimport Bomb from './components/bomb/bomb.jsx';\nimport BookingPage from './components/booking-page/booking-page.jsx';\nimport BrandPage from './components/brand-page/brand-page.jsx';\nimport Breadcrumbs from './components/breadcrumbs/breadcrumbs.jsx';\nimport Button from './components/button/button.jsx';\nimport CampaignBanner from './components/campaign-banner/campaign-banner.jsx';\nimport CampaignBannerCarousel from './components/campaign-banner-carousel/campaign-banner-carousel.jsx';\nimport Carousel from './components/carousel/carousel.jsx';\nimport Cart from './components/cart/cart.jsx';\nimport CategoryBlock from './components/category-block/category-block.jsx';\nimport CategoryFilters from './components/category-filters/category-filters.jsx';\nimport CategoryPage from './components/category-page/category-page.jsx';\nimport ChangeEmailPage from './components/change-email-page/change-email-page.jsx';\nimport ChangePasswordPage from './components/change-password-page/change-password-page.jsx';\nimport Chat from './components/chat/chat.jsx';\nimport CheckoutButton from './components/checkout-button/checkout-button.jsx';\nimport CheckoutLogin from './components/checkout-login/checkout-login.jsx';\nimport CheckoutLoginForm from './components/checkout-login-form/checkout-login-form.jsx';\nimport CheckoutLogout from './components/checkout-logout/checkout-logout.jsx';\nimport CheckoutPage from './components/checkout-page/checkout-page.jsx';\nimport CheckoutPageLegacy from './components/checkout-page-legacy/checkout-page-legacy.jsx';\nimport CheckoutRegisterForm from './components/checkout-register-form/checkout-register-form.jsx';\nimport CollapsableRichText from './components/collapsable-rich-text/collapsable-rich-text.jsx';\nimport CollapseList from './components/collapse-list/collapse-list.jsx';\nimport ComponentList from './components/component-list/component-list.jsx';\nimport ComponentListItem from './components/component-list-item/component-list-item.jsx';\nimport ConsentPage from './components/consent-page/consent-page.jsx';\nimport ContactLensPage from './components/contact-lens-page/contact-lens-page.jsx';\nimport ContainedImage from './components/contained-image/contained-image.jsx';\nimport ContentContainer from './components/content-container/content-container.jsx';\nimport CtaBlock from './components/cta-block/cta-block.jsx';\nimport CtaBlockSmall from './components/cta-block-small/cta-block-small.jsx';\nimport CtaCarousel from './components/cta-carousel/cta-carousel.jsx';\nimport CustomerDataImportForm from './components/customer-data-import-form/customer-data-import-form.jsx';\nimport Debounce from './components/debounce/debounce.jsx';\nimport DeliveryForm from './components/delivery-form/delivery-form.jsx';\nimport DeliveryWidget from './components/delivery-widget/delivery-widget.jsx';\nimport EditProfilePage from './components/edit-profile-page/edit-profile-page.jsx';\nimport EmailTemplate from './components/email-template/email-template.jsx';\nimport EmbedVideo from './components/embed-video/embed-video.jsx';\nimport EmptyListMessage from './components/empty-list-message/empty-list-message.jsx';\nimport ErrorPage from './components/error-page/error-page.jsx';\nimport FindStore from './components/find-store/find-store.jsx';\nimport FindStoreBlock from './components/find-store-block/find-store-block.jsx';\nimport FindStorePage from './components/find-store-page/find-store-page.jsx';\nimport FluidImage from './components/fluid-image/fluid-image.jsx';\nimport Footer from './components/footer/footer.jsx';\nimport ForgotPasswordPage from './components/forgot-password-page/forgot-password-page.jsx';\nimport Form from './components/form/form.jsx';\nimport Checkbox from './components/form-elements/checkbox/checkbox.jsx';\nimport CheckboxGroup from './components/form-elements/checkbox-group/checkbox-group.jsx';\nimport ColorSelect from './components/form-elements/color-select/color-select.jsx';\nimport GenderSelect from './components/form-elements/gender-select/gender-select.jsx';\nimport HiddenInput from './components/form-elements/hidden-input/hidden-input.jsx';\nimport InputTable from './components/form-elements/input-table/input-table.jsx';\nimport OptionGroup from './components/form-elements/option-group/option-group.jsx';\nimport Radio from './components/form-elements/radio/radio.jsx';\nimport Search from './components/form-elements/search/search.jsx';\nimport Select from './components/form-elements/select/select.jsx';\nimport ShapeSelect from './components/form-elements/shape-select/shape-select.jsx';\nimport TextInput from './components/form-elements/text-input/text-input.jsx';\nimport FormsyWrapper from './components/formsy-wrapper/formsy-wrapper.jsx';\nimport Frontpage from './components/frontpage/frontpage.jsx';\nimport GlassesPage from './components/glasses-page/glasses-page.jsx';\nimport GlobalSearch from './components/global-search/global-search.jsx';\nimport Grid from './components/grid/grid.jsx';\nimport Header from './components/header/header.jsx';\nimport Icon from './components/icon/icon.jsx';\nimport IframePage from './components/iframe-page/iframe-page.jsx';\nimport Image from './components/image/image.jsx';\nimport ImageLinkList from './components/image-link-list/image-link-list.jsx';\nimport KlarnaAndPorterbuddy from './components/klarna-and-porterbuddy/klarna-and-porterbuddy.jsx';\nimport KlarnaIframe from './components/klarna-iframe/klarna-iframe.jsx';\nimport LensVisualisation from './components/lens-visualisation/lens-visualisation.jsx';\nimport Link from './components/link/link.jsx';\nimport LinkList from './components/link-list/link-list.jsx';\nimport LoginForm from './components/login-form/login-form.jsx';\nimport LoginModal from './components/login-modal/login-modal.jsx';\nimport LoginPage from './components/login-page/login-page.jsx';\nimport Message from './components/message/message.jsx';\nimport Metadata from './components/metadata/metadata.jsx';\nimport Modal from './components/modal/modal.jsx';\nimport MouseoverLink from './components/mouseover-link/mouseover-link.jsx';\nimport MyConsents from './components/my-consents/my-consents.jsx';\nimport MyOrders from './components/my-orders/my-orders.jsx';\nimport MyPage from './components/my-page/my-page.jsx';\nimport MyPageForm from './components/my-page-form/my-page-form.jsx';\nimport MyPageLayout from './components/my-page-layout/my-page-layout.jsx';\nimport MyPageSection from './components/my-page-section/my-page-section.jsx';\nimport NewsletterForm from './components/newsletter-form/newsletter-form.jsx';\nimport NewsletterFormBlock from './components/newsletter-form-block/newsletter-form-block.jsx';\nimport OnPageEditing from './components/on-page-editing/on-page-editing.jsx';\nimport Openinghoursmeta from './components/openingHoursMeta/openingHoursMeta.jsx';\nimport OrderAgainButton from './components/order-again-button/order-again-button.jsx';\nimport OrderList from './components/order-list/order-list.jsx';\nimport OrderSummary from './components/order-summary/order-summary.jsx';\nimport PageHeader from './components/page-header/page-header.jsx';\nimport PageSpinner from './components/page-spinner/page-spinner.jsx';\nimport Paginator from './components/paginator/paginator.jsx';\nimport PersonalDetails from './components/personal-details/personal-details.jsx';\nimport PersonalInformationForm from './components/personal-information-form/personal-information-form.jsx';\nimport PersonalInformationPage from './components/personal-information-page/personal-information-page.jsx';\nimport Price from './components/price/price.jsx';\nimport ProductCard from './components/product-card/product-card.jsx';\nimport ProductImages from './components/product-images/product-images.jsx';\nimport ProductList from './components/product-list/product-list.jsx';\nimport ProductLogo from './components/product-logo/product-logo.jsx';\nimport ProductSellingPoints from './components/product-selling-points/product-selling-points.jsx';\nimport ProductText from './components/product-text/product-text.jsx';\nimport ProductVariantText from './components/product-variant-text/product-variant-text.jsx';\nimport Quote from './components/quote/quote.jsx';\nimport ReactComponent from './components/react-component/react-component.jsx';\nimport RegisterPage from './components/register-page/register-page.jsx';\nimport RegistrationBanner from './components/registration-banner/registration-banner.jsx';\nimport RichText from './components/rich-text/rich-text.jsx';\nimport SearchPage from './components/search-page/search-page.jsx';\nimport SellingPoints from './components/selling-points/selling-points.jsx';\nimport SiteInfoBanner from './components/site-info-banner/site-info-banner.jsx';\nimport Spinner from './components/spinner/spinner.jsx';\nimport StaticContainer from './components/static-container/static-container.jsx';\nimport StoreMap from './components/store-map/store-map.jsx';\nimport StorePage from './components/store-page/store-page.jsx';\nimport TermsForm from './components/terms-form/terms-form.jsx';\nimport ValidationErrorTexts from './components/validation-error-texts/validation-error-texts.jsx';\nimport Video from './components/video/video.jsx';\n\nexport {\n Accordion,\n AccordionList,\n AddToCartButton,\n AddToCartConfirmation,\n Appointments,\n ArrowButton,\n ArticlePage,\n AssistiveDrawer,\n Availability,\n Bomb,\n BookingPage,\n BrandPage,\n Breadcrumbs,\n Button,\n CampaignBanner,\n CampaignBannerCarousel,\n Carousel,\n Cart,\n CategoryBlock,\n CategoryFilters,\n CategoryPage,\n ChangeEmailPage,\n ChangePasswordPage,\n Chat,\n CheckoutButton,\n CheckoutLogin,\n CheckoutLoginForm,\n CheckoutLogout,\n CheckoutPage,\n CheckoutPageLegacy,\n CheckoutRegisterForm,\n CollapsableRichText,\n CollapseList,\n ComponentList,\n ComponentListItem,\n ConsentPage,\n ContactLensPage,\n ContainedImage,\n ContentContainer,\n CtaBlock,\n CtaBlockSmall,\n CtaCarousel,\n CustomerDataImportForm,\n Debounce,\n DeliveryForm,\n DeliveryWidget,\n EditProfilePage,\n EmailTemplate,\n EmbedVideo,\n EmptyListMessage,\n ErrorPage,\n FindStore,\n FindStoreBlock,\n FindStorePage,\n FluidImage,\n Footer,\n ForgotPasswordPage,\n Form,\n Checkbox,\n CheckboxGroup,\n ColorSelect,\n GenderSelect,\n HiddenInput,\n InputTable,\n OptionGroup,\n Radio,\n Search,\n Select,\n ShapeSelect,\n TextInput,\n FormsyWrapper,\n Frontpage,\n GlassesPage,\n GlobalSearch,\n Grid,\n Header,\n Icon,\n IframePage,\n Image,\n ImageLinkList,\n KlarnaAndPorterbuddy,\n KlarnaIframe,\n LensVisualisation,\n Link,\n LinkList,\n LoginForm,\n LoginModal,\n LoginPage,\n Message,\n Metadata,\n Modal,\n MouseoverLink,\n MyConsents,\n MyOrders,\n MyPage,\n MyPageForm,\n MyPageLayout,\n MyPageSection,\n NewsletterForm,\n NewsletterFormBlock,\n OnPageEditing,\n Openinghoursmeta,\n OrderAgainButton,\n OrderList,\n OrderSummary,\n PageHeader,\n PageSpinner,\n Paginator,\n PersonalDetails,\n PersonalInformationForm,\n PersonalInformationPage,\n Price,\n ProductCard,\n ProductImages,\n ProductList,\n ProductLogo,\n ProductSellingPoints,\n ProductText,\n ProductVariantText,\n Quote,\n ReactComponent,\n RegisterPage,\n RegistrationBanner,\n RichText,\n SearchPage,\n SellingPoints,\n SiteInfoBanner,\n Spinner,\n StaticContainer,\n StoreMap,\n StorePage,\n TermsForm,\n ValidationErrorTexts,\n Video\n};\n","module.exports = \"/* eslint-disable */\\r\\n\\r\\nvar scriptElement = document.createElement(\\\"script\\\");\\r\\nscriptElement.async = 1;\\r\\nscriptElement.src = \\\"https://magicwidget.socialboards.com/magic-widget.js\\\";\\r\\ndocument.body.appendChild(scriptElement);\\r\\n\\r\\nvar o = {\\r\\n community: 'brilleland',\\r\\n moduleMask: 7,\\r\\n initModule: 0,\\r\\n widgetId: 1002,\\r\\n language: 'nb',\\r\\n messenger: {\\r\\n right: '20px',\\r\\n bottom: '85px',\\r\\n animationDirection: 'bottom-to-top',\\r\\n translate: '20px',\\r\\n home: {\\r\\n logoDimensions: { width: '154px' },\\r\\n chatLink: { order: 1, startChatText: 'Start Chat-samtale', continueChatText: 'Fortsett Chat-samtale' },\\r\\n faqLink: { order: 2, text: 'Søk i FAQ' },\\r\\n formLink: { order: 3, text: 'Send E-post via skjema' }\\r\\n },\\r\\n faq: {\\r\\n areStickyTopicsFirst: false,\\r\\n faqCategoryId: null,\\r\\n faqName: 'brilleland',\\r\\n tags: \\\"\\\"\\r\\n },\\r\\n form: {\\r\\n formName: ''\\r\\n },\\r\\n chat: {\\r\\n authenticationMask: 14,\\r\\n queueMessageBackgroundColor: 'white',\\r\\n queueMessageFontSizeRem: '1.3rem',\\r\\n agentMessageBackgroundColor: 'rgb(255,189,0)',\\r\\n botMessageBackgroundColor: 'rgb(255,189,0)'\\r\\n }\\r\\n },\\r\\n launcher: {\\r\\n enabled: true,\\r\\n height: '45px',\\r\\n width: '45px',\\r\\n right: '20px',\\r\\n bottom: '20px'\\r\\n }\\r\\n}\\r\\nwindow.magicWidgetAsyncInit = function () {\\r\\n magicWidget.initializeAsync(o)\\r\\n .then(function () {})\\r\\n .catch(function () {});\\r\\n magicWidget.isLaunched$.subscribe(function (isLaunched) {});\\r\\n}\\r\\n\"","module.exports = \".email-template {\\r\\n padding: 20px 0;\\r\\n max-width: 600px;\\r\\n margin: 0 auto;\\r\\n font-family: Orgon, Verdana, sans-serif;\\r\\n color: #4a4a4a;\\r\\n text-align: left;\\r\\n}\\r\\n\\r\\n.email-template-wrapper {\\r\\n width: 100%;\\r\\n}\\r\\n\\r\\n.email-template a {\\r\\n color: #136e3e;\\r\\n}\\r\\n\\r\\n.email-template-header p {\\r\\n font-size: 1em;\\r\\n line-height: 1.4;\\r\\n}\\r\\n\\r\\n.email-template-header img {\\r\\n max-width: 200px;\\r\\n margin-bottom: 20px;\\r\\n}\\r\\n\\r\\n.email-template-header h1 {\\r\\n font-size: 2em;\\r\\n}\\r\\n\\r\\n.email-template-content {\\r\\n margin-top: 20px;\\r\\n}\\r\\n\\r\\n.email-template-product {\\r\\n margin-top: 50px;\\r\\n}\\r\\n\\r\\n.email-template-product img {\\r\\n max-width: 250px;\\r\\n margin-bottom: 20px;\\r\\n}\\r\\n\\r\\n.email-template-price {\\r\\n text-align: right;\\r\\n margin: 30px 0;\\r\\n}\\r\\n\\r\\n.email-template-price p {\\r\\n margin-top: 0;\\r\\n}\\r\\n\\r\\n.email-template-unit-total {\\r\\n font-size: 1.4em;\\r\\n margin: 0;\\r\\n}\\r\\n\\r\\n.email-template-summary-price {\\r\\n text-align: right;\\r\\n}\\r\\n\\r\\n.email-template-summary-price span {\\r\\n font-size: 2em;\\r\\n line-height: 1.8;\\r\\n}\\r\\n\\r\\n.email-template-delivery-information,\\r\\n.email-template-payment-informastion {\\r\\n margin-top: 40px;\\r\\n}\\r\\n\\r\\n.email-template-product-list {\\r\\n margin: 30px 0;\\r\\n}\\r\\n\"","module.exports = \"/Frontend/logo.c70af002637586865f139cd1dd666c72.svg\";","module.exports = global[\"Components\"] = require(\"-!D:\\\\a\\\\1\\\\s\\\\Brilleland.Frontend\\\\node_modules\\\\babel-loader\\\\lib\\\\index.js!.\\\\app.components.js\");","var map = {\n\t\"./basket.svg\": 183,\n\t\"./big-arrow-right.svg\": 184,\n\t\"./big-x.svg\": 185,\n\t\"./category-kids-glasses.svg\": 186,\n\t\"./category-kids.svg\": 187,\n\t\"./category-man-glasses.svg\": 188,\n\t\"./category-man.svg\": 189,\n\t\"./category-woman-glasses.svg\": 190,\n\t\"./category-woman.svg\": 191,\n\t\"./checkmark-micro.svg\": 192,\n\t\"./checkmark.svg\": 193,\n\t\"./eye.svg\": 194,\n\t\"./facebook.svg\": 195,\n\t\"./heart.svg\": 196,\n\t\"./instagram.svg\": 197,\n\t\"./linkedin.svg\": 198,\n\t\"./magnifier.svg\": 199,\n\t\"./mail.svg\": 200,\n\t\"./pause.svg\": 201,\n\t\"./pen.svg\": 202,\n\t\"./pin.svg\": 203,\n\t\"./slider.svg\": 204,\n\t\"./small-arrow-down.svg\": 205,\n\t\"./small-arrow-left.svg\": 206,\n\t\"./small-arrow-right.svg\": 207,\n\t\"./small-minus.svg\": 208,\n\t\"./small-plus.svg\": 209,\n\t\"./small-x.svg\": 210,\n\t\"./zoom.svg\": 211\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 182;","var React = require('react');\n\nfunction Basket (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"d\":\"M29.3 6.7c-.4-.4-.9-.7-1.5-.7H21L19.6.7c-.1-.5-.7-.8-1.2-.7-.5.1-.8.7-.7 1.2L18.9 6h-6.7l1-4.8c.1-.5-.2-1.1-.8-1.2-.5-.1-1.1.2-1.2.8l-1 5.2h-8c-.6 0-1.1.3-1.5.7-.4.5-.6 1.1-.5 1.7l2.6 14c.2 1 1 1.6 2 1.6h20.3c1 0 1.8-.7 2-1.6l2.6-14c.2-.6 0-1.2-.4-1.7zM25.2 22H4.8L2.2 8h17.2l.5 1.9c.1.4.5.7 1 .7h.3c.5-.1.8-.7.7-1.2L21.5 8h6.3l-2.6 14z\"}));\n}\n\nBasket.defaultProps = {\"width\":\"30\",\"height\":\"24\",\"viewBox\":\"0 0 30 24\"};\n\nmodule.exports = Basket;\n\nBasket.default = Basket;\n","var React = require('react');\n\nfunction BigArrowRight (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"d\":\"M1.5 28c-.4 0-.8-.1-1.1-.4-.6-.6-.6-1.5 0-2.1L11.9 14 .4 2.6C-.1 2-.1 1 .4.4 1-.1 2-.1 2.6.4l12.5 12.5c.3.3.4.7.4 1.1s-.2.8-.4 1.1L2.5 27.6c-.3.3-.7.4-1 .4z\"}));\n}\n\nBigArrowRight.defaultProps = {\"width\":\"16\",\"height\":\"28\",\"viewBox\":\"0 0 16 28\"};\n\nmodule.exports = BigArrowRight;\n\nBigArrowRight.default = BigArrowRight;\n","var React = require('react');\n\nfunction BigX (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"d\":\"M11.4 10l8.3-8.3c.4-.4.4-1 0-1.4s-1-.4-1.4 0L10 8.6 1.7.3C1.3-.1.7-.1.3.3s-.4 1 0 1.4L8.6 10 .3 18.3c-.4.4-.4 1 0 1.4.2.2.4.3.7.3s.5-.1.7-.3l8.3-8.3 8.3 8.3c.2.2.5.3.7.3s.5-.1.7-.3c.4-.4.4-1 0-1.4L11.4 10z\"}));\n}\n\nBigX.defaultProps = {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\"};\n\nmodule.exports = BigX;\n\nBigX.default = BigX;\n","var React = require('react');\n\nfunction CategoryKidsGlasses (props) {\n return React.createElement(\"svg\",props,[React.createElement(\"style\",{\"key\":0},\".st0{fill:#0a6431}\"),React.createElement(\"path\",{\"d\":\"M20 40c-8.5 0-13.5-6.5-15.3-12.4-2.6-.1-4.7-2.3-4.7-5 0-1.6.8-3.1 2-4v-.7C2 7.2 9.2 0 19.8 0c2.3 0 4.5.4 6.6 1.2C33.6 3.8 38 10.3 38 18l.1.6c1.2.9 1.9 2.4 1.9 4 0 2.7-2.1 4.9-4.7 5C33.4 33.7 28.5 40 20 40zM6.2 25.4l.2.9C7.9 32 12.3 38 20 38s12.1-6 13.6-11.7l.2-.9.9.1h.4c1.6 0 2.9-1.3 2.9-3 0-1-.5-2-1.4-2.5-4.9 0-7-3.2-8.5-5.4-.8-1.2-1.4-2-2-2.4-.1 1.1-.4 2.6-1.9 3.6-7.2 5-16.9 4.2-19.3 3.7C3.3 19.6 2 21 2 22.6c0 1.7 1.3 3 2.9 3h.4l.9-.2zm19-15.4c2.1 0 3.3 1.8 4.5 3.5 1.4 2.1 2.9 4.3 6.3 4.5 0-7-3.9-12.6-10.3-14.9-1.9-.7-3.9-1.1-5.9-1.1C10.4 2 4.1 8.3 4 17.7c.3-.1.6-.1.9-.1h.2c2 .4 11.3 1.2 17.9-3.4 1.4-1 1-3 1-3l-.3-1.1 1.2-.1h.3z\",\"key\":1}),React.createElement(\"path\",{\"d\":\"M20 34c-2 0-3.9-.6-5.5-1.7-.5-.3-.6-.9-.3-1.3s.9-.6 1.4-.3c2.7 1.8 6.2 1.7 8.9 0 .5-.3 1.1-.2 1.4.3.3.5.2 1.1-.3 1.4-1.7 1-3.7 1.6-5.6 1.6z\",\"key\":2}),React.createElement(\"circle\",{\"cx\":\"26\",\"cy\":\"24\",\"r\":\"2\",\"key\":3}),React.createElement(\"circle\",{\"cx\":\"14\",\"cy\":\"24\",\"r\":\"2\",\"key\":4}),React.createElement(\"path\",{\"d\":\"M27 18c-2.4 0-4.4 1.5-5.2 3.7-.5-.3-1.1-.5-1.6-.5-.6 0-1.1.2-1.6.5-.8-2.1-2.8-3.6-5.2-3.6-3 0-5.5 2.5-5.5 5.5s2.5 5.5 5.5 5.5c2.4 0 4.5-1.6 5.2-3.8v.1c.6-1.3.4-2.8 1.6-2.8 1.2 0 1.1 1.4 1.5 2.5.7 2.3 2.8 4 5.3 4 3 0 5.5-2.5 5.5-5.5 0-3.1-2.5-5.6-5.5-5.6zm-13.6 9.5c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4zm13.6 0c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z\",\"key\":5})]);\n}\n\nCategoryKidsGlasses.defaultProps = {\"version\":\"1.1\",\"x\":\"0\",\"y\":\"0\",\"width\":\"40\",\"height\":\"40\",\"viewBox\":\"0 0 40 40\",\"xmlSpace\":\"preserve\"};\n\nmodule.exports = CategoryKidsGlasses;\n\nCategoryKidsGlasses.default = CategoryKidsGlasses;\n","var React = require('react');\n\nfunction CategoryKids (props) {\n return React.createElement(\"svg\",props,[React.createElement(\"style\",{\"key\":0},\".st0{fill:#0a6431}\"),React.createElement(\"path\",{\"d\":\"M20 40c-8.5 0-13.5-6.5-15.3-12.4-2.6-.1-4.7-2.3-4.7-5 0-1.6.8-3.1 2-4v-.7C2 7.2 9.2 0 19.8 0c2.3 0 4.5.4 6.6 1.2C33.6 3.8 38 10.3 38 18l.1.6c1.2.9 1.9 2.4 1.9 4 0 2.7-2.1 4.9-4.7 5C33.4 33.7 28.5 40 20 40zM6.2 25.4l.2.9C7.9 32 12.3 38 20 38s12.1-6 13.6-11.7l.2-.9.9.1h.4c1.6 0 2.9-1.3 2.9-3 0-1-.5-2-1.4-2.5-4.9 0-7-3.2-8.5-5.4-.8-1.2-1.4-2-2-2.4-.1 1.1-.4 2.6-1.9 3.6-7.2 5-16.9 4.2-19.3 3.7C3.3 19.6 2 21 2 22.6c0 1.7 1.3 3 2.9 3h.4l.9-.2zm19-15.4c2.1 0 3.3 1.8 4.5 3.5 1.4 2.1 2.9 4.3 6.3 4.5 0-7-3.9-12.6-10.3-14.9-1.9-.7-3.9-1.1-5.9-1.1C10.4 2 4.1 8.3 4 17.7c.3-.1.6-.1.9-.1h.2c2 .4 11.3 1.2 17.9-3.4 1.4-1 1-3 1-3l-.3-1.1 1.2-.1h.3z\",\"key\":1}),React.createElement(\"path\",{\"d\":\"M20 34c-2 0-3.9-.6-5.5-1.7-.5-.3-.6-.9-.3-1.3s.9-.6 1.4-.3c2.7 1.8 6.2 1.7 8.9 0 .5-.3 1.1-.2 1.4.3.3.5.2 1.1-.3 1.4-1.7 1-3.7 1.6-5.6 1.6z\",\"key\":2}),React.createElement(\"circle\",{\"cx\":\"26\",\"cy\":\"24\",\"r\":\"2\",\"key\":3}),React.createElement(\"circle\",{\"cx\":\"14\",\"cy\":\"24\",\"r\":\"2\",\"key\":4})]);\n}\n\nCategoryKids.defaultProps = {\"version\":\"1.1\",\"x\":\"0\",\"y\":\"0\",\"width\":\"40\",\"height\":\"40\",\"viewBox\":\"0 0 40 40\",\"xmlSpace\":\"preserve\"};\n\nmodule.exports = CategoryKids;\n\nCategoryKids.default = CategoryKids;\n","var React = require('react');\n\nfunction CategoryManGlasses (props) {\n return React.createElement(\"svg\",props,[React.createElement(\"style\",{\"key\":0},\".st0{fill:#0a6431}\"),React.createElement(\"path\",{\"d\":\"M47.9 24C47.1 9.8 37.7 0 24.7 0 12.2 0 2.8 10 2.1 24 .8 25.1 0 26.7 0 28.5c0 3.3 2.6 5.9 5.9 6C8.1 41.8 14.3 50 25 50s16.8-7.9 19.1-15.5c3.3 0 5.9-2.7 5.9-6 0-1.7-.8-3.4-2.1-4.5zM24.7 2c11.5 0 19.9 8.5 21.1 20.9-2.4-.3-22.9-3-27.1-9.5l-.3-.4h-.5c-4.7-.2-7.3 6-8.5 8.9-.1.3-.3.6-.4.9v.2c-1.2-.4-2-.4-2.3-.4H6c-.6 0-1.2.1-1.8.3C5.4 10.6 13.7 2 24.7 2zM44 32.5h-.5l-.9-.1-.2.8C40.5 40.4 34.9 48 25 48c-6.5 0-14.5-3.9-17.4-14.8l-.2-.8-.9.1H6c-2.2 0-4-1.8-4-4s1.8-4 4-4h.7s.8 0 2.1.5c1.2.4 1.8-.9 2-1.4.1-.3.2-.6.4-.9 1-2.4 3.1-7.4 6.1-7.7 5.5 7.1 26.4 9.7 28.4 9.9l.2.1c1.3.7 2.1 2 2.1 3.5 0 2.2-1.8 4-4 4z\",\"key\":1}),React.createElement(\"path\",{\"d\":\"M25.4 42c-2.5 0-4.9-.7-7-2.1-.5-.3-.6-.9-.3-1.4.3-.5.9-.6 1.4-.3 3.6 2.3 8.3 2.3 11.9-.1.5-.3 1.1-.2 1.4.3s.2 1.1-.3 1.4C30.4 41.2 28 42 25.4 42z\",\"key\":2}),React.createElement(\"circle\",{\"cx\":\"33\",\"cy\":\"29\",\"r\":\"2\",\"key\":3}),React.createElement(\"circle\",{\"cx\":\"17\",\"cy\":\"29\",\"r\":\"2\",\"key\":4}),React.createElement(\"path\",{\"d\":\"M33.4 23.4c-4.7 0-5.1 1.4-8.3 1.3-3.2 0-3.6-1.3-8.3-1.3-3.1 0-6.4.5-9.2 1v1.3c.5.4 1.5 1.4 1.5 2.9 0 5.6 2.3 6.4 6.7 6.4 5.9 0 6.7-1.3 7.7-6 .2-1 .7-1.7 1.6-1.7s1.4.6 1.6 1.7c1 4.7 1.8 6 7.7 6 4.4 0 6.7-.8 6.7-6.4 0-1.4 1.1-2.2 1.6-2.6l-.2-1.6c-2.7-.6-6-1-9.1-1zm-11.3 5.2c-.8 3.9-1 5-6.3 5-4.1 0-5.3-.8-5.3-5 0-2.2 0-3.7 6.3-3.7 2.8 0 4.5.6 5.1 1.5.4.4.4 1.1.2 2.2zm12.3 4.9c-5.3 0-5.4-1.1-6.3-5-.2-1-.2-1.8.1-2.3.6-.9 2.3-1.5 5.1-1.5 6.3 0 6.3 1.5 6.3 3.7.1 4.3-1 5.1-5.2 5.1z\",\"key\":5})]);\n}\n\nCategoryManGlasses.defaultProps = {\"version\":\"1.1\",\"x\":\"0\",\"y\":\"0\",\"width\":\"50\",\"height\":\"50\",\"viewBox\":\"0 0 50 50\",\"xmlSpace\":\"preserve\"};\n\nmodule.exports = CategoryManGlasses;\n\nCategoryManGlasses.default = CategoryManGlasses;\n","var React = require('react');\n\nfunction CategoryMan (props) {\n return React.createElement(\"svg\",props,[React.createElement(\"style\",{\"key\":0},\".st0{fill:#0a6431}\"),React.createElement(\"path\",{\"d\":\"M47.9 24C47.1 9.8 37.7 0 24.7 0 12.2 0 2.8 10 2.1 24 .8 25.1 0 26.7 0 28.5c0 3.3 2.6 5.9 5.9 6C8.1 41.8 14.3 50 25 50c10.7 0 16.8-7.9 19.1-15.5 3.3 0 5.9-2.7 5.9-6 0-1.7-.8-3.4-2.1-4.5zM24.7 2c11.5 0 19.9 8.5 21.1 20.9-2.4-.3-22.9-3-27.1-9.5l-.3-.4h-.5c-4.7-.2-7.3 6-8.5 8.9-.1.3-.3.6-.4.9v.2c-1.2-.4-2-.4-2.3-.4H6c-.6 0-1.2.1-1.8.3C5.4 10.6 13.7 2 24.7 2zM44 32.5h-.5l-.9-.1-.2.8C40.5 40.4 34.9 48 25 48c-6.5 0-14.5-3.9-17.4-14.8l-.2-.8-.9.1H6c-2.2 0-4-1.8-4-4s1.8-4 4-4h.7s.8 0 2.1.5c1.2.4 1.8-.9 2-1.4.1-.3.2-.6.4-.9 1-2.4 3.1-7.4 6.1-7.7 5.5 7.1 26.4 9.7 28.4 9.9l.2.1c1.3.7 2.1 2 2.1 3.5 0 2.2-1.8 4-4 4z\",\"key\":1}),React.createElement(\"path\",{\"d\":\"M25.4 42c-2.5 0-4.9-.7-7-2.1-.5-.3-.6-.9-.3-1.4.3-.5.9-.6 1.4-.3 3.6 2.3 8.3 2.3 11.9-.1.5-.3 1.1-.2 1.4.3.3.5.2 1.1-.3 1.4-2.1 1.4-4.5 2.2-7.1 2.2z\",\"key\":2}),React.createElement(\"circle\",{\"cx\":\"33\",\"cy\":\"29\",\"r\":\"2\",\"key\":3}),React.createElement(\"circle\",{\"cx\":\"17\",\"cy\":\"29\",\"r\":\"2\",\"key\":4}),React.createElement(\"path\",{\"d\":\"M21.4 27.4c-.3 0-.7-.2-.9-.5-.7-1.2-2-1.9-3.3-1.9-1.4 0-2.6.7-3.3 1.9-.3.5-.9.6-1.4.4-.5-.3-.6-.9-.4-1.4 1-1.8 3-2.9 5.1-2.9 2.1 0 4 1.1 5.1 2.9.3.5.1 1.1-.4 1.4-.2.1-.4.1-.5.1zM37 27.4c-.4 0-.7-.2-.9-.5-.6-1.2-1.8-1.9-3.1-1.9s-2.5.7-3.1 1.9c-.3.5-.9.7-1.4.4s-.7-.9-.4-1.4c1-1.8 2.9-2.9 4.9-2.9s3.9 1.1 4.9 2.9c.3.5.1 1.1-.4 1.4-.2.1-.3.1-.5.1z\",\"key\":5})]);\n}\n\nCategoryMan.defaultProps = {\"version\":\"1.1\",\"x\":\"0\",\"y\":\"0\",\"width\":\"50\",\"height\":\"50\",\"viewBox\":\"0 0 50 50\",\"xmlSpace\":\"preserve\"};\n\nmodule.exports = CategoryMan;\n\nCategoryMan.default = CategoryMan;\n","var React = require('react');\n\nfunction CategoryWomanGlasses (props) {\n return React.createElement(\"svg\",props,[React.createElement(\"style\",{\"key\":0},\".st0{fill:#0a6431}\"),React.createElement(\"path\",{\"d\":\"M50 28.5c0-1.8-.8-3.4-2.1-4.5-.2-6.7-2.8-12.8-7.3-17.3C36.3 2.4 30.5 0 24.7 0 11.5 0 2.2 9.9 2 24.1c-1.2 1.1-2 2.7-2 4.5 0 1.8.8 3.4 2 4.5v11.7c0 1.3 1 2.3 2.3 2.3h10.2c.1 0 .2 0 .3-.1 2.8 1.8 6.2 3 10.2 3 4.1 0 7.5-1.2 10.3-3h10.4c1.3 0 2.3-1 2.3-2.3V33c1.2-1.1 2-2.7 2-4.5zM24.7 2c9.8 0 20.3 8 21.2 20.9-5.7-.1-24.7-8-27.7-12.2l-.8-1.1-.8 1.1c-.5.7-1.1 1.5-1.6 2.4-2.8 4.2-6.3 9.4-10.8 9.4C4.9 10.4 13.1 2 24.7 2zM4.3 45.1c-.2 0-.3-.1-.3-.3V34.2c.6.2 1.2.3 1.9.3 1.1 3.7 3.3 7.6 6.5 10.6H4.3zm41.7-.4c0 .2-.1.3-.3.3h-7.8c3.1-2.9 5.2-6.7 6.3-10.5.7 0 1.3-.1 1.9-.3v10.5zm-2-12.2h-.5l-.9-.1-.2.8C40.5 40.4 34.9 48 25 48c-6.5 0-14.5-3.9-17.4-14.8l-.2-.8-.9.1H6c-2.2 0-4-1.8-4-4 0-1.8 1.2-3.3 2.8-3.8.1 0 .3-.1.4-.2 5-.7 8.5-6 11.3-10.2.3-.5.6-.9.9-1.3 5.1 4.8 22.4 11.9 28.4 12 1.3.7 2.1 2.1 2.1 3.5.1 2.2-1.7 4-3.9 4z\",\"key\":1}),React.createElement(\"path\",{\"d\":\"M31.4 38.2c-3.5 2.3-8.3 2.3-11.9.1-.5-.3-1.1-.2-1.4.3-.3.5-.2 1.1.3 1.4 2.1 1.3 4.5 2 7 2s5-.7 7.1-2.1c.5-.3.6-.9.3-1.4s-.9-.6-1.4-.3z\",\"key\":2}),React.createElement(\"circle\",{\"cx\":\"34\",\"cy\":\"29\",\"r\":\"2\",\"key\":3}),React.createElement(\"circle\",{\"cx\":\"17\",\"cy\":\"29\",\"r\":\"2\",\"key\":4}),React.createElement(\"path\",{\"d\":\"M35 22.7c-1.8 0-3.8.2-5.4.8-3.6 1.3-4.4 1.3-8.1 0-1.6-.6-3.6-.8-5.4-.8-3.1 0-6.6.6-9.6 1.4V24c1.3.4 1.7 4 1.9 5.3.6 3.9 2 7.7 8.1 7.7 4.8 0 6.4-3.6 7.5-6.9.5-1.7 2.6-1.7 3.2 0 1.1 3.3 2.7 6.9 7.5 6.9 6.1 0 7.5-3.8 8.1-7.7.2-1.4.6-4.9 1.9-5.3v.1c-3-.8-6.5-1.4-9.7-1.4zm-12.2 6c-.8 3.5-2.2 6.7-6.3 6.7-5.3 0-6.3-3-6.8-7.9-.1-1.2.1-1.7.4-1.9 1.5-1.8 9.5-1.7 12.1-.1.7.4 1.2.9.6 3.2zm18.7-1.2c-.5 4.9-1.6 7.9-6.8 7.9-4.2 0-5.5-3.2-6.3-6.7-.6-2.3-.1-2.8.7-3.3 2.6-1.6 10.6-1.7 12.1.1.2.3.4.8.3 2z\",\"key\":5})]);\n}\n\nCategoryWomanGlasses.defaultProps = {\"version\":\"1.1\",\"x\":\"0\",\"y\":\"0\",\"width\":\"50\",\"height\":\"50\",\"viewBox\":\"0 0 50 50\",\"xmlSpace\":\"preserve\"};\n\nmodule.exports = CategoryWomanGlasses;\n\nCategoryWomanGlasses.default = CategoryWomanGlasses;\n","var React = require('react');\n\nfunction CategoryWoman (props) {\n return React.createElement(\"svg\",props,[React.createElement(\"style\",{\"key\":0},\".st0{fill:#0a6431}\"),React.createElement(\"path\",{\"d\":\"M50 28.5c0-1.8-.8-3.4-2.1-4.5-.2-6.7-2.8-12.8-7.3-17.3C36.3 2.4 30.5 0 24.7 0 11.5 0 2.2 9.9 2 24.1c-1.2 1.1-2 2.7-2 4.5 0 1.8.8 3.4 2 4.5v11.7c0 1.3 1 2.3 2.3 2.3h10.2c.1 0 .2 0 .3-.1 2.8 1.8 6.2 3 10.2 3 4.1 0 7.5-1.2 10.3-3h10.4c1.3 0 2.3-1 2.3-2.3V33c1.2-1.1 2-2.7 2-4.5zM24.7 2c9.8 0 20.3 8 21.2 20.9-5.7-.1-24.7-8-27.7-12.2l-.8-1.1-.8 1.1c-.5.7-1.1 1.5-1.6 2.4-2.8 4.2-6.3 9.4-10.8 9.4C4.9 10.4 13.1 2 24.7 2zM4.3 45.1c-.2 0-.3-.1-.3-.3V34.2c.6.2 1.2.3 1.9.3 1.1 3.7 3.3 7.6 6.5 10.6H4.3zm41.7-.4c0 .2-.1.3-.3.3h-7.8c3.1-2.9 5.2-6.7 6.3-10.5.7 0 1.3-.1 1.9-.3v10.5zm-2-12.2h-.5l-.9-.1-.2.8C40.5 40.4 34.9 48 25 48c-6.5 0-14.5-3.9-17.4-14.8l-.2-.8-.9.1H6c-2.2 0-4-1.8-4-4 0-1.8 1.2-3.3 2.8-3.8.1 0 .3-.1.4-.2 5-.7 8.5-6 11.3-10.2.3-.5.6-.9.9-1.3 5.1 4.8 22.4 11.9 28.4 12 1.3.7 2.1 2.1 2.1 3.5.1 2.2-1.7 4-3.9 4z\",\"key\":1}),React.createElement(\"path\",{\"d\":\"M31.4 38.2c-3.5 2.3-8.3 2.3-11.9.1-.5-.3-1.1-.2-1.4.3-.3.5-.2 1.1.3 1.4 2.1 1.3 4.5 2 7 2s5-.7 7.1-2.1c.5-.3.6-.9.3-1.4s-.9-.6-1.4-.3z\",\"key\":2}),React.createElement(\"circle\",{\"cx\":\"34\",\"cy\":\"29\",\"r\":\"2\",\"key\":3}),React.createElement(\"circle\",{\"cx\":\"17\",\"cy\":\"29\",\"r\":\"2\",\"key\":4}),React.createElement(\"path\",{\"d\":\"M21.4 27.4c-.3 0-.7-.2-.9-.5-.7-1.2-2-1.9-3.3-1.9-1.4 0-2.6.7-3.3 1.9-.3.5-.9.6-1.4.4-.5-.3-.6-.9-.4-1.4 1-1.8 3-2.9 5.1-2.9 2.1 0 4 1.1 5.1 2.9.3.5.1 1.1-.4 1.4-.2.1-.4.1-.5.1z\",\"key\":5}),React.createElement(\"g\",{\"key\":6},React.createElement(\"path\",{\"d\":\"M38.4 27.4c-.3 0-.7-.2-.9-.5-.7-1.2-2-1.9-3.3-1.9-1.4 0-2.6.7-3.3 1.9-.3.5-.9.6-1.4.4-.5-.3-.6-.9-.4-1.4 1-1.8 3-2.9 5.1-2.9 2.1 0 4 1.1 5.1 2.9.3.5.1 1.1-.4 1.4-.2.1-.4.1-.5.1z\"}))]);\n}\n\nCategoryWoman.defaultProps = {\"version\":\"1.1\",\"x\":\"0\",\"y\":\"0\",\"width\":\"50\",\"height\":\"50\",\"viewBox\":\"0 0 50 50\",\"xmlSpace\":\"preserve\"};\n\nmodule.exports = CategoryWoman;\n\nCategoryWoman.default = CategoryWoman;\n","var React = require('react');\n\nfunction CheckmarkMicro (props) {\n return React.createElement(\"svg\",props,React.createElement(\"g\",{\"stroke\":\"#737373\",\"strokeWidth\":\"1.8\",\"fillRule\":\"evenodd\",\"strokeLinecap\":\"round\"},React.createElement(\"path\",{\"d\":\"M7.692.318L3.07 6.371M.308 2.864L3.084 6.37\"})));\n}\n\nCheckmarkMicro.defaultProps = {\"width\":\"8\",\"height\":\"7\",\"viewBox\":\"0 0 8 7\"};\n\nmodule.exports = CheckmarkMicro;\n\nCheckmarkMicro.default = CheckmarkMicro;\n","var React = require('react');\n\nfunction Checkmark (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"d\":\"M5 11c-.3 0-.6-.1-.8-.4l-4-5c-.3-.4-.2-1 .2-1.4.4-.3 1.1-.3 1.4.2l3.1 3.9L10.1.4c.3-.5.9-.6 1.4-.3.5.3.6.9.3 1.4l-6 9c-.1.3-.4.5-.8.5z\"}));\n}\n\nCheckmark.defaultProps = {\"width\":\"12\",\"height\":\"11\",\"viewBox\":\"0 0 12 11\"};\n\nmodule.exports = Checkmark;\n\nCheckmark.default = Checkmark;\n","var React = require('react');\n\nfunction Eye (props) {\n return React.createElement(\"svg\",props,[React.createElement(\"path\",{\"d\":\"M11 13.9c-3.6 0-7.3-2.1-10.8-6.4l-.1-.6.1-.7c7-8.4 14.5-8.4 21.5 0l.2.6-.2.6c-3.4 4.4-7.1 6.5-10.7 6.5zm-8.7-7c5.9 6.6 11.5 6.6 17.4 0C13.8.3 8.2.3 2.3 6.9z\",\"key\":0}),React.createElement(\"circle\",{\"cx\":\"11\",\"cy\":\"7\",\"r\":\"3\",\"key\":1})]);\n}\n\nEye.defaultProps = {\"width\":\"22\",\"height\":\"14\",\"viewBox\":\"0 0 22 14\"};\n\nmodule.exports = Eye;\n\nEye.default = Eye;\n","var React = require('react');\n\nfunction Facebook (props) {\n return React.createElement(\"svg\",props,[React.createElement(\"defs\",{\"key\":0},React.createElement(\"path\",{\"d\":\"M12 12V0H0v24h12z\"})),React.createElement(\"g\",{\"fillRule\":\"evenodd\",\"key\":1},[React.createElement(\"mask\",{\"key\":0},React.createElement(\"use\",{\"xlinkHref\":\"#a\"})),React.createElement(\"path\",{\"d\":\"M3 8H0v4h3v12h5V12h3.642L12 8H8V6.333C8 5.378 8.192 5 9.115 5H12V0H8.192C4.596 0 3 1.583 3 4.615V8z\",\"mask\":\"url(#b)\",\"key\":1})])]);\n}\n\nFacebook.defaultProps = {\"width\":\"12\",\"height\":\"24\",\"viewBox\":\"0 0 12 24\"};\n\nmodule.exports = Facebook;\n\nFacebook.default = Facebook;\n","var React = require('react');\n\nfunction Heart (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"d\":\"M10 20c-.6 0-1.1-.2-1.5-.6-.9-.9-8.5-9-8.5-13.2C0 2.2 2.9 0 5.7 0c2 0 4 2 4.2 2.2h.1C10.3 2 12.3 0 14.3 0 17.1 0 20 2.1 20 6.2c0 4.2-7.6 12.3-8.5 13.2-.4.4-.9.6-1.5.6zM5.7 2C3.9 2 2 3.3 2 6.2 2 8.8 6.9 14.8 9.9 18h.1c3.1-3.2 8-9.2 8-11.8C18 3.3 16.1 2 14.3 2c-.9 0-2.2 1-2.8 1.6-.4.4-.9.7-1.5.7S8.9 4 8.5 3.6C7.9 3 6.6 2 5.7 2z\"}));\n}\n\nHeart.defaultProps = {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\"};\n\nmodule.exports = Heart;\n\nHeart.default = Heart;\n","var React = require('react');\n\nfunction Instagram (props) {\n return React.createElement(\"svg\",props,[React.createElement(\"defs\",{\"key\":0},React.createElement(\"path\",{\"d\":\"M12 0h12v24H0V0z\"})),React.createElement(\"g\",{\"fillRule\":\"evenodd\",\"key\":1},[React.createElement(\"mask\",{\"key\":0},React.createElement(\"use\",{\"xlinkHref\":\"#a\"})),React.createElement(\"path\",{\"d\":\"M18.406 4.155a1.44 1.44 0 1 0 0 2.881 1.44 1.44 0 0 0 0-2.881M12 16a4 4 0 1 1 0-8 4 4 0 0 1 0 8m0-10.162a6.162 6.162 0 1 0 0 12.324 6.162 6.162 0 0 0 0-12.324M12 0C8.741 0 8.333.014 7.053.072 2.695.272.273 2.69.073 7.052.014 8.333 0 8.741 0 12c0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98C8.333 23.986 8.742 24 12 24c3.26 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.98-6.98.058-1.28.072-1.689.072-4.948 0-3.259-.014-3.667-.073-4.947-.195-4.354-2.617-6.78-6.978-6.98C15.67.014 15.26 0 12 0m0 2.163c3.204 0 3.584.012 4.85.07 3.251.148 4.771 1.691 4.918 4.919.06 1.265.07 1.645.07 4.849 0 3.205-.012 3.584-.07 4.849-.148 3.225-1.663 4.771-4.919 4.919-1.265.058-1.643.07-4.849.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.77-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.15-3.227 1.664-4.771 4.92-4.919 1.265-.057 1.644-.069 4.848-.069\",\"mask\":\"url(#b)\",\"key\":1})])]);\n}\n\nInstagram.defaultProps = {\"width\":\"24\",\"height\":\"24\",\"viewBox\":\"0 0 24 24\"};\n\nmodule.exports = Instagram;\n\nInstagram.default = Instagram;\n","var React = require('react');\n\nfunction Linkedin (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"d\":\"M22 13.1V22h-4.9v-8.3c0-2.1-.7-3.5-2.5-3.5-1.4 0-2.2 1-2.5 1.9-.1.3-.2.8-.2 1.3V22H7S7.1 8.5 7 7h5l-.1 1.7c.7-1.1 1.8-2.6 4.4-2.6 3.3.1 5.7 2.3 5.7 7zM2.5 0C1 0 0 1.1 0 2.5S1 5 2.5 5 5 3.9 5 2.5 4 0 2.5 0zM0 7h5v15H0z\"}));\n}\n\nLinkedin.defaultProps = {\"width\":\"22\",\"height\":\"22\",\"viewBox\":\"0 0 22 22\"};\n\nmodule.exports = Linkedin;\n\nLinkedin.default = Linkedin;\n","var React = require('react');\n\nfunction Magnifier (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"d\":\"M19.7 18.3l-5.4-5.4C15.4 11.5 16 9.8 16 8c0-4.4-3.6-8-8-8S0 3.6 0 8s3.6 8 8 8c1.8 0 3.5-.6 4.9-1.7l5.4 5.4c.2.2.5.3.7.3s.5-.1.7-.3c.4-.4.4-1 0-1.4zM2 8c0-3.3 2.7-6 6-6s6 2.7 6 6-2.7 6-6 6-6-2.7-6-6z\"}));\n}\n\nMagnifier.defaultProps = {\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\"};\n\nmodule.exports = Magnifier;\n\nMagnifier.default = Magnifier;\n","var React = require('react');\n\nfunction Mail (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"d\":\"M0 18h24V0H0v18zM2.482 2h19.035L12 9.713 2.482 2zM22 4.183V16H2V4.183l10 8.104 10-8.104z\",\"fillRule\":\"evenodd\"}));\n}\n\nMail.defaultProps = {\"width\":\"24\",\"height\":\"18\",\"viewBox\":\"0 0 24 18\"};\n\nmodule.exports = Mail;\n\nMail.default = Mail;\n","var React = require('react');\n\nfunction Pause (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"d\":\"M16 13h4v19h-4zM26 13h4v19h-4z\"}));\n}\n\nPause.defaultProps = {\"width\":\"45\",\"height\":\"45\",\"viewBox\":\"0 0 45 45\"};\n\nmodule.exports = Pause;\n\nPause.default = Pause;\n","var React = require('react');\n\nfunction Pen (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"d\":\"M6 0H2C.9 0 0 .9 0 2v19.4c0 .4.1.9.4 1.2l2 3.5.1.2c.4.4.9.7 1.5.7s1.1-.3 1.5-.7l2.1-3.6c.3-.4.4-.8.4-1.3V2c0-1.1-.9-2-2-2zM4 24.9L2 21h4l-2 3.9zM6 19H2V2h4v17z\"}));\n}\n\nPen.defaultProps = {\"width\":\"8\",\"height\":\"27\",\"viewBox\":\"0 0 8 27\"};\n\nmodule.exports = Pen;\n\nPen.default = Pen;\n","var React = require('react');\n\nfunction Pin (props) {\n return React.createElement(\"svg\",props,[React.createElement(\"style\",{\"key\":0},\".st0{fill:#0f482a}\"),React.createElement(\"path\",{\"d\":\"M7.5 20c-.6 0-1.1-.3-1.5-.8-.6-.9-6-8.9-6-12.3C0 3.1 3.4 0 7.5 0S15 3.1 15 6.9c0 3.5-5.4 11.4-6 12.3-.4.5-.9.8-1.5.8zm0-18C4.6 2 2 4.3 2 6.9 2 9 5.3 14.6 7.5 17.8 9.7 14.5 13 8.9 13 6.9 13 4.3 10.4 2 7.5 2z\",\"key\":1}),React.createElement(\"path\",{\"d\":\"M7.5 11C5.6 11 4 9.4 4 7.5S5.6 4 7.5 4 11 5.6 11 7.5 9.4 11 7.5 11zm0-5C6.7 6 6 6.7 6 7.5S6.7 9 7.5 9 9 8.3 9 7.5 8.3 6 7.5 6z\",\"key\":2})]);\n}\n\nPin.defaultProps = {\"version\":\"1.1\",\"x\":\"0\",\"y\":\"0\",\"width\":\"15\",\"height\":\"20\",\"viewBox\":\"0 0 15 20\",\"xmlSpace\":\"preserve\"};\n\nmodule.exports = Pin;\n\nPin.default = Pin;\n","var React = require('react');\n\nfunction Slider (props) {\n return React.createElement(\"svg\",props,React.createElement(\"switch\",null,React.createElement(\"g\",null,React.createElement(\"path\",{\"d\":\"M0 0h5.3v62.3H0zM40 0h5.3v62.3H40zM14 0h4.5v62.3H14zM27 0h4.5v62.3H27z\"}))));\n}\n\nSlider.defaultProps = {\"viewBox\":\"0 0 45.4 62.4\"};\n\nmodule.exports = Slider;\n\nSlider.default = Slider;\n","var React = require('react');\n\nfunction SmallArrowDown (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"d\":\"M0 1C0 .7.1.5.3.3c.4-.4 1-.4 1.4 0L7 5.6 12.3.3c.4-.4 1-.4 1.4 0 .4.4.4 1 0 1.4l-6 6c-.4.4-1 .4-1.4 0l-6-6C.1 1.5 0 1.3 0 1z\"}));\n}\n\nSmallArrowDown.defaultProps = {\"width\":\"14\",\"height\":\"8\",\"viewBox\":\"0 0 14 8\"};\n\nmodule.exports = SmallArrowDown;\n\nSmallArrowDown.default = SmallArrowDown;\n","var React = require('react');\n\nfunction SmallArrowLeft (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"d\":\"M6.3 13.7l-6-6c-.4-.4-.4-1 0-1.4l6-6c.4-.4 1-.4 1.4 0 .4.4.4 1 0 1.4L2.4 7l5.3 5.3c.4.4.4 1 0 1.4-.2.2-.4.3-.7.3-.3 0-.5-.1-.7-.3z\"}));\n}\n\nSmallArrowLeft.defaultProps = {\"width\":\"8\",\"height\":\"14\",\"viewBox\":\"0 0 8 14\"};\n\nmodule.exports = SmallArrowLeft;\n\nSmallArrowLeft.default = SmallArrowLeft;\n","var React = require('react');\n\nfunction SmallArrowRight (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"d\":\"M1 14c-.3 0-.5-.1-.7-.3-.4-.4-.4-1 0-1.4L5.6 7 .3 1.7C-.1 1.3-.1.7.3.3s1-.4 1.4 0l6 6c.4.4.4 1 0 1.4l-6 6c-.2.2-.4.3-.7.3z\"}));\n}\n\nSmallArrowRight.defaultProps = {\"width\":\"8\",\"height\":\"14\",\"viewBox\":\"0 0 8 14\"};\n\nmodule.exports = SmallArrowRight;\n\nSmallArrowRight.default = SmallArrowRight;\n","var React = require('react');\n\nfunction SmallMinus (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"d\":\"M11 7H1c-.6 0-1-.4-1-1s.4-1 1-1h10c.6 0 1 .4 1 1s-.4 1-1 1z\"}));\n}\n\nSmallMinus.defaultProps = {\"width\":\"12\",\"height\":\"12\",\"viewBox\":\"0 0 12 12\"};\n\nmodule.exports = SmallMinus;\n\nSmallMinus.default = SmallMinus;\n","var React = require('react');\n\nfunction SmallPlus (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"d\":\"M11 5H7V1c0-.6-.4-1-1-1S5 .4 5 1v4H1c-.6 0-1 .4-1 1s.4 1 1 1h4v4c0 .6.4 1 1 1s1-.4 1-1V7h4c.6 0 1-.4 1-1s-.4-1-1-1z\"}));\n}\n\nSmallPlus.defaultProps = {\"width\":\"12\",\"height\":\"12\",\"viewBox\":\"0 0 12 12\"};\n\nmodule.exports = SmallPlus;\n\nSmallPlus.default = SmallPlus;\n","var React = require('react');\n\nfunction SmallX (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"d\":\"M5.9 4.5l2.8-2.8c.4-.4.4-1 0-1.4s-1-.4-1.4 0L4.5 3.1 1.7.3C1.3-.1.7-.1.3.3s-.4 1 0 1.4l2.8 2.8L.3 7.3c-.4.4-.4 1 0 1.4.2.2.4.3.7.3s.5-.1.7-.3l2.8-2.8 2.8 2.8c.2.2.4.3.7.3s.5-.1.7-.3c.4-.4.4-1 0-1.4L5.9 4.5z\"}));\n}\n\nSmallX.defaultProps = {\"width\":\"9\",\"height\":\"9\",\"viewBox\":\"0 0 9 9\"};\n\nmodule.exports = SmallX;\n\nSmallX.default = SmallX;\n","var React = require('react');\n\nfunction Zoom (props) {\n return React.createElement(\"svg\",props,[React.createElement(\"style\",{\"key\":0},\".st0{fill:#0f482a}\"),React.createElement(\"path\",{\"d\":\"M19.7 18.3l-5.4-5.4C15.4 11.5 16 9.8 16 8c0-4.4-3.6-8-8-8S0 3.6 0 8s3.6 8 8 8c1.8 0 3.5-.6 4.9-1.7l5.4 5.4c.2.2.5.3.7.3s.5-.1.7-.3c.4-.4.4-1 0-1.4zM2 8c0-3.3 2.7-6 6-6s6 2.7 6 6-2.7 6-6 6-6-2.7-6-6z\",\"key\":1}),React.createElement(\"path\",{\"d\":\"M11 7H9V5c0-.6-.4-1-1-1s-1 .4-1 1v2H5c-.6 0-1 .4-1 1s.4 1 1 1h2v2c0 .6.4 1 1 1s1-.4 1-1V9h2c.6 0 1-.4 1-1s-.4-1-1-1z\",\"key\":2})]);\n}\n\nZoom.defaultProps = {\"version\":\"1.1\",\"x\":\"0\",\"y\":\"0\",\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\",\"xmlSpace\":\"preserve\"};\n\nmodule.exports = Zoom;\n\nZoom.default = Zoom;\n","module.exports = \".error-page {\\r\\n font-family: Verdana, sans-serif;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n height: 100vh;\\r\\n padding: 40px;\\r\\n background-color: #eef6f5;\\r\\n box-sizing: border-box;\\r\\n}\\r\\n\\r\\n.error-page h1 {\\r\\n margin-top: 0;\\r\\n margin-bottom: 20px;\\r\\n text-align: center;\\r\\n}\\r\\n\\r\\n.error-page p {\\r\\n font-size: 1.2em;\\r\\n margin-top: 0;\\r\\n}\\r\\n\\r\\n.error-page-image {\\r\\n width: auto;\\r\\n margin-top: 40px;\\r\\n}\\r\\n\\r\\n.error-page a {\\r\\n color: #136e3e;\\r\\n font-size: 1.2em;\\r\\n}\\r\\n\\r\\n.error-page a svg {\\r\\n margin-left: 10px;\\r\\n}\\r\\n\"","/*\r\n * Minimal classList shim for IE 9\r\n * By Devon Govett\r\n * MIT LICENSE\r\n */\r\n\r\n// NOTE: https://gist.github.com/devongovett/1381839\r\n\r\nfunction activate() {\r\n if (\r\n !('classList' in document.documentElement) &&\r\n Object.defineProperty &&\r\n typeof HTMLElement !== 'undefined'\r\n ) {\r\n Object.defineProperty(HTMLElement.prototype, 'classList', {\r\n get: function() {\r\n var self = this;\r\n function update(fn) {\r\n return function(value) {\r\n var classes = self.className.split(/\\s+/),\r\n index = classes.indexOf(value);\r\n\r\n fn(classes, index, value);\r\n self.className = classes.join(' ');\r\n };\r\n }\r\n\r\n var ret = {\r\n add: update(function(classes, index, value) {\r\n ~index || classes.push(value);\r\n }),\r\n\r\n remove: update(function(classes, index) {\r\n ~index && classes.splice(index, 1);\r\n }),\r\n\r\n toggle: update(function(classes, index, value) {\r\n ~index ? classes.splice(index, 1) : classes.push(value);\r\n }),\r\n\r\n contains: function(value) {\r\n return !!~self.className.split(/\\s+/).indexOf(value);\r\n },\r\n\r\n item: function(i) {\r\n return self.className.split(/\\s+/)[i] || null;\r\n }\r\n };\r\n\r\n Object.defineProperty(ret, 'length', {\r\n get: function() {\r\n return self.className.split(/\\s+/).length;\r\n }\r\n });\r\n\r\n return ret;\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default {\r\n activate\r\n};\r\n","import classListPolyfill from './polyfills/class-list';\r\n\r\n/* NOTE: https://www.html5rocks.com/en/mobile/touchandmouse/\r\n First, you have to be careful when designing more advanced touch interactions:\r\n when the user uses a mouse it will respond via a click event, but when the user\r\n touches the screen both touch and click events will occur.\r\n\r\n For a single click the order of events is:\r\n\r\n 1. touchstart\r\n 2. touchmove\r\n 3. touchend\r\n 4. mouseover\r\n 5. mousemove\r\n 6. mousedown\r\n 7. mouseup\r\n 8. click\r\n*/\r\n\r\nfunction activate() {\r\n let touchEndHappened = false;\r\n\r\n classListPolyfill.activate();\r\n\r\n const onMouseDown = () => {\r\n if (touchEndHappened) {\r\n return;\r\n }\r\n\r\n document.documentElement.classList.add('mouse-user');\r\n document.documentElement.classList.add('no-touchevents');\r\n document.documentElement.classList.remove('touchevents');\r\n };\r\n\r\n const onTouchEnd = () => {\r\n touchEndHappened = true;\r\n setTimeout(() => {\r\n touchEndHappened = false;\r\n }, 100);\r\n };\r\n\r\n const onTouchStart = () => {\r\n document.documentElement.classList.add('mouse-user');\r\n document.documentElement.classList.add('touchevents');\r\n document.documentElement.classList.remove('no-touchevents');\r\n };\r\n\r\n document.addEventListener('touchstart', onTouchStart);\r\n document.addEventListener('touchend', onTouchEnd);\r\n document.addEventListener('mousedown', onMouseDown);\r\n\r\n const keyCodeWhiteList = [9, 33, 34, 35, 36, 37, 38, 39, 40];\r\n\r\n document.addEventListener('keydown', e => {\r\n if (keyCodeWhiteList.indexOf(e.which) !== -1) {\r\n document.documentElement.classList.remove('mouse-user');\r\n }\r\n });\r\n}\r\n\r\nexport default {\r\n activate\r\n};\r\n","import inputDetection from './input-detection';\r\n\r\ninputDetection.activate();\r\n"],"sourceRoot":""}