\n\t\t\t\t\t\n\t\t\t\t\t\t Analytics.logCheckoutPressed(false)}>\n\t\t\t\t\t\t\tPay In Full: {Utils.formatAsCurrency(this.props.fullAmount)}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t );\n };\n\n renderErrorMessage = () => {\n \treturn (\n\t\t\t\n\t\t\t\t{this.props.invalidReason}\n\t\t\t\n\t );\n };\n\n submitPaymentDeposit = (token) => {\n \tthis.submitPayment(token, true);\n\t\t};\n\n submitPaymentFullAmount = (token) => {\n\t\t\tthis.submitPayment(token, false);\n\t\t};\n\n submitPayment = (token, isDeposit) => {\n \tconsole.log(\"TOKEN\");\n \tconsole.log(token);\n const params = {\n\t stripeToken: token.id,\n\t stripeEmail: token.email,\n\t stripeBillingName: token.card.name,\n\t\t\t\t\tstripeBillingAddressStreet: token.card.address_line1,\n\t stripeBillingAddressCity: token.card.address_city,\n\t\t\t\t\tisDeposit: isDeposit,\n\t\t\t\t\tisReorder: true,\n\t\t\t\t\toptions: this.props.options\n };\n\n\t\t\tthis.props.submittingStatusChanged(true);\n\n\t\t\tAnalytics.logCheckoutSubmitted();\n\n\t axios.post(PAYMENT_SERVER_URL, params)\n\t\t\t\t.then(this.successPayment)\n\t\t\t\t.catch(this.errorPayment);\n };\n\n successPayment = () => {\n\t\t\tAnalytics.logCheckoutSuccess(this.tokenId, this.isDeposit, this.amountPaid);\n\t\t\tthis.props.submittingStatusChanged(false);\n\t window.location.href = \"https://seasonalsetter.com#thankyou\";\n };\n\n errorPayment = (error) => {\n \tconsole.log(\"Error with payment:\");\n \tconsole.log(error);\n\t\t\tAnalytics.logCheckoutFailed(error);\n\t\t\tthis.props.submittingStatusChanged(false);\n \talert(\"Oops! Your payment didn't go through. Please contact us directly at: peter@seasonalsetter.com\");\n };\n}\n\nCheckoutButton.propTypes = {\n\tsubmittingStatusChanged: PropTypes.func.isRequired,\n\toptions: PropTypes.object.isRequired,\n\tsetupDate: momentPropTypes.momentObj,\n\tfullAmount: PropTypes.number.isRequired,\n\tdeposit: PropTypes.number.isRequired,\n\tinvalidReason: PropTypes.string.isRequired\n};\n\nexport default CheckoutButton;\n","export const ScreenSize = {\n\tphone: 550,\n\ttablet: 800\n};\n","import React, {Component} from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport { Terms } from '../constants/terms';\nimport ReactMarkdown from \"react-markdown\";\nimport {ScreenSize} from \"../constants/screensize\";\n\nconst Container = styled.div`\n\twidth: 90%;\n\tmax-width: 800px;\n\tmargin: 50px auto;\n`;\n\nconst TermsContainer = styled.div`\n\theight: 320px;\n\toverflow: scroll;\n\tborder: 1px solid grey;\n\tbackground: white;\n\tpadding: 20px;\n\ttext-align: justify;\n\twhite-space: pre-line;\n`;\n\nconst CheckboxContainer = styled.div`\n\tdisplay: flex;\n\tpadding: 40px 0;\n\tfont-size: larger;\n\talign-items: center;\n\t\n\t:hover {\n\t\tcursor: pointer;\n\t}\n`;\n\nconst Input = styled.input`\n\twidth: 30px;\n\ttransform: scale(2);\n\t\n\t@media (max-width: ${ScreenSize.tablet}px) {\n\t\twidth: 60px;\n\t}\n`;\n\nconst Label = styled.div`\n\tpadding-left: 20px;\n`;\n\nclass TermsAndConditions extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.inputRef = React.createRef();\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t this.props.onCheckChanged(e.target.checked)}/>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n\n\tonClick = (e) => {\n\t\tconsole.log(!this.inputRef.current.checked);\n\t\tthis.props.onCheckChanged(!this.inputRef.current.checked);\n\t\te.stopPropagation();\n\t};\n}\n\nTermsAndConditions.propTypes = {\n\taccepted: PropTypes.bool.isRequired,\n\tonCheckChanged: PropTypes.func.isRequired\n};\n\nTermsAndConditions.defaultProps = {\n\taccepted: false\n};\n\nexport default TermsAndConditions;\n","export const Terms = \"# Terms and Conditions \\n## 1. SCOPE OF WORK.\\n\" +\n\"Scope will be determined by package and options purchased. Client will be referred to as the person purchasing the package. Client’s property (or Recipient's property) shall be decorated using the scope of each package as per purchase. By agreeing to these terms and conditions, the client confirms acceptance of scope of work and all articles within.\\n\" +\n\"## 2. TERM.\\n\" +\n\"The term of this Agreement is for the winter holiday season of 2023 from the date of its execution by Seasonal Setter or until the completion of the work described in any Statement of Work, whichever is later. Specific set-up date will be determined by online calendar at time of purchase.\\n\" +\n\"## 3. PAYMENT.\\n\" +\n\"Client will have the option to pay either 20% of the total cost, or total cost of purchase. Seasonal Setter will charge the remaining balance using the same payment method within 5 calendar days after setup date. It is understood that payment to Seasonal Setter for services rendered shall be made in full as agreed, without any deductions of any kind whatsoever, in conformity with Seasonal Setter’s status as an independent contractor. Payment method will be through debit/credit transaction, unless otherwise specified prior to the time of purchase.\\n\" +\n\"## 4. ACCEPTANCE.\\n\" +\n\"The Decorations, as defined in each Statement of Work, shall be deemed accepted by Client upon completion of the following acceptance test: (a) immediately upon receipt of said Decorations, Client shall promptly, but in any event not more than 5 business days, perform testing of the Decorations to confirm that the Decorations perform in accordance with the documentation or other standards applicable thereto as set forth in the applicable Statement of Work; (b) notification of nonconformities in regards to decorations setup or product functionality to be corrected must before December 15th, 2023. Any such written statement of nonconformities shall provide sufficient detail to enable Seasonal Setter to remedy the failure to conform to the completion criteria contained in the written statement. Unless otherwise agreed to in writing by the parties, Seasonal Setter will redeliver corrected Decorations to Client within a reasonable amount of time after receipt of such statement of nonconformities or by December 15th, 2022. If Client fails to provide a written acceptance or a written statement of nonconformities about corrected decorations within the 5 days, the Deliverables shall be deemed accepted by Client.\\n\" +\n\"## 5. LIMITATION OF LIABILITY.\\n\" +\n\"Seasonal Setters LLC will be liable for any damages caused during the set-up or take-down of equipment (decorations) to the Client’s person or property. Seasonal Setter is also responsible to ensure all decorations that are set-up initially work and are securely fastened properly. Seasonal Setter will be responsible to make sure that any client concerns (such as burnt-out light bulbs) are addressed before December 20th, 2023 (weather permitting). Seasonal Setters LLC is NOT liable for any damages caused by electrical work, including but not limited to; fires, broken light bulb glass, power surges, etc.. Client is responsible for ensuring the electrical system on property is able to handle the electrical load, and has the sole responsibility to make sure it is able to provide proper power. Similarly, Seasonal Setter is not liable for providing any electricity to any equipment set up or provided. Client is fully responsible for any equipment that Seasonal Setter sets up during the duration of rental and/or service contract. Client will be liable for any lost or stolen equipment owned by Seasonal Setter during the duration of rental up until the date of actual teardown of decorations by Seasonal Setter.\\n\" +\n\"## 6. PROPERTY & EQUIPMENT POLICIES\\n\" +\n\"Client may not transfer, sell, or otherwise dispose of any Seasonal Setter equipment without the prior written consent of Seasonal Setter. Client will not alter, modify, add or subtract any form of adhesive, wire, hooks, clips, or any other items to the decorations or lights set up by Seasonal Setter. Client is responsible to notify Seasonal Setter if decorations are unsatisfactory or if they have a concern. This rental gives no title or ownership rights in related property to Client.\\n\" +\n\"## 7. ENTIRE AGREEMENT.\\n\" +\n\"This Agreement sets forth the entire agreement between Client and Seasonal Setter as to its subject matter. None of the terms of this Business Contract shall be amended except in writing signed by both parties unless otherwise communicated and agreed upon in writing.\\n\" +\n\"## 8. FORCE MAJEURE.\\n\" +\n\"Neither Client nor Seasonal Setter shall be liable for failure of, or delay in performing obligations set forth in this Agreement, and neither shall be deemed in breach of its obligations, if such failure or delay is due to natural disasters or any causes reasonably beyond the control of Client or Provider. This Agreement shall be construed in accordance with the laws of the State of OHIO. IN WITNESS WHEREOF the parties have caused this Business Contract to be executed and delivered by their duly authorized representatives.\\n\" +\n\"## 9. CANCELLATION POLICY.\\n\" +\n\"Seasonal Setter reserves the right to cancel any scope of work for a Client. If Seasonal Setter cancels any scope of work, the Client will be reimbursed for the work that was not done. Full cancellations initiated by Seasonal Setter will get a full refund. Reasons include but are not limited to: Safety risk, Order is too far outside of the Columbus Region, Irreconcilable differences, etc. Exclusions to reimbursement may apply if there are damages done to Seasonal Setter property. Client may also initiate a cancellation but could be subject to a restocking, order fee, or other penalties from Seasonal Setter within a reasonable manner.\\n\" +\n\"## 10. USE OF PHOTOGRAPHY.\\n\" +\n\"Client agrees to allow Seasonal Setter to take and use photos of the client's home in regard to showing the display and work that Seasonal Setter has displayed. Any exception of this must be documented in writing by the client and received by Seasonal Setter prior to the installation of the lights.\\n\" +\n\"## 11. LIMITS OF ORDERING.\\n\" +\n\"If the Client is purchasing a package as a gift to another party, referred to as Recipient, Seasonal Setter must be fully informed of this action and must have written permission from Recipient and the Homeowner of the Address being decorated. This must be disclosed at the time of ordering.\";\n","const calendarLabel = 'Calendar';\nconst roleDescription = 'datepicker';\nconst closeDatePicker = 'Close';\nconst focusStartDate = 'Interact with the calendar and add the check-in date for your trip.';\nconst clearDate = 'Clear Date';\nconst clearDates = 'Clear Dates';\nconst jumpToPrevMonth = 'Move backward to switch to the previous month.';\nconst jumpToNextMonth = 'Move forward to switch to the next month.';\nconst keyboardShortcuts = 'Keyboard Shortcuts';\nconst showKeyboardShortcutsPanel = 'Open the keyboard shortcuts panel.';\nconst hideKeyboardShortcutsPanel = 'Close the shortcuts panel.';\nconst openThisPanel = 'Open this panel.';\nconst enterKey = 'Enter key';\nconst leftArrowRightArrow = 'Right and left arrow keys';\nconst upArrowDownArrow = 'up and down arrow keys';\nconst pageUpPageDown = 'page up and page down keys';\nconst homeEnd = 'Home and end keys';\nconst escape = 'Escape key';\nconst questionMark = 'Question mark';\nconst selectFocusedDate = 'Select the date in focus.';\nconst moveFocusByOneDay = 'Move backward (left) and forward (right) by one day.';\nconst moveFocusByOneWeek = 'Move backward (up) and forward (down) by one week.';\nconst moveFocusByOneMonth = 'Switch months.';\nconst moveFocustoStartAndEndOfWeek = 'Go to the first or last day of a week.';\nconst returnFocusToInput = 'Return to the date input field.';\nconst keyboardForwardNavigationInstructions = 'Navigate forward to interact with the calendar and select a date. Press the question mark key to get the keyboard shortcuts for changing dates.';\nconst keyboardBackwardNavigationInstructions = 'Navigate backward to interact with the calendar and select a date. Press the question mark key to get the keyboard shortcuts for changing dates.';\n\nconst chooseAvailableStartDate = ({ date }) => `Choose ${date} as your check-in date. It’s available.`;\nconst chooseAvailableEndDate = ({ date }) => `Choose ${date} as your check-out date. It’s available.`;\nconst chooseAvailableDate = ({ date }) => date;\nconst dateIsUnavailable = ({ date }) => `Not available. ${date}`;\nconst dateIsSelected = ({ date }) => `Selected. ${date}`;\nconst dateIsSelectedAsStartDate = ({ date }) => `Selected as start date. ${date}`;\nconst dateIsSelectedAsEndDate = ({ date }) => `Selected as end date. ${date}`;\n\nexport default {\n\tcalendarLabel,\n\troleDescription,\n\tcloseDatePicker,\n\tfocusStartDate,\n\tclearDate,\n\tclearDates,\n\tjumpToPrevMonth,\n\tjumpToNextMonth,\n\tkeyboardShortcuts,\n\tshowKeyboardShortcutsPanel,\n\thideKeyboardShortcutsPanel,\n\topenThisPanel,\n\tenterKey,\n\tleftArrowRightArrow,\n\tupArrowDownArrow,\n\tpageUpPageDown,\n\thomeEnd,\n\tescape,\n\tquestionMark,\n\tselectFocusedDate,\n\tmoveFocusByOneDay,\n\tmoveFocusByOneWeek,\n\tmoveFocusByOneMonth,\n\tmoveFocustoStartAndEndOfWeek,\n\treturnFocusToInput,\n\tkeyboardForwardNavigationInstructions,\n\tkeyboardBackwardNavigationInstructions,\n\n\tchooseAvailableStartDate,\n\tchooseAvailableEndDate,\n\tdateIsUnavailable,\n\tdateIsSelected,\n\tdateIsSelectedAsStartDate,\n\tdateIsSelectedAsEndDate,\n};\n\nexport const DateRangePickerPhrases = {\n\tcalendarLabel,\n\troleDescription,\n\tcloseDatePicker,\n\tclearDates,\n\tfocusStartDate,\n\tjumpToPrevMonth,\n\tjumpToNextMonth,\n\tkeyboardShortcuts,\n\tshowKeyboardShortcutsPanel,\n\thideKeyboardShortcutsPanel,\n\topenThisPanel,\n\tenterKey,\n\tleftArrowRightArrow,\n\tupArrowDownArrow,\n\tpageUpPageDown,\n\thomeEnd,\n\tescape,\n\tquestionMark,\n\tselectFocusedDate,\n\tmoveFocusByOneDay,\n\tmoveFocusByOneWeek,\n\tmoveFocusByOneMonth,\n\tmoveFocustoStartAndEndOfWeek,\n\treturnFocusToInput,\n\tkeyboardForwardNavigationInstructions,\n\tkeyboardBackwardNavigationInstructions,\n\tchooseAvailableStartDate,\n\tchooseAvailableEndDate,\n\tdateIsUnavailable,\n\tdateIsSelected,\n\tdateIsSelectedAsStartDate,\n\tdateIsSelectedAsEndDate,\n};\n\nexport const DateRangePickerInputPhrases = {\n\tfocusStartDate,\n\tclearDates,\n\tkeyboardForwardNavigationInstructions,\n\tkeyboardBackwardNavigationInstructions,\n};\n\nexport const SingleDatePickerPhrases = {\n\tcalendarLabel,\n\troleDescription,\n\tcloseDatePicker,\n\tclearDate,\n\tjumpToPrevMonth,\n\tjumpToNextMonth,\n\tkeyboardShortcuts,\n\tshowKeyboardShortcutsPanel,\n\thideKeyboardShortcutsPanel,\n\topenThisPanel,\n\tenterKey,\n\tleftArrowRightArrow,\n\tupArrowDownArrow,\n\tpageUpPageDown,\n\thomeEnd,\n\tescape,\n\tquestionMark,\n\tselectFocusedDate,\n\tmoveFocusByOneDay,\n\tmoveFocusByOneWeek,\n\tmoveFocusByOneMonth,\n\tmoveFocustoStartAndEndOfWeek,\n\treturnFocusToInput,\n\tkeyboardForwardNavigationInstructions,\n\tkeyboardBackwardNavigationInstructions,\n\tchooseAvailableDate,\n\tdateIsUnavailable,\n\tdateIsSelected,\n};\n\nexport const SingleDatePickerInputPhrases = {\n\tclearDate,\n\tkeyboardForwardNavigationInstructions,\n\tkeyboardBackwardNavigationInstructions,\n};\n\nexport const DayPickerPhrases = {\n\tcalendarLabel,\n\troleDescription,\n\tjumpToPrevMonth,\n\tjumpToNextMonth,\n\tkeyboardShortcuts,\n\tshowKeyboardShortcutsPanel,\n\thideKeyboardShortcutsPanel,\n\topenThisPanel,\n\tenterKey,\n\tleftArrowRightArrow,\n\tupArrowDownArrow,\n\tpageUpPageDown,\n\thomeEnd,\n\tescape,\n\tquestionMark,\n\tselectFocusedDate,\n\tmoveFocusByOneDay,\n\tmoveFocusByOneWeek,\n\tmoveFocusByOneMonth,\n\tmoveFocustoStartAndEndOfWeek,\n\treturnFocusToInput,\n\tchooseAvailableStartDate,\n\tchooseAvailableEndDate,\n\tchooseAvailableDate,\n\tdateIsUnavailable,\n\tdateIsSelected,\n\tdateIsSelectedAsStartDate,\n\tdateIsSelectedAsEndDate,\n};\n\nexport const DayPickerKeyboardShortcutsPhrases = {\n\tkeyboardShortcuts,\n\tshowKeyboardShortcutsPanel,\n\thideKeyboardShortcutsPanel,\n\topenThisPanel,\n\tenterKey,\n\tleftArrowRightArrow,\n\tupArrowDownArrow,\n\tpageUpPageDown,\n\thomeEnd,\n\tescape,\n\tquestionMark,\n\tselectFocusedDate,\n\tmoveFocusByOneDay,\n\tmoveFocusByOneWeek,\n\tmoveFocusByOneMonth,\n\tmoveFocustoStartAndEndOfWeek,\n\treturnFocusToInput,\n};\n\nexport const DayPickerNavigationPhrases = {\n\tjumpToPrevMonth,\n\tjumpToNextMonth,\n};\n\nexport const CalendarDayPhrases = {\n\tchooseAvailableDate,\n\tdateIsUnavailable,\n\tdateIsSelected,\n\tdateIsSelectedAsStartDate,\n\tdateIsSelectedAsEndDate,\n};","export const DISPLAY_FORMAT = 'L';\nexport const ISO_FORMAT = 'YYYY-MM-DD';\nexport const ISO_MONTH_FORMAT = 'YYYY-MM'; // TODO delete this line of dead code on next breaking change\n\nexport const START_DATE = 'startDate';\nexport const END_DATE = 'endDate';\n\nexport const HORIZONTAL_ORIENTATION = 'horizontal';\nexport const VERTICAL_ORIENTATION = 'vertical';\nexport const VERTICAL_SCROLLABLE = 'verticalScrollable';\n\nexport const ICON_BEFORE_POSITION = 'before';\nexport const ICON_AFTER_POSITION = 'after';\n\nexport const INFO_POSITION_TOP = 'top';\nexport const INFO_POSITION_BOTTOM = 'bottom';\nexport const INFO_POSITION_BEFORE = 'before';\nexport const INFO_POSITION_AFTER = 'after';\n\nexport const ANCHOR_LEFT = 'left';\nexport const ANCHOR_RIGHT = 'right';\n\nexport const OPEN_DOWN = 'down';\nexport const OPEN_UP = 'up';\n\nexport const DAY_SIZE = 39;\nexport const BLOCKED_MODIFIER = 'blocked';\nexport const WEEKDAYS = [0, 1, 2, 3, 4, 5, 6];\n\nexport const FANG_WIDTH_PX = 20;\nexport const FANG_HEIGHT_PX = 10;\nexport const DEFAULT_VERTICAL_SPACING = 22;\n\nexport const MODIFIER_KEY_NAMES = new Set(['Shift', 'Control', 'Alt', 'Meta']);","import moment from 'moment';\n\nfunction isBeforeDay(a, b) {\n\tif (!moment.isMoment(a) || !moment.isMoment(b)) return false;\n\n\tconst aYear = a.year();\n\tconst aMonth = a.month();\n\n\tconst bYear = b.year();\n\tconst bMonth = b.month();\n\n\tconst isSameYear = aYear === bYear;\n\tconst isSameMonth = aMonth === bMonth;\n\n\tif (isSameYear && isSameMonth) return a.date() < b.date();\n\tif (isSameYear) return aMonth < bMonth;\n\treturn aYear < bYear;\n}\n\nexport default function isInclusivelyAfterDay(a, b) {\n\tif (!moment.isMoment(a) || !moment.isMoment(b)) return false;\n\treturn !isBeforeDay(a, b);\n}\n","import React from 'react';\nimport moment from 'moment';\nimport omit from 'lodash/omit';\n\nimport { SingleDatePicker } from 'react-dates';\n\nimport { SingleDatePickerPhrases } from './calendarPhrases';\nimport { SingleDatePickerShape } from 'react-dates';\nimport { HORIZONTAL_ORIENTATION, ANCHOR_LEFT } from './calendarConstants';\nimport isInclusivelyAfterDay from './calendarInclusive';\n\nconst propTypes = {\n\t...omit(SingleDatePickerShape, [\n\t\t'date',\n\t\t'onDateChange',\n\t\t'focused',\n\t\t'onFocusChange',\n\t]),\n};\n\nconst defaultProps = {\n\t// input related props\n\tid: 'date',\n\tplaceholder: 'Date',\n\tdisabled: true,\n\trequired: false,\n\tscreenReaderInputMessage: '',\n\tshowClearDate: false,\n\tshowDefaultInputIcon: false,\n\tcustomInputIcon: null,\n\tblock: false,\n\tsmall: false,\n\tregular: false,\n\tverticalSpacing: undefined,\n\tkeepFocusOnInput: false,\n\n\t// calendar presentation and interaction related props\n\trenderMonthText: null,\n\torientation: HORIZONTAL_ORIENTATION,\n\tanchorDirection: ANCHOR_LEFT,\n\thorizontalMargin: 0,\n\twithPortal: false,\n\twithFullScreenPortal: false,\n\tinitialVisibleMonth: null,\n\tnumberOfMonths: 1,\n\tkeepOpenOnDateSelect: false,\n\treopenPickerOnClearDate: false,\n\thideKeyboardShortcutsPanel: true,\n\tisRTL: false,\n\n\t// navigation related props\n\tnavPrev: null,\n\tnavNext: null,\n\tonPrevMonthClick() {},\n\tonNextMonthClick() {},\n\tonClose() {},\n\n\t// day presentation and interaction related props\n\trenderCalendarDay: undefined,\n\trenderDayContents: null,\n\tenableOutsideDays: false,\n\tisDayBlocked: () => false,\n\tisOutsideRange: day => !isInclusivelyAfterDay(day, moment().add(7, 'd')),\n\tisDayHighlighted: () => {},\n\n\t// internationalization props\n\tdisplayFormat: () => moment.localeData().longDateFormat('LL'),\n\tmonthFormat: 'MMMM YYYY',\n\tphrases: SingleDatePickerPhrases,\n};\n\nclass SingleDatePickerWrapper extends React.Component {\n\trender() {\n\t\treturn (\n\t\t\t {}}\n\t\t\t/>\n\t\t);\n\t}\n}\n\nSingleDatePickerWrapper.propTypes = propTypes;\nSingleDatePickerWrapper.defaultProps = defaultProps;\n\nexport default SingleDatePickerWrapper;\n","import React, {Component} from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport moment from \"moment\";\nimport SingleDatePickerWrapper from \"./Calendar/SingleDatePickerWrapper\";\nimport CalendarPhrases from \"./Calendar/calendarPhrases\";\nimport { isInclusivelyAfterDay, isInclusivelyBeforeDay } from 'react-dates';\nimport momentPropTypes from 'react-moment-proptypes';\nimport Style from \"../constants/style\";\nimport {Analytics} from \"../utils/Analytics\";\nimport {ScreenSize} from \"../constants/screensize\";\n\nconst Container = styled.div`\n\twidth: 90%;\n\tmax-width: 700px;\n\tdisplay: flex;\n\tjustify-content: space-around;\n\tmargin: auto;\n\tpadding-top: 50px;\n\tflex-direction: row;\n\n\t@media (max-width: ${ScreenSize.tablet}px) {\n\t\tflex-direction: column;\n\t}\n`;\n\nconst CalendarContainer = styled.div`\n\twidth: 318px;\n\theight: 480px;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tmargin: auto;\n`;\n\nconst CalendarTitle = styled.div`\n\tfont-size: 24px;\n\tpadding-bottom: 30px;\n\tcolor: ${Style.darkGreen};\n`;\n\nclass DateContainer extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tconst earliestDate = moment.max([moment().add(7, 'd'), moment('2023-01-02')]);\n\n\t\tthis.state = {\n\t\t\tearliestPossibleSetupDate: earliestDate,\n\t\t\tearliestPossibleTeardownDate: moment('2024-01-19'),\n\t\t\tlastPossibleSetupDate: moment('2024-01-01'),\n\t\t\tlastPossibleTeardownDate: moment('2024-01-31'),\n\t\t\tblockedDays: [\n\t\t\t\tmoment('2023-12-16').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2023-12-15').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2023-12-08').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2023-12-01').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2023-11-24').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2023-11-23').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2023-11-03').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2023-11-10').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2023-11-17').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2023-11-21').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2023-11-18').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2024-01-08').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2024-01-07').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2024-01-09').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2024-01-10').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2024-01-11').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2024-01-12').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2024-01-13').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2024-01-14').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2024-01-15').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2024-01-17').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2023-11-27').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2023-11-28').format('YYYY-MM-DD'),\n\t\t\t\tmoment('2023-11-29').format('YYYY-MM-DD'),\n\t\t\t]\n\t\t}\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\tGuaranteed Setup Date:\n\t\t\t\t\t this.state.blockedDays.includes(day.format('YYYY-MM-DD'))}\n\t\t\t\t\t\tisDayHighlighted={function noRefCheck() {}}\n\t\t\t\t\t\tonNextMonthClick={function noRefCheck() {}}\n\t\t\t\t\t\tonPrevMonthClick={function noRefCheck() {}}\n\t\t\t\t\t\tonDateChange={this.setupDateChanged}\n\t\t\t\t\t\tisOutsideRange={day => !isInclusivelyAfterDay(day, this.state.earliestPossibleSetupDate) || !isInclusivelyBeforeDay(day, this.state.lastPossibleSetupDate)}\n\t\t\t\t\t\tphrases={CalendarPhrases}\n\t\t\t\t\t\tplaceholder=\"Start Date\"\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tGuaranteed Teardown Date:\n\t\t\t\t\t this.state.blockedDays.includes(day.format('YYYY-MM-DD'))}\n\t\t\t\t\t\tisDayHighlighted={function noRefCheck() {}}\n\t\t\t\t\t\tonNextMonthClick={function noRefCheck() {}}\n\t\t\t\t\t\tonPrevMonthClick={function noRefCheck() {}}\n\t\t\t\t\t\tonDateChange={this.teardownDateChanged}\n\t\t\t\t\t\tisOutsideRange={day => !isInclusivelyAfterDay(day, this.state.earliestPossibleTeardownDate) || !isInclusivelyBeforeDay(day, this.state.lastPossibleTeardownDate)}\n\t\t\t\t\t\tphrases={CalendarPhrases}\n\t\t\t\t\t\tplaceholder=\"Teardown Date\"\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n\n\tsetupDateChanged = (date) => {\n\t\tconst dateAsString = date.format('YYYY-MM-DD');\n\t\tAnalytics.logDateSelected(true, dateAsString);\n\t\tthis.props.onSetupDateChanged(date);\n\t};\n\n\tteardownDateChanged = (date) => {\n\t\tconst dateAsString = date.format('YYYY-MM-DD');\n\t\tAnalytics.logDateSelected(false, dateAsString);\n\t\tthis.props.onTeardownDateChanged(date);\n\t};\n}\n\nDateContainer.propTypes = {\n\tsetupDate: momentPropTypes.momentObj,\n\tteardownDate: momentPropTypes.momentObj,\n\tonSetupDateChanged: PropTypes.func.isRequired,\n\tonTeardownDateChanged: PropTypes.func.isRequired\n};\n\nexport default DateContainer;\n","import React, {Component} from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport Style from \"../constants/style\";\n\nconst ButtonContainer = styled.button`\n\toverflow: hidden;\n\tdisplay: inline-block;\n\tborder: 0;\n\tpadding: 0;\n\ttext-decoration: none;\n\tbox-shadow: rgba(0, 0, 0, 0.2) 0 1px 0;\n\tcursor: pointer;\n\tvisibility: visible;\n\tuser-select: none;\n\toutline: none;\n\twidth: 100%;\n\tborder-radius: 25px;\n\tbackground: ${Style.primaryGreen};\n\t\n\t:disabled {\n\t\tbackground: lightgray;\n\t\tcolor: white;\n\t}\n\t\n\t:disabled:hover {\n\t\tcursor: not-allowed;\n\t}\n\t\n\t:not(:disabled):hover {\n\t\tbackground: #80cf1c !important;\n\t}\n\n\t:not(:disabled):active {\n background: ${Style.primaryGreenHighlight} !important;\n color: white !important;\n\t}\n`;\n\nconst ButtonSpan = styled.span`\n\tfont-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n\tposition: relative;\n\tdisplay: block;\n\theight: 30px;\n\tfont-weight: bold;\n\tbox-shadow: rgba(255, 255, 255, 0.25) 0 1px 0 inset;\n\tmin-height: 50px !important;\n\tfont-size: 20px !important;\n\tline-height: 50px !important;\n\tborder-radius: 25px;\n\t\n\tcolor: ${props => props.disabled ? 'white' : Style.darkGreen};\n\ttext-shadow: none !important;\n\n\t:not(:disabled):active {\n color: white !important;\n\t}\n`;\n\nclass Button extends Component {\n\trender() {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{this.props.children}\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n\n\tonClick = () => {\n\t\tif (!this.props.disabled) {\n\t\t\tthis.props.onClick();\n\t\t}\n\t};\n}\n\nButton.propTypes = {\n\tdisabled: PropTypes.bool.isRequired,\n\tonClick: PropTypes.func.isRequired\n};\n\nButton.defaultProps = {\n\tdisabled: false,\n};\n\nexport default Button;\n","export const FormCodes = {\n\tTERMS: 1001,\n\tHOUSE_SIZE: 1002\n};\n\nexport const ServerCodes = {\n\n};\n","import React, { Component } from 'react';\nimport styled from 'styled-components';\nimport { ScreenSize } from '../constants/screensize';\n\nconst Container = styled.div`\n\twidth: 100%;\n\tdisplay: flex;\n\tjustify-content: space-around;\n\talign-items: center;\n\tborder-bottom: 1px solid gray;\n\tflex-direction: row;\n\t\n\t@media (max-width: ${ScreenSize.phone}px) {\n\t\tflex-direction: column;\n\t}\n`;\n\nconst TextContainer = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: center;\n\talign-items: center;\n\ttext-align: center;\n`;\n\nconst HeaderLabel = styled.h1`\n\tfont-size: 28px;\n\tfont-weight: 800;\n\t\n\t@media (max-width: 800px) {\n\t\tfont-size: 18px;\n\t}\n`;\n\nconst Logo = styled.img`\n\tposition: absolute;\n\tmax-width: 50px; \n\tleft: 50px;\n\t\n\t@media (max-width: ${ScreenSize.phone}px) {\n\t\tposition: inherit;\n\t}\n`;\n\nexport default class WelcomeHeader extends Component {\n\trender() {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tRe-Order Your Seasonal Setter Package\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n}\n","import React, {Component} from 'react';\nimport styled from 'styled-components';\nimport Style from \"../constants/style\";\n\nconst Container = styled.div`\n\twidth: 100%;\n\tdisplay: flex;\n\tjustify-content: center;\n\tpadding-top: 30px;\n`;\n\nconst TextBox = styled.input`\n\tfont-size: 30px;\n\ttext-align: center;\n\tborder: 2px solid ${Style.transparentBlack};\n\tborder-radius: 30px;\n`;\n\nclass InputBox extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.input = React.createRef();\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n\n\tfocus = () => {\n\t\tthis.input.current.focus();\n\t}\n}\n\nInputBox.propTypes = {\n\n};\n\nexport default InputBox;\n","import React, { Component } from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport Style from \"../constants/style\";\n\nconst Container = styled.div`\n\twidth: 90%;\n\tmargin: 0 auto 50px auto;\n\tmax-width: 800px;\n`;\n\nconst TextArea = styled.textarea`\n\tborder-radius: ${Style.borderRadius}px;\n\twidth: 100%;\n max-width: calc(100% - 19px) !important;\n height: 100px;\n border: 2px solid black;\n padding: 5px 5px 5px 10px;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n`;\n\nclass LargeTextBox extends Component {\n\trender() {\n\t\treturn (\n\t\t\t\n\t\t\t\t
{this.props.title}
\n\t\t\t\t\n\t\t);\n\t}\n}\n\nLargeTextBox.propTypes = {\n\ttitle: PropTypes.string.isRequired,\n\tplaceholder: PropTypes.string.isRequired,\n\tvalue: PropTypes.string.isRequired,\n\tonChange: PropTypes.func.isRequired\n};\n\nexport default LargeTextBox;\n","import React, {Component} from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport PlacesAutocomplete from 'react-places-autocomplete';\nimport Style from \"../constants/style\";\nimport {ScreenSize} from \"../constants/screensize\";\n\nconst Container = styled.div`\n\twidth: 90%;\n\tmax-width: 700px;\n\tmargin: 0 auto 30px auto;\n\tpadding-top: 20px;\n\ttext-align: center;\n`;\n\nconst Header = styled.h2`\n\ttext-align: center;\n\t@media (max-width: ${ScreenSize.phone}px) {\n\t\twidth: 90%;\n\t\tmargin: 20px auto;\n\t\tfont-size: 20px;\n\t}\n`;\n\nconst Subtitle = styled.h3`\n\t@media (max-width: ${ScreenSize.phone}px) {\n\t\twidth: 90%;\n\t\tmargin: 20px auto;\n\t\ttext-align: center;\t\n\t\tfont-size: 16px;\n\t}\n`;\n\nconst Input = styled.input`\n\tmargin-top: 40px;\n\tbox-shadow: 0 2px 2px 0 rgba(0,0,0,0.16), 0 0 0 1px rgba(0,0,0,0.08);\n\tborder: honeydew;\n\tdisplay: block;\n\twidth: calc(100% - 33px);\n\tpadding: 16px;\n\tfont-size: 18px;\n\tborder-radius: 2px;\n\toutline: none;\n`;\n\nconst SuggestionContainer = styled.div`\n\twidth: 100%;\n\tmargin-top: 10px;\n\ttext-align: left;\n`;\n\nconst Suggestion = styled.div`\n\twidth: calc(100% - 33px);\n\tpadding: 8px 16px;\n\tbackground: ${props => props.active ? Style.primaryGreen : 'white'};\n\tcursor: ${props => props.active ? 'pointer' : 'initial'};\n\tfont-weight: ${props => props.active ? 600 : 400};\n\tfont-size: 18px;\n`;\n\nclass AddressContainer extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tloading: false\n\t\t};\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\tWhat address are we setting this up at?\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tWe just want to show up to the right place. Plus, maybe you recently moved, so we ask just to be sure.\n\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t\tNote that this does not have to be the same as the billing address.\n\t\t\t\t\n\t\t\t\t 3}\n\t\t\t\t>\n\t\t\t\t\t{({ getInputProps, suggestions, getSuggestionItemProps, loading }) => (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tNo Calendar availability.\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\tPlease contact Peter for details.\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tIf you're still having issues,\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\tcontact us directly at:\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tpeter@seasonalsetter.com\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t) : null;\n\n\t\treturn (\n\t\t\t\n\t\t\t\t{loadingOverlay}\n\t\t\t\t\n\t\t\t\t{this.state.lookingForName ? lookingForName : (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tOrdering the same package from last year for:\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{this.state.selectedName.name}\n\t\t\t\t\t\t\n\t\t\t\t\t\t this.setState({setupDate: date})} onTeardownDateChanged={(date) => this.setState({teardownDate: date})} />\n\t\t\t\t\t\t{/**/}\n\t\t\t\t\t\t{/*\t*/}\n\t\t\t\t\t\t{/*\t\tSubtotal:*/}\n\t\t\t\t\t\t{/*\t*/}\n\t\t\t\t\t\t{/*\t*/}\n\t\t\t\t\t\t{/*\t\t{Utils.formatAsCurrency(subtotal)}*/}\n\t\t\t\t\t\t{/*\t*/}\n\t\t\t\t\t\t{/**/}\n\t\t\t\t\t\t{/**/}\n\t\t\t\t\t\t{/*\t*/}\n\t\t\t\t\t\t{/*\t\tTax:*/}\n\t\t\t\t\t\t{/*\t*/}\n\t\t\t\t\t\t{/*\t*/}\n\t\t\t\t\t\t{/*\t\t{Utils.formatAsCurrency(tax)}*/}\n\t\t\t\t\t\t{/*\t*/}\n\t\t\t\t\t\t{/**/}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tWhich brings your total this year to:\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{Utils.formatAsCurrency(totalPrice)}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tPlease re-read the Terms and Conditions, since they are different this year.\n\t\t\t\t\t\t\n\t\t\t\t\t\t this.setState({termsAccepted: status})}/>\n\t\t\t\t\t\t this.setState({submitting: status})}/>\n\t\t\t\t\t\t{!formValidityCheck.valid ? issueResolver : null}\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\n\t\t);\n\t}\n\n\tsearchForLastYearOrder = () => {\n\t\tconst firstName = this.state.firstName.trim();\n\t\tconst lastName = this.state.lastName.trim();\n\t\tconst trimmedName = (firstName + \" \" + lastName).trim();\n\t\tconst nameToFind = trimmedName.toLowerCase();\n\t\tconst selectedName = this.state.names.filter(object => object.name.toLowerCase() === nameToFind).shift();\n\t\tif (selectedName !== undefined) {\n\t\t\tAnalytics.logSearch(selectedName.name, true);\n\t\t\tthis.setState({\n\t\t\t\tshowingError: false,\n\t\t\t\tlookingForName: false,\n\t\t\t\tselectedName: selectedName\n\t\t\t});\n\t\t} else {\n\t\t\tAnalytics.logSearch(trimmedName, false);\n\t\t\tthis.setState({\n\t\t\t\tshowingError: true\n\t\t\t});\n\t\t}\n\t};\n\n\tkeyDownFirstName = (event) => {\n\t\tif (event.keyCode === 13) {\n\t\t\tthis.lastNameRef.current.focus();\n\t\t}\n\t};\n\n\tkeyDownLastName = (event) => {\n\t\tif (event.keyCode === 13) {\n\t\t\tthis.searchForLastYearOrder();\n\t\t}\n\t};\n\n\thandleSetupAddressChange = setupAddress => {\n\t\tthis.setState({ setupAddress });\n\t};\n\n\tonCommentsChanged = (newComments) => {\n\t\tthis.setState({\n\t\t\tcomments: newComments\n\t\t});\n\t};\n\n\tresolveIssueFor = ({code}) => {\n\t\tswitch (code) {\n\t\t\tcase FormCodes.TERMS:\n\t\t\t\tthis.setState({termsAccepted: true});\n\t\t\t\tbreak;\n\t\t\tcase FormCodes.HOUSE_SIZE:\n\t\t\t\tthis.changeToSectionAtIndex(0);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\tisFormValid = () => {\n\t\tif (!this.state.termsAccepted) {\n\t\t\treturn {valid: false, reason: \"You must accept the Terms and Conditions before checking out.\", code: FormCodes.TERMS};\n\t\t}\n\n\t\treturn {valid: true, reason: \"\"};\n\t};\n}\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit http://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\nimport 'react-dates/initialize';\nimport 'react-dates/lib/css/_datepicker.css';\nimport './components/Calendar/CustomCalendarStyles.scss';\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {faHome, faTree, faShoppingCart, faCalendar, faSnowman, faAward, faLightbulb, faDharmachakra, faChevronUp, faCheck} from '@fortawesome/free-solid-svg-icons';\nimport {Analytics} from \"./utils/Analytics\";\n\nlibrary.add(faHome, faTree, faShoppingCart, faCalendar, faSnowman, faAward, faLightbulb, faDharmachakra, faChevronUp, faCheck);\n\nAnalytics.init();\n\nReactDOM.render(, document.getElementById('root'));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: http://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}