UNPKG

aws-amplify-react

Version:

AWS Amplify is a JavaScript library for Frontend and mobile developers building cloud-enabled applications.

406 lines (364 loc) • 12.2 kB
/* * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with * the License. A copy of the License is located at * * http://aws.amazon.com/apache2.0/ * * or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions * and limitations under the License. */ import * as React from 'react'; import { JS } from '@aws-amplify/core'; import AmplifyTheme from './AmplifyTheme'; export const Container = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.container); const p = JS.objectLessAttributes(props, 'theme'); return beforeAfter( <div {...p} className="amplify-container" style={style}> {props.children} </div> ); }; export const FormContainer = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.formContainer); return beforeAfter( <div className="amplify-form-container" style={style}> {props.children} </div> ); }; export const FormSection = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.formSection); return ( <FormContainer theme={theme}> {beforeAfter( <div className="amplify-form-section" style={style}> {props.children} </div> )} </FormContainer> ); }; export const ErrorSection = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.errorSection); const p = JS.objectLessAttributes(props, 'theme'); return beforeAfter( <div {...p} className="amplify-error-section" style={style}> <ErrorSectionContent> {props.children} </ErrorSectionContent> </div> ); }; export const ErrorSectionContent = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.errorSectionContent); return beforeAfter( <span className="amplify-error-section-content" style={style}> {props.children} </span> ); }; export const SectionHeader = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.sectionHeader); const p = JS.objectLessAttributes(props, 'theme'); return beforeAfter( <div {...p} className="amplify-section-header" style={style}> <SectionHeaderContent theme={theme}> {props.children} </SectionHeaderContent> </div> ); }; export const SectionHeaderContent = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.sectionHeaderContent); return beforeAfter( <span className="amplify-section-header-content" style={style}> {props.children} </span> ); }; export const SectionFooter = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.sectionFooter); const p = JS.objectLessAttributes(props, 'theme'); return beforeAfter( <div {...p} className="amplify-section-footer" style={style}> <SectionFooterContent> {props.children} </SectionFooterContent> </div> ); }; export const SectionFooterContent = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.sectionFooterContent); return beforeAfter( <span className="amplify-section-footer-content" style={style}> {props.children} </span> ); }; export const SectionBody = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.sectionBody); const p = JS.objectLessAttributes(props, 'theme'); return beforeAfter( <div {...p} className="amplify-section-body" style={style}> {props.children} </div> ); }; export const ActionRow = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.actionRow); const p = JS.objectLessAttributes(props, 'theme'); return beforeAfter( <div {...p} className="amplify-action-row" style={style}> {props.children} </div> ); }; export const FormRow = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.formRow); const p = JS.objectLessAttributes(props, 'theme'); return beforeAfter( <div {...p} className="amplify-form-row" style={style}> {props.children} </div> ); }; export const InputRow = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.input); const p = JS.objectLessAttributes(props, 'theme'); return ( <FormRow theme={theme}> {beforeAfter( <input {...p} className="amplify-input" style={style} /> )} </FormRow> ); }; export const RadioRow = (props) => { const id = props.id || '_' + props.value; const theme = props.theme || AmplifyTheme; return ( <FormRow theme={theme}> <Radio {...props} id={id} /> <Label htmlFor={id} theme={theme} >{props.placeholder}</Label> </FormRow> ); }; export const Radio = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.radio); const p = JS.objectLessAttributes(props, 'theme'); return beforeAfter( <input {...p} type="radio" className="amplify-radio" style={style} /> ); }; export const CheckboxRow = (props) => { const id = props.id || '_' + props.name; const theme = props.theme || AmplifyTheme; return ( <FormRow theme={theme}> <Checkbox {...props} id={id} /> <Label htmlFor={id} theme={theme} >{props.placeholder}</Label> </FormRow> ); }; export const Checkbox = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.checkbox); const p = JS.objectLessAttributes(props, 'theme'); return beforeAfter( <input {...p} type="checkbox" className="amplify-checkbox" style={style} /> ); }; export const MessageRow = (props) => { const theme = props.theme || AmplifyTheme; return ( <FormRow theme={theme}> <MessageContent theme={theme}>{props.children}</MessageContent> </FormRow> ); }; export const MessageContent = (props) => { const theme = props.theme || AmplifyTheme; return beforeAfter( <span className="amplify-message-content" style={theme.messageContent}> {props.children} </span> ); }; export const ButtonRow = (props) => { const theme = props.theme || AmplifyTheme; return beforeAfter( <div className="amplify-action-row" style={theme.actionRow}> <Button {...props} /> </div> ); }; export const Button = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.button); const p = JS.objectLessAttributes(props, 'theme'); return beforeAfter( <button {...p} className="amplify-button" style={style}> <ButtonContent theme={theme}>{props.children}</ButtonContent> </button> ); }; export const ButtonContent = (props) => { const theme = props.theme || AmplifyTheme; return beforeAfter( <span className="amplify-button-content" style={theme.buttonContent}> {props.children} </span> ); }; export const SignInButton = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.signInButton); const p = JS.objectLessAttributes(props, 'theme'); return beforeAfter( <button {...p} className="amplify-signin-button" style={style}> {props.children} </button> ); }; export const Link = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.a); const p = JS.objectLessAttributes(props, 'theme'); return beforeAfter( <a {...p} className="amplify-a" style={style}>{props.children}</a> ); }; export const Label = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.label); const p = JS.objectLessAttributes(props, 'theme'); return beforeAfter( <label {...p} className="amplify-label" style={style}>{props.children}</label> ); }; export const Space = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.space); const p = JS.objectLessAttributes(props, 'theme'); return beforeAfter( <span {...p} className="amplify-space" style={style}>{props.children}</span> ); }; export const NavBar = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.navBar); const p = JS.objectLessAttributes(props, 'theme'); return beforeAfter( <div {...p} className="amplify-nav-bar" style={style}> {props.children} </div> ); }; export const Nav = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.nav); const p = JS.objectLessAttributes(props, 'theme'); return beforeAfter( <div {...p} className="amplify-nav" style={style}> {props.children} </div> ); }; export const NavRight = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.navRight); const p = JS.objectLessAttributes(props, 'theme'); return beforeAfter( <div {...p} className="amplify-nav-right" style={style}> {props.children} </div> ); }; export const NavItem = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.navItem); const p = JS.objectLessAttributes(props, 'theme'); return beforeAfter( <div {...p} className="amplify-nav-item" style={style}> {props.children} </div> ); }; export const NavButton = (props) => { const theme = props.theme || AmplifyTheme; const style = propStyle(props, theme.navButton); const p = JS.objectLessAttributes(props, 'theme'); return beforeAfter( <button {...p} className="amplify-nav-button" style={style}> {beforeAfter( <span style={theme.navButtonContent}>{props.children}</span> )} </button> ); }; export const beforeAfter = (el) => { const style = el.props.style || {}; const { before, after } = style; if (!before && !after) { return el; } return ( <span style={{position: 'relative'}}> {before? <span style={before}>{before.content}</span> : null} {el} {after? <span style={after}>{after.content}</span> : null} </span> ); }; export const propStyle = (props, themeStyle) => { const { id, style } = props; const styl = Object.assign({}, style, themeStyle); if (!id) { return styl; } const selector = '#' + id; Object.assign(styl, styl[selector]); return styl; }; export const transparent1X1 = 'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=='; export const white1X1 = 'data:image/gif;base64,R0lGODlhAQABAIAAAP7//wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==';