{"version":3,"sources":["webpack:///./javascript/_shared/components/brightCovePlayer/index.js","webpack:///./javascript/_shared/vendors/brightcove/index.js","webpack:///./javascript/_shared/components/Enews/index.js","webpack:///./javascript/bcom/modals/index.js","webpack:///./javascript/bcom/modals/components/SureFitModal/index.js","webpack:///./javascript/bcom/modals/components/EstimateModal/index.js","webpack:///./javascript/_shared/ui-helpers/index.js","webpack:///./javascript/_shared/ui-helpers/schema.js"],"names":["BrightcovePlayer","props","accountId","classNames","playerId","productId","videoId","onSuccess","success","ref","updateCurrentBreakpoint","boundUpdateCurrentBreakpoint_","breakpoints","breakpoints_","player","player_","sendVideoEventAnalytics","eventName","thdAnalyticsEvent","category","primaryCategory","eventInfo","video","id","type","window","digitalData","page","pageInfo","pageType","ddoEventInit","one","on","large","breakpoint_","onFailure","failure","console","log","attrs","className","join","embedOptions","responsive","aspectRatio","maxWidth","propTypes","string","arrayOf","defaultProps","Brightcove","baseUrl","productBrand","url","this","fetch","crossDomain","response","json","data","count","videos","tagName","omsid","styled","peerDependencies","React","ReactDOM","App","mode","style","display","MicroApp","config","View","Name","Version","modals","Modals","defaultHeight","defaultWidth","state","content","hasMedia","hasVideo","height","modalToOpen","name","width","openModal","bind","closeModal","onLoad","document","addEventListener","e","obj","target","closest","matches","bc","injectVideo","videoName","videoOnly","term","getVideosByProductId","then","forEach","setState","catch","preventDefault","hash","getAttribute","querySelector","innerHTML","webFontsEvent","dispatchEvent","stopImmediatePropagation","axios","get","href","headers","definition","image","indexOf","capitalize","videoname","dataset","modalName","clickedObject","event","onload","title","parseInt","history","pushState","location","pathname","search","Fragment","isOpen","contentLabel","onRequestClose","closeTimeoutMS","onAfterOpen","overlayClassName","onClick","dangerouslySetInnerHTML","__html","globalConfig","brightcove","src","alt","Component","SureFitModal","prismicApi","html","output","res","refs","params","q","surefitObj","results","body","items","article","index","text","surefitContent","page_h1","hero_h2_subtitle","error","Modal","setAppElement","animateScrollLeft","pElement","finalLeft","element","left","scrollLeft","direction","setInterval","clearInterval","baseURL","protocol","host","breakpoint","getComputedStyle","getPropertyValue","replace","camelCaseToDash","str","toLowerCase","String","x","toUpperCase","debounce","callback","wait","immediate","timeout","callNow","next","apply","clearTimeout","setTimeout","getDevice","ua","navigator","userAgent","test","getDistanceFromTop","getBoundingClientRect","t","top","innerHeight","getQueryParams","stringToParse","lastIndexOf","substring","JSON","parse","key","value","decodeURIComponent","dollars","price","undefined","Intl","NumberFormat","currency","minimumFractionDigits","maximumFractionDigits","format","round","decimals","Number","Math","getOrientation","matchMedia","getParents","el","parentParam","parentSelector","parents","p","parentNode","o","push","getScript","source","container","getElementsByTagName","resolve","scripts","querySelectorAll","length","script","createElement","async","onreadystatechange","_","isAbort","readyState","setAttribute","appendChild","node","isLoaded","oldOnLoad","isIE11","MSInputMethodContext","documentMode","isInViewport","h","selector","matchesSelector","msMatchesSelector","mozMatchesSelector","webkitMatchesSelector","oMatchesSelector","call","smoothScroll","topOrLeft","horizontal","testSupportsSmoothScroll","supports","scrollTo","err","easingOutQuint","b","c","d","$t","hasNativeSmoothScroll","smoothScrollPolyfill","nodeParam","$node","startTime","Date","now","offset","gap","interrupt","cancel","cleanup","removeEventListener","passive","step","elapsed","requestAnimationFrame","scrollToSection","yOffset","to","yCoordinate","pageYOffset","behavior","scrollTillYouReachElement","elmnt","timeToCheck","numberOfTries","bounding","numTries","scrollIntoView","time","numberTries","throttle","func","delay","args","schemaBreadcrumbLDJSON","schemaBreadcrumbLDJSONScript","breadcrumbs","breadcrumbArray","map","i","crumb","position","item","itemListElement","schema"],"mappings":"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","file":"enews-b78ba52823f3c39e284b.js","sourcesContent":["/* eslint-disable no-underscore-dangle */\r\nimport ReactPlayerLoader from '@brightcove/react-player-loader';\r\nimport { arrayOf, string } from 'prop-types';\r\nimport React from 'react';\r\n\r\nconst BrightcovePlayer = (props) => {\r\n const { accountId, classNames, playerId, productId, videoId } = props;\r\n const onSuccess = (success) => {\r\n const { ref } = success;\r\n const { boundUpdateCurrentBreakpoint_: updateCurrentBreakpoint, breakpoints_: breakpoints, player_: player } = ref;\r\n const sendVideoEventAnalytics = (eventName) => {\r\n const thdAnalyticsEvent = {\r\n category: { primaryCategory: 'button submission' },\r\n eventInfo: { eventName },\r\n video: {\r\n id: videoId,\r\n type: window.digitalData.page.pageInfo.pageType,\r\n },\r\n };\r\n window.ddoEventInit(thdAnalyticsEvent);\r\n };\r\n\r\n player.one('play', () => sendVideoEventAnalytics('video start'));\r\n player.on('ended', () => sendVideoEventAnalytics('video complete'));\r\n\r\n window.updateCurrentBreakpoint = updateCurrentBreakpoint;\r\n updateCurrentBreakpoint(breakpoints.large);\r\n // eslint-disable-next-line no-underscore-dangle\r\n ref.breakpoint_ = breakpoints.large;\r\n };\r\n\r\n const onFailure = (failure) => {\r\n console.log(failure);\r\n };\r\n\r\n return (\r\n <ReactPlayerLoader\r\n accountId={accountId}\r\n productId={productId}\r\n playerId={playerId}\r\n onSuccess={onSuccess}\r\n onFailure={onFailure}\r\n attrs={{ className: classNames.join(' ') }}\r\n videoId={videoId}\r\n embedOptions={{ responsive: { aspectRatio: '16:9', maxWidth: '1500px' } }}\r\n />\r\n );\r\n};\r\n\r\nBrightcovePlayer.propTypes = {\r\n accountId: string,\r\n classNames: arrayOf(string),\r\n playerId: string,\r\n productId: string,\r\n videoId: string,\r\n};\r\n\r\nBrightcovePlayer.defaultProps = {\r\n accountId: '6248889401001',\r\n classNames: [],\r\n playerId: 'NFnZhnSNG',\r\n productId: null,\r\n videoId: null,\r\n};\r\n\r\nexport default BrightcovePlayer;\r\n","/* eslint-disable */\r\nclass Brightcove {\r\n constructor() {}\r\n\r\n baseUrl = '/api/brightcove/videos';\r\n\r\n async getVideosByProductBrand(productBrand) {\r\n const url = `${this.baseUrl}?limit=100&q=product_brand:${productBrand}`;\r\n const response = await fetch(url, {\r\n crossDomain: true,\r\n });\r\n const data = await response.json();\r\n const { count, videos } = data;\r\n\r\n return (count > 0) ? videos : null; \r\n }\r\n\r\n async getVideosByProductId(productId) {\r\n const url = `${this.baseUrl}?limit=100&q=product_id:${productId}`;\r\n const response = await fetch(url, {\r\n crossDomain: true,\r\n });\r\n\r\n const data = await response.json();\r\n const { count, videos } = data;\r\n\r\n return (count > 0) ? videos : null; \r\n }\r\n\r\n async getVideosByTag(tagName) {\r\n const url = `${this.baseUrl}?limit=100&q=tags:${tagName}`;\r\n const response = await fetch(url, {\r\n crossDomain: true,\r\n });\r\n const data = await response.json();\r\n const { count, videos } = data;\r\n\r\n return (count > 0) ? videos : null; \r\n }\r\n\r\n async getVideosByOMSID(omsid) {\r\n const url = `${this.baseUrl}?limit=100&q=omsid:${omsid}`;\r\n const response = await fetch(url, {\r\n crossDomain: true,\r\n });\r\n const data = await response.json();\r\n const { count, videos } = data;\r\n\r\n return (count > 0) ? videos : null; \r\n }\r\n\r\n async getVideoByVideoId(videoId) {\r\n const url = `${this.baseUrl}?limit=100&q=id:${videoId}`;\r\n const response = await fetch(url, {\r\n crossDomain: true,\r\n });\r\n const data = await response.json();\r\n const { count, videos } = data;\r\n\r\n return (count > 0) ? videos : null; \r\n }\r\n}\r\n\r\nexport default Brightcove;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { string } from 'prop-types';\r\nimport { MicroApp, peerDependencies } from '@gcc/autobahn-micro-app';\r\nimport * as styled from 'styled-components';\r\n\r\n// Expose micro app peer dependencies.\r\npeerDependencies(React, ReactDOM, styled);\r\n\r\nconst App = ({ mode }) => (\r\n <div style={{ display: 'none' }}>\r\n <MicroApp\r\n config={{\r\n View: {\r\n Name: 'newsletter-sign-up',\r\n Version: '0.3.299',\r\n },\r\n mode,\r\n }}\r\n />\r\n </div>\r\n);\r\n\r\nApp.propTypes = {\r\n mode: string,\r\n};\r\n\r\nApp.defaultProps = {\r\n mode: 'light',\r\n};\r\n\r\nexport default App;\r\n","/* eslint-disable react/no-danger */\r\nimport React, { Component, Fragment } from 'react';\r\nimport { capitalize } from 'ui-helpers';\r\nimport axios from 'axios';\r\nimport Brightcove from 'vendors/brightcove';\r\nimport BrightcovePlayer from '_shared/components/brightCovePlayer';\r\nimport Modal from 'react-modal';\r\nimport SureFitModal from './components/SureFitModal/';\r\nimport EstimateModal from './components/EstimateModal/';\r\n\r\nconst modals = {\r\n DICTIONARY_TERM: 'dictionary-term',\r\n ESTIMATE: 'estimate',\r\n INLINE: 'inline',\r\n BRIGHTCOVE: 'brightcove',\r\n NONE: '',\r\n SUREFIT: 'sureFit',\r\n};\r\n\r\nclass Modals extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.defaultHeight = 400;\r\n this.defaultWidth = 600;\r\n this.state = {\r\n content: null,\r\n hasMedia: false,\r\n hasVideo: false,\r\n height: this.defaultHeight,\r\n modalToOpen: modals.NONE,\r\n name: '',\r\n width: this.defaultWidth,\r\n videoId: '',\r\n };\r\n this.openModal = this.openModal.bind(this);\r\n this.closeModal = this.closeModal.bind(this);\r\n this.onLoad = this.onLoad.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n document.addEventListener('click', (e) => {\r\n let obj = e.target;\r\n if (obj.closest('.dictionary-term')) {\r\n obj = !obj.matches('.dictionary-term') ? obj.closest('.dictionary-term') : obj;\r\n } else if (obj.closest('.video-click')) {\r\n obj = !obj.matches('.video-click') ? obj.closest('.video-click') : obj;\r\n }\r\n const bc = new Brightcove();\r\n const injectVideo = (videoName, videoOnly = true, term = '') =>\r\n bc\r\n .getVideosByProductId(videoName)\r\n .then((videos) =>\r\n videos.forEach((video) => {\r\n const { name, id } = video;\r\n if (!videoOnly) {\r\n this.setState({\r\n name,\r\n videoId: id,\r\n });\r\n this.openModal(modals.DICTIONARY_TERM, obj);\r\n } else {\r\n this.setState({\r\n name,\r\n videoId: id,\r\n });\r\n this.openModal(modals.BRIGHTCOVE, obj);\r\n }\r\n })\r\n )\r\n .catch(() => {\r\n if (term) {\r\n this.setState({\r\n videoId: '',\r\n name: term,\r\n });\r\n this.openModal(modals.DICTIONARY_TERM, obj);\r\n } else {\r\n this.setState({\r\n videoId: '',\r\n name: term,\r\n });\r\n this.openModal(modals.BRIGHTCOVE, obj);\r\n }\r\n });\r\n\r\n if (obj.matches('[data-action=\"close-modal\"]')) {\r\n this.closeModal();\r\n return;\r\n }\r\n\r\n if (obj.matches('[data-type=\"inline-modal\"]')) {\r\n e.preventDefault();\r\n const hash = obj.getAttribute('href');\r\n const content = document.querySelector(hash).innerHTML;\r\n this.setState({\r\n content,\r\n });\r\n const { webFontsEvent } = window;\r\n window.dispatchEvent(webFontsEvent);\r\n this.openModal(modals.INLINE);\r\n } else if (obj.matches('[data-type=\"iframe\"]')) {\r\n e.preventDefault();\r\n const href = obj.getAttribute('href');\r\n const content = `<iframe src=\"${href}\" width=\"100%\" height=\"100%\"></iframe>`;\r\n this.setState({\r\n content,\r\n });\r\n const { webFontsEvent } = window;\r\n window.dispatchEvent(webFontsEvent);\r\n this.openModal(modals.INLINE);\r\n } else if (obj.closest('.dictionary-term') || obj.closest('.video-click')) {\r\n // TODO: the .video-click added via admin (site product level) should be replaced with:\r\n // <a href={link to the video in liveclicker} class=\"dictionary-term\" data-width=\"600\" data-height=\"400\" data-videoname={videoCodeInLiveClicker}>{Term}</a>\r\n e.preventDefault();\r\n e.stopImmediatePropagation();\r\n if (obj.matches('[href^=\"/DictionaryManagement\"]')) {\r\n axios\r\n .get(obj.href, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n .then(({ data }) => {\r\n const { term, definition, video } = data;\r\n let { image } = data;\r\n // This is the hash code of the \"not available\" image\r\n if (image && image.indexOf('c4a3dd83-7bba-e311-a64d-84df7b46b4ac') >= 0) {\r\n image = null;\r\n }\r\n const name = capitalize(term);\r\n this.setState({\r\n content: definition,\r\n hasMedia: !!video || !!image,\r\n hasVideo: !!video,\r\n image,\r\n name,\r\n });\r\n this.openModal(modals.DICTIONARY_TERM, obj);\r\n if (video) {\r\n injectVideo(video, false);\r\n }\r\n });\r\n } else if (obj.matches('[data-videoname]')) {\r\n const { videoname } = obj.dataset;\r\n injectVideo(videoname, true);\r\n }\r\n }\r\n });\r\n }\r\n\r\n onLoad() {\r\n const { onLoad } = this.state;\r\n if (typeof window[onLoad] === 'function') {\r\n window[onLoad]();\r\n }\r\n }\r\n\r\n openModal(modalName, obj) {\r\n const clickedObject = obj || event.target;\r\n const height = clickedObject.dataset.height || this.state.height;\r\n const onLoad = clickedObject.dataset.onload || this.state.onload;\r\n const title = clickedObject.dataset.title || this.state.title;\r\n const width = clickedObject.dataset.width || this.state.width;\r\n this.setState({\r\n height: parseInt(height, 10),\r\n modalToOpen: modalName,\r\n onLoad,\r\n title,\r\n width: parseInt(width, 10),\r\n });\r\n }\r\n\r\n closeModal() {\r\n history.pushState('', document.title, window.location.pathname + window.location.search);\r\n this.setState({\r\n height: this.defaultHeight,\r\n modalToOpen: modals.NONE,\r\n title: '',\r\n width: this.defaultWidth,\r\n videoId: '',\r\n });\r\n }\r\n\r\n render() {\r\n const { content, hasMedia, hasVideo, height, image, modalToOpen, name, width, title } = this.state;\r\n return (\r\n <Fragment>\r\n {modalToOpen && (\r\n <Modal\r\n isOpen\r\n contentLabel=\"Modal\"\r\n onRequestClose={this.closeModal}\r\n closeTimeoutMS={200}\r\n className=\"gcc-modal\"\r\n onAfterOpen={this.onLoad}\r\n overlayClassName=\"gcc-modal-overlay\"\r\n style={{\r\n content: {\r\n height,\r\n width,\r\n },\r\n }}\r\n >\r\n <header className=\"bb pa2 b--mid-gray flex items-start justify-between flex-shrink-0\">\r\n <h2 className=\"fw5 f5 ml2 h2 flex items-center\">{name}</h2>\r\n <button\r\n type=\"button\"\r\n className=\"f3 outline-0 pointer bn pa0 ma0 br-100 bn w2 h2 flex-shrink-0 flex items-center justify-center hover-bg-light-gray hover-blue\"\r\n onClick={this.closeModal}\r\n >\r\n <span className=\"material-icons\">clear</span>\r\n </button>\r\n </header>\r\n {modalToOpen === modals.SUREFIT && <SureFitModal />}\r\n {modalToOpen === modals.ESTIMATE && <EstimateModal />}\r\n {modalToOpen === modals.INLINE && (\r\n <div className=\"pa3 flex-auto overflow-y-auto\">\r\n <div className=\"h-100\" dangerouslySetInnerHTML={{ __html: content }} />\r\n </div>\r\n )}\r\n {modalToOpen === modals.BRIGHTCOVE && (\r\n <div className=\"flex-auto h-100 relative\">\r\n <BrightcovePlayer\r\n videoId={this.state.videoId}\r\n accountId={window.globalConfig.brightcove.accountId}\r\n playerId={window.globalConfig.brightcove.playerId}\r\n />\r\n </div>\r\n )}\r\n {modalToOpen === modals.DICTIONARY_TERM && (\r\n <div className=\"flex-auto h-100 relative\">\r\n <div className={`flex pa3 flex-auto ${hasVideo ? 'flex-wrap' : ''} overflow-y-auto h-100`}>\r\n {hasMedia && (\r\n <div className={`${hasVideo ? 'flex-auto w-100 w-60-ns' : 'mw4'}`}>\r\n {hasVideo && (\r\n <div className=\"aspect-ratio aspect-ratio--16x9 mb3 mb0-ns\">\r\n <div className=\"aspect-ratio--object cover\">\r\n <BrightcovePlayer\r\n videoId={this.state.videoId}\r\n accountId={window.globalConfig.brightcove.accountId}\r\n playerId={window.globalConfig.brightcove.playerId}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n {!hasVideo && <img src={image} alt={`${name}`} />}\r\n </div>\r\n )}\r\n <div className={`w-100 lh-copy ${hasMedia ? 'pl3-ns' : ''} ${hasVideo ? 'w-40-ns' : ''} `}>\r\n <h2 className=\"fw7 f5 f4-ns mb2 lh-title ttc\">{title}</h2>\r\n <div dangerouslySetInnerHTML={{ __html: content }} />\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </Modal>\r\n )}\r\n </Fragment>\r\n );\r\n }\r\n}\r\n\r\nexport default Modals;\r\n","/* eslint-disable react/no-danger */\r\nimport React, { Component } from 'react';\r\nimport Modal from 'react-modal';\r\nimport axios from 'axios';\r\n\r\nclass SureFitModal extends Component {\r\n constructor(props) {\r\n super(props);\r\n const {\r\n globalConfig: { prismicApi },\r\n } = window;\r\n this.prismicApi = prismicApi;\r\n\r\n this.state = {\r\n html: '',\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n let output = '';\r\n\r\n axios\r\n .get(this.prismicApi)\r\n .then((res) => {\r\n const { ref } = res.data.refs[0];\r\n return axios.get(`${this.prismicApi}/documents/search`, {\r\n params: {\r\n q: '[[at(my.contentpage.uid, \"surefit-guarantee-to-fit\")]]',\r\n ref,\r\n },\r\n });\r\n })\r\n .then((res) => {\r\n const surefitObj = res.data;\r\n surefitObj.results[0].data.body[0].items[0].article.forEach((obj, index) => {\r\n if (obj.type === 'paragraph') {\r\n output += `<p class=\"f6 f7-ns mb3 lh-copy\">${obj.text}</p>`;\r\n } else if (obj.type === 'list-item') {\r\n if (surefitObj.results[0].data.body[0].items[0].article[index - 1].type !== 'list-item') {\r\n output += '<ul class=\"f6 f7-ns ml4 mb3\">';\r\n }\r\n output += `<li class=\"mb2 lh-copy\">${obj.text}</li>`;\r\n if (\r\n surefitObj.results[0].data.body[0].items[0].article[index + 1] &&\r\n surefitObj.results[0].data.body[0].items[0].article[index + 1].type !== 'list-item'\r\n ) {\r\n output += '</ul>';\r\n }\r\n }\r\n });\r\n const surefitContent = `\r\n <div class=\"cf\">\r\n <div class=\"fl w-100 w-20-ns pt3 pv0-ns\">\r\n <div class=\"f1 w4 mb3 center\"\r\n style=\"background-image: url(/Content/images/Blinds.com/sprites-svg.svg);\r\n background-position: -74em -36em;\r\n background-repeat: no-repeat;\r\n background-size: 82.28571428571429em 43.857142857142854em;\r\n height: 86px;\"></div>\r\n <h2 class=\"f4 f6-ns mt2 tc lh-title\">${surefitObj.results[0].data.page_h1[0].text}</h2>\r\n </div>\r\n <div class=\"fl w-100 w-80-ns pl4-ns\">\r\n <h3 class=\"mb3 tc tl-ns lh-title f5\">${surefitObj.results[0].data.hero_h2_subtitle[0].text}</h3>\r\n ${output}\r\n </div>\r\n </div>\r\n `;\r\n this.setState({ html: surefitContent });\r\n })\r\n // eslint-disable-next-line no-console\r\n .catch((error) => console.log('SureFit Modal Error:', error));\r\n }\r\n\r\n render() {\r\n const { html } = this.state;\r\n return (\r\n <div className=\"pa3 flex-auto overflow-y-auto\">\r\n <div dangerouslySetInnerHTML={{ __html: html }} />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nModal.setAppElement('body');\r\n\r\nexport default SureFitModal;\r\n","import React from 'react';\r\nimport Modal from 'react-modal';\r\n\r\nconst EstimateModal = () => (\r\n <div className=\"pa3 flex-auto overflow-y-auto\">\r\n <div className=\"tc\">\r\n <h3 className=\"f2 fw3 tc sans-serif black mb3\">How it Works</h3>\r\n <div className=\"flex flex-wrap\">\r\n <div className=\"pa3 tc w-100 w-50-m w-25-l\">\r\n <img className=\"center h3\" src=\"/Content/Images/Blinds.com/Icon_Window.svg\" alt=\"\" />\r\n <p className=\"f4 tc pt3 ma2 dark-blue sans-serif\">Shop</p>\r\n <p className=\"tc f6 ma0 sans-serif lh-copy\">\r\n Browse our selection to find just\r\n <br /> what you're looking for.\r\n </p>\r\n </div>\r\n <div className=\"pa3 tc w-100 w-50-m w-25-l\">\r\n <img className=\"center h3\" src=\"/Content/Images/Blinds.com/Icon_MeasureTape.svg\" alt=\"\" />\r\n <p className=\"f4 tc pt3 ma2 dark-blue sans-serif\">Measure</p>\r\n <p className=\"helvetica tc f6 ma0 sans-serif lh-copy\">\r\n DIY measure your windows or\r\n <br />\r\n book a pro-measure appointment.\r\n </p>\r\n </div>\r\n <div className=\"pa3 tc w-100 w-50-m w-25-l\">\r\n <img className=\"center h3\" src=\"/Content/Images/Blinds.com/Icon_Truck.svg\" alt=\"\" />\r\n <p className=\"f4 tc pt3 ma2 dark-blue sans-serif\">Order</p>\r\n <p className=\"helvetica tc f6 ma0 sans-serif lh-copy\">\r\n Customize and order the perfect fit\r\n <br />\r\n for your window coverings.\r\n </p>\r\n </div>\r\n <div className=\"pa3 tc w-100 w-50-m w-25-l\">\r\n <img className=\"center h3\" src=\"/Content/Images/Blinds.com/Icon_Wrench.svg\" alt=\"\" />\r\n <p className=\"f4 tc pt3 ma2 dark-blue sans-serif\">Install</p>\r\n <p className=\"helvetica tc f6 ma0 sans-serif lh-copy\">\r\n DIY install or book an installation\r\n <br />\r\n appointment once products arrive.\r\n </p>\r\n </div>\r\n </div>\r\n <div className=\"mt3 cf flex justify-center\">\r\n <a className=\"gcc-btn gcc-btn-secondary\" href=\"/estimatebuilder/new\">\r\n Get Started\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n);\r\n\r\nModal.setAppElement('body');\r\n\r\nexport default EstimateModal;\r\n","/* eslint-disable func-names */\r\nimport Intl from 'intl';\r\nimport 'intl/locale-data/jsonp/en-US';\r\nimport { schemaBreadcrumbLDJSON, schemaBreadcrumbLDJSONScript } from './schema';\r\n\r\n/* eslint-disable no-multi-assign */\r\nconst animateScrollLeft = (pElement, finalLeft) => {\r\n const element = pElement;\r\n let id;\r\n let left = element.scrollLeft;\r\n const direction = finalLeft > left ? 'right' : 'left';\r\n const scrollLeft = () => {\r\n if (direction === 'left') {\r\n left -= 15;\r\n } else {\r\n left += 15;\r\n }\r\n element.scrollLeft = left;\r\n if (direction === 'left') {\r\n if (left <= finalLeft) {\r\n clearInterval(id);\r\n }\r\n } else if (left >= finalLeft) {\r\n clearInterval(id);\r\n }\r\n };\r\n id = setInterval(scrollLeft, 10);\r\n};\r\n\r\nconst baseURL = typeof window !== 'undefined' ? `${window.location.protocol}//${window.location.host}` : '';\r\n\r\nconst breakpoint = () =>\r\n typeof window === 'undefined'\r\n ? 'small'\r\n : window.getComputedStyle(document.querySelector('body'), ':before').getPropertyValue('content').replace(/\"/g, '');\r\n\r\nconst camelCaseToDash = (str) => str.replace(/([a-zA-Z])(?=[A-Z])/g, '$1-').toLowerCase();\r\n\r\nconst capitalize = (str) =>\r\n String(str)\r\n .toLowerCase()\r\n .replace(/(^| )(\\w)/g, (x) => x.toUpperCase());\r\n\r\nconst debounce = (callback, wait, immediate = false) => {\r\n let timeout = null;\r\n return () => {\r\n const callNow = immediate && !timeout;\r\n // eslint-disable-next-line no-undef\r\n const next = () => callback.apply(this, arguments);\r\n clearTimeout(timeout);\r\n timeout = setTimeout(next, wait);\r\n if (callNow) {\r\n next();\r\n }\r\n };\r\n};\r\n\r\nconst getDevice = () => {\r\n const ua = typeof navigator === 'undefined' ? '' : navigator.userAgent.toLowerCase();\r\n if (\r\n /(ipad|tablet|(android(?!.*mobile))|(windows(?!.*phone)(.*touch))|kindle|playbook|silk|(puffin(?!.*(IP|AP|WP))))/.test(\r\n ua\r\n )\r\n ) {\r\n return 'tablet';\r\n } else if (\r\n /(mobi|ipod|phone|blackberry|opera mini|fennec|minimo|symbian|psp|nintendo ds|archos|skyfire|puffin|blazer|bolt|gobrowser|iris|maemo|semc|teashark|uzard)/.test(\r\n ua\r\n )\r\n ) {\r\n return 'phone';\r\n }\r\n return 'desktop';\r\n};\r\n\r\nconst getDistanceFromTop = (e, { top: t } = e.getBoundingClientRect()) => t - innerHeight;\r\n\r\nconst getQueryParams = (stringToParse = window.location.search.lastIndexOf('?') + 1) => {\r\n const search = stringToParse.substring(stringToParse.lastIndexOf('?') + 1);\r\n return JSON.parse(`{\"${search.replace(/&/g, '\",\"').replace(/=/g, '\":\"')}\"}`, (key, value) =>\r\n key === '' ? value : decodeURIComponent(value)\r\n );\r\n};\r\n\r\nconst dollars = (price) => {\r\n if (price === undefined) return '';\r\n return new Intl.NumberFormat('en', {\r\n style: 'currency',\r\n currency: 'USD',\r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 2,\r\n }).format(price);\r\n};\r\n\r\nconst round = (value, decimals) => Number(`${Math.round(`${value}e${decimals}`)}e-${decimals}`);\r\n\r\nconst getOrientation = () => {\r\n if (typeof window === 'undefined') {\r\n return '';\r\n } else if (window.matchMedia('(orientation: landscape)').matches) {\r\n return 'landscape';\r\n }\r\n return 'portrait';\r\n};\r\n\r\nconst getParents = (el, parentParam) => {\r\n let parentSelector = parentParam;\r\n if (parentSelector === undefined) {\r\n parentSelector = document;\r\n }\r\n const parents = [];\r\n let p = el.parentNode;\r\n while (p !== parentSelector) {\r\n const o = p;\r\n parents.push(o);\r\n p = o.parentNode;\r\n }\r\n parents.push(parentSelector);\r\n return parents;\r\n};\r\n\r\nconst getScript = (source, callback, container = document.getElementsByTagName('head')[0]) =>\r\n new Promise((resolve) => {\r\n const scripts = document.querySelectorAll(`script[src=\"${source}\"]`);\r\n if (scripts.length < 1) {\r\n let script = document.createElement('script');\r\n script.async = 1;\r\n script.onload = script.onreadystatechange = (_, isAbort) => {\r\n if (isAbort || !script.readyState || /loaded|complete/.test(script.readyState)) {\r\n script.onload = script.onreadystatechange = null;\r\n script.setAttribute('data-loadstate', 'loaded');\r\n script = undefined;\r\n if (!isAbort) {\r\n if (callback) {\r\n callback();\r\n }\r\n resolve();\r\n }\r\n }\r\n };\r\n script.src = source;\r\n container.appendChild(script);\r\n } else {\r\n const node = scripts[0];\r\n const isLoaded = node.getAttribute('data-loadstate');\r\n if (isLoaded && isLoaded === 'loaded') {\r\n if (callback) {\r\n callback();\r\n }\r\n resolve();\r\n } else {\r\n const oldOnLoad = node.onload;\r\n node.onload = (_, isAbort) => {\r\n oldOnLoad(_, isAbort);\r\n if (!isAbort) {\r\n if (callback) {\r\n callback();\r\n }\r\n resolve();\r\n }\r\n };\r\n }\r\n }\r\n });\r\n\r\nconst isIE11 = typeof window === 'undefined' ? false : !!window.MSInputMethodContext && !!document.documentMode;\r\n\r\nconst isInViewport = (e, { top: t, height: h } = e.getBoundingClientRect()) => t <= innerHeight && t + h >= 0;\r\n\r\nconst matches = (el, selector) =>\r\n (\r\n el.matches ||\r\n el.matchesSelector ||\r\n el.msMatchesSelector ||\r\n el.mozMatchesSelector ||\r\n el.webkitMatchesSelector ||\r\n el.oMatchesSelector\r\n ).call(el, selector);\r\n\r\nconst smoothScroll = (node, topOrLeft = 'top', horizontal = false) => {\r\n const testSupportsSmoothScroll = () => {\r\n let supports = false;\r\n try {\r\n const div = document.createElement('div');\r\n div.scrollTo({\r\n top: 0,\r\n get behavior() {\r\n supports = true;\r\n return 'smooth';\r\n },\r\n });\r\n // eslint-disable-next-line no-empty\r\n } catch (err) {}\r\n return supports;\r\n };\r\n const easingOutQuint = (x, t, b, c, d) => {\r\n // via https://github.com/tootsuite/mastodon/blob/f59ed3a4fafab776b4eeb92f805dfe1fecc17ee3/app/javascript/mastodon/scroll.js\r\n let $t = t;\r\n return c * (($t = $t / d - 1) * $t * $t * $t * $t + 1) + b;\r\n };\r\n const hasNativeSmoothScroll = testSupportsSmoothScroll();\r\n const smoothScrollPolyfill = (nodeParam, key, target) => {\r\n const $node = nodeParam;\r\n const startTime = Date.now();\r\n const offset = node[key];\r\n const gap = target - offset;\r\n const duration = 1000;\r\n let interrupt = false;\r\n\r\n const cancel = () => {\r\n interrupt = true;\r\n // eslint-disable-next-line no-use-before-define\r\n cleanup();\r\n };\r\n\r\n const cleanup = () => {\r\n $node.removeEventListener('wheel', cancel);\r\n $node.removeEventListener('touchstart', cancel);\r\n };\r\n\r\n const step = () => {\r\n const elapsed = Date.now() - startTime;\r\n const percentage = elapsed / duration;\r\n if (interrupt) {\r\n return;\r\n }\r\n if (percentage > 1) {\r\n cleanup();\r\n return;\r\n }\r\n $node[key] = easingOutQuint(0, elapsed, offset, gap, duration);\r\n requestAnimationFrame(step);\r\n };\r\n $node.addEventListener('wheel', cancel, { passive: true });\r\n $node.addEventListener('touchstart', cancel, { passive: true });\r\n step();\r\n return cancel;\r\n };\r\n if (hasNativeSmoothScroll) {\r\n return node.scrollTo({\r\n [horizontal ? 'left' : 'top']: topOrLeft,\r\n behavior: 'smooth',\r\n });\r\n }\r\n return smoothScrollPolyfill(node, horizontal ? 'scrollLeft' : 'scrollTop', topOrLeft);\r\n};\r\n\r\nconst scrollToSection = (hash, yOffset = 0) => {\r\n const to = document.querySelector(hash);\r\n if (to) {\r\n // to.scrollIntoView({ behavior: 'smooth' });\r\n const yCoordinate = to.getBoundingClientRect().top + window.pageYOffset;\r\n window.scrollTo({\r\n top: yCoordinate + yOffset,\r\n behavior: 'smooth',\r\n });\r\n }\r\n};\r\n\r\nconst scrollTillYouReachElement = (elmnt, timeToCheck, numberOfTries) => {\r\n const bounding = elmnt.getBoundingClientRect();\r\n let numTries = numberOfTries || 0;\r\n if (!(bounding.top >= 0 && bounding.top <= 1)) {\r\n elmnt.scrollIntoView();\r\n numTries += 1;\r\n // Check recursively and scroll till the element appears in the view port. Check three times and quit.\r\n if (numTries <= 3) {\r\n setTimeout(\r\n (element, time, numberTries) => {\r\n scrollTillYouReachElement(element, time, numberTries);\r\n },\r\n timeToCheck || 800,\r\n elmnt,\r\n timeToCheck,\r\n numTries\r\n );\r\n }\r\n }\r\n};\r\n\r\nconst throttle = (func, delay = 500) => {\r\n let timeout = null;\r\n return function (...args) {\r\n if (!timeout) {\r\n timeout = setTimeout(() => {\r\n func.call(this, ...args);\r\n timeout = null;\r\n }, delay);\r\n }\r\n };\r\n};\r\n\r\nexport {\r\n animateScrollLeft,\r\n baseURL,\r\n breakpoint,\r\n camelCaseToDash,\r\n capitalize,\r\n debounce,\r\n dollars,\r\n getDevice,\r\n getDistanceFromTop,\r\n getOrientation,\r\n getQueryParams,\r\n getParents,\r\n getScript,\r\n isIE11,\r\n isInViewport,\r\n matches,\r\n round,\r\n schemaBreadcrumbLDJSON,\r\n schemaBreadcrumbLDJSONScript,\r\n scrollToSection,\r\n smoothScroll,\r\n scrollTillYouReachElement,\r\n throttle,\r\n};\r\n","export const schemaBreadcrumbLDJSON = (breadcrumbs) => {\r\n const breadcrumbArray = breadcrumbs.map(({ text, url }, i) => {\r\n const crumb = {\r\n '@type': 'ListItem',\r\n position: i + 1,\r\n name: text,\r\n };\r\n if (url) crumb.item = `${url}`;\r\n\r\n return crumb;\r\n });\r\n const schema = JSON.stringify({\r\n '@context': 'https://schema.org',\r\n '@type': 'BreadcrumbList',\r\n itemListElement: breadcrumbArray,\r\n });\r\n\r\n return schema;\r\n};\r\n\r\nexport const schemaBreadcrumbLDJSONScript = (breadcrumbs) => {\r\n const schema = schemaBreadcrumbLDJSON(breadcrumbs);\r\n const script = document.createElement('script');\r\n script.type = 'application/ld+json';\r\n script.innerHTML = schema;\r\n\r\n return script;\r\n};\r\n"],"sourceRoot":""}