Spend your TisBest Charity Gift Card and help make the world a better place.
1. Enter Your 6-Digit Code
2. Choose Your Charities
\",\r\n card_code_input_code: \"Charity Gift Card Code\",\r\n card_code_input_email: \"Your Email Address\",\r\n card_code_input_continue: \"Continue\",\r\n category_selector_header: \"Choose a Category\",\r\n category_selector_search_all: \"Search All U.S. Charities\",\r\n featured_charity_selector_select: \"Select\",\r\n featured_charity_selector_unselect: \"Selected\",\r\n featured_charity_selector_disabled: \"Charity Limit Reached\",\r\n national_charity_selector_header: \"Search All U.S. Charities\",\r\n national_charity_selector_search: \"Search\",\r\n national_charity_selector_select: \"Select\",\r\n national_charity_selector_unselect: \"Selected\",\r\n national_charity_selector_disabled: \"Charity Limit Reached\",\r\n national_charity_selector_query_label: \"Keyword or Charity Name\",\r\n national_charity_selector_postal_label: \"Zip\",\r\n national_charity_selector_category_label: \"Charity Category\",\r\n national_charity_selector_results_label: \"results\",\r\n national_charity_selector_open_filter: \"Open Filter\",\r\n national_charity_selector_close_filter: \"Close Filter\",\r\n charity_distribution_header: \"Review Your Selections\",\r\n charity_distribution_message:\r\n \"We will distribute your donation amount evenly across your charities, or you can customize the amount each charity will receive.\",\r\n charity_distribution_donation_amount: \"Donation Amount:\",\r\n charity_distribution_note: \"Note: There is a $3 minimum per charity\",\r\n charity_distribution_stay_informed:\r\n \"Please let these charities know I donated, and ask them to keep me informed about their work.\",\r\n charity_distribution_input_name: \"Name\",\r\n charity_distribution_input_email: \"Email\",\r\n charity_distribution_continue: \"Continue\",\r\n charity_distribution_back: \"Edit Selections\",\r\n charity_distribution_reset: \"Reset\",\r\n thank_you_header: \"Thank Your Gifter\",\r\n thank_you_message:\r\n \"TisBest will send an email to the person who gave you this Charity Gift Card confirming your donations. We’re happy to include a Thank You Note in that email if you like.\",\r\n thank_you_input_thank_you_name: \"Your Name\",\r\n thank_you_input_thank_you_note: \"Thank You Note\",\r\n thank_you_input_thank_you_note_value:\r\n \"Thank you for the TisBest Charity Gift Card! It means a lot to me to be able to help change the lives of many, making this world a better place.\",\r\n thank_you_continue: \"Donate and Send Note\",\r\n thank_you_skip: \"Donate Without Sending a Note\",\r\n share_header_plural: \"Confirmed!\",\r\n share_header_single: \"Confirmed!\",\r\n share_message_plural: \"Your contribution makes the world a better place.\",\r\n share_message_single: \"Your contribution makes the world a better place.\",\r\n share_call_to_action: \"Now share the feeling!\",\r\n share_information_plural:\r\n \"Let your friends know what you chose! It's easy to share this moment on all your favorite feeds:\",\r\n share_information_single:\r\n \"Let your friends know what you chose! It's easy to share this moment on all your favorite feeds:\",\r\n share_facebook: \"TisBest is a better gift for a better world.\",\r\n share_twitter: \"TisBest is a better gift for a better world.\",\r\n share_instagram: \"TisBest is a better gift for a better world.\",\r\n share_linkedin: \"TisBest is a better gift for a better world.\",\r\n share_tip:\r\n \"(Tip: Give your charities some extra love by @ tagging them in your post!)\",\r\n code_error_header: \"Your card has been successfully donated!\",\r\n code_error_message: \"\",\r\n code_error_header_spent:\r\n \"TisBest Charity Gift Card [CODE] was spent on [DATESPENT] to support:\",\r\n code_error_message_spent: \"\",\r\n code_error_information:\r\n \"
If we have any additional information on your card code, we will send you an email with details. Please check your inbox, and contact us at
info@tisbest.org or
(206)501-3005 if you have questions.
\",\r\n campaign_welcome_continue: \"Continue\",\r\n campaign_instructions_header: \"Special Instructions (Optional)\",\r\n campaign_instructions_message:\r\n \"If you have any special instructions for your donation, you can select an option below. Or just click continue and we will send a check to your charit(ies) with no special instructions.\",\r\n campaign_instructions_continue: \"Continue\",\r\n campaign_instructions_no_instructions:\r\n \"Please send a check to my selected charity(ies) with no special instructions\",\r\n campaign_instructions_paper_check:\r\n \"Please send me a paper check to hand deliver to my selected charity(ies)\",\r\n campaign_instructions_particular_program:\r\n \"Please direct the donation to a particular program at my selected charity(ies)\",\r\n campaign_instructions_particular_person:\r\n \"Please make the donation in the name of a particular person\",\r\n campaign_instructions_other: \"Other\",\r\n campaign_instructions_address: \"Address\",\r\n campaign_instructions_address2: \"Address 2\",\r\n campaign_instructions_city: \"City\",\r\n campaign_instructions_state: \"State\",\r\n campaign_instructions_zip: \"Zip\",\r\n campaign_instructions_notes: \"Special Instructions\",\r\n campaign_instructions_name: \"Name\",\r\n campaign_instructions_phone: \"Phone\",\r\n campaign_instructions_email: \"Email\",\r\n campaign_thank_you_header: \"Thank You\",\r\n campaign_thank_you_continue: \"Continue\",\r\n suggested_charity_selector_select: \"Select\",\r\n suggested_charity_selector_unselect: \"Unselect\",\r\n};\r\n\r\nexport const VALIDATION = {\r\n card_code_input_code:\r\n \"
Oops! Something went wrong with your Charity Gift Card code. Please double check that you've entered it correctly.
\",\r\n card_code_input_email: \"Please use a valid email address.\",\r\n charity_distribution_input_name: \"Please use a valid name.\",\r\n charity_distribution_input_email: \"Please use a valid email address.\",\r\n charity_distribution_input_total_high:\r\n \"You have exceeded the {Total} on the card by {Difference}\",\r\n charity_distribution_input_total_low:\r\n \"You still have {Difference} to spend out of {Total}\",\r\n charity_distribution_input_total_out_of_bounds:\r\n \"You must assign at least $3 to all selected charities\",\r\n thank_you_input_thank_you_name:\r\n \"Please add your name to include your thank you note or select “Donate Without Sending a Note”.\",\r\n thank_you_input_thank_you_note:\r\n \"Please add a message or select “Donate Without Sending a Note”.\",\r\n campaign_instructions_address: \"Please use a valid address\",\r\n campaign_instructions_address2: \"Please use a valid address\",\r\n campaign_instructions_city: \"Please use a valid city\",\r\n campaign_instructions_state: \"Please use a valid state\",\r\n campaign_instructions_zip: \"Please use a valid zip\",\r\n campaign_instructions_notes: \"Please use special instructions\",\r\n campaign_instructions_name: \"Please use a valid name\",\r\n campaign_instructions_phone: \"Please use a valid phone\",\r\n campaign_instructions_email: \"Please use a valid email\",\r\n};\r\n","import * as consts from \"../consts\";\r\nimport * as defaults from \"../defaults\";\r\n\r\nfunction getRequest(url) {\r\n return new Promise((resolve, reject) => {\r\n var request = new XMLHttpRequest();\r\n request.open(\"GET\", url, true);\r\n request.onload = function () {\r\n if (request.status >= 200 && request.status < 400) {\r\n resolve(request.responseText);\r\n } else {\r\n reject(request);\r\n }\r\n };\r\n request.onerror = function () {\r\n reject(request);\r\n };\r\n request.send();\r\n });\r\n}\r\n\r\nfunction postRequest(url, data) {\r\n return new Promise((resolve, reject) => {\r\n let request = new XMLHttpRequest();\r\n request.open(\"POST\", url, true);\r\n request.setRequestHeader(\"Content-Type\", \"application/json; charset=utf-8\");\r\n request.onload = function () {\r\n if (request.status >= 200 && request.status < 400) {\r\n resolve(request.responseText);\r\n } else {\r\n reject(request);\r\n }\r\n };\r\n request.onerror = function () {\r\n reject(request);\r\n };\r\n request.send(JSON.stringify(data));\r\n });\r\n}\r\n\r\nfunction extend(defaults, source) {\r\n let extendedValues = { ...defaults };\r\n for (let key in source) {\r\n if (source.hasOwnProperty(key) && source[key] != null) {\r\n extendedValues[key] = source[key];\r\n }\r\n }\r\n return extendedValues;\r\n}\r\n\r\nexport function getAccount() {\r\n return new Promise((resolve) => {\r\n let accountID = \"\";\r\n var scripts = document.getElementsByTagName(\"script\");\r\n for (var i = 0; i < scripts.length; i++) {\r\n if (scripts[i].getAttribute(\"data-id\") === \"TisBestSpend\") {\r\n accountID = scripts[i].getAttribute(\"data-accountid\");\r\n break;\r\n }\r\n }\r\n if (accountID.length > 0) {\r\n getRequest(consts.SERVICE_URL + \"Accounts/\" + accountID)\r\n .then((response) => {\r\n let account = JSON.parse(response).data;\r\n account.settings.links = extend(\r\n defaults.LINKS,\r\n account.settings.links\r\n );\r\n account.settings.images = extend(\r\n defaults.IMAGES,\r\n account.settings.images\r\n );\r\n account.settings.dictionary = extend(\r\n defaults.DICTIONARY,\r\n account.settings.dictionary\r\n );\r\n account.settings.validation = extend(\r\n defaults.VALIDATION,\r\n account.settings.validation\r\n );\r\n resolve(account);\r\n })\r\n .catch((err) => {\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.log(\"TisBest Spend:\");\r\n console.log(err);\r\n }\r\n resolve(null);\r\n });\r\n } else {\r\n resolve(null);\r\n }\r\n });\r\n}\r\n\r\nexport function getCodeDetail(code) {\r\n return new Promise((resolve, reject) => {\r\n getRequest(consts.SERVICE_URL + \"Donations/\" + code, null)\r\n .then((response) => {\r\n let donationResponse = JSON.parse(response);\r\n resolve(donationResponse);\r\n })\r\n .catch((err) => {\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.log(\"TisBest Spend:\");\r\n console.log(err);\r\n }\r\n reject(err);\r\n });\r\n });\r\n}\r\n\r\nexport function getSpendDetail(code) {\r\n return new Promise((resolve, reject) => {\r\n getRequest(consts.SERVICE_URL + \"Donations/\" + code + \"/spendDetails\", null)\r\n .then((response) => {\r\n let spendResponse = JSON.parse(response);\r\n resolve(spendResponse);\r\n })\r\n .catch((err) => {\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.log(\"TisBest Spend:\");\r\n console.log(err);\r\n }\r\n reject(err);\r\n });\r\n });\r\n}\r\n\r\nexport function isCodeValid(code) {\r\n return new Promise((resolve, reject) => {\r\n getRequest(consts.SERVICE_URL + \"Donations/check/\" + code, null)\r\n .then((response) => {\r\n let valid = JSON.parse(response);\r\n resolve(valid);\r\n })\r\n .catch((err) => {\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.log(\"TisBest Spend:\");\r\n console.log(err);\r\n }\r\n reject(err);\r\n });\r\n });\r\n}\r\n\r\nexport function getCategories() {\r\n return new Promise((resolve, reject) => {\r\n getRequest(consts.SERVICE_URL + \"Categories/\")\r\n .then((response) => {\r\n let categories = JSON.parse(response);\r\n resolve(categories);\r\n })\r\n .catch((err) => {\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.log(\"TisBest Spend:\");\r\n console.log(err);\r\n }\r\n reject(err);\r\n });\r\n });\r\n}\r\n\r\nexport function getFeaturedCharities(categoryID) {\r\n return new Promise((resolve, reject) => {\r\n getRequest(consts.SERVICE_URL + \"Charities/\" + categoryID + \"/featured\")\r\n .then((response) => {\r\n let featuredCharities = JSON.parse(response);\r\n resolve(featuredCharities);\r\n })\r\n .catch((err) => {\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.log(\"TisBest Spend:\");\r\n console.log(err);\r\n }\r\n reject(err);\r\n });\r\n });\r\n}\r\n\r\nexport function getNationalCharities(filter) {\r\n return new Promise((resolve, reject) => {\r\n let data = {\r\n categoryColumnName: filter.columnName,\r\n postalCode: filter.postalCode,\r\n query: filter.query,\r\n continuationToken: filter.continuationToken,\r\n };\r\n postRequest(consts.SERVICE_URL + \"Charities/\", data)\r\n .then((response) => {\r\n let nationalCharities = JSON.parse(response);\r\n resolve(nationalCharities);\r\n })\r\n .catch((err) => {\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.log(\"TisBest Spend:\");\r\n console.log(err);\r\n }\r\n reject(err);\r\n });\r\n });\r\n}\r\n\r\nexport function setDonation(\r\n cardCode,\r\n name,\r\n email,\r\n optIn,\r\n notifyEmail,\r\n selectedCharities,\r\n thankYouName,\r\n thankYouNote,\r\n instructions\r\n) {\r\n return new Promise((resolve, reject) => {\r\n let charities = selectedCharities.slice();\r\n let spendDetails = [];\r\n charities.map((charity) => {\r\n spendDetails.push({\r\n ein: charity.ein,\r\n amount: charity.amount + charity.cents,\r\n optIn: optIn,\r\n name: optIn ? name : null,\r\n email: optIn ? notifyEmail : null,\r\n });\r\n });\r\n postRequest(consts.SERVICE_URL + \"Donations/\", {\r\n cardCode: cardCode,\r\n email: email,\r\n thankYouName: thankYouName,\r\n thankYouNote: thankYouNote,\r\n charitySpendDetails: spendDetails,\r\n instructions: instructions,\r\n })\r\n .then(() => {\r\n resolve(true);\r\n })\r\n .catch((err) => {\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.log(\"TisBest Spend:\");\r\n console.log(err);\r\n }\r\n reject(null);\r\n });\r\n });\r\n}\r\n\r\nexport function validateName(name) {\r\n if (name && name.length > 0) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nexport function validateCode(code) {\r\n let codeValidation = /^[A-Z0-9]{3}-[A-Z0-9]{3}$/;\r\n if (codeValidation.test(code)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nexport function validateEmail(email) {\r\n let emailValidation =\r\n /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n if (emailValidation.test(email)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nexport function validateThankYouName(thankYouName) {\r\n if (thankYouName && thankYouName.length > 0) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nexport function validateThankYouNote(thankYouNote) {\r\n if (thankYouNote && thankYouNote.length > 0) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n}\r\n","import React from \"react\";\r\nimport { Busy } from \"../presentational/busy\";\r\nimport ReactGA from \"react-ga\";\r\nimport styles from \"../../styles/panels/cardCodeInput.css\";\r\nimport * as utilities from \"../../middleware/utilities\";\r\n\r\nexport class CardCodeInput extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n let banner =\r\n this.props.images.card_code_input_banners[\r\n Math.floor(\r\n Math.random() * this.props.images.card_code_input_banners.length\r\n )\r\n ];\r\n this.state = {\r\n banner: banner,\r\n };\r\n }\r\n componentDidMount() {\r\n this.codeInput.focus();\r\n ReactGA.pageview(\"/Spend/CardCodeInput\");\r\n }\r\n render() {\r\n if (this.props.busy) {\r\n return
;\r\n } else {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {this.props.dictionary.card_code_input_code}\r\n \r\n
{\r\n this.codeInput = input;\r\n }}\r\n value={this.props.code}\r\n placeholder=\" - \"\r\n maxLength=\"7\"\r\n onChange={(event) => {\r\n let code = event.target.value;\r\n code = code.replace(/[^0-9a-zA-Z]/g, \"\");\r\n if (code.length == 3) {\r\n let previousValue = this.props.code.replace(\r\n /[^0-9a-zA-Z]/g,\r\n \"\"\r\n );\r\n if (code.length > previousValue.length) {\r\n code = code.slice(0, 3) + \"-\" + code.slice(3);\r\n }\r\n } else if (code.length > 3) {\r\n code = code.slice(0, 3) + \"-\" + code.slice(3);\r\n }\r\n this.props.onCodeChanged(code.toUpperCase());\r\n }}\r\n onKeyPress={(event) => {\r\n if (event.key === \"Enter\") {\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Submit Card Code\",\r\n label: \"User pressed enter in card code\",\r\n });\r\n this.props.onSubmit();\r\n }\r\n }}\r\n />\r\n {this.props.codeValid ? null : (\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n {this.props.dictionary.card_code_input_email}\r\n \r\n
{\r\n this.props.onEmailChanged(event.target.value);\r\n }}\r\n onKeyPress={(event) => {\r\n if (event.key === \"Enter\") {\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Submit Card Code\",\r\n label: \"User pressed enter in email\",\r\n });\r\n this.props.onSubmit();\r\n }\r\n }}\r\n />\r\n {this.props.emailValid ? null : (\r\n
\r\n {this.props.validation.card_code_input_email}\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n By clicking continue you're agreeing to our{\" \"}\r\n
\r\n terms\r\n \r\n .\r\n
\r\n
\r\n
\r\n {\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Continue Button\",\r\n label: \"/Spend/CardCodeInput\",\r\n });\r\n this.props.onSubmit();\r\n }}\r\n >\r\n {this.props.dictionary.card_code_input_continue}\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n }\r\n}\r\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./card.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./card.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\r\nimport styles from \"../../styles/presentational/card.css\";\r\n\r\nexport class Card extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n }\r\n render() {\r\n return (\r\n
\r\n \r\n \r\n );\r\n }\r\n}\r\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./suggestedCharity.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./suggestedCharity.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\r\nimport ReactGA from \"react-ga\";\r\nimport styles from \"../../styles/presentational/suggestedCharity.css\";\r\n\r\nexport class SuggestedCharity extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n }\r\n render() {\r\n let selectedEINs = this.props.selectedCharities.map((charity) => {\r\n return charity.ein;\r\n });\r\n return (\r\n
\r\n
{\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Open Charity \" + this.props.charity.ein,\r\n label: \"/Spend/Presentational/SuggestedCharity\",\r\n });\r\n this.props.onViewCharity(this.props.charity);\r\n }}\r\n >\r\n
\r\n
\r\n {selectedEINs.indexOf(this.props.charity.ein) == -1 ? (\r\n this.props.additionalCharityCount >=\r\n this.props.selectedCharities.length ? (\r\n {\r\n event.stopPropagation();\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Select Charity\",\r\n label: \"/Spend/Presentational/SuggestedCharity\",\r\n });\r\n this.props.onSelectCharity(this.props.charity);\r\n }}\r\n >\r\n {this.props.dictionary.suggested_charity_selector_select}\r\n \r\n ) : null\r\n ) : (\r\n {\r\n event.stopPropagation();\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Remove Charity\",\r\n label: \"/Spend/Presentational/SuggestedCharity\",\r\n });\r\n this.props.onRemoveCharity(this.props.charity.ein);\r\n }}\r\n >\r\n {this.props.dictionary.suggested_charity_selector_unselect}\r\n \r\n )}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./campaignWelcome.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./campaignWelcome.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\r\nimport { Busy } from \"../presentational/busy\";\r\nimport { Card } from \"../presentational/card\";\r\nimport { SuggestedCharity } from \"../presentational/suggestedCharity\";\r\nimport ReactGA from \"react-ga\";\r\nimport styles from \"../../styles/panels/campaignWelcome.css\";\r\nimport * as utilities from \"../../middleware/utilities\";\r\n\r\nexport class CampaignWelcome extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n }\r\n componentDidMount() {\r\n ReactGA.pageview(\"/Spend/CampaignWelcome\");\r\n utilities\r\n .isCodeValid(this.props.code)\r\n .then(valid => {\r\n if (!valid) {\r\n this.props.onCodeError();\r\n }\r\n })\r\n .catch(() => {\r\n this.props.onCodeError();\r\n });\r\n }\r\n\r\n renderAside() {\r\n return (\r\n
\r\n
\r\n {\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Continue Button\",\r\n label: \"/Spend/CampaignWelcome\"\r\n });\r\n this.props.onContinue();\r\n }}\r\n >\r\n {this.props.dictionary.campaign_welcome_continue}\r\n \r\n
\r\n
\r\n {this.props.donation.campaignDetail &&\r\n this.props.donation.campaignDetail.suggestedCharity &&\r\n this.props.donation.campaignDetail.suggestedCharityMarkup ? (\r\n
\r\n {\r\n this.props.onViewCharity(charity);\r\n }}\r\n onSelectCharity={charity => {\r\n this.props.onSelectCharity(charity);\r\n }}\r\n onRemoveCharity={ein => {\r\n this.props.onRemoveCharity(ein);\r\n }}\r\n />\r\n
\r\n ) : null}\r\n
\r\n );\r\n }\r\n render() {\r\n if (this.props.busy) {\r\n return
;\r\n } else {\r\n return (\r\n
\r\n
\r\n {this.props.donation.campaignDetail &&\r\n this.props.donation.campaignDetail.suggestedCharity &&\r\n this.props.donation.campaignDetail.suggestedCharityMarkup ? (\r\n
\r\n {\r\n this.props.onViewCharity(charity);\r\n }}\r\n onSelectCharity={charity => {\r\n this.props.onSelectCharity(charity);\r\n }}\r\n onRemoveCharity={ein => {\r\n this.props.onRemoveCharity(ein);\r\n }}\r\n />\r\n
\r\n ) : null}\r\n {this.renderAside()}\r\n
\r\n );\r\n }\r\n }\r\n}\r\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./campaignThankYou.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./campaignThankYou.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\r\nimport { Busy } from \"../presentational/busy\";\r\nimport { Card } from \"../presentational/card\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faArrowCircleLeft } from \"@fortawesome/pro-light-svg-icons/faArrowCircleLeft\";\r\nimport ReactGA from \"react-ga\";\r\nimport styles from \"../../styles/panels/campaignThankYou.css\";\r\nimport * as utilities from \"../../middleware/utilities\";\r\n\r\nexport class CampaignThankYou extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n }\r\n componentDidMount() {\r\n ReactGA.pageview(\"/Spend/CampaignThankYou\");\r\n utilities\r\n .isCodeValid(this.props.code)\r\n .then(valid => {\r\n if (!valid) {\r\n this.props.onCodeError();\r\n }\r\n })\r\n .catch(() => {\r\n this.props.onCodeError();\r\n });\r\n }\r\n renderNavigation() {\r\n return (\r\n
\r\n
\r\n
{\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Back Button\",\r\n label: \"/Spend/CampaignThankYou\"\r\n });\r\n this.props.onBack();\r\n }}\r\n >\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n renderAside() {\r\n return (\r\n
\r\n
\r\n {\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Continue Button\",\r\n label: \"/Spend/CampaignThankYou\"\r\n });\r\n this.props.onContinue();\r\n }}\r\n >\r\n {this.props.dictionary.campaign_thank_you_continue}\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n render() {\r\n if (!this.props.code || this.props.busy) {\r\n return
;\r\n } else {\r\n return (\r\n
\r\n {this.renderNavigation()}\r\n
\r\n {this.renderAside()}\r\n
\r\n );\r\n }\r\n }\r\n}\r\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./campaignInstructions.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./campaignInstructions.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\r\nimport { Busy } from \"../presentational/busy\";\r\nimport { Card } from \"../presentational/card\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faArrowCircleLeft } from \"@fortawesome/pro-light-svg-icons/faArrowCircleLeft\";\r\nimport ReactGA from \"react-ga\";\r\nimport styles from \"../../styles/panels/campaignInstructions.css\";\r\nimport * as utilities from \"../../middleware/utilities\";\r\n\r\nexport class CampaignInstructions extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n invalidList: [],\r\n };\r\n }\r\n componentDidMount() {\r\n ReactGA.pageview(\"/Spend/CampaignInstructions\");\r\n utilities\r\n .isCodeValid(this.props.code)\r\n .then((valid) => {\r\n if (!valid) {\r\n this.props.onCodeError();\r\n }\r\n })\r\n .catch(() => {\r\n this.props.onCodeError();\r\n });\r\n }\r\n renderNavigation() {\r\n return (\r\n
\r\n
\r\n
{\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Back Button\",\r\n label: \"/Spend/CampaignInstructions\",\r\n });\r\n this.props.onBack();\r\n }}\r\n >\r\n \r\n
\r\n {this.props.dictionary.campaign_instructions_header}\r\n
\r\n
\r\n );\r\n }\r\n\r\n renderContactInputs() {\r\n let nameValid = this.state.invalidList.indexOf(\"Name\") > -1 ? false : true;\r\n let phoneValid =\r\n this.state.invalidList.indexOf(\"Phone\") > -1 ? false : true;\r\n let emailValid =\r\n this.state.invalidList.indexOf(\"Email\") > -1 ? false : true;\r\n return (\r\n
\r\n
\r\n
\r\n {this.props.dictionary.campaign_instructions_name} (Required)\r\n \r\n
{\r\n this.props.onInstructionsChanged({\r\n ...this.props.instructions,\r\n name: event.target.value,\r\n });\r\n }}\r\n />\r\n {nameValid ? null : (\r\n
\r\n {this.props.validation.campaign_instructions_name}\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n {this.props.dictionary.campaign_instructions_phone} (Required)\r\n \r\n
{\r\n this.props.onInstructionsChanged({\r\n ...this.props.instructions,\r\n phone: event.target.value,\r\n });\r\n }}\r\n />\r\n {phoneValid ? null : (\r\n
\r\n {this.props.validation.campaign_instructions_phone}\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n {this.props.dictionary.campaign_instructions_email} (Required)\r\n \r\n
{\r\n this.props.onInstructionsChanged({\r\n ...this.props.instructions,\r\n email: event.target.value,\r\n });\r\n }}\r\n />\r\n {emailValid ? null : (\r\n
\r\n {this.props.validation.campaign_instructions_email}\r\n
\r\n )}\r\n
\r\n
\r\n );\r\n }\r\n\r\n renderAddressInputs() {\r\n let addressValid =\r\n this.state.invalidList.indexOf(\"Address\") > -1 ? false : true;\r\n let address2Valid = true;\r\n let cityValid = this.state.invalidList.indexOf(\"City\") > -1 ? false : true;\r\n let stateValid =\r\n this.state.invalidList.indexOf(\"State\") > -1 ? false : true;\r\n let zipValid = this.state.invalidList.indexOf(\"Zip\") > -1 ? false : true;\r\n return (\r\n
\r\n
\r\n
\r\n {this.props.dictionary.campaign_instructions_address} (Required)\r\n \r\n
{\r\n this.props.onInstructionsChanged({\r\n ...this.props.instructions,\r\n address: event.target.value,\r\n });\r\n }}\r\n />\r\n {addressValid ? null : (\r\n
\r\n {this.props.validation.campaign_instructions_address}\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n {this.props.dictionary.campaign_instructions_address2}\r\n \r\n
{\r\n this.props.onInstructionsChanged({\r\n ...this.props.instructions,\r\n address2: event.target.value,\r\n });\r\n }}\r\n />\r\n {address2Valid ? null : (\r\n
\r\n {this.props.validation.campaign_instructions_address2}\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n {this.props.dictionary.campaign_instructions_city} (Required)\r\n \r\n
{\r\n this.props.onInstructionsChanged({\r\n ...this.props.instructions,\r\n city: event.target.value,\r\n });\r\n }}\r\n />\r\n {cityValid ? null : (\r\n
\r\n {this.props.validation.campaign_instructions_city}\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n {this.props.dictionary.campaign_instructions_state} (Required)\r\n \r\n
{\r\n this.props.onInstructionsChanged({\r\n ...this.props.instructions,\r\n state: event.target.value,\r\n });\r\n }}\r\n />\r\n {stateValid ? null : (\r\n
\r\n {this.props.validation.campaign_instructions_state}\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n {this.props.dictionary.campaign_instructions_zip} (Required)\r\n \r\n
{\r\n this.props.onInstructionsChanged({\r\n ...this.props.instructions,\r\n zip: event.target.value,\r\n });\r\n }}\r\n />\r\n {zipValid ? null : (\r\n
\r\n {this.props.validation.campaign_instructions_zip}\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n renderNotesInputs() {\r\n let notesValid = true;\r\n return (\r\n
\r\n
\r\n {this.props.dictionary.campaign_instructions_notes}\r\n \r\n
\r\n );\r\n }\r\n renderAside() {\r\n return (\r\n
\r\n
\r\n {\r\n let invalidList = [];\r\n switch (this.props.instructions.distributionType) {\r\n case \"Paper Check\":\r\n if (!this.props.instructions.address) {\r\n invalidList.push(\"Address\");\r\n }\r\n if (!this.props.instructions.city) {\r\n invalidList.push(\"City\");\r\n }\r\n if (!this.props.instructions.state) {\r\n invalidList.push(\"State\");\r\n }\r\n if (!this.props.instructions.zip) {\r\n invalidList.push(\"Zip\");\r\n }\r\n break;\r\n case \"Particular Program\":\r\n break;\r\n case \"Particular Person\":\r\n break;\r\n case \"Other\":\r\n break;\r\n }\r\n if (!this.props.instructions.name) {\r\n invalidList.push(\"Name\");\r\n }\r\n if (!this.props.instructions.phone) {\r\n invalidList.push(\"Phone\");\r\n }\r\n let emailValidation = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n if (\r\n !this.props.instructions.email ||\r\n !emailValidation.test(this.props.instructions.email)\r\n ) {\r\n invalidList.push(\"Email\");\r\n }\r\n if (invalidList.length == 0) {\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Continue Button\",\r\n label: \"/Spend/CampaignInstructions\",\r\n });\r\n this.props.onContinue();\r\n } else {\r\n this.setState({ invalidList: invalidList });\r\n }\r\n }}\r\n >\r\n {this.props.dictionary.campaign_instructions_continue}\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n render() {\r\n if (!this.props.code || this.props.busy) {\r\n return
;\r\n } else {\r\n return (\r\n
\r\n {this.renderNavigation()}\r\n
\r\n
\r\n {this.props.dictionary.campaign_instructions_message}\r\n
\r\n
\r\n
\r\n
\r\n \r\n {\r\n this.props.onInstructionsChanged({\r\n ...this.props.instructions,\r\n distributionType: event.target.value,\r\n });\r\n }}\r\n />\r\n \r\n {\r\n this.props.dictionary\r\n .campaign_instructions_no_instructions\r\n }\r\n \r\n \r\n \r\n {\r\n this.props.onInstructionsChanged({\r\n ...this.props.instructions,\r\n distributionType: event.target.value,\r\n });\r\n }}\r\n />\r\n \r\n {this.props.dictionary.campaign_instructions_paper_check}\r\n \r\n \r\n \r\n {\r\n this.props.onInstructionsChanged({\r\n ...this.props.instructions,\r\n distributionType: event.target.value,\r\n });\r\n }}\r\n />\r\n \r\n {\r\n this.props.dictionary\r\n .campaign_instructions_particular_program\r\n }\r\n \r\n \r\n \r\n {\r\n this.props.onInstructionsChanged({\r\n ...this.props.instructions,\r\n distributionType: event.target.value,\r\n });\r\n }}\r\n />\r\n \r\n {\r\n this.props.dictionary\r\n .campaign_instructions_particular_person\r\n }\r\n \r\n \r\n \r\n {\r\n this.props.onInstructionsChanged({\r\n ...this.props.instructions,\r\n distributionType: event.target.value,\r\n });\r\n }}\r\n />\r\n \r\n {this.props.dictionary.campaign_instructions_other}\r\n \r\n \r\n \r\n
\r\n\r\n {this.props.instructions.distributionType != \"No Instructions\" ? (\r\n
\r\n {this.renderContactInputs()}\r\n {this.props.instructions.distributionType == \"Paper Check\"\r\n ? this.renderAddressInputs()\r\n : null}\r\n {this.renderNotesInputs()}\r\n
\r\n ) : null}\r\n
\r\n
\r\n {this.renderAside()}\r\n
\r\n );\r\n }\r\n }\r\n}\r\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./selectedCharities.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./selectedCharities.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faTimesCircle } from \"@fortawesome/pro-light-svg-icons/faTimesCircle\";\r\nimport { faChevronUp } from \"@fortawesome/pro-light-svg-icons/faChevronUp\";\r\nimport { faChevronDown } from \"@fortawesome/pro-light-svg-icons/faChevronDown\";\r\nimport { faGiftCard } from \"@fortawesome/pro-light-svg-icons/faGiftCard\";\r\nimport ReactGA from \"react-ga\";\r\nimport styles from \"../../styles/presentational/selectedCharities.css\";\r\n\r\nexport class SelectedCharities extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n }\r\n render() {\r\n return (\r\n
0 ? \"\" : \" \" + styles.empty)\r\n }\r\n >\r\n
\r\n {this.props.dictionary.selected_charities_header}\r\n
\r\n
\r\n
\r\n 0\r\n ? \" \" + styles.active\r\n : \"\")\r\n }\r\n onClick={() => {\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Continue Button\",\r\n label: \"/Spend/Presentational/SelectedCharities\",\r\n });\r\n this.props.onContinue();\r\n }}\r\n >\r\n {this.props.dictionary.selected_charities_continue}\r\n \r\n {\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Collapse \" + this.props.collapse,\r\n label: \"/Spend/Presentational/SelectedCharities\",\r\n });\r\n this.props.onToggleCollapse();\r\n }}\r\n >\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./categorySelector.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./categorySelector.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\r\nimport { Busy } from \"../presentational/busy\";\r\nimport { SelectedCharities } from \"../presentational/selectedCharities\";\r\nimport { Card } from \"../presentational/card\";\r\nimport { SuggestedCharity } from \"../presentational/suggestedCharity\";\r\nimport ReactGA from \"react-ga\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faSearch } from \"@fortawesome/pro-light-svg-icons/faSearch\";\r\nimport styles from \"../../styles/panels/categorySelector.css\";\r\nimport * as utilities from \"../../middleware/utilities\";\r\n\r\nexport class CategorySelector extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n }\r\n componentDidMount() {\r\n ReactGA.pageview(\"/Spend/CategorySelector\");\r\n utilities\r\n .isCodeValid(this.props.code)\r\n .then((valid) => {\r\n if (!valid) {\r\n this.props.onCodeError();\r\n }\r\n })\r\n .catch(() => {\r\n this.props.onCodeError();\r\n });\r\n }\r\n renderNavigation() {\r\n return (\r\n
\r\n
\r\n {this.props.dictionary.category_selector_header}\r\n
\r\n
\r\n );\r\n }\r\n renderCategories() {\r\n return (\r\n
\r\n {this.props.categories.map((category) => {\r\n return (\r\n
{\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Category \" + category.title,\r\n label: \"/Spend/CategorySelector\",\r\n });\r\n this.props.onSelectCategory(category);\r\n }}\r\n >\r\n
\r\n
{category.title}
\r\n
\r\n );\r\n })}\r\n
{\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Search All\",\r\n label: \"/Spend/CategorySelector\",\r\n });\r\n this.props.onSearchAll();\r\n }}\r\n >\r\n
\r\n
\r\n {this.props.dictionary.category_selector_search_all}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n renderAside() {\r\n return (\r\n
\r\n
{\r\n this.props.onToggleCollapseSelectedCharities();\r\n }}\r\n onRemoveCharity={(ein) => {\r\n this.props.onRemoveCharity(ein);\r\n }}\r\n onContinue={() => {\r\n this.props.onContinue();\r\n }}\r\n />\r\n \r\n {this.props.donation.campaignDetail &&\r\n this.props.donation.campaignDetail.suggestedCharity &&\r\n this.props.donation.campaignDetail.suggestedCharityMarkup ? (\r\n \r\n {\r\n this.props.onViewCharity(charity);\r\n }}\r\n onSelectCharity={(charity) => {\r\n this.props.onSelectCharity(charity);\r\n }}\r\n onRemoveCharity={(ein) => {\r\n this.props.onRemoveCharity(ein);\r\n }}\r\n />\r\n
\r\n ) : null}\r\n \r\n );\r\n }\r\n render() {\r\n if (this.props.busy) {\r\n return
;\r\n } else {\r\n return (\r\n
\r\n {this.renderNavigation()}\r\n
\r\n {this.renderCategories()}\r\n {this.props.donation.campaignDetail &&\r\n this.props.donation.campaignDetail.suggestedCharity &&\r\n this.props.donation.campaignDetail.suggestedCharityMarkup ? (\r\n
\r\n {\r\n this.props.onViewCharity(charity);\r\n }}\r\n onSelectCharity={(charity) => {\r\n this.props.onSelectCharity(charity);\r\n }}\r\n onRemoveCharity={(ein) => {\r\n this.props.onRemoveCharity(ein);\r\n }}\r\n />\r\n
\r\n ) : null}\r\n
\r\n {this.renderAside()}\r\n
\r\n );\r\n }\r\n }\r\n}\r\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./categoryNavigation.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./categoryNavigation.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\r\nimport ReactGA from \"react-ga\";\r\nimport styles from \"../../styles/presentational/categoryNavigation.css\";\r\n\r\nexport class CategoryNavigation extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n }\r\n render() {\r\n return (\r\n
\r\n \r\n {this.props.categories.map((category, index) => {\r\n return (\r\n
{\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Category \" + category.title,\r\n label: \"/Spend/Presentational/CategoryNavigation\",\r\n });\r\n this.props.onSelectCategory(category);\r\n }}\r\n >\r\n {this.props.selectedCategory &&\r\n this.props.selectedCategory.id == category.id ? (\r\n
{category.title}
\r\n ) : (\r\n category.title\r\n )}\r\n
\r\n );\r\n })}\r\n
\r\n {\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Search All\",\r\n label: \"/Spend/Presentational/CategoryNavigation\",\r\n });\r\n this.props.onSearchAll();\r\n }}\r\n >\r\n {this.props.dictionary.category_selector_search_all}\r\n
\r\n \r\n );\r\n }\r\n}\r\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./featuredCharitySelector.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./featuredCharitySelector.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\r\nimport { Busy } from \"../presentational/busy\";\r\nimport { SelectedCharities } from \"../presentational/selectedCharities\";\r\nimport { Card } from \"../presentational/card\";\r\nimport { CategoryNavigation } from \"../presentational/categoryNavigation\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faArrowCircleLeft } from \"@fortawesome/pro-light-svg-icons/faArrowCircleLeft\";\r\nimport GoogleFontLoader from \"react-google-font-loader\";\r\nimport ReactGA from \"react-ga\";\r\nimport styles from \"../../styles/panels/featuredCharitySelector.css\";\r\nimport * as utilities from \"../../middleware/utilities\";\r\n\r\nexport class FeaturedCharitySelector extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n busy: false,\r\n featuredCharities: [],\r\n charity: null,\r\n hoverPosition: { top: 0, left: 0 },\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n ReactGA.pageview(\"/Spend/FeaturedCharitySelector\");\r\n this.getCharities();\r\n utilities\r\n .isCodeValid(this.props.code)\r\n .then((valid) => {\r\n if (!valid) {\r\n this.props.onCodeError();\r\n }\r\n })\r\n .catch(() => {\r\n this.props.onCodeError();\r\n });\r\n }\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.selectedCategory.id != this.props.selectedCategory.id) {\r\n this.getCharities();\r\n }\r\n }\r\n getCharities() {\r\n this.setState({ busy: true }, () => {\r\n if (this.props.selectedCategory) {\r\n utilities\r\n .getFeaturedCharities(this.props.selectedCategory.id)\r\n .then((featuredCharities) => {\r\n this.setState({\r\n busy: false,\r\n featuredCharities: featuredCharities.charities.filter(\r\n (charity, index, array) => {\r\n return (\r\n charity.ein &&\r\n charity.ein.length > 0 &&\r\n index ==\r\n array.findIndex((item) => {\r\n return item.ein == charity.ein;\r\n })\r\n );\r\n }\r\n ),\r\n });\r\n });\r\n }\r\n });\r\n }\r\n renderBusy() {\r\n return (\r\n
\r\n );\r\n }\r\n renderNavigation() {\r\n let category = { ...this.props.selectedCategory };\r\n return (\r\n
\r\n
\r\n
{\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Back Button\",\r\n label: \"/Spend/FeaturedCharitySelector\",\r\n });\r\n this.props.onBack();\r\n }}\r\n >\r\n \r\n
\r\n {category.title}\r\n
\r\n
\r\n );\r\n }\r\n renderCallout() {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
{this.state.charity.name} \r\n
{this.state.charity.description}
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n renderCharities() {\r\n let selectedEINs = this.props.selectedCharities.map((charity) => {\r\n return charity.ein;\r\n });\r\n return (\r\n
\r\n {this.state.featuredCharities.map((charity) => {\r\n return (\r\n
{\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Open Charity \" + charity.ein,\r\n label: \"/Spend/FeaturedCharitySelector\",\r\n });\r\n this.props.onViewCharity(charity);\r\n }}\r\n >\r\n
\r\n
{\r\n let boundingClientRect =\r\n event.target.getBoundingClientRect();\r\n this.setState({\r\n charity: charity,\r\n hoverPosition: {\r\n top: boundingClientRect.top,\r\n left: boundingClientRect.left + event.target.width,\r\n },\r\n });\r\n }}\r\n onMouseLeave={() => {\r\n this.setState({\r\n charity: null,\r\n hoverPosition: { top: 0, left: 0 },\r\n });\r\n }}\r\n />\r\n
\r\n
{charity.name}
\r\n
\r\n {selectedEINs.indexOf(charity.ein) == -1 ? (\r\n this.props.additionalCharityCount >=\r\n this.props.selectedCharities.length ? (\r\n {\r\n event.stopPropagation();\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Select Charity\",\r\n label: \"/Spend/FeaturedCharitySelector\",\r\n });\r\n this.props.onSelectCharity(charity);\r\n }}\r\n >\r\n {this.props.dictionary.featured_charity_selector_select}\r\n \r\n ) : (\r\n \r\n {this.props.dictionary.featured_charity_selector_disabled}\r\n \r\n )\r\n ) : (\r\n {\r\n event.stopPropagation();\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Remove Charity\",\r\n label: \"/Spend/FeaturedCharitySelector\",\r\n });\r\n this.props.onRemoveCharity(charity.ein);\r\n }}\r\n >\r\n {this.props.dictionary.featured_charity_selector_unselect}\r\n \r\n )}\r\n
\r\n
\r\n );\r\n })}\r\n {this.state.charity ? this.renderCallout() : null}\r\n
\r\n );\r\n }\r\n renderAside() {\r\n return (\r\n
\r\n {\r\n this.props.onToggleCollapseSelectedCharities();\r\n }}\r\n onRemoveCharity={(ein) => {\r\n this.props.onRemoveCharity(ein);\r\n }}\r\n onContinue={() => {\r\n this.props.onContinue();\r\n }}\r\n />\r\n \r\n
\r\n );\r\n }\r\n render() {\r\n if (this.props.busy) {\r\n return
;\r\n } else {\r\n let category = { ...this.props.selectedCategory };\r\n return (\r\n
\r\n
\r\n {this.renderNavigation()}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
{category.quote}
\r\n
{category.quotee}
\r\n
\r\n
\r\n {this.state.busy ? this.renderBusy() : this.renderCharities()}\r\n
{\r\n this.props.onSelectCategory(category);\r\n }}\r\n onSearchAll={() => {\r\n this.props.onSearchAll();\r\n }}\r\n />\r\n \r\n {this.renderAside()}\r\n
\r\n );\r\n }\r\n }\r\n}\r\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./nationalCharitySelector.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./nationalCharitySelector.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\r\nimport { Busy } from \"../presentational/busy\";\r\nimport { SelectedCharities } from \"../presentational/selectedCharities\";\r\nimport { Card } from \"../presentational/card\";\r\nimport { CategoryNavigation } from \"../presentational/categoryNavigation\";\r\nimport { SuggestedCharity } from \"../presentational/suggestedCharity\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faArrowCircleLeft } from \"@fortawesome/pro-light-svg-icons/faArrowCircleLeft\";\r\nimport { faChevronUp } from \"@fortawesome/pro-light-svg-icons/faChevronUp\";\r\nimport { faChevronDown } from \"@fortawesome/pro-light-svg-icons/faChevronDown\";\r\nimport ReactGA from \"react-ga\";\r\nimport styles from \"../../styles/panels/nationalCharitySelector.css\";\r\nimport * as utilities from \"../../middleware/utilities\";\r\n\r\nexport class NationalCharitySelector extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.onScroll = this.onScroll.bind(this);\r\n this.state = {\r\n busy: false,\r\n nationalCharities: [],\r\n charity: null,\r\n hoverPosition: { top: 0, left: 0 },\r\n searchCount: null,\r\n searched: false,\r\n filter: {\r\n query: \"\",\r\n postalCode: \"\",\r\n columnName: \"\",\r\n continuationToken: null,\r\n },\r\n collapse: false,\r\n };\r\n }\r\n componentDidMount() {\r\n ReactGA.pageview(\"/Spend/NationalCharitySelector\");\r\n window.addEventListener(\"scroll\", this.onScroll);\r\n utilities\r\n .isCodeValid(this.props.code)\r\n .then((valid) => {\r\n if (!valid) {\r\n this.props.onCodeError();\r\n }\r\n })\r\n .catch(() => {\r\n this.props.onCodeError();\r\n });\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener(\"scroll\", this.onScroll);\r\n }\r\n\r\n onScroll() {\r\n if (\r\n document.documentElement.offsetHeight ==\r\n document.documentElement.scrollTop + window.innerHeight &&\r\n !this.state.busy &&\r\n this.state.searchCount > this.state.nationalCharities.length\r\n ) {\r\n this.getMoreCharities();\r\n }\r\n }\r\n\r\n getCharities() {\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Search\",\r\n label:\r\n \"Query: \" +\r\n this.state.filter.query +\r\n \"Postal Code: \" +\r\n this.state.filter.postalCode +\r\n \"Category: \" +\r\n this.state.filter.columnName,\r\n });\r\n this.setState({ busy: true }, () => {\r\n utilities\r\n .getNationalCharities({\r\n ...this.state.filter,\r\n continuationToken: null,\r\n })\r\n .then((nationalCharities) => {\r\n this.setState({\r\n busy: false,\r\n nationalCharities: nationalCharities.charities,\r\n searchCount: nationalCharities.totalCount,\r\n searched: true,\r\n filter: {\r\n ...this.state.filter,\r\n continuationToken: nationalCharities.continuationToken,\r\n },\r\n collapse: true,\r\n });\r\n });\r\n });\r\n }\r\n getMoreCharities() {\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Search More\",\r\n label:\r\n \"Query: \" +\r\n this.state.filter.query +\r\n \"Postal Code: \" +\r\n this.state.filter.postalCode +\r\n \"Category: \" +\r\n this.state.filter.columnName,\r\n });\r\n this.setState({ busy: true }, () => {\r\n utilities\r\n .getNationalCharities(this.state.filter)\r\n .then((nationalCharities) => {\r\n console.log(nationalCharities);\r\n this.setState({\r\n busy: false,\r\n nationalCharities: this.state.nationalCharities.concat(\r\n nationalCharities.charities\r\n ),\r\n searchCount: nationalCharities.totalCount,\r\n filter: {\r\n ...this.state.filter,\r\n continuationToken: nationalCharities.continuationToken,\r\n },\r\n });\r\n });\r\n });\r\n }\r\n renderBusy() {\r\n return (\r\n
\r\n );\r\n }\r\n renderNavigation() {\r\n return (\r\n
\r\n
\r\n {this.state.nationalCharities.length > 0 ? (\r\n
{\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Back Button\",\r\n label: \"/Spend/NationalCharitySelector\",\r\n });\r\n this.setState({ nationalCharities: [] });\r\n // this.props.onBack();\r\n }}\r\n >\r\n \r\n
\r\n ) : null}\r\n {this.props.dictionary.national_charity_selector_header}\r\n
\r\n
\r\n );\r\n }\r\n renderSearch() {\r\n return (\r\n
\r\n
\r\n \r\n {this.props.dictionary.national_charity_selector_query_label}\r\n \r\n {\r\n this.setState({\r\n filter: {\r\n ...this.state.filter,\r\n query: event.currentTarget.value,\r\n },\r\n });\r\n }}\r\n onKeyPress={(event) => {\r\n if (event.key === \"Enter\") {\r\n this.getCharities();\r\n }\r\n }}\r\n />\r\n 0 ? \" \" + styles.active : \"\")\r\n }\r\n onClick={() => {\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Search\",\r\n label: \"/Spend/NationalCharitySelector\",\r\n });\r\n this.getCharities();\r\n }}\r\n >\r\n {this.props.dictionary.national_charity_selector_search}\r\n \r\n
\r\n
0 && this.state.collapse\r\n ? \" \" + styles.mobileHide\r\n : \"\")\r\n }\r\n >\r\n
\r\n \r\n {this.props.dictionary.national_charity_selector_postal_label}\r\n \r\n {\r\n this.setState({\r\n filter: {\r\n ...this.state.filter,\r\n postalCode: event.currentTarget.value,\r\n },\r\n });\r\n }}\r\n onKeyPress={(event) => {\r\n if (event.key === \"Enter\") {\r\n this.getCharities();\r\n }\r\n }}\r\n />\r\n
\r\n
\r\n \r\n {this.props.dictionary.national_charity_selector_category_label}\r\n \r\n {\r\n this.setState({\r\n filter: {\r\n ...this.state.filter,\r\n columnName: event.currentTarget.value,\r\n },\r\n });\r\n }}\r\n >\r\n Select category \r\n {this.props.categories.map((category) => {\r\n return (\r\n \r\n {category.title}\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n\r\n
\r\n {this.state.searchCount > 0\r\n ? `${this.state.searchCount} ${this.props.dictionary.national_charity_selector_results_label}`\r\n : this.state.searched\r\n ? \"No search results\"\r\n : null}\r\n {this.state.searched && (\r\n
{\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Collapse Button \" + !this.state.collapse,\r\n label: \"/Spend/NationalCharitySelector\",\r\n });\r\n this.setState({ collapse: !this.state.collapse });\r\n }}\r\n >\r\n \r\n {this.state.collapse\r\n ? this.props.dictionary.national_charity_selector_open_filter\r\n : this.props.dictionary.national_charity_selector_close_filter}\r\n
\r\n )}\r\n
\r\n
\r\n );\r\n }\r\n renderCallout() {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
{this.state.charity.name} \r\n
{this.state.charity.description}
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n renderFeaturedCharity(charity, selectedEINs) {\r\n return (\r\n
{\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Open Charity \" + charity.ein,\r\n label: \"/Spend/NationalCharitySelector\",\r\n });\r\n this.props.onViewCharity(charity);\r\n }}\r\n >\r\n
\r\n
{\r\n let boundingClientRect = event.target.getBoundingClientRect();\r\n this.setState({\r\n charity: charity,\r\n hoverPosition: {\r\n top: boundingClientRect.top,\r\n left: boundingClientRect.left + event.target.width,\r\n },\r\n });\r\n }}\r\n onMouseLeave={() => {\r\n this.setState({\r\n charity: null,\r\n hoverPosition: { top: 0, left: 0 },\r\n });\r\n }}\r\n />\r\n
\r\n
{charity.name}
\r\n
\r\n {selectedEINs.indexOf(charity.ein) == -1 ? (\r\n this.props.additionalCharityCount >=\r\n this.props.selectedCharities.length ? (\r\n {\r\n event.stopPropagation();\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Select Charity\",\r\n label: \"/Spend/NationalCharitySelector\",\r\n });\r\n this.props.onSelectCharity(charity);\r\n }}\r\n >\r\n {this.props.dictionary.national_charity_selector_select}\r\n \r\n ) : (\r\n \r\n {this.props.dictionary.national_charity_selector_disabled}\r\n \r\n )\r\n ) : (\r\n {\r\n event.stopPropagation();\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Remove Charity\",\r\n label: \"/Spend/NationalCharitySelector\",\r\n });\r\n this.props.onRemoveCharity(charity.ein);\r\n }}\r\n >\r\n {this.props.dictionary.national_charity_selector_unselect}\r\n \r\n )}\r\n
\r\n
\r\n );\r\n }\r\n renderNationalCharity(charity, selectedEINs) {\r\n return (\r\n
\r\n
\r\n
{charity.name}
\r\n
{charity.description}
\r\n
EIN: {charity.ein}
\r\n
\r\n
{charity.street}
\r\n
{charity.city},
\r\n
{charity.state}
\r\n
{charity.postalCode}
\r\n
\r\n
\r\n
\r\n {selectedEINs.indexOf(charity.ein) == -1 ? (\r\n this.props.additionalCharityCount >=\r\n this.props.selectedCharities.length ? (\r\n {\r\n event.stopPropagation();\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Select Charity\",\r\n label: \"/Spend/NationalCharitySelector\",\r\n });\r\n this.props.onSelectCharity(charity);\r\n }}\r\n >\r\n {this.props.dictionary.national_charity_selector_select}\r\n \r\n ) : (\r\n \r\n {this.props.dictionary.national_charity_selector_disabled}\r\n \r\n )\r\n ) : (\r\n {\r\n event.stopPropagation();\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Remove Charity\",\r\n label: \"/Spend/NationalCharitySelector\",\r\n });\r\n this.props.onRemoveCharity(charity.ein);\r\n }}\r\n >\r\n {this.props.dictionary.national_charity_selector_unselect}\r\n \r\n )}\r\n
\r\n
\r\n );\r\n }\r\n renderCharities() {\r\n let selectedEINs = this.props.selectedCharities.map((charity) => {\r\n return charity.ein;\r\n });\r\n return (\r\n
\r\n {this.state.nationalCharities.map((charity) => {\r\n if (charity.partitionKey == \"0\") {\r\n return this.renderFeaturedCharity(charity, selectedEINs);\r\n } else {\r\n return this.renderNationalCharity(charity, selectedEINs);\r\n }\r\n })}\r\n {this.state.charity ? this.renderCallout() : null}\r\n {this.state.busy ? this.renderBusy() : null}\r\n
\r\n );\r\n }\r\n renderAside() {\r\n return (\r\n
\r\n
{\r\n this.props.onToggleCollapseSelectedCharities();\r\n }}\r\n onRemoveCharity={(ein) => {\r\n this.props.onRemoveCharity(ein);\r\n }}\r\n onContinue={() => {\r\n this.props.onContinue();\r\n }}\r\n />\r\n \r\n {this.props.donation.campaignDetail &&\r\n this.props.donation.campaignDetail.suggestedCharity &&\r\n this.props.donation.campaignDetail.suggestedCharityMarkup ? (\r\n \r\n {\r\n this.props.onViewCharity(charity);\r\n }}\r\n onSelectCharity={(charity) => {\r\n this.props.onSelectCharity(charity);\r\n }}\r\n onRemoveCharity={(ein) => {\r\n this.props.onRemoveCharity(ein);\r\n }}\r\n />\r\n
\r\n ) : null}\r\n \r\n );\r\n }\r\n\r\n renderCategories() {\r\n return (\r\n
\r\n {this.props.categories.map((category) => {\r\n return (\r\n
{\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Category \" + category.title,\r\n label: \"/Spend/CategorySelector\",\r\n });\r\n this.props.onSelectCategory(category);\r\n }}\r\n >\r\n
\r\n
{category.title}
\r\n
\r\n );\r\n })}\r\n
\r\n );\r\n }\r\n\r\n render() {\r\n if (this.props.busy) {\r\n return
;\r\n } else {\r\n return (\r\n
\r\n {this.renderNavigation()}\r\n
\r\n {this.renderSearch()}\r\n {this.renderCharities()}\r\n {!this.state.busy && this.state.nationalCharities.length == 0\r\n ? this.renderCategories()\r\n : null}\r\n {/* {this.state.nationalCharities.length == 0 ? (\r\n {\r\n this.props.onSelectCategory(category);\r\n }}\r\n onSearchAll={() => {\r\n this.props.onSearchAll();\r\n }}\r\n />\r\n ) : null} */}\r\n
\r\n {this.renderAside()}\r\n
\r\n );\r\n }\r\n }\r\n}\r\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./charityDetails.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./charityDetails.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\r\nimport { Busy } from \"../presentational/busy\";\r\nimport { SelectedCharities } from \"../presentational/selectedCharities\";\r\nimport { Card } from \"../presentational/card\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faArrowCircleLeft } from \"@fortawesome/pro-light-svg-icons/faArrowCircleLeft\";\r\nimport ReactGA from \"react-ga\";\r\nimport styles from \"../../styles/panels/charityDetails.css\";\r\nimport * as utilities from \"../../middleware/utilities\";\r\n\r\nexport class CharityDetails extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n busy: false,\r\n charity: this.props.tempCharity,\r\n };\r\n }\r\n componentDidMount() {\r\n ReactGA.pageview(\"/Spend/CharityDetails\");\r\n utilities\r\n .isCodeValid(this.props.code)\r\n .then((valid) => {\r\n if (!valid) {\r\n this.props.onCodeError();\r\n }\r\n this.getCharity();\r\n })\r\n .catch(() => {\r\n this.props.onCodeError();\r\n });\r\n }\r\n componentDidUpdate(prevProps) {\r\n if (\r\n this.props.selectedCategory &&\r\n (prevProps.selectedCategory.id != this.props.selectedCategory.id ||\r\n prevProps.selectedCharityID != this.props.selectedCharityID)\r\n ) {\r\n this.getCharity();\r\n }\r\n }\r\n getCharity() {\r\n if (this.props.selectedCategory) {\r\n this.setState({ busy: true }, () => {\r\n utilities\r\n .getFeaturedCharities(this.props.selectedCategory.id)\r\n .then((featuredCharities) => {\r\n this.setState({\r\n busy: false,\r\n charity: featuredCharities.charities.find((charity) => {\r\n return charity.ein == this.props.selectedCharityID;\r\n }),\r\n });\r\n });\r\n });\r\n } else {\r\n this.setState({ busy: true }, () => {\r\n utilities\r\n .getNationalCharities({\r\n query: this.props.selectedCharityID,\r\n postalCode: \"\",\r\n columnName: \"\",\r\n continuationToken: null,\r\n })\r\n .then((nationalCharities) => {\r\n this.setState({\r\n busy: false,\r\n charity: nationalCharities.charities.find((charity) => {\r\n return charity.ein == this.props.selectedCharityID;\r\n }),\r\n });\r\n });\r\n });\r\n }\r\n }\r\n renderNavigation() {\r\n return (\r\n
\r\n
\r\n
{\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Back Button\",\r\n label: \"/Spend/CharityDetails\",\r\n });\r\n this.props.onBack();\r\n }}\r\n >\r\n \r\n
\r\n {this.state.charity.name}\r\n
\r\n
\r\n );\r\n }\r\n renderAside() {\r\n return (\r\n
\r\n {\r\n this.props.onToggleCollapseSelectedCharities();\r\n }}\r\n onRemoveCharity={(ein) => {\r\n this.props.onRemoveCharity(ein);\r\n }}\r\n onContinue={() => {\r\n this.props.onContinue();\r\n }}\r\n />\r\n \r\n
\r\n );\r\n }\r\n render() {\r\n if (this.props.busy || this.state.busy) {\r\n return
;\r\n } else {\r\n if (this.state.charity) {\r\n let selectedEINs = this.props.selectedCharities.map((charity) => {\r\n return charity.ein;\r\n });\r\n return (\r\n
\r\n {this.renderNavigation()}\r\n
\r\n
\r\n
\r\n
\r\n {this.state.charity.description}\r\n
\r\n
\r\n {selectedEINs.indexOf(this.state.charity.ein) == -1 ? (\r\n this.props.additionalCharityCount >=\r\n this.props.selectedCharities.length ? (\r\n {\r\n event.stopPropagation();\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Select Charity\",\r\n label: \"/Spend/CharityDetails\",\r\n });\r\n this.props.onSelectCharity(this.state.charity);\r\n }}\r\n >\r\n {this.props.dictionary.featured_charity_selector_select}\r\n \r\n ) : (\r\n \r\n {\r\n this.props.dictionary\r\n .featured_charity_selector_disabled\r\n }\r\n \r\n )\r\n ) : (\r\n {\r\n event.stopPropagation();\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Remove Charity\",\r\n label: \"/Spend/CharityDetails\",\r\n });\r\n this.props.onRemoveCharity(this.state.charity.ein);\r\n }}\r\n >\r\n {this.props.dictionary.featured_charity_selector_unselect}\r\n \r\n )}\r\n
\r\n
\r\n
\r\n {this.renderAside()}\r\n
\r\n );\r\n } else {\r\n return null;\r\n }\r\n }\r\n }\r\n}\r\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./charityDistribution.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./charityDistribution.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./index.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./index.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\r\nimport { Busy } from \"../presentational/busy\";\r\nimport { Card } from \"../presentational/card\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faArrowCircleLeft } from \"@fortawesome/pro-light-svg-icons/faArrowCircleLeft\";\r\nimport { faMinus } from \"@fortawesome/pro-light-svg-icons/faMinus\";\r\nimport { faPlus } from \"@fortawesome/pro-light-svg-icons/faPlus\";\r\nimport { faCheckSquare } from \"@fortawesome/pro-light-svg-icons/faCheckSquare\";\r\nimport { faSquare } from \"@fortawesome/pro-light-svg-icons/faSquare\";\r\nimport ReactGA from \"react-ga\";\r\nimport styles from \"../../styles/panels/charityDistribution.css\";\r\nimport \"rc-slider/assets/index.css\";\r\nimport * as utilities from \"../../middleware/utilities\";\r\n\r\nexport class CharityDistribution extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n }\r\n componentDidMount() {\r\n ReactGA.pageview(\"/Spend/CharityDistribution\");\r\n utilities\r\n .isCodeValid(this.props.code)\r\n .then(valid => {\r\n if (!valid) {\r\n this.props.onCodeError();\r\n }\r\n })\r\n .catch(() => {\r\n this.props.onCodeError();\r\n });\r\n }\r\n\r\n renderNavigation() {\r\n return (\r\n
\r\n
\r\n
{\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Back Button\",\r\n label: \"/Spend/CharityDistribution\"\r\n });\r\n this.props.onBack();\r\n }}\r\n >\r\n \r\n
\r\n {this.props.dictionary.charity_distribution_header}\r\n
\r\n
\r\n );\r\n }\r\n renderAside() {\r\n return (\r\n
\r\n
\r\n {\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Back Button\",\r\n label: \"/Spend/CharityDistribution\"\r\n });\r\n this.props.onBack();\r\n }}\r\n >\r\n {this.props.dictionary.charity_distribution_back}\r\n \r\n {\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Continue Button\",\r\n label: \"/Spend/CharityDistribution\"\r\n });\r\n this.props.onContinue();\r\n }}\r\n >\r\n {this.props.dictionary.charity_distribution_continue}\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n renderTotalError(difference) {\r\n if (this.props.totalValid) {\r\n return null;\r\n } else {\r\n return (\r\n
\r\n {difference > 0 ? (\r\n
\r\n {this.props.validation.charity_distribution_input_total_low\r\n .replace(\r\n \"{Total}\",\r\n this.props.donation.amount.toLocaleString(\"en-US\", {\r\n style: \"currency\",\r\n currency: \"USD\",\r\n minimumFractionDigits: 2\r\n })\r\n )\r\n .replace(\r\n \"{Difference}\",\r\n difference < 1\r\n ? difference.toLocaleString(\"en-US\", {\r\n style: \"currency\",\r\n currency: \"USD\",\r\n minimumFractionDigits: 2\r\n })\r\n : Math.trunc(difference).toLocaleString(\"en-US\", {\r\n style: \"currency\",\r\n currency: \"USD\",\r\n minimumFractionDigits: 0\r\n })\r\n )}\r\n
\r\n ) : (\r\n
\r\n {this.props.validation.charity_distribution_input_total_high\r\n .replace(\r\n \"{Total}\",\r\n this.props.donation.amount.toLocaleString(\"en-US\", {\r\n style: \"currency\",\r\n currency: \"USD\",\r\n minimumFractionDigits: 2\r\n })\r\n )\r\n .replace(\r\n \"{Difference}\",\r\n difference > -1\r\n ? (difference * -1).toLocaleString(\"en-US\", {\r\n style: \"currency\",\r\n currency: \"USD\",\r\n minimumFractionDigits: 2\r\n })\r\n : Math.trunc(difference * -1).toLocaleString(\"en-US\", {\r\n style: \"currency\",\r\n currency: \"USD\",\r\n minimumFractionDigits: 0\r\n })\r\n )}\r\n
\r\n )}\r\n
\r\n );\r\n }\r\n }\r\n renderBoundError() {\r\n if (this.props.inBoundsValid) {\r\n return null;\r\n } else {\r\n return (\r\n
\r\n {this.props.validation.charity_distribution_input_total_out_of_bounds}\r\n
\r\n );\r\n }\r\n }\r\n renderReset() {\r\n if (this.props.totalValid && this.props.inBoundsValid) {\r\n return null;\r\n } else {\r\n return (\r\n
\r\n
{\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Reset Button\",\r\n label: \"/Spend/CharityDistribution\"\r\n });\r\n this.props.onReset();\r\n }}\r\n >\r\n {this.props.dictionary.charity_distribution_reset}\r\n
\r\n
\r\n );\r\n }\r\n }\r\n\r\n renderCharities() {\r\n let total = this.props.selectedCharities.reduce((a, b) => ({\r\n amount: a.amount + b.amount\r\n }));\r\n let difference = this.props.donation.amount - total.amount;\r\n return (\r\n
\r\n {this.renderTotalError(difference)}\r\n {this.renderBoundError()}\r\n {this.renderReset()}\r\n {this.props.selectedCharities.map(charity => {\r\n return (\r\n
\r\n
\r\n
1\r\n ? \"\"\r\n : \" \" + styles.singleImage)\r\n }\r\n />\r\n
\r\n
\r\n {this.props.selectedCharities.length > 1 ? (\r\n
\r\n
{\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Minus Button\",\r\n label: \"/Spend/CharityDistribution\"\r\n });\r\n this.props.onCharityChanged(\r\n charity.amount > 3 ? charity.amount - 1 : 3,\r\n charity.ein\r\n );\r\n }}\r\n >\r\n \r\n
\r\n $\r\n
{\r\n this.props.onCharityChanged(\r\n event.target.value,\r\n charity.ein\r\n );\r\n }}\r\n />\r\n {charity.cents > 0\r\n ? (charity.cents + \"0\").slice(1, 4)\r\n : null}\r\n
{\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Plus Button\",\r\n label: \"/Spend/CharityDistribution\"\r\n });\r\n this.props.onCharityChanged(\r\n charity.amount + 1,\r\n charity.ein\r\n );\r\n }}\r\n >\r\n \r\n
\r\n
\r\n ) : (\r\n
\r\n {(charity.amount + charity.cents).toLocaleString(\"en-US\", {\r\n style: \"currency\",\r\n currency: \"USD\",\r\n minimumFractionDigits: 2\r\n })}\r\n
\r\n )}\r\n
{charity.name}
\r\n
\r\n
\r\n );\r\n })}\r\n {this.renderTotalError(difference)}\r\n {this.renderBoundError()}\r\n
\r\n );\r\n }\r\n\r\n renderOptIn() {\r\n return (\r\n
\r\n
\r\n
{\r\n this.props.onOptInChanged(!this.props.optIn);\r\n }}\r\n >\r\n {this.props.optIn ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n {this.props.dictionary.charity_distribution_stay_informed}\r\n
\r\n
\r\n
\r\n {this.props.dictionary.charity_distribution_input_name}\r\n \r\n
{\r\n this.props.onNameChanged(event.target.value);\r\n }}\r\n />\r\n {this.props.nameValid ? null : (\r\n
\r\n {this.props.validation.charity_distribution_input_name}\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n {this.props.dictionary.charity_distribution_input_email}\r\n \r\n
{\r\n this.props.onEmailChanged(event.target.value);\r\n }}\r\n />\r\n {this.props.emailValid ? null : (\r\n
\r\n {this.props.validation.charity_distribution_input_email}\r\n
\r\n )}\r\n
\r\n
\r\n );\r\n }\r\n\r\n render() {\r\n if (this.props.busy) {\r\n return
;\r\n } else {\r\n return (\r\n
\r\n {this.renderNavigation()}\r\n
\r\n
\r\n {this.props.dictionary.charity_distribution_message}\r\n
\r\n {this.renderCharities()}\r\n
\r\n {this.props.dictionary.charity_distribution_donation_amount}\r\n
\r\n {this.props.donation.amount.toLocaleString(\"en-US\", {\r\n style: \"currency\",\r\n currency: \"USD\",\r\n minimumFractionDigits: 2\r\n })}\r\n
\r\n
\r\n {this.props.selectedCharities.length > 1 ? (\r\n
\r\n {this.props.dictionary.charity_distribution_note}\r\n
\r\n ) : null}\r\n {this.renderOptIn()}\r\n
\r\n {this.renderAside()}\r\n
\r\n );\r\n }\r\n }\r\n}\r\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./thankYou.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./thankYou.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\r\nimport { Busy } from \"../presentational/busy\";\r\nimport { Card } from \"../presentational/card\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faArrowCircleLeft } from \"@fortawesome/pro-light-svg-icons/faArrowCircleLeft\";\r\nimport ReactGA from \"react-ga\";\r\nimport styles from \"../../styles/panels/thankYou.css\";\r\nimport * as utilities from \"../../middleware/utilities\";\r\n\r\nexport class ThankYou extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n }\r\n componentDidMount() {\r\n ReactGA.pageview(\"/Spend/ThankYou\");\r\n utilities\r\n .isCodeValid(this.props.code)\r\n .then((valid) => {\r\n if (!valid) {\r\n this.props.onCodeError();\r\n }\r\n })\r\n .catch(() => {\r\n this.props.onCodeError();\r\n });\r\n }\r\n renderNavigation() {\r\n return (\r\n
\r\n
\r\n
{\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Back Button\",\r\n label: \"/Spend/ThankYou\",\r\n });\r\n this.props.onBack();\r\n }}\r\n >\r\n \r\n
\r\n {this.props.dictionary.thank_you_header}\r\n
\r\n
\r\n );\r\n }\r\n renderNoteInputs() {\r\n return (\r\n
\r\n
\r\n
\r\n {this.props.dictionary.thank_you_input_thank_you_name}\r\n \r\n
{\r\n this.props.onThankYouNameChanged(event.target.value);\r\n }}\r\n />\r\n {this.props.thankYouNameValid ? null : (\r\n
\r\n {this.props.validation.thank_you_input_thank_you_name}\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n {this.props.dictionary.thank_you_input_thank_you_note}\r\n \r\n
\r\n
\r\n );\r\n }\r\n renderAside() {\r\n return (\r\n
\r\n
\r\n {\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Continue Button\",\r\n label: \"/Spend/ThankYou\",\r\n });\r\n this.props.onContinue();\r\n }}\r\n >\r\n {this.props.dictionary.thank_you_continue}\r\n \r\n {\r\n ReactGA.event({\r\n category: \"User Action\",\r\n action: \"Clicked Skip Button\",\r\n label: \"/Spend/ThankYou\",\r\n });\r\n this.props.onSkip();\r\n }}\r\n >\r\n {this.props.dictionary.thank_you_skip}\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n render() {\r\n if (!this.props.code || this.props.busy) {\r\n return
;\r\n } else {\r\n return (\r\n
\r\n {this.renderNavigation()}\r\n
\r\n
\r\n {this.props.dictionary.thank_you_message}\r\n
\r\n {this.renderNoteInputs()}\r\n
\r\n {this.renderAside()}\r\n
\r\n );\r\n }\r\n }\r\n}\r\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar AssertionError = /** @class */ (function (_super) {\n __extends(AssertionError, _super);\n function AssertionError(message) {\n var _this = _super.call(this, message) || this;\n _this.name = 'AssertionError';\n return _this;\n }\n return AssertionError;\n}(Error));\nexport default function assert(value, message) {\n if (!value) {\n throw new AssertionError(message);\n }\n}\n","export default function objectToGetParams(object) {\n var params = Object.entries(object)\n .filter(function (_a) {\n var value = _a[1];\n return value !== undefined && value !== null;\n })\n .map(function (_a) {\n var key = _a[0], value = _a[1];\n return encodeURIComponent(key) + \"=\" + encodeURIComponent(String(value));\n });\n return params.length > 0 ? \"?\" + params.join('&') : '';\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { Component } from 'react';\nimport cx from 'classnames';\nvar isPromise = function (obj) {\n return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';\n};\nvar getBoxPositionOnWindowCenter = function (width, height) { return ({\n left: window.outerWidth / 2 + (window.screenX || window.screenLeft || 0) - width / 2,\n top: window.outerHeight / 2 + (window.screenY || window.screenTop || 0) - height / 2,\n}); };\nvar getBoxPositionOnScreenCenter = function (width, height) { return ({\n top: (window.screen.height - height) / 2,\n left: (window.screen.width - width) / 2,\n}); };\nfunction windowOpen(url, _a, onClose) {\n var height = _a.height, width = _a.width, configRest = __rest(_a, [\"height\", \"width\"]);\n var config = __assign({ height: height,\n width: width, location: 'no', toolbar: 'no', status: 'no', directories: 'no', menubar: 'no', scrollbars: 'yes', resizable: 'no', centerscreen: 'yes', chrome: 'yes' }, configRest);\n var shareDialog = window.open(url, '', Object.keys(config)\n .map(function (key) { return key + \"=\" + config[key]; })\n .join(', '));\n if (onClose) {\n var interval_1 = window.setInterval(function () {\n try {\n if (shareDialog === null || shareDialog.closed) {\n window.clearInterval(interval_1);\n onClose(shareDialog);\n }\n }\n catch (e) {\n /* eslint-disable no-console */\n console.error(e);\n /* eslint-enable no-console */\n }\n }, 1000);\n }\n return shareDialog;\n}\nvar ShareButton = /** @class */ (function (_super) {\n __extends(ShareButton, _super);\n function ShareButton() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.openShareDialog = function (link) {\n var _a = _this.props, onShareWindowClose = _a.onShareWindowClose, _b = _a.windowHeight, windowHeight = _b === void 0 ? 400 : _b, _c = _a.windowPosition, windowPosition = _c === void 0 ? 'windowCenter' : _c, _d = _a.windowWidth, windowWidth = _d === void 0 ? 550 : _d;\n var windowConfig = __assign({ height: windowHeight, width: windowWidth }, (windowPosition === 'windowCenter'\n ? getBoxPositionOnWindowCenter(windowWidth, windowHeight)\n : getBoxPositionOnScreenCenter(windowWidth, windowHeight)));\n windowOpen(link, windowConfig, onShareWindowClose);\n };\n _this.handleClick = function (event) { return __awaiter(_this, void 0, void 0, function () {\n var _a, beforeOnClick, disabled, networkLink, onClick, url, openShareDialogOnClick, opts, link, returnVal;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this.props, beforeOnClick = _a.beforeOnClick, disabled = _a.disabled, networkLink = _a.networkLink, onClick = _a.onClick, url = _a.url, openShareDialogOnClick = _a.openShareDialogOnClick, opts = _a.opts;\n link = networkLink(url, opts);\n if (disabled) {\n return [2 /*return*/];\n }\n event.preventDefault();\n if (!beforeOnClick) return [3 /*break*/, 2];\n returnVal = beforeOnClick();\n if (!isPromise(returnVal)) return [3 /*break*/, 2];\n return [4 /*yield*/, returnVal];\n case 1:\n _b.sent();\n _b.label = 2;\n case 2:\n if (openShareDialogOnClick) {\n this.openShareDialog(link);\n }\n if (onClick) {\n onClick(event, link);\n }\n return [2 /*return*/];\n }\n });\n }); };\n return _this;\n }\n ShareButton.prototype.render = function () {\n var _a = this.props, beforeOnClick = _a.beforeOnClick, children = _a.children, className = _a.className, disabled = _a.disabled, disabledStyle = _a.disabledStyle, forwardedRef = _a.forwardedRef, networkLink = _a.networkLink, networkName = _a.networkName, onShareWindowClose = _a.onShareWindowClose, openShareDialogOnClick = _a.openShareDialogOnClick, opts = _a.opts, resetButtonStyle = _a.resetButtonStyle, style = _a.style, url = _a.url, windowHeight = _a.windowHeight, windowPosition = _a.windowPosition, windowWidth = _a.windowWidth, rest = __rest(_a, [\"beforeOnClick\", \"children\", \"className\", \"disabled\", \"disabledStyle\", \"forwardedRef\", \"networkLink\", \"networkName\", \"onShareWindowClose\", \"openShareDialogOnClick\", \"opts\", \"resetButtonStyle\", \"style\", \"url\", \"windowHeight\", \"windowPosition\", \"windowWidth\"]);\n var newClassName = cx('react-share__ShareButton', {\n 'react-share__ShareButton--disabled': !!disabled,\n disabled: !!disabled,\n }, className);\n var newStyle = resetButtonStyle\n ? __assign(__assign({ backgroundColor: 'transparent', border: 'none', padding: 0, font: 'inherit', color: 'inherit', cursor: 'pointer' }, style), (disabled && disabledStyle)) : __assign(__assign({}, style), (disabled && disabledStyle));\n return (React.createElement(\"button\", __assign({}, rest, { \"aria-label\": rest['aria-label'] || networkName, className: newClassName, onClick: this.handleClick, ref: forwardedRef, style: newStyle }), children));\n };\n ShareButton.defaultProps = {\n disabledStyle: { opacity: 0.6 },\n openShareDialogOnClick: true,\n resetButtonStyle: true,\n };\n return ShareButton;\n}(Component));\nexport default ShareButton;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport React, { forwardRef } from 'react';\nimport ShareButton from '../ShareButton';\nfunction createShareButton(networkName, link, optsMap, defaultProps) {\n function CreatedButton(props, ref) {\n var opts = optsMap(props);\n var passedProps = __assign({}, props);\n // remove keys from passed props that are passed as opts\n var optsKeys = Object.keys(opts);\n optsKeys.forEach(function (key) {\n delete passedProps[key];\n });\n return (React.createElement(ShareButton, __assign({}, defaultProps, passedProps, { forwardedRef: ref, networkName: networkName, networkLink: link, opts: optsMap(props) })));\n }\n CreatedButton.displayName = \"ShareButton-\" + networkName;\n return forwardRef(CreatedButton);\n}\nexport default createShareButton;\n","import assert from './utils/assert';\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareButton from './hocs/createShareButton';\nfunction facebookLink(url, _a) {\n var quote = _a.quote, hashtag = _a.hashtag;\n assert(url, 'facebook.url');\n return ('https://www.facebook.com/sharer/sharer.php' +\n objectToGetParams({\n u: url,\n quote: quote,\n hashtag: hashtag,\n }));\n}\nvar FacebookShareButton = createShareButton('facebook', facebookLink, function (props) { return ({\n quote: props.quote,\n hashtag: props.hashtag,\n}); }, {\n windowWidth: 550,\n windowHeight: 400,\n});\nexport default FacebookShareButton;\n","import assert from './utils/assert';\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareButton from './hocs/createShareButton';\nfunction twitterLink(url, _a) {\n var title = _a.title, via = _a.via, _b = _a.hashtags, hashtags = _b === void 0 ? [] : _b, _c = _a.related, related = _c === void 0 ? [] : _c;\n assert(url, 'twitter.url');\n assert(Array.isArray(hashtags), 'twitter.hashtags is not an array');\n assert(Array.isArray(related), 'twitter.related is not an array');\n return ('https://twitter.com/share' +\n objectToGetParams({\n url: url,\n text: title,\n via: via,\n hashtags: hashtags.length > 0 ? hashtags.join(',') : undefined,\n related: related.length > 0 ? related.join(',') : undefined,\n }));\n}\nvar TwitterShareButton = createShareButton('twitter', twitterLink, function (props) { return ({\n hashtags: props.hashtags,\n title: props.title,\n via: props.via,\n related: props.related,\n}); }, {\n windowWidth: 550,\n windowHeight: 400,\n});\nexport default TwitterShareButton;\n","import assert from './utils/assert';\nimport objectToGetParams from './utils/objectToGetParams';\nimport createShareButton from './hocs/createShareButton';\nfunction linkedinLink(url, _a) {\n var title = _a.title, summary = _a.summary, source = _a.source;\n assert(url, 'linkedin.url');\n return ('https://linkedin.com/shareArticle' +\n objectToGetParams({ url: url, mini: 'true', title: title, summary: summary, source: source }));\n}\nvar LinkedinShareButton = createShareButton('linkedin', linkedinLink, function (_a) {\n var title = _a.title, summary = _a.summary, source = _a.source;\n return ({ title: title, summary: summary, source: source });\n}, {\n windowWidth: 750,\n windowHeight: 600,\n});\nexport default LinkedinShareButton;\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./shareSpend.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./shareSpend.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\r\nimport { Busy } from \"../presentational/busy\";\r\nimport ReactGA from \"react-ga\";\r\nimport {\r\n FacebookShareButton,\r\n LinkedinShareButton,\r\n TwitterShareButton,\r\n} from \"react-share\";\r\nimport styles from \"../../styles/panels/shareSpend.css\";\r\n\r\nexport class ShareSpend extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n let banner =\r\n this.props.images.share_banners[\r\n Math.floor(Math.random() * this.props.images.share_banners.length)\r\n ];\r\n this.state = {\r\n banner: banner,\r\n };\r\n }\r\n componentDidMount() {\r\n ReactGA.pageview(\"/Spend/Share\");\r\n if (!this.props.code) {\r\n this.props.onEmptyCode();\r\n } else {\r\n fbq(\"trackCustom\", \"SpendCard\", {\r\n value: this.props.donation.amount,\r\n currency: \"USD\",\r\n content_name: \"tisbestcard\",\r\n });\r\n }\r\n }\r\n render() {\r\n if (this.props.busy) {\r\n return
;\r\n } else {\r\n return (\r\n
\r\n {this.props.donation &&\r\n this.props.donation.campaignDetail &&\r\n this.props.donation.campaignDetail.confirmationMarkup ? (\r\n //
\r\n
\r\n ) : (\r\n
\r\n )}\r\n
\r\n
\r\n {this.props.selectedCharities.length > 1\r\n ? this.props.dictionary.share_header_plural\r\n : this.props.dictionary.share_header_single}\r\n
\r\n
\r\n {this.props.selectedCharities.length > 1\r\n ? this.props.dictionary.share_message_plural\r\n : this.props.dictionary.share_message_single}\r\n
\r\n {this.props.selectedCharities.length > 0 ? (\r\n
\r\n {this.props.selectedCharities.map((charity) => {\r\n return {charity.name} ;\r\n })}\r\n \r\n ) : null}\r\n {this.props.dictionary.share_call_to_action ? (\r\n
\r\n {this.props.dictionary.share_call_to_action}\r\n
\r\n ) : null}\r\n
\r\n {this.props.selectedCharities.length > 1\r\n ? this.props.dictionary.share_information_plural\r\n : this.props.dictionary.share_information_single}\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
{this.props.dictionary.share_tip}
\r\n
\r\n
\r\n );\r\n }\r\n }\r\n}\r\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./codeError.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./codeError.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\r\nimport { Busy } from \"../presentational/busy\";\r\nimport ReactGA from \"react-ga\";\r\nimport styles from \"../../styles/panels/codeError.css\";\r\n\r\nexport class CodeError extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n let banner = this.props.images.share_banners[\r\n Math.floor(Math.random() * this.props.images.share_banners.length)\r\n ];\r\n this.state = {\r\n banner: banner\r\n };\r\n }\r\n componentDidMount() {\r\n ReactGA.pageview(\"/Spend/CodeError\");\r\n if (!this.props.code) {\r\n this.props.onEmptyCode();\r\n }\r\n }\r\n render() {\r\n if (this.props.busy) {\r\n return
;\r\n } else {\r\n return (\r\n
\r\n
\r\n
\r\n {this.props.selectedCharities.length > 0 ? (\r\n
\r\n
\r\n {this.props.dictionary.code_error_header_spent\r\n .replace(\"[CODE]\", this.props.code)\r\n .replace(\"[DATESPENT]\", this.props.dateSpent)}\r\n
\r\n
\r\n {this.props.dictionary.code_error_message_spent}\r\n
\r\n
\r\n {this.props.selectedCharities.map(charity => {\r\n return {charity.name} ;\r\n })}\r\n \r\n
\r\n ) : (\r\n
\r\n
\r\n {this.props.dictionary.code_error_header}\r\n
\r\n
\r\n {this.props.dictionary.code_error_message}\r\n
\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n );\r\n }\r\n }\r\n}\r\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./app.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./app.css\";\n export default content && content.locals ? content.locals : undefined;\n","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","function isAbsolute(pathname) {\n return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n list[i] = list[k];\n }\n\n list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to, from) {\n if (from === undefined) from = '';\n\n var toParts = (to && to.split('/')) || [];\n var fromParts = (from && from.split('/')) || [];\n\n var isToAbs = to && isAbsolute(to);\n var isFromAbs = from && isAbsolute(from);\n var mustEndAbs = isToAbs || isFromAbs;\n\n if (to && isAbsolute(to)) {\n // to is absolute\n fromParts = toParts;\n } else if (toParts.length) {\n // to is relative, drop the filename\n fromParts.pop();\n fromParts = fromParts.concat(toParts);\n }\n\n if (!fromParts.length) return '/';\n\n var hasTrailingSlash;\n if (fromParts.length) {\n var last = fromParts[fromParts.length - 1];\n hasTrailingSlash = last === '.' || last === '..' || last === '';\n } else {\n hasTrailingSlash = false;\n }\n\n var up = 0;\n for (var i = fromParts.length; i >= 0; i--) {\n var part = fromParts[i];\n\n if (part === '.') {\n spliceOne(fromParts, i);\n } else if (part === '..') {\n spliceOne(fromParts, i);\n up++;\n } else if (up) {\n spliceOne(fromParts, i);\n up--;\n }\n }\n\n if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');\n\n if (\n mustEndAbs &&\n fromParts[0] !== '' &&\n (!fromParts[0] || !isAbsolute(fromParts[0]))\n )\n fromParts.unshift('');\n\n var result = fromParts.join('/');\n\n if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n return result;\n}\n\nexport default resolvePathname;\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n throw new Error(prefix + \": \" + (message || ''));\n}\n\nexport default invariant;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport resolvePathname from 'resolve-pathname';\nimport valueEqual from 'value-equal';\nimport warning from 'tiny-warning';\nimport invariant from 'tiny-invariant';\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === '/' ? path : '/' + path;\n}\nfunction stripLeadingSlash(path) {\n return path.charAt(0) === '/' ? path.substr(1) : path;\n}\nfunction hasBasename(path, prefix) {\n return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;\n}\nfunction stripBasename(path, prefix) {\n return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\nfunction stripTrailingSlash(path) {\n return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\nfunction parsePath(path) {\n var pathname = path || '/';\n var search = '';\n var hash = '';\n var hashIndex = pathname.indexOf('#');\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n}\nfunction createPath(location) {\n var pathname = location.pathname,\n search = location.search,\n hash = location.hash;\n var path = pathname || '/';\n if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n var location;\n\n if (typeof path === 'string') {\n // Two-arg form: push(path, state)\n location = parsePath(path);\n location.state = state;\n } else {\n // One-arg form: push(location)\n location = _extends({}, path);\n if (location.pathname === undefined) location.pathname = '';\n\n if (location.search) {\n if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n } else {\n location.search = '';\n }\n\n if (location.hash) {\n if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n } else {\n location.hash = '';\n }\n\n if (state !== undefined && location.state === undefined) location.state = state;\n }\n\n try {\n location.pathname = decodeURI(location.pathname);\n } catch (e) {\n if (e instanceof URIError) {\n throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n } else {\n throw e;\n }\n }\n\n if (key) location.key = key;\n\n if (currentLocation) {\n // Resolve incomplete/relative pathname relative to current location.\n if (!location.pathname) {\n location.pathname = currentLocation.pathname;\n } else if (location.pathname.charAt(0) !== '/') {\n location.pathname = resolvePathname(location.pathname, currentLocation.pathname);\n }\n } else {\n // When there is no prior location and pathname is empty, set it to /\n if (!location.pathname) {\n location.pathname = '/';\n }\n }\n\n return location;\n}\nfunction locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n var prompt = null;\n\n function setPrompt(nextPrompt) {\n process.env.NODE_ENV !== \"production\" ? warning(prompt == null, 'A history supports only one prompt at a time') : void 0;\n prompt = nextPrompt;\n return function () {\n if (prompt === nextPrompt) prompt = null;\n };\n }\n\n function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n // TODO: If another transition starts while we're still confirming\n // the previous one, we may end up in a weird state. Figure out the\n // best way to handle this.\n if (prompt != null) {\n var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n if (typeof result === 'string') {\n if (typeof getUserConfirmation === 'function') {\n getUserConfirmation(result, callback);\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : void 0;\n callback(true);\n }\n } else {\n // Return false from a transition hook to cancel the transition.\n callback(result !== false);\n }\n } else {\n callback(true);\n }\n }\n\n var listeners = [];\n\n function appendListener(fn) {\n var isActive = true;\n\n function listener() {\n if (isActive) fn.apply(void 0, arguments);\n }\n\n listeners.push(listener);\n return function () {\n isActive = false;\n listeners = listeners.filter(function (item) {\n return item !== listener;\n });\n };\n }\n\n function notifyListeners() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n listeners.forEach(function (listener) {\n return listener.apply(void 0, args);\n });\n }\n\n return {\n setPrompt: setPrompt,\n confirmTransitionTo: confirmTransitionTo,\n appendListener: appendListener,\n notifyListeners: notifyListeners\n };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction getConfirmation(message, callback) {\n callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\nfunction supportsHistory() {\n var ua = window.navigator.userAgent;\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\nfunction supportsPopStateOnHashChange() {\n return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\nfunction isExtraneousPopstateEvent(event) {\n return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n try {\n return window.history.state || {};\n } catch (e) {\n // IE 11 sometimes throws when accessing window.history.state\n // See https://github.com/ReactTraining/history/pull/289\n return {};\n }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Browser history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canUseHistory = supportsHistory();\n var needsHashChangeListener = !supportsPopStateOnHashChange();\n var _props = props,\n _props$forceRefresh = _props.forceRefresh,\n forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n function getDOMLocation(historyState) {\n var _ref = historyState || {},\n key = _ref.key,\n state = _ref.state;\n\n var _window$location = window.location,\n pathname = _window$location.pathname,\n search = _window$location.search,\n hash = _window$location.hash;\n var path = pathname + search + hash;\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path, state, key);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function handlePopState(event) {\n // Ignore extraneous popstate events in WebKit.\n if (isExtraneousPopstateEvent(event)) return;\n handlePop(getDOMLocation(event.state));\n }\n\n function handleHashChange() {\n handlePop(getDOMLocation(getHistoryState()));\n }\n\n var forceNextPop = false;\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of keys we've seen in sessionStorage.\n // Instead, we just default to 0 for keys we don't know.\n\n var toIndex = allKeys.indexOf(toLocation.key);\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allKeys.indexOf(fromLocation.key);\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n }\n\n var initialLocation = getDOMLocation(getHistoryState());\n var allKeys = [initialLocation.key]; // Public interface\n\n function createHref(location) {\n return basename + createPath(location);\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.pushState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.href = href;\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n var nextKeys = allKeys.slice(0, prevIndex + 1);\n nextKeys.push(location.key);\n allKeys = nextKeys;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : void 0;\n window.location.href = href;\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.replaceState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.replace(href);\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : void 0;\n window.location.replace(href);\n }\n });\n }\n\n function go(n) {\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n hashbang: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n },\n decodePath: function decodePath(path) {\n return path.charAt(0) === '!' ? path.substr(1) : path;\n }\n },\n noslash: {\n encodePath: stripLeadingSlash,\n decodePath: addLeadingSlash\n },\n slash: {\n encodePath: addLeadingSlash,\n decodePath: addLeadingSlash\n }\n};\n\nfunction stripHash(url) {\n var hashIndex = url.indexOf('#');\n return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n window.location.replace(stripHash(window.location.href) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Hash history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n var _props = props,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$hashType = _props.hashType,\n hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n var _HashPathCoders$hashT = HashPathCoders[hashType],\n encodePath = _HashPathCoders$hashT.encodePath,\n decodePath = _HashPathCoders$hashT.decodePath;\n\n function getDOMLocation() {\n var path = decodePath(getHashPath());\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n var forceNextPop = false;\n var ignorePath = null;\n\n function locationsAreEqual$$1(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;\n }\n\n function handleHashChange() {\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) {\n // Ensure we always have a properly-encoded hash.\n replaceHashPath(encodedPath);\n } else {\n var location = getDOMLocation();\n var prevLocation = history.location;\n if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n ignorePath = null;\n handlePop(location);\n }\n }\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of paths we've seen in sessionStorage.\n // Instead, we just default to 0 for paths we don't know.\n\n var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n } // Ensure the hash is encoded properly before doing anything else.\n\n\n var path = getHashPath();\n var encodedPath = encodePath(path);\n if (path !== encodedPath) replaceHashPath(encodedPath);\n var initialLocation = getDOMLocation();\n var allPaths = [createPath(initialLocation)]; // Public interface\n\n function createHref(location) {\n var baseTag = document.querySelector('base');\n var href = '';\n\n if (baseTag && baseTag.getAttribute('href')) {\n href = stripHash(window.location.href);\n }\n\n return href + '#' + encodePath(basename + createPath(location));\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot push state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a PUSH, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n pushHashPath(encodedPath);\n var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n var nextPaths = allPaths.slice(0, prevIndex + 1);\n nextPaths.push(path);\n allPaths = nextPaths;\n setState({\n action: action,\n location: location\n });\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : void 0;\n setState();\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot replace state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n replaceHashPath(encodedPath);\n }\n\n var prevIndex = allPaths.indexOf(createPath(history.location));\n if (prevIndex !== -1) allPaths[prevIndex] = path;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n process.env.NODE_ENV !== \"production\" ? warning(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : void 0;\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(HashChangeEvent$1, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(HashChangeEvent$1, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n var _props = props,\n getUserConfirmation = _props.getUserConfirmation,\n _props$initialEntries = _props.initialEntries,\n initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n _props$initialIndex = _props.initialIndex,\n initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = history.entries.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var index = clamp(initialIndex, 0, initialEntries.length - 1);\n var entries = initialEntries.map(function (entry) {\n return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n }); // Public interface\n\n var createHref = createPath;\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var prevIndex = history.index;\n var nextIndex = prevIndex + 1;\n var nextEntries = history.entries.slice(0);\n\n if (nextEntries.length > nextIndex) {\n nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n } else {\n nextEntries.push(location);\n }\n\n setState({\n action: action,\n location: location,\n index: nextIndex,\n entries: nextEntries\n });\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n history.entries[history.index] = location;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n var action = 'POP';\n var location = history.entries[nextIndex];\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location,\n index: nextIndex\n });\n } else {\n // Mimic the behavior of DOM histories by\n // causing a render after a cancelled POP.\n setState();\n }\n });\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n function canGo(n) {\n var nextIndex = history.index + n;\n return nextIndex >= 0 && nextIndex < history.entries.length;\n }\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n return transitionManager.setPrompt(prompt);\n }\n\n function listen(listener) {\n return transitionManager.appendListener(listener);\n }\n\n var history = {\n length: entries.length,\n action: 'POP',\n location: entries[index],\n index: index,\n entries: entries,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n canGo: canGo,\n block: block,\n listen: listen\n };\n return history;\n}\n\nexport { createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath };\n","import React, { Component } from 'react';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport PropTypes from 'prop-types';\nimport warning from 'tiny-warning';\n\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {};\n\nfunction getUniqueId() {\n var key = '__global_unique_id__';\n return commonjsGlobal[key] = (commonjsGlobal[key] || 0) + 1;\n}\n\nfunction objectIs(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nfunction createEventEmitter(value) {\n var handlers = [];\n return {\n on: function on(handler) {\n handlers.push(handler);\n },\n off: function off(handler) {\n handlers = handlers.filter(function (h) {\n return h !== handler;\n });\n },\n get: function get() {\n return value;\n },\n set: function set(newValue, changedBits) {\n value = newValue;\n handlers.forEach(function (handler) {\n return handler(value, changedBits);\n });\n }\n };\n}\n\nfunction onlyChild(children) {\n return Array.isArray(children) ? children[0] : children;\n}\n\nfunction createReactContext(defaultValue, calculateChangedBits) {\n var _Provider$childContex, _Consumer$contextType;\n\n var contextProp = '__create-react-context-' + getUniqueId() + '__';\n\n var Provider = /*#__PURE__*/function (_Component) {\n _inheritsLoose(Provider, _Component);\n\n function Provider() {\n var _this;\n\n _this = _Component.apply(this, arguments) || this;\n _this.emitter = createEventEmitter(_this.props.value);\n return _this;\n }\n\n var _proto = Provider.prototype;\n\n _proto.getChildContext = function getChildContext() {\n var _ref;\n\n return _ref = {}, _ref[contextProp] = this.emitter, _ref;\n };\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n if (this.props.value !== nextProps.value) {\n var oldValue = this.props.value;\n var newValue = nextProps.value;\n var changedBits;\n\n if (objectIs(oldValue, newValue)) {\n changedBits = 0;\n } else {\n changedBits = typeof calculateChangedBits === 'function' ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n\n if (process.env.NODE_ENV !== 'production') {\n warning((changedBits & MAX_SIGNED_31_BIT_INT) === changedBits, 'calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: ' + changedBits);\n }\n\n changedBits |= 0;\n\n if (changedBits !== 0) {\n this.emitter.set(nextProps.value, changedBits);\n }\n }\n }\n };\n\n _proto.render = function render() {\n return this.props.children;\n };\n\n return Provider;\n }(Component);\n\n Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = PropTypes.object.isRequired, _Provider$childContex);\n\n var Consumer = /*#__PURE__*/function (_Component2) {\n _inheritsLoose(Consumer, _Component2);\n\n function Consumer() {\n var _this2;\n\n _this2 = _Component2.apply(this, arguments) || this;\n _this2.state = {\n value: _this2.getValue()\n };\n\n _this2.onUpdate = function (newValue, changedBits) {\n var observedBits = _this2.observedBits | 0;\n\n if ((observedBits & changedBits) !== 0) {\n _this2.setState({\n value: _this2.getValue()\n });\n }\n };\n\n return _this2;\n }\n\n var _proto2 = Consumer.prototype;\n\n _proto2.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var observedBits = nextProps.observedBits;\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n };\n\n _proto2.componentDidMount = function componentDidMount() {\n if (this.context[contextProp]) {\n this.context[contextProp].on(this.onUpdate);\n }\n\n var observedBits = this.props.observedBits;\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n };\n\n _proto2.componentWillUnmount = function componentWillUnmount() {\n if (this.context[contextProp]) {\n this.context[contextProp].off(this.onUpdate);\n }\n };\n\n _proto2.getValue = function getValue() {\n if (this.context[contextProp]) {\n return this.context[contextProp].get();\n } else {\n return defaultValue;\n }\n };\n\n _proto2.render = function render() {\n return onlyChild(this.props.children)(this.state.value);\n };\n\n return Consumer;\n }(Component);\n\n Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = PropTypes.object, _Consumer$contextType);\n return {\n Provider: Provider,\n Consumer: Consumer\n };\n}\n\nvar index = React.createContext || createReactContext;\n\nexport default index;\n","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","import _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { createMemoryHistory, createLocation, locationsAreEqual, createPath } from 'history';\nimport warning from 'tiny-warning';\nimport createContext from 'mini-create-react-context';\nimport invariant from 'tiny-invariant';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport pathToRegexp from 'path-to-regexp';\nimport { isValidElementType } from 'react-is';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport hoistStatics from 'hoist-non-react-statics';\n\n// TODO: Replace with React.createContext once we can assume React 16+\n\nvar createNamedContext = function createNamedContext(name) {\n var context = createContext();\n context.displayName = name;\n return context;\n};\n\nvar historyContext = /*#__PURE__*/createNamedContext(\"Router-History\");\n\nvar context = /*#__PURE__*/createNamedContext(\"Router\");\n\n/**\n * The public API for putting history on context.\n */\n\nvar Router = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(Router, _React$Component);\n\n Router.computeRootMatch = function computeRootMatch(pathname) {\n return {\n path: \"/\",\n url: \"/\",\n params: {},\n isExact: pathname === \"/\"\n };\n };\n\n function Router(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this;\n _this.state = {\n location: props.history.location\n }; // This is a bit of a hack. We have to start listening for location\n // changes here in the constructor in case there are any
s\n // on the initial render. If there are, they will replace/push when\n // they mount and since cDM fires in children before parents, we may\n // get a new location before the is mounted.\n\n _this._isMounted = false;\n _this._pendingLocation = null;\n\n if (!props.staticContext) {\n _this.unlisten = props.history.listen(function (location) {\n if (_this._isMounted) {\n _this.setState({\n location: location\n });\n } else {\n _this._pendingLocation = location;\n }\n });\n }\n\n return _this;\n }\n\n var _proto = Router.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this._isMounted = true;\n\n if (this._pendingLocation) {\n this.setState({\n location: this._pendingLocation\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.unlisten) {\n this.unlisten();\n this._isMounted = false;\n this._pendingLocation = null;\n }\n };\n\n _proto.render = function render() {\n return /*#__PURE__*/React.createElement(context.Provider, {\n value: {\n history: this.props.history,\n location: this.state.location,\n match: Router.computeRootMatch(this.state.location.pathname),\n staticContext: this.props.staticContext\n }\n }, /*#__PURE__*/React.createElement(historyContext.Provider, {\n children: this.props.children || null,\n value: this.props.history\n }));\n };\n\n return Router;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n Router.propTypes = {\n children: PropTypes.node,\n history: PropTypes.object.isRequired,\n staticContext: PropTypes.object\n };\n\n Router.prototype.componentDidUpdate = function (prevProps) {\n process.env.NODE_ENV !== \"production\" ? warning(prevProps.history === this.props.history, \"You cannot change \") : void 0;\n };\n}\n\n/**\n * The public API for a that stores location in memory.\n */\n\nvar MemoryRouter = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(MemoryRouter, _React$Component);\n\n function MemoryRouter() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.history = createMemoryHistory(_this.props);\n return _this;\n }\n\n var _proto = MemoryRouter.prototype;\n\n _proto.render = function render() {\n return /*#__PURE__*/React.createElement(Router, {\n history: this.history,\n children: this.props.children\n });\n };\n\n return MemoryRouter;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n MemoryRouter.propTypes = {\n initialEntries: PropTypes.array,\n initialIndex: PropTypes.number,\n getUserConfirmation: PropTypes.func,\n keyLength: PropTypes.number,\n children: PropTypes.node\n };\n\n MemoryRouter.prototype.componentDidMount = function () {\n process.env.NODE_ENV !== \"production\" ? warning(!this.props.history, \" ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { MemoryRouter as Router }`.\") : void 0;\n };\n}\n\nvar Lifecycle = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(Lifecycle, _React$Component);\n\n function Lifecycle() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = Lifecycle.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n if (this.props.onMount) this.props.onMount.call(this, this);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (this.props.onUpdate) this.props.onUpdate.call(this, this, prevProps);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.props.onUnmount) this.props.onUnmount.call(this, this);\n };\n\n _proto.render = function render() {\n return null;\n };\n\n return Lifecycle;\n}(React.Component);\n\n/**\n * The public API for prompting the user before navigating away from a screen.\n */\n\nfunction Prompt(_ref) {\n var message = _ref.message,\n _ref$when = _ref.when,\n when = _ref$when === void 0 ? true : _ref$when;\n return /*#__PURE__*/React.createElement(context.Consumer, null, function (context) {\n !context ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use outside a \") : invariant(false) : void 0;\n if (!when || context.staticContext) return null;\n var method = context.history.block;\n return /*#__PURE__*/React.createElement(Lifecycle, {\n onMount: function onMount(self) {\n self.release = method(message);\n },\n onUpdate: function onUpdate(self, prevProps) {\n if (prevProps.message !== message) {\n self.release();\n self.release = method(message);\n }\n },\n onUnmount: function onUnmount(self) {\n self.release();\n },\n message: message\n });\n });\n}\n\nif (process.env.NODE_ENV !== \"production\") {\n var messageType = PropTypes.oneOfType([PropTypes.func, PropTypes.string]);\n Prompt.propTypes = {\n when: PropTypes.bool,\n message: messageType.isRequired\n };\n}\n\nvar cache = {};\nvar cacheLimit = 10000;\nvar cacheCount = 0;\n\nfunction compilePath(path) {\n if (cache[path]) return cache[path];\n var generator = pathToRegexp.compile(path);\n\n if (cacheCount < cacheLimit) {\n cache[path] = generator;\n cacheCount++;\n }\n\n return generator;\n}\n/**\n * Public API for generating a URL pathname from a path and parameters.\n */\n\n\nfunction generatePath(path, params) {\n if (path === void 0) {\n path = \"/\";\n }\n\n if (params === void 0) {\n params = {};\n }\n\n return path === \"/\" ? path : compilePath(path)(params, {\n pretty: true\n });\n}\n\n/**\n * The public API for navigating programmatically with a component.\n */\n\nfunction Redirect(_ref) {\n var computedMatch = _ref.computedMatch,\n to = _ref.to,\n _ref$push = _ref.push,\n push = _ref$push === void 0 ? false : _ref$push;\n return /*#__PURE__*/React.createElement(context.Consumer, null, function (context) {\n !context ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use outside a \") : invariant(false) : void 0;\n var history = context.history,\n staticContext = context.staticContext;\n var method = push ? history.push : history.replace;\n var location = createLocation(computedMatch ? typeof to === \"string\" ? generatePath(to, computedMatch.params) : _extends({}, to, {\n pathname: generatePath(to.pathname, computedMatch.params)\n }) : to); // When rendering in a static context,\n // set the new location immediately.\n\n if (staticContext) {\n method(location);\n return null;\n }\n\n return /*#__PURE__*/React.createElement(Lifecycle, {\n onMount: function onMount() {\n method(location);\n },\n onUpdate: function onUpdate(self, prevProps) {\n var prevLocation = createLocation(prevProps.to);\n\n if (!locationsAreEqual(prevLocation, _extends({}, location, {\n key: prevLocation.key\n }))) {\n method(location);\n }\n },\n to: to\n });\n });\n}\n\nif (process.env.NODE_ENV !== \"production\") {\n Redirect.propTypes = {\n push: PropTypes.bool,\n from: PropTypes.string,\n to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired\n };\n}\n\nvar cache$1 = {};\nvar cacheLimit$1 = 10000;\nvar cacheCount$1 = 0;\n\nfunction compilePath$1(path, options) {\n var cacheKey = \"\" + options.end + options.strict + options.sensitive;\n var pathCache = cache$1[cacheKey] || (cache$1[cacheKey] = {});\n if (pathCache[path]) return pathCache[path];\n var keys = [];\n var regexp = pathToRegexp(path, keys, options);\n var result = {\n regexp: regexp,\n keys: keys\n };\n\n if (cacheCount$1 < cacheLimit$1) {\n pathCache[path] = result;\n cacheCount$1++;\n }\n\n return result;\n}\n/**\n * Public API for matching a URL pathname to a path.\n */\n\n\nfunction matchPath(pathname, options) {\n if (options === void 0) {\n options = {};\n }\n\n if (typeof options === \"string\" || Array.isArray(options)) {\n options = {\n path: options\n };\n }\n\n var _options = options,\n path = _options.path,\n _options$exact = _options.exact,\n exact = _options$exact === void 0 ? false : _options$exact,\n _options$strict = _options.strict,\n strict = _options$strict === void 0 ? false : _options$strict,\n _options$sensitive = _options.sensitive,\n sensitive = _options$sensitive === void 0 ? false : _options$sensitive;\n var paths = [].concat(path);\n return paths.reduce(function (matched, path) {\n if (!path && path !== \"\") return null;\n if (matched) return matched;\n\n var _compilePath = compilePath$1(path, {\n end: exact,\n strict: strict,\n sensitive: sensitive\n }),\n regexp = _compilePath.regexp,\n keys = _compilePath.keys;\n\n var match = regexp.exec(pathname);\n if (!match) return null;\n var url = match[0],\n values = match.slice(1);\n var isExact = pathname === url;\n if (exact && !isExact) return null;\n return {\n path: path,\n // the path used to match\n url: path === \"/\" && url === \"\" ? \"/\" : url,\n // the matched portion of the URL\n isExact: isExact,\n // whether or not we matched exactly\n params: keys.reduce(function (memo, key, index) {\n memo[key.name] = values[index];\n return memo;\n }, {})\n };\n }, null);\n}\n\nfunction isEmptyChildren(children) {\n return React.Children.count(children) === 0;\n}\n\nfunction evalChildrenDev(children, props, path) {\n var value = children(props);\n process.env.NODE_ENV !== \"production\" ? warning(value !== undefined, \"You returned `undefined` from the `children` function of \" + (\", but you \") + \"should have returned a React element or `null`\") : void 0;\n return value || null;\n}\n/**\n * The public API for matching a single path and rendering.\n */\n\n\nvar Route = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(Route, _React$Component);\n\n function Route() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = Route.prototype;\n\n _proto.render = function render() {\n var _this = this;\n\n return /*#__PURE__*/React.createElement(context.Consumer, null, function (context$1) {\n !context$1 ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use outside a \") : invariant(false) : void 0;\n var location = _this.props.location || context$1.location;\n var match = _this.props.computedMatch ? _this.props.computedMatch // already computed the match for us\n : _this.props.path ? matchPath(location.pathname, _this.props) : context$1.match;\n\n var props = _extends({}, context$1, {\n location: location,\n match: match\n });\n\n var _this$props = _this.props,\n children = _this$props.children,\n component = _this$props.component,\n render = _this$props.render; // Preact uses an empty array as children by\n // default, so use null if that's the case.\n\n if (Array.isArray(children) && isEmptyChildren(children)) {\n children = null;\n }\n\n return /*#__PURE__*/React.createElement(context.Provider, {\n value: props\n }, props.match ? children ? typeof children === \"function\" ? process.env.NODE_ENV !== \"production\" ? evalChildrenDev(children, props, _this.props.path) : children(props) : children : component ? /*#__PURE__*/React.createElement(component, props) : render ? render(props) : null : typeof children === \"function\" ? process.env.NODE_ENV !== \"production\" ? evalChildrenDev(children, props, _this.props.path) : children(props) : null);\n });\n };\n\n return Route;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n Route.propTypes = {\n children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n component: function component(props, propName) {\n if (props[propName] && !isValidElementType(props[propName])) {\n return new Error(\"Invalid prop 'component' supplied to 'Route': the prop is not a valid React component\");\n }\n },\n exact: PropTypes.bool,\n location: PropTypes.object,\n path: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),\n render: PropTypes.func,\n sensitive: PropTypes.bool,\n strict: PropTypes.bool\n };\n\n Route.prototype.componentDidMount = function () {\n process.env.NODE_ENV !== \"production\" ? warning(!(this.props.children && !isEmptyChildren(this.props.children) && this.props.component), \"You should not use and in the same route; will be ignored\") : void 0;\n process.env.NODE_ENV !== \"production\" ? warning(!(this.props.children && !isEmptyChildren(this.props.children) && this.props.render), \"You should not use and in the same route; will be ignored\") : void 0;\n process.env.NODE_ENV !== \"production\" ? warning(!(this.props.component && this.props.render), \"You should not use and in the same route; will be ignored\") : void 0;\n };\n\n Route.prototype.componentDidUpdate = function (prevProps) {\n process.env.NODE_ENV !== \"production\" ? warning(!(this.props.location && !prevProps.location), ' elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.') : void 0;\n process.env.NODE_ENV !== \"production\" ? warning(!(!this.props.location && prevProps.location), ' elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.') : void 0;\n };\n}\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === \"/\" ? path : \"/\" + path;\n}\n\nfunction addBasename(basename, location) {\n if (!basename) return location;\n return _extends({}, location, {\n pathname: addLeadingSlash(basename) + location.pathname\n });\n}\n\nfunction stripBasename(basename, location) {\n if (!basename) return location;\n var base = addLeadingSlash(basename);\n if (location.pathname.indexOf(base) !== 0) return location;\n return _extends({}, location, {\n pathname: location.pathname.substr(base.length)\n });\n}\n\nfunction createURL(location) {\n return typeof location === \"string\" ? location : createPath(location);\n}\n\nfunction staticHandler(methodName) {\n return function () {\n process.env.NODE_ENV !== \"production\" ? invariant(false, \"You cannot %s with \", methodName) : invariant(false) ;\n };\n}\n\nfunction noop() {}\n/**\n * The public top-level API for a \"static\" , so-called because it\n * can't actually change the current location. Instead, it just records\n * location changes in a context object. Useful mainly in testing and\n * server-rendering scenarios.\n */\n\n\nvar StaticRouter = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(StaticRouter, _React$Component);\n\n function StaticRouter() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _this.handlePush = function (location) {\n return _this.navigateTo(location, \"PUSH\");\n };\n\n _this.handleReplace = function (location) {\n return _this.navigateTo(location, \"REPLACE\");\n };\n\n _this.handleListen = function () {\n return noop;\n };\n\n _this.handleBlock = function () {\n return noop;\n };\n\n return _this;\n }\n\n var _proto = StaticRouter.prototype;\n\n _proto.navigateTo = function navigateTo(location, action) {\n var _this$props = this.props,\n _this$props$basename = _this$props.basename,\n basename = _this$props$basename === void 0 ? \"\" : _this$props$basename,\n _this$props$context = _this$props.context,\n context = _this$props$context === void 0 ? {} : _this$props$context;\n context.action = action;\n context.location = addBasename(basename, createLocation(location));\n context.url = createURL(context.location);\n };\n\n _proto.render = function render() {\n var _this$props2 = this.props,\n _this$props2$basename = _this$props2.basename,\n basename = _this$props2$basename === void 0 ? \"\" : _this$props2$basename,\n _this$props2$context = _this$props2.context,\n context = _this$props2$context === void 0 ? {} : _this$props2$context,\n _this$props2$location = _this$props2.location,\n location = _this$props2$location === void 0 ? \"/\" : _this$props2$location,\n rest = _objectWithoutPropertiesLoose(_this$props2, [\"basename\", \"context\", \"location\"]);\n\n var history = {\n createHref: function createHref(path) {\n return addLeadingSlash(basename + createURL(path));\n },\n action: \"POP\",\n location: stripBasename(basename, createLocation(location)),\n push: this.handlePush,\n replace: this.handleReplace,\n go: staticHandler(\"go\"),\n goBack: staticHandler(\"goBack\"),\n goForward: staticHandler(\"goForward\"),\n listen: this.handleListen,\n block: this.handleBlock\n };\n return /*#__PURE__*/React.createElement(Router, _extends({}, rest, {\n history: history,\n staticContext: context\n }));\n };\n\n return StaticRouter;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n StaticRouter.propTypes = {\n basename: PropTypes.string,\n context: PropTypes.object,\n location: PropTypes.oneOfType([PropTypes.string, PropTypes.object])\n };\n\n StaticRouter.prototype.componentDidMount = function () {\n process.env.NODE_ENV !== \"production\" ? warning(!this.props.history, \" ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { StaticRouter as Router }`.\") : void 0;\n };\n}\n\n/**\n * The public API for rendering the first that matches.\n */\n\nvar Switch = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(Switch, _React$Component);\n\n function Switch() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = Switch.prototype;\n\n _proto.render = function render() {\n var _this = this;\n\n return /*#__PURE__*/React.createElement(context.Consumer, null, function (context) {\n !context ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use outside a \") : invariant(false) : void 0;\n var location = _this.props.location || context.location;\n var element, match; // We use React.Children.forEach instead of React.Children.toArray().find()\n // here because toArray adds keys to all child elements and we do not want\n // to trigger an unmount/remount for two s that render the same\n // component at different URLs.\n\n React.Children.forEach(_this.props.children, function (child) {\n if (match == null && /*#__PURE__*/React.isValidElement(child)) {\n element = child;\n var path = child.props.path || child.props.from;\n match = path ? matchPath(location.pathname, _extends({}, child.props, {\n path: path\n })) : context.match;\n }\n });\n return match ? /*#__PURE__*/React.cloneElement(element, {\n location: location,\n computedMatch: match\n }) : null;\n });\n };\n\n return Switch;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n Switch.propTypes = {\n children: PropTypes.node,\n location: PropTypes.object\n };\n\n Switch.prototype.componentDidUpdate = function (prevProps) {\n process.env.NODE_ENV !== \"production\" ? warning(!(this.props.location && !prevProps.location), ' elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.') : void 0;\n process.env.NODE_ENV !== \"production\" ? warning(!(!this.props.location && prevProps.location), ' elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.') : void 0;\n };\n}\n\n/**\n * A public higher-order component to access the imperative API\n */\n\nfunction withRouter(Component) {\n var displayName = \"withRouter(\" + (Component.displayName || Component.name) + \")\";\n\n var C = function C(props) {\n var wrappedComponentRef = props.wrappedComponentRef,\n remainingProps = _objectWithoutPropertiesLoose(props, [\"wrappedComponentRef\"]);\n\n return /*#__PURE__*/React.createElement(context.Consumer, null, function (context) {\n !context ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <\" + displayName + \" /> outside a \") : invariant(false) : void 0;\n return /*#__PURE__*/React.createElement(Component, _extends({}, remainingProps, context, {\n ref: wrappedComponentRef\n }));\n });\n };\n\n C.displayName = displayName;\n C.WrappedComponent = Component;\n\n if (process.env.NODE_ENV !== \"production\") {\n C.propTypes = {\n wrappedComponentRef: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object])\n };\n }\n\n return hoistStatics(C, Component);\n}\n\nvar useContext = React.useContext;\nfunction useHistory() {\n if (process.env.NODE_ENV !== \"production\") {\n !(typeof useContext === \"function\") ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You must use React >= 16.8 in order to use useHistory()\") : invariant(false) : void 0;\n }\n\n return useContext(historyContext);\n}\nfunction useLocation() {\n if (process.env.NODE_ENV !== \"production\") {\n !(typeof useContext === \"function\") ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You must use React >= 16.8 in order to use useLocation()\") : invariant(false) : void 0;\n }\n\n return useContext(context).location;\n}\nfunction useParams() {\n if (process.env.NODE_ENV !== \"production\") {\n !(typeof useContext === \"function\") ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You must use React >= 16.8 in order to use useParams()\") : invariant(false) : void 0;\n }\n\n var match = useContext(context).match;\n return match ? match.params : {};\n}\nfunction useRouteMatch(path) {\n if (process.env.NODE_ENV !== \"production\") {\n !(typeof useContext === \"function\") ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You must use React >= 16.8 in order to use useRouteMatch()\") : invariant(false) : void 0;\n }\n\n var location = useLocation();\n var match = useContext(context).match;\n return path ? matchPath(location.pathname, path) : match;\n}\n\nif (process.env.NODE_ENV !== \"production\") {\n if (typeof window !== \"undefined\") {\n var global = window;\n var key = \"__react_router_build__\";\n var buildNames = {\n cjs: \"CommonJS\",\n esm: \"ES modules\",\n umd: \"UMD\"\n };\n\n if (global[key] && global[key] !== \"esm\") {\n var initialBuildName = buildNames[global[key]];\n var secondaryBuildName = buildNames[\"esm\"]; // TODO: Add link to article that explains in detail how to avoid\n // loading 2 different builds.\n\n throw new Error(\"You are loading the \" + secondaryBuildName + \" build of React Router \" + (\"on a page that is already running the \" + initialBuildName + \" \") + \"build, so things won't work right.\");\n }\n\n global[key] = \"esm\";\n }\n}\n\nexport { MemoryRouter, Prompt, Redirect, Route, Router, StaticRouter, Switch, historyContext as __HistoryContext, context as __RouterContext, generatePath, matchPath, useHistory, useLocation, useParams, useRouteMatch, withRouter };\n//# sourceMappingURL=react-router.js.map\n","import React from \"react\";\r\nimport { Header } from \"./presentational/header\";\r\nimport { Footer } from \"./presentational/footer\";\r\nimport { CardCodeInput } from \"./panels/cardCodeInput\";\r\nimport { CampaignWelcome } from \"./panels/campaignWelcome\";\r\nimport { CampaignThankYou } from \"./panels/campaignThankYou\";\r\nimport { CampaignInstructions } from \"./panels/campaignInstructions\";\r\nimport { CategorySelector } from \"./panels/categorySelector\";\r\nimport { FeaturedCharitySelector } from \"./panels/featuredCharitySelector\";\r\nimport { NationalCharitySelector } from \"./panels/nationalCharitySelector\";\r\nimport { CharityDetails } from \"./panels/charityDetails\";\r\nimport { CharityDistribution } from \"./panels/charityDistribution\";\r\nimport { ThankYou } from \"./panels/thankYou\";\r\nimport { ShareSpend } from \"./panels/shareSpend\";\r\nimport { CodeError } from \"./panels/codeError\";\r\n// import ReactGA from \"react-ga\";\r\nimport * as consts from \"../consts\";\r\nimport * as utilities from \"../middleware/utilities\";\r\nimport styles from \"../styles/app.css\";\r\nimport { Route, Switch, withRouter } from \"react-router-dom\";\r\n\r\n//const styles = {\r\n// app: {\r\n// fontFamily: \"'Century Gothic', CenturyGothic, AppleGothic, sans-serif\",\r\n// },\r\n// content: {\r\n// marginTop: \"66px\",\r\n// minHeight: \"90vh\",\r\n// },\r\n// };\r\n\r\nclass App extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n busy: true,\r\n account: null,\r\n originUrl: \"/\",\r\n code: \"\",\r\n email: \"\",\r\n notifyEmail: \"\",\r\n name: \"\",\r\n thankYouName: \"\",\r\n thankYouNote: \"\",\r\n instructions: {\r\n distributionType: \"No Instructions\",\r\n name: \"\",\r\n phone: \"\",\r\n email: \"\",\r\n address: \"\",\r\n address2: \"\",\r\n city: \"\",\r\n state: \"\",\r\n zip: \"\",\r\n notes: \"\",\r\n },\r\n optIn: false,\r\n donation: null,\r\n validation: {\r\n code: true,\r\n email: true,\r\n name: true,\r\n notifyEmail: true,\r\n total: true,\r\n inBounds: true,\r\n thankYouName: true,\r\n thankYouNote: true,\r\n },\r\n categories: [],\r\n selectedCharities: [],\r\n tempCharity: null,\r\n dateSpent: null,\r\n collapseSelectedCharities: false,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n utilities.getAccount().then((account) => {\r\n if (account && account.enabled) {\r\n let urlSearchParams = new URLSearchParams(window.location.search);\r\n let code = urlSearchParams.get(\"code\");\r\n if (!code) {\r\n code = urlSearchParams.get(\"Code\");\r\n }\r\n if (code) {\r\n code = code.toUpperCase();\r\n }\r\n let email = urlSearchParams.get(\"email\");\r\n if (!email) {\r\n email = urlSearchParams.get(\"Email\");\r\n }\r\n let validCode = utilities.validateCode(code);\r\n let validEmail = utilities.validateEmail(email);\r\n this.setState({\r\n account: account,\r\n busy: false,\r\n code: validCode ? code : \"\",\r\n email: validEmail ? email : \"\",\r\n notifyEmail: validEmail ? email : \"\",\r\n thankYouNote:\r\n account.settings.dictionary.thank_you_input_thank_you_note_value,\r\n });\r\n } else {\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.log(\"TisBest Spend: Invalid Account\");\r\n }\r\n }\r\n });\r\n }\r\n resetScroll() {\r\n document.body.scrollTop = 0;\r\n document.documentElement.scrollTop = 0;\r\n }\r\n setInitialDistribution(props) {\r\n if (this.state.selectedCharities.length > 0) {\r\n let selectedCharities = this.state.selectedCharities.slice();\r\n let dollars = Math.trunc(this.state.donation.amount);\r\n let cents =\r\n Math.round((this.state.donation.amount - dollars) * 100) / 100;\r\n let amount = Math.floor(dollars / selectedCharities.length);\r\n let remainder = dollars % selectedCharities.length;\r\n selectedCharities.map((charity, index) => {\r\n charity.amount = amount + (index == 0 ? remainder : 0);\r\n charity.cents = index == 0 ? cents : 0;\r\n });\r\n this.setState(\r\n {\r\n selectedCharities: selectedCharities,\r\n thankYouName: \"\",\r\n thankYouNote:\r\n this.state.account.settings.dictionary\r\n .thank_you_input_thank_you_note_value,\r\n instructions: {\r\n distributionType: \"No Instructions\",\r\n name: \"\",\r\n phone: \"\",\r\n email: \"\",\r\n address: \"\",\r\n address2: \"\",\r\n city: \"\",\r\n state: \"\",\r\n zip: \"\",\r\n notes: \"\",\r\n },\r\n validation: {\r\n ...this.state.validation,\r\n total: true,\r\n inBounds: true,\r\n },\r\n },\r\n () => {\r\n this.resetScroll();\r\n props.history.push(\r\n this.state.originUrl + consts.PANEL_CHARITY_DISTRIBUTION\r\n );\r\n }\r\n );\r\n }\r\n }\r\n openSearch(props) {\r\n this.resetScroll();\r\n props.history.push(\r\n this.state.originUrl + consts.PANEL_NATIONAL_CHARITY_SELECTOR\r\n );\r\n }\r\n goBack(props) {\r\n this.resetScroll();\r\n props.history.goBack();\r\n }\r\n openCodeError(props) {\r\n this.resetScroll();\r\n if (this.state.code) {\r\n props.history.push(this.state.originUrl + consts.PANEL_CODE_ERROR);\r\n } else {\r\n props.history.push(this.state.originUrl + consts.PANEL_CARD_CODE_INPUT);\r\n }\r\n }\r\n reset(props) {\r\n this.resetScroll();\r\n this.setState(\r\n {\r\n code: \"\",\r\n email: \"\",\r\n notifyEmail: \"\",\r\n name: \"\",\r\n thankYouName: \"\",\r\n thankYouNote: \"\",\r\n instructions: {\r\n distributionType: \"No Instructions\",\r\n name: \"\",\r\n phone: \"\",\r\n email: \"\",\r\n address: \"\",\r\n address2: \"\",\r\n city: \"\",\r\n state: \"\",\r\n zip: \"\",\r\n notes: \"\",\r\n },\r\n optIn: false,\r\n donation: null,\r\n validation: {\r\n code: true,\r\n email: true,\r\n name: true,\r\n notifyEmail: true,\r\n total: true,\r\n inBounds: true,\r\n thankYouName: true,\r\n thankYouNote: true,\r\n },\r\n categories: [],\r\n selectedCharities: [],\r\n dateSpent: null,\r\n collapseSelectedCharities: false,\r\n },\r\n () => {\r\n props.history.push(this.state.originUrl);\r\n }\r\n );\r\n }\r\n removeCharity(ein) {\r\n // ReactGA.event({\r\n // category: \"User Action\",\r\n // action: \"Remove Charity\",\r\n // label: ein,\r\n // });\r\n let selectedCharities = this.state.selectedCharities.filter((charity) => {\r\n return charity.ein != ein;\r\n });\r\n this.setState({ selectedCharities: selectedCharities });\r\n }\r\n selectCharity(charity) {\r\n // ReactGA.event({\r\n // category: \"User Action\",\r\n // action: \"Select Charity\",\r\n // label: charity.ein,\r\n // });\r\n let selectedIndex = this.state.selectedCharities.findIndex((item) => {\r\n return item.ein == charity.ein;\r\n });\r\n if (\r\n selectedIndex == -1 &&\r\n this.state.account.settings.additionalCharityCount >=\r\n this.state.selectedCharities.length\r\n ) {\r\n let selectedCharities = this.state.selectedCharities.slice();\r\n selectedCharities.push({ ...charity });\r\n this.setState({\r\n selectedCharities: selectedCharities,\r\n collapseSelectedCharities: false,\r\n });\r\n }\r\n }\r\n viewCharity(charity, props) {\r\n this.setState({ tempCharity: charity }, () => {\r\n // ReactGA.event({\r\n // category: \"User Action\",\r\n // action: \"View Charity\",\r\n // label: charity.ein,\r\n // });\r\n this.resetScroll();\r\n props.history.push(\r\n this.state.originUrl +\r\n consts.PANEL_CHARITY_DETAILS +\r\n \"/\" +\r\n (props.match.params.categoryID ? props.match.params.categoryID : 0) +\r\n \"/\" +\r\n charity.ein\r\n );\r\n });\r\n }\r\n selectCategory(category, props) {\r\n // ReactGA.event({\r\n // category: \"User Action\",\r\n // action: \"Select Category\",\r\n // label: category.title,\r\n // });\r\n this.setState(\r\n {\r\n busy: false,\r\n },\r\n () => {\r\n this.resetScroll();\r\n props.history.push(\r\n this.state.originUrl +\r\n consts.PANEL_FEATURED_CHARITY_SELECTOR +\r\n \"/\" +\r\n category.id\r\n );\r\n }\r\n );\r\n }\r\n renderPanel() {\r\n return (\r\n \r\n (\r\n {\r\n this.openCodeError(props);\r\n }}\r\n additionalCharityCount={\r\n this.state.account.settings.additionalCharityCount\r\n }\r\n onViewCharity={(charity) => {\r\n this.viewCharity(charity, props);\r\n }}\r\n onSelectCharity={(charity) => {\r\n this.selectCharity(charity);\r\n }}\r\n onRemoveCharity={(ein) => {\r\n this.removeCharity(ein);\r\n }}\r\n onContinue={() => {\r\n this.setState(\r\n {\r\n busy: false,\r\n },\r\n () => {\r\n this.resetScroll();\r\n props.history.push(\r\n this.state.originUrl + consts.PANEL_CATEGORY_SELECTOR\r\n );\r\n }\r\n );\r\n }}\r\n />\r\n )}\r\n />\r\n (\r\n {\r\n this.reset(props);\r\n //this.openCodeError(props);\r\n }}\r\n onContinue={() => {\r\n this.resetScroll();\r\n props.history.push(\r\n this.state.originUrl + consts.PANEL_THANK_YOU\r\n );\r\n }}\r\n onBack={() => {\r\n this.goBack(props);\r\n }}\r\n />\r\n )}\r\n />\r\n (\r\n {\r\n this.setState({ instructions: instructions });\r\n }}\r\n onCodeError={() => {\r\n this.reset(props);\r\n //this.openCodeError(props);\r\n }}\r\n onContinue={() => {\r\n this.resetScroll();\r\n props.history.push(\r\n this.state.originUrl +\r\n (this.state.donation.campaignDetail &&\r\n this.state.donation.campaignDetail.thankYouMarkup\r\n ? consts.PANEL_CAMPAIGN_THANK_YOU\r\n : consts.PANEL_THANK_YOU)\r\n );\r\n }}\r\n onBack={() => {\r\n this.goBack(props);\r\n }}\r\n />\r\n )}\r\n />\r\n (\r\n {\r\n this.openCodeError(props);\r\n }}\r\n onToggleCollapseSelectedCharities={() => {\r\n this.setState({\r\n collapseSelectedCharities:\r\n !this.state.collapseSelectedCharities,\r\n });\r\n }}\r\n onSelectCategory={(category) => {\r\n this.selectCategory(category, props);\r\n }}\r\n onSelectCharity={(charity) => {\r\n this.selectCharity(charity);\r\n }}\r\n onRemoveCharity={(ein) => {\r\n this.removeCharity(ein);\r\n }}\r\n onViewCharity={(charity) => {\r\n this.viewCharity(charity, props);\r\n }}\r\n onBack={() => {\r\n this.goBack(props);\r\n }}\r\n onContinue={() => {\r\n this.setInitialDistribution(props);\r\n }}\r\n onSearchAll={() => {\r\n this.openSearch(props);\r\n }}\r\n />\r\n )}\r\n />\r\n (\r\n {\r\n this.openCodeError(props);\r\n }}\r\n onToggleCollapseSelectedCharities={() => {\r\n this.setState({\r\n collapseSelectedCharities:\r\n !this.state.collapseSelectedCharities,\r\n });\r\n }}\r\n onViewCharity={(charity) => {\r\n this.viewCharity(charity, props);\r\n }}\r\n onSelectCharity={(charity) => {\r\n this.selectCharity(charity);\r\n }}\r\n onRemoveCharity={(ein) => {\r\n this.removeCharity(ein);\r\n }}\r\n onSelectCategory={(category) => {\r\n this.selectCategory(category, props);\r\n }}\r\n onRemoveCharity={(ein) => {\r\n this.removeCharity(ein);\r\n }}\r\n onSearchAll={() => {\r\n this.openSearch(props);\r\n }}\r\n onContinue={() => {\r\n this.setInitialDistribution(props);\r\n }}\r\n />\r\n )}\r\n />\r\n (\r\n {\r\n return category.id == props.match.params.categoryID;\r\n })}\r\n selectedCharities={this.state.selectedCharities}\r\n collapseSelectedCharities={this.state.collapseSelectedCharities}\r\n code={this.state.code}\r\n onCodeError={() => {\r\n this.openCodeError(props);\r\n }}\r\n onToggleCollapseSelectedCharities={() => {\r\n this.setState({\r\n collapseSelectedCharities:\r\n !this.state.collapseSelectedCharities,\r\n });\r\n }}\r\n onSelectCategory={(category) => {\r\n this.selectCategory(category, props);\r\n }}\r\n onSelectCharity={(charity) => {\r\n this.selectCharity(charity);\r\n }}\r\n onRemoveCharity={(ein) => {\r\n this.removeCharity(ein);\r\n }}\r\n onViewCharity={(charity) => {\r\n this.viewCharity(charity, props);\r\n }}\r\n onBack={() => {\r\n this.goBack(props);\r\n }}\r\n onContinue={() => {\r\n this.setInitialDistribution(props);\r\n }}\r\n onSearchAll={() => {\r\n this.openSearch(props);\r\n }}\r\n />\r\n )}\r\n />\r\n (\r\n {\r\n this.openCodeError(props);\r\n }}\r\n onToggleCollapseSelectedCharities={() => {\r\n this.setState({\r\n collapseSelectedCharities:\r\n !this.state.collapseSelectedCharities,\r\n });\r\n }}\r\n onSelectCategory={(category) => {\r\n this.selectCategory(category, props);\r\n }}\r\n onSelectCharity={(charity) => {\r\n this.selectCharity(charity);\r\n }}\r\n onRemoveCharity={(ein) => {\r\n this.removeCharity(ein);\r\n }}\r\n onViewCharity={(charity) => {\r\n this.viewCharity(charity, props);\r\n }}\r\n onBack={() => {\r\n this.goBack(props);\r\n }}\r\n onContinue={() => {\r\n this.setInitialDistribution(props);\r\n }}\r\n onSearchAll={() => {\r\n this.openSearch(props);\r\n }}\r\n />\r\n )}\r\n />\r\n (\r\n {\r\n return category.id == props.match.params.categoryID;\r\n })}\r\n tempCharity={this.state.tempCharity}\r\n selectedCharityID={props.match.params.charityID}\r\n selectedCharities={this.state.selectedCharities}\r\n collapseSelectedCharities={this.state.collapseSelectedCharities}\r\n code={this.state.code}\r\n onCodeError={() => {\r\n this.openCodeError(props);\r\n }}\r\n onToggleCollapseSelectedCharities={() => {\r\n this.setState({\r\n collapseSelectedCharities:\r\n !this.state.collapseSelectedCharities,\r\n });\r\n }}\r\n onSelectCharity={(charity) => {\r\n // ReactGA.event({\r\n // category: \"User Action\",\r\n // action: \"Select Charity\",\r\n // label: charity.ein,\r\n // });\r\n let selectedIndex = this.state.selectedCharities.findIndex(\r\n (item) => {\r\n return item.ein == charity.ein;\r\n }\r\n );\r\n if (\r\n selectedIndex == -1 &&\r\n this.state.account.settings.additionalCharityCount >=\r\n this.state.selectedCharities.length\r\n ) {\r\n let selectedCharities = this.state.selectedCharities.slice();\r\n selectedCharities.push({ ...charity });\r\n this.setState(\r\n {\r\n selectedCharities: selectedCharities,\r\n },\r\n () => {\r\n this.resetScroll();\r\n props.history.goBack();\r\n }\r\n );\r\n }\r\n }}\r\n onRemoveCharity={(ein) => {\r\n this.removeCharity(ein);\r\n }}\r\n onBack={() => {\r\n this.goBack(props);\r\n }}\r\n onContinue={() => {\r\n this.setInitialDistribution(props);\r\n }}\r\n onSearchAll={() => {\r\n this.openSearch(props);\r\n }}\r\n />\r\n )}\r\n />\r\n (\r\n {\r\n this.openCodeError(props);\r\n }}\r\n onOptInChanged={(optIn) => {\r\n // ReactGA.event({\r\n // category: \"User Action\",\r\n // action: \"Opt In\",\r\n // });\r\n this.setState({\r\n optIn: optIn,\r\n });\r\n }}\r\n onNameChanged={(name) => {\r\n let validName = utilities.validateName(name);\r\n this.setState({\r\n name: name,\r\n optIn: true,\r\n validation: {\r\n ...this.state.validation,\r\n name: this.state.validation.name\r\n ? this.state.validation.name\r\n : validName,\r\n },\r\n });\r\n }}\r\n onEmailChanged={(email) => {\r\n let validEmail = utilities.validateEmail(email);\r\n this.setState({\r\n notifyEmail: email,\r\n validation: {\r\n ...this.state.validation,\r\n email: this.state.validation.email\r\n ? this.state.validation.email\r\n : validEmail,\r\n },\r\n });\r\n }}\r\n onCharityChanged={(amount, ein) => {\r\n // ReactGA.event({\r\n // category: \"User Action\",\r\n // action: \"Change Charity Distribution\",\r\n // label: \"$\" + amount,\r\n // });\r\n let charities = this.state.selectedCharities.slice();\r\n let inBounds = true;\r\n charities.map((item) => {\r\n if (ein == item.ein) {\r\n item.amount = parseInt(amount);\r\n }\r\n inBounds = inBounds && parseInt(item.amount) >= 3;\r\n });\r\n let total = charities.reduce((a, b) => ({\r\n amount: a.amount + b.amount,\r\n }));\r\n this.setState({\r\n selectedCharities: charities,\r\n validation: {\r\n ...this.state.validation,\r\n total:\r\n !Number.isInteger(total.amount) ||\r\n total.amount == Math.trunc(this.state.donation.amount),\r\n inBounds: inBounds,\r\n },\r\n });\r\n }}\r\n onBack={() => {\r\n this.setState(\r\n {\r\n thankYouName: \"\",\r\n thankYouNote: \"\",\r\n name: \"\",\r\n notifyEmail: this.state.email,\r\n validation: {\r\n email: true,\r\n name: true,\r\n notifyEmail: true,\r\n total: true,\r\n inBounds: true,\r\n thankYouName: true,\r\n thankYouNote: true,\r\n },\r\n },\r\n () => {\r\n this.resetScroll();\r\n props.history.push(\r\n this.state.originUrl + consts.PANEL_CATEGORY_SELECTOR\r\n );\r\n }\r\n );\r\n }}\r\n onReset={() => {\r\n let selectedCharities = this.state.selectedCharities.slice();\r\n let dollars = Math.trunc(this.state.donation.amount);\r\n let cents = this.state.donation.amount - dollars;\r\n let amount = Math.floor(dollars / selectedCharities.length);\r\n let remainder = dollars % selectedCharities.length;\r\n selectedCharities.map((charity, index) => {\r\n charity.amount = amount + (index == 0 ? remainder : 0);\r\n charity.cents = index == 0 ? cents : 0;\r\n });\r\n this.setState({\r\n selectedCharities: selectedCharities,\r\n validation: {\r\n ...this.state.validation,\r\n total: true,\r\n inBounds: true,\r\n },\r\n });\r\n }}\r\n onContinue={() => {\r\n let validName = utilities.validateName(this.state.name);\r\n let validEmail = utilities.validateEmail(\r\n this.state.notifyEmail\r\n );\r\n if (\r\n this.state.validation.total &&\r\n this.state.validation.inBounds &&\r\n (!this.state.optIn || (validName && validEmail))\r\n ) {\r\n this.setState(\r\n {\r\n busy: false,\r\n },\r\n () => {\r\n this.resetScroll();\r\n props.history.push(\r\n this.state.originUrl +\r\n (this.state.donation.campaignDetail &&\r\n this.state.donation.campaignDetail\r\n .showAdditionalInstructions &&\r\n this.state.donation.amount >= 1000\r\n ? consts.PANEL_CAMPAIGN_INSTRUCTIONS\r\n : this.state.donation.campaignDetail &&\r\n this.state.donation.campaignDetail.thankYouMarkup\r\n ? consts.PANEL_CAMPAIGN_THANK_YOU\r\n : consts.PANEL_THANK_YOU)\r\n );\r\n }\r\n );\r\n } else {\r\n if (this.state.optIn) {\r\n this.setState({\r\n validation: {\r\n ...this.state.validation,\r\n name: validName,\r\n notifyEmail: validEmail,\r\n },\r\n });\r\n }\r\n }\r\n }}\r\n />\r\n )}\r\n />\r\n (\r\n {\r\n this.reset(props);\r\n //this.openCodeError(props);\r\n }}\r\n onThankYouNameChanged={(thankYouName) => {\r\n let validThankYouName =\r\n utilities.validateThankYouName(thankYouName);\r\n this.setState({\r\n thankYouName: thankYouName,\r\n validation: {\r\n ...this.state.validation,\r\n thankYouName: this.state.validation.thankYouName\r\n ? this.state.validation.thankYouName\r\n : validThankYouName,\r\n },\r\n });\r\n }}\r\n onThankYouNoteChanged={(thankYouNote) => {\r\n let validThankYouNote =\r\n utilities.validateThankYouNote(thankYouNote);\r\n this.setState({\r\n thankYouNote: thankYouNote,\r\n validation: {\r\n ...this.state.validation,\r\n thankYouNote: this.state.validation.thankYouNote\r\n ? this.state.validation.thankYouNote\r\n : validThankYouNote,\r\n },\r\n });\r\n }}\r\n onContinue={() => {\r\n // this.state.selectedCharities.map((charity) => {\r\n // if (charity.ein) {\r\n // ReactGA.event({\r\n // category: \"Spend\",\r\n // action: charity.ein,\r\n // label: \"Donation to \" + charity.name,\r\n // value: charity.amount,\r\n // });\r\n // }\r\n // });\r\n // ReactGA.event({\r\n // category: \"User Action\",\r\n // action: \"Spend Card\",\r\n // label: this.state.code,\r\n // value: this.state.donation.amount,\r\n // });\r\n // ReactGA.event({\r\n // category: \"User Action\",\r\n // action: \"Send Thank You\",\r\n // label: this.state.thankYouNote,\r\n // });\r\n let validThankYouName = utilities.validateThankYouName(\r\n this.state.thankYouName\r\n );\r\n let validThankYouNote = utilities.validateThankYouNote(\r\n this.state.thankYouNote\r\n );\r\n if (validThankYouName && validThankYouNote) {\r\n this.setState({ busy: true }, () => {\r\n utilities\r\n .setDonation(\r\n this.state.code,\r\n this.state.name,\r\n this.state.email,\r\n this.state.optIn,\r\n this.state.notifyEmail,\r\n this.state.selectedCharities,\r\n this.state.thankYouName,\r\n this.state.thankYouNote,\r\n this.state.donation.campaignDetail &&\r\n this.state.donation.campaignDetail\r\n .showAdditionalInstructions &&\r\n this.state.donation.amount >= 1000\r\n ? this.state.instructions\r\n : null\r\n )\r\n .then(() => {\r\n this.setState(\r\n {\r\n busy: false,\r\n },\r\n () => {\r\n this.resetScroll();\r\n props.history.push(\r\n this.state.originUrl + consts.PANEL_SHARE_SPEND\r\n );\r\n }\r\n );\r\n })\r\n .catch((err) => {\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.log(err);\r\n }\r\n this.setState({\r\n busy: false,\r\n validation: {\r\n ...this.state.validation,\r\n code: false,\r\n },\r\n });\r\n });\r\n });\r\n } else {\r\n this.setState({\r\n validation: {\r\n ...this.state.validation,\r\n thankYouName: validThankYouName,\r\n thankYouNote: validThankYouNote,\r\n },\r\n });\r\n }\r\n }}\r\n onBack={() => {\r\n this.goBack(props);\r\n }}\r\n onSkip={() => {\r\n // this.state.selectedCharities.map((charity) => {\r\n // ReactGA.event({\r\n // category: \"Spend\",\r\n // action: charity.ein,\r\n // label: \"Donation to \" + charity.name,\r\n // value: charity.amount,\r\n // });\r\n // });\r\n // ReactGA.event({\r\n // category: \"User Action\",\r\n // action: \"Spend Card\",\r\n // label: this.state.code,\r\n // value: this.state.donation.amount,\r\n // });\r\n // ReactGA.event({\r\n // category: \"User Action\",\r\n // action: \"Skip Thank You\",\r\n // label: this.state.thankYouNote,\r\n // });\r\n this.setState({ busy: true }, () => {\r\n utilities\r\n .setDonation(\r\n this.state.code,\r\n this.state.name,\r\n this.state.email,\r\n this.state.optIn,\r\n this.state.notifyEmail,\r\n this.state.selectedCharities,\r\n \"\",\r\n \"\",\r\n this.state.donation.campaignDetail &&\r\n this.state.donation.campaignDetail\r\n .showAdditionalInstructions &&\r\n this.state.donation.amount >= 1000\r\n ? this.state.instructions\r\n : null\r\n )\r\n .then(() => {\r\n this.setState(\r\n {\r\n busy: false,\r\n },\r\n () => {\r\n this.resetScroll();\r\n props.history.push(\r\n this.state.originUrl + consts.PANEL_SHARE_SPEND\r\n );\r\n }\r\n );\r\n })\r\n .catch((err) => {\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.log(err);\r\n }\r\n this.setState({\r\n busy: false,\r\n validation: {\r\n ...this.state.validation,\r\n code: false,\r\n },\r\n });\r\n });\r\n });\r\n }}\r\n />\r\n )}\r\n />\r\n (\r\n {\r\n props.history.push(this.state.originUrl);\r\n }}\r\n />\r\n )}\r\n />\r\n (\r\n {\r\n props.history.push(this.state.originUrl);\r\n }}\r\n />\r\n )}\r\n />\r\n (\r\n {\r\n let validCode = utilities.validateCode(code);\r\n this.setState({\r\n code: code,\r\n validation: {\r\n ...this.state.validation,\r\n code: this.state.validation.code\r\n ? this.state.validation.code\r\n : validCode,\r\n },\r\n });\r\n }}\r\n onEmailChanged={(email) => {\r\n let validEmail = utilities.validateEmail(this.state.email);\r\n this.setState({\r\n email: email,\r\n validation: {\r\n ...this.state.validation,\r\n email: this.state.validation.email\r\n ? this.state.validation.email\r\n : validEmail,\r\n },\r\n });\r\n }}\r\n onSubmit={() => {\r\n let validCode = utilities.validateCode(this.state.code);\r\n let validEmail = utilities.validateEmail(this.state.email);\r\n if (validCode && validEmail) {\r\n this.setState({ busy: true }, () => {\r\n utilities\r\n .getCodeDetail(this.state.code)\r\n .then((donationResponse) => {\r\n utilities\r\n .getCategories(this.state.code)\r\n .then((categories) => {\r\n let additionalCharityCount =\r\n this.state.account.settings\r\n .additionalCharityCount <\r\n donationResponse.amount / 3\r\n ? this.state.account.settings\r\n .additionalCharityCount\r\n : Math.floor(donationResponse.amount / 3) - 1;\r\n additionalCharityCount =\r\n additionalCharityCount > 0\r\n ? additionalCharityCount\r\n : 0;\r\n this.setState(\r\n {\r\n busy: false,\r\n donation: donationResponse,\r\n notifyEmail: this.state.email,\r\n categories: categories,\r\n selectedCharities: [],\r\n account: {\r\n ...this.state.account,\r\n settings: {\r\n ...this.state.account.settings,\r\n additionalCharityCount:\r\n additionalCharityCount,\r\n },\r\n },\r\n },\r\n () => {\r\n this.resetScroll();\r\n props.history.push(\r\n this.state.originUrl +\r\n (donationResponse.campaignDetail &&\r\n donationResponse.campaignDetail\r\n .welcomeMarkup\r\n ? consts.PANEL_CAMPAIGN_WELCOME\r\n : consts.PANEL_CATEGORY_SELECTOR)\r\n );\r\n }\r\n );\r\n });\r\n })\r\n .catch((err) => {\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.log(err);\r\n }\r\n try {\r\n let errorResponse = JSON.parse(err.response);\r\n if (errorResponse.code == \"2.3\") {\r\n utilities\r\n .getSpendDetail(this.state.code)\r\n .then((spendDetail) => {\r\n // ReactGA.event({\r\n // category: \"Validation\",\r\n // action: \"Validate Card Code\",\r\n // label: this.state.code + \" has been spent\",\r\n // });\r\n let dateSpent = new Date(spendDetail.dateSpent);\r\n dateSpent =\r\n parseInt(dateSpent.getMonth() + 1) +\r\n \"/\" +\r\n dateSpent.getDate() +\r\n \"/\" +\r\n dateSpent.getFullYear();\r\n this.setState(\r\n {\r\n busy: false,\r\n selectedCharities:\r\n spendDetail.charitySpentDetail,\r\n dateSpent: dateSpent,\r\n },\r\n () => {\r\n this.resetScroll();\r\n props.history.push(\r\n this.state.originUrl +\r\n consts.PANEL_CODE_ERROR\r\n );\r\n }\r\n );\r\n })\r\n .catch(() => {\r\n // ReactGA.event({\r\n // category: \"Validation\",\r\n // action: \"Validate Card Code\",\r\n // label: this.state.code + \" is invalid\",\r\n // });\r\n this.setState({\r\n busy: false,\r\n validation: {\r\n ...this.state.validation,\r\n code: false,\r\n },\r\n });\r\n });\r\n } else {\r\n // ReactGA.event({\r\n // category: \"Validation\",\r\n // action: \"Validate Card Code\",\r\n // label: this.state.code + \" is invalid\",\r\n // });\r\n this.setState({\r\n busy: false,\r\n validation: {\r\n ...this.state.validation,\r\n code: false,\r\n },\r\n });\r\n }\r\n } catch (e) {\r\n // ReactGA.event({\r\n // category: \"Validation\",\r\n // action: \"Validate Card Code\",\r\n // label: this.state.code + \" is invalid\",\r\n // });\r\n this.setState({\r\n busy: false,\r\n validation: {\r\n ...this.state.validation,\r\n code: false,\r\n },\r\n });\r\n }\r\n });\r\n });\r\n } else {\r\n // if (validCode) {\r\n // ReactGA.event({\r\n // category: \"Validation\",\r\n // action: \"Validate Card Code\",\r\n // label: this.state.code + \" is invalid\",\r\n // });\r\n // }\r\n // if (validEmail) {\r\n // ReactGA.event({\r\n // category: \"Validation\",\r\n // action: \"Validate Email\",\r\n // label: this.state.email + \" is invalid\",\r\n // });\r\n // }\r\n this.setState({\r\n validation: {\r\n ...this.state.validation,\r\n code: validCode,\r\n email: validEmail,\r\n },\r\n });\r\n }\r\n }}\r\n />\r\n )}\r\n />\r\n \r\n );\r\n }\r\n render() {\r\n if (this.state.account) {\r\n return (\r\n \r\n \r\n {this.state.account.settings.showHeader ? (\r\n
\r\n ) : null}\r\n
{this.renderPanel()}
\r\n {this.state.account.settings.showFooter ? (\r\n
\r\n ) : null}\r\n
\r\n );\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\nexport default withRouter(App);\r\n","import { Router, __RouterContext, matchPath } from 'react-router';\nexport { MemoryRouter, Prompt, Redirect, Route, Router, StaticRouter, Switch, generatePath, matchPath, useHistory, useLocation, useParams, useRouteMatch, withRouter } from 'react-router';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport React from 'react';\nimport { createBrowserHistory, createHashHistory, createLocation, createPath } from 'history';\nimport PropTypes from 'prop-types';\nimport warning from 'tiny-warning';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport invariant from 'tiny-invariant';\n\n/**\n * The public API for a that uses HTML5 history.\n */\n\nvar BrowserRouter = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(BrowserRouter, _React$Component);\n\n function BrowserRouter() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.history = createBrowserHistory(_this.props);\n return _this;\n }\n\n var _proto = BrowserRouter.prototype;\n\n _proto.render = function render() {\n return /*#__PURE__*/React.createElement(Router, {\n history: this.history,\n children: this.props.children\n });\n };\n\n return BrowserRouter;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n BrowserRouter.propTypes = {\n basename: PropTypes.string,\n children: PropTypes.node,\n forceRefresh: PropTypes.bool,\n getUserConfirmation: PropTypes.func,\n keyLength: PropTypes.number\n };\n\n BrowserRouter.prototype.componentDidMount = function () {\n process.env.NODE_ENV !== \"production\" ? warning(!this.props.history, \" ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { BrowserRouter as Router }`.\") : void 0;\n };\n}\n\n/**\n * The public API for a that uses window.location.hash.\n */\n\nvar HashRouter = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(HashRouter, _React$Component);\n\n function HashRouter() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.history = createHashHistory(_this.props);\n return _this;\n }\n\n var _proto = HashRouter.prototype;\n\n _proto.render = function render() {\n return /*#__PURE__*/React.createElement(Router, {\n history: this.history,\n children: this.props.children\n });\n };\n\n return HashRouter;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n HashRouter.propTypes = {\n basename: PropTypes.string,\n children: PropTypes.node,\n getUserConfirmation: PropTypes.func,\n hashType: PropTypes.oneOf([\"hashbang\", \"noslash\", \"slash\"])\n };\n\n HashRouter.prototype.componentDidMount = function () {\n process.env.NODE_ENV !== \"production\" ? warning(!this.props.history, \" ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { HashRouter as Router }`.\") : void 0;\n };\n}\n\nvar resolveToLocation = function resolveToLocation(to, currentLocation) {\n return typeof to === \"function\" ? to(currentLocation) : to;\n};\nvar normalizeToLocation = function normalizeToLocation(to, currentLocation) {\n return typeof to === \"string\" ? createLocation(to, null, null, currentLocation) : to;\n};\n\nvar forwardRefShim = function forwardRefShim(C) {\n return C;\n};\n\nvar forwardRef = React.forwardRef;\n\nif (typeof forwardRef === \"undefined\") {\n forwardRef = forwardRefShim;\n}\n\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nvar LinkAnchor = forwardRef(function (_ref, forwardedRef) {\n var innerRef = _ref.innerRef,\n navigate = _ref.navigate,\n _onClick = _ref.onClick,\n rest = _objectWithoutPropertiesLoose(_ref, [\"innerRef\", \"navigate\", \"onClick\"]);\n\n var target = rest.target;\n\n var props = _extends({}, rest, {\n onClick: function onClick(event) {\n try {\n if (_onClick) _onClick(event);\n } catch (ex) {\n event.preventDefault();\n throw ex;\n }\n\n if (!event.defaultPrevented && // onClick prevented default\n event.button === 0 && ( // ignore everything but left clicks\n !target || target === \"_self\") && // let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // ignore clicks with modifier keys\n ) {\n event.preventDefault();\n navigate();\n }\n }\n }); // React 15 compat\n\n\n if (forwardRefShim !== forwardRef) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.ref = innerRef;\n }\n /* eslint-disable-next-line jsx-a11y/anchor-has-content */\n\n\n return /*#__PURE__*/React.createElement(\"a\", props);\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n LinkAnchor.displayName = \"LinkAnchor\";\n}\n/**\n * The public API for rendering a history-aware .\n */\n\n\nvar Link = forwardRef(function (_ref2, forwardedRef) {\n var _ref2$component = _ref2.component,\n component = _ref2$component === void 0 ? LinkAnchor : _ref2$component,\n replace = _ref2.replace,\n to = _ref2.to,\n innerRef = _ref2.innerRef,\n rest = _objectWithoutPropertiesLoose(_ref2, [\"component\", \"replace\", \"to\", \"innerRef\"]);\n\n return /*#__PURE__*/React.createElement(__RouterContext.Consumer, null, function (context) {\n !context ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use outside a \") : invariant(false) : void 0;\n var history = context.history;\n var location = normalizeToLocation(resolveToLocation(to, context.location), context.location);\n var href = location ? history.createHref(location) : \"\";\n\n var props = _extends({}, rest, {\n href: href,\n navigate: function navigate() {\n var location = resolveToLocation(to, context.location);\n var isDuplicateNavigation = createPath(context.location) === createPath(normalizeToLocation(location));\n var method = replace || isDuplicateNavigation ? history.replace : history.push;\n method(location);\n }\n }); // React 15 compat\n\n\n if (forwardRefShim !== forwardRef) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.innerRef = innerRef;\n }\n\n return /*#__PURE__*/React.createElement(component, props);\n });\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n var toType = PropTypes.oneOfType([PropTypes.string, PropTypes.object, PropTypes.func]);\n var refType = PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.shape({\n current: PropTypes.any\n })]);\n Link.displayName = \"Link\";\n Link.propTypes = {\n innerRef: refType,\n onClick: PropTypes.func,\n replace: PropTypes.bool,\n target: PropTypes.string,\n to: toType.isRequired\n };\n}\n\nvar forwardRefShim$1 = function forwardRefShim(C) {\n return C;\n};\n\nvar forwardRef$1 = React.forwardRef;\n\nif (typeof forwardRef$1 === \"undefined\") {\n forwardRef$1 = forwardRefShim$1;\n}\n\nfunction joinClassnames() {\n for (var _len = arguments.length, classnames = new Array(_len), _key = 0; _key < _len; _key++) {\n classnames[_key] = arguments[_key];\n }\n\n return classnames.filter(function (i) {\n return i;\n }).join(\" \");\n}\n/**\n * A wrapper that knows if it's \"active\" or not.\n */\n\n\nvar NavLink = forwardRef$1(function (_ref, forwardedRef) {\n var _ref$ariaCurrent = _ref[\"aria-current\"],\n ariaCurrent = _ref$ariaCurrent === void 0 ? \"page\" : _ref$ariaCurrent,\n _ref$activeClassName = _ref.activeClassName,\n activeClassName = _ref$activeClassName === void 0 ? \"active\" : _ref$activeClassName,\n activeStyle = _ref.activeStyle,\n classNameProp = _ref.className,\n exact = _ref.exact,\n isActiveProp = _ref.isActive,\n locationProp = _ref.location,\n sensitive = _ref.sensitive,\n strict = _ref.strict,\n styleProp = _ref.style,\n to = _ref.to,\n innerRef = _ref.innerRef,\n rest = _objectWithoutPropertiesLoose(_ref, [\"aria-current\", \"activeClassName\", \"activeStyle\", \"className\", \"exact\", \"isActive\", \"location\", \"sensitive\", \"strict\", \"style\", \"to\", \"innerRef\"]);\n\n return /*#__PURE__*/React.createElement(__RouterContext.Consumer, null, function (context) {\n !context ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use outside a \") : invariant(false) : void 0;\n var currentLocation = locationProp || context.location;\n var toLocation = normalizeToLocation(resolveToLocation(to, currentLocation), currentLocation);\n var path = toLocation.pathname; // Regex taken from: https://github.com/pillarjs/path-to-regexp/blob/master/index.js#L202\n\n var escapedPath = path && path.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n var match = escapedPath ? matchPath(currentLocation.pathname, {\n path: escapedPath,\n exact: exact,\n sensitive: sensitive,\n strict: strict\n }) : null;\n var isActive = !!(isActiveProp ? isActiveProp(match, currentLocation) : match);\n var className = typeof classNameProp === \"function\" ? classNameProp(isActive) : classNameProp;\n var style = typeof styleProp === \"function\" ? styleProp(isActive) : styleProp;\n\n if (isActive) {\n className = joinClassnames(className, activeClassName);\n style = _extends({}, style, activeStyle);\n }\n\n var props = _extends({\n \"aria-current\": isActive && ariaCurrent || null,\n className: className,\n style: style,\n to: toLocation\n }, rest); // React 15 compat\n\n\n if (forwardRefShim$1 !== forwardRef$1) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.innerRef = innerRef;\n }\n\n return /*#__PURE__*/React.createElement(Link, props);\n });\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n NavLink.displayName = \"NavLink\";\n var ariaCurrentType = PropTypes.oneOf([\"page\", \"step\", \"location\", \"date\", \"time\", \"true\", \"false\"]);\n NavLink.propTypes = _extends({}, Link.propTypes, {\n \"aria-current\": ariaCurrentType,\n activeClassName: PropTypes.string,\n activeStyle: PropTypes.object,\n className: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n exact: PropTypes.bool,\n isActive: PropTypes.func,\n location: PropTypes.object,\n sensitive: PropTypes.bool,\n strict: PropTypes.bool,\n style: PropTypes.oneOfType([PropTypes.object, PropTypes.func])\n });\n}\n\nexport { BrowserRouter, HashRouter, Link, NavLink };\n//# sourceMappingURL=react-router-dom.js.map\n","import \"core-js/stable\";\r\nimport \"regenerator-runtime/runtime\";\r\nimport React from \"react\"; // eslint-disable-line no-unused-vars\r\nimport ReactDOM from \"react-dom\";\r\n// import ReactGA from \"react-ga\";\r\nimport App from \"./components/app\";\r\nimport { HashRouter as Router } from \"react-router-dom\";\r\n\r\nif (process.env.NODE_ENV === \"development\") {\r\n console.log(\"TisBest Spend: Loading\");\r\n}\r\nlet loadTisBest = function () {\r\n //ReactGA.initialize(\"UA-6437491-1\");\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.log(\"TisBest Spend: Initializing React component\");\r\n }\r\n let tisBestSpendApp = document.getElementById(\"tisBestSpendApp\");\r\n if (tisBestSpendApp) {\r\n ReactDOM.render(\r\n \r\n \r\n ,\r\n tisBestSpendApp\r\n );\r\n } else {\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.log(\"TisBest Spend: No element to insert component into\");\r\n }\r\n }\r\n};\r\nif (document.readyState === \"loading\") {\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.log(\"TisBest Spend: Waiting for document ready state\");\r\n }\r\n document.addEventListener(\"DOMContentLoaded\", loadTisBest);\r\n} else {\r\n loadTisBest();\r\n}\r\n"],"names":["exports","prefix","iconName","icon","hasOwn","hasOwnProperty","classNames","classes","i","arguments","length","arg","argType","push","Array","isArray","inner","apply","toString","Object","prototype","key","call","join","module","default","it","TypeError","String","isObject","wellKnownSymbol","create","definePropertyModule","UNSCOPABLES","ArrayPrototype","undefined","f","configurable","value","charAt","S","index","unicode","Constructor","name","ArrayBuffer","DataView","NAME","Prototype","NATIVE_ARRAY_BUFFER","DESCRIPTORS","global","has","classof","createNonEnumerableProperty","redefine","defineProperty","getPrototypeOf","setPrototypeOf","uid","Int8Array","Int8ArrayPrototype","Uint8ClampedArray","Uint8ClampedArrayPrototype","TypedArray","TypedArrayPrototype","ObjectPrototype","isPrototypeOf","TO_STRING_TAG","TYPED_ARRAY_TAG","TYPED_ARRAY_CONSTRUCTOR","NATIVE_ARRAY_BUFFER_VIEWS","opera","TYPED_ARRAY_TAG_REQIRED","TypedArrayConstructorsList","Uint8Array","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigIntArrayConstructorsList","BigInt64Array","BigUint64Array","isTypedArray","klass","Function","get","this","aTypedArray","aTypedArrayConstructor","C","exportTypedArrayMethod","KEY","property","forced","ARRAY","TypedArrayConstructor","error","exportTypedArrayStaticMethod","isView","redefineAll","fails","anInstance","toInteger","toLength","toIndex","IEEE754","getOwnPropertyNames","arrayFill","setToStringTag","InternalStateModule","getInternalState","setInternalState","set","ARRAY_BUFFER","DATA_VIEW","WRONG_INDEX","NativeArrayBuffer","$ArrayBuffer","$DataView","$DataViewPrototype","RangeError","packIEEE754","pack","unpackIEEE754","unpack","packInt8","number","packInt16","packInt32","unpackInt32","buffer","packFloat32","packFloat64","addGetter","view","count","isLittleEndian","intIndex","store","byteLength","bytes","start","byteOffset","slice","reverse","conversion","NaN","ArrayBufferPrototype","keys","j","constructor","testView","$setInt8","setInt8","getInt8","setUint8","unsafe","bufferLength","offset","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","toObject","toAbsoluteIndex","min","Math","copyWithin","target","O","len","to","from","end","inc","argumentsLength","endPos","$forEach","STRICT_METHOD","arrayMethodIsStrict","forEach","callbackfn","list","result","bind","callWithSafeIterationClosing","isArrayIteratorMethod","createProperty","getIterator","getIteratorMethod","arrayLike","step","iterator","next","mapfn","mapping","iteratorMethod","done","toIndexedObject","createMethod","IS_INCLUDES","$this","el","fromIndex","includes","indexOf","IndexedObject","arraySpeciesCreate","TYPE","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","that","specificCreate","self","boundFunction","map","filter","some","every","find","findIndex","filterReject","$lastIndexOf","lastIndexOf","NEGATIVE_ZERO","FORCED","searchElement","V8_VERSION","SPECIES","METHOD_NAME","array","foo","Boolean","argument","method","aFunction","IS_RIGHT","memo","left","right","floor","mergeSort","comparefn","middle","insertionSort","merge","element","llength","rlength","lindex","rindex","originalArray","arraySpeciesConstructor","anObject","iteratorClose","fn","ENTRIES","ITERATOR","SAFE_CLOSING","called","iteratorWithReturn","exec","SKIP_CLOSING","ITERATION_SUPPORT","object","TO_STRING_TAG_SUPPORT","classofRaw","CORRECT_ARGUMENTS","tag","tryGet","callee","iterate","defineIterator","setSpecies","fastKey","internalStateGetterFor","getterFor","getConstructor","wrapper","CONSTRUCTOR_NAME","ADDER","iterable","type","first","last","size","AS_ENTRIES","define","previous","state","entry","getEntry","removed","clear","data","prev","add","setStrong","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","iterated","kind","getWeakData","ArrayIterationModule","$has","id","uncaughtFrozenStore","frozen","UncaughtFrozenStore","entries","findUncaughtFrozen","splice","$","isForced","InternalMetadataModule","checkCorrectnessOfIteration","inheritIfRequired","common","IS_WEAK","NativeConstructor","NativePrototype","exported","fixMethod","nativeMethod","enable","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","dummy","ownKeys","getOwnPropertyDescriptorModule","source","getOwnPropertyDescriptor","MATCH","regexp","error1","error2","F","requireObjectCoercible","quot","string","attribute","p1","replace","IteratorPrototype","createPropertyDescriptor","Iterators","returnThis","IteratorConstructor","bitmap","enumerable","writable","toPropertyKey","propertyKey","padStart","abs","DatePrototype","Date","getTime","nativeDateToISOString","toISOString","isFinite","date","year","getUTCFullYear","milliseconds","getUTCMilliseconds","sign","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","ordinaryToPrimitive","hint","createIteratorConstructor","IS_PURE","IteratorsCore","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","Iterable","DEFAULT","IS_SET","CurrentIteratorPrototype","methods","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","values","proto","path","wrappedWellKnownSymbolModule","Symbol","document","EXISTS","createElement","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","firefox","match","window","UA","test","userAgent","Pebble","process","getBuiltIn","version","Deno","versions","v8","split","webkit","setGlobal","copyConstructorProperties","options","targetProperty","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","stat","noTargetGet","sham","regexpExec","RegExpPrototype","RegExp","SHAM","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","re","flags","nativeRegExpMethod","str","arg2","forceStringMethod","$exec","flattenIntoArray","original","sourceLen","depth","mapper","thisArg","targetIndex","sourceIndex","mapFn","isExtensible","preventExtensions","a","b","c","factories","construct","argsLength","args","partArgs","concat","variable","namespace","usingIterator","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","matched","position","captures","namedCaptures","replacement","tailPos","m","symbols","ch","capture","n","check","globalThis","g","console","pow","log","LN2","mantissaLength","exponent","mantissa","exponentLength","eMax","eBias","rt","Infinity","nBits","propertyIsEnumerable","Wrapper","NewTarget","NewTargetPrototype","functionToString","inspectSource","hiddenKeys","getOwnPropertyNamesModule","getOwnPropertyNamesExternalModule","FREEZING","REQUIRED","METADATA","setMetadata","objectID","weakData","meta","onFreeze","NATIVE_WEAK_MAP","objectHas","shared","sharedKey","OBJECT_ALREADY_INITIALIZED","WeakMap","wmget","wmhas","wmset","metadata","facade","STATE","enforce","feature","detection","normalize","POLYFILL","NATIVE","toLowerCase","isRegExp","USE_SYMBOL_AS_UID","$Symbol","Result","stopped","unboundFunction","iterFn","IS_ITERATOR","INTERRUPTED","stop","condition","callFn","innerResult","innerError","PrototypeOfArrayIteratorPrototype","arrayIterator","NEW_ITERATOR_PROTOTYPE","$expm1","expm1","exp","x","EPSILON","EPSILON32","MAX32","MIN32","fround","$abs","$sign","log1p","flush","head","notify","toggle","node","promise","then","macrotask","IS_IOS","IS_IOS_PEBBLE","IS_WEBOS_WEBKIT","IS_NODE","MutationObserver","WebKitMutationObserver","Promise","queueMicrotaskDescriptor","queueMicrotask","parent","domain","exit","enter","resolve","nextTick","createTextNode","observe","characterData","task","getOwnPropertySymbols","symbol","url","URL","searchParams","pathname","toJSON","sort","href","URLSearchParams","username","host","hash","PromiseCapability","reject","$$resolve","$$reject","globalIsFinite","Number","trim","whitespaces","$parseFloat","parseFloat","trimmedString","$parseInt","parseInt","hex","radix","objectKeys","getOwnPropertySymbolsModule","propertyIsEnumerableModule","$assign","assign","A","B","alphabet","chr","T","activeXDocument","defineProperties","enumBugKeys","html","documentCreateElement","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObjectViaActiveX","write","close","temp","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","iframe","style","display","appendChild","src","contentWindow","open","Properties","IE8_DOM_DEFINE","$defineProperty","P","Attributes","$getOwnPropertyDescriptor","$getOwnPropertyNames","windowNames","getWindowNames","internalObjectKeys","CORRECT_PROTOTYPE_GETTER","names","$propertyIsEnumerable","NASHORN_BUG","V","WEBKIT","random","__defineSetter__","aPossiblePrototype","setter","CORRECT_SETTER","__proto__","TO_ENTRIES","input","pref","val","valueOf","newPromiseCapability","promiseCapability","enforceInternalState","TEMPLATE","simple","R","re1","re2","regexpFlags","stickyHelpers","UNSUPPORTED_DOT_ALL","UNSUPPORTED_NCG","nativeExec","nativeReplace","patchedExec","UPDATES_LAST_INDEX_WRONG","lastIndex","UNSUPPORTED_Y","BROKEN_CARET","NPCG_INCLUDED","reCopy","group","raw","groups","sticky","charsAdded","strCopy","multiline","ignoreCase","dotAll","$RegExp","is","y","TAG","SHARED","mode","copyright","defaultConstructor","CONVERT_TO_STRING","pos","second","charCodeAt","codeAt","repeat","ceil","IS_END","maxLength","fillString","fillLen","stringFiller","stringLength","fillStr","intMaxLength","maxInt","regexNonASCII","regexSeparators","OVERFLOW_ERROR","stringFromCharCode","fromCharCode","digitToBasic","digit","adapt","delta","numPoints","firstTime","k","baseMinusTMin","base","encode","currentValue","output","inputLength","counter","extra","ucs2decode","bias","basicLength","handledCPCount","handledCPCountPlusOne","q","t","qMinusT","baseMinusT","label","encoded","labels","whitespace","ltrim","rtrim","location","defer","channel","port","setImmediate","clearImmediate","MessageChannel","Dispatch","queue","run","runner","listener","event","post","postMessage","protocol","now","port2","port1","onmessage","addEventListener","importScripts","removeChild","setTimeout","max","integer","isNaN","toPositiveInteger","BYTES","isSymbol","TO_PRIMITIVE","exoticToPrim","toPrimitive","TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS","ArrayBufferViewCore","ArrayBufferModule","isInteger","toOffset","typedArrayFrom","nativeDefineProperty","nativeGetOwnPropertyDescriptor","round","BYTES_PER_ELEMENT","WRONG_LENGTH","fromList","isArrayBuffer","isTypedArrayIndex","wrappedGetOwnPropertyDescriptor","wrappedDefineProperty","CLAMPED","GETTER","SETTER","NativeTypedArrayConstructor","TypedArrayConstructorPrototype","addElement","getter","typedArrayOffset","$length","$len","arrayFromConstructorAndList","typedArraySpeciesConstructor","speciesConstructor","postfix","NATIVE_SYMBOL","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","arrayBufferModule","nativeArrayBufferSlice","fin","viewSource","viewTarget","arrayMethodHasSpeciesSupport","IS_CONCAT_SPREADABLE","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","E","addToUnscopables","$every","fill","$filter","$findIndex","FIND_INDEX","SKIPS_HOLES","$find","FIND","flatMap","flat","depthArg","$includes","$indexOf","nativeIndexOf","ARRAY_ITERATOR","Arguments","nativeJoin","ES3_STRINGS","separator","$map","of","$reduceRight","CHROME_VERSION","reduceRight","$reduce","reduce","nativeReverse","HAS_SPECIES_SUPPORT","nativeSlice","$some","internalSort","FF","IE_OR_EDGE","V8","nativeSort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STABLE_SORT","code","v","itemsLength","items","arrayLength","getSortCompare","MAXIMUM_ALLOWED_LENGTH_EXCEEDED","deleteCount","insertCount","actualDeleteCount","actualStart","pv","dateToPrimitive","HAS_INSTANCE","FunctionPrototype","FunctionPrototypeToString","nameRE","JSON","collection","collectionStrong","init","$acosh","acosh","sqrt","MAX_VALUE","$asinh","asinh","$atanh","atanh","cbrt","LOG2E","clz32","$cosh","cosh","$hypot","hypot","value1","value2","div","sum","aLen","larg","$imul","imul","UINT16","xn","yn","xl","yl","LOG10E","log10","log2","sinh","tanh","trunc","NUMBER","NativeNumber","NumberPrototype","BROKEN_CLASSOF","toNumber","third","maxCode","digits","NumberWrapper","isSafeInteger","MIN_SAFE_INTEGER","thisNumberValue","nativeToFixed","toFixed","acc","multiply","c2","divide","dataToString","s","fractionDigits","e","z","fractDigits","x2","nativeToPrecision","toPrecision","precision","__defineGetter__","$entries","$freeze","freeze","fromEntries","obj","FAILS_ON_PRIMITIVES","getOwnPropertyDescriptors","nativeGetPrototypeOf","$isExtensible","$isFrozen","isFrozen","$isSealed","isSealed","nativeKeys","__lookupGetter__","desc","__lookupSetter__","$preventExtensions","$seal","seal","$values","parseFloatImplementation","parseIntImplementation","NativePromise","promiseResolve","real","onFinally","isFunction","Internal","OwnPromiseCapability","PromiseWrapper","nativeThen","microtask","hostReportErrors","newPromiseCapabilityModule","perform","IS_BROWSER","PROMISE","getInternalPromiseState","NativePromisePrototype","PromiseConstructor","PromiseConstructorPrototype","newGenericPromiseCapability","DISPATCH_EVENT","createEvent","dispatchEvent","NATIVE_REJECTION_EVENT","PromiseRejectionEvent","UNHANDLED_REJECTION","SUBCLASSING","PROMISE_CONSTRUCTOR_SOURCE","GLOBAL_CORE_JS_PROMISE","FakePromise","INCORRECT_ITERATION","all","isThenable","isReject","notified","chain","reactions","ok","exited","reaction","handler","fail","rejection","onHandleUnhandled","onUnhandled","reason","initEvent","isUnhandled","emit","unwrap","internalReject","internalResolve","executor","onFulfilled","onRejected","wrap","r","capability","$promiseResolve","remaining","alreadyCalled","race","nativeApply","functionApply","thisArgument","argumentsList","nativeConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","Reflect","attributes","deleteProperty","objectGetPrototypeOf","isDataDescriptor","receiver","objectIsExtensible","objectPreventExtensions","objectSetPrototypeOf","existingDescriptor","ownDescriptor","getFlags","NativeRegExp","IS_NCG","CORRECT_NEW","RegExpWrapper","pattern","rawFlags","handled","thisIsRegExp","patternIsRegExp","flagsAreUndefined","rawPattern","named","brackets","ncg","groupid","groupname","SyntaxError","handleNCG","handleDotAll","proxy","objectDefinePropertyModule","regExpFlags","$toString","TO_STRING","nativeToString","NOT_GENERIC","INCORRECT_NAME","p","rf","createHTML","forcedStringHTMLMethod","anchor","big","blink","bold","codePointAt","notARegExp","correctIsRegExpLogic","$endsWith","endsWith","CORRECT_IS_REGEXP_LOGIC","searchString","endPosition","search","fixed","fontcolor","color","fontsize","$fromCodePoint","fromCodePoint","elements","italics","STRING_ITERATOR","point","link","getRegExpFlags","advanceStringIndex","MATCH_ALL","REGEXP_STRING_ITERATOR","REGEXP_STRING","regExpBuiltinExec","nativeMatchAll","matchAll","WORKS_WITH_NON_GLOBAL_REGEX","$RegExpStringIterator","fullUnicode","regExpExec","$matchAll","flagsValue","matcher","rx","fixRegExpWellKnownSymbolLogic","nativeMatch","maybeCallNative","res","matchStr","$padEnd","padEnd","$padStart","template","rawTemplate","literalSegments","getSubstitution","REPLACE","REPLACE_KEEPS_$0","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","_","UNSAFE_SUBSTITUTE","searchValue","replaceValue","replacer","functionalReplace","results","accumulatedResult","nextSourcePosition","replacerArgs","sameValue","SEARCH","nativeSearch","searcher","previousLastIndex","small","callRegExpExec","arrayPush","MAX_UINT32","SPLIT","nativeSplit","internalSplit","limit","lim","lastLength","lastLastIndex","separatorCopy","splitter","unicodeMatching","originalExec","$startsWith","startsWith","strike","sub","sup","$trimEnd","forcedStringTrimMethod","trimEnd","trimRight","$trimStart","trimStart","trimLeft","$trim","defineWellKnownSymbol","NativeSymbol","description","EmptyStringDescriptionStore","SymbolWrapper","symbolPrototype","symbolToString","nativeSymbol","nativeObjectCreate","getOwnPropertyNamesExternal","HIDDEN","$stringify","nativeGetOwnPropertyNames","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","QObject","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","$defineProperties","properties","$getOwnPropertySymbols","IS_OBJECT_PROTOTYPE","keyFor","sym","useSetter","useSimple","stringify","space","$replacer","$copyWithin","$fill","fromSpeciesAndList","predicate","createTypedArrayConstructor","ArrayIterators","arrayValues","arrayKeys","arrayEntries","nativeTypedArrayIterator","CORRECT_ITER_NAME","typedArrayValues","$join","$slice","ACCEPT_INCORRECT_ARGUMENTS","mod","expected","begin","beginIndex","$toLocaleString","toLocaleString","TO_LOCALE_STRING_BUG","Uint8ArrayPrototype","arrayToString","arrayJoin","IS_NOT_ARRAY_METHOD","InternalWeakMap","collectionWeak","enforceIternalState","IS_IE11","$WeakMap","WeakMapPrototype","nativeDelete","nativeHas","nativeGet","nativeSet","DOMIterables","COLLECTION_NAME","Collection","CollectionPrototype","ArrayIteratorMethods","ArrayValues","USE_NATIVE_URL","nativeFetch","NativeRequest","RequestPrototype","Headers","URL_SEARCH_PARAMS","URL_SEARCH_PARAMS_ITERATOR","getInternalParamsState","plus","sequences","percentSequence","percentDecode","sequence","decodeURIComponent","deserialize","serialize","encodeURIComponent","parseSearchParams","query","shift","updateSearchParams","validateArgumentsLength","passed","required","URLSearchParamsIterator","params","URLSearchParamsConstructor","entryIterator","entryNext","updateURL","URLSearchParamsPrototype","append","getAll","found","entriesIndex","sliceIndex","callback","wrapRequestOptions","headers","body","fetch","RequestConstructor","Request","getState","EOF","arrayFrom","toASCII","URLSearchParamsModule","NativeURL","getInternalSearchParamsState","getInternalURLState","INVALID_SCHEME","INVALID_HOST","INVALID_PORT","ALPHA","ALPHANUMERIC","DIGIT","HEX_START","OCT","DEC","HEX","FORBIDDEN_HOST_CODE_POINT","FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT","LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE","TAB_AND_NEW_LINE","parseHost","codePoints","parseIPv6","isSpecial","parseIPv4","percentEncode","C0ControlPercentEncodeSet","partsLength","numbers","part","ipv4","parts","pop","numbersSeen","ipv4Piece","swaps","swap","address","pieceIndex","compress","pointer","serializeHost","ignore0","unshift","ipv6","maxIndex","currStart","currLength","findLongestZeroSequence","fragmentPercentEncodeSet","pathPercentEncodeSet","userinfoPercentEncodeSet","specialSchemes","ftp","file","http","https","ws","wss","scheme","includesCredentials","password","cannotHaveUsernamePasswordPort","cannotBeABaseURL","isWindowsDriveLetter","normalized","startsWithWindowsDriveLetter","shortenURLsPath","pathSize","isSingleDot","segment","SCHEME_START","SCHEME","NO_SCHEME","SPECIAL_RELATIVE_OR_AUTHORITY","PATH_OR_AUTHORITY","RELATIVE","RELATIVE_SLASH","SPECIAL_AUTHORITY_SLASHES","SPECIAL_AUTHORITY_IGNORE_SLASHES","AUTHORITY","HOST","HOSTNAME","PORT","FILE","FILE_SLASH","FILE_HOST","PATH_START","PATH","CANNOT_BE_A_BASE_URL_PATH","QUERY","FRAGMENT","parseURL","stateOverride","bufferCodePoints","failure","seenAt","seenBracket","seenPasswordToken","fragment","codePoint","encodedCodePoints","URLConstructor","baseState","urlString","searchParamsState","serializeURL","origin","getOrigin","getProtocol","getUsername","getPassword","getHost","hostname","getHostname","getPort","getPathname","getSearch","getSearchParams","getHash","URLPrototype","accessorDescriptor","nativeCreateObjectURL","createObjectURL","nativeRevokeObjectURL","revokeObjectURL","blob","___CSS_LOADER_EXPORT___","locals","cssWithMappingToString","item","modules","mediaQuery","dedupe","alreadyImportedModules","_i","_arrayLikeToArray","arr","arr2","_item","_arrayWithHoles","_s","_e","_arr","_n","_d","err","_iterableToArrayLimit","o","minLen","_unsupportedIterableToArray","_nonIterableRest","cssMapping","btoa","base64","unescape","sourceMapping","sourceURLs","sources","sourceRoot","reactIs","REACT_STATICS","childContextTypes","contextType","contextTypes","defaultProps","displayName","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","propTypes","KNOWN_STATICS","caller","arity","MEMO_STATICS","compare","TYPE_STATICS","getStatics","component","isMemo","ForwardRef","render","Memo","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","propIsEnumerable","test1","test2","test3","letter","shouldUseNative","isarray","pathToRegexp","delimiter","optional","partial","asterisk","attachKeys","regexpToRegexp","arrayToRegexp","tokensToRegExp","parse","stringToRegexp","compile","tokensToFunction","PATH_REGEXP","tokens","defaultDelimiter","escaped","modifier","escapeGroup","escapeString","substr","encodeURIComponentPretty","encodeURI","toUpperCase","matches","opts","pretty","token","sensitive","strict","route","endsWithDelimiter","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","props","propName","componentName","propFullName","secret","Error","getShim","isRequired","ReactPropTypes","bool","func","any","arrayOf","elementType","instanceOf","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","aa","ba","Set","ca","da","ea","fa","ha","ia","ja","ka","d","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","propertyName","sanitizeURL","removeEmptyString","D","oa","pa","qa","ma","na","la","removeAttribute","setAttribute","setAttributeNS","xlinkHref","ra","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","sa","ta","ua","wa","xa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","for","Ma","Ka","La","Na","stack","Oa","Pa","prepareStackTrace","h","Qa","_render","Ra","$$typeof","_context","_payload","_init","Sa","Ta","nodeName","Va","_valueTracker","getValue","setValue","stopTracking","Ua","Wa","checked","Xa","activeElement","Ya","defaultChecked","defaultValue","_wrapperState","initialChecked","Za","initialValue","controlled","$a","ab","bb","cb","ownerDocument","eb","children","Children","db","fb","selected","defaultSelected","disabled","gb","dangerouslySetInnerHTML","hb","ib","jb","textContent","kb","lb","mb","nb","ob","namespaceURI","innerHTML","firstChild","MSApp","execUnsafeLocalFunction","pb","lastChild","nodeType","nodeValue","qb","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","rb","sb","tb","setProperty","substring","ub","menuitem","area","br","col","embed","hr","img","keygen","param","track","wbr","vb","wb","xb","srcElement","correspondingUseElement","parentNode","yb","zb","Ab","Bb","Cb","stateNode","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Ob","Pb","Qb","removeEventListener","Rb","l","onError","Sb","Tb","Ub","Vb","Wb","Xb","Zb","alternate","return","$b","memoizedState","dehydrated","ac","cc","child","sibling","current","bc","dc","ec","fc","gc","hc","ic","jc","kc","lc","mc","nc","Map","oc","pc","qc","rc","blockedOn","domEventName","eventSystemFlags","nativeEvent","targetContainers","sc","delete","pointerId","tc","vc","wc","lanePriority","unstable_runWithPriority","priority","hydrate","containerInfo","xc","yc","zc","Ac","Bc","unstable_scheduleCallback","unstable_NormalPriority","Cc","Dc","Ec","animationend","animationiteration","animationstart","transitionend","Fc","Gc","Hc","animation","transition","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Pc","Qc","unstable_now","Rc","Uc","pendingLanes","expiredLanes","suspendedLanes","pingedLanes","Vc","entangledLanes","entanglements","Wc","Xc","Yc","Zc","$c","eventTimes","bd","cd","dd","unstable_UserBlockingPriority","ed","fd","gd","hd","uc","jd","kd","ld","md","nd","od","keyCode","charCode","pd","qd","rd","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","returnValue","isPropagationStopped","preventDefault","stopPropagation","cancelBubble","persist","isPersistent","wd","xd","yd","sd","eventPhase","bubbles","cancelable","timeStamp","isTrusted","td","ud","detail","vd","Ad","screenX","screenY","clientX","clientY","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","zd","button","buttons","relatedTarget","fromElement","toElement","movementX","movementY","Bd","Dd","dataTransfer","Fd","Hd","animationName","elapsedTime","pseudoElement","Jd","clipboardData","Ld","Md","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Nd","Od","Alt","Control","Meta","Shift","Pd","Rd","locale","which","Td","width","height","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Vd","touches","targetTouches","changedTouches","Xd","Zd","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","$d","ae","be","documentMode","ce","de","ee","fe","ge","he","ie","le","datetime","email","month","range","tel","text","time","week","me","ne","oe","listeners","pe","qe","se","te","ue","ve","we","xe","ye","ze","oninput","Ae","detachEvent","Be","Ce","attachEvent","De","Ee","Fe","He","Ie","Je","Ke","Le","nextSibling","Me","contains","compareDocumentPosition","Ne","HTMLIFrameElement","Oe","contentEditable","Pe","Qe","Re","Se","Te","Ue","selectionStart","selectionEnd","anchorNode","defaultView","getSelection","anchorOffset","focusNode","focusOffset","Ve","We","Xe","Ye","Ze","Yb","G","$e","af","bf","cf","df","passive","Nb","w","u","ef","ff","gf","hf","J","K","Q","L","je","char","ke","jf","kf","lf","mf","autoFocus","nf","__html","pf","clearTimeout","qf","sf","previousSibling","tf","vf","wf","xf","yf","zf","Af","Bf","H","I","Cf","M","N","Df","Ef","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Ff","Gf","Hf","If","getChildContext","Jf","__reactInternalMemoizedMergedChildContext","Kf","Lf","Mf","Nf","Of","Pf","unstable_cancelCallback","Qf","unstable_shouldYield","Rf","unstable_requestPaint","Sf","Tf","unstable_getCurrentPriorityLevel","Uf","unstable_ImmediatePriority","Vf","Wf","Xf","unstable_LowPriority","Yf","unstable_IdlePriority","Zf","$f","ag","bg","cg","dg","eg","fg","gg","hg","ig","jg","kg","ReactCurrentBatchConfig","lg","mg","ng","og","pg","qg","rg","_currentValue","sg","childLanes","tg","dependencies","firstContext","lanes","ug","vg","context","observedBits","responders","wg","xg","updateQueue","firstBaseUpdate","lastBaseUpdate","pending","effects","yg","zg","eventTime","lane","payload","Ag","Bg","Cg","Dg","Eg","Fg","Component","refs","Gg","Kg","isMounted","_reactInternals","enqueueSetState","Hg","Ig","Jg","enqueueReplaceState","enqueueForceUpdate","Lg","shouldComponentUpdate","isPureReactComponent","Mg","updater","Ng","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","Og","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","Pg","Qg","ref","_owner","_stringRef","Rg","Sg","lastEffect","nextEffect","firstEffect","Tg","Ug","Vg","implementation","Wg","Xg","Yg","Zg","$g","ah","bh","dh","eh","documentElement","tagName","fh","gh","hh","ih","memoizedProps","revealOrder","jh","kh","lh","mh","nh","oh","pendingProps","ph","qh","rh","sh","th","uh","_workInProgressVersionPrimary","vh","ReactCurrentDispatcher","wh","xh","yh","zh","Ah","Bh","Ch","Dh","Eh","Fh","Gh","Hh","baseQueue","Ih","Jh","Kh","lastRenderedReducer","action","eagerReducer","eagerState","lastRenderedState","dispatch","Lh","Mh","_getVersion","_source","mutableReadLanes","Nh","U","useState","getSnapshot","subscribe","useEffect","setSnapshot","Oh","Ph","Qh","Rh","destroy","deps","Sh","Th","Uh","Vh","Wh","Xh","Yh","Zh","$h","ai","bi","ci","di","readContext","useCallback","useContext","useImperativeHandle","useLayoutEffect","useMemo","useReducer","useRef","useDebugValue","useDeferredValue","useTransition","useMutableSource","useOpaqueIdentifier","unstable_isNewReconciler","uf","ei","ReactCurrentOwner","fi","gi","hi","ii","ji","ki","li","mi","baseLanes","ni","oi","pi","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","qi","ri","pendingContext","Bi","Di","Ei","si","retryLane","ti","fallback","unstable_avoidThisFallback","ui","unstable_expectedLoadTime","vi","wi","xi","yi","zi","isBackwards","rendering","renderingStartTime","tail","tailMode","Ai","Fi","Gi","wasMultiple","multiple","onClick","onclick","createElementNS","Hi","Ii","W","Ji","Ki","Li","Mi","message","Ni","Oi","Pi","Qi","Ri","Si","componentDidCatch","Ti","componentStack","Ui","WeakSet","Vi","Wi","Xi","__reactInternalSnapshotBeforeUpdate","Yi","Zi","$i","focus","aj","bj","onCommitFiberUnmount","componentWillUnmount","cj","dj","ej","fj","gj","hj","insertBefore","_reactRootContainer","ij","jj","kj","lj","mj","nj","oj","pj","X","Y","qj","rj","sj","tj","uj","vj","wj","ck","Z","xj","yj","zj","Aj","Bj","Cj","Dj","Ej","Fj","Gj","Hj","Ij","Jj","Sc","Kj","Lj","Mj","callbackNode","expirationTimes","callbackPriority","Tc","Nj","Oj","Pj","Qj","Rj","Sj","Tj","finishedWork","finishedLanes","Uj","timeoutHandle","Wj","Xj","pingCache","Yj","Zj","va","ak","bk","dk","rangeCount","focusedElem","selectionRange","ek","extend","createRange","setStart","removeAllRanges","addRange","setEnd","scrollLeft","top","scrollTop","onCommitFiberRoot","fk","gk","ik","isReactComponent","pendingChildren","jk","mutableSourceEagerHydrationData","kk","lk","mk","nk","qk","hydrationOptions","mutableSources","_internalRoot","rk","tk","hasAttribute","sk","uk","hk","_calculateChangedBits","unstable_observedBits","unmount","querySelectorAll","form","Vj","vk","Events","wk","findFiberByHostInstance","bundleType","rendererPackageName","xk","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","__REACT_DEVTOOLS_GLOBAL_HOOK__","yk","isDisabled","supportsFiber","inject","createPortal","findDOMNode","flushSync","unmountComponentAtNode","unstable_batchedUpdates","unstable_createPortal","unstable_renderSubtreeIntoContainer","checkDCE","_react","_propTypes2","__esModule","createLink","fonts","subsets","families","font","family","weights","_toConsumableArray","rel","GoogleFontLoader","_ref","_ref$display","_useState2","sliceIterator","_slicedToArray","setLink","typeOf","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","Fragment","Lazy","Portal","Profiler","StrictMode","Suspense","isValidElementType","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","setState","forceUpdate","__self","__source","escape","_status","_result","IsSomeRendererActing","toArray","only","PureComponent","cloneElement","createContext","_currentValue2","_threadCount","Provider","Consumer","createFactory","createRef","forwardRef","isValidElement","lazy","runtime","Op","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","info","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","isGeneratorFunction","genFun","ctor","mark","awrap","async","iter","skipTempReset","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","performance","unstable_forceFrameRate","cancelAnimationFrame","requestAnimationFrame","sortIndex","startTime","expirationTime","priorityLevel","unstable_Profiling","unstable_continueExecution","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","delay","unstable_wrapCallback","stylesInDom","getIndexByIdentifier","identifier","modulesToDom","idCountMap","identifiers","css","media","sourceMap","references","addStyle","api","domAPI","update","newObj","remove","lastIdentifiers","newList","newLastIdentifiers","_index","insert","styleTarget","querySelector","contentDocument","getTarget","setAttributes","nonce","insertStyleElement","styleTagTransform","removeStyleElement","styleSheet","cssText","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","definition","prop","_defineProperty","_classCallCheck","_defineProperties","_createClass","protoProps","staticProps","_setPrototypeOf","_inherits","subClass","superClass","_typeof","_assertThisInitialized","ReferenceError","_possibleConstructorReturn","_getPrototypeOf","_objectSpread","noop","_WINDOW","_DOCUMENT","_PERFORMANCE","measure","_ref$userAgent","navigator","WINDOW","DOCUMENT","PERFORMANCE","IS_DOM","DEFAULT_REPLACEMENT_CLASS","oneToTen","oneToTwenty","DUOTONE_CLASSES","GROUP","SWAP_OPACITY","PRIMARY","SECONDARY","initial","FontAwesomeConfig","_ref2","attr","coerce","getAttribute","getAttrConfig","_config","familyPrefix","replacementClass","autoReplaceSvg","autoAddCss","autoA11y","searchPseudoElements","observeMutations","mutateApproach","keepOriginalSource","measurePerformance","showMissingIcons","config","styles","hooks","shims","functions","doScroll","readyState","asyncTimer","PENDING","SETTLED","FULFILLED","REJECTED","NOOP","isNode","asyncSetTimer","asyncQueue","asyncFlush","asyncCall","invokeCallback","subscriber","owner","settled","_state","_data","handleThenable","resolved","fulfill","publishFulfillment","publishRejection","publish","_then","_handled","notifyRejectionHandled","resolver","rejectPromise","invokeResolver","onFulfillment","onRejection","fulfilled","rejected","catch","promises","meaninglessTransform","rotate","flipX","flipY","nextUniqueId","htmlEscape","joinStyles","styleName","transformIsMeaningful","transform","transformForSvg","containerWidth","iconWidth","outer","innerTranslate","innerScale","innerRotate","ALL_SPACE","fillBlack","abstract","force","makeInlineSvgAbstract","_params$icons","icons","main","mask","title","maskId","titleId","_params$watchable","watchable","isUploadedIcon","widthClass","attrClass","role","uploadedIconWidthStyle","explicitMaskId","mainWidth","mainPath","maskWidth","maskPath","trans","maskRect","maskInnerGroupChildrenMixin","maskInnerGroup","maskOuterGroup","clipId","maskTag","maskUnits","maskContentUnits","defs","makeIconMasking","styleString","makeIconStandard","asSymbol","asIcon","subject","thisContext","bindInternal4","defineIcons","_params$skipHooks","skipHooks","addPack","build","lookup","reducer","ligatures","ligature","hasRegular","oldName","iconFromMapping","toHtml","abstractNodes","_abstractNodes$attrib","_abstractNodes$childr","joinAttributes","MissingIcon","FILL","ANIMATION_BASE","attributeType","repeatCount","dur","OPACITY_ANIMATE","asFoundIcon","vectorData","class","ensureCss","_cssInserted","headChildren","childNodes","beforeChild","insertCss","dfp","drc","fp","dPatt","customPropPatt","rPatt","apiObject","abstractCreator","container","findIconDefinition","iconLookup","_iconLookup$prefix","library","definitions","cx","cy","Library","_this","_len","_key","additions","_pullDefinitions","_normalized$key","transformString","rest","parseTransformString","iconDefinition","_params$transform","_params$symbol","_params$mask","_params$maskId","_params$title","_params$titleId","_params$classes","_params$attributes","_params$styles","maybeIconDefinition","enumerableOnly","_objectSpread2","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","camelize","styleToObject","pair","normalizeIconArgs","objectWithKey","FontAwesomeIcon","forwardedRef","iconArgs","maskArgs","className","_classes","spin","pulse","fixedWidth","inverse","border","listItem","flip","rotation","pull","swapOpacity","classList","renderedIcon","_console","extraProps","convertCurry","convert","attrs","_extraProps$style","existingStyle","Header","links","header_logo","images","alt","donation","faGiftCard","dictionary","header_donation","amount","currency","minimumFractionDigits","React","Footer","footer_faq","footer_contact","footer_phone","footer_email","footer_message","footer_register","Busy","warn","NEWTAB","OutboundLink","_Component","Derived","hasNativeReflectConstruct","_super","Proxy","Super","_this$props","eventLabel","trackerNames","eventMeta","sameTarget","normalClick","trackLink","_this$props2","handleClick","redactEmail","smallWords","toTitleCase","isLoaded","gaCalls","calls","ga","resetCalls","_isNotBrowser","_debug","_titleCase","_testMode","_alwaysSendToDefaultTracker","_redactEmail","internalGa","_window","_format","redactingEmail","_str","format","_gaCommand","command","_initialize","gaTrackingID","debug","titleCase","useExistingGa","gaOptions","addTrackers","configsOrTrackingId","trackingId","initialize","testMode","standardImplementation","gaAddress","onerror","getElementsByTagName","loadGA","alwaysSendToDefaultTracker","_len2","_key2","fieldsObject","send","fieldObject","pageview","rawPath","extraFields","hitType","page","extraLog","modalview","rawModalName","modalName","timing","category","timingCategory","timingVar","timingValue","timingLabel","nonInteraction","transport","eventCategory","eventAction","eventValue","_ref3","fatal","exDescription","exFatal","require","rawName","trackerName","requireString","execute","pluginName","actionType","_len3","_key3","outboundLink","hitCallback","safetyCallbackCalled","plugin","testModeAPI","SERVICE_URL","PANEL_CATEGORY_SELECTOR","PANEL_FEATURED_CHARITY_SELECTOR","PANEL_NATIONAL_CHARITY_SELECTOR","PANEL_CHARITY_DETAILS","PANEL_CHARITY_DISTRIBUTION","PANEL_THANK_YOU","PANEL_SHARE_SPEND","PANEL_CODE_ERROR","PANEL_CAMPAIGN_WELCOME","PANEL_CAMPAIGN_THANK_YOU","PANEL_CAMPAIGN_INSTRUCTIONS","LINKS","share_facebook","share_twitter","share_instagram","share_linkedin","IMAGES","card_code_input_banners","share_banners","DICTIONARY","guidance_header","guidance_message","guidance_question_one","guidance_question_two","guidance_question_three","selected_charities_header","selected_charities_optional","selected_charities_required","selected_charities_continue","category_navigation_header","card_code_input_message","card_code_input_code","card_code_input_email","card_code_input_continue","category_selector_header","category_selector_search_all","featured_charity_selector_select","featured_charity_selector_unselect","featured_charity_selector_disabled","national_charity_selector_header","national_charity_selector_search","national_charity_selector_select","national_charity_selector_unselect","national_charity_selector_disabled","national_charity_selector_query_label","national_charity_selector_postal_label","national_charity_selector_category_label","national_charity_selector_results_label","national_charity_selector_open_filter","national_charity_selector_close_filter","charity_distribution_header","charity_distribution_message","charity_distribution_donation_amount","charity_distribution_note","charity_distribution_stay_informed","charity_distribution_input_name","charity_distribution_input_email","charity_distribution_continue","charity_distribution_back","charity_distribution_reset","thank_you_header","thank_you_message","thank_you_input_thank_you_name","thank_you_input_thank_you_note","thank_you_input_thank_you_note_value","thank_you_continue","thank_you_skip","share_header_plural","share_header_single","share_message_plural","share_message_single","share_call_to_action","share_information_plural","share_information_single","share_tip","code_error_header","code_error_message","code_error_header_spent","code_error_message_spent","code_error_information","campaign_welcome_continue","campaign_instructions_header","campaign_instructions_message","campaign_instructions_continue","campaign_instructions_no_instructions","campaign_instructions_paper_check","campaign_instructions_particular_program","campaign_instructions_particular_person","campaign_instructions_other","campaign_instructions_address","campaign_instructions_address2","campaign_instructions_city","campaign_instructions_state","campaign_instructions_zip","campaign_instructions_notes","campaign_instructions_name","campaign_instructions_phone","campaign_instructions_email","campaign_thank_you_header","campaign_thank_you_continue","suggested_charity_selector_select","suggested_charity_selector_unselect","VALIDATION","charity_distribution_input_total_high","charity_distribution_input_total_low","charity_distribution_input_total_out_of_bounds","getRequest","request","XMLHttpRequest","onload","status","responseText","postRequest","setRequestHeader","defaults","extendedValues","isCodeValid","consts","response","valid","getFeaturedCharities","categoryID","featuredCharities","getNationalCharities","categoryColumnName","columnName","postalCode","continuationToken","nationalCharities","setDonation","cardCode","optIn","notifyEmail","selectedCharities","thankYouName","thankYouNote","instructions","charities","spendDetails","charity","ein","cents","charitySpendDetails","validateName","validateCode","validateEmail","validateThankYouName","validateThankYouNote","CardCodeInput","banner","codeInput","ReactGA","busy","backgroundImage","codeValid","placeholder","onChange","previousValue","onCodeChanged","onKeyPress","onSubmit","validation","emailValid","onEmailChanged","Card","SuggestedCharity","selectedEINs","fixedPosition","onViewCharity","markup","additionalCharityCount","onSelectCharity","onRemoveCharity","CampaignWelcome","utilities","onCodeError","onContinue","image","campaignDetail","suggestedCharity","suggestedCharityMarkup","welcomeMarkup","renderAside","CampaignThankYou","onBack","faArrowCircleLeft","renderNavigation","thankYouMarkup","CampaignInstructions","invalidList","nameValid","phoneValid","onInstructionsChanged","phone","addressValid","cityValid","stateValid","zipValid","address2","city","zip","notes","distributionType","renderContactInputs","renderAddressInputs","renderNotesInputs","SelectedCharities","collapse","faTimesCircle","onToggleCollapse","faChevronUp","faChevronDown","CategorySelector","categories","onSelectCategory","thumbnail","onSearchAll","faSearch","collapseSelectedCharities","onToggleCollapseSelectedCharities","renderCategories","CategoryNavigation","selectedCategory","FeaturedCharitySelector","hoverPosition","getCharities","prevProps","onMouseEnter","boundingClientRect","getBoundingClientRect","onMouseLeave","renderCallout","quote","quotee","renderBusy","renderCharities","NationalCharitySelector","onScroll","searchCount","searched","offsetHeight","innerHeight","getMoreCharities","totalCount","street","partitionKey","renderFeaturedCharity","renderNationalCharity","renderSearch","CharityDetails","tempCharity","getCharity","selectedCharityID","CharityDistribution","difference","totalValid","inBoundsValid","onReset","total","renderTotalError","renderBoundError","renderReset","onCharityChanged","faMinus","faPlus","onOptInChanged","faCheckSquare","faSquare","onNameChanged","renderOptIn","extendStatics","ThankYou","thankYouNameValid","onThankYouNameChanged","thankYouNoteValid","onThankYouNoteChanged","onSkip","renderNoteInputs","__extends","__","AssertionError","assert","objectToGetParams","_a","__assign","__awaiter","_arguments","__generator","trys","ops","verb","op","__rest","isPromise","getBoxPositionOnWindowCenter","outerWidth","screenLeft","outerHeight","screenTop","getBoxPositionOnScreenCenter","screen","windowOpen","onClose","configRest","toolbar","directories","menubar","scrollbars","resizable","centerscreen","chrome","shareDialog","interval_1","setInterval","closed","clearInterval","ShareButton","openShareDialog","onShareWindowClose","_b","windowHeight","_c","windowPosition","windowWidth","beforeOnClick","networkLink","openShareDialogOnClick","returnVal","disabledStyle","networkName","resetButtonStyle","newClassName","newStyle","backgroundColor","padding","cursor","optsMap","CreatedButton","passedProps","hashtag","via","hashtags","related","summary","mini","ShareSpend","fbq","content_name","onEmptyCode","confirmationMarkup","CodeError","dateSpent","_inheritsLoose","isAbsolute","spliceOne","addLeadingSlash","stripLeadingSlash","stripBasename","hasBasename","stripTrailingSlash","createPath","currentLocation","hashIndex","searchIndex","parsePath","decodeURI","URIError","hasTrailingSlash","toParts","fromParts","isToAbs","isFromAbs","mustEndAbs","up","createTransitionManager","prompt","setPrompt","nextPrompt","confirmTransitionTo","getUserConfirmation","appendListener","isActive","notifyListeners","canUseDOM","getConfirmation","confirm","HashChangeEvent$1","HashPathCoders","hashbang","encodePath","decodePath","noslash","slash","stripHash","getHashPath","replaceHashPath","createHashHistory","globalHistory","history","_props","_props$getUserConfirm","_props$hashType","hashType","basename","_HashPathCoders$hashT","getDOMLocation","transitionManager","nextState","forceNextPop","ignorePath","handleHashChange","encodedPath","prevLocation","fromLocation","toLocation","allPaths","go","revertPop","handlePop","initialLocation","listenerCount","checkDOMListeners","isBlocked","createHref","baseTag","pushHashPath","prevIndex","nextPaths","goBack","goForward","block","unblock","listen","unlisten","MAX_SIGNED_31_BIT_INT","commonjsGlobal","createEventEmitter","handlers","on","off","newValue","changedBits","calculateChangedBits","_Provider$childContex","_Consumer$contextType","contextProp","emitter","_proto","nextProps","oldValue","_Component2","_this2","onUpdate","_proto2","createNamedContext","historyContext","Router","_React$Component","_isMounted","_pendingLocation","staticContext","computeRootMatch","isExact","cache$1","cacheCount$1","matchPath","_options","_options$exact","_options$strict","_options$sensitive","_compilePath","cacheKey","pathCache","compilePath$1","Route","context$1","computedMatch","isEmptyChildren","Switch","App","account","originUrl","inBounds","accountID","scripts","settings","enabled","urlSearchParams","validCode","validEmail","dollars","remainder","resetScroll","openCodeError","viewCharity","selectCharity","removeCharity","selectCategory","setInitialDistribution","openSearch","charityID","validName","showAdditionalInstructions","validThankYouName","validThankYouNote","donationResponse","spendResponse","spendDetail","getMonth","getDate","getFullYear","charitySpentDetail","lang","showHeader","renderPanel","showFooter","wrappedComponentRef","remainingProps","WrappedComponent","HashRouter","resolveToLocation","normalizeToLocation","forwardRefShim","LinkAnchor","innerRef","navigate","_onClick","ex","isModifiedEvent","Link","_ref2$component","isDuplicateNavigation","forwardRefShim$1","forwardRef$1","_ref$ariaCurrent","ariaCurrent","_ref$activeClassName","activeClassName","activeStyle","classNameProp","isActiveProp","locationProp","styleProp","escapedPath","classnames","joinClassnames","loadTisBest","tisBestSpendApp","getElementById","ReactDOM"],"sourceRoot":""}