{"version":3,"sources":["components/Title.js","components/FormField.js","components/Checkbox.js","components/Header.js","auth/storage.js","auth/amplify.js","auth/const.js","components/Button.js","auth/index.js","components/LinkButton.js","auth/ActivateForm.js","auth/CompleteNewPasswordForm.js","auth/ConfirmForgotPasswordForm.js","auth/ResetPassForm.js","auth/SignupForm.js","auth/TotpForm.js","auth/LoginForm.js","index.js","components/FlashMessage.js","components/Card.js","components/Spinner.js","components/TextField.js","components/StatusPageComponentStatus.js","components/Footer.js","util/sentry.js","const.js","auth/location_data.js","components/withFlashMessage.js","components/CardBody.js"],"names":["Title","styled","h2","isDanger","TitleComponent","this","props","children","rest","className","React","Component","FormField","id","label","htmlFor","Checkbox","type","viewBox","fill","d","HeaderPicture","picture","Header","href","target","rel","alt","srcset","media","src","storage","sessionStorage","_","storageObject","key","value","Promise","resolve","USER_MFA_DEFAULT_TYPE","Amplify","configure","Auth","region","userPoolId","process","userPoolWebClientId","signUp","username","password","clientMetadata","a","toLowerCase","user","confirmSignUp","code","signIn","lowerCaseUsername","confirmMfaSignIn","confirmSignIn","resendConfirmationCode","resendSignUp","signOut","global","forgotPassword","completeNewPassword","forgotPasswordSubmit","isUserMfaEnabled","getPreferredMFA","data","generateTotpSetupSecret","setupTOTP","verifyTotpToken","token","setPreferredMFA","disableMfa","StyledButton","button","disabled","StyledA","Button","classNames","AButton","comp","color","LinkButton","Page","div","StyledTextField","TextField","LinkButtonMargin","ActivateForm","onChange","ev","setState","submit","preventDefault","state","submitting","getLocationData","location_info","NC_COUNTRY_CODE","country","NC_REGION_CODE","region_code","NC_ZIP_CODE","postal_code","window","history","replaceState","message","danger","done","console","error","resendCode","goToLogin","document","location","clearFlashMessage","undefined","handleUrl","searchParams","URLSearchParams","search","has","get","Spinner","Card","title","actionButtons","onClick","FlashMessage","onClose","onSubmit","actionIcons","hint","Footer","CompleteNewPasswordForm","password2","log","helperText","autoComplete","ConfirmForgotPasswordForm","email","ResetPassForm","confirm","pathname","StyledSuggestionButton","gmailVariants","SignupForm","termsAcceptedChanged","termsAccepted","checked","onBlur","inputValue","split","provider","includes","suggestion","activate","useSuggestion","Fragment","SubmitTotpButton","isTotpCodeValid","test","TotpForm","autoSubmitTotpCode","totpCode","verifiedUser","captureException","challengeName","pushState","URL","form","actionStacked","hidden","withFlashMessage","LoginButton","FullWidthButton","ForgotPasswordButton","LoginForm","handlePopState","trim","isMfaRequired","signup","forgotPass","visible","_showFormTimeout","setTimeout","addEventListener","startsWith","clearTimeout","removeEventListener","AppMount","ProfileComponent","then","mdl","default","AppMountAuth","withAuthenticator","ReactDOM","render","getElementById","FlashBody","FlashClose","StyledCard","StyledActionButton","stacked","StyledCardBody","CardBody","hasActions","Primary","Subtitle","h3","subtitle","footer","documentationLink","xmlns","Container","cx","cy","r","stroke","strokeWidth","strokeMiterlimit","StyledLabel","isReadOnly","root","createRef","textfield","MDCTextField","current","foundation","setDisabled","destroy","helperId","fullWidth","slotProps","inputProps","debug","warn","isTextFieldReadOnly","input","readOnly","ref","BASE_URL","COMPONENTS_URL","StyledDiv","statusSvgPath","operational","statusTransform","unknown","partial_outage","major_outage","StatusPageComponentStatus","fetchComponents","components","fetch","response","json","cloudStatus","find","component","currentCloudStatus","status","FooterStyle","setSentryUserContext","authData","subscriptionInfo","Raven","setUserContext","action","err","extra","url","headers","bodyUsed","text","tags","captureMessage","config","release","environment","install","currencyPerCountry","protocol","host","GB","CA","BE","BG","CZ","DK","DE","EE","IE","EL","GR","ES","FR","HR","IT","CY","LV","LT","LU","HU","MT","NL","AT","PL","PT","RO","SI","SK","FI","SE","setFlashMessage","flashMessage","flashIsDanger","Body","style"],"mappings":"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","file":"static/js/main.831e36ea.chunk.js","sourcesContent":["import React from \"react\";\nimport styled from \"styled-components\";\n\nconst Title = styled.h2`\n color: ${({ isDanger }) => isDanger && \"var(--nca-error-color)\"};\n margin: 0;\n width: 100%;\n display: flex;\n justify-content: space-between;\n`;\n\nexport default class TitleComponent extends React.Component {\n render() {\n const { children, ...rest } = this.props;\n return (\n <Title className=\"mdc-typography--headline6\" {...rest}>\n {children}\n </Title>\n );\n }\n}\n","// https://material.io/develop/web/components/input-controls/form-fields/\n\nimport React from \"react\";\nimport \"@material/form-field/mdc-form-field.scss\";\nimport \"@material/radio/mdc-radio.scss\";\n\nexport default class FormField extends React.Component {\n render() {\n const { children, id, label } = this.props;\n return (\n <div className=\"mdc-form-field\">\n {children}\n <label htmlFor={id}>{label}</label>\n </div>\n );\n }\n}\n","// https://material.io/develop/web/components/input-controls/checkboxes/\n\nimport React from \"react\";\nimport \"@material/checkbox/mdc-checkbox.scss\";\n\nimport FormField from \"./FormField\";\n\nexport default class Checkbox extends React.Component {\n render() {\n const { id, label, ...rest } = this.props;\n return (\n <FormField id={id} label={label}>\n <div className=\"mdc-checkbox\">\n <input\n type=\"checkbox\"\n className=\"mdc-checkbox__native-control\"\n id={id}\n {...rest}\n />\n <div className=\"mdc-checkbox__background\">\n <svg className=\"mdc-checkbox__checkmark\" viewBox=\"0 0 24 24\">\n <path\n className=\"mdc-checkbox__checkmark-path\"\n fill=\"none\"\n d=\"M1.73,12.91 8.1,19.28 22.79,4.59\"\n />\n </svg>\n <div className=\"mdc-checkbox__mixedmark\" />\n </div>\n <div className=\"mdc-checkbox__ripple\"></div>\n </div>\n </FormField>\n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst HeaderPicture = styled.picture`\n max-width: calc(100% - 40px);\n`;\n\nconst Header = () => (\n <a href=\"https://www.nabucasa.com\" target=\"_blank\" rel=\"noopener noreferrer\">\n <HeaderPicture className=\"header\" alt=\"Nabu Casa logo\">\n <source\n srcset=\"/static/images/logo/nabucasa-light-text.png\"\n media=\"(prefers-color-scheme: dark)\"\n />\n <img\n src=\"/static/images/logo/nabucasa-dark-text.png\"\n alt=\"Nabu Casa logo\"\n />\n </HeaderPicture>\n </a>\n);\n\nexport default Header;\n","import storeSession from \"./store_session\";\n\nlet storage;\n\ntry {\n storage = storeSession ? localStorage : sessionStorage;\n} catch (_) {\n let storageObject = {};\n storage = class InMemoryStorage {\n // set item with the key\n static setItem(key, value) {\n storageObject[key] = value;\n }\n // get item with the key\n static getItem(key) {\n return storageObject[key];\n }\n // remove item with the key\n static removeItem(key) {\n delete storageObject[key];\n }\n // clear out the storage\n static clear() {\n storageObject = {};\n }\n // If the storage operations are async(i.e AsyncStorage)\n // Then you need to sync those items into the memory in this method\n static sync() {\n return Promise.resolve();\n }\n };\n}\n\nexport default storage;\n","import Amplify, { Auth } from \"aws-amplify\";\nimport storage from \"./storage\";\nimport { clientId, userPoolId } from \"./const\";\n\nconst USER_MFA_DEFAULT_TYPE = \"SOFTWARE_TOKEN_MFA\";\n\nAmplify.configure({\n Auth: {\n // REQUIRED only for Federated Authentication - Amazon Cognito Identity Pool ID\n // identityPoolId: \"XX-XXXX-X:XXXXXXXX-XXXX-1234-abcd-1234567890ab\",\n\n // REQUIRED - Amazon Cognito Region\n region: \"us-east-1\",\n\n // OPTIONAL - Amazon Cognito Federated Identity Pool Region\n // Required only if it's different from Amazon Cognito Region\n // identityPoolRegion: \"XX-XXXX-X\",\n\n // OPTIONAL - Amazon Cognito User Pool ID\n userPoolId,\n\n // OPTIONAL - Amazon Cognito Web Client ID (26-char alphanumeric string)\n userPoolWebClientId: clientId,\n\n // Prevent amplify from storing the tokens to localStorage\n storage,\n },\n});\n\nexport const signUp = async (username, password, clientMetadata) => {\n const { user } = await Auth.signUp({\n username: username.toLowerCase(),\n password,\n clientMetadata,\n });\n return user;\n};\n\nexport const confirmSignUp = (username, code, clientMetadata) =>\n Auth.confirmSignUp(username, code, { clientMetadata });\n\nexport const signIn = async (username, password) => {\n try {\n return await Auth.signIn(username, password);\n } catch (e) {\n const lowerCaseUsername = username.toLowerCase();\n if (e.code === \"UserNotFoundException\" && username !== lowerCaseUsername) {\n return Auth.signIn(lowerCaseUsername, password);\n }\n throw e;\n }\n};\n\nexport const confirmMfaSignIn = async (user, code) =>\n Auth.confirmSignIn(user, code, USER_MFA_DEFAULT_TYPE);\n\nexport const resendConfirmationCode = (username) => Auth.resendSignUp(username);\n\nexport const signOut = async (global) => Auth.signOut({ global });\n\nexport const forgotPassword = async (username) => {\n try {\n return await Auth.forgotPassword(username);\n } catch (e) {\n const lowerCaseUsername = username.toLowerCase();\n if (e.code === \"UserNotFoundException\" && username !== lowerCaseUsername) {\n return Auth.forgotPassword(lowerCaseUsername);\n }\n throw e;\n }\n};\n\nexport const completeNewPassword = (user, password) =>\n Auth.completeNewPassword(user, password);\n\nexport const forgotPasswordSubmit = async (username, code, password) => {\n try {\n return await Auth.forgotPasswordSubmit(username, code, password);\n } catch (e) {\n const lowerCaseUsername = username.toLowerCase();\n if (e.code === \"UserNotFoundException\" && username !== lowerCaseUsername) {\n return Auth.forgotPasswordSubmit(lowerCaseUsername, code, password);\n }\n throw e;\n }\n};\n\nexport const isUserMfaEnabled = async (user) => {\n const data = await Auth.getPreferredMFA(user);\n return data === USER_MFA_DEFAULT_TYPE;\n};\n\nexport const generateTotpSetupSecret = async (user) => Auth.setupTOTP(user);\n\nexport const verifyTotpToken = async (user, token) => {\n try {\n await Auth.verifyTotpToken(user, token);\n await Auth.setPreferredMFA(user, USER_MFA_DEFAULT_TYPE);\n return true;\n } catch (e) {\n if (e.code === \"CodeMismatchException\") {\n return false;\n }\n throw e;\n }\n};\n\nexport const disableMfa = async (user) => Auth.setPreferredMFA(user, \"NOMFA\");\n","export const clientId = process.env.REACT_APP_COGNITO_CLIENT_ID;\nexport const domain = process.env.REACT_APP_COGNITO_DOMAIN;\nexport const userPoolId = process.env.REACT_APP_COGNITO_POOL_ID;\n","// https://material.io/develop/web/components/buttons/\n\nimport React from \"react\";\nimport \"@material/button/mdc-button.scss\";\nimport classNames from \"classnames\";\nimport styled from \"styled-components\";\n\nconst StyledButton = styled.button`\n --mdc-theme-primary: ${({ isDanger, disabled }) =>\n isDanger && !disabled && `var(--nca-error-color) !important`};\n`;\n\nconst StyledA = styled.a`\n --mdc-theme-primary: ${({ isDanger, disabled }) =>\n isDanger && !disabled && `var(--nca-error-color) !important`};\n`;\n\nexport default class Button extends React.Component {\n render() {\n const { children, className, label, ...rest } = this.props;\n return (\n <StyledButton className={classNames(className, \"mdc-button\")} {...rest}>\n <span className=\"mdc-button__ripple\"></span>\n <span className=\"mdc-button__touch\"></span>\n <span className=\"mdc-button__focus-ring\"></span>\n <span className=\"mdc-button__label\">{label}</span>\n {children}\n </StyledButton>\n );\n }\n}\n\nexport class AButton extends React.Component {\n render() {\n const { children, className, label, ...rest } = this.props;\n return (\n <StyledA className={classNames(className, \"mdc-button\")} {...rest}>\n <span className=\"mdc-button__ripple\"></span>\n <span className=\"mdc-button__touch\"></span>\n <span className=\"mdc-button__focus-ring\"></span>\n <span className=\"mdc-button__label\">{label}</span>\n {children}\n </StyledA>\n );\n }\n}\n","import React from \"react\";\nimport { withAuthenticator } from \"aws-amplify-react\";\nimport LoginForm from \"./LoginForm\";\nimport \"./amplify\";\n\nexport const withAuth = (comp) =>\n withAuthenticator(comp, false, [<LoginForm />]);\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst StyledButton = styled.button`\n border: none;\n margin: 0;\n padding: 0;\n width: auto;\n overflow: visible;\n text-decoration: underline;\n background: transparent;\n\n color: inherit;\n font: inherit;\n\n line-height: normal;\n\n cursor: pointer;\n\n color: ${({ color }) => color || \"var(--nca-accent-color)\"}\n\n -webkit-font-smoothing: inherit;\n -moz-osx-font-smoothing: inherit;\n\n -webkit-appearance: none;\n\n &[disabled] {\n opacity: 0.8;\n }\n\n &::-moz-focus-inner {\n border: 0;\n padding: 0;\n }\n`;\n\nexport default class LinkButton extends React.Component {\n render() {\n const { children, ...rest } = this.props;\n return <StyledButton {...rest}>{children}</StyledButton>;\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport Card from \"../components/Card\";\nimport Button from \"../components/Button\";\nimport Header from \"../components/Header\";\nimport Spinner from \"../components/Spinner\";\nimport TextField from \"../components/TextField\";\nimport Footer from \"../components/Footer\";\nimport FlashMessage from \"../components/FlashMessage\";\nimport { confirmSignUp, signIn, resendConfirmationCode } from \"./amplify\";\nimport { getLocationData } from \"./location_data\";\nimport LinkButton from \"../components/LinkButton\";\n\nconst Page = styled.div`\n max-width: 450px;\n margin: 30px auto 16px;\n`;\n\nconst StyledTextField = styled(TextField)`\n width: 100%;\n`;\n\nconst LinkButtonMargin = styled(LinkButton)`\n margin: 16px;\n`;\n\nclass ActivateForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n submitting: false,\n message: undefined,\n danger: false,\n done: false,\n code: \"\",\n };\n }\n\n componentDidMount() {\n this.handleUrl();\n }\n\n handleUrl() {\n const searchParams = new URLSearchParams(document.location.search);\n\n if (searchParams.has(\"code\")) {\n this.setState({ code: searchParams.get(\"code\") }, this.submit);\n }\n }\n\n onChange = (ev) => {\n this.setState({\n [ev.target.id]: ev.target.value,\n });\n };\n\n submit = async (ev) => {\n if (ev) {\n ev.preventDefault();\n }\n const { username, password } = this.props;\n const { code } = this.state;\n\n if (!code || !username) {\n return;\n }\n\n this.setState({\n submitting: true,\n });\n\n const location_info = await getLocationData();\n\n try {\n await confirmSignUp(username, code, {\n NC_COUNTRY_CODE: location_info.country,\n NC_REGION_CODE: location_info.region_code,\n NC_ZIP_CODE: location_info.postal_code,\n });\n if (username && password) {\n await signIn(username, password);\n window.history.replaceState({}, \"\", \"/\");\n } else {\n this.setState({\n message: \"Your email was successfully verified!\",\n danger: false,\n done: true,\n submitting: false,\n });\n }\n } catch (e) {\n this.setState({\n submitting: false,\n danger: true,\n message: e.message,\n });\n console.error(e);\n }\n };\n\n resendCode = async (ev) => {\n ev.preventDefault();\n this.setState({\n submitting: true,\n });\n try {\n await resendConfirmationCode(this.props.username);\n this.setState({ message: \"Email sent\", danger: false });\n } catch (e) {\n this.setState({\n message: e.message,\n danger: true,\n });\n } finally {\n this.setState({\n submitting: false,\n });\n }\n };\n\n goToLogin = () => {\n document.location = \"/\";\n };\n\n clearFlashMessage = () => this.setState({ message: undefined });\n\n render() {\n const { code } = this.state;\n\n if (!this.props.username) {\n return null;\n }\n\n if (this.state.submitting)\n return (\n <Page>\n <Header />\n <Spinner />\n </Page>\n );\n\n if (this.state.done)\n return (\n <Page>\n <Header />\n <Card\n title=\"Email confirmed\"\n actionButtons={<Button onClick={this.goToLogin}>Login</Button>}\n >\n <p>\n Your email address was successfully confirmed. You can now login.\n </p>\n </Card>\n </Page>\n );\n\n return (\n <Page>\n <Header />\n {this.state.message && (\n <FlashMessage\n message={this.state.message}\n isDanger={this.state.danger}\n onClose={this.clearFlashMessage}\n />\n )}\n <form onSubmit={this.submit}>\n <Card\n title=\"Confirm email\"\n actionIcons={<Button>Confirm email</Button>}\n >\n <p>\n We sent an email to {this.props.username} with an activation code,\n please enter that code below to verify your email address.\n </p>\n <StyledTextField\n className=\"code-input\"\n id=\"code\"\n hint=\"Code\"\n onChange={this.onChange}\n value={code}\n />\n </Card>\n </form>\n <LinkButtonMargin onClick={this.resendCode}>\n Resend confirmation email\n </LinkButtonMargin>\n <Footer />\n </Page>\n );\n }\n}\n\nexport default ActivateForm;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport Card from \"../components/Card\";\nimport Button from \"../components/Button\";\nimport Header from \"../components/Header\";\nimport Spinner from \"../components/Spinner\";\nimport TextField from \"../components/TextField\";\nimport FlashMessage from \"../components/FlashMessage\";\nimport { completeNewPassword } from \"./amplify\";\n\nconst Page = styled.div`\n max-width: 450px;\n margin: 30px auto 16px;\n`;\n\nconst StyledTextField = styled(TextField)`\n width: 100%;\n`;\n\nclass CompleteNewPasswordForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n submitting: false,\n error: undefined,\n user: props.user,\n password: \"\",\n password2: \"\",\n };\n }\n\n onChange = (ev) => {\n this.setState({\n [ev.target.id]: ev.target.value,\n });\n };\n\n submit = async (ev) => {\n ev.preventDefault();\n\n const { user, password, password2 } = this.state;\n\n if (!user || !password) {\n return;\n }\n\n if (password !== password2) {\n this.setState({\n error: \"Passwords don't match\",\n });\n return;\n }\n\n this.setState({\n submitting: true,\n error: undefined,\n });\n\n try {\n await completeNewPassword(user, password);\n document.location = \"/\";\n } catch (e) {\n console.log(e);\n this.setState({\n error: e.message,\n submitting: false,\n });\n }\n };\n\n clearFlashMessage = () => this.setState({ message: undefined });\n\n render() {\n const { password, password2 } = this.state;\n\n if (this.state.submitting)\n return (\n <Page>\n <Header />\n <Spinner />\n </Page>\n );\n\n return (\n <Page>\n <Header />\n {this.state.error && (\n <FlashMessage\n message={this.state.error}\n isDanger={true}\n onClose={this.clearFlashMessage}\n />\n )}\n <form onSubmit={this.submit}>\n <Card\n title=\"Change your password\n \"\n actionIcons={<Button>Change my password</Button>}\n >\n <p>Enter your new password below.</p>\n <StyledTextField\n className=\"password-input\"\n type=\"password\"\n onChange={this.onChange}\n id=\"password\"\n hint=\"Password\"\n helperText=\"Minimum of 8 characters\"\n value={password}\n autoComplete=\"new-password\"\n />\n <StyledTextField\n className=\"password-input\"\n type=\"password\"\n onChange={this.onChange}\n id=\"password2\"\n hint=\"Repeat password\"\n value={password2}\n autoComplete=\"new-password\"\n />\n </Card>\n </form>\n </Page>\n );\n }\n}\n\nexport default CompleteNewPasswordForm;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport Card from \"../components/Card\";\nimport Button from \"../components/Button\";\nimport Header from \"../components/Header\";\nimport Spinner from \"../components/Spinner\";\nimport TextField from \"../components/TextField\";\nimport FlashMessage from \"../components/FlashMessage\";\nimport { forgotPasswordSubmit, signIn } from \"./amplify\";\n\nconst Page = styled.div`\n max-width: 450px;\n margin: 30px auto 16px;\n`;\n\nconst StyledTextField = styled(TextField)`\n width: 100%;\n`;\n\nclass ConfirmForgotPasswordForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n submitting: false,\n error: undefined,\n code: \"\",\n };\n }\n\n componentDidMount() {\n this.handleUrl();\n }\n\n handleUrl() {\n const searchParams = new URLSearchParams(document.location.search);\n\n if (searchParams.has(\"code\")) {\n this.setState({ code: searchParams.get(\"code\") });\n }\n }\n\n onChange = (ev) => {\n this.setState({\n [ev.target.id]: ev.target.value,\n });\n };\n\n submit = async (ev) => {\n ev.preventDefault();\n const { email } = this.props;\n const { code, password, password2 } = this.state;\n\n if (!email || !password || !code) {\n return;\n }\n\n if (password !== password2) {\n this.setState({\n error: \"Passwords don't match\",\n });\n return;\n }\n\n this.setState({\n submitting: true,\n });\n\n try {\n await forgotPasswordSubmit(email, code, password);\n await signIn(email, password);\n window.history.replaceState({}, \"\", \"/\");\n } catch (e) {\n this.setState({\n submitting: false,\n error: e.message,\n });\n console.error(e);\n }\n };\n\n clearFlashMessage = () => this.setState({ message: undefined });\n\n render() {\n const { code, password, password2 } = this.state;\n\n if (!this.props.email) {\n return null;\n }\n\n if (this.state.submitting)\n return (\n <Page>\n <Header />\n <Spinner />\n </Page>\n );\n\n return (\n <Page>\n <Header />\n {this.state.error && (\n <FlashMessage\n message={this.state.error}\n isDanger={true}\n onClose={this.clearFlashMessage}\n />\n )}\n <form onSubmit={this.submit}>\n <Card\n title=\"Confirm email\"\n actionIcons={<Button>Change password</Button>}\n >\n <p>\n We sent an email to {this.props.email} with an activation code,\n please enter that code below to verify your email address.\n </p>\n <StyledTextField\n className=\"code-input\"\n id=\"code\"\n hint=\"Code\"\n onChange={this.onChange}\n value={code}\n />\n <StyledTextField\n className=\"password-input\"\n type=\"password\"\n onChange={this.onChange}\n id=\"password\"\n hint=\"New password\"\n helperText=\"Minimum of 8 characters\"\n value={password}\n autoComplete=\"new-password\"\n />\n <StyledTextField\n className=\"password-input\"\n type=\"password\"\n onChange={this.onChange}\n id=\"password2\"\n hint=\"Repeat new password\"\n value={password2}\n autoComplete=\"new-password\"\n />\n </Card>\n </form>\n </Page>\n );\n }\n}\n\nexport default ConfirmForgotPasswordForm;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport Card from \"../components/Card\";\nimport Button from \"../components/Button\";\nimport Header from \"../components/Header\";\nimport Spinner from \"../components/Spinner\";\nimport TextField from \"../components/TextField\";\nimport Footer from \"../components/Footer\";\nimport FlashMessage from \"../components/FlashMessage\";\nimport { forgotPassword } from \"./amplify\";\nimport ConfirmForgotPasswordForm from \"./ConfirmForgotPasswordForm\";\n\nconst Page = styled.div`\n max-width: 450px;\n margin: 30px auto 16px;\n`;\n\nconst StyledTextField = styled(TextField)`\n width: 100%;\n`;\n\nclass ResetPassForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n submitting: false,\n error: undefined,\n confirm: false,\n email: props.email || \"\",\n password: \"\",\n password2: \"\",\n };\n }\n\n componentDidMount() {\n this.handleUrl();\n }\n\n handleUrl() {\n const searchParams = new URLSearchParams(document.location.search);\n\n if (searchParams.has(\"email\")) {\n this.setState({ email: searchParams.get(\"email\") });\n }\n if (document.location.pathname === \"/forgot-password/confirm\") {\n this.setState({ confirm: true });\n }\n }\n\n onChange = (ev) => {\n this.setState({\n [ev.target.id]: ev.target.value,\n });\n };\n\n submit = async (ev) => {\n ev.preventDefault();\n const { email } = this.state;\n\n if (!email) {\n return;\n }\n\n this.setState({\n submitting: true,\n });\n\n try {\n await forgotPassword(email);\n this.setState({\n submitting: false,\n confirm: true,\n });\n } catch (e) {\n this.setState({\n submitting: false,\n error:\n e.code === \"UserNotFoundException\" ? \"Username not found\" : e.message,\n });\n console.error(e);\n }\n };\n\n clearFlashMessage = () => this.setState({ message: undefined });\n\n render() {\n const { email, confirm } = this.state;\n\n if (confirm && email) {\n return <ConfirmForgotPasswordForm email={email} />;\n }\n\n if (this.state.submitting)\n return (\n <Page>\n <Header />\n <Spinner />\n </Page>\n );\n\n return (\n <Page>\n <Header />\n {this.state.error && (\n <FlashMessage\n message={this.state.error}\n isDanger={true}\n onClose={this.clearFlashMessage}\n />\n )}\n <form onSubmit={this.submit}>\n <Card\n title=\"Forgot your password?\n \"\n actionIcons={<Button>Reset my password</Button>}\n >\n <p>\n Enter your email below and we will send a message to reset your\n password.\n </p>\n <StyledTextField\n className=\"code-input\"\n id=\"email\"\n hint=\"Email\"\n onChange={this.onChange}\n value={email}\n />\n </Card>\n </form>\n <Footer />\n </Page>\n );\n }\n}\n\nexport default ResetPassForm;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport Button from \"../components/Button\";\nimport Card from \"../components/Card\";\nimport FlashMessage from \"../components/FlashMessage\";\nimport Header from \"../components/Header\";\nimport Checkbox from \"../components/Checkbox\";\nimport Spinner from \"../components/Spinner\";\nimport Footer from \"../components/Footer\";\nimport TextField from \"../components/TextField\";\nimport ActivateForm from \"./ActivateForm\";\nimport { signUp } from \"./amplify\";\nimport { getLocationData } from \"./location_data\";\n\nconst Page = styled.div`\n max-width: 450px;\n margin: 30px auto 16px;\n`;\n\nconst StyledTextField = styled(TextField)`\n width: 100%;\n`;\nconst StyledSuggestionButton = styled(Button)`\n background: none;\n color: var(--nca-error-color) !important;\n border: none;\n padding: 0;\n font: inherit;\n text-align: left;\n cursor: pointer;\n text-transform: initial;\n`;\n\nconst gmailVariants = [\n \"gmai.com\",\n \"gmail.con\",\n \"gmail.vom\",\n \"gmail.vomc\",\n \"gmailcom\",\n \"gmil.com\",\n];\n\nclass SignupForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n activate: false,\n submitting: false,\n error: undefined,\n suggestion: undefined,\n termsAccepted: false,\n username: \"\",\n password: \"\",\n password2: \"\",\n };\n }\n\n componentDidMount() {\n this.handleUrl();\n }\n\n handleUrl() {\n const searchParams = new URLSearchParams(document.location.search);\n\n if (searchParams.has(\"email\")) {\n this.setState({ username: searchParams.get(\"email\") });\n }\n if (document.location.pathname === \"/signup/confirm\") {\n this.setState({ activate: true });\n }\n }\n\n onChange = (ev) => {\n this.setState({\n [ev.target.id]: ev.target.value,\n });\n };\n\n termsAcceptedChanged = async (ev) => {\n this.setState({ termsAccepted: ev.target.checked });\n };\n\n onBlur = (ev) => {\n if (ev.target.id === \"username\") {\n const inputValue = ev.target.value;\n const [username, provider] = inputValue.split(\"@\");\n if (gmailVariants.includes(provider)) {\n this.setState({ suggestion: `${username.toLowerCase()}@gmail.com` });\n } else if (inputValue !== inputValue.toLowerCase()) {\n this.setState({ suggestion: inputValue.toLowerCase() });\n } else if (this.state.suggestion) {\n this.setState({ suggestion: undefined });\n }\n }\n };\n\n submit = async (ev) => {\n ev.preventDefault();\n\n const { username, password, password2, termsAccepted } = this.state;\n\n if (!username || !password) {\n return;\n }\n\n if (password !== password2) {\n this.setState({\n error: \"Passwords don't match\",\n });\n return;\n }\n\n if (!termsAccepted) {\n this.setState({\n error: \"You need to accept the terms before creating an account.\",\n });\n return;\n }\n\n this.setState({\n submitting: true,\n });\n\n const location_info = await getLocationData();\n\n try {\n const user = await signUp(username, password, {\n NC_COUNTRY_CODE: location_info.country,\n NC_REGION_CODE: location_info.region_code,\n NC_ZIP_CODE: location_info.postal_code,\n });\n this.setState({\n user,\n submitting: false,\n activate: true,\n });\n } catch (e) {\n let error = e.message;\n if (e.code === \"UserLambdaValidationException\") {\n error = error.split(\"||\")[1] || error;\n }\n this.setState({\n submitting: false,\n error,\n });\n console.error(e);\n }\n };\n\n useSuggestion = () =>\n this.setState({ username: this.state.suggestion, suggestion: undefined });\n\n clearFlashMessage = () => this.setState({ error: undefined });\n\n render() {\n const { username, password, password2 } = this.state;\n\n if (this.state.submitting)\n return (\n <Page>\n <Header />\n <Spinner />\n </Page>\n );\n\n if (this.state.activate && username) {\n return (\n <ActivateForm username={username} password={this.state.password} />\n );\n }\n\n return (\n <Page>\n <Header />\n {this.state.error && (\n <FlashMessage\n message={this.state.error}\n isDanger={true}\n onClose={this.clearFlashMessage}\n />\n )}\n <form onSubmit={this.submit}>\n <Card\n title=\"Create an account\"\n actionIcons={<Button>Create account</Button>}\n >\n <StyledTextField\n className=\"username-input\"\n type=\"email\"\n id=\"username\"\n hint=\"Email\"\n onChange={this.onChange}\n onBlur={this.onBlur}\n value={username}\n autoComplete=\"username\"\n />\n {this.state.suggestion ? (\n <StyledSuggestionButton onClick={this.useSuggestion}>\n Did you mean <code>{this.state.suggestion}</code>?\n </StyledSuggestionButton>\n ) : (\n \"\"\n )}\n <StyledTextField\n className=\"password-input\"\n type=\"password\"\n onChange={this.onChange}\n id=\"password\"\n hint=\"Password\"\n helperText=\"Minimum of 8 characters\"\n value={password}\n autoComplete=\"new-password\"\n />\n <StyledTextField\n className=\"password-input\"\n type=\"password\"\n onChange={this.onChange}\n id=\"password2\"\n hint=\"Repeat password\"\n value={password2}\n autoComplete=\"new-password\"\n />\n <Checkbox\n label={\n <React.Fragment>\n <div className=\"pre-terms\">\n By creating an account, I accept the{\" \"}\n <a\n href=\"https://nabucasa.com/tos/\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n Terms of Services\n </a>\n . I understand that Home Assistant Cloud connects to my Home\n Assistant installation and does <strong>NOT</strong> replace\n it.\n </div>\n </React.Fragment>\n }\n onChange={this.termsAcceptedChanged}\n checked={this.state.termsAccepted}\n />\n </Card>\n </form>\n <Footer />\n </Page>\n );\n }\n}\n\nexport default SignupForm;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport \"../App.scss\";\nimport Button from \"../components/Button\";\nimport Card from \"../components/Card\";\nimport Header from \"../components/Header\";\nimport Spinner from \"../components/Spinner\";\nimport Footer from \"../components/Footer\";\nimport TextField from \"../components/TextField\";\nimport { confirmMfaSignIn } from \"./amplify\";\nimport FlashMessage from \"../components/FlashMessage\";\nimport { captureException } from \"../util/sentry\";\nimport withFlashMessage from \"../components/withFlashMessage\";\n\nconst Page = styled.div`\n max-width: 450px;\n margin: 30px auto 16px;\n`;\n\nconst StyledTextField = styled(TextField)`\n width: 100%;\n`;\n\nconst SubmitTotpButton = styled(Button)`\n margin-bottom: 4px;\n width: calc(100% - 16px);\n`;\n\nconst isTotpCodeValid = (code) => /^\\d{6}$/.test(code);\n\nclass TotpForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n error: undefined,\n submitting: false,\n totpCode: \"\",\n };\n }\n\n onChange = (ev) => {\n const { id, value } = ev.target;\n this.setState({\n [id]: value,\n });\n\n if (id === \"totpCode\" && isTotpCodeValid(value)) {\n this.submit(ev, value);\n }\n };\n\n submit = async (ev, autoSubmitTotpCode = undefined) => {\n ev.preventDefault();\n const { totpCode } = this.state;\n const { user } = this.props;\n\n const code = autoSubmitTotpCode || totpCode;\n\n if (!code) {\n return;\n }\n\n if (!isTotpCodeValid(code)) {\n this.setState({ error: \"Please enter a valid TOTP.\" });\n return;\n }\n\n this.setState({\n submitting: true,\n error: undefined,\n });\n\n let verifiedUser;\n\n try {\n verifiedUser = await confirmMfaSignIn(user, code);\n } catch (e) {\n captureException(\"sign_in_totp\", e);\n switch (e.code) {\n case \"CodeMismatchException\":\n this.setState({ error: \"Incorrect TOTP.\", submitting: false });\n break;\n case \"ExpiredCodeException\":\n this.setState({\n error:\n \"The TOTP has already been used. Please wait a bit and log in again with a different TOTP code.\",\n submitting: false,\n });\n break;\n default:\n this.setState({ error: \"An error occurred.\", submitting: false });\n }\n return;\n }\n\n this.setState({\n submitting: false,\n user: verifiedUser,\n });\n\n if (verifiedUser?.challengeName === \"NEW_PASSWORD_REQUIRED\") {\n window.history.pushState(\n {},\n \"\",\n new URL(\"change-password\", window.location)\n );\n this.setState({\n form: \"change-password\",\n });\n }\n };\n\n clearFlashMessage = () => this.setState({ error: undefined });\n\n render() {\n const { totpCode } = this.state;\n\n if (!this.props.user) {\n return null;\n }\n\n if (this.state.submitting)\n return (\n <Page>\n <Header />\n <Spinner />\n </Page>\n );\n\n return (\n <Page>\n <Header />\n {this.state.error && (\n <FlashMessage\n message={this.state.error}\n isDanger={true}\n onClose={this.clearFlashMessage}\n />\n )}\n <form onSubmit={this.submit}>\n <Card\n title=\"TOTP Verification\"\n actionStacked={true}\n actionButtons={\n <SubmitTotpButton className={\"mdc-button--raised\"}>\n Submit TOTP\n </SubmitTotpButton>\n }\n >\n <StyledTextField\n className=\"totp-input\"\n type=\"text\"\n id=\"totpCode\"\n hint=\"Enter TOTP code\"\n onChange={this.onChange}\n value={totpCode}\n autoComplete=\"one-time-code\"\n />\n <input type=\"submit\" hidden />\n </Card>\n </form>\n <Footer />\n </Page>\n );\n }\n}\n\nexport default withFlashMessage(TotpForm);\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport \"../App.scss\";\nimport Button from \"../components/Button\";\nimport Card from \"../components/Card\";\nimport FlashMessage from \"../components/FlashMessage\";\nimport Header from \"../components/Header\";\nimport LinkButton from \"../components/LinkButton\";\nimport Spinner from \"../components/Spinner\";\nimport Footer from \"../components/Footer\";\nimport TextField from \"../components/TextField\";\nimport ActivateForm from \"./ActivateForm\";\nimport { signIn } from \"./amplify\";\nimport CompleteNewPasswordForm from \"./CompleteNewPasswordForm\";\nimport ResetPassForm from \"./ResetPassForm\";\nimport SignupForm from \"./SignupForm\";\nimport TotpForm from \"./TotpForm\";\nimport { captureException } from \"../util/sentry\";\n\nconst Page = styled.div`\n max-width: 450px;\n margin: 30px auto 16px;\n`;\n\nconst StyledTextField = styled(TextField)`\n width: 100%;\n`;\n\nconst LoginButton = styled(Button)`\n margin-bottom: 4px;\n width: calc(100% - 16px);\n`;\n\nconst FullWidthButton = styled(Button)`\n margin-top: 8px;\n width: 100%;\n`;\n\nconst ForgotPasswordButton = styled(LinkButton)`\n width: 100%;\n text-align: end;\n font-size: 90%;\n padding: 8px;\n width: 45%;\n margin-left: 55%;\n`;\n\nclass LoginForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n visible: false,\n submitting: false,\n error: undefined,\n form: \"signup\" | \"forgot\" | \"change-password\" | \"activate\" | \"mfa\",\n username: \"\",\n password: \"\",\n };\n }\n\n componentDidMount() {\n this._showFormTimeout = setTimeout(\n () => this.setState({ visible: true }),\n 1000\n );\n this.handleUrl();\n window.addEventListener(\"popstate\", this.handlePopState);\n }\n\n handlePopState = () => {\n this.handleUrl();\n };\n\n handleUrl() {\n if (document.location.pathname.startsWith(\"/forgot-password\")) {\n this.setState({ form: \"forgot\" });\n return;\n }\n if (document.location.pathname.startsWith(\"/signup\")) {\n this.setState({ form: \"signup\" });\n return;\n }\n if (document.location.pathname.startsWith(\"/change-password\")) {\n this.setState({ form: \"change-password\" });\n return;\n }\n this.setState({ form: undefined });\n }\n\n componentWillUnmount() {\n clearTimeout(this._showFormTimeout);\n window.removeEventListener(\"popstate\", this.handlePopState);\n }\n\n onChange = (ev) => {\n // this.props.clearFlashMessage();\n this.setState({\n [ev.target.id]: ev.target.value,\n });\n };\n\n submit = async (ev) => {\n ev.preventDefault();\n const { username, password } = this.state;\n\n if (!username || !password) {\n return;\n }\n\n this.setState({\n submitting: true,\n error: undefined,\n });\n\n let user;\n\n try {\n user = await signIn(username.trim(), password);\n } catch (e) {\n if (e.code === \"UserNotConfirmedException\") {\n this.setState({ form: \"activate\", submitting: false });\n } else if (\n [\"UserNotFoundException\", \"NotAuthorizedException\"].includes(e.code)\n ) {\n this.setState({\n error: \"Incorrect username or password.\",\n submitting: false,\n });\n } else {\n captureException(\"sign_in\", e);\n this.setState({\n error: \"Could not log in, try again later.\",\n submitting: false,\n });\n }\n return;\n }\n\n const isMfaRequired = user?.challengeName === \"SOFTWARE_TOKEN_MFA\";\n\n this.setState({\n submitting: false,\n user,\n ...(isMfaRequired && { form: \"mfa\" }),\n });\n\n if (isMfaRequired) {\n return;\n }\n\n if (user?.challengeName === \"NEW_PASSWORD_REQUIRED\") {\n window.history.pushState(\n {},\n \"\",\n new URL(\"change-password\", window.location)\n );\n this.setState({\n form: \"change-password\",\n });\n }\n };\n\n signup = (ev) => {\n ev.preventDefault();\n window.history.pushState({}, \"\", new URL(\"signup\", window.location));\n this.setState({\n form: \"signup\",\n });\n };\n\n forgotPass = (ev) => {\n ev.preventDefault();\n window.history.pushState(\n {},\n \"\",\n new URL(\"forgot-password\", window.location)\n );\n this.setState({\n form: \"forgot\",\n });\n };\n\n clearFlashMessage = () => this.setState({ error: undefined });\n\n render() {\n if (!this.state.visible) return null;\n\n const { username, password, form, user } = this.state;\n\n if (this.state.submitting)\n return (\n <Page>\n <Header />\n <Spinner />\n </Page>\n );\n\n if (form === \"mfa\") {\n return <TotpForm user={user} />;\n }\n\n if (form === \"signup\") {\n return <SignupForm />;\n }\n\n if (form === \"forgot\") {\n return <ResetPassForm email={username} />;\n }\n\n if (form === \"activate\") {\n return <ActivateForm username={username} password={password} />;\n }\n\n if (form === \"change-password\") {\n return <CompleteNewPasswordForm user={user} />;\n }\n\n return (\n <Page>\n <Header />\n {this.state.error && (\n <FlashMessage\n message={this.state.error}\n isDanger={true}\n onClose={this.clearFlashMessage}\n />\n )}\n <form onSubmit={this.submit}>\n <Card\n title=\"Login\"\n actionStacked={true}\n actionButtons={\n <LoginButton className={\"mdc-button--raised\"}>Log in</LoginButton>\n }\n >\n <StyledTextField\n className=\"username-input\"\n type=\"email\"\n id=\"username\"\n hint=\"Email\"\n onChange={this.onChange}\n value={username}\n autoComplete=\"username\"\n />\n <StyledTextField\n className=\"password-input\"\n type=\"password\"\n id=\"password\"\n onChange={this.onChange}\n hint=\"Password\"\n value={password}\n autoComplete=\"current-password\"\n />\n <input type=\"submit\" hidden />\n <ForgotPasswordButton\n disabled={this.state.submitting}\n onClick={this.forgotPass}\n >\n Forgot your password?\n </ForgotPasswordButton>\n </Card>\n </form>\n <FullWidthButton onClick={this.signup}>Create account</FullWidthButton>\n <Footer />\n </Page>\n );\n }\n}\n\nexport default LoginForm;\n","import \"./util/sentry\";\nimport React, { Component } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { withAuth } from \"./auth\";\n\nclass AppMount extends Component {\n constructor(props) {\n super(props);\n this.state = { ProfileComponent: null };\n }\n\n componentDidMount() {\n import(/* webpackChunkName: \"app\" */ \"./App\").then((mdl) =>\n this.setState({ ProfileComponent: mdl.default })\n );\n }\n\n render() {\n const { ProfileComponent } = this.state;\n\n if (ProfileComponent === null) return null;\n\n return <ProfileComponent {...this.props} />;\n }\n}\n\nconst AppMountAuth = withAuth(AppMount);\n\nReactDOM.render(<AppMountAuth />, document.getElementById(\"root\"));\n","import * as React from \"react\";\nimport styled from \"styled-components\";\n\nconst FlashBody = styled.div`\n padding: 0.5rem 2rem 0.5rem 1rem;\n background-color: ${({ isDanger }) =>\n isDanger ? \"var(--nca-error-color)\" : \"var(--nca-accent-color)\"};\n position: relative;\n color: white;\n font-weight: bold;\n border-radius: 2px;\n\n a {\n color: white;\n }\n`;\n\nconst FlashClose = styled.button`\n position: absolute;\n right: 0.5rem;\n top: 0.5rem;\n background: 0;\n border: 0;\n color: white;\n font-weight: bold;\n font-size: 1rem;\n cursor: pointer;\n`;\n\nconst FlashMessage = ({ message, onClose, isDanger }) => (\n <FlashBody isDanger={isDanger}>\n <FlashClose onClick={() => onClose()}>X</FlashClose>\n {message}\n </FlashBody>\n);\n\nexport default FlashMessage;\n","// https://material.io/develop/web/components/cards/\nimport React from \"react\";\nimport styled from \"styled-components\";\nimport classNames from \"classnames\";\nimport \"@material/card/mdc-card.scss\";\nimport CardBody from \"./CardBody\";\nimport Title from \"./Title\";\n\nconst StyledCard = styled.div`\n position: relative;\n background-color: ${({ isDanger }) =>\n isDanger && \"rgba(202, 21, 21, 0.12) !important\"};\n`;\n\nconst StyledActionButton = styled.div`\n width: ${({ stacked }) => stacked && \"100%\"};\n flex-direction: ${({ stacked }) => stacked && \"column\"};\n padding: 0;\n`;\n\nconst StyledCardBody = styled(CardBody)`\n .error {\n color: var(--nca-error-color);\n }\n .warning {\n color: var(--nca-warning-color);\n }\n padding: ${({ hasActions }) => (hasActions ? \"0 1rem\" : \"0 1rem 1rem\")};\n > label:first-child {\n margin-top: 0;\n }\n`;\n\nconst Primary = styled.div`\n margin: 1rem;\n`;\n\nconst Subtitle = styled.h3`\n margin: 0;\n`;\n\nexport default class Card extends React.Component {\n render() {\n const {\n title,\n subtitle,\n actionButtons,\n actionIcons,\n actionStacked,\n className,\n footer,\n documentationLink,\n ...rest\n } = this.props;\n\n return (\n <StyledCard className={classNames(className, \"mdc-card\")} {...rest}>\n {title && (\n <Primary>\n <Title>\n {title}\n {documentationLink ? (\n <a\n className=\"card-documentation-icon\"\n href={documentationLink}\n target=\"_blank\"\n title=\"Documentation\"\n rel=\"noreferrer\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M11,18H13V16H11V18M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,6A4,4 0 0,0 8,10H10A2,2 0 0,1 12,8A2,2 0 0,1 14,10C14,12 11,11.75 11,15H13C13,12.75 16,12.5 16,10A4,4 0 0,0 12,6Z\" />\n </svg>\n </a>\n ) : (\n \"\"\n )}\n </Title>\n {subtitle && (\n <Subtitle className=\"mdc-typography--subtitle2\">\n {subtitle}\n </Subtitle>\n )}\n </Primary>\n )}\n <StyledCardBody\n className=\"styled-card-body\"\n hasActions={actionButtons || actionIcons}\n >\n {this.props.children}\n </StyledCardBody>\n {(actionButtons || actionIcons) && (\n <div className=\"mdc-card__actions\">\n {actionButtons && (\n <StyledActionButton\n className=\"mdc-card__action-buttons\"\n stacked={actionStacked}\n >\n {actionButtons}\n </StyledActionButton>\n )}\n {actionIcons && (\n <div className=\"mdc-card__action-icons\">{actionIcons}</div>\n )}\n </div>\n )}\n {footer}\n </StyledCard>\n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst Container = styled.div`\n .loader {\n position: relative;\n margin: 0 auto;\n width: 36px;\n &:before {\n content: \"\";\n display: block;\n padding-top: 100%;\n }\n }\n\n .circular {\n animation: rotate 2s linear infinite;\n height: 100%;\n transform-origin: center center;\n width: 100%;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n margin: auto;\n }\n\n .path {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: 0;\n animation: dash 1.5s ease-in-out infinite, color 6s ease-in-out infinite;\n stroke-linecap: round;\n }\n\n @keyframes rotate {\n 100% {\n transform: rotate(360deg);\n }\n }\n\n @keyframes dash {\n 0% {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 89, 200;\n stroke-dashoffset: -35px;\n }\n 100% {\n stroke-dasharray: 89, 200;\n stroke-dashoffset: -124px;\n }\n }\n`;\n\nconst Spinner = ({ isDanger }) => (\n <Container>\n <div className=\"loader\">\n <svg className=\"circular\" viewBox=\"25 25 50 50\">\n <circle\n className=\"path\"\n cx=\"50\"\n cy=\"50\"\n r=\"20\"\n fill=\"none\"\n stroke={\n isDanger ? \"var(--nca-error-color)\" : \"var(--nca-accent-color)\"\n }\n strokeWidth=\"2\"\n strokeMiterlimit=\"10\"\n />\n </svg>\n </div>\n </Container>\n);\n\nexport default Spinner;\n","// https://material.io/develop/web/components/input-controls/text-field/\n\nimport React from \"react\";\nimport styled from \"styled-components\";\nimport { MDCTextField } from \"@material/textfield\";\nimport \"@material/textfield/mdc-text-field.scss\";\nimport classNames from \"classnames\";\nimport { debug } from \"../const\";\n\nconst StyledLabel = styled.label`\n margin: 8px 0px;\n ${(props) =>\n props.isReadOnly &&\n `\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n `}\n`;\n\nexport default class TextField extends React.Component {\n constructor(props) {\n super(props);\n\n this.root = React.createRef();\n }\n\n componentDidMount() {\n const { disabled } = this.props;\n this.textfield = new MDCTextField(this.root.current);\n this.textfield.foundation.setDisabled(disabled);\n }\n\n componentWillUnmount() {\n this.textfield.destroy();\n }\n\n render() {\n const { id, hint, fullWidth, className, helperText, slotProps, ...rest } =\n this.props;\n const inputProps = {\n id,\n type: \"text\",\n className: \"mdc-text-field__input\",\n ...rest,\n };\n\n if (!id && debug) {\n console.warn(\"Usability warning. Textfield without ID\", this.props);\n }\n\n let helperId;\n\n if (helperText) {\n helperId = `${id}-helper-text`;\n inputProps[\"aria-controls\"] = helperId;\n inputProps[\"aria-describedby\"] = helperId;\n }\n\n const isTextFieldReadOnly = slotProps?.input?.readOnly === true;\n\n return (\n <React.Fragment>\n <StyledLabel\n className={classNames(\n className,\n \"mdc-text-field mdc-text-field--filled\",\n {\n \"mdc-text-field--fullwidth\": fullWidth,\n }\n )}\n isReadOnly={isTextFieldReadOnly}\n ref={this.root}\n >\n <span className=\"mdc-text-field__ripple\"></span>\n <span className=\"mdc-floating-label\" htmlFor={id}>\n {hint}\n </span>\n <input {...inputProps}></input>\n {!isTextFieldReadOnly && <span className=\"mdc-line-ripple\"></span>}\n </StyledLabel>\n {helperText && (\n <p\n id={helperId}\n className=\"mdc-text-field-helper-text mdc-text-field-helper-text--persistent\"\n aria-hidden=\"true\"\n >\n {helperText}\n </p>\n )}\n </React.Fragment>\n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport classNames from \"classnames\";\n\nconst BASE_URL = \"https://status.home-assistant.io\";\nconst COMPONENTS_URL = `${BASE_URL}/api/v2/components.json`;\nconst CLOUD_COMPONENT_ID = \"q8rzyqg3gjw1\";\n\nconst StyledDiv = styled.div`\n --status-page-component-status-color: var(--nca-accent-color);\n color: var(--status-page-component-status-color);\n\n a {\n color: var(--status-page-component-status-color) !important;\n display: flex;\n gap: 2px;\n align-items: center;\n text-decoration: none;\n margin-left: 8px;\n }\n\n svg {\n width: 16px;\n fill: var(--status-page-component-status-color);\n }\n\n .status-page-component-status {\n border-bottom: 1px solid var(--status-page-component-status-color);\n }\n\n .status-page-component-status:first-letter {\n text-transform: uppercase;\n }\n\n .status-page-component-status-partial_outage,\n .status-page-component-status-unknown {\n --status-page-component-status-color: var(--nca-warning-color);\n }\n\n .status-page-component-status-major_outage {\n --status-page-component-status-color: var(--nca-error-color);\n }\n\n .status-page-component-status-operational {\n --status-page-component-status-color: var(--nca-accent-color);\n }\n\n @media (max-width: 768px) {\n a {\n margin-left: 0;\n }\n }\n`;\n\nconst statusSvgPath = {\n operational:\n \"M12 2C6.5 2 2 6.5 2 12S6.5 22 12 22 22 17.5 22 12 17.5 2 12 2M10 17L5 12L6.41 10.59L10 14.17L17.59 6.58L19 8L10 17Z\",\n default:\n \"M13,13H11V7H13M13,17H11V15H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z\",\n};\n\nconst statusTransform = {\n unknown: \"Unknown service status\",\n operational: \"Services are operational\",\n partial_outage: \"Partial service outage\",\n major_outage: \"Major service outage\",\n};\n\nexport default class StatusPageComponentStatus extends React.Component {\n constructor(props) {\n super(props);\n this.fetchComponents();\n this.state = {\n components: [],\n };\n }\n\n async fetchComponents() {\n try {\n const response = await fetch(COMPONENTS_URL);\n const data = await response.json();\n this.setState({ components: data?.components || [] });\n } catch (error) {\n console.error(\"Error fetching status page components\", error);\n }\n }\n\n render() {\n const { components } = this.state;\n const cloudStatus = components?.find(\n (component) => component.id === CLOUD_COMPONENT_ID\n );\n\n const currentCloudStatus = cloudStatus?.status || \"operational\";\n\n return (\n <React.Fragment>\n <StyledDiv>\n <a\n title=\"Open our status page\"\n href={BASE_URL}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <svg\n className={classNames(\n `status-page-component-status-${currentCloudStatus}`\n )}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d={statusSvgPath[currentCloudStatus] || statusSvgPath.default}\n />\n </svg>\n <div\n className={classNames(\n \"status-page-component-status\",\n `status-page-component-status-${currentCloudStatus}`\n )}\n >\n {statusTransform[currentCloudStatus] || statusTransform.unknown}\n </div>\n </a>\n </StyledDiv>\n </React.Fragment>\n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport StatusPageComponentStatus from \"../components/StatusPageComponentStatus\";\n\nconst FooterStyle = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 4px;\n text-align: center;\n margin-top: 15px;\n color: var(--nca-secondary-text-color);\n font-size: 0.875rem;\n\n a {\n color: var(--nca-secondary-text-color);\n }\n\n @media (max-width: 768px) {\n flex-direction: column;\n gap: 1em;\n font-size: 1rem;\n\n p {\n margin-block-start: 0;\n margin-block-end: 0;\n }\n }\n`;\n\nconst Footer = () => (\n <FooterStyle>\n <p>Nabu Casa, Inc.</p>\n \n <a\n href=\"https://www.nabucasa.com/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Website\n </a>\n \n <a\n href=\"https://www.nabucasa.com/support/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Support\n </a>\n <StatusPageComponentStatus />\n </FooterStyle>\n);\n\nexport default Footer;\n","import Raven from \"raven-js\";\n\nimport { debug } from \"../const\";\n\nif (process.env.REACT_APP_ENVIRONMENT !== \"dev\") {\n // https://docs.sentry.io/clients/javascript/config/\n Raven.config(process.env.REACT_APP_SENTRY_DSN, {\n release: process.env.GIT_COMMIT,\n environment: process.env.REACT_APP_ENVIRONMENT,\n });\n Raven.install();\n}\n\nexport function setSentryUserContext(authData, subscriptionInfo) {\n Raven.setUserContext({\n username: authData.username,\n ...(subscriptionInfo || {}),\n });\n}\n\n// action is a string representing the action of the user\nexport async function captureException(action, err) {\n const response = err.response;\n if (debug) console.error(\"Error doing\", action, err, response);\n if (process.env.REACT_APP_ENVIRONMENT === \"dev\") return;\n\n const extra = {};\n\n if (response) {\n extra.response = {\n status: response.status,\n url: response.url,\n headers: response.headers,\n };\n }\n\n if (response && !response.bodyUsed) {\n extra.response.data = await response.text();\n }\n\n Raven.captureException(err, {\n tags: { action },\n extra,\n });\n}\n\nexport function captureMessage(message, action, data) {\n if (debug) console.error(\"Error doing\", action, message, data);\n if (process.env.REACT_APP_ENVIRONMENT === \"dev\") return;\n Raven.captureMessage(`${message} (${action})`, {\n tags: { action },\n extra: data,\n });\n}\n","// Return if we should run in debug mode\nexport const debug = process.env.REACT_APP_DEBUG === \"true\";\nexport const paypalEnabled = process.env.REACT_APP_PAYPAL_ENABLED === \"true\";\nexport const baseUrl = `${location.protocol}//${location.host}`;\nexport const threeDSecureEnabled =\n process.env.REACT_APP_3D_SECURE_ENABLED === \"true\";\n\nexport const currencyPerCountry = {\n GB: \"gbp\",\n CA: \"cad\",\n BE: \"eur\",\n BG: \"eur\",\n CZ: \"eur\",\n DK: \"eur\",\n DE: \"eur\",\n EE: \"eur\",\n IE: \"eur\",\n EL: \"eur\",\n GR: \"eur\",\n ES: \"eur\",\n FR: \"eur\",\n HR: \"eur\",\n IT: \"eur\",\n CY: \"eur\",\n LV: \"eur\",\n LT: \"eur\",\n LU: \"eur\",\n HU: \"eur\",\n MT: \"eur\",\n NL: \"eur\",\n AT: \"eur\",\n PL: \"eur\",\n PT: \"eur\",\n RO: \"eur\",\n SI: \"eur\",\n SK: \"eur\",\n FI: \"eur\",\n SE: \"eur\",\n};\n","export const getLocationData = async () => {\n let location_info = {};\n try {\n location_info = await (\n await fetch(process.env.REACT_APP_URL_LOCATION_INFO)\n ).json();\n } catch (e) {\n // ignore\n }\n return location_info;\n};\n","import React from \"react\";\nimport FlashMessage from \"./FlashMessage\";\n\nconst withFlashMessage = (Component) =>\n class withFlashMessageComp extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n flashMessage: null,\n flashIsDanger: false,\n };\n }\n\n setFlashMessage = (flashMessage, flashIsDanger = false) =>\n this.setState({ flashMessage, flashIsDanger });\n\n clearFlashMessage = () =>\n this.setState({ flashMessage: null, flashIsDanger: false });\n\n render() {\n return (\n <React.Fragment>\n {this.state.flashMessage && (\n <FlashMessage\n message={this.state.flashMessage}\n isDanger={this.state.flashIsDanger}\n onClose={this.clearFlashMessage}\n />\n )}\n <Component\n {...this.props}\n setFlashMessage={this.setFlashMessage}\n clearFlashMessage={this.clearFlashMessage}\n />\n </React.Fragment>\n );\n }\n };\n\nexport default withFlashMessage;\n","/**\n * CardBody\n * Text body to be used inside card.\n */\nimport React from \"react\";\nimport styled from \"styled-components\";\nimport classNames from \"classnames\";\n\nconst Body = styled.div`\n color: var(--nca-primary-text-color);\n`;\n\nexport default class CardBody extends React.Component {\n render() {\n const { className, style } = this.props;\n return (\n <Body\n className={classNames(\"mdc-typography--body2\", className)}\n style={style}\n >\n {this.props.children}\n </Body>\n );\n }\n}\n"],"sourceRoot":""}