From 74d8cf40d53407852495569cbc2f18c153dacb92 Mon Sep 17 00:00:00 2001 From: Sawyer Hollenshead Date: Thu, 29 Jun 2017 16:11:49 -0400 Subject: [PATCH 1/2] Update guidance; Minor component updates (#76) * Maintain active tab state on page reload * Add modifiers and guidance for Badge component * Update Button guidance * Use badge variations * Reiterate guidance about secondary actions * Add USWDS links to Button and Badge * Combine Choice CSS examples * Update guidance of Choice component * Fix lint errors * Add related pattern to Choices * Update guidance for lists * Add related pattern to Select component * Fix failing lint test with ...spread * Update Alert guidance * Update Select guidance * Reorder links * Refine PageBlock UI * Update Table guidance + add more examples * Remove Alpha banner; Add basic header * Update Grid guidance * Update Tabs guidance * Remove "React -" from headings * Update TextField guidance * Update VerticalNav guidance * Add Forms guidelines page * Add redundant link * Reformat markdown blocks * Update generator template * Add USWDS credit * Fix server-side rendering --- .eslintrc | 1 + packages/core/src/base/typography.scss | 4 +- packages/core/src/components/Alert/Alert.scss | 39 +++--- packages/core/src/components/Badge/Badge.scss | 73 +++++++++-- .../core/src/components/Button/Button.scss | 66 +++++++--- .../core/src/components/ChoiceList/Choice.jsx | 1 + .../src/components/ChoiceList/Choice.scss | 114 +++++++++--------- .../src/components/ChoiceList/ChoiceList.jsx | 6 +- .../components/ChoiceList/ChoiceList.test.jsx | 2 +- .../components/ChoiceList/Select.example.jsx | 4 + .../core/src/components/ChoiceList/Select.jsx | 2 + .../src/components/ChoiceList/Select.scss | 63 +++++++--- .../src/components/ChoiceList/Select.test.jsx | 2 +- packages/core/src/components/List/List.scss | 44 ++++++- packages/core/src/components/Table/Table.scss | 97 +++++++++++++-- packages/core/src/components/Tabs/Tabs.scss | 33 ++--- .../src/components/TextField/TextField.scss | 59 ++++++--- .../components/TextField/TextField.test.jsx | 2 +- .../components/VerticalNav/VerticalNav.scss | 93 ++++++-------- .../core/src/settings/_variables.layout.scss | 4 + .../core/src/utilities/border-radius.scss | 4 +- .../src/utilities/display-visibility.scss | 22 ++-- packages/core/src/utilities/float.scss | 4 +- packages/core/src/utilities/font-size.scss | 4 +- packages/core/src/utilities/margin.scss | 4 +- packages/core/src/utilities/padding.scss | 4 +- packages/core/src/utilities/text-align.scss | 4 +- packages/docs/src/pages/guidelines/forms.md | 59 +++++++++ packages/docs/src/pages/guidelines/grid.md | 5 +- packages/docs/src/pages/index.md | 6 +- .../docs/src/scripts/components/Header.jsx | 7 +- packages/docs/src/scripts/components/Page.jsx | 15 ++- .../docs/src/scripts/components/PageBlock.jsx | 18 +-- .../src/scripts/components/PageHeader.jsx | 12 +- .../docs/src/scripts/components/Source.jsx | 5 +- .../generators/app/templates/index.scss | 40 +++++- tools/gulp/common/log-util.js | 2 +- .../docs/__tests__/processSection.test.js | 2 +- tools/gulp/docs/generatePage.js | 2 +- tools/gulp/docs/processSection.js | 11 +- 40 files changed, 646 insertions(+), 293 deletions(-) create mode 100644 packages/docs/src/pages/guidelines/forms.md diff --git a/.eslintrc b/.eslintrc index 077d505254..a640dc1472 100644 --- a/.eslintrc +++ b/.eslintrc @@ -15,6 +15,7 @@ }, "parserOptions": { "ecmaFeatures": { + "experimentalObjectRestSpread": true, "jsx": true }, "sourceType": "module" diff --git a/packages/core/src/base/typography.scss b/packages/core/src/base/typography.scss index cf36874502..0856acc157 100644 --- a/packages/core/src/base/typography.scss +++ b/packages/core/src/base/typography.scss @@ -146,9 +146,7 @@ Style guide: base.typography } /* ---- - -## Responsive +Responsive Responsive typography can be accomplished by using the [responsive prefixed font size utility class](/utilites/font-size#responsive). Since the base typography margins and line height is measured in `em` units, they'll automatically adjust as you change the font size. diff --git a/packages/core/src/components/Alert/Alert.scss b/packages/core/src/components/Alert/Alert.scss index f6db65de46..4da1954f5e 100644 --- a/packages/core/src/components/Alert/Alert.scss +++ b/packages/core/src/components/Alert/Alert.scss @@ -3,7 +3,7 @@ /* Alert -@status prototype +@status recommended @uswds https://standards.usa.gov/components/alerts @@ -154,31 +154,38 @@ Style guide: components.alert.react /* --- -## Accessibility - -- Use the ARIA `role="alert"` to inform assistive technologies of a time-sensitive and important message that is not interactive. If the message is interactive, use the `alertdialog` role instead. -- Do not visually hide alert messages on the page and then make them visible when they are needed. Users of older assistive technologies may still be able to perceive the alert messages even if they are not currently applicable. - -## Usability +## When to use -### When to use - -- As a notification that keeps people informed of the status of the system and which may or may not require the user to respond. This includes errors, warnings, and general updates. - As a validation message that alerts someone that they just did something that needs to be corrected or as confirmation that a task was completed successfully. +- As a callout or notification for important or timely information. This includes errors, warnings, and general information. -### When to consider something else +## When to consider alternatives -- On long forms, always include in-line validation in addition to any error messages that appear at the top of the form. +- On long forms, always include in-line validation in addition to any error messages that appear at the top of the form. When possible, simplify forms by rewriting and where possible, splitting long forms across multiple pages - If an action will result in destroying a user’s work (for example, deleting an application) use a more intrusive pattern, such as a confirmation modal dialogue, to allow the user to confirm that this is what they want. ## Guidance -- When the user is required to do something in response to an alert, let them know what they need to do and make that task as easy as possible. Think about how much context to provide with your message. For example, a notification of a system change may require more contextual information than a validation message. Write the message in concise, human readable language; avoid jargon and computer code. +- Don’t overdo it — too many notifications will either overwhelm or annoy the user and are likely to be ignored. +- Write the message in concise, human readable language; avoid jargon and computer code. +- Don’t include notifications that aren’t related to the user’s current goal. +- When the user is required to do something in response to an alert, let them know what they need to do and make that task as easy as possible. + +**When the alert is for an error:** + - Be polite in error messages — don’t place blame on the user. - Users generally won’t read documentation but will read a message that helps them resolve an error; include some educational material in your error message. -- But don’t overdo it — too many notifications will either overwhelm or annoy the user and are likely to be ignored. -- Allow a user to dismiss a notification wherever appropriate. -- Don’t include notifications that aren’t related to the user’s current goal. +- If the error relates to specific text fields, give these fields an error state as well. + +## Accessibility + +- Use the ARIA `role="alert"` to inform assistive technologies of a time-sensitive and important message that is not interactive. If the message is interactive, use the `alertdialog` role instead. +- Do not visually hide alert messages on the page and then make them visible when they are needed. Users of older assistive technologies may still be able to perceive the alert messages even if they are not currently applicable. + +## Learn more + +- [18F Content Guide \- Active voice](https://content-guide.18f.gov/active-voice/) + Style guide: components.alert.guidance */ diff --git a/packages/core/src/components/Badge/Badge.scss b/packages/core/src/components/Badge/Badge.scss index e0f73b62a9..072664ce08 100644 --- a/packages/core/src/components/Badge/Badge.scss +++ b/packages/core/src/components/Badge/Badge.scss @@ -3,29 +3,84 @@ /* Badge -Badges draw attention to new or important content. +Badges hold small amounts of information and draw attention to new or important content. -@react-component Badge +@status beta -@status prototype +@uswds https://standards.usa.gov/components/labels/ + +.ds-c-badge--info - Info badge +.ds-c-badge--success - Success badge +.ds-c-badge--warn - Warning badge +.ds-c-badge--alert - Alert or error badge Markup: -New -Due: December 31, 2018 +5 +Badge label +Badge label Style guide: components.badge */ .ds-c-badge { - background-color: $color-primary-alt; - border-radius: $border-radius; + background-color: $color-gray; + border-radius: $border-radius-pill; color: $color-white; display: inline-block; font-size: $small-font-size; line-height: $heading-line-height; - margin-right: 5px; - padding: 3px 6px; + margin-right: $spacer-half; + padding: $spacer-half $spacer-1; &:only-of-type { margin-right: 0; } } + +.ds-c-badge--info { + background-color: $color-primary; +} + +.ds-c-badge--success { + background-color: $color-success; +} + +.ds-c-badge--warn { + background-color: $color-warn; + color: $color-base; +} + +.ds-c-badge--alert { + background-color: $color-error; +} + +/* +--- + +## When to use + +- To draw attention to new, important content on a page that might otherwise be missed. +- To filter results with one or more tags. +- To indicate the number of new or unread items within a container. For example, to indicate the number of unread messages within a person’s inbox. + +## When to consider alternatives + +- When users are likely to confuse a badge with a button. For example, when the badge appears in the same area of the page as buttons. +- To call attention to new or updated content, consider changing the background color of the object itself or experiment with changing the font weight. +- When users already expect content to be updated frequently. For example, on a site dedicated to breaking news. In this case placing the new content at the top may be enough. + +## Guidance + +- Don’t overdo it — if everything on a page is called out as important, nothing is important. +- Users may confuse badges as buttons. Always conduct usability testing to make sure your particular implementation is not causing frustration. +- Don’t mix interactive and static badges on your site. Once you establish a pattern for how badges behave, users will expect that behavior every time. + +## Accessibility + +- When badges are used to call out new content that is dynamically loaded onto a page, be sure to use [ARIA live regions](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions) to alert screen readers of the change. + +## Future research + +- Further usability testing should be done to ensure badges aren't being confused with buttons. Further iteration can be done with sizing and colors if there is confusion. + +Style guide: components.badge.guidance +*/ diff --git a/packages/core/src/components/Button/Button.scss b/packages/core/src/components/Button/Button.scss index c333e96782..b2416f8c98 100644 --- a/packages/core/src/components/Button/Button.scss +++ b/packages/core/src/components/Button/Button.scss @@ -4,7 +4,9 @@ /* Button -@status prototype +@status recommended + +@uswds https://standards.usa.gov/components/buttons Use buttons to signal actions. @@ -260,30 +262,60 @@ Style guide: components.button.react /* --- -## Accessibility +## When to use -- Buttons should display a visible focus state when users tab to them. -- Avoid using `
` or `` tags to create buttons. Screen readers don't automatically know either is a usable button. -- When styling links to look like buttons, remember that screen readers handle links slightly differently than they do buttons. Pressing the Space key triggers a button, but pressing the Enter key triggers a link. +- Use buttons for the most important actions you want users to take on your site, such as "Download," "Sign up," or "Apply." -## Usability +## When to consider alternatives -### When to use -- Use buttons for the most important actions you want users to take on your site, such as "download," "sign up," or "log out." - -### When to consider something else -- If you want to lead users between pages of a website. Use links instead. - Less popular or less important actions may be visually styled as links. +- Buttons are for performing actions, not making choices. If you need your users to make a choice, use something else like radio buttons. Alternatively, if one choice is much less important then try styling it as a link instead. ## Guidance -- Generally, use primary buttons for actions that go to the next step and use secondary buttons for actions that happen on the current page. -- Style the button most users should click in a way that distinguishes from other buttons on the page. Try using the “large button” or the most visually distinct fill color. -- Make sure buttons look clickable—use color variations to distinguish static, hover and active states. -- Avoid using too many buttons on a page. + +- Use the "primary" button variation for the button most users should click. This is your primary call-to-action. +- Avoid using too many buttons on a page. Aim to use only one button per page. +- Avoid similar styles elsewhere on the page that could be confused for buttons. +- Use buttons for the primary action and links for secondary actions. + +**Label text** + - Use sentence case for button labels. -- Button labels should be as short as possible with “trigger words” that your users will recognize to clearly explain what will happen when the button is clicked (for example, “download,” “view” or “sign up”). +- Button labels should be as short as possible with “trigger words” that your users will recognize to clearly explain what will happen when the button is clicked (for example, “Save and continue,” “Download” or “Sign up”). - Make the first word of the button’s label a verb. For example, instead of “Complaint Filing”, label the button “File a complaint.” -- At times, consider adding an icon to signal specific actions (“download”, “open in a new window”, etc). +- If a button has an icon, it should still have accompanying text describing the action. + +**Destructive buttons** + +- Use the "danger" button variation for destructive buttons. For example, buttons that delete or reset a user's information. +- Confirm the user meant to trigger a destructive action before following through with the action. +- Provide a method for a user to undo a destructive action. + +**Disabled buttons** + +- Don’t disable buttons, unless there’s a good reason to. +- If you do disable a button, make sure it receives the disabled styling. A `button` element will automatically be styled as a disabled button when it has the `disabled` HTML attribute, but an `a` element will need to have the disabled modifier class applied to it. + +## Accessibility + +- Buttons should display a visible focus state when users tab to them. +- Create a button with a `button` or `a` element to retain the native click functionality. Avoid using `
` or `` tags to create buttons. Screen readers don't automatically know either is a usable button. +- When styling links to look like buttons, remember that screen readers handle links slightly differently than they do buttons. Pressing the `Space` key triggers a button, but pressing the `Enter` key triggers a link. + +## Learn more + +- [Beyond Blue Links: Making Clickable Elements Recognizable](https://www.nngroup.com/articles/clickable-elements/) +- [7 Basic Best Practices for Buttons](http://www.uxmatters.com/mt/archives/2012/05/7-basic-best-practices-for-buttons.php) +- [The Grammar of Interactivity](http://www.uxbooth.com/articles/the-grammar-of-interactivity/) +- [GOV.UK navigation buttons discussion](https://paper.dropbox.com/doc/Navigation-buttons-continue-next-previous-ghLqL5a9Ostxxb3rvBhyO) + +**Button alignment** +- [Buttons on forms and surveys: a look at some research](http://www.slideshare.net/cjforms/buttons-on-forms-and-surveys-a-look-at-some-research-2012) +- [Previous and Next Actions in Web Forms](https://www.lukew.com/ff/entry.asp?730=) + +**ARIA** +- [Using the button role](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_button_role) +- [Building Accessible Buttons with ARIA](https://www.deque.com/blog/accessible-aria-buttons) Style guide: components.button.guidance */ diff --git a/packages/core/src/components/ChoiceList/Choice.jsx b/packages/core/src/components/ChoiceList/Choice.jsx index 325ebf627e..08dd6409b8 100644 --- a/packages/core/src/components/ChoiceList/Choice.jsx +++ b/packages/core/src/components/ChoiceList/Choice.jsx @@ -5,6 +5,7 @@ import uniqueId from 'lodash.uniqueid'; /** * A `Choice` component can be used to render a checkbox or radio button. + * * Any _undocumented_ props that you pass to this component will be passed * to the `input` element, so you can use this to set additional attributes if * necessary. diff --git a/packages/core/src/components/ChoiceList/Choice.scss b/packages/core/src/components/ChoiceList/Choice.scss index da0066d56f..3b525d7615 100644 --- a/packages/core/src/components/ChoiceList/Choice.scss +++ b/packages/core/src/components/ChoiceList/Choice.scss @@ -18,17 +18,11 @@ Markup: /* Checkbox & Radio -@status prototype +Checkboxes allow users to select one or more options from a visible list, whereas radio buttons allow a user to select only one option. -@uswds https://standards.usa.gov/components/form-controls - -Style guide: components.choice -*/ +@status recommended -/* -Checkbox - -Checkboxes allow users to select one or more options from a visible list. +@uswds https://standards.usa.gov/components/form-controls Markup:
@@ -43,9 +37,19 @@ Markup:
+
+ Select a historical figure + + + + + + +
- Select a historical figure + Historical figures + Select all that apply @@ -55,26 +59,7 @@ Markup:
-
- -Style guide: components.choice.checkbox -*/ - -/* -Radio option - -Markup: -
- Select a historical figure - - - - - - -
-
-
+
Select a historical figure @@ -85,7 +70,7 @@ Markup:
-Style guide: components.choice.radio +Style guide: components.choice */ // Hide the default browser checkbox/radio button since we'll @@ -178,7 +163,7 @@ Style guide: components.choice.radio } /* -React - `` +`` @react-component Choice @@ -186,7 +171,7 @@ Style guide: components.choice.react */ /* -React - `` +`` @react-component ChoiceList @@ -196,49 +181,60 @@ Style guide: components.choice.choicelist-react /* --- -## Accessibility +## When to use -- Surround a related set of choices with a `
`. The `` provides context for the grouping. Do not use `fieldset` and `legend` for a single check. -- The custom checkboxes and radio buttons here are accessible to screen readers because the default fields are moved off-screen. -- Each input should have a semantic `id` attribute, and its corresponding `label` should have the same value in its `for` attribute. +**Checkboxes** + +- When a user can select any number of choices from a set list. +- When a user needs to choose “yes” or “no” on only one option (use a stand-alone checkbox). For example, to toggle a setting on or off. +- When users need to see all the available options at a glance. +- When users should be able to select zero of the options. + +**Radio buttons** + +- When users need to select only one option out of a set of mutually exclusive choices. -## Guidelines +## When to consider alternatives +- If there are too many options to display on a mobile screen. Consider a `select` menu if you don’t have enough space to list out all available options, and if the user can only select one of the options. +- Never use radio buttons for optional questions, since once a radio button is selected from a list, it or another choice will remain selected. + +## Guidance + +- Don't rely on the visual difference between radio buttons and checkboxes. Make it clear with words when users can select one or multiple options. - Users should be able to tap on or click on either the text label or the checkbox to select or deselect an option. -- List options vertically if possible; horizontal listings can make it difficult to tell which label pertains to which checkbox. +- In general, list choices vertically; horizontal listings can make it difficult to tell which label pertains to which choice. An exception is where you have binary choices with short labels, like 'Yes / No'. The convention here is for horizontal alignment. - Avoid using negative language in labels as they can be counterintuitive. For example, “I want to receive a promotional email” instead of “I don’t want to receive promotional email.” -- If you customize, make sure selections are adequately spaced for touch screens. -- Use caution if you decide to set a default value. Setting a default value can discourage users from making conscious decisions, seem pushy, or alienate users who don’t fit into your assumptions. If you are unsure, leave nothing selected by default. +- Use caution if you decide to set a default value. Setting a default value can discourage users from making conscious decisions, seem pushy, or alienate users who don’t fit into your assumptions. In addition, you'll never know if the user explicitly chose that option or just didn't notice the question. If you're unsure, leave nothing selected by default. + +**[View the "Forms" guidelines for additional guidance and best practices.]({{root}}/guidelines/forms/)** + +## Accessibility + +- Surround a related set of choices with a `
`. The `` provides context for the grouping. Do not use `fieldset` and `legend` for a single checkbox. +- Some screen readers read the `legend` text for each `fieldset`, so it should be brief and descriptive. +- Each input should have a semantic `id` attribute, and its corresponding `label` should have the same value in its `for` attribute. +- The custom checkboxes and radio buttons here are accessible to screen readers because the default fields are moved off-screen. ## Theming -The following Sass variables can be overridden to theme checkbox/radio options: +The following Sass variables can be overridden to theme choice fields: - `$choice-border-width` - `$choice-border-color` - `$choice-border-color-inverse` - `$choice-checked-background-color` -## Checkboxes +## Related patterns -### When to use -- When a user can select any number of choices from a set list. -- When a user needs to choose “yes” or “no” on only one option (use a stand-alone checkbox). For example, to toggle a setting on or off. -- When users need to see all the available options at a glance. +- [Select menu]({{root}}/components/select) -### When to consider something different -- If there are too many options to display on a mobile screen. -- If a user can only select one option from a list (use `radio` buttons instead). - -## Radio buttons - -- When users need to select only one option out of a set of mutually exclusive choices. -- When the number of available options can fit onto a mobile screen. +## Learn more -### When to consider something else -- Consider checkboxes if users need to select more than one option or if there is only one item to select. -- Consider a dropdown if you don’t have enough space to list out all available options. -- If users should be able to select zero of the options. +- [Form Guidelines]({{root}}/guidelines/forms/) +- [GOV.UK Checkbox/Radio buttons discussion](https://paper.dropbox.com/doc/Radio-buttons-oIwWoxwBKClt5IXvDbnpF) +- ["We've updated the radios and checkboxes on GOV.UK"](https://designnotes.blog.gov.uk/2016/11/30/weve-updated-the-radios-and-checkboxes-on-gov-uk/) +- [Four steps for choosing form elements on the Web (PDF)](http://www.formsthatwork.com/files/Articles/dropdown.pdf) Style guide: components.choice.guidance */ diff --git a/packages/core/src/components/ChoiceList/ChoiceList.jsx b/packages/core/src/components/ChoiceList/ChoiceList.jsx index e111d733c8..3704dc2ca3 100644 --- a/packages/core/src/components/ChoiceList/ChoiceList.jsx +++ b/packages/core/src/components/ChoiceList/ChoiceList.jsx @@ -8,13 +8,13 @@ import uniqueId from 'lodash.uniqueid'; /** * A `ChoiceList` component can be used to render a `select` menu, radio - * button group, or checkbox group, and their corresponding `label` or `legend`. + * button group, or checkbox group. * * You can manually pass in the `type` prop, but the real power of this component * is unleashed when you let it determine the type of fields for you. It takes * into account accessibility and usability best practices, so you can pass in - * an array of choices and let it determine whether the choices should be - * presented as radio buttons, checkboxes, or a `select` menu. + * an array of choices and let it determine what type of field would be best for + * the user. */ export class ChoiceList extends React.PureComponent { /** diff --git a/packages/core/src/components/ChoiceList/ChoiceList.test.jsx b/packages/core/src/components/ChoiceList/ChoiceList.test.jsx index d79eb5324c..ba5bbbfd1a 100644 --- a/packages/core/src/components/ChoiceList/ChoiceList.test.jsx +++ b/packages/core/src/components/ChoiceList/ChoiceList.test.jsx @@ -122,7 +122,7 @@ describe('ChoiceList', () => { .toBe(true); }); - it("doesn't pass an ID prop", () => { + it('doesn\'t pass an ID prop', () => { const data = shallowRender(); expect(data.wrapper.find('Choice').first().prop('id')) diff --git a/packages/core/src/components/ChoiceList/Select.example.jsx b/packages/core/src/components/ChoiceList/Select.example.jsx index eeb5843ad3..fd2f148e8e 100644 --- a/packages/core/src/components/ChoiceList/Select.example.jsx +++ b/packages/core/src/components/ChoiceList/Select.example.jsx @@ -8,6 +8,10 @@ export default () => { + + + + ); }; diff --git a/packages/core/src/components/ChoiceList/Select.jsx b/packages/core/src/components/ChoiceList/Select.jsx index 85d0076c0f..7e227b1ebf 100644 --- a/packages/core/src/components/ChoiceList/Select.jsx +++ b/packages/core/src/components/ChoiceList/Select.jsx @@ -66,10 +66,12 @@ Select.propTypes = { */ multiple: function(props, propName, componentName) { if (props[propName]) { + /* eslint-disable quotes */ return new Error( `'${propName}' supplied to '${componentName}'. [A11Y]: Users often don’t` + ` understand how to select multiple items from dropdowns. Use checkboxes instead.` ); + /* eslint-enable */ } }, name: PropTypes.string.isRequired, diff --git a/packages/core/src/components/ChoiceList/Select.scss b/packages/core/src/components/ChoiceList/Select.scss index 28cc1148f8..2515fad4ed 100644 --- a/packages/core/src/components/ChoiceList/Select.scss +++ b/packages/core/src/components/ChoiceList/Select.scss @@ -5,23 +5,31 @@ Select A select field allows users to select one option from a list. -@status prototype +@status recommended @uswds https://standards.usa.gov/components/form-controls/#dropdown Markup:
@@ -43,7 +51,7 @@ Style guide: components.select } /* -React - `` @react-component Select @@ -51,7 +59,7 @@ Style guide: components.select.react */ /* -React - `` +`` @react-component ChoiceList @@ -61,29 +69,44 @@ Style guide: components.select.choicelist-react /* --- -## Accessibility - -- Make sure your dropdown has a label. Don’t replace it with the default menu option (for example, removing the “State” label and just having the dropdown read “Select a state” by default). -- Don’t use JavaScript to automatically submit the form (or do anything else) when an option is selected. Auto-submission disrupts screen readers because they select each option as they read them. - -## Usability - ### When to use - Use sparingly — only when a user needs to choose from about seven to 15 possible options and you have limited space to display the options. -### When to consider something else +### When to consider alternatives -- If the list of options is very short. Use radio buttons instead. -- If the list of options is very long. Let users type the same information into a text input that suggests possible options instead. +- If the list of options is short. Use radio or checkboxes buttons instead. +- If the list of options is very long. Let users type the same information into a text input that suggests possible options instead. Long lists can sometimes be broken into multiple shorter lists by asking a few questions up-front to filter out options. - If you need to allow users to select more than one option at once. Users often don’t understand how to select multiple items from dropdowns. Use checkboxes instead. +- If the data is highly familiar to users, such as the day, month, or year of their birth. -### Guidance +## Guidance +- Choose a sensible order for the options to enable visual scanning of the lists. - Test dropdowns thoroughly with members of your target audience. Several usability experts suggest they should be the “UI of last resort.” Many users find them confusing and difficult to use. - Avoid making options in one dropdown menu change based on the input to another. Users often don’t understand how selecting an item in one impacts another. - When most users will (or should) pick a particular option, make it the default: `` - Don’t use JavaScript to automatically submit the form (or do anything else) when an option is selected. Offer a “submit” button at the end of the form instead. Users often change their choices multiple times. Auto-submission is also less accessible. +**[View the "Forms" guidelines for additional guidance and best practices.]({{root}}/guidelines/forms/)** + +## Accessibility + +- Make sure your dropdown has a label. Don’t replace it with the default menu option (for example, removing the “State” label and just having the dropdown read “Select a state” by default). +- Don’t use JavaScript to automatically submit the form (or do anything else) when an option is selected. Auto-submission disrupts screen readers because they select each option as they read them. +- On some devices the list of options cannot be zoomed, which means that some people with visual impairments cannot use them. + +## Related patterns + +- [Checkbox and Radio]({{root}}/components/choice) +- [Text field]({{root}}/components/text-field) + +## Learn more + +- [Form Guidelines]({{root}}/guidelines/forms/) +- [Asking for a date of birth](https://designnotes.blog.gov.uk/2013/12/05/asking-for-a-date-of-birth/) +- [Four steps for choosing form elements on the Web (PDF)](http://www.formsthatwork.com/files/Articles/dropdown.pdf) +- [Dropdowns: Design Guidelines](https://www.nngroup.com/articles/drop-down-menus/) + Style guide: components.select.guidance */ diff --git a/packages/core/src/components/ChoiceList/Select.test.jsx b/packages/core/src/components/ChoiceList/Select.test.jsx index fb2fadfab2..806577d58c 100644 --- a/packages/core/src/components/ChoiceList/Select.test.jsx +++ b/packages/core/src/components/ChoiceList/Select.test.jsx @@ -49,7 +49,7 @@ describe('Select', () => { expect(data.wrapper.hasClass('ds-c-field--select')).toBe(true); }); - it("renders
diff --git a/docs/components/badge/index.html b/docs/components/badge/index.html index 66b05f4862..53770d6db9 100644 --- a/docs/components/badge/index.html +++ b/docs/components/badge/index.html @@ -2,22 +2,63 @@ - Badge - CMSgov Design System + Badge - CMS.gov Design System
-
Alpha status: The design system is under active development and working towards a 1.0 release.
prototype

Badge

components/Badge/Badge

Badges draw attention to new or important content.

New -Due: December 31, 2018
Code snippet
<span class="ds-c-badge">New</span>
-<span class="ds-c-badge ds-u-fill--error">Due: December 31, 2018</span>
Today
Code snippet
<Badge>
-  Today
-</Badge>

Props

NameTypeDefaultDescription
+

CMS.gov Design System

beta

Badge

components/Badge/Badge.scss

US Web Design Standard

Badges hold small amounts of information and draw attention to new or important content.

5 +Badge label +Badge label
Code snippet
<span class="ds-c-badge">5</span>
+<span class="ds-c-badge">Badge label</span>
+<span class="ds-c-badge ds-u-font-size--base">Badge label</span>

Modifier: ds-c-badge--info

Info badge

5 +Badge label +Badge label
Code snippet
<span class="ds-c-badge ds-c-badge--info">5</span>
+<span class="ds-c-badge ds-c-badge--info">Badge label</span>
+<span class="ds-c-badge ds-c-badge--info ds-u-font-size--base">Badge label</span>

Modifier: ds-c-badge--success

Success badge

5 +Badge label +Badge label
Code snippet
<span class="ds-c-badge ds-c-badge--success">5</span>
+<span class="ds-c-badge ds-c-badge--success">Badge label</span>
+<span class="ds-c-badge ds-c-badge--success ds-u-font-size--base">Badge label</span>

Modifier: ds-c-badge--warn

Warning badge

5 +Badge label +Badge label
Code snippet
<span class="ds-c-badge ds-c-badge--warn">5</span>
+<span class="ds-c-badge ds-c-badge--warn">Badge label</span>
+<span class="ds-c-badge ds-c-badge--warn ds-u-font-size--base">Badge label</span>

Modifier: ds-c-badge--alert

Alert or error badge

5 +Badge label +Badge label
Code snippet
<span class="ds-c-badge ds-c-badge--alert">5</span>
+<span class="ds-c-badge ds-c-badge--alert">Badge label</span>
+<span class="ds-c-badge ds-c-badge--alert ds-u-font-size--base">Badge label</span>
diff --git a/docs/components/button/index.html b/docs/components/button/index.html index f85a2dab46..04c125a0ea 100644 --- a/docs/components/button/index.html +++ b/docs/components/button/index.html @@ -2,14 +2,14 @@ - Button - CMSgov Design System + Button - CMS.gov Design System
-
Alpha status: The design system is under active development and working towards a 1.0 release.
prototype

Button

components/Button/Button.scss

Use buttons to signal actions.

Link +

CMS.gov Design System

recommended

Button

components/Button/Button.scss

US Web Design Standard

Use buttons to signal actions.

Link
Code snippet
<a href="http://example.com" class="ds-c-button">Link</a>
@@ -55,10 +55,10 @@
   <button class="ds-c-button ds-c-button--danger">Button</button>
   <button class="ds-c-button ds-c-button--success">Button</button>
   <button class="ds-c-button ds-c-button--disabled-inverse">Button</button>
-</div>

Button icons

components/Button/Button.scss
    +</div>

Button icons

  • Add an inline SVG icon and it will become the same color as the button text. For the crispest icon rendering, ensure the icon has a square viewBox with values that are multiples of 8 (ie. 24x24).
  • Use the margin utility class to add spacing between the icon and button text.
  • -
Code snippet
<button class="ds-c-button">
+
Code snippet
<button class="ds-c-button">
   <svg class="ds-u-margin-right--1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" viewBox="0 0 24 24">
     <use xlink:href="/design-system/public/images/symbols.svg#download"></use>
   </svg>Left icon
@@ -82,16 +82,16 @@
 </button>
 <button class="ds-c-button ds-c-button--outline">
   No icon
-</button>

Button inline with field

components/Button/Button.scss

The button is the same height as a single-line text field.

-
Code snippet
<input type="text" class="ds-c-field ds-u-display--inline-block" />
-<button class="ds-c-button">Submit</button>

React

components/Button/Button

The Button component accepts its text as children (AKA inner HTML), which +</button>

Button inline with field

The button is the same height as a single-line text field.

+
Code snippet
<input type="text" class="ds-c-field ds-u-display--inline-block" />
+<button class="ds-c-button">Submit</button>

React

components/Button/Button.jsx

The Button component accepts its text as children (AKA inner HTML), which means you can also pass in HTML or custom components. This gives you a lot of flexibility and supports a variety of advanced use cases. The most common use case would be passing in an SVG icon along with the text.

In addition to the supported props listed, you can also pass in additional props, which will be passed to the rendered root component. For example, you could pass in a target prop to pass to the rendered anchor element.

-
Code snippet
<div>
+
Code snippet
<div>
   <Button>
     React button
   </Button>
@@ -103,47 +103,77 @@
   >
     React anchor button
   </Button>
-</div>

Props

NameTypeDefaultDescription
classNamestring

Additional classes to be added to the root button element. +</div>

Props

NameTypeDefaultDescription
classNamestring

Additional classes to be added to the root button element. Useful for adding utility classes.

-
componentelement, func

When provided, this will render the passed in component. This is useful when +

componentelement, func

When provided, this will render the passed in component. This is useful when integrating with React Router's <Link> or using your own custom component.

-
disabledbool
hrefstring

When provided the root component will render as an <a> element +

disabledbool
hrefstring

When provided the root component will render as an <a> element rather than button.

-
inversebool

Applies the inverse theme styling

-
onClickfunc

Returns the SyntheticEvent. +

inversebool

Applies the inverse theme styling

+
onClickfunc

Returns the SyntheticEvent. Not called when the button is disabled.

-
size'small', 'big'
type'button', 'submit''button'

Button type attribute

-
variation'primary', 'danger', 'success', 'transparent'
size'small', 'big'
type'button', 'submit''button'

Button type attribute

+
variation'primary', 'danger', 'success', 'transparent'
diff --git a/docs/components/choice/index.html b/docs/components/choice/index.html index 2e5d8ebb06..4837fa24db 100644 --- a/docs/components/choice/index.html +++ b/docs/components/choice/index.html @@ -2,14 +2,14 @@ - Checkbox & Radio - CMSgov Design System + Checkbox & Radio - CMS.gov Design System
-
Alpha status: The design system is under active development and working towards a 1.0 release.
prototype

Checkbox & Radio

components/ChoiceList/Choice.scss

US Web Design Standard

Checkbox

components/ChoiceList/Choice.scss

Checkboxes allow users to select one or more options from a visible list.

+

CMS.gov Design System

recommended

Checkbox & Radio

components/ChoiceList/Choice.scss

US Web Design Standard

Checkboxes allow users to select one or more options from a visible list, whereas radio buttons allow a user to select only one option.

Historical figures Select all that apply @@ -21,9 +21,19 @@
+
+ Select a historical figure + + + + + + +
- Select a historical figure + Historical figures + Select all that apply @@ -33,7 +43,16 @@
-
Code snippet
<fieldset class="ds-c-fieldset ds-u-margin-top--0">
+  
+ Select a historical figure + + + + + + +
+
Code snippet
<fieldset class="ds-c-fieldset ds-u-margin-top--0">
   <legend class="ds-c-label">Historical figures</legend>
   <span class="ds-c-field__hint">Select all that apply</span>
   <input class="ds-c-choice" id="truth-1" type="checkbox" name="historical-figures-1" value="truth" checked>
@@ -45,9 +64,19 @@
   <input class="ds-c-choice" id="carver-1" type="checkbox" name="historical-figures-1" disabled>
   <label for="carver-1">George Washington Carver</label>
 </fieldset>
+<fieldset class="ds-c-fieldset">
+  <legend class="ds-c-label">Select a historical figure</legend>
+  <input class="ds-c-choice" id="truth-3" type="radio" name="historical-figures-3" value="truth" checked>
+  <label for="truth-3">Sojourner Truth</label>
+  <input class="ds-c-choice" id="douglass-3" type="radio" name="historical-figures-3" value="douglass">
+  <label for="douglass-3">Frederick Douglass</label>
+  <input class="ds-c-choice" id="washington-3" type="radio" name="historical-figures-3" value="washington">
+  <label for="washington-3">Booker T. Washington</label>
+</fieldset>
 <div class="ds-base ds-base--inverse ds-u-padding--2 ds-u-margin-top--2">
   <fieldset class="ds-c-fieldset ds-u-margin-top--0">
-    <legend class="ds-c-label">Select a historical figure</legend>
+    <legend class="ds-c-label">Historical figures</legend>
+    <span class="ds-c-field__hint ds-c-field__hint--inverse">Select all that apply</span>
     <input class="ds-c-choice ds-c-choice--inverse" id="truth-2" type="checkbox" name="historical-figures-2" value="truth" checked>
     <label for="truth-2">Sojourner Truth</label>
     <input class="ds-c-choice ds-c-choice--inverse" id="douglass-2" type="checkbox" name="historical-figures-2" value="douglass">
@@ -57,36 +86,7 @@
     <input class="ds-c-choice ds-c-choice--inverse" id="carver-2" type="checkbox" name="historical-figures-2" disabled>
     <label for="carver-2">George Washington Carver</label>
   </fieldset>
-</div>

Radio option

components/ChoiceList/Choice.scss
- Select a historical figure - - - - - - -
-
-
- Select a historical figure - - - - - - -
-
Code snippet
<fieldset class="ds-c-fieldset ds-u-margin-top--0">
-  <legend class="ds-c-label">Select a historical figure</legend>
-  <input class="ds-c-choice" id="truth-3" type="radio" name="historical-figures-3" value="truth" checked>
-  <label for="truth-3">Sojourner Truth</label>
-  <input class="ds-c-choice" id="douglass-3" type="radio" name="historical-figures-3" value="douglass">
-  <label for="douglass-3">Frederick Douglass</label>
-  <input class="ds-c-choice" id="washington-3" type="radio" name="historical-figures-3" value="washington">
-  <label for="washington-3">Booker T. Washington</label>
-</fieldset>
-<div class="ds-base ds-base--inverse ds-u-padding--2 ds-u-margin-top--2">
-  <fieldset class="ds-c-fieldset ds-u-margin-top--0">
+  <fieldset class="ds-c-fieldset">
     <legend class="ds-c-label">Select a historical figure</legend>
     <input class="ds-c-choice ds-c-choice--inverse" id="truth-4" type="radio" name="historical-figures-4" value="truth" checked>
     <label for="truth-4">Sojourner Truth</label>
@@ -95,11 +95,11 @@
     <input class="ds-c-choice ds-c-choice--inverse" id="washington-4" type="radio" name="historical-figures-4" value="washington">
     <label for="washington-4">Booker T. Washington</label>
   </fieldset>
-</div>

React - <Choice>

components/ChoiceList/Choice

A Choice component can be used to render a checkbox or radio button. -Any undocumented props that you pass to this component will be passed +</div>

<Choice>

components/ChoiceList/Choice.jsx

A Choice component can be used to render a checkbox or radio button.

+

Any undocumented props that you pass to this component will be passed to the input element, so you can use this to set additional attributes if necessary.

-
Code snippet
<div>
+
Code snippet
<div>
   <Choice
     defaultChecked
     name="checkbox_choice"
@@ -135,25 +135,25 @@
   >
     Radio B
   </Choice>
-</div>

Props

NameTypeDefaultDescription
checkedbool

Setting this prop will render a read-only field and require an onChange +</div>

Props

NameTypeDefaultDescription
checkedbool

Setting this prop will render a read-only field and require an onChange event handler if you'd want to check its checked stated. Use defaultChecked if you want the field to be mutable.

-
classNamestring

Additional classes to be added to the root div element.

-
defaultCheckedbool

Sets the initial checked state and allows the user to check/uncheck the +

classNamestring

Additional classes to be added to the root div element.

+
defaultCheckedbool

Sets the initial checked state and allows the user to check/uncheck the field without also requiring an onChange event handler.

-
idstring

A unique ID to be used for the input field, as well as the label's +

idstring

A unique ID to be used for the input field, as well as the label's for attribute. A unique ID will be generated if one isn't provided.

-
inversedbool

Applies the "inverse" UI theme

-
name

Required

string

The input name attribute

-
onBlurfunc
onChangefunc
type'checkbox', 'radio''checkbox'
value

Required

number, string

The input value attribute

-

React - <ChoiceList>

components/ChoiceList/ChoiceList

A ChoiceList component can be used to render a select menu, radio -button group, or checkbox group, and their corresponding label or legend.

+
inversedbool

Applies the "inverse" UI theme

+
name

Required

string

The input name attribute

+
onBlurfunc
onChangefunc
type'checkbox', 'radio''checkbox'
value

Required

number, string

The input value attribute

+

<ChoiceList>

components/ChoiceList/ChoiceList.jsx

A ChoiceList component can be used to render a select menu, radio +button group, or checkbox group.

You can manually pass in the type prop, but the real power of this component is unleashed when you let it determine the type of fields for you. It takes into account accessibility and usability best practices, so you can pass in -an array of choices and let it determine whether the choices should be -presented as radio buttons, checkboxes, or a select menu.

-
Radio example
Checkbox exampleExample error message
Code snippet
<div>
+an array of choices and let it determine what type of field would be best for
+the user.

+
Radio example
Checkbox exampleExample error message
Code snippet
<div>
   <ChoiceList
     choices={[
       {
@@ -289,70 +289,77 @@
       name="select_choices_field_inverse"
     />
   </div>
-</div>

Props

NameTypeDefaultDescription
choices

Required

arrayOf[{checked, defaultChecked, disabled, label, value}]

The list of choices to be rendered. The number of choices you pass in may +</div>

Props

NameTypeDefaultDescription
choices

Required

arrayOf[{checked, defaultChecked, disabled, label, value}]

The list of choices to be rendered. The number of choices you pass in may affect the type of field(s) rendered. See type for more info.

-
classNamestring

Additional classes to be added to the root element.

-
disabledbool

Disables the entire field.

-
errorMessagestring
hintnode

Hint text

-
inversedbool

Applies the "inverse" UI theme

-
label

Required

node

The label for the entire list of choices

-
labelClassNamestring

Additional classes to be added to the FormLabel.

-
multiplebool

Allows the user to select multiple choices. Setting this to true results +

classNamestring

Additional classes to be added to the root element.

+
disabledbool

Disables the entire field.

+
errorMessagestring
hintnode

Hint text

+
inversedbool

Applies the "inverse" UI theme

+
label

Required

node

The label for the entire list of choices

+
labelClassNamestring

Additional classes to be added to the FormLabel.

+
multiplebool

Allows the user to select multiple choices. Setting this to true results in a list of checkbox fields to be rendered.

-
name

Required

string
onBlurfunc
onChangefunc
type'checkbox', 'radio', 'select'

You can manually set the type if you prefer things to be less magical. +

name

Required

string
onBlurfunc
onChangefunc
type'checkbox', 'radio', 'select'

You can manually set the type if you prefer things to be less magical. Otherwise, the type will be inferred by the other props, based on what's best for accessibility and usability. If multiple is true, then checkbox fields will be rendered. If less than 10 choices are passed in, then radio buttons will be rendered.

-
diff --git a/docs/components/index.html b/docs/components/index.html index f2934212d0..97190327d8 100644 --- a/docs/components/index.html +++ b/docs/components/index.html @@ -2,19 +2,19 @@ - Components - CMSgov Design System + Components - CMS.gov Design System
-
Alpha status: The design system is under active development and working towards a 1.0 release.

Components

components/_index.scss

Component class names follow the format: ds-c-[BLOCK]__[ELEMENT]--[MODIFIER]

+

CMS.gov Design System

Components

components/_index.scss

Component class names follow the format: ds-c-[BLOCK]__[ELEMENT]--[MODIFIER]

Components are designed, self-contained UI elements. In most cases a component will also have a corresponding React component.

diff --git a/docs/components/list/index.html b/docs/components/list/index.html index f0426ca4b3..eab7b1e099 100644 --- a/docs/components/list/index.html +++ b/docs/components/list/index.html @@ -2,30 +2,71 @@ - List - CMSgov Design System + List - CMS.gov Design System
-
Alpha status: The design system is under active development and working towards a 1.0 release.
prototype

List

components/List/List.scss
    +

    CMS.gov Design System

    recommended

    List

    components/List/List.scss

    US Web Design Standard

    Lists organize written information for users.

    Unordered list
    +
    • List item 1
    • List item 2
    • -
    Code snippet
    <ul class="ds-c-list">
    +
+
Ordered list
+
    +
  1. List item 1
  2. +
  3. List item 2
  4. +
Code snippet
<h6 class="ds-h6">Unordered list</h6>
+<ul class="ds-c-list">
+  <li>List item 1</li>
+  <li>List item 2</li>
+</ul>
+<h6 class="ds-h6">Ordered list</h6>
+<ol class="ds-c-list">
   <li>List item 1</li>
   <li>List item 2</li>
-</ul>

Modifier: ds-c-list--bare

Unstyled list (no margin, padding or list-style)

    +</ol>

Modifier: ds-c-list--bare

Unstyled list (no margin, padding or list-style)

Unordered list
+
  • List item 1
  • List item 2
  • -
Code snippet
<ul class="ds-c-list ds-c-list--bare">
+
+
Ordered list
+
    +
  1. List item 1
  2. +
  3. List item 2
  4. +
Code snippet
<h6 class="ds-h6">Unordered list</h6>
+<ul class="ds-c-list ds-c-list--bare">
+  <li>List item 1</li>
+  <li>List item 2</li>
+</ul>
+<h6 class="ds-h6">Ordered list</h6>
+<ol class="ds-c-list ds-c-list--bare">
   <li>List item 1</li>
   <li>List item 2</li>
-</ul>
+</ol>
diff --git a/docs/components/select/index.html b/docs/components/select/index.html index 0c36e1f25a..98defbb281 100644 --- a/docs/components/select/index.html +++ b/docs/components/select/index.html @@ -2,44 +2,60 @@ - Select - CMSgov Design System + Select - CMS.gov Design System
-
Alpha status: The design system is under active development and working towards a 1.0 release.
prototype

Select

components/ChoiceList/Select.scss

US Web Design Standard

A select field allows users to select one option from a list.

+

CMS.gov Design System

recommended

Select

components/ChoiceList/Select.scss

US Web Design Standard

A select field allows users to select one option from a list.

-
Code snippet
<label class="ds-c-label ds-u-margin-top--0" for="options">Field label</label>
+
Code snippet
<label class="ds-c-label ds-u-margin-top--0" for="options">Field label</label>
 <select class="ds-c-field ds-c-field--select" name="options" id="options">
-  <option value="value1">Option A</option>
-  <option value="value2">Option B</option>
-  <option value="value3">Option C</option>
+  <option value="1">Option 1</option>
+  <option value="2">Option 2</option>
+  <option value="3">Option 3</option>
+  <option value="4">Option 4</option>
+  <option value="5">Option 5</option>
+  <option value="6">Option 6</option>
+  <option value="7">Option 7</option>
 </select>
 <div class="ds-base ds-base--inverse ds-u-padding--2 ds-u-margin-top--2">
   <label class="ds-c-label ds-u-margin-top--0" for="options-inverse">Field label</label>
   <select class="ds-c-field ds-c-field--select ds-c-field--inverse" name="options-inverse" id="options-inverse">
-    <option value="value1">Option A</option>
-    <option value="value2">Option B</option>
-    <option value="value3">Option C</option>
+    <option value="1">Option 1</option>
+    <option value="2">Option 2</option>
+    <option value="3">Option 3</option>
+    <option value="4">Option 4</option>
+    <option value="5">Option 5</option>
+    <option value="6">Option 6</option>
+    <option value="7">Option 7</option>
   </select>
-</div>

React - <Select>

components/ChoiceList/Select

A Select component can be used to render an HTML select menu. +</div>

<Select>

components/ChoiceList/Select.jsx

A Select component can be used to render an HTML select menu. Any undocumented props that you pass to this component will be passed to the select element, so you can use this to set additional attributes if necessary.

-
Code snippet
<Select
+
Code snippet
<Select
   defaultValue="2"
   name="select-demo"
 >
@@ -52,25 +68,37 @@
   <option value="3">
     Option 3
   </option>
-</Select>

Props

NameTypeDefaultDescription
classNamestring

Additional classes to be added to the root select element.

-
defaultValuestring

Sets the initial selected state and allows the user to select a different + <option value="4"> + Option 4 + </option> + <option value="5"> + Option 5 + </option> + <option value="6"> + Option 6 + </option> + <option value="7"> + Option 7 + </option> +</Select>

Props

NameTypeDefaultDescription
classNamestring

Additional classes to be added to the root select element.

+
defaultValuestring

Sets the initial selected state and allows the user to select a different option without also requiring an onChange event handler.

-
disabledbool
idstring

A unique ID to be used for the select field. A unique ID will be generated +

disabledbool
idstring

A unique ID to be used for the select field. A unique ID will be generated if one isn't provided.

-
inversedbool

Applies the "inverse" UI theme

-
multiplecustom

Setting this prop to true will result in an error message due to +

inversedbool

Applies the "inverse" UI theme

+
multiplecustom

Setting this prop to true will result in an error message due to accessibility concerns. See the usability guidelines for more info.

-
name

Required

string
onBlurfunc
onChangefunc
valuestring

Setting this prop will render a read-only field and require an onChange +

name

Required

string
onBlurfunc
onChangefunc
valuestring

Setting this prop will render a read-only field and require an onChange event handler if you'd want to change its selected stated. Use defaultValue if you want the field to be mutable.

-

React - <ChoiceList>

components/ChoiceList/ChoiceList

A ChoiceList component can be used to render a select menu, radio -button group, or checkbox group, and their corresponding label or legend.

+

<ChoiceList>

components/ChoiceList/ChoiceList.jsx

A ChoiceList component can be used to render a select menu, radio +button group, or checkbox group.

You can manually pass in the type prop, but the real power of this component is unleashed when you let it determine the type of fields for you. It takes into account accessibility and usability best practices, so you can pass in -an array of choices and let it determine whether the choices should be -presented as radio buttons, checkboxes, or a select menu.

-
Radio example
Checkbox exampleExample error message
Code snippet
<div>
+an array of choices and let it determine what type of field would be best for
+the user.

+
Radio example
Checkbox exampleExample error message
Code snippet
<div>
   <ChoiceList
     choices={[
       {
@@ -206,48 +234,63 @@
       name="select_choices_field_inverse"
     />
   </div>
-</div>

Props

NameTypeDefaultDescription
choices

Required

arrayOf[{checked, defaultChecked, disabled, label, value}]

The list of choices to be rendered. The number of choices you pass in may +</div>

Props

NameTypeDefaultDescription
choices

Required

arrayOf[{checked, defaultChecked, disabled, label, value}]

The list of choices to be rendered. The number of choices you pass in may affect the type of field(s) rendered. See type for more info.

-
classNamestring

Additional classes to be added to the root element.

-
disabledbool

Disables the entire field.

-
errorMessagestring
hintnode

Hint text

-
inversedbool

Applies the "inverse" UI theme

-
label

Required

node

The label for the entire list of choices

-
labelClassNamestring

Additional classes to be added to the FormLabel.

-
multiplebool

Allows the user to select multiple choices. Setting this to true results +

classNamestring

Additional classes to be added to the root element.

+
disabledbool

Disables the entire field.

+
errorMessagestring
hintnode

Hint text

+
inversedbool

Applies the "inverse" UI theme

+
label

Required

node

The label for the entire list of choices

+
labelClassNamestring

Additional classes to be added to the FormLabel.

+
multiplebool

Allows the user to select multiple choices. Setting this to true results in a list of checkbox fields to be rendered.

-
name

Required

string
onBlurfunc
onChangefunc
type'checkbox', 'radio', 'select'

You can manually set the type if you prefer things to be less magical. +

name

Required

string
onBlurfunc
onChangefunc
type'checkbox', 'radio', 'select'

You can manually set the type if you prefer things to be less magical. Otherwise, the type will be inferred by the other props, based on what's best for accessibility and usability. If multiple is true, then checkbox fields will be rendered. If less than 10 choices are passed in, then radio buttons will be rendered.

-
diff --git a/docs/components/table/index.html b/docs/components/table/index.html index 7ece3057c6..ee063c44dd 100644 --- a/docs/components/table/index.html +++ b/docs/components/table/index.html @@ -2,70 +2,164 @@ - Table - CMSgov Design System + Table - CMS.gov Design System
-
Alpha status: The design system is under active development and working towards a 1.0 release.
prototype

Table

components/Table/Table.scss
+

CMS.gov Design System

recommended

Table

components/Table/Table.scss

US Web Design Standard

Tables show tabular data in columns and rows.

+ + + + + + + -
NameRate Favorite fruit
Fred51.25% Apples
Tamara98.70%Strawberries
Code snippet
<table class="ds-c-table">
+
Code snippet
<table class="ds-c-table">
   <thead>
     <tr>
       <th>Name</th>
+      <th class="ds-u-text-align--right">Rate</th>
       <th>Favorite fruit</th>
     </tr>
   </thead>
   <tbody>
     <tr>
       <td>Fred</td>
+      <td class="ds-u-text-align--right">51.25%</td>
       <td>Apples</td>
     </tr>
+    <tr>
+      <td>Tamara</td>
+      <td class="ds-u-text-align--right">98.70%</td>
+      <td>Strawberries</td>
+    </tr>
   </tbody>
-</table>

Modifier: ds-c-table--borderless

Borderless table

+</table>

Modifier: ds-c-table--borderless

Borderless table

+ + + + + + + -
NameRate Favorite fruit
Fred51.25% Apples
Tamara98.70%Strawberries
Code snippet
<table class="ds-c-table ds-c-table--borderless">
+
Code snippet
<table class="ds-c-table ds-c-table--borderless">
   <thead>
     <tr>
       <th>Name</th>
+      <th class="ds-u-text-align--right">Rate</th>
       <th>Favorite fruit</th>
     </tr>
   </thead>
   <tbody>
     <tr>
       <td>Fred</td>
+      <td class="ds-u-text-align--right">51.25%</td>
       <td>Apples</td>
     </tr>
+    <tr>
+      <td>Tamara</td>
+      <td class="ds-u-text-align--right">98.70%</td>
+      <td>Strawberries</td>
+    </tr>
+  </tbody>
+</table>

Table with two headers and a caption

+ + + + + + + + + + + + + + + + + + + + +
Household members
NameStreetEmployer
John Doe123 Braavos Ave.Acme Co.
Jane Doe456 King's LandingAcme Co.
Code snippet
<table class="ds-c-table">
+  <caption class="ds-c-table__caption">Household members</caption>
+  <thead>
+    <tr>
+      <th scope="col">Name</th>
+      <th scope="col">Street</th>
+      <th scope="col">Employer</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <th scope="row">John Doe</th>
+      <td>123 Braavos Ave.</td>
+      <td>Acme Co.</td>
+    </tr>
+    <tr>
+      <th scope="row">Jane Doe</th>
+      <td>456 King's Landing</td>
+      <td>Acme Co.</td>
+    </tr>
   </tbody>
-</table>
+</table> diff --git a/docs/components/tabs/index.html b/docs/components/tabs/index.html index ccf4881f55..2e555db9b9 100644 --- a/docs/components/tabs/index.html +++ b/docs/components/tabs/index.html @@ -2,14 +2,14 @@ - Tabs - CMSgov Design System + Tabs - CMS.gov Design System
-
Alpha status: The design system is under active development and working towards a 1.0 release.
prototype

Tabs

components/Tabs/Tabs.scss

Tabs can be used as a navigation pattern, allowing a user to switch between panels of related content within the same context.

The Bill of Rights is the first ten amendments to the United States Constitution.
Code snippet
<Tabs>
+
The Bill of Rights is the first ten amendments to the United States Constitution.
Code snippet
<Tabs>
   <TabPanel
     id="summary"
     tab="Summary"
@@ -182,21 +182,21 @@
       </li>
     </ol>
   </TabPanel>
-</Tabs>

Props

NameTypeDefaultDescription
defaultSelectedIdstring

Default selected TabPanel's id. If this isn't set, the first TabPanel +</Tabs>

Props

NameTypeDefaultDescription
defaultSelectedIdstring

Default selected TabPanel's id. If this isn't set, the first TabPanel will be selected.

-
onChangefunc

A callback function that's invoked when the selected tab is changed. +

onChangefunc

A callback function that's invoked when the selected tab is changed. (selectedId, prevSelectedId) => void

-
tablistClassNamestring

Additional classes to be added to the component wrapping the tabs

-

<TabPanel>

components/Tabs/TabPanel

Props

NameTypeDefaultDescription
classNamestring

Additional classes to be added to the root element.

-
id

Required

string

A unique id, to be used on the rendered panel element.

-
selectedboolfalse
tabstring

The associated tab's label. Only applicable when the panel is a +

tablistClassNamestring

Additional classes to be added to the component wrapping the tabs

+

<TabPanel>

components/Tabs/TabPanel.jsx

Props

NameTypeDefaultDescription
classNamestring

Additional classes to be added to the root element.

+
id

Required

string

A unique id, to be used on the rendered panel element.

+
selectedboolfalse
tabstring

The associated tab's label. Only applicable when the panel is a child of Tabs.

-
tabClassNamestring

Additional classes for the associated tab. Only applicable when the panel +

tabClassNamestring

Additional classes for the associated tab. Only applicable when the panel is a child of Tabs.

-
tabHrefstring

The associated tab's href. Only applicable when the panel is a +

tabHrefstring

The associated tab's href. Only applicable when the panel is a child of Tabs.

-
tabIdstring

The id of the associated Tab. Used for the aria-labelledby attribute

-
tabIdstring

The id of the associated Tab. Used for the aria-labelledby attribute

+

<Tab>

components/Tabs/Tab.jsx
Code snippet
<div
   className="ds-c-tabs"
   role="tablist"
 >
@@ -213,15 +213,30 @@
   >
     Other tab
   </Tab>
-</div>

Props

NameTypeDefaultDescription
classNamestring

Additional classes to be added to the root tab element.

-
id

Required

string

A unique id, to be used on the rendered tab element.

-
hrefstring

You can optionally set the href attribute used for the tab. This can be +</div>

Props

NameTypeDefaultDescription
classNamestring

Additional classes to be added to the root tab element.

+
id

Required

string

A unique id, to be used on the rendered tab element.

+
hrefstring

You can optionally set the href attribute used for the tab. This can be useful if you want to use relative links rather than a URL hash (the default)

-
onClickfunc

Called when the tab is clicked, with the following arguments: +

onClickfunc

Called when the tab is clicked, with the following arguments: SyntheticEvent, id, panelId

-
panelId

Required

string

The id of the associated TabPanel. Used for the aria-controls attribute

-
selectedboolfalse
panelId

Required

string

The id of the associated TabPanel. Used for the aria-controls attribute

+
selectedboolfalse
diff --git a/docs/components/text-field/index.html b/docs/components/text-field/index.html index f69a3cf066..e4cdbf5422 100644 --- a/docs/components/text-field/index.html +++ b/docs/components/text-field/index.html @@ -2,14 +2,14 @@ - Text field - CMSgov Design System + Text field - CMS.gov Design System
-
Alpha status: The design system is under active development and working towards a 1.0 release.
prototype

Text field

components/TextField/TextField.scss

US Web Design Standard

A text field can be an input or textarea HTML element.

Inverse theme

components/TextField/TextField.scss
+<textarea class="ds-c-field" id="input-bio" name="bio" rows="5"></textarea>
Code snippet
<div class="ds-base--inverse ds-u-padding--2">
+
Code snippet
<div class="ds-base--inverse ds-u-padding--2">
   <label class="ds-c-label ds-u-margin-top--0" for="input-firstname-2">
     First name
     <span class="ds-c-field__hint ds-c-field__hint--inverse">Helpful hint text</span>
@@ -77,10 +77,10 @@
   <input class="ds-c-field ds-c-field--inverse ds-c-field--success" id="input-username-2" name="username" type="text">
   <label class="ds-c-label" for="input-bio-2">Bio</label>
   <textarea class="ds-c-field ds-c-field--inverse" id="input-bio-2" name="bio" rows="5"></textarea>
-</div>

React - <TextField>

components/TextField/TextField

The TextField component affords a user to type text into a form. +</div>

<TextField>

components/TextField/TextField.jsx

The TextField component affords a user to type text into a form. By default it renders a field for capturing a single line of text, but can be configured to support multiline text.

-
Code snippet
<div>
+
Code snippet
<div>
   <TextField
     defaultValue="Example value"
     label="Single line"
@@ -119,47 +119,69 @@
       name="inversed_disabled_example"
     />
   </div>
-</div>

Props

NameTypeDefaultDescription
classNamestring

Additional classes to be added to the root element

-
defaultValuestring

Default value of the text field, if any. Use this for an uncontrolled +</div>

Props

NameTypeDefaultDescription
classNamestring

Additional classes to be added to the root element

+
defaultValuestring

Default value of the text field, if any. Use this for an uncontrolled component; otherwise, use the value property

-
disabledbool
errorMessagestring
fieldClassNamestring

Additional classes to be added to the field element

-
hintnode

Hint text

-
inversedbool

Applies the "inverse" UI theme

-
label

Required

node

The label for the entire list of choices

-
labelClassNamestring

Additional classes to be added to the FormLabel

-
multilinebool

Whether or not the textfield is a multiline textfield

-
name

Required

string
onBlurfunc
onChangefunc
rowsnumber, string

Optionally specify the number of visible text lines for the control. Only +

disabledbool
errorMessagestring
fieldClassNamestring

Additional classes to be added to the field element

+
hintnode

Hint text

+
inversedbool

Applies the "inverse" UI theme

+
label

Required

node

The label for the entire list of choices

+
labelClassNamestring

Additional classes to be added to the FormLabel

+
multilinebool

Whether or not the textfield is a multiline textfield

+
name

Required

string
onBlurfunc
onChangefunc
rowsnumber, string

Optionally specify the number of visible text lines for the control. Only applicable if this is a multiline field

-
typestring'text'

Any valid input type.

-
valuestring

Current value of the text field. Use this for a controlled component where +

typestring'text'

Any valid input type.

+
valuestring

Current value of the text field. Use this for a controlled component where you are maintaining its current state; otherwise, use the defaultValue property

-
diff --git a/docs/components/vertical-nav/index.html b/docs/components/vertical-nav/index.html index 1247b2ccde..3ae56b0896 100644 --- a/docs/components/vertical-nav/index.html +++ b/docs/components/vertical-nav/index.html @@ -2,34 +2,14 @@ - Vertical navigation - CMSgov Design System + Vertical navigation - CMS.gov Design System
-
Alpha status: The design system is under active development and working towards a 1.0 release.
beta

Vertical navigation

components/VerticalNav/VerticalNav.scss

US Web Design Standard

Code snippet
<ul class="ds-c-vertical-nav">
-  <li class="ds-c-vertical-nav__item">
-    <a class="ds-c-vertical-nav__link ds-c-vertical-nav__link--current" href="http://example.com">Current page</a>
-  </li>
-  <li class="ds-c-vertical-nav__item">
-    <a class="ds-c-vertical-nav__link" href="http://example.com">Parent link</a>
-  </li>
-  <li class="ds-c-vertical-nav__item">
-    <a class="ds-c-vertical-nav__link" href="http://example.com">Parent link</a>
-  </li>
-</ul>

Nested menus

components/VerticalNav/VerticalNav.scss
Code snippet
<ul class="ds-c-vertical-nav">
   <li class="ds-c-vertical-nav__item">
     <a class="ds-c-vertical-nav__link" href="http://example.com">Parent link</a>
   </li>
@@ -87,9 +67,9 @@
   <li class="ds-c-vertical-nav__item">
     <a class="ds-c-vertical-nav__link" href="http://example.com">Parent link</a>
   </li>
-</ul>

React - <VerticalNav>

components/VerticalNav/VerticalNav

The VerticalNav React component accepts list items as a JSON object and +</ul>

<VerticalNav>

components/VerticalNav/VerticalNav.jsx

The VerticalNav React component accepts list items as a JSON object and includes additional functionality like collapsible nested menus.

-
Code snippet
<VerticalNav
+
Code snippet
<VerticalNav
   items={[
     {
       label: 'Home',
@@ -116,45 +96,38 @@
     }
   ]}
   selectedId="team"
-/>

Props

NameTypeDefaultDescription
classNamestring

Additional classes to be added to the root element

-
collapsedboolfalse

Whether or not the menu is in a collapsed state

-
selectedIdstring

The id of the selected VerticalNavItem. This will also set the +/>

Props

NameTypeDefaultDescription
classNamestring

Additional classes to be added to the root element

+
collapsedboolfalse

Whether or not the menu is in a collapsed state

+
selectedIdstring

The id of the selected VerticalNavItem. This will also set the selected prop on the item's parents.

-
idstring
items

Required

arrayOf[object]

An array of VerticalNavItem data objects

-
nestedbool

Indicates this list is nested within another nav item.

-
onLinkClickfunc

Called when one of the nav links is clicked, with the following arguments: +

idstring
items

Required

arrayOf[object]

An array of VerticalNavItem data objects

+
nestedbool

Indicates this list is nested within another nav item.

+
onLinkClickfunc

Called when one of the nav links is clicked, with the following arguments: SyntheticEvent, id, url

-

React - <VerticalNavItem>

components/VerticalNav/VerticalNavItem

Props

NameTypeDefaultDescription
ariaCollapsedStateButtonLabelstring'Expand sub-navigation'

Aria label for the toggle button when the sub-navigation is collapsed

-
ariaExpandedStateButtonLabelstring'Collapse sub-navigation'

Aria label for the toggle button when the sub-navigation is expanded

-
classNamestring

Additional classes to be added to the root element

-
defaultCollapsedboolfalse

Whether or not the item's sub-navigation is in a collapsed state by default

-
onClickfunc

Called when the item is clicked, with the following arguments: +

<VerticalNavItem>

components/VerticalNav/VerticalNavItem.jsx

Props

NameTypeDefaultDescription
ariaCollapsedStateButtonLabelstring'Expand sub-navigation'

Aria label for the toggle button when the sub-navigation is collapsed

+
ariaExpandedStateButtonLabelstring'Collapse sub-navigation'

Aria label for the toggle button when the sub-navigation is expanded

+
classNamestring

Additional classes to be added to the root element

+
defaultCollapsedboolfalse

Whether or not the item's sub-navigation is in a collapsed state by default

+
onClickfunc

Called when the item is clicked, with the following arguments: SyntheticEvent, id, url.

This takes precedence over the VerticalNav onLinkClick prop

-
onSubnavTogglefunc

Called when this item's subnav is collapsed or expanded, with the +

onSubnavTogglefunc

Called when this item's subnav is collapsed or expanded, with the following arguments: id, collapsed

-
idstring

Optional identifier. This can be handy if you're passing in an +

idstring

Optional identifier. This can be handy if you're passing in an onClick handler. A unique ID will be generated if one isn't provided.

-
itemsarrayOf[VerticalNavItem.propTypes]

An array of nested VerticalNavItem data objects to be rendered in a +

itemsarrayOf[VerticalNavItem.propTypes]

An array of nested VerticalNavItem data objects to be rendered in a sub-navigation list.

-
label

Required

node

Text to render for this nav item

-
urlstring

A URL to navigate to if this item is a link

-
selectedbool

If this item is currently selected

-
label

Required

node

Text to render for this nav item

+
urlstring

A URL to navigate to if this item is a link

+
selectedbool

If this item is currently selected

+
diff --git a/docs/guidelines/code-conventions/index.html b/docs/guidelines/code-conventions/index.html index 6f844a292e..da334e4675 100644 --- a/docs/guidelines/code-conventions/index.html +++ b/docs/guidelines/code-conventions/index.html @@ -2,14 +2,14 @@ - Code conventions - CMSgov Design System + Code conventions - CMS.gov Design System
-
Alpha status: The design system is under active development and working towards a 1.0 release.

Code conventions

+

CMS.gov Design System

Code conventions

The design system favors clarity over succinctness. This means the design system may be verbose, but it should deliver clarity and resilience in exchange. Keeping CSS legible and scalable means sacrificing a shorter syntax.

@@ -65,7 +65,7 @@

Credits

diff --git a/docs/guidelines/forms/index.html b/docs/guidelines/forms/index.html new file mode 100644 index 0000000000..0015c94a5f --- /dev/null +++ b/docs/guidelines/forms/index.html @@ -0,0 +1,66 @@ + + + + + Forms - CMS.gov Design System + + + + + +
+

CMS.gov Design System

Forms

The design system includes components for the standard HTML form elements: checkboxes and radio buttons, text fields, select menus, fieldsets, labels, and so on.

+

Below are some best practices your project should aim to follow in order to provide the most accessible and usable experience for your users. Additional guidance, specific to each form field, is provided in each component's guidance tab.

+

Best practices

+
    +
  • Keep forms as simple as possible – only ask for what's absolutely needed.
  • +
  • Display form fields in the same order in HTML as they appear on screen. Do not use CSS to rearrange the form fields. Screen readers narrate, and keyboard navigate, forms in the order they appear in the HTML.
  • +
  • Ensure there's sufficient spacing between form fields. Your fields shouldn't feel cramped and users shouldn't confuse which labels and hint text belong to which fields. Use the margin or padding utility classes, if necessary, to add extra spacing.
  • +
+

Labels

+
    +
  • Apply the ds-c-label class to <label> elements.
  • +
  • Each field should have a <label>. Never use a field's placeholder attribute as the primary way to label the field.
  • +
  • Labels should have a for attribute, referencing the corresponding input's unique id attribute. Only one label can be associated to each unique form element.
  • +
  • Labels should be placed above their fields.
  • +
  • Label text should be short and in sentence case.
  • +
  • Avoid colons at the end of labels.
  • +
+

Hint text

+
    +
  • Place hint text within the field's <label> element.
  • +
  • Apply the ds-c-field__hint class to hint text.
  • +
  • Use hint text for supporting contextual help, this will always be shown.
  • +
  • Hint text should sit above a form field, and below the label text.
  • +
+

Validation

+
    +
  • Place inline validation messages within the field's <label> element.
  • +
  • Visually align inline validation messages with the input fields, so people using screen magnifiers can read them quickly.
  • +
+
Example
+
<label class="ds-c-label" for="lastname">
+  ID Number
+  <span class="ds-c-field__hint ds-u-color--error" role="alert">
+    Please enter your ID Number
+  </span>
+  <span class="ds-c-field__hint">
+    It's on your benefit card and benefit letter. For example, ‘12 34 56B’.
+  </span>
+</label>

Required and Optional fields

+

If most of the fields in a form are required, indicate the few that are optional. If most of the fields in a form are optional, indicate the few that are required. When indicating what form fields are either required or optional, always use text.

+

Whichever choice you choose, ensure the pattern is consistent when the form is split across multiple pages.

+

Learn more

+ +
+
+ + + + \ No newline at end of file diff --git a/docs/guidelines/grid/index.html b/docs/guidelines/grid/index.html index a951fe6860..193e002ec8 100644 --- a/docs/guidelines/grid/index.html +++ b/docs/guidelines/grid/index.html @@ -2,17 +2,18 @@ - Grid layout - CMSgov Design System + Grid layout - CMS.gov Design System
-
Alpha status: The design system is under active development and working towards a 1.0 release.

Grid layout

Choosing a suitable grid framework is dependent on several factors. Some of these factors are browser support, if and which CSS preprocessor is being used, degree of customizability, and layout mode preference.

-

As a result, the design system doesn't currently include its own grid framework and instead suggests that you pick from existing solutions, based on what works best for your project and preferences.

+

CMS.gov Design System

Grid layout

Choosing a suitable grid solution is dependent on several factors. Some of these factors are browser support, if and which CSS preprocessor is being used, degree of customizability, and layout mode preference.

+

As a result, the design system doesn't currently include its own grid framework and instead suggests that you create your own simple grid solution, or pick from existing solutions, based on what works best for your project and preferences.

Below is a non-exhaustive list of existing grid solutions:

diff --git a/docs/guidelines/i18n/index.html b/docs/guidelines/i18n/index.html index e6d23deef5..19fa2273a3 100644 --- a/docs/guidelines/i18n/index.html +++ b/docs/guidelines/i18n/index.html @@ -2,14 +2,14 @@ - Internationalization - CMSgov Design System + Internationalization - CMS.gov Design System
-
Alpha status: The design system is under active development and working towards a 1.0 release.

Internationalization

The design system's React components accepts all text as props, and it is the app's responsibility to provide the internationalized strings.

+

CMS.gov Design System

Internationalization

The design system's React components accepts all text as props, and it is the app's responsibility to provide the internationalized strings.

For example:

import {Alert} from '@cmsgov/design-system-core';
 import i18n from 'i18n';
@@ -24,7 +24,7 @@
   
diff --git a/docs/guidelines/responsive/index.html b/docs/guidelines/responsive/index.html index b878d000e7..5f6ffbd52e 100644 --- a/docs/guidelines/responsive/index.html +++ b/docs/guidelines/responsive/index.html @@ -2,14 +2,14 @@ - Responsive design - CMSgov Design System + Responsive design - CMS.gov Design System
-
Alpha status: The design system is under active development and working towards a 1.0 release.

Responsive design

Responsive demo

+

CMS.gov Design System

Responsive design

Responsive demo

The design system's utility and typography classes are built with reponsive web design in mind and is built to be mobile first. Use the prefixes sm, md, lg, and xl to quickly and easily adjust your layout and content for different screen sizes and devices. Further info and usage examples are available on the individual documentation pages.

@@ -58,7 +58,7 @@

What supports a responsive prefix

diff --git a/docs/index.html b/docs/index.html index f9fd95cbaa..47a90de048 100644 --- a/docs/index.html +++ b/docs/index.html @@ -2,14 +2,14 @@ - Getting started - CMSgov Design System + Getting started - CMS.gov Design System
-
Alpha status: The design system is under active development and working towards a 1.0 release.

Getting started

The design system is a shared set of design and development resources for creating accessible and consistent websites. The design system includes things like principles, high-level guidelines (UX conventions, UI code conventions, etc), UI components, documentation, tools, resources, and more.

+

CMS.gov Design System

Getting started

The design system is a shared set of design and development resources for creating accessible and consistent websites. The design system includes things like principles, high-level guidelines (UX conventions, UI code conventions, etc), UI components, documentation, tools, resources, and more.

Installation

We suggest using a package manager like NPM or Yarn to install the design system package if you're working on a real world project. This way you can easily update the package when there's a new release.

@@ -84,11 +84,13 @@

File Structure

├── utilities Functional CSS classes to apply individual traits └── vendor Third-party libraries

Examples

View example projects to see ways you can use the design system and incorporate it into your development process.

+

Credits

+

Our design system is a variation and extension of the U.S. Web Design Standards. Thank you to 18F and GSA for the hard work they put into the Standards. We're excited to contribute our learnings and progress.

diff --git a/docs/public/scripts/index.js b/docs/public/scripts/index.js index 77385b6c12..eeb42f4694 100644 --- a/docs/public/scripts/index.js +++ b/docs/public/scripts/index.js @@ -1,4 +1,4 @@ -!function(modules){function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}var installedModules={};__webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.i=function(value){return value},__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{configurable:!1,enumerable:!0,get:getter})},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function(){return module.default}:function(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="/",__webpack_require__(__webpack_require__.s=314)}([function(module,exports){function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}function runTimeout(fun){if(cachedSetTimeout===setTimeout)return setTimeout(fun,0);if((cachedSetTimeout===defaultSetTimout||!cachedSetTimeout)&&setTimeout)return cachedSetTimeout=setTimeout,setTimeout(fun,0);try{return cachedSetTimeout(fun,0)}catch(e){try{return cachedSetTimeout.call(null,fun,0)}catch(e){return cachedSetTimeout.call(this,fun,0)}}}function runClearTimeout(marker){if(cachedClearTimeout===clearTimeout)return clearTimeout(marker);if((cachedClearTimeout===defaultClearTimeout||!cachedClearTimeout)&&clearTimeout)return cachedClearTimeout=clearTimeout,clearTimeout(marker);try{return cachedClearTimeout(marker)}catch(e){try{return cachedClearTimeout.call(null,marker)}catch(e){return cachedClearTimeout.call(this,marker)}}}function cleanUpNextTick(){draining&¤tQueue&&(draining=!1,currentQueue.length?queue=currentQueue.concat(queue):queueIndex=-1,queue.length&&drainQueue())}function drainQueue(){if(!draining){var timeout=runTimeout(cleanUpNextTick);draining=!0;for(var len=queue.length;len;){for(currentQueue=queue,queue=[];++queueIndex1)for(var i=1;i1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];var argIndex=0,message="Warning: "+format.replace(/%s/g,function(){return args[argIndex++]});try{throw new Error(message)}catch(x){}};warning=function(condition,format){if(void 0===format)throw new Error("`warning(condition, format, ...args)` requires a warning message argument");if(0!==format.indexOf("Failed Composite propType: ")&&!condition){for(var _len2=arguments.length,args=Array(_len2>2?_len2-2:0),_key2=2;_key2<_len2;_key2++)args[_key2-2]=arguments[_key2];printWarning.apply(void 0,[format].concat(args))}}}(),module.exports=warning}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";module.exports=__webpack_require__(173)},function(module,exports,__webpack_require__){"use strict";function reactProdInvariant(code){for(var argCount=arguments.length-1,message="Minified React error #"+code+"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant="+code,argIdx=0;argIdx1)for(var i=1;i1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];var argIndex=0,message="Warning: "+format.replace(/%s/g,function(){return args[argIndex++]});try{throw new Error(message)}catch(x){}};warning=function(condition,format){if(void 0===format)throw new Error("`warning(condition, format, ...args)` requires a warning message argument");if(0!==format.indexOf("Failed Composite propType: ")&&!condition){for(var _len2=arguments.length,args=Array(_len2>2?_len2-2:0),_key2=2;_key2<_len2;_key2++)args[_key2-2]=arguments[_key2];printWarning.apply(void 0,[format].concat(args))}}}(),module.exports=warning}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";module.exports=__webpack_require__(173)},function(module,exports,__webpack_require__){"use strict";function reactProdInvariant(code){for(var argCount=arguments.length-1,message="Minified React error #"+code+"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant="+code,argIdx=0;argIdx1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];var argIndex=0,message="Warning: "+format.replace(/%s/g,function(){return args[argIndex++]});try{throw new Error(message)}catch(x){}};warning=function(condition,format){if(void 0===format)throw new Error("`warning(condition, format, ...args)` requires a warning message argument");if(0!==format.indexOf("Failed Composite propType: ")&&!condition){for(var _len2=arguments.length,args=Array(_len2>2?_len2-2:0),_key2=2;_key2<_len2;_key2++)args[_key2-2]=arguments[_key2];printWarning.apply(void 0,[format].concat(args))}}}(),module.exports=warning}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";(function(process){function SyntheticEvent(dispatchConfig,targetInst,nativeEvent,nativeEventTarget){"production"!==process.env.NODE_ENV&&(delete this.nativeEvent,delete this.preventDefault,delete this.stopPropagation),this.dispatchConfig=dispatchConfig,this._targetInst=targetInst,this.nativeEvent=nativeEvent;var Interface=this.constructor.Interface;for(var propName in Interface)if(Interface.hasOwnProperty(propName)){"production"!==process.env.NODE_ENV&&delete this[propName];var normalize=Interface[propName];normalize?this[propName]=normalize(nativeEvent):"target"===propName?this.target=nativeEventTarget:this[propName]=nativeEvent[propName]}var defaultPrevented=null!=nativeEvent.defaultPrevented?nativeEvent.defaultPrevented:!1===nativeEvent.returnValue;return this.isDefaultPrevented=defaultPrevented?emptyFunction.thatReturnsTrue:emptyFunction.thatReturnsFalse,this.isPropagationStopped=emptyFunction.thatReturnsFalse,this}function getPooledWarningPropertyDefinition(propName,getVal){function set(val){return warn(isFunction?"setting the method":"setting the property","This is effectively a no-op"),val}function get(){return warn(isFunction?"accessing the method":"accessing the property",isFunction?"This is a no-op function":"This is set to null"),getVal}function warn(action,result){"production"!==process.env.NODE_ENV&&warning(!1,"This synthetic event is reused for performance reasons. If you're seeing this, you're %s `%s` on a released/nullified synthetic event. %s. If you must keep the original synthetic event around, use event.persist(). See https://fb.me/react-event-pooling for more information.",action,propName,result)}var isFunction="function"==typeof getVal;return{configurable:!0,set:set,get:get}}var _assign=__webpack_require__(7),PooledClass=__webpack_require__(23),emptyFunction=__webpack_require__(12),warning=__webpack_require__(2),didWarnForAddedNewProperty=!1,isProxySupported="function"==typeof Proxy,shouldBeReleasedProperties=["dispatchConfig","_targetInst","nativeEvent","isDefaultPrevented","isPropagationStopped","_dispatchListeners","_dispatchInstances"],EventInterface={type:null,target:null,currentTarget:emptyFunction.thatReturnsNull,eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(event){return event.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};_assign(SyntheticEvent.prototype,{preventDefault:function(){this.defaultPrevented=!0;var event=this.nativeEvent;event&&(event.preventDefault?event.preventDefault():"unknown"!=typeof event.returnValue&&(event.returnValue=!1),this.isDefaultPrevented=emptyFunction.thatReturnsTrue)},stopPropagation:function(){var event=this.nativeEvent;event&&(event.stopPropagation?event.stopPropagation():"unknown"!=typeof event.cancelBubble&&(event.cancelBubble=!0),this.isPropagationStopped=emptyFunction.thatReturnsTrue)},persist:function(){this.isPersistent=emptyFunction.thatReturnsTrue},isPersistent:emptyFunction.thatReturnsFalse,destructor:function(){var Interface=this.constructor.Interface;for(var propName in Interface)"production"!==process.env.NODE_ENV?Object.defineProperty(this,propName,getPooledWarningPropertyDefinition(propName,Interface[propName])):this[propName]=null;for(var i=0;i1){for(var childArray=Array(childrenLength),i=0;i1){for(var childArray=Array(childrenLength),i=0;i1){for(var childArray=Array(childrenLength),i=0;i1){for(var childArray=Array(childrenLength),i=0;i1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];var argIndex=0,message="Warning: "+format.replace(/%s/g,function(){return args[argIndex++]});try{throw new Error(message)}catch(x){}};warning=function(condition,format){if(void 0===format)throw new Error("`warning(condition, format, ...args)` requires a warning message argument");if(0!==format.indexOf("Failed Composite propType: ")&&!condition){for(var _len2=arguments.length,args=Array(_len2>2?_len2-2:0),_key2=2;_key2<_len2;_key2++)args[_key2-2]=arguments[_key2];printWarning.apply(void 0,[format].concat(args))}}}(),module.exports=warning}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";(function(process){function SyntheticEvent(dispatchConfig,targetInst,nativeEvent,nativeEventTarget){"production"!==process.env.NODE_ENV&&(delete this.nativeEvent,delete this.preventDefault,delete this.stopPropagation),this.dispatchConfig=dispatchConfig,this._targetInst=targetInst,this.nativeEvent=nativeEvent;var Interface=this.constructor.Interface;for(var propName in Interface)if(Interface.hasOwnProperty(propName)){"production"!==process.env.NODE_ENV&&delete this[propName];var normalize=Interface[propName];normalize?this[propName]=normalize(nativeEvent):"target"===propName?this.target=nativeEventTarget:this[propName]=nativeEvent[propName]}var defaultPrevented=null!=nativeEvent.defaultPrevented?nativeEvent.defaultPrevented:!1===nativeEvent.returnValue;return this.isDefaultPrevented=defaultPrevented?emptyFunction.thatReturnsTrue:emptyFunction.thatReturnsFalse,this.isPropagationStopped=emptyFunction.thatReturnsFalse,this}function getPooledWarningPropertyDefinition(propName,getVal){function set(val){return warn(isFunction?"setting the method":"setting the property","This is effectively a no-op"),val}function get(){return warn(isFunction?"accessing the method":"accessing the property",isFunction?"This is a no-op function":"This is set to null"),getVal}function warn(action,result){"production"!==process.env.NODE_ENV&&warning(!1,"This synthetic event is reused for performance reasons. If you're seeing this, you're %s `%s` on a released/nullified synthetic event. %s. If you must keep the original synthetic event around, use event.persist(). See https://fb.me/react-event-pooling for more information.",action,propName,result)}var isFunction="function"==typeof getVal;return{configurable:!0,set:set,get:get}}var _assign=__webpack_require__(7),PooledClass=__webpack_require__(23),emptyFunction=__webpack_require__(12),warning=__webpack_require__(2),didWarnForAddedNewProperty=!1,isProxySupported="function"==typeof Proxy,shouldBeReleasedProperties=["dispatchConfig","_targetInst","nativeEvent","isDefaultPrevented","isPropagationStopped","_dispatchListeners","_dispatchInstances"],EventInterface={type:null,target:null,currentTarget:emptyFunction.thatReturnsNull,eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(event){return event.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};_assign(SyntheticEvent.prototype,{preventDefault:function(){this.defaultPrevented=!0;var event=this.nativeEvent;event&&(event.preventDefault?event.preventDefault():"unknown"!=typeof event.returnValue&&(event.returnValue=!1),this.isDefaultPrevented=emptyFunction.thatReturnsTrue)},stopPropagation:function(){var event=this.nativeEvent;event&&(event.stopPropagation?event.stopPropagation():"unknown"!=typeof event.cancelBubble&&(event.cancelBubble=!0),this.isPropagationStopped=emptyFunction.thatReturnsTrue)},persist:function(){this.isPersistent=emptyFunction.thatReturnsTrue},isPersistent:emptyFunction.thatReturnsFalse,destructor:function(){var Interface=this.constructor.Interface;for(var propName in Interface)"production"!==process.env.NODE_ENV?Object.defineProperty(this,propName,getPooledWarningPropertyDefinition(propName,Interface[propName])):this[propName]=null;for(var i=0;i1){for(var childArray=Array(childrenLength),i=0;i1){for(var childArray=Array(childrenLength),i=0;i1){for(var childArray=Array(childrenLength),i=0;i1){for(var childArray=Array(childrenLength),i=0;i-1||("production"!==process.env.NODE_ENV?invariant(!1,"EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `%s`.",pluginName):_prodInvariant("96",pluginName)),!EventPluginRegistry.plugins[pluginIndex]){pluginModule.extractEvents||("production"!==process.env.NODE_ENV?invariant(!1,"EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `%s` does not.",pluginName):_prodInvariant("97",pluginName)),EventPluginRegistry.plugins[pluginIndex]=pluginModule;var publishedEvents=pluginModule.eventTypes;for(var eventName in publishedEvents)publishEventForPlugin(publishedEvents[eventName],pluginModule,eventName)||("production"!==process.env.NODE_ENV?invariant(!1,"EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.",eventName,pluginName):_prodInvariant("98",eventName,pluginName))}}}function publishEventForPlugin(dispatchConfig,pluginModule,eventName){EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName)&&("production"!==process.env.NODE_ENV?invariant(!1,"EventPluginHub: More than one plugin attempted to publish the same event name, `%s`.",eventName):_prodInvariant("99",eventName)),EventPluginRegistry.eventNameDispatchConfigs[eventName]=dispatchConfig;var phasedRegistrationNames=dispatchConfig.phasedRegistrationNames;if(phasedRegistrationNames){for(var phaseName in phasedRegistrationNames)if(phasedRegistrationNames.hasOwnProperty(phaseName)){var phasedRegistrationName=phasedRegistrationNames[phaseName];publishRegistrationName(phasedRegistrationName,pluginModule,eventName)}return!0}return!!dispatchConfig.registrationName&&(publishRegistrationName(dispatchConfig.registrationName,pluginModule,eventName),!0)}function publishRegistrationName(registrationName,pluginModule,eventName){if(EventPluginRegistry.registrationNameModules[registrationName]&&("production"!==process.env.NODE_ENV?invariant(!1,"EventPluginHub: More than one plugin attempted to publish the same registration name, `%s`.",registrationName):_prodInvariant("100",registrationName)),EventPluginRegistry.registrationNameModules[registrationName]=pluginModule,EventPluginRegistry.registrationNameDependencies[registrationName]=pluginModule.eventTypes[eventName].dependencies,"production"!==process.env.NODE_ENV){var lowerCasedName=registrationName.toLowerCase();EventPluginRegistry.possibleRegistrationNames[lowerCasedName]=registrationName,"onDoubleClick"===registrationName&&(EventPluginRegistry.possibleRegistrationNames.ondblclick=registrationName)}}var _prodInvariant=__webpack_require__(4),invariant=__webpack_require__(1),eventPluginOrder=null,namesToPlugins={},EventPluginRegistry={plugins:[],eventNameDispatchConfigs:{},registrationNameModules:{},registrationNameDependencies:{},possibleRegistrationNames:"production"!==process.env.NODE_ENV?{}:null,injectEventPluginOrder:function(injectedEventPluginOrder){eventPluginOrder&&("production"!==process.env.NODE_ENV?invariant(!1,"EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React."):_prodInvariant("101")),eventPluginOrder=Array.prototype.slice.call(injectedEventPluginOrder),recomputePluginOrdering()},injectEventPluginsByName:function(injectedNamesToPlugins){var isOrderingDirty=!1;for(var pluginName in injectedNamesToPlugins)if(injectedNamesToPlugins.hasOwnProperty(pluginName)){var pluginModule=injectedNamesToPlugins[pluginName];namesToPlugins.hasOwnProperty(pluginName)&&namesToPlugins[pluginName]===pluginModule||(namesToPlugins[pluginName]&&("production"!==process.env.NODE_ENV?invariant(!1,"EventPluginRegistry: Cannot inject two different event plugins using the same name, `%s`.",pluginName):_prodInvariant("102",pluginName)),namesToPlugins[pluginName]=pluginModule,isOrderingDirty=!0)}isOrderingDirty&&recomputePluginOrdering()},getPluginModuleForEvent:function(event){var dispatchConfig=event.dispatchConfig;if(dispatchConfig.registrationName)return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName]||null;if(void 0!==dispatchConfig.phasedRegistrationNames){var phasedRegistrationNames=dispatchConfig.phasedRegistrationNames;for(var phase in phasedRegistrationNames)if(phasedRegistrationNames.hasOwnProperty(phase)){var pluginModule=EventPluginRegistry.registrationNameModules[phasedRegistrationNames[phase]];if(pluginModule)return pluginModule}}return null},_resetEventPlugins:function(){eventPluginOrder=null;for(var pluginName in namesToPlugins)namesToPlugins.hasOwnProperty(pluginName)&&delete namesToPlugins[pluginName];EventPluginRegistry.plugins.length=0;var eventNameDispatchConfigs=EventPluginRegistry.eventNameDispatchConfigs;for(var eventName in eventNameDispatchConfigs)eventNameDispatchConfigs.hasOwnProperty(eventName)&&delete eventNameDispatchConfigs[eventName];var registrationNameModules=EventPluginRegistry.registrationNameModules;for(var registrationName in registrationNameModules)registrationNameModules.hasOwnProperty(registrationName)&&delete registrationNameModules[registrationName];if("production"!==process.env.NODE_ENV){var possibleRegistrationNames=EventPluginRegistry.possibleRegistrationNames;for(var lowerCasedName in possibleRegistrationNames)possibleRegistrationNames.hasOwnProperty(lowerCasedName)&&delete possibleRegistrationNames[lowerCasedName]}}};module.exports=EventPluginRegistry}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";function getListeningForDocument(mountAt){return Object.prototype.hasOwnProperty.call(mountAt,topListenersIDKey)||(mountAt[topListenersIDKey]=reactTopListenersCounter++,alreadyListeningTo[mountAt[topListenersIDKey]]={}),alreadyListeningTo[mountAt[topListenersIDKey]]}var hasEventPageXY,_assign=__webpack_require__(7),EventPluginRegistry=__webpack_require__(39),ReactEventEmitterMixin=__webpack_require__(259),ViewportMetrics=__webpack_require__(114),getVendorPrefixedEventName=__webpack_require__(294),isEventSupported=__webpack_require__(66),alreadyListeningTo={},isMonitoringScrollValue=!1,reactTopListenersCounter=0,topEventMapping={topAbort:"abort",topAnimationEnd:getVendorPrefixedEventName("animationend")||"animationend",topAnimationIteration:getVendorPrefixedEventName("animationiteration")||"animationiteration",topAnimationStart:getVendorPrefixedEventName("animationstart")||"animationstart",topBlur:"blur",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topChange:"change",topClick:"click",topCompositionEnd:"compositionend",topCompositionStart:"compositionstart",topCompositionUpdate:"compositionupdate",topContextMenu:"contextmenu",topCopy:"copy",topCut:"cut",topDoubleClick:"dblclick",topDrag:"drag",topDragEnd:"dragend",topDragEnter:"dragenter",topDragExit:"dragexit",topDragLeave:"dragleave",topDragOver:"dragover",topDragStart:"dragstart",topDrop:"drop",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topFocus:"focus",topInput:"input",topKeyDown:"keydown",topKeyPress:"keypress",topKeyUp:"keyup",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topMouseDown:"mousedown",topMouseMove:"mousemove",topMouseOut:"mouseout",topMouseOver:"mouseover",topMouseUp:"mouseup",topPaste:"paste",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topScroll:"scroll",topSeeked:"seeked",topSeeking:"seeking",topSelectionChange:"selectionchange",topStalled:"stalled",topSuspend:"suspend",topTextInput:"textInput",topTimeUpdate:"timeupdate",topTouchCancel:"touchcancel",topTouchEnd:"touchend",topTouchMove:"touchmove",topTouchStart:"touchstart",topTransitionEnd:getVendorPrefixedEventName("transitionend")||"transitionend",topVolumeChange:"volumechange",topWaiting:"waiting",topWheel:"wheel"},topListenersIDKey="_reactListenersID"+String(Math.random()).slice(2),ReactBrowserEventEmitter=_assign({},ReactEventEmitterMixin,{ReactEventListener:null,injection:{injectReactEventListener:function(ReactEventListener){ReactEventListener.setHandleTopLevel(ReactBrowserEventEmitter.handleTopLevel),ReactBrowserEventEmitter.ReactEventListener=ReactEventListener}},setEnabled:function(enabled){ReactBrowserEventEmitter.ReactEventListener&&ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled)},isEnabled:function(){return!(!ReactBrowserEventEmitter.ReactEventListener||!ReactBrowserEventEmitter.ReactEventListener.isEnabled())},listenTo:function(registrationName,contentDocumentHandle){for(var mountAt=contentDocumentHandle,isListening=getListeningForDocument(mountAt),dependencies=EventPluginRegistry.registrationNameDependencies[registrationName],i=0;i]/;module.exports=escapeTextContentForBrowser},function(module,exports,__webpack_require__){"use strict";var reusableSVGContainer,ExecutionEnvironment=__webpack_require__(9),DOMNamespaces=__webpack_require__(55),WHITESPACE_TEST=/^[ \r\n\t\f]/,NONVISIBLE_TEST=/<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/,createMicrosoftUnsafeLocalFunction=__webpack_require__(62),setInnerHTML=createMicrosoftUnsafeLocalFunction(function(node,html){if(node.namespaceURI!==DOMNamespaces.svg||"innerHTML"in node)node.innerHTML=html;else{reusableSVGContainer=reusableSVGContainer||document.createElement("div"),reusableSVGContainer.innerHTML=""+html+"";for(var svgNode=reusableSVGContainer.firstChild;svgNode.firstChild;)node.appendChild(svgNode.firstChild)}});if(ExecutionEnvironment.canUseDOM){var testElement=document.createElement("div");testElement.innerHTML=" ",""===testElement.innerHTML&&(setInnerHTML=function(node,html){if(node.parentNode&&node.parentNode.replaceChild(node,node),WHITESPACE_TEST.test(html)||"<"===html[0]&&NONVISIBLE_TEST.test(html)){node.innerHTML=String.fromCharCode(65279)+html;var textNode=node.firstChild;1===textNode.data.length?node.removeChild(textNode):textNode.deleteData(0,1)}else node.innerHTML=html}),testElement=null}module.exports=setInnerHTML},function(module,exports,__webpack_require__){"use strict";(function(process){var canDefineProperty=!1;if("production"!==process.env.NODE_ENV)try{Object.defineProperty({},"x",{get:function(){}}),canDefineProperty=!0}catch(x){}module.exports=canDefineProperty}).call(exports,__webpack_require__(0))},function(module,exports){var g;g=function(){return this}();try{g=g||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(g=window)}module.exports=g},function(module,exports,__webpack_require__){"use strict";function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!call||"object"!=typeof call&&"function"!=typeof call?self:call}function _inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.FormLabel=void 0;var _createClass=function(){function defineProperties(target,props){for(var i=0;i1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];var argIndex=0,message="Warning: "+format.replace(/%s/g,function(){return args[argIndex++]});try{throw new Error(message)}catch(x){}};lowPriorityWarning=function(condition,format){if(void 0===format)throw new Error("`warning(condition, format, ...args)` requires a warning message argument");if(!condition){for(var _len2=arguments.length,args=Array(_len2>2?_len2-2:0),_key2=2;_key2<_len2;_key2++)args[_key2-2]=arguments[_key2];printWarning.apply(void 0,[format].concat(args))}}}module.exports=lowPriorityWarning}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";function is(x,y){return x===y?0!==x||0!==y||1/x==1/y:x!==x&&y!==y}function shallowEqual(objA,objB){if(is(objA,objB))return!0;if("object"!=typeof objA||null===objA||"object"!=typeof objB||null===objB)return!1;var keysA=Object.keys(objA),keysB=Object.keys(objB);if(keysA.length!==keysB.length)return!1;for(var i=0;i0&&keys.length<20?displayName+" (keys: "+keys.join(", ")+")":displayName}function getInternalInstanceReadyForUpdate(publicInstance,callerName){var internalInstance=ReactInstanceMap.get(publicInstance);if(!internalInstance){if("production"!==process.env.NODE_ENV){var ctor=publicInstance.constructor;"production"!==process.env.NODE_ENV&&warning(!callerName,"%s(...): Can only update a mounted or mounting component. This usually means you called %s() on an unmounted component. This is a no-op. Please check the code for the %s component.",callerName,callerName,ctor&&(ctor.displayName||ctor.name)||"ReactClass")}return null}return"production"!==process.env.NODE_ENV&&"production"!==process.env.NODE_ENV&&warning(null==ReactCurrentOwner.current,"%s(...): Cannot update during an existing state transition (such as within `render` or another component's constructor). Render methods should be a pure function of props and state; constructor side-effects are an anti-pattern, but can be moved to `componentWillMount`.",callerName),internalInstance}var _prodInvariant=__webpack_require__(4),ReactCurrentOwner=__webpack_require__(18),ReactInstanceMap=__webpack_require__(32),ReactInstrumentation=__webpack_require__(14),ReactUpdates=__webpack_require__(17),invariant=__webpack_require__(1),warning=__webpack_require__(2),ReactUpdateQueue={isMounted:function(publicInstance){if("production"!==process.env.NODE_ENV){var owner=ReactCurrentOwner.current;null!==owner&&("production"!==process.env.NODE_ENV&&warning(owner._warnedAboutRefsInRender,"%s is accessing isMounted inside its render() function. render() should be a pure function of props and state. It should never access something that requires stale data from the previous render, such as refs. Move this logic to componentDidMount and componentDidUpdate instead.",owner.getName()||"A component"),owner._warnedAboutRefsInRender=!0)}var internalInstance=ReactInstanceMap.get(publicInstance);return!!internalInstance&&!!internalInstance._renderedComponent},enqueueCallback:function(publicInstance,callback,callerName){ReactUpdateQueue.validateCallback(callback,callerName);var internalInstance=getInternalInstanceReadyForUpdate(publicInstance);if(!internalInstance)return null;internalInstance._pendingCallbacks?internalInstance._pendingCallbacks.push(callback):internalInstance._pendingCallbacks=[callback],enqueueUpdate(internalInstance)},enqueueCallbackInternal:function(internalInstance,callback){internalInstance._pendingCallbacks?internalInstance._pendingCallbacks.push(callback):internalInstance._pendingCallbacks=[callback],enqueueUpdate(internalInstance)},enqueueForceUpdate:function(publicInstance){var internalInstance=getInternalInstanceReadyForUpdate(publicInstance,"forceUpdate");internalInstance&&(internalInstance._pendingForceUpdate=!0,enqueueUpdate(internalInstance))},enqueueReplaceState:function(publicInstance,completeState,callback){var internalInstance=getInternalInstanceReadyForUpdate(publicInstance,"replaceState");internalInstance&&(internalInstance._pendingStateQueue=[completeState],internalInstance._pendingReplaceState=!0,void 0!==callback&&null!==callback&&(ReactUpdateQueue.validateCallback(callback,"replaceState"),internalInstance._pendingCallbacks?internalInstance._pendingCallbacks.push(callback):internalInstance._pendingCallbacks=[callback]),enqueueUpdate(internalInstance))},enqueueSetState:function(publicInstance,partialState){"production"!==process.env.NODE_ENV&&(ReactInstrumentation.debugTool.onSetState(),"production"!==process.env.NODE_ENV&&warning(null!=partialState,"setState(...): You passed an undefined or null state object; instead, use forceUpdate()."));var internalInstance=getInternalInstanceReadyForUpdate(publicInstance,"setState");if(internalInstance){(internalInstance._pendingStateQueue||(internalInstance._pendingStateQueue=[])).push(partialState),enqueueUpdate(internalInstance)}},enqueueElementInternal:function(internalInstance,nextElement,nextContext){internalInstance._pendingElement=nextElement,internalInstance._context=nextContext,enqueueUpdate(internalInstance)},validateCallback:function(callback,callerName){callback&&"function"!=typeof callback&&("production"!==process.env.NODE_ENV?invariant(!1,"%s(...): Expected the last optional `callback` argument to be a function. Instead received: %s.",callerName,formatUnexpectedArgument(callback)):_prodInvariant("122",callerName,formatUnexpectedArgument(callback)))}};module.exports=ReactUpdateQueue}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";var createMicrosoftUnsafeLocalFunction=function(func){return"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(arg0,arg1,arg2,arg3){MSApp.execUnsafeLocalFunction(function(){return func(arg0,arg1,arg2,arg3)})}:func};module.exports=createMicrosoftUnsafeLocalFunction},function(module,exports,__webpack_require__){"use strict";function getEventCharCode(nativeEvent){var charCode,keyCode=nativeEvent.keyCode;return"charCode"in nativeEvent?0===(charCode=nativeEvent.charCode)&&13===keyCode&&(charCode=13):charCode=keyCode,charCode>=32||13===charCode?charCode:0}module.exports=getEventCharCode},function(module,exports,__webpack_require__){"use strict";function modifierStateGetter(keyArg){var syntheticEvent=this,nativeEvent=syntheticEvent.nativeEvent;if(nativeEvent.getModifierState)return nativeEvent.getModifierState(keyArg);var keyProp=modifierKeyToProp[keyArg];return!!keyProp&&!!nativeEvent[keyProp]}function getEventModifierState(nativeEvent){return modifierStateGetter}var modifierKeyToProp={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};module.exports=getEventModifierState},function(module,exports,__webpack_require__){"use strict";function getEventTarget(nativeEvent){var target=nativeEvent.target||nativeEvent.srcElement||window;return target.correspondingUseElement&&(target=target.correspondingUseElement),3===target.nodeType?target.parentNode:target}module.exports=getEventTarget},function(module,exports,__webpack_require__){"use strict";/** +var getOwnPropertySymbols=Object.getOwnPropertySymbols,hasOwnProperty=Object.prototype.hasOwnProperty,propIsEnumerable=Object.prototype.propertyIsEnumerable;module.exports=function(){try{if(!Object.assign)return!1;var test1=new String("abc");if(test1[5]="de","5"===Object.getOwnPropertyNames(test1)[0])return!1;for(var test2={},i=0;i<10;i++)test2["_"+String.fromCharCode(i)]=i;if("0123456789"!==Object.getOwnPropertyNames(test2).map(function(n){return test2[n]}).join(""))return!1;var test3={};return"abcdefghijklmnopqrst".split("").forEach(function(letter){test3[letter]=letter}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},test3)).join("")}catch(err){return!1}}()?Object.assign:function(target,source){for(var from,symbols,to=toObject(target),s=1;s-1||("production"!==process.env.NODE_ENV?invariant(!1,"EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `%s`.",pluginName):_prodInvariant("96",pluginName)),!EventPluginRegistry.plugins[pluginIndex]){pluginModule.extractEvents||("production"!==process.env.NODE_ENV?invariant(!1,"EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `%s` does not.",pluginName):_prodInvariant("97",pluginName)),EventPluginRegistry.plugins[pluginIndex]=pluginModule;var publishedEvents=pluginModule.eventTypes;for(var eventName in publishedEvents)publishEventForPlugin(publishedEvents[eventName],pluginModule,eventName)||("production"!==process.env.NODE_ENV?invariant(!1,"EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.",eventName,pluginName):_prodInvariant("98",eventName,pluginName))}}}function publishEventForPlugin(dispatchConfig,pluginModule,eventName){EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName)&&("production"!==process.env.NODE_ENV?invariant(!1,"EventPluginHub: More than one plugin attempted to publish the same event name, `%s`.",eventName):_prodInvariant("99",eventName)),EventPluginRegistry.eventNameDispatchConfigs[eventName]=dispatchConfig;var phasedRegistrationNames=dispatchConfig.phasedRegistrationNames;if(phasedRegistrationNames){for(var phaseName in phasedRegistrationNames)if(phasedRegistrationNames.hasOwnProperty(phaseName)){var phasedRegistrationName=phasedRegistrationNames[phaseName];publishRegistrationName(phasedRegistrationName,pluginModule,eventName)}return!0}return!!dispatchConfig.registrationName&&(publishRegistrationName(dispatchConfig.registrationName,pluginModule,eventName),!0)}function publishRegistrationName(registrationName,pluginModule,eventName){if(EventPluginRegistry.registrationNameModules[registrationName]&&("production"!==process.env.NODE_ENV?invariant(!1,"EventPluginHub: More than one plugin attempted to publish the same registration name, `%s`.",registrationName):_prodInvariant("100",registrationName)),EventPluginRegistry.registrationNameModules[registrationName]=pluginModule,EventPluginRegistry.registrationNameDependencies[registrationName]=pluginModule.eventTypes[eventName].dependencies,"production"!==process.env.NODE_ENV){var lowerCasedName=registrationName.toLowerCase();EventPluginRegistry.possibleRegistrationNames[lowerCasedName]=registrationName,"onDoubleClick"===registrationName&&(EventPluginRegistry.possibleRegistrationNames.ondblclick=registrationName)}}var _prodInvariant=__webpack_require__(4),invariant=__webpack_require__(1),eventPluginOrder=null,namesToPlugins={},EventPluginRegistry={plugins:[],eventNameDispatchConfigs:{},registrationNameModules:{},registrationNameDependencies:{},possibleRegistrationNames:"production"!==process.env.NODE_ENV?{}:null,injectEventPluginOrder:function(injectedEventPluginOrder){eventPluginOrder&&("production"!==process.env.NODE_ENV?invariant(!1,"EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React."):_prodInvariant("101")),eventPluginOrder=Array.prototype.slice.call(injectedEventPluginOrder),recomputePluginOrdering()},injectEventPluginsByName:function(injectedNamesToPlugins){var isOrderingDirty=!1;for(var pluginName in injectedNamesToPlugins)if(injectedNamesToPlugins.hasOwnProperty(pluginName)){var pluginModule=injectedNamesToPlugins[pluginName];namesToPlugins.hasOwnProperty(pluginName)&&namesToPlugins[pluginName]===pluginModule||(namesToPlugins[pluginName]&&("production"!==process.env.NODE_ENV?invariant(!1,"EventPluginRegistry: Cannot inject two different event plugins using the same name, `%s`.",pluginName):_prodInvariant("102",pluginName)),namesToPlugins[pluginName]=pluginModule,isOrderingDirty=!0)}isOrderingDirty&&recomputePluginOrdering()},getPluginModuleForEvent:function(event){var dispatchConfig=event.dispatchConfig;if(dispatchConfig.registrationName)return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName]||null;if(void 0!==dispatchConfig.phasedRegistrationNames){var phasedRegistrationNames=dispatchConfig.phasedRegistrationNames;for(var phase in phasedRegistrationNames)if(phasedRegistrationNames.hasOwnProperty(phase)){var pluginModule=EventPluginRegistry.registrationNameModules[phasedRegistrationNames[phase]];if(pluginModule)return pluginModule}}return null},_resetEventPlugins:function(){eventPluginOrder=null;for(var pluginName in namesToPlugins)namesToPlugins.hasOwnProperty(pluginName)&&delete namesToPlugins[pluginName];EventPluginRegistry.plugins.length=0;var eventNameDispatchConfigs=EventPluginRegistry.eventNameDispatchConfigs;for(var eventName in eventNameDispatchConfigs)eventNameDispatchConfigs.hasOwnProperty(eventName)&&delete eventNameDispatchConfigs[eventName];var registrationNameModules=EventPluginRegistry.registrationNameModules;for(var registrationName in registrationNameModules)registrationNameModules.hasOwnProperty(registrationName)&&delete registrationNameModules[registrationName];if("production"!==process.env.NODE_ENV){var possibleRegistrationNames=EventPluginRegistry.possibleRegistrationNames;for(var lowerCasedName in possibleRegistrationNames)possibleRegistrationNames.hasOwnProperty(lowerCasedName)&&delete possibleRegistrationNames[lowerCasedName]}}};module.exports=EventPluginRegistry}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";function getListeningForDocument(mountAt){return Object.prototype.hasOwnProperty.call(mountAt,topListenersIDKey)||(mountAt[topListenersIDKey]=reactTopListenersCounter++,alreadyListeningTo[mountAt[topListenersIDKey]]={}),alreadyListeningTo[mountAt[topListenersIDKey]]}var hasEventPageXY,_assign=__webpack_require__(7),EventPluginRegistry=__webpack_require__(39),ReactEventEmitterMixin=__webpack_require__(260),ViewportMetrics=__webpack_require__(114),getVendorPrefixedEventName=__webpack_require__(295),isEventSupported=__webpack_require__(66),alreadyListeningTo={},isMonitoringScrollValue=!1,reactTopListenersCounter=0,topEventMapping={topAbort:"abort",topAnimationEnd:getVendorPrefixedEventName("animationend")||"animationend",topAnimationIteration:getVendorPrefixedEventName("animationiteration")||"animationiteration",topAnimationStart:getVendorPrefixedEventName("animationstart")||"animationstart",topBlur:"blur",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topChange:"change",topClick:"click",topCompositionEnd:"compositionend",topCompositionStart:"compositionstart",topCompositionUpdate:"compositionupdate",topContextMenu:"contextmenu",topCopy:"copy",topCut:"cut",topDoubleClick:"dblclick",topDrag:"drag",topDragEnd:"dragend",topDragEnter:"dragenter",topDragExit:"dragexit",topDragLeave:"dragleave",topDragOver:"dragover",topDragStart:"dragstart",topDrop:"drop",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topFocus:"focus",topInput:"input",topKeyDown:"keydown",topKeyPress:"keypress",topKeyUp:"keyup",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topMouseDown:"mousedown",topMouseMove:"mousemove",topMouseOut:"mouseout",topMouseOver:"mouseover",topMouseUp:"mouseup",topPaste:"paste",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topScroll:"scroll",topSeeked:"seeked",topSeeking:"seeking",topSelectionChange:"selectionchange",topStalled:"stalled",topSuspend:"suspend",topTextInput:"textInput",topTimeUpdate:"timeupdate",topTouchCancel:"touchcancel",topTouchEnd:"touchend",topTouchMove:"touchmove",topTouchStart:"touchstart",topTransitionEnd:getVendorPrefixedEventName("transitionend")||"transitionend",topVolumeChange:"volumechange",topWaiting:"waiting",topWheel:"wheel"},topListenersIDKey="_reactListenersID"+String(Math.random()).slice(2),ReactBrowserEventEmitter=_assign({},ReactEventEmitterMixin,{ReactEventListener:null,injection:{injectReactEventListener:function(ReactEventListener){ReactEventListener.setHandleTopLevel(ReactBrowserEventEmitter.handleTopLevel),ReactBrowserEventEmitter.ReactEventListener=ReactEventListener}},setEnabled:function(enabled){ReactBrowserEventEmitter.ReactEventListener&&ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled)},isEnabled:function(){return!(!ReactBrowserEventEmitter.ReactEventListener||!ReactBrowserEventEmitter.ReactEventListener.isEnabled())},listenTo:function(registrationName,contentDocumentHandle){for(var mountAt=contentDocumentHandle,isListening=getListeningForDocument(mountAt),dependencies=EventPluginRegistry.registrationNameDependencies[registrationName],i=0;i]/;module.exports=escapeTextContentForBrowser},function(module,exports,__webpack_require__){"use strict";var reusableSVGContainer,ExecutionEnvironment=__webpack_require__(9),DOMNamespaces=__webpack_require__(55),WHITESPACE_TEST=/^[ \r\n\t\f]/,NONVISIBLE_TEST=/<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/,createMicrosoftUnsafeLocalFunction=__webpack_require__(62),setInnerHTML=createMicrosoftUnsafeLocalFunction(function(node,html){if(node.namespaceURI!==DOMNamespaces.svg||"innerHTML"in node)node.innerHTML=html;else{reusableSVGContainer=reusableSVGContainer||document.createElement("div"),reusableSVGContainer.innerHTML=""+html+"";for(var svgNode=reusableSVGContainer.firstChild;svgNode.firstChild;)node.appendChild(svgNode.firstChild)}});if(ExecutionEnvironment.canUseDOM){var testElement=document.createElement("div");testElement.innerHTML=" ",""===testElement.innerHTML&&(setInnerHTML=function(node,html){if(node.parentNode&&node.parentNode.replaceChild(node,node),WHITESPACE_TEST.test(html)||"<"===html[0]&&NONVISIBLE_TEST.test(html)){node.innerHTML=String.fromCharCode(65279)+html;var textNode=node.firstChild;1===textNode.data.length?node.removeChild(textNode):textNode.deleteData(0,1)}else node.innerHTML=html}),testElement=null}module.exports=setInnerHTML},function(module,exports,__webpack_require__){"use strict";(function(process){var canDefineProperty=!1;if("production"!==process.env.NODE_ENV)try{Object.defineProperty({},"x",{get:function(){}}),canDefineProperty=!0}catch(x){}module.exports=canDefineProperty}).call(exports,__webpack_require__(0))},function(module,exports){var g;g=function(){return this}();try{g=g||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(g=window)}module.exports=g},function(module,exports,__webpack_require__){"use strict";function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!call||"object"!=typeof call&&"function"!=typeof call?self:call}function _inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.FormLabel=void 0;var _createClass=function(){function defineProperties(target,props){for(var i=0;i1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];var argIndex=0,message="Warning: "+format.replace(/%s/g,function(){return args[argIndex++]});try{throw new Error(message)}catch(x){}};lowPriorityWarning=function(condition,format){if(void 0===format)throw new Error("`warning(condition, format, ...args)` requires a warning message argument");if(!condition){for(var _len2=arguments.length,args=Array(_len2>2?_len2-2:0),_key2=2;_key2<_len2;_key2++)args[_key2-2]=arguments[_key2];printWarning.apply(void 0,[format].concat(args))}}}module.exports=lowPriorityWarning}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";function is(x,y){return x===y?0!==x||0!==y||1/x==1/y:x!==x&&y!==y}function shallowEqual(objA,objB){if(is(objA,objB))return!0;if("object"!=typeof objA||null===objA||"object"!=typeof objB||null===objB)return!1;var keysA=Object.keys(objA),keysB=Object.keys(objB);if(keysA.length!==keysB.length)return!1;for(var i=0;i0&&keys.length<20?displayName+" (keys: "+keys.join(", ")+")":displayName}function getInternalInstanceReadyForUpdate(publicInstance,callerName){var internalInstance=ReactInstanceMap.get(publicInstance);if(!internalInstance){if("production"!==process.env.NODE_ENV){var ctor=publicInstance.constructor;"production"!==process.env.NODE_ENV&&warning(!callerName,"%s(...): Can only update a mounted or mounting component. This usually means you called %s() on an unmounted component. This is a no-op. Please check the code for the %s component.",callerName,callerName,ctor&&(ctor.displayName||ctor.name)||"ReactClass")}return null}return"production"!==process.env.NODE_ENV&&"production"!==process.env.NODE_ENV&&warning(null==ReactCurrentOwner.current,"%s(...): Cannot update during an existing state transition (such as within `render` or another component's constructor). Render methods should be a pure function of props and state; constructor side-effects are an anti-pattern, but can be moved to `componentWillMount`.",callerName),internalInstance}var _prodInvariant=__webpack_require__(4),ReactCurrentOwner=__webpack_require__(18),ReactInstanceMap=__webpack_require__(32),ReactInstrumentation=__webpack_require__(14),ReactUpdates=__webpack_require__(17),invariant=__webpack_require__(1),warning=__webpack_require__(2),ReactUpdateQueue={isMounted:function(publicInstance){if("production"!==process.env.NODE_ENV){var owner=ReactCurrentOwner.current;null!==owner&&("production"!==process.env.NODE_ENV&&warning(owner._warnedAboutRefsInRender,"%s is accessing isMounted inside its render() function. render() should be a pure function of props and state. It should never access something that requires stale data from the previous render, such as refs. Move this logic to componentDidMount and componentDidUpdate instead.",owner.getName()||"A component"),owner._warnedAboutRefsInRender=!0)}var internalInstance=ReactInstanceMap.get(publicInstance);return!!internalInstance&&!!internalInstance._renderedComponent},enqueueCallback:function(publicInstance,callback,callerName){ReactUpdateQueue.validateCallback(callback,callerName);var internalInstance=getInternalInstanceReadyForUpdate(publicInstance);if(!internalInstance)return null;internalInstance._pendingCallbacks?internalInstance._pendingCallbacks.push(callback):internalInstance._pendingCallbacks=[callback],enqueueUpdate(internalInstance)},enqueueCallbackInternal:function(internalInstance,callback){internalInstance._pendingCallbacks?internalInstance._pendingCallbacks.push(callback):internalInstance._pendingCallbacks=[callback],enqueueUpdate(internalInstance)},enqueueForceUpdate:function(publicInstance){var internalInstance=getInternalInstanceReadyForUpdate(publicInstance,"forceUpdate");internalInstance&&(internalInstance._pendingForceUpdate=!0,enqueueUpdate(internalInstance))},enqueueReplaceState:function(publicInstance,completeState,callback){var internalInstance=getInternalInstanceReadyForUpdate(publicInstance,"replaceState");internalInstance&&(internalInstance._pendingStateQueue=[completeState],internalInstance._pendingReplaceState=!0,void 0!==callback&&null!==callback&&(ReactUpdateQueue.validateCallback(callback,"replaceState"),internalInstance._pendingCallbacks?internalInstance._pendingCallbacks.push(callback):internalInstance._pendingCallbacks=[callback]),enqueueUpdate(internalInstance))},enqueueSetState:function(publicInstance,partialState){"production"!==process.env.NODE_ENV&&(ReactInstrumentation.debugTool.onSetState(),"production"!==process.env.NODE_ENV&&warning(null!=partialState,"setState(...): You passed an undefined or null state object; instead, use forceUpdate()."));var internalInstance=getInternalInstanceReadyForUpdate(publicInstance,"setState");if(internalInstance){(internalInstance._pendingStateQueue||(internalInstance._pendingStateQueue=[])).push(partialState),enqueueUpdate(internalInstance)}},enqueueElementInternal:function(internalInstance,nextElement,nextContext){internalInstance._pendingElement=nextElement,internalInstance._context=nextContext,enqueueUpdate(internalInstance)},validateCallback:function(callback,callerName){callback&&"function"!=typeof callback&&("production"!==process.env.NODE_ENV?invariant(!1,"%s(...): Expected the last optional `callback` argument to be a function. Instead received: %s.",callerName,formatUnexpectedArgument(callback)):_prodInvariant("122",callerName,formatUnexpectedArgument(callback)))}};module.exports=ReactUpdateQueue}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";var createMicrosoftUnsafeLocalFunction=function(func){return"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(arg0,arg1,arg2,arg3){MSApp.execUnsafeLocalFunction(function(){return func(arg0,arg1,arg2,arg3)})}:func};module.exports=createMicrosoftUnsafeLocalFunction},function(module,exports,__webpack_require__){"use strict";function getEventCharCode(nativeEvent){var charCode,keyCode=nativeEvent.keyCode;return"charCode"in nativeEvent?0===(charCode=nativeEvent.charCode)&&13===keyCode&&(charCode=13):charCode=keyCode,charCode>=32||13===charCode?charCode:0}module.exports=getEventCharCode},function(module,exports,__webpack_require__){"use strict";function modifierStateGetter(keyArg){var syntheticEvent=this,nativeEvent=syntheticEvent.nativeEvent;if(nativeEvent.getModifierState)return nativeEvent.getModifierState(keyArg);var keyProp=modifierKeyToProp[keyArg];return!!keyProp&&!!nativeEvent[keyProp]}function getEventModifierState(nativeEvent){return modifierStateGetter}var modifierKeyToProp={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};module.exports=getEventModifierState},function(module,exports,__webpack_require__){"use strict";function getEventTarget(nativeEvent){var target=nativeEvent.target||nativeEvent.srcElement||window;return target.correspondingUseElement&&(target=target.correspondingUseElement),3===target.nodeType?target.parentNode:target}module.exports=getEventTarget},function(module,exports,__webpack_require__){"use strict";/** * Checks if an event is supported in the current execution environment. * * NOTE: This will not work correctly for non-generic events such as `change`, @@ -27,7 +27,12 @@ var getOwnPropertySymbols=Object.getOwnPropertySymbols,hasOwnProperty=Object.pro * @internal * @license Modernizr 3.0.0pre (Custom Build) | MIT */ -function isEventSupported(eventNameSuffix,capture){if(!ExecutionEnvironment.canUseDOM||capture&&!("addEventListener"in document))return!1;var eventName="on"+eventNameSuffix,isSupported=eventName in document;if(!isSupported){var element=document.createElement("div");element.setAttribute(eventName,"return;"),isSupported="function"==typeof element[eventName]}return!isSupported&&useHasFeature&&"wheel"===eventNameSuffix&&(isSupported=document.implementation.hasFeature("Events.wheel","3.0")),isSupported}var useHasFeature,ExecutionEnvironment=__webpack_require__(9);ExecutionEnvironment.canUseDOM&&(useHasFeature=document.implementation&&document.implementation.hasFeature&&!0!==document.implementation.hasFeature("","")),module.exports=isEventSupported},function(module,exports,__webpack_require__){"use strict";function shouldUpdateReactComponent(prevElement,nextElement){var prevEmpty=null===prevElement||!1===prevElement,nextEmpty=null===nextElement||!1===nextElement;if(prevEmpty||nextEmpty)return prevEmpty===nextEmpty;var prevType=typeof prevElement,nextType=typeof nextElement;return"string"===prevType||"number"===prevType?"string"===nextType||"number"===nextType:"object"===nextType&&prevElement.type===nextElement.type&&prevElement.key===nextElement.key}module.exports=shouldUpdateReactComponent},function(module,exports,__webpack_require__){"use strict";(function(process){var _assign=__webpack_require__(7),emptyFunction=__webpack_require__(12),warning=__webpack_require__(2),validateDOMNesting=emptyFunction;if("production"!==process.env.NODE_ENV){var specialTags=["address","applet","area","article","aside","base","basefont","bgsound","blockquote","body","br","button","caption","center","col","colgroup","dd","details","dir","div","dl","dt","embed","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","iframe","img","input","isindex","li","link","listing","main","marquee","menu","menuitem","meta","nav","noembed","noframes","noscript","object","ol","p","param","plaintext","pre","script","section","select","source","style","summary","table","tbody","td","template","textarea","tfoot","th","thead","title","tr","track","ul","wbr","xmp"],inScopeTags=["applet","caption","html","table","td","th","marquee","object","template","foreignObject","desc","title"],buttonScopeTags=inScopeTags.concat(["button"]),impliedEndTags=["dd","dt","li","option","optgroup","p","rp","rt"],emptyAncestorInfo={current:null,formTag:null,aTagInScope:null,buttonTagInScope:null,nobrTagInScope:null,pTagInButtonScope:null,listItemTagAutoclosing:null,dlItemTagAutoclosing:null},updatedAncestorInfo=function(oldInfo,tag,instance){var ancestorInfo=_assign({},oldInfo||emptyAncestorInfo),info={tag:tag,instance:instance};return-1!==inScopeTags.indexOf(tag)&&(ancestorInfo.aTagInScope=null,ancestorInfo.buttonTagInScope=null,ancestorInfo.nobrTagInScope=null),-1!==buttonScopeTags.indexOf(tag)&&(ancestorInfo.pTagInButtonScope=null),-1!==specialTags.indexOf(tag)&&"address"!==tag&&"div"!==tag&&"p"!==tag&&(ancestorInfo.listItemTagAutoclosing=null,ancestorInfo.dlItemTagAutoclosing=null),ancestorInfo.current=info,"form"===tag&&(ancestorInfo.formTag=info),"a"===tag&&(ancestorInfo.aTagInScope=info),"button"===tag&&(ancestorInfo.buttonTagInScope=info),"nobr"===tag&&(ancestorInfo.nobrTagInScope=info),"p"===tag&&(ancestorInfo.pTagInButtonScope=info),"li"===tag&&(ancestorInfo.listItemTagAutoclosing=info),"dd"!==tag&&"dt"!==tag||(ancestorInfo.dlItemTagAutoclosing=info),ancestorInfo},isTagValidWithParent=function(tag,parentTag){switch(parentTag){case"select":return"option"===tag||"optgroup"===tag||"#text"===tag;case"optgroup":return"option"===tag||"#text"===tag;case"option":return"#text"===tag;case"tr":return"th"===tag||"td"===tag||"style"===tag||"script"===tag||"template"===tag;case"tbody":case"thead":case"tfoot":return"tr"===tag||"style"===tag||"script"===tag||"template"===tag;case"colgroup":return"col"===tag||"template"===tag;case"table":return"caption"===tag||"colgroup"===tag||"tbody"===tag||"tfoot"===tag||"thead"===tag||"style"===tag||"script"===tag||"template"===tag;case"head":return"base"===tag||"basefont"===tag||"bgsound"===tag||"link"===tag||"meta"===tag||"title"===tag||"noscript"===tag||"noframes"===tag||"style"===tag||"script"===tag||"template"===tag;case"html":return"head"===tag||"body"===tag;case"#document":return"html"===tag}switch(tag){case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":return"h1"!==parentTag&&"h2"!==parentTag&&"h3"!==parentTag&&"h4"!==parentTag&&"h5"!==parentTag&&"h6"!==parentTag;case"rp":case"rt":return-1===impliedEndTags.indexOf(parentTag);case"body":case"caption":case"col":case"colgroup":case"frame":case"head":case"html":case"tbody":case"td":case"tfoot":case"th":case"thead":case"tr":return null==parentTag}return!0},findInvalidAncestorForTag=function(tag,ancestorInfo){switch(tag){case"address":case"article":case"aside":case"blockquote":case"center":case"details":case"dialog":case"dir":case"div":case"dl":case"fieldset":case"figcaption":case"figure":case"footer":case"header":case"hgroup":case"main":case"menu":case"nav":case"ol":case"p":case"section":case"summary":case"ul":case"pre":case"listing":case"table":case"hr":case"xmp":case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":return ancestorInfo.pTagInButtonScope;case"form":return ancestorInfo.formTag||ancestorInfo.pTagInButtonScope;case"li":return ancestorInfo.listItemTagAutoclosing;case"dd":case"dt":return ancestorInfo.dlItemTagAutoclosing;case"button":return ancestorInfo.buttonTagInScope;case"a":return ancestorInfo.aTagInScope;case"nobr":return ancestorInfo.nobrTagInScope}return null},findOwnerStack=function(instance){if(!instance)return[];var stack=[];do{stack.push(instance)}while(instance=instance._currentElement._owner);return stack.reverse(),stack},didWarn={};validateDOMNesting=function(childTag,childText,childInstance,ancestorInfo){ancestorInfo=ancestorInfo||emptyAncestorInfo;var parentInfo=ancestorInfo.current,parentTag=parentInfo&&parentInfo.tag;null!=childText&&("production"!==process.env.NODE_ENV&&warning(null==childTag,"validateDOMNesting: when childText is passed, childTag should be null"),childTag="#text");var invalidParent=isTagValidWithParent(childTag,parentTag)?null:parentInfo,invalidAncestor=invalidParent?null:findInvalidAncestorForTag(childTag,ancestorInfo),problematic=invalidParent||invalidAncestor;if(problematic){var i,ancestorTag=problematic.tag,ancestorInstance=problematic.instance,childOwner=childInstance&&childInstance._currentElement._owner,ancestorOwner=ancestorInstance&&ancestorInstance._currentElement._owner,childOwners=findOwnerStack(childOwner),ancestorOwners=findOwnerStack(ancestorOwner),minStackLen=Math.min(childOwners.length,ancestorOwners.length),deepestCommon=-1;for(i=0;i "),warnKey=!!invalidParent+"|"+childTag+"|"+ancestorTag+"|"+ownerInfo;if(didWarn[warnKey])return;didWarn[warnKey]=!0;var tagDisplayName=childTag,whitespaceInfo="";if("#text"===childTag?/\S/.test(childText)?tagDisplayName="Text nodes":(tagDisplayName="Whitespace text nodes",whitespaceInfo=" Make sure you don't have any extra whitespace between tags on each line of your source code."):tagDisplayName="<"+childTag+">",invalidParent){var info="";"table"===ancestorTag&&"tr"===childTag&&(info+=" Add a
to your code to match the DOM tree generated by the browser."),"production"!==process.env.NODE_ENV&&warning(!1,"validateDOMNesting(...): %s cannot appear as a child of <%s>.%s See %s.%s",tagDisplayName,ancestorTag,whitespaceInfo,ownerInfo,info)}else"production"!==process.env.NODE_ENV&&warning(!1,"validateDOMNesting(...): %s cannot appear as a descendant of <%s>. See %s.",tagDisplayName,ancestorTag,ownerInfo)}},validateDOMNesting.updatedAncestorInfo=updatedAncestorInfo,validateDOMNesting.isTagValidInContext=function(tag,ancestorInfo){ancestorInfo=ancestorInfo||emptyAncestorInfo;var parentInfo=ancestorInfo.current,parentTag=parentInfo&&parentInfo.tag;return isTagValidWithParent(tag,parentTag)&&!findInvalidAncestorForTag(tag,ancestorInfo)}}module.exports=validateDOMNesting}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";(function(process){var lowPriorityWarning=function(){};if("production"!==process.env.NODE_ENV){var printWarning=function(format){for(var _len=arguments.length,args=Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];var argIndex=0,message="Warning: "+format.replace(/%s/g,function(){return args[argIndex++]});try{throw new Error(message)}catch(x){}};lowPriorityWarning=function(condition,format){if(void 0===format)throw new Error("`warning(condition, format, ...args)` requires a warning message argument");if(!condition){for(var _len2=arguments.length,args=Array(_len2>2?_len2-2:0),_key2=2;_key2<_len2;_key2++)args[_key2-2]=arguments[_key2];printWarning.apply(void 0,[format].concat(args))}}}module.exports=lowPriorityWarning}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _objectWithoutProperties(obj,keys){var target={};for(var i in obj)keys.indexOf(i)>=0||Object.prototype.hasOwnProperty.call(obj,i)&&(target[i]=obj[i]);return target}Object.defineProperty(exports,"__esModule",{value:!0}),exports.Choice=void 0;var _extends=Object.assign||function(target){for(var i=1;i=0||Object.prototype.hasOwnProperty.call(obj,i)&&(target[i]=obj[i]);return target}Object.defineProperty(exports,"__esModule",{value:!0}),exports.Select=void 0;var _extends=Object.assign||function(target){for(var i=1;i=0||Object.prototype.hasOwnProperty.call(obj,i)&&(target[i]=obj[i]);return target}Object.defineProperty(exports,"__esModule",{value:!0}),exports.Choice=void 0;var _extends=Object.assign||function(target){for(var i=1;i=0||Object.prototype.hasOwnProperty.call(obj,i)&&(target[i]=obj[i]);return target}Object.defineProperty(exports,"__esModule",{value:!0}),exports.Select=void 0;var _extends=Object.assign||function(target){for(var i=1;i.")}return info}function validateExplicitKey(element,parentType){if(element._store&&!element._store.validated&&null==element.key){element._store.validated=!0;var memoizer=ownerHasKeyUseWarning.uniqueKey||(ownerHasKeyUseWarning.uniqueKey={}),currentComponentErrorInfo=getCurrentComponentErrorInfo(parentType);if(!memoizer[currentComponentErrorInfo]){memoizer[currentComponentErrorInfo]=!0;var childOwner="";element&&element._owner&&element._owner!==ReactCurrentOwner.current&&(childOwner=" It was passed a child from "+element._owner.getName()+"."),"production"!==process.env.NODE_ENV&&warning(!1,'Each child in an array or iterator should have a unique "key" prop.%s%s See https://fb.me/react-warning-keys for more information.%s',currentComponentErrorInfo,childOwner,ReactComponentTreeHook.getCurrentStackAddendum(element))}}}function validateChildKeys(node,parentType){if("object"==typeof node)if(Array.isArray(node))for(var i=0;itext.length)break tokenloop;if(!(str instanceof Token)){pattern.lastIndex=0;var match=pattern.exec(str),delNum=1;if(!match&&greedy&&i!=strarr.length-1){if(pattern.lastIndex=pos,!(match=pattern.exec(text)))break;for(var from=match.index+(lookbehind?match[1].length:0),to=match.index+match[0].length,k=i,p=pos,len=strarr.length;k=p&&(++i,pos=p);if(strarr[i]instanceof Token||strarr[k-1].greedy)continue;delNum=k-i,str=text.slice(pos,p),match.index-=pos}if(match){lookbehind&&(lookbehindLength=match[1].length);var from=match.index+lookbehindLength,match=match[0].slice(lookbehindLength),to=from+match.length,before=str.slice(0,from),after=str.slice(to),args=[i,delNum];before&&args.push(before);var wrapped=new Token(token,inside?_.tokenize(match,inside):match,alias,match,greedy);args.push(wrapped),after&&args.push(after),Array.prototype.splice.apply(strarr,args)}}}}}return strarr},hooks:{all:{},add:function(name,callback){var hooks=_.hooks.all;hooks[name]=hooks[name]||[],hooks[name].push(callback)},run:function(name,env){var callbacks=_.hooks.all[name];if(callbacks&&callbacks.length)for(var callback,i=0;callback=callbacks[i++];)callback(env)}}},Token=_.Token=function(type,content,alias,matchedStr,greedy){this.type=type,this.content=content,this.alias=alias,this.length=0|(matchedStr||"").length,this.greedy=!!greedy};if(Token.stringify=function(o,language,parent){if("string"==typeof o)return o;if("Array"===_.util.type(o))return o.map(function(element){return Token.stringify(element,language,o)}).join("");var env={type:o.type,content:Token.stringify(o.content,language,parent),tag:"span",classes:["token",o.type],attributes:{},language:language,parent:parent};if("comment"==env.type&&(env.attributes.spellcheck="true"),o.alias){var aliases="Array"===_.util.type(o.alias)?o.alias:[o.alias];Array.prototype.push.apply(env.classes,aliases)}_.hooks.run("wrap",env);var attributes=Object.keys(env.attributes).map(function(name){return name+'="'+(env.attributes[name]||"").replace(/"/g,""")+'"'}).join(" ");return"<"+env.tag+' class="'+env.classes.join(" ")+'"'+(attributes?" "+attributes:"")+">"+env.content+""},!_self.document)return _self.addEventListener?(_self.addEventListener("message",function(evt){var message=JSON.parse(evt.data),lang=message.language,code=message.code,immediateClose=message.immediateClose;_self.postMessage(_.highlight(code,_.languages[lang],lang)),immediateClose&&_self.close()},!1),_self.Prism):_self.Prism;var script=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return script&&(_.filename=script.src,document.addEventListener&&!script.hasAttribute("data-manual")&&("loading"!==document.readyState?window.requestAnimationFrame?window.requestAnimationFrame(_.highlightAll):window.setTimeout(_.highlightAll,16):document.addEventListener("DOMContentLoaded",_.highlightAll))),_self.Prism}();void 0!==module&&module.exports&&(module.exports=Prism),void 0!==global&&(global.Prism=Prism),Prism.languages.markup={comment://,prolog:/<\?[\w\W]+?\?>/,doctype://i,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.hooks.add("wrap",function(env){"entity"===env.type&&(env.attributes.title=env.content.replace(/&/,"&"))}),Prism.languages.xml=Prism.languages.markup,Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:{pattern:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,greedy:!0},property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},Prism.languages.css.atrule.inside.rest=Prism.util.clone(Prism.languages.css),Prism.languages.markup&&(Prism.languages.insertBefore("markup","tag",{style:{pattern:/()[\w\W]*?(?=<\/style>)/i,lookbehind:!0,inside:Prism.languages.css,alias:"language-css"}}),Prism.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').*?\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:Prism.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:Prism.languages.css}},alias:"language-css"}},Prism.languages.markup.tag)),Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:{pattern:/(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(true|false)\b/,function:/[a-z0-9_]+(?=\()/i,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/},Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,function:/[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*\*?|\/|~|\^|%|\.{3}/}),Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^\/])\/(?!\/)(\[.+?]|\\.|[^\/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0,greedy:!0}}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\\\|\\?[^\\])*?`/,greedy:!0,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/()[\w\W]*?(?=<\/script>)/i,lookbehind:!0,inside:Prism.languages.javascript,alias:"language-javascript"}}),Prism.languages.js=Prism.languages.javascript,function(){"undefined"!=typeof self&&self.Prism&&self.document&&document.querySelector&&(self.Prism.fileHighlight=function(){var Extensions={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"};Array.prototype.forEach&&Array.prototype.slice.call(document.querySelectorAll("pre[data-src]")).forEach(function(pre){for(var language,src=pre.getAttribute("data-src"),parent=pre,lang=/\blang(?:uage)?-(?!\*)(\w+)\b/i;parent&&!lang.test(parent.className);)parent=parent.parentNode;if(parent&&(language=(pre.className.match(lang)||[,""])[1]),!language){var extension=(src.match(/\.(\w+)$/)||[,""])[1];language=Extensions[extension]||extension}var code=document.createElement("code");code.className="language-"+language,pre.textContent="",code.textContent="Loading…",pre.appendChild(code);var xhr=new XMLHttpRequest;xhr.open("GET",src,!0),xhr.onreadystatechange=function(){4==xhr.readyState&&(xhr.status<400&&xhr.responseText?(code.textContent=xhr.responseText,Prism.highlightElement(code)):xhr.status>=400?code.textContent="✖ Error "+xhr.status+" while fetching file: "+xhr.statusText:code.textContent="✖ Error: File does not exist or is empty")},xhr.send(null)})},document.addEventListener("DOMContentLoaded",self.Prism.fileHighlight))}()}).call(exports,__webpack_require__(46))},function(module,exports,__webpack_require__){"use strict";var factory=__webpack_require__(101);module.exports=function(isValidElement){return factory(isValidElement,!1)}},function(module,exports,__webpack_require__){"use strict";(function(process){var emptyFunction=__webpack_require__(12),invariant=__webpack_require__(1),warning=__webpack_require__(2),ReactPropTypesSecret=__webpack_require__(53),checkPropTypes=__webpack_require__(224);module.exports=function(isValidElement,throwOnDirectAccess){function getIteratorFn(maybeIterable){var iteratorFn=maybeIterable&&(ITERATOR_SYMBOL&&maybeIterable[ITERATOR_SYMBOL]||maybeIterable[FAUX_ITERATOR_SYMBOL]);if("function"==typeof iteratorFn)return iteratorFn}function is(x,y){return x===y?0!==x||1/x==1/y:x!==x&&y!==y}function PropTypeError(message){this.message=message,this.stack=""}function createChainableTypeChecker(validate){function checkType(isRequired,props,propName,componentName,location,propFullName,secret){if(componentName=componentName||ANONYMOUS,propFullName=propFullName||propName,secret!==ReactPropTypesSecret)if(throwOnDirectAccess)invariant(!1,"Calling PropTypes validators directly is not supported by the `prop-types` package. Use `PropTypes.checkPropTypes()` to call them. Read more at http://fb.me/use-check-prop-types");else if("production"!==process.env.NODE_ENV&&"undefined"!=typeof console){var cacheKey=componentName+":"+propName;!manualPropTypeCallCache[cacheKey]&&manualPropTypeWarningCount<3&&(warning(!1,"You are manually calling a React.PropTypes validation function for the `%s` prop on `%s`. This is deprecated and will throw in the standalone `prop-types` package. You may be seeing this warning due to a third-party PropTypes library. See https://fb.me/react-warning-dont-call-proptypes for details.",propFullName,componentName),manualPropTypeCallCache[cacheKey]=!0,manualPropTypeWarningCount++)}return null==props[propName]?isRequired?new PropTypeError(null===props[propName]?"The "+location+" `"+propFullName+"` is marked as required in `"+componentName+"`, but its value is `null`.":"The "+location+" `"+propFullName+"` is marked as required in `"+componentName+"`, but its value is `undefined`."):null:validate(props,propName,componentName,location,propFullName)}if("production"!==process.env.NODE_ENV)var manualPropTypeCallCache={},manualPropTypeWarningCount=0;var chainedCheckType=checkType.bind(null,!1);return chainedCheckType.isRequired=checkType.bind(null,!0),chainedCheckType}function createPrimitiveTypeChecker(expectedType){function validate(props,propName,componentName,location,propFullName,secret){var propValue=props[propName];if(getPropType(propValue)!==expectedType)return new PropTypeError("Invalid "+location+" `"+propFullName+"` of type `"+getPreciseType(propValue)+"` supplied to `"+componentName+"`, expected `"+expectedType+"`.");return null}return createChainableTypeChecker(validate)}function createArrayOfTypeChecker(typeChecker){function validate(props,propName,componentName,location,propFullName){if("function"!=typeof typeChecker)return new PropTypeError("Property `"+propFullName+"` of component `"+componentName+"` has invalid PropType notation inside arrayOf.");var propValue=props[propName];if(!Array.isArray(propValue)){return new PropTypeError("Invalid "+location+" `"+propFullName+"` of type `"+getPropType(propValue)+"` supplied to `"+componentName+"`, expected an array.")}for(var i=0;i must be an array if `multiple` is true.%s",propName,getDeclarationErrorAddendum(owner)):!props.multiple&&isArray&&"production"!==process.env.NODE_ENV&&warning(!1,"The `%s` prop supplied to to your code to match the DOM tree generated by the browser."),"production"!==process.env.NODE_ENV&&warning(!1,"validateDOMNesting(...): %s cannot appear as a child of <%s>.%s See %s.%s",tagDisplayName,ancestorTag,whitespaceInfo,ownerInfo,info)}else"production"!==process.env.NODE_ENV&&warning(!1,"validateDOMNesting(...): %s cannot appear as a descendant of <%s>. See %s.",tagDisplayName,ancestorTag,ownerInfo)}},validateDOMNesting.updatedAncestorInfo=updatedAncestorInfo,validateDOMNesting.isTagValidInContext=function(tag,ancestorInfo){ancestorInfo=ancestorInfo||emptyAncestorInfo;var parentInfo=ancestorInfo.current,parentTag=parentInfo&&parentInfo.tag;return isTagValidWithParent(tag,parentTag)&&!findInvalidAncestorForTag(tag,ancestorInfo)}}module.exports=validateDOMNesting}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";(function(process){var lowPriorityWarning=function(){};if("production"!==process.env.NODE_ENV){var printWarning=function(format){for(var _len=arguments.length,args=Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];var argIndex=0,message="Warning: "+format.replace(/%s/g,function(){return args[argIndex++]});try{throw new Error(message)}catch(x){}};lowPriorityWarning=function(condition,format){if(void 0===format)throw new Error("`warning(condition, format, ...args)` requires a warning message argument");if(!condition){for(var _len2=arguments.length,args=Array(_len2>2?_len2-2:0),_key2=2;_key2<_len2;_key2++)args[_key2-2]=arguments[_key2];printWarning.apply(void 0,[format].concat(args))}}}module.exports=lowPriorityWarning}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _objectWithoutProperties(obj,keys){var target={};for(var i in obj)keys.indexOf(i)>=0||Object.prototype.hasOwnProperty.call(obj,i)&&(target[i]=obj[i]);return target}Object.defineProperty(exports,"__esModule",{value:!0}),exports.Choice=void 0;var _extends=Object.assign||function(target){for(var i=1;i=0||Object.prototype.hasOwnProperty.call(obj,i)&&(target[i]=obj[i]);return target}Object.defineProperty(exports,"__esModule",{value:!0}),exports.Select=void 0;var _extends=Object.assign||function(target){for(var i=1;i=0||Object.prototype.hasOwnProperty.call(obj,i)&&(target[i]=obj[i]);return target}Object.defineProperty(exports,"__esModule",{value:!0}),exports.Choice=void 0;var _extends=Object.assign||function(target){for(var i=1;i=0||Object.prototype.hasOwnProperty.call(obj,i)&&(target[i]=obj[i]);return target}Object.defineProperty(exports,"__esModule",{value:!0}),exports.Select=void 0;var _extends=Object.assign||function(target){for(var i=1;i.")}return info}function validateExplicitKey(element,parentType){if(element._store&&!element._store.validated&&null==element.key){element._store.validated=!0;var memoizer=ownerHasKeyUseWarning.uniqueKey||(ownerHasKeyUseWarning.uniqueKey={}),currentComponentErrorInfo=getCurrentComponentErrorInfo(parentType);if(!memoizer[currentComponentErrorInfo]){memoizer[currentComponentErrorInfo]=!0;var childOwner="";element&&element._owner&&element._owner!==ReactCurrentOwner.current&&(childOwner=" It was passed a child from "+element._owner.getName()+"."),"production"!==process.env.NODE_ENV&&warning(!1,'Each child in an array or iterator should have a unique "key" prop.%s%s See https://fb.me/react-warning-keys for more information.%s',currentComponentErrorInfo,childOwner,ReactComponentTreeHook.getCurrentStackAddendum(element))}}}function validateChildKeys(node,parentType){if("object"==typeof node)if(Array.isArray(node))for(var i=0;itext.length)break tokenloop;if(!(str instanceof Token)){pattern.lastIndex=0;var match=pattern.exec(str),delNum=1;if(!match&&greedy&&i!=strarr.length-1){if(pattern.lastIndex=pos,!(match=pattern.exec(text)))break;for(var from=match.index+(lookbehind?match[1].length:0),to=match.index+match[0].length,k=i,p=pos,len=strarr.length;k=p&&(++i,pos=p);if(strarr[i]instanceof Token||strarr[k-1].greedy)continue;delNum=k-i,str=text.slice(pos,p),match.index-=pos}if(match){lookbehind&&(lookbehindLength=match[1].length);var from=match.index+lookbehindLength,match=match[0].slice(lookbehindLength),to=from+match.length,before=str.slice(0,from),after=str.slice(to),args=[i,delNum];before&&args.push(before);var wrapped=new Token(token,inside?_.tokenize(match,inside):match,alias,match,greedy);args.push(wrapped),after&&args.push(after),Array.prototype.splice.apply(strarr,args)}}}}}return strarr},hooks:{all:{},add:function(name,callback){var hooks=_.hooks.all;hooks[name]=hooks[name]||[],hooks[name].push(callback)},run:function(name,env){var callbacks=_.hooks.all[name];if(callbacks&&callbacks.length)for(var callback,i=0;callback=callbacks[i++];)callback(env)}}},Token=_.Token=function(type,content,alias,matchedStr,greedy){this.type=type,this.content=content,this.alias=alias,this.length=0|(matchedStr||"").length,this.greedy=!!greedy};if(Token.stringify=function(o,language,parent){if("string"==typeof o)return o;if("Array"===_.util.type(o))return o.map(function(element){return Token.stringify(element,language,o)}).join("");var env={type:o.type,content:Token.stringify(o.content,language,parent),tag:"span",classes:["token",o.type],attributes:{},language:language,parent:parent};if("comment"==env.type&&(env.attributes.spellcheck="true"),o.alias){var aliases="Array"===_.util.type(o.alias)?o.alias:[o.alias];Array.prototype.push.apply(env.classes,aliases)}_.hooks.run("wrap",env);var attributes=Object.keys(env.attributes).map(function(name){return name+'="'+(env.attributes[name]||"").replace(/"/g,""")+'"'}).join(" ");return"<"+env.tag+' class="'+env.classes.join(" ")+'"'+(attributes?" "+attributes:"")+">"+env.content+""},!_self.document)return _self.addEventListener?(_self.addEventListener("message",function(evt){var message=JSON.parse(evt.data),lang=message.language,code=message.code,immediateClose=message.immediateClose;_self.postMessage(_.highlight(code,_.languages[lang],lang)),immediateClose&&_self.close()},!1),_self.Prism):_self.Prism;var script=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return script&&(_.filename=script.src,document.addEventListener&&!script.hasAttribute("data-manual")&&("loading"!==document.readyState?window.requestAnimationFrame?window.requestAnimationFrame(_.highlightAll):window.setTimeout(_.highlightAll,16):document.addEventListener("DOMContentLoaded",_.highlightAll))),_self.Prism}();void 0!==module&&module.exports&&(module.exports=Prism),void 0!==global&&(global.Prism=Prism),Prism.languages.markup={comment://,prolog:/<\?[\w\W]+?\?>/,doctype://i,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.hooks.add("wrap",function(env){"entity"===env.type&&(env.attributes.title=env.content.replace(/&/,"&"))}),Prism.languages.xml=Prism.languages.markup,Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:{pattern:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,greedy:!0},property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},Prism.languages.css.atrule.inside.rest=Prism.util.clone(Prism.languages.css),Prism.languages.markup&&(Prism.languages.insertBefore("markup","tag",{style:{pattern:/()[\w\W]*?(?=<\/style>)/i,lookbehind:!0,inside:Prism.languages.css,alias:"language-css"}}),Prism.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').*?\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:Prism.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:Prism.languages.css}},alias:"language-css"}},Prism.languages.markup.tag)),Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:{pattern:/(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(true|false)\b/,function:/[a-z0-9_]+(?=\()/i,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/},Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,function:/[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*\*?|\/|~|\^|%|\.{3}/}),Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^\/])\/(?!\/)(\[.+?]|\\.|[^\/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0,greedy:!0}}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\\\|\\?[^\\])*?`/,greedy:!0,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/()[\w\W]*?(?=<\/script>)/i,lookbehind:!0,inside:Prism.languages.javascript,alias:"language-javascript"}}),Prism.languages.js=Prism.languages.javascript,function(){"undefined"!=typeof self&&self.Prism&&self.document&&document.querySelector&&(self.Prism.fileHighlight=function(){var Extensions={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"};Array.prototype.forEach&&Array.prototype.slice.call(document.querySelectorAll("pre[data-src]")).forEach(function(pre){for(var language,src=pre.getAttribute("data-src"),parent=pre,lang=/\blang(?:uage)?-(?!\*)(\w+)\b/i;parent&&!lang.test(parent.className);)parent=parent.parentNode;if(parent&&(language=(pre.className.match(lang)||[,""])[1]),!language){var extension=(src.match(/\.(\w+)$/)||[,""])[1];language=Extensions[extension]||extension}var code=document.createElement("code");code.className="language-"+language,pre.textContent="",code.textContent="Loading…",pre.appendChild(code);var xhr=new XMLHttpRequest;xhr.open("GET",src,!0),xhr.onreadystatechange=function(){4==xhr.readyState&&(xhr.status<400&&xhr.responseText?(code.textContent=xhr.responseText,Prism.highlightElement(code)):xhr.status>=400?code.textContent="✖ Error "+xhr.status+" while fetching file: "+xhr.statusText:code.textContent="✖ Error: File does not exist or is empty")},xhr.send(null)})},document.addEventListener("DOMContentLoaded",self.Prism.fileHighlight))}()}).call(exports,__webpack_require__(46))},function(module,exports,__webpack_require__){"use strict";var factory=__webpack_require__(101);module.exports=function(isValidElement){return factory(isValidElement,!1)}},function(module,exports,__webpack_require__){"use strict";(function(process){var emptyFunction=__webpack_require__(12),invariant=__webpack_require__(1),warning=__webpack_require__(2),ReactPropTypesSecret=__webpack_require__(53),checkPropTypes=__webpack_require__(225);module.exports=function(isValidElement,throwOnDirectAccess){function getIteratorFn(maybeIterable){var iteratorFn=maybeIterable&&(ITERATOR_SYMBOL&&maybeIterable[ITERATOR_SYMBOL]||maybeIterable[FAUX_ITERATOR_SYMBOL]);if("function"==typeof iteratorFn)return iteratorFn}function is(x,y){return x===y?0!==x||1/x==1/y:x!==x&&y!==y}function PropTypeError(message){this.message=message,this.stack=""}function createChainableTypeChecker(validate){function checkType(isRequired,props,propName,componentName,location,propFullName,secret){if(componentName=componentName||ANONYMOUS,propFullName=propFullName||propName,secret!==ReactPropTypesSecret)if(throwOnDirectAccess)invariant(!1,"Calling PropTypes validators directly is not supported by the `prop-types` package. Use `PropTypes.checkPropTypes()` to call them. Read more at http://fb.me/use-check-prop-types");else if("production"!==process.env.NODE_ENV&&"undefined"!=typeof console){var cacheKey=componentName+":"+propName;!manualPropTypeCallCache[cacheKey]&&manualPropTypeWarningCount<3&&(warning(!1,"You are manually calling a React.PropTypes validation function for the `%s` prop on `%s`. This is deprecated and will throw in the standalone `prop-types` package. You may be seeing this warning due to a third-party PropTypes library. See https://fb.me/react-warning-dont-call-proptypes for details.",propFullName,componentName),manualPropTypeCallCache[cacheKey]=!0,manualPropTypeWarningCount++)}return null==props[propName]?isRequired?new PropTypeError(null===props[propName]?"The "+location+" `"+propFullName+"` is marked as required in `"+componentName+"`, but its value is `null`.":"The "+location+" `"+propFullName+"` is marked as required in `"+componentName+"`, but its value is `undefined`."):null:validate(props,propName,componentName,location,propFullName)}if("production"!==process.env.NODE_ENV)var manualPropTypeCallCache={},manualPropTypeWarningCount=0;var chainedCheckType=checkType.bind(null,!1);return chainedCheckType.isRequired=checkType.bind(null,!0),chainedCheckType}function createPrimitiveTypeChecker(expectedType){function validate(props,propName,componentName,location,propFullName,secret){var propValue=props[propName];if(getPropType(propValue)!==expectedType)return new PropTypeError("Invalid "+location+" `"+propFullName+"` of type `"+getPreciseType(propValue)+"` supplied to `"+componentName+"`, expected `"+expectedType+"`.");return null}return createChainableTypeChecker(validate)}function createArrayOfTypeChecker(typeChecker){function validate(props,propName,componentName,location,propFullName){if("function"!=typeof typeChecker)return new PropTypeError("Property `"+propFullName+"` of component `"+componentName+"` has invalid PropType notation inside arrayOf.");var propValue=props[propName];if(!Array.isArray(propValue)){return new PropTypeError("Invalid "+location+" `"+propFullName+"` of type `"+getPropType(propValue)+"` supplied to `"+componentName+"`, expected an array.")}for(var i=0;i must be an array if `multiple` is true.%s",propName,getDeclarationErrorAddendum(owner)):!props.multiple&&isArray&&"production"!==process.env.NODE_ENV&&warning(!1,"The `%s` prop supplied to ',""],tableWrap=[1,"
","
"],trWrap=[3,"","
"],svgWrap=[1,'',""],markupWrap={"*":[1,"?
","
"],area:[1,"",""],col:[2,"","
"],legend:[1,"
","
"],param:[1,"",""],tr:[2,"","
"],optgroup:selectWrap,option:selectWrap,caption:tableWrap,colgroup:tableWrap,tbody:tableWrap,tfoot:tableWrap,thead:tableWrap,td:trWrap,th:trWrap};["circle","clipPath","defs","ellipse","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","text","tspan"].forEach(function(nodeName){markupWrap[nodeName]=svgWrap,shouldWrap[nodeName]=!0}),module.exports=getMarkupWrap}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";function getUnboundedScrollPosition(scrollable){return scrollable===window?{x:window.pageXOffset||document.documentElement.scrollLeft,y:window.pageYOffset||document.documentElement.scrollTop}:{x:scrollable.scrollLeft,y:scrollable.scrollTop}}module.exports=getUnboundedScrollPosition},function(module,exports,__webpack_require__){"use strict";function hyphenate(string){return string.replace(_uppercasePattern,"-$1").toLowerCase()}var _uppercasePattern=/([A-Z])/g;module.exports=hyphenate},function(module,exports,__webpack_require__){"use strict";function hyphenateStyleName(string){return hyphenate(string).replace(msPattern,"-ms-")}var hyphenate=__webpack_require__(194),msPattern=/^ms-/;module.exports=hyphenateStyleName},function(module,exports,__webpack_require__){"use strict";function isNode(object){return!(!object||!("function"==typeof Node?object instanceof Node:"object"==typeof object&&"number"==typeof object.nodeType&&"string"==typeof object.nodeName))}module.exports=isNode},function(module,exports,__webpack_require__){"use strict";function isTextNode(object){return isNode(object)&&3==object.nodeType}var isNode=__webpack_require__(196);module.exports=isTextNode},function(module,exports,__webpack_require__){"use strict";function memoizeStringOnly(callback){var cache={};return function(string){return cache.hasOwnProperty(string)||(cache[string]=callback.call(this,string)),cache[string]}}module.exports=memoizeStringOnly},function(module,exports,__webpack_require__){"use strict";var performance,ExecutionEnvironment=__webpack_require__(9);ExecutionEnvironment.canUseDOM&&(performance=window.performance||window.msPerformance||window.webkitPerformance),module.exports=performance||{}},function(module,exports,__webpack_require__){"use strict";var performanceNow,performance=__webpack_require__(199);performanceNow=performance.now?function(){return performance.now()}:function(){return Date.now()},module.exports=performanceNow},function(module,exports,__webpack_require__){"use strict";module.exports=function(x){var type=typeof x;return null!==x&&("object"===type||"function"===type)}},function(module,exports,__webpack_require__){"use strict";function isObjectObject(o){return!0===isObject(o)&&"[object Object]"===Object.prototype.toString.call(o)}/*! +module.exports=collapse},function(module,exports,__webpack_require__){"use strict";(function(process){function identity(fn){return fn}function factory(ReactComponent,isValidElement,ReactNoopUpdateQueue){function validateTypeDef(Constructor,typeDef,location){for(var propName in typeDef)typeDef.hasOwnProperty(propName)&&"production"!==process.env.NODE_ENV&&warning("function"==typeof typeDef[propName],"%s: %s type `%s` is invalid; it must be a function, usually from React.PropTypes.",Constructor.displayName||"ReactClass",ReactPropTypeLocationNames[location],propName)}function validateMethodOverride(isAlreadyDefined,name){var specPolicy=ReactClassInterface.hasOwnProperty(name)?ReactClassInterface[name]:null;ReactClassMixin.hasOwnProperty(name)&&_invariant("OVERRIDE_BASE"===specPolicy,"ReactClassInterface: You are attempting to override `%s` from your class specification. Ensure that your method names do not overlap with React methods.",name),isAlreadyDefined&&_invariant("DEFINE_MANY"===specPolicy||"DEFINE_MANY_MERGED"===specPolicy,"ReactClassInterface: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.",name)}function mixSpecIntoComponent(Constructor,spec){if(spec){_invariant("function"!=typeof spec,"ReactClass: You're attempting to use a component class or function as a mixin. Instead, just use a regular object."),_invariant(!isValidElement(spec),"ReactClass: You're attempting to use a component as a mixin. Instead, just use a regular object.");var proto=Constructor.prototype,autoBindPairs=proto.__reactAutoBindPairs;spec.hasOwnProperty(MIXINS_KEY)&&RESERVED_SPEC_KEYS.mixins(Constructor,spec.mixins);for(var name in spec)if(spec.hasOwnProperty(name)&&name!==MIXINS_KEY){var property=spec[name],isAlreadyDefined=proto.hasOwnProperty(name);if(validateMethodOverride(isAlreadyDefined,name),RESERVED_SPEC_KEYS.hasOwnProperty(name))RESERVED_SPEC_KEYS[name](Constructor,property);else{var isReactClassMethod=ReactClassInterface.hasOwnProperty(name),isFunction="function"==typeof property,shouldAutoBind=isFunction&&!isReactClassMethod&&!isAlreadyDefined&&!1!==spec.autobind;if(shouldAutoBind)autoBindPairs.push(name,property),proto[name]=property;else if(isAlreadyDefined){var specPolicy=ReactClassInterface[name];_invariant(isReactClassMethod&&("DEFINE_MANY_MERGED"===specPolicy||"DEFINE_MANY"===specPolicy),"ReactClass: Unexpected spec policy %s for key %s when mixing in component specs.",specPolicy,name),"DEFINE_MANY_MERGED"===specPolicy?proto[name]=createMergedResultFunction(proto[name],property):"DEFINE_MANY"===specPolicy&&(proto[name]=createChainedFunction(proto[name],property))}else proto[name]=property,"production"!==process.env.NODE_ENV&&"function"==typeof property&&spec.displayName&&(proto[name].displayName=spec.displayName+"_"+name)}}}else if("production"!==process.env.NODE_ENV){var typeofSpec=typeof spec,isMixinValid="object"===typeofSpec&&null!==spec;"production"!==process.env.NODE_ENV&&warning(isMixinValid,"%s: You're attempting to include a mixin that is either null or not an object. Check the mixins included by the component, as well as any mixins they include themselves. Expected object but got %s.",Constructor.displayName||"ReactClass",null===spec?null:typeofSpec)}}function mixStaticSpecIntoComponent(Constructor,statics){if(statics)for(var name in statics){var property=statics[name];if(statics.hasOwnProperty(name)){var isReserved=name in RESERVED_SPEC_KEYS;_invariant(!isReserved,'ReactClass: You are attempting to define a reserved property, `%s`, that shouldn\'t be on the "statics" key. Define it as an instance property instead; it will still be accessible on the constructor.',name);var isInherited=name in Constructor;_invariant(!isInherited,"ReactClass: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.",name),Constructor[name]=property}}}function mergeIntoWithNoDuplicateKeys(one,two){_invariant(one&&two&&"object"==typeof one&&"object"==typeof two,"mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.");for(var key in two)two.hasOwnProperty(key)&&(_invariant(void 0===one[key],"mergeIntoWithNoDuplicateKeys(): Tried to merge two objects with the same key: `%s`. This conflict may be due to a mixin; in particular, this may be caused by two getInitialState() or getDefaultProps() methods returning objects with clashing keys.",key),one[key]=two[key]);return one}function createMergedResultFunction(one,two){return function(){var a=one.apply(this,arguments),b=two.apply(this,arguments);if(null==a)return b;if(null==b)return a;var c={};return mergeIntoWithNoDuplicateKeys(c,a),mergeIntoWithNoDuplicateKeys(c,b),c}}function createChainedFunction(one,two){return function(){one.apply(this,arguments),two.apply(this,arguments)}}function bindAutoBindMethod(component,method){var boundMethod=method.bind(component);if("production"!==process.env.NODE_ENV){boundMethod.__reactBoundContext=component,boundMethod.__reactBoundMethod=method,boundMethod.__reactBoundArguments=null;var componentName=component.constructor.displayName,_bind=boundMethod.bind;boundMethod.bind=function(newThis){for(var _len=arguments.length,args=Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];if(newThis!==component&&null!==newThis)"production"!==process.env.NODE_ENV&&warning(!1,"bind(): React component methods may only be bound to the component instance. See %s",componentName);else if(!args.length)return"production"!==process.env.NODE_ENV&&warning(!1,"bind(): You are binding a component method to the component. React does this for you automatically in a high-performance way, so you can safely remove this call. See %s",componentName),boundMethod;var reboundMethod=_bind.apply(boundMethod,arguments);return reboundMethod.__reactBoundContext=component,reboundMethod.__reactBoundMethod=method,reboundMethod.__reactBoundArguments=args,reboundMethod}}return boundMethod}function bindAutoBindMethods(component){for(var pairs=component.__reactAutoBindPairs,i=0;i element rendered."):invariant(!1)),createArrayFromMixed(scripts).forEach(handleScript));for(var nodes=Array.from(node.childNodes);node.lastChild;)node.removeChild(node.lastChild);return nodes}var ExecutionEnvironment=__webpack_require__(9),createArrayFromMixed=__webpack_require__(191),getMarkupWrap=__webpack_require__(193),invariant=__webpack_require__(1),dummyNode=ExecutionEnvironment.canUseDOM?document.createElement("div"):null,nodeNamePattern=/^\s*<(\w+)/;module.exports=createNodesFromMarkup}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";(function(process){function getMarkupWrap(nodeName){return dummyNode||("production"!==process.env.NODE_ENV?invariant(!1,"Markup wrapping node not initialized"):invariant(!1)),markupWrap.hasOwnProperty(nodeName)||(nodeName="*"),shouldWrap.hasOwnProperty(nodeName)||(dummyNode.innerHTML="*"===nodeName?"":"<"+nodeName+">",shouldWrap[nodeName]=!dummyNode.firstChild),shouldWrap[nodeName]?markupWrap[nodeName]:null}var ExecutionEnvironment=__webpack_require__(9),invariant=__webpack_require__(1),dummyNode=ExecutionEnvironment.canUseDOM?document.createElement("div"):null,shouldWrap={},selectWrap=[1,'"],tableWrap=[1,"","
"],trWrap=[3,"","
"],svgWrap=[1,'',""],markupWrap={"*":[1,"?
","
"],area:[1,"",""],col:[2,"","
"],legend:[1,"
","
"],param:[1,"",""],tr:[2,"","
"],optgroup:selectWrap,option:selectWrap,caption:tableWrap,colgroup:tableWrap,tbody:tableWrap,tfoot:tableWrap,thead:tableWrap,td:trWrap,th:trWrap};["circle","clipPath","defs","ellipse","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","text","tspan"].forEach(function(nodeName){markupWrap[nodeName]=svgWrap,shouldWrap[nodeName]=!0}),module.exports=getMarkupWrap}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";function getUnboundedScrollPosition(scrollable){return scrollable===window?{x:window.pageXOffset||document.documentElement.scrollLeft,y:window.pageYOffset||document.documentElement.scrollTop}:{x:scrollable.scrollLeft,y:scrollable.scrollTop}}module.exports=getUnboundedScrollPosition},function(module,exports,__webpack_require__){"use strict";function hyphenate(string){return string.replace(_uppercasePattern,"-$1").toLowerCase()}var _uppercasePattern=/([A-Z])/g;module.exports=hyphenate},function(module,exports,__webpack_require__){"use strict";function hyphenateStyleName(string){return hyphenate(string).replace(msPattern,"-ms-")}var hyphenate=__webpack_require__(195),msPattern=/^ms-/;module.exports=hyphenateStyleName},function(module,exports,__webpack_require__){"use strict";function isNode(object){return!(!object||!("function"==typeof Node?object instanceof Node:"object"==typeof object&&"number"==typeof object.nodeType&&"string"==typeof object.nodeName))}module.exports=isNode},function(module,exports,__webpack_require__){"use strict";function isTextNode(object){return isNode(object)&&3==object.nodeType}var isNode=__webpack_require__(197);module.exports=isTextNode},function(module,exports,__webpack_require__){"use strict";function memoizeStringOnly(callback){var cache={};return function(string){return cache.hasOwnProperty(string)||(cache[string]=callback.call(this,string)),cache[string]}}module.exports=memoizeStringOnly},function(module,exports,__webpack_require__){"use strict";var performance,ExecutionEnvironment=__webpack_require__(9);ExecutionEnvironment.canUseDOM&&(performance=window.performance||window.msPerformance||window.webkitPerformance),module.exports=performance||{}},function(module,exports,__webpack_require__){"use strict";var performanceNow,performance=__webpack_require__(200);performanceNow=performance.now?function(){return performance.now()}:function(){return Date.now()},module.exports=performanceNow},function(module,exports,__webpack_require__){"use strict";module.exports=function(x){var type=typeof x;return null!==x&&("object"===type||"function"===type)}},function(module,exports,__webpack_require__){"use strict";function isObjectObject(o){return!0===isObject(o)&&"[object Object]"===Object.prototype.toString.call(o)}/*! * is-plain-object * * Copyright (c) 2014-2015, Jon Schlinkert. * Licensed under the MIT License. */ -var isObject=__webpack_require__(204);module.exports=function(o){var ctor,prot;return!1!==isObjectObject(o)&&("function"==typeof(ctor=o.constructor)&&(prot=ctor.prototype,!1!==isObjectObject(prot)&&!1!==prot.hasOwnProperty("isPrototypeOf")))}},function(module,exports,__webpack_require__){"use strict";module.exports=function(re){return"[object RegExp]"===Object.prototype.toString.call(re)}},function(module,exports,__webpack_require__){"use strict";/*! +var isObject=__webpack_require__(205);module.exports=function(o){var ctor,prot;return!1!==isObjectObject(o)&&("function"==typeof(ctor=o.constructor)&&(prot=ctor.prototype,!1!==isObjectObject(prot)&&!1!==prot.hasOwnProperty("isPrototypeOf")))}},function(module,exports,__webpack_require__){"use strict";module.exports=function(re){return"[object RegExp]"===Object.prototype.toString.call(re)}},function(module,exports,__webpack_require__){"use strict";/*! * isobject * * Copyright (c) 2014-2015, Jon Schlinkert. * Licensed under the MIT License. */ -module.exports=function(val){return null!=val&&"object"==typeof val&&!Array.isArray(val)}},function(module,exports){function baseClamp(number,lower,upper){return number===number&&(void 0!==upper&&(number=number<=upper?number:upper),void 0!==lower&&(number=number>=lower?number:lower)),number}module.exports=baseClamp},function(module,exports,__webpack_require__){function baseFill(array,value,start,end){var length=array.length;for(start=toInteger(start),start<0&&(start=-start>length?0:length+start),end=void 0===end||end>length?length:toInteger(end),end<0&&(end+=length),end=start>end?0:toLength(end);start-1&&value%1==0&&value-1&&value%1==0&&value<=MAX_SAFE_INTEGER}var MAX_SAFE_INTEGER=9007199254740991;module.exports=isLength},function(module,exports){function isObjectLike(value){return null!=value&&"object"==typeof value}module.exports=isObjectLike},function(module,exports,__webpack_require__){function isSymbol(value){return"symbol"==typeof value||isObjectLike(value)&&baseGetTag(value)==symbolTag}var baseGetTag=__webpack_require__(97),isObjectLike=__webpack_require__(218),symbolTag="[object Symbol]";module.exports=isSymbol},function(module,exports,__webpack_require__){function toFinite(value){if(!value)return 0===value?value:0;if((value=toNumber(value))===INFINITY||value===-INFINITY){return(value<0?-1:1)*MAX_INTEGER}return value===value?value:0}var toNumber=__webpack_require__(222),INFINITY=1/0,MAX_INTEGER=1.7976931348623157e308;module.exports=toFinite},function(module,exports,__webpack_require__){function toLength(value){return value?baseClamp(toInteger(value),0,MAX_ARRAY_LENGTH):0}var baseClamp=__webpack_require__(205),toInteger=__webpack_require__(98),MAX_ARRAY_LENGTH=4294967295;module.exports=toLength},function(module,exports,__webpack_require__){function toNumber(value){if("number"==typeof value)return value;if(isSymbol(value))return NAN;if(isObject(value)){var other="function"==typeof value.valueOf?value.valueOf():value;value=isObject(other)?other+"":other}if("string"!=typeof value)return 0===value?value:+value;value=value.replace(reTrim,"");var isBinary=reIsBinary.test(value);return isBinary||reIsOctal.test(value)?freeParseInt(value.slice(2),isBinary?2:8):reIsBadHex.test(value)?NAN:+value}var isObject=__webpack_require__(52),isSymbol=__webpack_require__(219),NAN=NaN,reTrim=/^\s+|\s+$/g,reIsBadHex=/^[-+]0x[0-9a-f]+$/i,reIsBinary=/^0b[01]+$/i,reIsOctal=/^0o[0-7]+$/i,freeParseInt=parseInt;module.exports=toNumber},function(module,exports){!function(Prism){var javascript=Prism.util.clone(Prism.languages.javascript);Prism.languages.jsx=Prism.languages.extend("markup",javascript),Prism.languages.jsx.tag.pattern=/<\/?[\w\.:-]+\s*(?:\s+[\w\.:-]+(?:=(?:("|')(\\?[\w\W])*?\1|[^\s'">=]+|(\{[\w\W]*?\})))?\s*)*\/?>/i,Prism.languages.jsx.tag.inside["attr-value"].pattern=/=[^\{](?:('|")[\w\W]*?(\1)|[^\s>]+)/i;var jsxExpression=Prism.util.clone(Prism.languages.jsx);delete jsxExpression.punctuation,jsxExpression=Prism.languages.insertBefore("jsx","operator",{punctuation:/=(?={)|[{}[\];(),.:]/},{jsx:jsxExpression}),Prism.languages.insertBefore("inside","attr-value",{script:{pattern:/=(\{(?:\{[^}]*\}|[^}])+\})/i,inside:jsxExpression,alias:"language-javascript"}},Prism.languages.jsx.tag)}(Prism)},function(module,exports,__webpack_require__){"use strict";(function(process){function checkPropTypes(typeSpecs,values,location,componentName,getStack){if("production"!==process.env.NODE_ENV)for(var typeSpecName in typeSpecs)if(typeSpecs.hasOwnProperty(typeSpecName)){var error;try{invariant("function"==typeof typeSpecs[typeSpecName],"%s: %s type `%s` is invalid; it must be a function, usually from React.PropTypes.",componentName||"React class",location,typeSpecName),error=typeSpecs[typeSpecName](values,typeSpecName,componentName,location,null,ReactPropTypesSecret)}catch(ex){error=ex}if(warning(!error||error instanceof Error,"%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",componentName||"React class",location,typeSpecName,typeof error),error instanceof Error&&!(error.message in loggedTypeFailures)){loggedTypeFailures[error.message]=!0;var stack=getStack?getStack():"";warning(!1,"Failed %s type: %s%s",location,error.message,null!=stack?stack:"")}}}if("production"!==process.env.NODE_ENV)var invariant=__webpack_require__(1),warning=__webpack_require__(2),ReactPropTypesSecret=__webpack_require__(53),loggedTypeFailures={};module.exports=checkPropTypes}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";var emptyFunction=__webpack_require__(12),invariant=__webpack_require__(1),ReactPropTypesSecret=__webpack_require__(53);module.exports=function(){function shim(props,propName,componentName,location,propFullName,secret){secret!==ReactPropTypesSecret&&invariant(!1,"Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types")}function getShim(){return shim}shim.isRequired=shim;var ReactPropTypes={array:shim,bool:shim,func:shim,number:shim,object:shim,string:shim,symbol:shim,any:shim,arrayOf:getShim,element:shim,instanceOf:getShim,node:shim,objectOf:getShim,oneOf:getShim,oneOfType:getShim,shape:getShim};return ReactPropTypes.checkPropTypes=emptyFunction,ReactPropTypes.PropTypes=ReactPropTypes,ReactPropTypes}},function(module,exports,__webpack_require__){"use strict";module.exports=__webpack_require__(240)},function(module,exports,__webpack_require__){"use strict";var ARIADOMPropertyConfig={Properties:{"aria-current":0,"aria-details":0,"aria-disabled":0,"aria-hidden":0,"aria-invalid":0,"aria-keyshortcuts":0,"aria-label":0,"aria-roledescription":0,"aria-autocomplete":0,"aria-checked":0,"aria-expanded":0,"aria-haspopup":0,"aria-level":0,"aria-modal":0,"aria-multiline":0,"aria-multiselectable":0,"aria-orientation":0,"aria-placeholder":0,"aria-pressed":0,"aria-readonly":0,"aria-required":0,"aria-selected":0,"aria-sort":0,"aria-valuemax":0,"aria-valuemin":0,"aria-valuenow":0,"aria-valuetext":0,"aria-atomic":0,"aria-busy":0,"aria-live":0,"aria-relevant":0,"aria-dropeffect":0,"aria-grabbed":0,"aria-activedescendant":0,"aria-colcount":0,"aria-colindex":0,"aria-colspan":0,"aria-controls":0,"aria-describedby":0,"aria-errormessage":0,"aria-flowto":0,"aria-labelledby":0,"aria-owns":0,"aria-posinset":0,"aria-rowcount":0,"aria-rowindex":0,"aria-rowspan":0,"aria-setsize":0},DOMAttributeNames:{},DOMPropertyNames:{}};module.exports=ARIADOMPropertyConfig},function(module,exports,__webpack_require__){"use strict";var ReactDOMComponentTree=__webpack_require__(8),focusNode=__webpack_require__(94),AutoFocusUtils={focusDOMComponent:function(){focusNode(ReactDOMComponentTree.getNodeFromInstance(this))}};module.exports=AutoFocusUtils},function(module,exports,__webpack_require__){"use strict";function isKeypressCommand(nativeEvent){return(nativeEvent.ctrlKey||nativeEvent.altKey||nativeEvent.metaKey)&&!(nativeEvent.ctrlKey&&nativeEvent.altKey)}function getCompositionEventType(topLevelType){switch(topLevelType){case"topCompositionStart":return eventTypes.compositionStart;case"topCompositionEnd":return eventTypes.compositionEnd;case"topCompositionUpdate":return eventTypes.compositionUpdate}}function isFallbackCompositionStart(topLevelType,nativeEvent){return"topKeyDown"===topLevelType&&nativeEvent.keyCode===START_KEYCODE}function isFallbackCompositionEnd(topLevelType,nativeEvent){switch(topLevelType){case"topKeyUp":return-1!==END_KEYCODES.indexOf(nativeEvent.keyCode);case"topKeyDown":return nativeEvent.keyCode!==START_KEYCODE;case"topKeyPress":case"topMouseDown":case"topBlur":return!0;default:return!1}}function getDataFromCustomEvent(nativeEvent){var detail=nativeEvent.detail;return"object"==typeof detail&&"data"in detail?detail.data:null}function extractCompositionEvent(topLevelType,targetInst,nativeEvent,nativeEventTarget){var eventType,fallbackData;if(canUseCompositionEvent?eventType=getCompositionEventType(topLevelType):currentComposition?isFallbackCompositionEnd(topLevelType,nativeEvent)&&(eventType=eventTypes.compositionEnd):isFallbackCompositionStart(topLevelType,nativeEvent)&&(eventType=eventTypes.compositionStart),!eventType)return null;useFallbackCompositionData&&(currentComposition||eventType!==eventTypes.compositionStart?eventType===eventTypes.compositionEnd&¤tComposition&&(fallbackData=currentComposition.getData()):currentComposition=FallbackCompositionState.getPooled(nativeEventTarget));var event=SyntheticCompositionEvent.getPooled(eventType,targetInst,nativeEvent,nativeEventTarget);if(fallbackData)event.data=fallbackData;else{var customData=getDataFromCustomEvent(nativeEvent);null!==customData&&(event.data=customData)}return EventPropagators.accumulateTwoPhaseDispatches(event),event}function getNativeBeforeInputChars(topLevelType,nativeEvent){switch(topLevelType){case"topCompositionEnd":return getDataFromCustomEvent(nativeEvent);case"topKeyPress":return nativeEvent.which!==SPACEBAR_CODE?null:(hasSpaceKeypress=!0,SPACEBAR_CHAR);case"topTextInput":var chars=nativeEvent.data;return chars===SPACEBAR_CHAR&&hasSpaceKeypress?null:chars;default:return null}}function getFallbackBeforeInputChars(topLevelType,nativeEvent){if(currentComposition){if("topCompositionEnd"===topLevelType||!canUseCompositionEvent&&isFallbackCompositionEnd(topLevelType,nativeEvent)){var chars=currentComposition.getData();return FallbackCompositionState.release(currentComposition),currentComposition=null,chars}return null}switch(topLevelType){case"topPaste":return null;case"topKeyPress":return nativeEvent.which&&!isKeypressCommand(nativeEvent)?String.fromCharCode(nativeEvent.which):null;case"topCompositionEnd":return useFallbackCompositionData?null:nativeEvent.data;default:return null}}function extractBeforeInputEvent(topLevelType,targetInst,nativeEvent,nativeEventTarget){var chars;if(!(chars=canUseTextInputEvent?getNativeBeforeInputChars(topLevelType,nativeEvent):getFallbackBeforeInputChars(topLevelType,nativeEvent)))return null;var event=SyntheticInputEvent.getPooled(eventTypes.beforeInput,targetInst,nativeEvent,nativeEventTarget);return event.data=chars,EventPropagators.accumulateTwoPhaseDispatches(event),event}var EventPropagators=__webpack_require__(31),ExecutionEnvironment=__webpack_require__(9),FallbackCompositionState=__webpack_require__(235),SyntheticCompositionEvent=__webpack_require__(278),SyntheticInputEvent=__webpack_require__(281),END_KEYCODES=[9,13,27,32],START_KEYCODE=229,canUseCompositionEvent=ExecutionEnvironment.canUseDOM&&"CompositionEvent"in window,documentMode=null;ExecutionEnvironment.canUseDOM&&"documentMode"in document&&(documentMode=document.documentMode);var canUseTextInputEvent=ExecutionEnvironment.canUseDOM&&"TextEvent"in window&&!documentMode&&!function(){var opera=window.opera;return"object"==typeof opera&&"function"==typeof opera.version&&parseInt(opera.version(),10)<=12}(),useFallbackCompositionData=ExecutionEnvironment.canUseDOM&&(!canUseCompositionEvent||documentMode&&documentMode>8&&documentMode<=11),SPACEBAR_CODE=32,SPACEBAR_CHAR=String.fromCharCode(SPACEBAR_CODE),eventTypes={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["topCompositionEnd","topKeyPress","topTextInput","topPaste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:["topBlur","topCompositionEnd","topKeyDown","topKeyPress","topKeyUp","topMouseDown"]},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:["topBlur","topCompositionStart","topKeyDown","topKeyPress","topKeyUp","topMouseDown"]},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:["topBlur","topCompositionUpdate","topKeyDown","topKeyPress","topKeyUp","topMouseDown"]}},hasSpaceKeypress=!1,currentComposition=null,BeforeInputEventPlugin={eventTypes:eventTypes,extractEvents:function(topLevelType,targetInst,nativeEvent,nativeEventTarget){return[extractCompositionEvent(topLevelType,targetInst,nativeEvent,nativeEventTarget),extractBeforeInputEvent(topLevelType,targetInst,nativeEvent,nativeEventTarget)]}};module.exports=BeforeInputEventPlugin},function(module,exports,__webpack_require__){"use strict";(function(process){var CSSProperty=__webpack_require__(102),ExecutionEnvironment=__webpack_require__(9),ReactInstrumentation=__webpack_require__(14),camelizeStyleName=__webpack_require__(188),dangerousStyleValue=__webpack_require__(288),hyphenateStyleName=__webpack_require__(195),memoizeStringOnly=__webpack_require__(198),warning=__webpack_require__(2),processStyleName=memoizeStringOnly(function(styleName){return hyphenateStyleName(styleName)}),hasShorthandPropertyBug=!1,styleFloatAccessor="cssFloat";if(ExecutionEnvironment.canUseDOM){var tempStyle=document.createElement("div").style;try{tempStyle.font=""}catch(e){hasShorthandPropertyBug=!0}void 0===document.documentElement.style.cssFloat&&(styleFloatAccessor="styleFloat")}if("production"!==process.env.NODE_ENV)var badVendoredStyleNamePattern=/^(?:webkit|moz|o)[A-Z]/,badStyleValueWithSemicolonPattern=/;\s*$/,warnedStyleNames={},warnedStyleValues={},warnedForNaNValue=!1,warnHyphenatedStyleName=function(name,owner){warnedStyleNames.hasOwnProperty(name)&&warnedStyleNames[name]||(warnedStyleNames[name]=!0,"production"!==process.env.NODE_ENV&&warning(!1,"Unsupported style property %s. Did you mean %s?%s",name,camelizeStyleName(name),checkRenderMessage(owner)))},warnBadVendoredStyleName=function(name,owner){warnedStyleNames.hasOwnProperty(name)&&warnedStyleNames[name]||(warnedStyleNames[name]=!0,"production"!==process.env.NODE_ENV&&warning(!1,"Unsupported vendor-prefixed style property %s. Did you mean %s?%s",name,name.charAt(0).toUpperCase()+name.slice(1),checkRenderMessage(owner)))},warnStyleValueWithSemicolon=function(name,value,owner){warnedStyleValues.hasOwnProperty(value)&&warnedStyleValues[value]||(warnedStyleValues[value]=!0,"production"!==process.env.NODE_ENV&&warning(!1,'Style property values shouldn\'t contain a semicolon.%s Try "%s: %s" instead.',checkRenderMessage(owner),name,value.replace(badStyleValueWithSemicolonPattern,"")))},warnStyleValueIsNaN=function(name,value,owner){warnedForNaNValue||(warnedForNaNValue=!0,"production"!==process.env.NODE_ENV&&warning(!1,"`NaN` is an invalid value for the `%s` css style property.%s",name,checkRenderMessage(owner)))},checkRenderMessage=function(owner){if(owner){var name=owner.getName();if(name)return" Check the render method of `"+name+"`."}return""},warnValidStyle=function(name,value,component){var owner;component&&(owner=component._currentElement._owner),name.indexOf("-")>-1?warnHyphenatedStyleName(name,owner):badVendoredStyleNamePattern.test(name)?warnBadVendoredStyleName(name,owner):badStyleValueWithSemicolonPattern.test(value)&&warnStyleValueWithSemicolon(name,value,owner),"number"==typeof value&&isNaN(value)&&warnStyleValueIsNaN(name,0,owner)};var CSSPropertyOperations={createMarkupForStyles:function(styles,component){var serialized="";for(var styleName in styles)if(styles.hasOwnProperty(styleName)){var isCustomProperty=0===styleName.indexOf("--"),styleValue=styles[styleName];"production"!==process.env.NODE_ENV&&(isCustomProperty||warnValidStyle(styleName,styleValue,component)),null!=styleValue&&(serialized+=processStyleName(styleName)+":",serialized+=dangerousStyleValue(styleName,styleValue,component,isCustomProperty)+";")}return serialized||null},setValueForStyles:function(node,styles,component){"production"!==process.env.NODE_ENV&&ReactInstrumentation.debugTool.onHostOperation({instanceID:component._debugID,type:"update styles",payload:styles});var style=node.style;for(var styleName in styles)if(styles.hasOwnProperty(styleName)){var isCustomProperty=0===styleName.indexOf("--");"production"!==process.env.NODE_ENV&&(isCustomProperty||warnValidStyle(styleName,styles[styleName],component));var styleValue=dangerousStyleValue(styleName,styles[styleName],component,isCustomProperty);if("float"!==styleName&&"cssFloat"!==styleName||(styleName=styleFloatAccessor),isCustomProperty)style.setProperty(styleName,styleValue);else if(styleValue)style[styleName]=styleValue;else{var expansion=hasShorthandPropertyBug&&CSSProperty.shorthandPropertyExpansions[styleName];if(expansion)for(var individualStyleName in expansion)style[individualStyleName]="";else style[styleName]=""}}}};module.exports=CSSPropertyOperations}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";function createAndAccumulateChangeEvent(inst,nativeEvent,target){var event=SyntheticEvent.getPooled(eventTypes.change,inst,nativeEvent,target);return event.type="change",EventPropagators.accumulateTwoPhaseDispatches(event),event}function shouldUseChangeEvent(elem){var nodeName=elem.nodeName&&elem.nodeName.toLowerCase();return"select"===nodeName||"input"===nodeName&&"file"===elem.type}function manualDispatchChangeEvent(nativeEvent){var event=createAndAccumulateChangeEvent(activeElementInst,nativeEvent,getEventTarget(nativeEvent));ReactUpdates.batchedUpdates(runEventInBatch,event)}function runEventInBatch(event){EventPluginHub.enqueueEvents(event),EventPluginHub.processEventQueue(!1)}function startWatchingForChangeEventIE8(target,targetInst){activeElement=target,activeElementInst=targetInst,activeElement.attachEvent("onchange",manualDispatchChangeEvent)}function stopWatchingForChangeEventIE8(){activeElement&&(activeElement.detachEvent("onchange",manualDispatchChangeEvent),activeElement=null,activeElementInst=null)}function getInstIfValueChanged(targetInst,nativeEvent){var updated=inputValueTracking.updateValueIfChanged(targetInst),simulated=!0===nativeEvent.simulated&&ChangeEventPlugin._allowSimulatedPassThrough;if(updated||simulated)return targetInst}function getTargetInstForChangeEvent(topLevelType,targetInst){if("topChange"===topLevelType)return targetInst}function handleEventsForChangeEventIE8(topLevelType,target,targetInst){"topFocus"===topLevelType?(stopWatchingForChangeEventIE8(),startWatchingForChangeEventIE8(target,targetInst)):"topBlur"===topLevelType&&stopWatchingForChangeEventIE8()}function startWatchingForValueChange(target,targetInst){activeElement=target,activeElementInst=targetInst,activeElement.attachEvent("onpropertychange",handlePropertyChange)}function stopWatchingForValueChange(){activeElement&&(activeElement.detachEvent("onpropertychange",handlePropertyChange),activeElement=null,activeElementInst=null)}function handlePropertyChange(nativeEvent){"value"===nativeEvent.propertyName&&getInstIfValueChanged(activeElementInst,nativeEvent)&&manualDispatchChangeEvent(nativeEvent)}function handleEventsForInputEventPolyfill(topLevelType,target,targetInst){"topFocus"===topLevelType?(stopWatchingForValueChange(),startWatchingForValueChange(target,targetInst)):"topBlur"===topLevelType&&stopWatchingForValueChange()}function getTargetInstForInputEventPolyfill(topLevelType,targetInst,nativeEvent){if("topSelectionChange"===topLevelType||"topKeyUp"===topLevelType||"topKeyDown"===topLevelType)return getInstIfValueChanged(activeElementInst,nativeEvent)}function shouldUseClickEvent(elem){var nodeName=elem.nodeName;return nodeName&&"input"===nodeName.toLowerCase()&&("checkbox"===elem.type||"radio"===elem.type)}function getTargetInstForClickEvent(topLevelType,targetInst,nativeEvent){if("topClick"===topLevelType)return getInstIfValueChanged(targetInst,nativeEvent)}function getTargetInstForInputOrChangeEvent(topLevelType,targetInst,nativeEvent){if("topInput"===topLevelType||"topChange"===topLevelType)return getInstIfValueChanged(targetInst,nativeEvent)}function handleControlledInputBlur(inst,node){if(null!=inst){var state=inst._wrapperState||node._wrapperState;if(state&&state.controlled&&"number"===node.type){var value=""+node.value;node.getAttribute("value")!==value&&node.setAttribute("value",value)}}}var EventPluginHub=__webpack_require__(30),EventPropagators=__webpack_require__(31),ExecutionEnvironment=__webpack_require__(9),ReactDOMComponentTree=__webpack_require__(8),ReactUpdates=__webpack_require__(17),SyntheticEvent=__webpack_require__(20),inputValueTracking=__webpack_require__(119),getEventTarget=__webpack_require__(65),isEventSupported=__webpack_require__(66),isTextInputElement=__webpack_require__(121),eventTypes={change:{phasedRegistrationNames:{bubbled:"onChange",captured:"onChangeCapture"},dependencies:["topBlur","topChange","topClick","topFocus","topInput","topKeyDown","topKeyUp","topSelectionChange"]}},activeElement=null,activeElementInst=null,doesChangeEventBubble=!1;ExecutionEnvironment.canUseDOM&&(doesChangeEventBubble=isEventSupported("change")&&(!document.documentMode||document.documentMode>8));var isInputEventSupported=!1;ExecutionEnvironment.canUseDOM&&(isInputEventSupported=isEventSupported("input")&&(!("documentMode"in document)||document.documentMode>9));var ChangeEventPlugin={eventTypes:eventTypes,_allowSimulatedPassThrough:!0,_isInputEventSupported:isInputEventSupported,extractEvents:function(topLevelType,targetInst,nativeEvent,nativeEventTarget){var getTargetInstFunc,handleEventFunc,targetNode=targetInst?ReactDOMComponentTree.getNodeFromInstance(targetInst):window;if(shouldUseChangeEvent(targetNode)?doesChangeEventBubble?getTargetInstFunc=getTargetInstForChangeEvent:handleEventFunc=handleEventsForChangeEventIE8:isTextInputElement(targetNode)?isInputEventSupported?getTargetInstFunc=getTargetInstForInputOrChangeEvent:(getTargetInstFunc=getTargetInstForInputEventPolyfill,handleEventFunc=handleEventsForInputEventPolyfill):shouldUseClickEvent(targetNode)&&(getTargetInstFunc=getTargetInstForClickEvent),getTargetInstFunc){var inst=getTargetInstFunc(topLevelType,targetInst,nativeEvent);if(inst){return createAndAccumulateChangeEvent(inst,nativeEvent,nativeEventTarget)}}handleEventFunc&&handleEventFunc(topLevelType,targetNode,targetInst),"topBlur"===topLevelType&&handleControlledInputBlur(targetInst,targetNode)}};module.exports=ChangeEventPlugin},function(module,exports,__webpack_require__){"use strict";(function(process){var _prodInvariant=__webpack_require__(4),DOMLazyTree=__webpack_require__(26),ExecutionEnvironment=__webpack_require__(9),createNodesFromMarkup=__webpack_require__(191),emptyFunction=__webpack_require__(12),invariant=__webpack_require__(1),Danger={dangerouslyReplaceNodeWithMarkup:function(oldChild,markup){if(ExecutionEnvironment.canUseDOM||("production"!==process.env.NODE_ENV?invariant(!1,"dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a worker thread. Make sure `window` and `document` are available globally before requiring React when unit testing or use ReactDOMServer.renderToString() for server rendering."):_prodInvariant("56")),markup||("production"!==process.env.NODE_ENV?invariant(!1,"dangerouslyReplaceNodeWithMarkup(...): Missing markup."):_prodInvariant("57")),"HTML"===oldChild.nodeName&&("production"!==process.env.NODE_ENV?invariant(!1,"dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the node. This is because browser quirks make this unreliable and/or slow. If you want to render to the root you must use server rendering. See ReactDOMServer.renderToString()."):_prodInvariant("58")),"string"==typeof markup){var newChild=createNodesFromMarkup(markup,emptyFunction)[0];oldChild.parentNode.replaceChild(newChild,oldChild)}else DOMLazyTree.replaceChildWithTree(oldChild,markup)}};module.exports=Danger}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";var DefaultEventPluginOrder=["ResponderEventPlugin","SimpleEventPlugin","TapEventPlugin","EnterLeaveEventPlugin","ChangeEventPlugin","SelectEventPlugin","BeforeInputEventPlugin"];module.exports=DefaultEventPluginOrder},function(module,exports,__webpack_require__){"use strict";var EventPropagators=__webpack_require__(31),ReactDOMComponentTree=__webpack_require__(8),SyntheticMouseEvent=__webpack_require__(41),eventTypes={mouseEnter:{registrationName:"onMouseEnter",dependencies:["topMouseOut","topMouseOver"]},mouseLeave:{registrationName:"onMouseLeave",dependencies:["topMouseOut","topMouseOver"]}},EnterLeaveEventPlugin={eventTypes:eventTypes,extractEvents:function(topLevelType,targetInst,nativeEvent,nativeEventTarget){if("topMouseOver"===topLevelType&&(nativeEvent.relatedTarget||nativeEvent.fromElement))return null;if("topMouseOut"!==topLevelType&&"topMouseOver"!==topLevelType)return null;var win;if(nativeEventTarget.window===nativeEventTarget)win=nativeEventTarget;else{var doc=nativeEventTarget.ownerDocument;win=doc?doc.defaultView||doc.parentWindow:window}var from,to;if("topMouseOut"===topLevelType){from=targetInst;var related=nativeEvent.relatedTarget||nativeEvent.toElement;to=related?ReactDOMComponentTree.getClosestInstanceFromNode(related):null}else from=null,to=targetInst;if(from===to)return null;var fromNode=null==from?win:ReactDOMComponentTree.getNodeFromInstance(from),toNode=null==to?win:ReactDOMComponentTree.getNodeFromInstance(to),leave=SyntheticMouseEvent.getPooled(eventTypes.mouseLeave,from,nativeEvent,nativeEventTarget);leave.type="mouseleave",leave.target=fromNode,leave.relatedTarget=toNode;var enter=SyntheticMouseEvent.getPooled(eventTypes.mouseEnter,to,nativeEvent,nativeEventTarget);return enter.type="mouseenter",enter.target=toNode,enter.relatedTarget=fromNode,EventPropagators.accumulateEnterLeaveDispatches(leave,enter,from,to),[leave,enter]}};module.exports=EnterLeaveEventPlugin},function(module,exports,__webpack_require__){"use strict";function FallbackCompositionState(root){this._root=root,this._startText=this.getText(),this._fallbackText=null}var _assign=__webpack_require__(7),PooledClass=__webpack_require__(23),getTextContentAccessor=__webpack_require__(118);_assign(FallbackCompositionState.prototype,{destructor:function(){this._root=null,this._startText=null,this._fallbackText=null},getText:function(){return"value"in this._root?this._root.value:this._root[getTextContentAccessor()]},getData:function(){if(this._fallbackText)return this._fallbackText;var start,end,startValue=this._startText,startLength=startValue.length,endValue=this.getText(),endLength=endValue.length;for(start=0;start1?1-end:void 0;return this._fallbackText=endValue.slice(start,sliceTail),this._fallbackText}}),PooledClass.addPoolingTo(FallbackCompositionState),module.exports=FallbackCompositionState},function(module,exports,__webpack_require__){"use strict";var DOMProperty=__webpack_require__(21),MUST_USE_PROPERTY=DOMProperty.injection.MUST_USE_PROPERTY,HAS_BOOLEAN_VALUE=DOMProperty.injection.HAS_BOOLEAN_VALUE,HAS_NUMERIC_VALUE=DOMProperty.injection.HAS_NUMERIC_VALUE,HAS_POSITIVE_NUMERIC_VALUE=DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE,HAS_OVERLOADED_BOOLEAN_VALUE=DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE,HTMLDOMPropertyConfig={isCustomAttribute:RegExp.prototype.test.bind(new RegExp("^(data|aria)-["+DOMProperty.ATTRIBUTE_NAME_CHAR+"]*$")),Properties:{accept:0,acceptCharset:0,accessKey:0,action:0,allowFullScreen:HAS_BOOLEAN_VALUE,allowTransparency:0,alt:0,as:0,async:HAS_BOOLEAN_VALUE,autoComplete:0,autoPlay:HAS_BOOLEAN_VALUE,capture:HAS_BOOLEAN_VALUE,cellPadding:0,cellSpacing:0,charSet:0,challenge:0,checked:MUST_USE_PROPERTY|HAS_BOOLEAN_VALUE,cite:0,classID:0,className:0,cols:HAS_POSITIVE_NUMERIC_VALUE,colSpan:0,content:0,contentEditable:0,contextMenu:0,controls:HAS_BOOLEAN_VALUE,coords:0,crossOrigin:0,data:0,dateTime:0,default:HAS_BOOLEAN_VALUE,defer:HAS_BOOLEAN_VALUE,dir:0,disabled:HAS_BOOLEAN_VALUE,download:HAS_OVERLOADED_BOOLEAN_VALUE,draggable:0,encType:0,form:0,formAction:0,formEncType:0,formMethod:0,formNoValidate:HAS_BOOLEAN_VALUE,formTarget:0,frameBorder:0,headers:0,height:0,hidden:HAS_BOOLEAN_VALUE,high:0,href:0,hrefLang:0,htmlFor:0,httpEquiv:0,icon:0,id:0,inputMode:0,integrity:0,is:0,keyParams:0,keyType:0,kind:0,label:0,lang:0,list:0,loop:HAS_BOOLEAN_VALUE,low:0,manifest:0,marginHeight:0,marginWidth:0,max:0,maxLength:0,media:0,mediaGroup:0,method:0,min:0,minLength:0,multiple:MUST_USE_PROPERTY|HAS_BOOLEAN_VALUE,muted:MUST_USE_PROPERTY|HAS_BOOLEAN_VALUE,name:0,nonce:0,noValidate:HAS_BOOLEAN_VALUE,open:HAS_BOOLEAN_VALUE,optimum:0,pattern:0,placeholder:0,playsInline:HAS_BOOLEAN_VALUE,poster:0,preload:0,profile:0,radioGroup:0,readOnly:HAS_BOOLEAN_VALUE,referrerPolicy:0,rel:0,required:HAS_BOOLEAN_VALUE,reversed:HAS_BOOLEAN_VALUE,role:0,rows:HAS_POSITIVE_NUMERIC_VALUE,rowSpan:HAS_NUMERIC_VALUE,sandbox:0,scope:0,scoped:HAS_BOOLEAN_VALUE,scrolling:0,seamless:HAS_BOOLEAN_VALUE,selected:MUST_USE_PROPERTY|HAS_BOOLEAN_VALUE,shape:0,size:HAS_POSITIVE_NUMERIC_VALUE,sizes:0,span:HAS_POSITIVE_NUMERIC_VALUE,spellCheck:0,src:0,srcDoc:0,srcLang:0,srcSet:0,start:HAS_NUMERIC_VALUE,step:0,style:0,summary:0,tabIndex:0,target:0,title:0,type:0,useMap:0,value:0,width:0,wmode:0,wrap:0,about:0,datatype:0,inlist:0,prefix:0,property:0,resource:0,typeof:0,vocab:0,autoCapitalize:0,autoCorrect:0,autoSave:0,color:0,itemProp:0,itemScope:HAS_BOOLEAN_VALUE,itemType:0,itemID:0,itemRef:0,results:0,security:0,unselectable:0},DOMAttributeNames:{acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},DOMPropertyNames:{},DOMMutationMethods:{value:function(node,value){if(null==value)return node.removeAttribute("value");"number"!==node.type||!1===node.hasAttribute("value")?node.setAttribute("value",""+value):node.validity&&!node.validity.badInput&&node.ownerDocument.activeElement!==node&&node.setAttribute("value",""+value)}}};module.exports=HTMLDOMPropertyConfig},function(module,exports,__webpack_require__){"use strict";(function(process){function instantiateChild(childInstances,child,name,selfDebugID){var keyUnique=void 0===childInstances[name];"production"!==process.env.NODE_ENV&&(ReactComponentTreeHook||(ReactComponentTreeHook=__webpack_require__(11)),keyUnique||"production"!==process.env.NODE_ENV&&warning(!1,"flattenChildren(...): Encountered two children with the same key, `%s`. Child keys must be unique; when two children share a key, only the first child will be used.%s",KeyEscapeUtils.unescape(name),ReactComponentTreeHook.getStackAddendumByID(selfDebugID))),null!=child&&keyUnique&&(childInstances[name]=instantiateReactComponent(child,!0))}var ReactComponentTreeHook,ReactReconciler=__webpack_require__(27),instantiateReactComponent=__webpack_require__(120),KeyEscapeUtils=__webpack_require__(57),shouldUpdateReactComponent=__webpack_require__(67),traverseAllChildren=__webpack_require__(123),warning=__webpack_require__(2);void 0!==process&&process.env&&"test"===process.env.NODE_ENV&&(ReactComponentTreeHook=__webpack_require__(11));var ReactChildReconciler={instantiateChildren:function(nestedChildNodes,transaction,context,selfDebugID){if(null==nestedChildNodes)return null;var childInstances={};return"production"!==process.env.NODE_ENV?traverseAllChildren(nestedChildNodes,function(childInsts,child,name){return instantiateChild(childInsts,child,name,selfDebugID)},childInstances):traverseAllChildren(nestedChildNodes,instantiateChild,childInstances),childInstances},updateChildren:function(prevChildren,nextChildren,mountImages,removedNodes,transaction,hostParent,hostContainerInfo,context,selfDebugID){if(nextChildren||prevChildren){var name,prevChild;for(name in nextChildren)if(nextChildren.hasOwnProperty(name)){prevChild=prevChildren&&prevChildren[name];var prevElement=prevChild&&prevChild._currentElement,nextElement=nextChildren[name];if(null!=prevChild&&shouldUpdateReactComponent(prevElement,nextElement))ReactReconciler.receiveComponent(prevChild,nextElement,transaction,context),nextChildren[name]=prevChild;else{prevChild&&(removedNodes[name]=ReactReconciler.getHostNode(prevChild),ReactReconciler.unmountComponent(prevChild,!1));var nextChildInstance=instantiateReactComponent(nextElement,!0);nextChildren[name]=nextChildInstance;var nextChildMountImage=ReactReconciler.mountComponent(nextChildInstance,transaction,hostParent,hostContainerInfo,context,selfDebugID);mountImages.push(nextChildMountImage)}}for(name in prevChildren)!prevChildren.hasOwnProperty(name)||nextChildren&&nextChildren.hasOwnProperty(name)||(prevChild=prevChildren[name],removedNodes[name]=ReactReconciler.getHostNode(prevChild),ReactReconciler.unmountComponent(prevChild,!1))}},unmountChildren:function(renderedChildren,safely){for(var name in renderedChildren)if(renderedChildren.hasOwnProperty(name)){var renderedChild=renderedChildren[name];ReactReconciler.unmountComponent(renderedChild,safely)}}};module.exports=ReactChildReconciler}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";var DOMChildrenOperations=__webpack_require__(54),ReactDOMIDOperations=__webpack_require__(245),ReactComponentBrowserEnvironment={processChildrenUpdates:ReactDOMIDOperations.dangerouslyProcessChildrenUpdates,replaceNodeWithMarkup:DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup};module.exports=ReactComponentBrowserEnvironment},function(module,exports,__webpack_require__){"use strict";(function(process){function StatelessComponent(Component){}function warnIfInvalidElement(Component,element){"production"!==process.env.NODE_ENV&&("production"!==process.env.NODE_ENV&&warning(null===element||!1===element||React.isValidElement(element),"%s(...): A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object.",Component.displayName||Component.name||"Component"),"production"!==process.env.NODE_ENV&&warning(!Component.childContextTypes,"%s(...): childContextTypes cannot be defined on a functional component.",Component.displayName||Component.name||"Component"))}function shouldConstruct(Component){return!(!Component.prototype||!Component.prototype.isReactComponent)}function isPureComponent(Component){return!(!Component.prototype||!Component.prototype.isPureReactComponent)}function measureLifeCyclePerf(fn,debugID,timerType){if(0===debugID)return fn();ReactInstrumentation.debugTool.onBeginLifeCycleTimer(debugID,timerType);try{return fn()}finally{ReactInstrumentation.debugTool.onEndLifeCycleTimer(debugID,timerType)}}var _prodInvariant=__webpack_require__(4),_assign=__webpack_require__(7),React=__webpack_require__(28),ReactComponentEnvironment=__webpack_require__(59),ReactCurrentOwner=__webpack_require__(18),ReactErrorUtils=__webpack_require__(60),ReactInstanceMap=__webpack_require__(32),ReactInstrumentation=__webpack_require__(14),ReactNodeTypes=__webpack_require__(112),ReactReconciler=__webpack_require__(27);if("production"!==process.env.NODE_ENV)var checkReactTypeSpec=__webpack_require__(287);var emptyObject=__webpack_require__(38),invariant=__webpack_require__(1),shallowEqual=__webpack_require__(51),shouldUpdateReactComponent=__webpack_require__(67),warning=__webpack_require__(2),CompositeTypes={ImpureClass:0,PureClass:1,StatelessFunctional:2};StatelessComponent.prototype.render=function(){var Component=ReactInstanceMap.get(this)._currentElement.type,element=Component(this.props,this.context,this.updater);return warnIfInvalidElement(Component,element),element};var nextMountID=1,ReactCompositeComponent={construct:function(element){this._currentElement=element,this._rootNodeID=0,this._compositeType=null,this._instance=null,this._hostParent=null,this._hostContainerInfo=null,this._updateBatchNumber=null,this._pendingElement=null,this._pendingStateQueue=null,this._pendingReplaceState=!1,this._pendingForceUpdate=!1,this._renderedNodeType=null,this._renderedComponent=null,this._context=null,this._mountOrder=0,this._topLevelWrapper=null,this._pendingCallbacks=null,this._calledComponentWillUnmount=!1,"production"!==process.env.NODE_ENV&&(this._warnedAboutRefsInRender=!1)},mountComponent:function(transaction,hostParent,hostContainerInfo,context){var _this=this;this._context=context,this._mountOrder=nextMountID++,this._hostParent=hostParent,this._hostContainerInfo=hostContainerInfo;var renderedElement,publicProps=this._currentElement.props,publicContext=this._processContext(context),Component=this._currentElement.type,updateQueue=transaction.getUpdateQueue(),doConstruct=shouldConstruct(Component),inst=this._constructComponent(doConstruct,publicProps,publicContext,updateQueue);if(doConstruct||null!=inst&&null!=inst.render?isPureComponent(Component)?this._compositeType=CompositeTypes.PureClass:this._compositeType=CompositeTypes.ImpureClass:(renderedElement=inst,warnIfInvalidElement(Component,renderedElement),null===inst||!1===inst||React.isValidElement(inst)||("production"!==process.env.NODE_ENV?invariant(!1,"%s(...): A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object.",Component.displayName||Component.name||"Component"):_prodInvariant("105",Component.displayName||Component.name||"Component")),inst=new StatelessComponent(Component),this._compositeType=CompositeTypes.StatelessFunctional),"production"!==process.env.NODE_ENV){null==inst.render&&"production"!==process.env.NODE_ENV&&warning(!1,"%s(...): No `render` method found on the returned component instance: you may have forgotten to define `render`.",Component.displayName||Component.name||"Component");var propsMutated=inst.props!==publicProps,componentName=Component.displayName||Component.name||"Component";"production"!==process.env.NODE_ENV&&warning(void 0===inst.props||!propsMutated,"%s(...): When calling super() in `%s`, make sure to pass up the same props that your component's constructor was passed.",componentName,componentName)}inst.props=publicProps,inst.context=publicContext,inst.refs=emptyObject,inst.updater=updateQueue,this._instance=inst,ReactInstanceMap.set(inst,this),"production"!==process.env.NODE_ENV&&("production"!==process.env.NODE_ENV&&warning(!inst.getInitialState||inst.getInitialState.isReactClassApproved||inst.state,"getInitialState was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Did you mean to define a state property instead?",this.getName()||"a component"),"production"!==process.env.NODE_ENV&&warning(!inst.getDefaultProps||inst.getDefaultProps.isReactClassApproved,"getDefaultProps was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Use a static property to define defaultProps instead.",this.getName()||"a component"),"production"!==process.env.NODE_ENV&&warning(!inst.propTypes,"propTypes was defined as an instance property on %s. Use a static property to define propTypes instead.",this.getName()||"a component"),"production"!==process.env.NODE_ENV&&warning(!inst.contextTypes,"contextTypes was defined as an instance property on %s. Use a static property to define contextTypes instead.",this.getName()||"a component"),"production"!==process.env.NODE_ENV&&warning("function"!=typeof inst.componentShouldUpdate,"%s has a method called componentShouldUpdate(). Did you mean shouldComponentUpdate()? The name is phrased as a question because the function is expected to return a value.",this.getName()||"A component"),"production"!==process.env.NODE_ENV&&warning("function"!=typeof inst.componentDidUnmount,"%s has a method called componentDidUnmount(). But there is no such lifecycle method. Did you mean componentWillUnmount()?",this.getName()||"A component"),"production"!==process.env.NODE_ENV&&warning("function"!=typeof inst.componentWillRecieveProps,"%s has a method called componentWillRecieveProps(). Did you mean componentWillReceiveProps()?",this.getName()||"A component"));var initialState=inst.state;void 0===initialState&&(inst.state=initialState=null),("object"!=typeof initialState||Array.isArray(initialState))&&("production"!==process.env.NODE_ENV?invariant(!1,"%s.state: must be set to an object or null",this.getName()||"ReactCompositeComponent"):_prodInvariant("106",this.getName()||"ReactCompositeComponent")),this._pendingStateQueue=null,this._pendingReplaceState=!1,this._pendingForceUpdate=!1;var markup;return markup=inst.unstable_handleError?this.performInitialMountWithErrorHandling(renderedElement,hostParent,hostContainerInfo,transaction,context):this.performInitialMount(renderedElement,hostParent,hostContainerInfo,transaction,context),inst.componentDidMount&&("production"!==process.env.NODE_ENV?transaction.getReactMountReady().enqueue(function(){measureLifeCyclePerf(function(){return inst.componentDidMount()},_this._debugID,"componentDidMount")}):transaction.getReactMountReady().enqueue(inst.componentDidMount,inst)),markup},_constructComponent:function(doConstruct,publicProps,publicContext,updateQueue){if("production"===process.env.NODE_ENV)return this._constructComponentWithoutOwner(doConstruct,publicProps,publicContext,updateQueue);ReactCurrentOwner.current=this;try{return this._constructComponentWithoutOwner(doConstruct,publicProps,publicContext,updateQueue)}finally{ReactCurrentOwner.current=null}},_constructComponentWithoutOwner:function(doConstruct,publicProps,publicContext,updateQueue){var Component=this._currentElement.type;return doConstruct?"production"!==process.env.NODE_ENV?measureLifeCyclePerf(function(){return new Component(publicProps,publicContext,updateQueue)},this._debugID,"ctor"):new Component(publicProps,publicContext,updateQueue):"production"!==process.env.NODE_ENV?measureLifeCyclePerf(function(){return Component(publicProps,publicContext,updateQueue)},this._debugID,"render"):Component(publicProps,publicContext,updateQueue)},performInitialMountWithErrorHandling:function(renderedElement,hostParent,hostContainerInfo,transaction,context){var markup,checkpoint=transaction.checkpoint();try{markup=this.performInitialMount(renderedElement,hostParent,hostContainerInfo,transaction,context)}catch(e){transaction.rollback(checkpoint),this._instance.unstable_handleError(e),this._pendingStateQueue&&(this._instance.state=this._processPendingState(this._instance.props,this._instance.context)),checkpoint=transaction.checkpoint(),this._renderedComponent.unmountComponent(!0),transaction.rollback(checkpoint),markup=this.performInitialMount(renderedElement,hostParent,hostContainerInfo,transaction,context)}return markup},performInitialMount:function(renderedElement,hostParent,hostContainerInfo,transaction,context){var inst=this._instance,debugID=0;"production"!==process.env.NODE_ENV&&(debugID=this._debugID),inst.componentWillMount&&("production"!==process.env.NODE_ENV?measureLifeCyclePerf(function(){return inst.componentWillMount()},debugID,"componentWillMount"):inst.componentWillMount(),this._pendingStateQueue&&(inst.state=this._processPendingState(inst.props,inst.context))),void 0===renderedElement&&(renderedElement=this._renderValidatedComponent());var nodeType=ReactNodeTypes.getType(renderedElement);this._renderedNodeType=nodeType;var child=this._instantiateReactComponent(renderedElement,nodeType!==ReactNodeTypes.EMPTY);this._renderedComponent=child;var markup=ReactReconciler.mountComponent(child,transaction,hostParent,hostContainerInfo,this._processChildContext(context),debugID);if("production"!==process.env.NODE_ENV&&0!==debugID){var childDebugIDs=0!==child._debugID?[child._debugID]:[];ReactInstrumentation.debugTool.onSetChildren(debugID,childDebugIDs)}return markup},getHostNode:function(){return ReactReconciler.getHostNode(this._renderedComponent)},unmountComponent:function(safely){if(this._renderedComponent){var inst=this._instance;if(inst.componentWillUnmount&&!inst._calledComponentWillUnmount)if(inst._calledComponentWillUnmount=!0,safely){var name=this.getName()+".componentWillUnmount()";ReactErrorUtils.invokeGuardedCallback(name,inst.componentWillUnmount.bind(inst))}else"production"!==process.env.NODE_ENV?measureLifeCyclePerf(function(){return inst.componentWillUnmount()},this._debugID,"componentWillUnmount"):inst.componentWillUnmount();this._renderedComponent&&(ReactReconciler.unmountComponent(this._renderedComponent,safely),this._renderedNodeType=null,this._renderedComponent=null,this._instance=null),this._pendingStateQueue=null,this._pendingReplaceState=!1,this._pendingForceUpdate=!1,this._pendingCallbacks=null,this._pendingElement=null,this._context=null,this._rootNodeID=0,this._topLevelWrapper=null,ReactInstanceMap.remove(inst)}},_maskContext:function(context){var Component=this._currentElement.type,contextTypes=Component.contextTypes;if(!contextTypes)return emptyObject;var maskedContext={};for(var contextName in contextTypes)maskedContext[contextName]=context[contextName];return maskedContext},_processContext:function(context){var maskedContext=this._maskContext(context);if("production"!==process.env.NODE_ENV){var Component=this._currentElement.type;Component.contextTypes&&this._checkContextTypes(Component.contextTypes,maskedContext,"context")}return maskedContext},_processChildContext:function(currentContext){var childContext,Component=this._currentElement.type,inst=this._instance;if(inst.getChildContext)if("production"!==process.env.NODE_ENV){ReactInstrumentation.debugTool.onBeginProcessingChildContext();try{childContext=inst.getChildContext()}finally{ReactInstrumentation.debugTool.onEndProcessingChildContext()}}else childContext=inst.getChildContext();if(childContext){"object"!=typeof Component.childContextTypes&&("production"!==process.env.NODE_ENV?invariant(!1,"%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().",this.getName()||"ReactCompositeComponent"):_prodInvariant("107",this.getName()||"ReactCompositeComponent")),"production"!==process.env.NODE_ENV&&this._checkContextTypes(Component.childContextTypes,childContext,"child context");for(var name in childContext)name in Component.childContextTypes||("production"!==process.env.NODE_ENV?invariant(!1,'%s.getChildContext(): key "%s" is not defined in childContextTypes.',this.getName()||"ReactCompositeComponent",name):_prodInvariant("108",this.getName()||"ReactCompositeComponent",name));return _assign({},currentContext,childContext)}return currentContext},_checkContextTypes:function(typeSpecs,values,location){"production"!==process.env.NODE_ENV&&checkReactTypeSpec(typeSpecs,values,location,this.getName(),null,this._debugID)},receiveComponent:function(nextElement,transaction,nextContext){var prevElement=this._currentElement,prevContext=this._context;this._pendingElement=null,this.updateComponent(transaction,prevElement,nextElement,prevContext,nextContext)},performUpdateIfNecessary:function(transaction){null!=this._pendingElement?ReactReconciler.receiveComponent(this,this._pendingElement,transaction,this._context):null!==this._pendingStateQueue||this._pendingForceUpdate?this.updateComponent(transaction,this._currentElement,this._currentElement,this._context,this._context):this._updateBatchNumber=null},updateComponent:function(transaction,prevParentElement,nextParentElement,prevUnmaskedContext,nextUnmaskedContext){var inst=this._instance;null==inst&&("production"!==process.env.NODE_ENV?invariant(!1,"Attempted to update component `%s` that has already been unmounted (or failed to mount).",this.getName()||"ReactCompositeComponent"):_prodInvariant("136",this.getName()||"ReactCompositeComponent"));var nextContext,willReceive=!1;this._context===nextUnmaskedContext?nextContext=inst.context:(nextContext=this._processContext(nextUnmaskedContext),willReceive=!0);var prevProps=prevParentElement.props,nextProps=nextParentElement.props;prevParentElement!==nextParentElement&&(willReceive=!0),willReceive&&inst.componentWillReceiveProps&&("production"!==process.env.NODE_ENV?measureLifeCyclePerf(function(){return inst.componentWillReceiveProps(nextProps,nextContext)},this._debugID,"componentWillReceiveProps"):inst.componentWillReceiveProps(nextProps,nextContext));var nextState=this._processPendingState(nextProps,nextContext),shouldUpdate=!0;this._pendingForceUpdate||(inst.shouldComponentUpdate?shouldUpdate="production"!==process.env.NODE_ENV?measureLifeCyclePerf(function(){return inst.shouldComponentUpdate(nextProps,nextState,nextContext)},this._debugID,"shouldComponentUpdate"):inst.shouldComponentUpdate(nextProps,nextState,nextContext):this._compositeType===CompositeTypes.PureClass&&(shouldUpdate=!shallowEqual(prevProps,nextProps)||!shallowEqual(inst.state,nextState))),"production"!==process.env.NODE_ENV&&"production"!==process.env.NODE_ENV&&warning(void 0!==shouldUpdate,"%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.",this.getName()||"ReactCompositeComponent"),this._updateBatchNumber=null,shouldUpdate?(this._pendingForceUpdate=!1,this._performComponentUpdate(nextParentElement,nextProps,nextState,nextContext,transaction,nextUnmaskedContext)):(this._currentElement=nextParentElement,this._context=nextUnmaskedContext,inst.props=nextProps,inst.state=nextState,inst.context=nextContext)},_processPendingState:function(props,context){var inst=this._instance,queue=this._pendingStateQueue,replace=this._pendingReplaceState;if(this._pendingReplaceState=!1,this._pendingStateQueue=null,!queue)return inst.state;if(replace&&1===queue.length)return queue[0];for(var nextState=_assign({},replace?queue[0]:inst.state),i=replace?1:0;i-1&&-1===navigator.userAgent.indexOf("Edge")||navigator.userAgent.indexOf("Firefox")>-1)){-1===window.location.protocol.indexOf("http")&&navigator.userAgent.indexOf("Firefox")}var testFunc=function(){};"production"!==process.env.NODE_ENV&&warning(-1!==(testFunc.name||testFunc.toString()).indexOf("testFn"),"It looks like you're using a minified copy of the development build of React. When deploying React apps to production, make sure to use the production build which skips development warnings and is faster. See https://fb.me/react-minification for more details.");var ieCompatibilityMode=document.documentMode&&document.documentMode<8;"production"!==process.env.NODE_ENV&&warning(!ieCompatibilityMode,'Internet Explorer is running in compatibility mode; please add the following tag to your HTML to prevent this from happening: ');for(var expectedFeatures=[Array.isArray,Array.prototype.every,Array.prototype.forEach,Array.prototype.indexOf,Array.prototype.map,Date.now,Function.prototype.bind,Object.keys,String.prototype.trim],i=0;i",friendlyStringify(style1),friendlyStringify(style2)))}}function assertValidProps(component,props){props&&(voidElementTags[component._tag]&&(null!=props.children||null!=props.dangerouslySetInnerHTML)&&("production"!==process.env.NODE_ENV?invariant(!1,"%s is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.%s",component._tag,component._currentElement._owner?" Check the render method of "+component._currentElement._owner.getName()+".":""):_prodInvariant("137",component._tag,component._currentElement._owner?" Check the render method of "+component._currentElement._owner.getName()+".":"")),null!=props.dangerouslySetInnerHTML&&(null!=props.children&&("production"!==process.env.NODE_ENV?invariant(!1,"Can only set one of `children` or `props.dangerouslySetInnerHTML`."):_prodInvariant("60")),"object"==typeof props.dangerouslySetInnerHTML&&HTML in props.dangerouslySetInnerHTML||("production"!==process.env.NODE_ENV?invariant(!1,"`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://fb.me/react-invariant-dangerously-set-inner-html for more information."):_prodInvariant("61"))),"production"!==process.env.NODE_ENV&&("production"!==process.env.NODE_ENV&&warning(null==props.innerHTML,"Directly setting property `innerHTML` is not permitted. For more information, lookup documentation on `dangerouslySetInnerHTML`."),"production"!==process.env.NODE_ENV&&warning(props.suppressContentEditableWarning||!props.contentEditable||null==props.children,"A component is `contentEditable` and contains `children` managed by React. It is now your responsibility to guarantee that none of those nodes are unexpectedly modified or duplicated. This is probably not intentional."),"production"!==process.env.NODE_ENV&&warning(null==props.onFocusIn&&null==props.onFocusOut,"React uses onFocus and onBlur instead of onFocusIn and onFocusOut. All React events are normalized to bubble, so onFocusIn and onFocusOut are not needed/supported by React.")),null!=props.style&&"object"!=typeof props.style&&("production"!==process.env.NODE_ENV?invariant(!1,"The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX.%s",getDeclarationErrorAddendum(component)):_prodInvariant("62",getDeclarationErrorAddendum(component))))}function enqueuePutListener(inst,registrationName,listener,transaction){if(!(transaction instanceof ReactServerRenderingTransaction)){"production"!==process.env.NODE_ENV&&"production"!==process.env.NODE_ENV&&warning("onScroll"!==registrationName||isEventSupported("scroll",!0),"This browser doesn't support the `onScroll` event");var containerInfo=inst._hostContainerInfo,isDocumentFragment=containerInfo._node&&containerInfo._node.nodeType===DOC_FRAGMENT_TYPE,doc=isDocumentFragment?containerInfo._node:containerInfo._ownerDocument;listenTo(registrationName,doc),transaction.getReactMountReady().enqueue(putListener,{inst:inst,registrationName:registrationName,listener:listener})}}function putListener(){var listenerToPut=this;EventPluginHub.putListener(listenerToPut.inst,listenerToPut.registrationName,listenerToPut.listener)}function inputPostMount(){var inst=this;ReactDOMInput.postMountWrapper(inst)}function textareaPostMount(){var inst=this;ReactDOMTextarea.postMountWrapper(inst)}function optionPostMount(){var inst=this;ReactDOMOption.postMountWrapper(inst)}function trackInputValue(){inputValueTracking.track(this)}function trapBubbledEventsLocal(){var inst=this;inst._rootNodeID||("production"!==process.env.NODE_ENV?invariant(!1,"Must be mounted to trap events"):_prodInvariant("63"));var node=getNode(inst);switch(node||("production"!==process.env.NODE_ENV?invariant(!1,"trapBubbledEvent(...): Requires node to be rendered."):_prodInvariant("64")),inst._tag){case"iframe":case"object":inst._wrapperState.listeners=[ReactBrowserEventEmitter.trapBubbledEvent("topLoad","load",node)];break;case"video":case"audio":inst._wrapperState.listeners=[];for(var event in mediaEvents)mediaEvents.hasOwnProperty(event)&&inst._wrapperState.listeners.push(ReactBrowserEventEmitter.trapBubbledEvent(event,mediaEvents[event],node));break;case"source":inst._wrapperState.listeners=[ReactBrowserEventEmitter.trapBubbledEvent("topError","error",node)];break;case"img":inst._wrapperState.listeners=[ReactBrowserEventEmitter.trapBubbledEvent("topError","error",node),ReactBrowserEventEmitter.trapBubbledEvent("topLoad","load",node)];break;case"form":inst._wrapperState.listeners=[ReactBrowserEventEmitter.trapBubbledEvent("topReset","reset",node),ReactBrowserEventEmitter.trapBubbledEvent("topSubmit","submit",node)];break;case"input":case"select":case"textarea":inst._wrapperState.listeners=[ReactBrowserEventEmitter.trapBubbledEvent("topInvalid","invalid",node)]}}function postUpdateSelectWrapper(){ReactDOMSelect.postUpdateWrapper(this)}function validateDangerousTag(tag){hasOwnProperty.call(validatedTagCache,tag)||(VALID_TAG_REGEX.test(tag)||("production"!==process.env.NODE_ENV?invariant(!1,"Invalid tag: %s",tag):_prodInvariant("65",tag)),validatedTagCache[tag]=!0)}function isCustomComponent(tagName,props){return tagName.indexOf("-")>=0||null!=props.is}function ReactDOMComponent(element){var tag=element.type;validateDangerousTag(tag),this._currentElement=element,this._tag=tag.toLowerCase(),this._namespaceURI=null,this._renderedChildren=null,this._previousStyle=null,this._previousStyleCopy=null,this._hostNode=null,this._hostParent=null,this._rootNodeID=0,this._domID=0,this._hostContainerInfo=null,this._wrapperState=null,this._topLevelWrapper=null,this._flags=0,"production"!==process.env.NODE_ENV&&(this._ancestorInfo=null,setAndValidateContentChildDev.call(this,null))}var _prodInvariant=__webpack_require__(4),_assign=__webpack_require__(7),AutoFocusUtils=__webpack_require__(228),CSSPropertyOperations=__webpack_require__(230),DOMLazyTree=__webpack_require__(26),DOMNamespaces=__webpack_require__(55),DOMProperty=__webpack_require__(21),DOMPropertyOperations=__webpack_require__(104),EventPluginHub=__webpack_require__(30),EventPluginRegistry=__webpack_require__(39),ReactBrowserEventEmitter=__webpack_require__(40),ReactDOMComponentFlags=__webpack_require__(105),ReactDOMComponentTree=__webpack_require__(8),ReactDOMInput=__webpack_require__(246),ReactDOMOption=__webpack_require__(249),ReactDOMSelect=__webpack_require__(106),ReactDOMTextarea=__webpack_require__(252),ReactInstrumentation=__webpack_require__(14),ReactMultiChild=__webpack_require__(265),ReactServerRenderingTransaction=__webpack_require__(270),emptyFunction=__webpack_require__(12),escapeTextContentForBrowser=__webpack_require__(43),invariant=__webpack_require__(1),isEventSupported=__webpack_require__(66),shallowEqual=__webpack_require__(51),inputValueTracking=__webpack_require__(119),validateDOMNesting=__webpack_require__(68),warning=__webpack_require__(2),Flags=ReactDOMComponentFlags,deleteListener=EventPluginHub.deleteListener,getNode=ReactDOMComponentTree.getNodeFromInstance,listenTo=ReactBrowserEventEmitter.listenTo,registrationNameModules=EventPluginRegistry.registrationNameModules,CONTENT_TYPES={string:!0,number:!0},HTML="__html",RESERVED_PROPS={children:null,dangerouslySetInnerHTML:null,suppressContentEditableWarning:null},DOC_FRAGMENT_TYPE=11,styleMutationWarning={},setAndValidateContentChildDev=emptyFunction;"production"!==process.env.NODE_ENV&&(setAndValidateContentChildDev=function(content){var hasExistingContent=null!=this._contentDebugID,debugID=this._debugID,contentDebugID=-debugID;if(null==content)return hasExistingContent&&ReactInstrumentation.debugTool.onUnmountComponent(this._contentDebugID),void(this._contentDebugID=null);validateDOMNesting(null,String(content),this,this._ancestorInfo),this._contentDebugID=contentDebugID,hasExistingContent?(ReactInstrumentation.debugTool.onBeforeUpdateComponent(contentDebugID,content),ReactInstrumentation.debugTool.onUpdateComponent(contentDebugID)):(ReactInstrumentation.debugTool.onBeforeMountComponent(contentDebugID,content,debugID),ReactInstrumentation.debugTool.onMountComponent(contentDebugID),ReactInstrumentation.debugTool.onSetChildren(debugID,[contentDebugID]))});var mediaEvents={topAbort:"abort",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topSeeked:"seeked",topSeeking:"seeking",topStalled:"stalled",topSuspend:"suspend",topTimeUpdate:"timeupdate",topVolumeChange:"volumechange",topWaiting:"waiting"},omittedCloseTags={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},newlineEatingTags={listing:!0,pre:!0,textarea:!0},voidElementTags=_assign({menuitem:!0},omittedCloseTags),VALID_TAG_REGEX=/^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,validatedTagCache={},hasOwnProperty={}.hasOwnProperty,globalIdCounter=1;ReactDOMComponent.displayName="ReactDOMComponent",ReactDOMComponent.Mixin={mountComponent:function(transaction,hostParent,hostContainerInfo,context){this._rootNodeID=globalIdCounter++,this._domID=hostContainerInfo._idCounter++,this._hostParent=hostParent,this._hostContainerInfo=hostContainerInfo;var props=this._currentElement.props;switch(this._tag){case"audio":case"form":case"iframe":case"img":case"link":case"object":case"source":case"video":this._wrapperState={listeners:null},transaction.getReactMountReady().enqueue(trapBubbledEventsLocal,this);break;case"input":ReactDOMInput.mountWrapper(this,props,hostParent),props=ReactDOMInput.getHostProps(this,props),transaction.getReactMountReady().enqueue(trackInputValue,this),transaction.getReactMountReady().enqueue(trapBubbledEventsLocal,this);break;case"option":ReactDOMOption.mountWrapper(this,props,hostParent),props=ReactDOMOption.getHostProps(this,props);break;case"select":ReactDOMSelect.mountWrapper(this,props,hostParent),props=ReactDOMSelect.getHostProps(this,props),transaction.getReactMountReady().enqueue(trapBubbledEventsLocal,this);break;case"textarea":ReactDOMTextarea.mountWrapper(this,props,hostParent),props=ReactDOMTextarea.getHostProps(this,props),transaction.getReactMountReady().enqueue(trackInputValue,this),transaction.getReactMountReady().enqueue(trapBubbledEventsLocal,this)}assertValidProps(this,props);var namespaceURI,parentTag;if(null!=hostParent?(namespaceURI=hostParent._namespaceURI,parentTag=hostParent._tag):hostContainerInfo._tag&&(namespaceURI=hostContainerInfo._namespaceURI,parentTag=hostContainerInfo._tag),(null==namespaceURI||namespaceURI===DOMNamespaces.svg&&"foreignobject"===parentTag)&&(namespaceURI=DOMNamespaces.html),namespaceURI===DOMNamespaces.html&&("svg"===this._tag?namespaceURI=DOMNamespaces.svg:"math"===this._tag&&(namespaceURI=DOMNamespaces.mathml)),this._namespaceURI=namespaceURI,"production"!==process.env.NODE_ENV){var parentInfo;null!=hostParent?parentInfo=hostParent._ancestorInfo:hostContainerInfo._tag&&(parentInfo=hostContainerInfo._ancestorInfo),parentInfo&&validateDOMNesting(this._tag,null,this,parentInfo),this._ancestorInfo=validateDOMNesting.updatedAncestorInfo(parentInfo,this._tag,this)}var mountImage;if(transaction.useCreateElement){var el,ownerDocument=hostContainerInfo._ownerDocument;if(namespaceURI===DOMNamespaces.html)if("script"===this._tag){var div=ownerDocument.createElement("div"),type=this._currentElement.type;div.innerHTML="<"+type+">",el=div.removeChild(div.firstChild)}else el=props.is?ownerDocument.createElement(this._currentElement.type,props.is):ownerDocument.createElement(this._currentElement.type);else el=ownerDocument.createElementNS(namespaceURI,this._currentElement.type);ReactDOMComponentTree.precacheNode(this,el),this._flags|=Flags.hasCachedChildNodes,this._hostParent||DOMPropertyOperations.setAttributeForRoot(el),this._updateDOMProperties(null,props,transaction);var lazyTree=DOMLazyTree(el);this._createInitialChildren(transaction,props,context,lazyTree),mountImage=lazyTree}else{var tagOpen=this._createOpenTagMarkupAndPutListeners(transaction,props),tagContent=this._createContentMarkup(transaction,props,context);mountImage=!tagContent&&omittedCloseTags[this._tag]?tagOpen+"/>":tagOpen+">"+tagContent+""}switch(this._tag){case"input":transaction.getReactMountReady().enqueue(inputPostMount,this),props.autoFocus&&transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent,this);break;case"textarea":transaction.getReactMountReady().enqueue(textareaPostMount,this),props.autoFocus&&transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent,this);break;case"select":case"button":props.autoFocus&&transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent,this);break;case"option":transaction.getReactMountReady().enqueue(optionPostMount,this)}return mountImage},_createOpenTagMarkupAndPutListeners:function(transaction,props){var ret="<"+this._currentElement.type;for(var propKey in props)if(props.hasOwnProperty(propKey)){var propValue=props[propKey];if(null!=propValue)if(registrationNameModules.hasOwnProperty(propKey))propValue&&enqueuePutListener(this,propKey,propValue,transaction);else{"style"===propKey&&(propValue&&("production"!==process.env.NODE_ENV&&(this._previousStyle=propValue),propValue=this._previousStyleCopy=_assign({},props.style)),propValue=CSSPropertyOperations.createMarkupForStyles(propValue,this));var markup=null;null!=this._tag&&isCustomComponent(this._tag,props)?RESERVED_PROPS.hasOwnProperty(propKey)||(markup=DOMPropertyOperations.createMarkupForCustomAttribute(propKey,propValue)):markup=DOMPropertyOperations.createMarkupForProperty(propKey,propValue),markup&&(ret+=" "+markup)}}return transaction.renderToStaticMarkup?ret:(this._hostParent||(ret+=" "+DOMPropertyOperations.createMarkupForRoot()),ret+=" "+DOMPropertyOperations.createMarkupForID(this._domID))},_createContentMarkup:function(transaction,props,context){var ret="",innerHTML=props.dangerouslySetInnerHTML;if(null!=innerHTML)null!=innerHTML.__html&&(ret=innerHTML.__html);else{var contentToUse=CONTENT_TYPES[typeof props.children]?props.children:null,childrenToUse=null!=contentToUse?null:props.children;if(null!=contentToUse)ret=escapeTextContentForBrowser(contentToUse),"production"!==process.env.NODE_ENV&&setAndValidateContentChildDev.call(this,contentToUse);else if(null!=childrenToUse){var mountImages=this.mountChildren(childrenToUse,transaction,context);ret=mountImages.join("")}}return newlineEatingTags[this._tag]&&"\n"===ret.charAt(0)?"\n"+ret:ret},_createInitialChildren:function(transaction,props,context,lazyTree){var innerHTML=props.dangerouslySetInnerHTML;if(null!=innerHTML)null!=innerHTML.__html&&DOMLazyTree.queueHTML(lazyTree,innerHTML.__html);else{var contentToUse=CONTENT_TYPES[typeof props.children]?props.children:null,childrenToUse=null!=contentToUse?null:props.children;if(null!=contentToUse)""!==contentToUse&&("production"!==process.env.NODE_ENV&&setAndValidateContentChildDev.call(this,contentToUse),DOMLazyTree.queueText(lazyTree,contentToUse));else if(null!=childrenToUse)for(var mountImages=this.mountChildren(childrenToUse,transaction,context),i=0;i tried to unmount. Because of cross-browser quirks it is impossible to unmount some top-level components (eg , , and ) reliably and efficiently. To fix this, have a single top-level component that never unmounts render these elements.",this._tag):_prodInvariant("66",this._tag)}this.unmountChildren(safely),ReactDOMComponentTree.uncacheNode(this),EventPluginHub.deleteAllListeners(this),this._rootNodeID=0,this._domID=0,this._wrapperState=null,"production"!==process.env.NODE_ENV&&setAndValidateContentChildDev.call(this,null)},getPublicInstance:function(){return getNode(this)}},_assign(ReactDOMComponent.prototype,ReactDOMComponent.Mixin,ReactMultiChild.Mixin),module.exports=ReactDOMComponent}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";(function(process){function ReactDOMContainerInfo(topLevelWrapper,node){var info={_topLevelWrapper:topLevelWrapper,_idCounter:1,_ownerDocument:node?node.nodeType===DOC_NODE_TYPE?node:node.ownerDocument:null,_node:node,_tag:node?node.nodeName.toLowerCase():null,_namespaceURI:node?node.namespaceURI:null};return"production"!==process.env.NODE_ENV&&(info._ancestorInfo=node?validateDOMNesting.updatedAncestorInfo(null,info._tag,null):null),info}var validateDOMNesting=__webpack_require__(68),DOC_NODE_TYPE=9;module.exports=ReactDOMContainerInfo}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";var _assign=__webpack_require__(7),DOMLazyTree=__webpack_require__(26),ReactDOMComponentTree=__webpack_require__(8),ReactDOMEmptyComponent=function(instantiate){this._currentElement=null,this._hostNode=null,this._hostParent=null,this._hostContainerInfo=null,this._domID=0};_assign(ReactDOMEmptyComponent.prototype,{mountComponent:function(transaction,hostParent,hostContainerInfo,context){var domID=hostContainerInfo._idCounter++;this._domID=domID,this._hostParent=hostParent,this._hostContainerInfo=hostContainerInfo;var nodeValue=" react-empty: "+this._domID+" ";if(transaction.useCreateElement){var ownerDocument=hostContainerInfo._ownerDocument,node=ownerDocument.createComment(nodeValue);return ReactDOMComponentTree.precacheNode(this,node),DOMLazyTree(node)}return transaction.renderToStaticMarkup?"":"\x3c!--"+nodeValue+"--\x3e"},receiveComponent:function(){},getHostNode:function(){return ReactDOMComponentTree.getNodeFromInstance(this)},unmountComponent:function(){ReactDOMComponentTree.uncacheNode(this)}}),module.exports=ReactDOMEmptyComponent},function(module,exports,__webpack_require__){"use strict";var ReactDOMFeatureFlags={useCreateElement:!0,useFiber:!1};module.exports=ReactDOMFeatureFlags},function(module,exports,__webpack_require__){"use strict";var DOMChildrenOperations=__webpack_require__(54),ReactDOMComponentTree=__webpack_require__(8),ReactDOMIDOperations={dangerouslyProcessChildrenUpdates:function(parentInst,updates){var node=ReactDOMComponentTree.getNodeFromInstance(parentInst);DOMChildrenOperations.processUpdates(node,updates)}};module.exports=ReactDOMIDOperations},function(module,exports,__webpack_require__){"use strict";(function(process){function forceUpdateIfMounted(){this._rootNodeID&&ReactDOMInput.updateWrapper(this)}function isControlled(props){return"checkbox"===props.type||"radio"===props.type?null!=props.checked:null!=props.value}function _handleChange(event){var props=this._currentElement.props,returnValue=LinkedValueUtils.executeOnChange(props,event);ReactUpdates.asap(forceUpdateIfMounted,this);var name=props.name;if("radio"===props.type&&null!=name){for(var rootNode=ReactDOMComponentTree.getNodeFromInstance(this),queryRoot=rootNode;queryRoot.parentNode;)queryRoot=queryRoot.parentNode;for(var group=queryRoot.querySelectorAll("input[name="+JSON.stringify(""+name)+'][type="radio"]'),i=0;i tag. For details, see https://fb.me/invalid-aria-prop%s",unknownPropString,element.type,ReactComponentTreeHook.getStackAddendumByID(debugID)):invalidProps.length>1&&"production"!==process.env.NODE_ENV&&warning(!1,"Invalid aria props %s on <%s> tag. For details, see https://fb.me/invalid-aria-prop%s",unknownPropString,element.type,ReactComponentTreeHook.getStackAddendumByID(debugID))}function handleElement(debugID,element){null!=element&&"string"==typeof element.type&&(element.type.indexOf("-")>=0||element.props.is||warnInvalidARIAProps(debugID,element))}var DOMProperty=__webpack_require__(21),ReactComponentTreeHook=__webpack_require__(11),warning=__webpack_require__(2),warnedProperties={},rARIA=new RegExp("^(aria)-["+DOMProperty.ATTRIBUTE_NAME_CHAR+"]*$"),ReactDOMInvalidARIAHook={onBeforeMountComponent:function(debugID,element){"production"!==process.env.NODE_ENV&&handleElement(debugID,element)},onBeforeUpdateComponent:function(debugID,element){"production"!==process.env.NODE_ENV&&handleElement(debugID,element)}};module.exports=ReactDOMInvalidARIAHook}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";(function(process){function handleElement(debugID,element){null!=element&&("input"!==element.type&&"textarea"!==element.type&&"select"!==element.type||null==element.props||null!==element.props.value||didWarnValueNull||("production"!==process.env.NODE_ENV&&warning(!1,"`value` prop on `%s` should not be null. Consider using the empty string to clear the component or `undefined` for uncontrolled components.%s",element.type,ReactComponentTreeHook.getStackAddendumByID(debugID)),didWarnValueNull=!0))}var ReactComponentTreeHook=__webpack_require__(11),warning=__webpack_require__(2),didWarnValueNull=!1,ReactDOMNullInputValuePropHook={onBeforeMountComponent:function(debugID,element){handleElement(debugID,element)},onBeforeUpdateComponent:function(debugID,element){handleElement(debugID,element)}};module.exports=ReactDOMNullInputValuePropHook}).call(exports,__webpack_require__(0))},function(module,exports,__webpack_require__){"use strict";(function(process){function flattenChildren(children){var content="";return React.Children.forEach(children,function(child){null!=child&&("string"==typeof child||"number"==typeof child?content+=child:didWarnInvalidOptionChildren||(didWarnInvalidOptionChildren=!0,"production"!==process.env.NODE_ENV&&warning(!1,"Only strings and numbers are supported as