├── .npmignore ├── webpack.build.config.js ├── tests.webpack.js ├── example └── index.html ├── src ├── index.js └── Component.jsx ├── test └── test.spec.js ├── karma.conf.js ├── LICENSE ├── README.md ├── webpack.config.js ├── .gitignore ├── package.json ├── .eslintrc └── lib └── app.min.js /.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | webpack.conf.js -------------------------------------------------------------------------------- /webpack.build.config.js: -------------------------------------------------------------------------------- 1 | process.env.WEBPACK_ENV = 'build'; 2 | 3 | module.exports = require('./webpack.config'); 4 | -------------------------------------------------------------------------------- /tests.webpack.js: -------------------------------------------------------------------------------- 1 | var context = require.context('./test', true, /.+\.spec\.jsx?$/); 2 | 3 | require('core-js/es5'); 4 | 5 | context.keys().forEach(context); 6 | module.exports = context; 7 | -------------------------------------------------------------------------------- /example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | React webpack starter 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import Component from './Component'; 4 | 5 | window.onload = () => { 6 | ReactDOM.render( 7 | , 8 | document.querySelector('#container') 9 | ); 10 | }; 11 | -------------------------------------------------------------------------------- /src/Component.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | var Component = React.createClass({ 4 | render: function () { 5 | if (this.props.onRender) { 6 | this.props.onRender(); 7 | } 8 | return ( 9 |

Hello world

10 | ); 11 | }, 12 | propTypes: { 13 | onRender: React.PropTypes.func 14 | } 15 | }); 16 | 17 | export default Component; 18 | -------------------------------------------------------------------------------- /test/test.spec.js: -------------------------------------------------------------------------------- 1 | import Component from '../src/Component.jsx'; 2 | import TestUtils from 'react-addons-test-utils'; 3 | import React from 'react'; 4 | 5 | var component; 6 | var spy = sinon.spy(); 7 | 8 | describe('Given an instance of the Component', () => { 9 | describe('when we render the component', () => { 10 | before(() => { 11 | component = TestUtils.renderIntoDocument(); 12 | }); 13 | it('should render a paragraph', () => { 14 | var paragraph = TestUtils.scryRenderedDOMComponentsWithTag(component, 'p'); 15 | 16 | expect(paragraph).to.have.length.above(0, 'Expected to have element with tag

'); 17 | expect(spy).to.be.calledOnce; 18 | }); 19 | }); 20 | }); 21 | -------------------------------------------------------------------------------- /karma.conf.js: -------------------------------------------------------------------------------- 1 | var webpackConfig = require('./webpack.config'); 2 | webpackConfig.devtool = 'inline-source-map'; 3 | 4 | module.exports = function (config) { 5 | config.set({ 6 | browsers: [ 'PhantomJS' ], 7 | singleRun: true, 8 | frameworks: [ 'mocha', 'chai', 'sinon', 'sinon-chai' ], 9 | files: [ 10 | 'tests.webpack.js' 11 | ], 12 | plugins: [ 13 | 'karma-phantomjs-launcher', 14 | 'karma-chai', 15 | 'karma-mocha', 16 | 'karma-sourcemap-loader', 17 | 'karma-webpack', 18 | 'karma-mocha-reporter', 19 | 'karma-sinon', 20 | 'karma-sinon-chai' 21 | ], 22 | preprocessors: { 23 | 'tests.webpack.js': [ 'webpack', 'sourcemap' ] 24 | }, 25 | reporters: [ 'mocha' ], 26 | webpack: webpackConfig, 27 | webpackServer: { 28 | noInfo: true 29 | }, 30 | autoWatch: true 31 | }); 32 | }; -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Krasimir Tsonev 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # React webpack starter template 2 | 3 | The aim of this repository is to provide a template for developing [React](https://facebook.github.io/react/) based applications using ES6 syntax and [webpack](https://webpack.github.io/) as a module bundler. 4 | 5 | ## Features 6 | 7 | * Bundles [React](https://facebook.github.io/react/) with `jsx` syntax 8 | * Compiles ES6 (with [Babel](https://babeljs.io/)) 9 | * Linting (with [ESLint](http://eslint.org/)) 10 | * Build with [webpack](https://webpack.github.io/) 11 | * Test with [Mocha](http://mochajs.org/), [Chai](http://chaijs.com/) and [Sinon](http://sinonjs.org/) 12 | * Use [Karma](http://karma-runner.github.io/) to run the tests 13 | * Develop locally with [webpack-dev-server](http://webpack.github.io/docs/webpack-dev-server.html) 14 | 15 | ## Usage 16 | 17 | * Download the files and place them in your project directory 18 | * Run `npm i` to install the dependencies 19 | * Run `npm run build` to build the project 20 | * Run `npm run dev` to build the project, start watching files and run the local server 21 | * Run `npm test` to run the tests once 22 | * Run `npm run test:ci` to watch the `src` directory for changes and run the tests 23 | 24 | ## MISC 25 | 26 | * [A modern React starter pack based on webpack](http://krasimirtsonev.com/blog/article/a-modern-react-starter-pack-based-on-webpack) 27 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | var webpack = require('webpack'); 2 | var UglifyJsPlugin = webpack.optimize.UglifyJsPlugin; 3 | var env = process.env.WEBPACK_ENV || 'dev'; 4 | var WebpackDevServer = require('webpack-dev-server'); 5 | var path = require('path'); 6 | 7 | var appName = 'app'; 8 | var host = '0.0.0.0'; 9 | var port = '9000'; 10 | 11 | var plugins = [], outputFile; 12 | 13 | if (env === 'build') { 14 | plugins.push(new UglifyJsPlugin({ minimize: true })); 15 | outputFile = appName + '.min.js'; 16 | } else { 17 | outputFile = appName + '.js'; 18 | } 19 | 20 | var config = { 21 | entry: './src/index.js', 22 | devtool: 'source-map', 23 | output: { 24 | path: __dirname + '/lib', 25 | filename: outputFile, 26 | publicPath: __dirname + '/example' 27 | }, 28 | module: { 29 | loaders: [ 30 | { 31 | test: /(\.jsx|\.js)$/, 32 | loader: 'babel', 33 | exclude: /(node_modules|bower_components)/, 34 | query: { 35 | presets: ['react', 'es2015'] 36 | } 37 | }, 38 | { 39 | test: /(\.jsx|\.js)$/, 40 | loader: "eslint-loader", 41 | exclude: /node_modules/ 42 | } 43 | ] 44 | }, 45 | resolve: { 46 | root: path.resolve('./src'), 47 | extensions: ['', '.js', '.jsx'] 48 | }, 49 | plugins: plugins 50 | }; 51 | 52 | if (env === 'dev') { 53 | new WebpackDevServer(webpack(config), { 54 | contentBase: './example', 55 | hot: true, 56 | debug: true 57 | }).listen(port, host, function (err, result) { 58 | if (err) { 59 | console.log(err); 60 | } 61 | }); 62 | console.log('-------------------------'); 63 | console.log('Local web server runs at http://' + host + ':' + port); 64 | console.log('-------------------------'); 65 | } 66 | 67 | module.exports = config; 68 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Build ... 2 | node_modules 3 | npm-debug.log 4 | public 5 | tmp 6 | 7 | # Created by https://www.gitignore.io 8 | 9 | ### OSX ### 10 | .DS_Store 11 | .AppleDouble 12 | .LSOverride 13 | 14 | # Icon must end with two \r 15 | Icon 16 | 17 | 18 | # Thumbnails 19 | ._* 20 | 21 | # Files that might appear in the root of a volume 22 | .DocumentRevisions-V100 23 | .fseventsd 24 | .Spotlight-V100 25 | .TemporaryItems 26 | .Trashes 27 | .VolumeIcon.icns 28 | 29 | # Directories potentially created on remote AFP share 30 | .AppleDB 31 | .AppleDesktop 32 | Network Trash Folder 33 | Temporary Items 34 | .apdisk 35 | 36 | 37 | ### Vim ### 38 | [._]*.s[a-w][a-z] 39 | [._]s[a-w][a-z] 40 | *.un~ 41 | Session.vim 42 | .netrwhist 43 | *~ 44 | 45 | 46 | ### SublimeText ### 47 | # cache files for sublime text 48 | *.tmlanguage.cache 49 | *.tmPreferences.cache 50 | *.stTheme.cache 51 | 52 | # workspace files are user-specific 53 | *.sublime-workspace 54 | 55 | # project files should be checked into the repository, unless a significant 56 | # proportion of contributors will probably not be using SublimeText 57 | # *.sublime-project 58 | 59 | # sftp configuration file 60 | sftp-config.json 61 | 62 | 63 | ### Node ### 64 | # Logs 65 | logs 66 | *.log 67 | 68 | # Runtime data 69 | pids 70 | *.pid 71 | *.seed 72 | 73 | # Directory for instrumented libs generated by jscoverage/JSCover 74 | lib-cov 75 | 76 | # Coverage directory used by tools like istanbul 77 | coverage 78 | 79 | # node-waf configuration 80 | .lock-wscript 81 | 82 | # Compiled binary addons (http://nodejs.org/api/addons.html) 83 | build 84 | 85 | # Dependency directory 86 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git 87 | node_modules 88 | 89 | 90 | ### Linux ### 91 | *~ 92 | 93 | # KDE directory preferences 94 | .directory 95 | 96 | # Linux trash folder which might appear on any partition or disk 97 | .Trash-* 98 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-webpack-starter", 3 | "version": "1.0.0", 4 | "description": "React webpack starter template", 5 | "main": "lib/index.js", 6 | "dependencies": {}, 7 | "author": { 8 | "name": "Krasimir Tsonev", 9 | "email": "info@krasimirtsonev.com", 10 | "url": "http://krasimirtsonev.com" 11 | }, 12 | "license": "MIT", 13 | "keywords": [ 14 | "react", 15 | "carousel", 16 | "responsive" 17 | ], 18 | "repository": { 19 | "type": "git", 20 | "url": "git@github.com:krasimir/react-webpack-starter.git" 21 | }, 22 | "scripts": { 23 | "dev": "./node_modules/.bin/webpack --watch --inline", 24 | "build": "./node_modules/.bin/webpack --config=webpack.build.config.js", 25 | "test": "karma start", 26 | "test:ci": "watch 'npm run test' src/" 27 | }, 28 | "devDependencies": { 29 | "babel": "6.5.2", 30 | "babel-core": "6.6.5", 31 | "babel-eslint": "7.2.1", 32 | "babel-loader": "6.2.4", 33 | "babel-preset-es2015": "6.6.0", 34 | "babel-preset-react": "6.5.0", 35 | "chai": "3.3.0", 36 | "core-js": "1.1.4", 37 | "eslint": "3.19.0", 38 | "eslint-loader": "1.7.1", 39 | "eslint-plugin-react": "6.10.3", 40 | "karma": "0.13.19", 41 | "karma-chai": "0.1.0", 42 | "karma-chai-plugins": "0.6.0", 43 | "karma-chai-sinon": "0.1.5", 44 | "karma-chrome-launcher": "0.2.0", 45 | "karma-mocha": "0.2.0", 46 | "karma-mocha-reporter": "1.1.1", 47 | "karma-phantomjs-launcher": "1.0.2", 48 | "karma-sinon": "1.0.4", 49 | "karma-sinon-chai": "1.1.0", 50 | "karma-sourcemap-loader": "0.3.5", 51 | "karma-webpack": "1.7.0", 52 | "mocha": "2.3.4", 53 | "phantomjs": "1.9.19", 54 | "react": "15.2.0", 55 | "react-addons-test-utils": "15.2.0", 56 | "react-dom": "15.2.0", 57 | "watch": "0.16.0", 58 | "webpack": "1.12.2", 59 | "webpack-dev-server": "1.11.0" 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "esversion": 6, 3 | 4 | "ecmaFeatures": { 5 | "globalReturn": true, 6 | "jsx": true, 7 | "modules": true 8 | }, 9 | 10 | "env": { 11 | "browser": true, 12 | "es6": true, 13 | "node": true 14 | }, 15 | 16 | "globals": { 17 | "document": false, 18 | "escape": false, 19 | "navigator": false, 20 | "unescape": false, 21 | "window": false, 22 | "describe": true, 23 | "before": true, 24 | "it": true, 25 | "expect": true, 26 | "sinon": true 27 | }, 28 | 29 | "parser": "babel-eslint", 30 | 31 | "plugins": [ 32 | "react" 33 | ], 34 | 35 | "rules": { 36 | "block-scoped-var": 2, 37 | "brace-style": [2, "1tbs", { "allowSingleLine": true }], 38 | "camelcase": [2, { "properties": "always" }], 39 | "comma-dangle": [2, "never"], 40 | "comma-spacing": [2, { "before": false, "after": true }], 41 | "comma-style": [2, "last"], 42 | "complexity": 0, 43 | "consistent-return": 2, 44 | "consistent-this": 0, 45 | "curly": [2, "multi-line"], 46 | "default-case": 0, 47 | "dot-location": [2, "property"], 48 | "dot-notation": 0, 49 | "eol-last": 2, 50 | "eqeqeq": [2, "allow-null"], 51 | "func-names": 0, 52 | "func-style": 0, 53 | "generator-star-spacing": [2, "both"], 54 | "guard-for-in": 0, 55 | "handle-callback-err": [2, "^(err|error|anySpecificError)$" ], 56 | "indent": [2, 2, { "SwitchCase": 1 }], 57 | "key-spacing": [2, { "beforeColon": false, "afterColon": true }], 58 | "linebreak-style": 0, 59 | "max-depth": 0, 60 | "max-len": [2, 120, 4], 61 | "max-nested-callbacks": 0, 62 | "max-params": 0, 63 | "max-statements": 0, 64 | "new-cap": [2, { "newIsCap": true, "capIsNew": false }], 65 | "newline-after-var": [2, "always"], 66 | "new-parens": 2, 67 | "no-alert": 0, 68 | "no-array-constructor": 2, 69 | "no-bitwise": 0, 70 | "no-caller": 2, 71 | "no-catch-shadow": 0, 72 | "no-cond-assign": 2, 73 | "no-console": 0, 74 | "no-constant-condition": 0, 75 | "no-continue": 0, 76 | "no-control-regex": 2, 77 | "no-debugger": 2, 78 | "no-delete-var": 2, 79 | "no-div-regex": 0, 80 | "no-dupe-args": 2, 81 | "no-dupe-keys": 2, 82 | "no-duplicate-case": 2, 83 | "no-else-return": 2, 84 | "no-empty": 0, 85 | "no-empty-character-class": 2, 86 | "no-eq-null": 0, 87 | "no-eval": 2, 88 | "no-ex-assign": 2, 89 | "no-extend-native": 2, 90 | "no-extra-bind": 2, 91 | "no-extra-boolean-cast": 2, 92 | "no-extra-parens": 0, 93 | "no-extra-semi": 0, 94 | "no-extra-strict": 0, 95 | "no-fallthrough": 2, 96 | "no-floating-decimal": 2, 97 | "no-func-assign": 2, 98 | "no-implied-eval": 2, 99 | "no-inline-comments": 0, 100 | "no-inner-declarations": [2, "functions"], 101 | "no-invalid-regexp": 2, 102 | "no-irregular-whitespace": 2, 103 | "no-iterator": 2, 104 | "no-label-var": 2, 105 | "no-labels": 2, 106 | "no-lone-blocks": 0, 107 | "no-lonely-if": 0, 108 | "no-loop-func": 0, 109 | "no-mixed-requires": 0, 110 | "no-mixed-spaces-and-tabs": [2, false], 111 | "no-multi-spaces": 2, 112 | "no-multi-str": 2, 113 | "no-multiple-empty-lines": [2, { "max": 1 }], 114 | "no-native-reassign": 2, 115 | "no-negated-in-lhs": 2, 116 | "no-nested-ternary": 0, 117 | "no-new": 2, 118 | "no-new-func": 2, 119 | "no-new-object": 2, 120 | "no-new-require": 2, 121 | "no-new-wrappers": 2, 122 | "no-obj-calls": 2, 123 | "no-octal": 2, 124 | "no-octal-escape": 2, 125 | "no-path-concat": 0, 126 | "no-plusplus": 0, 127 | "no-process-env": 0, 128 | "no-process-exit": 0, 129 | "no-proto": 2, 130 | "no-redeclare": 2, 131 | "no-regex-spaces": 2, 132 | "no-reserved-keys": 0, 133 | "no-restricted-modules": 0, 134 | "no-return-assign": 2, 135 | "no-script-url": 0, 136 | "no-self-compare": 2, 137 | "no-sequences": 2, 138 | "no-shadow": 0, 139 | "no-shadow-restricted-names": 2, 140 | "no-spaced-func": 2, 141 | "no-sparse-arrays": 2, 142 | "no-sync": 0, 143 | "no-ternary": 0, 144 | "no-throw-literal": 2, 145 | "no-trailing-spaces": 2, 146 | "no-undef": 2, 147 | "no-undef-init": 2, 148 | "no-undefined": 0, 149 | "no-underscore-dangle": 0, 150 | "no-unneeded-ternary": 2, 151 | "no-unreachable": 2, 152 | "no-unused-expressions": 0, 153 | "no-unused-vars": [2, { "vars": "all", "args": "none" }], 154 | "no-use-before-define": 2, 155 | "no-var": 0, 156 | "no-void": 0, 157 | "no-warning-comments": 0, 158 | "no-with": 2, 159 | "one-var": 0, 160 | "operator-assignment": 0, 161 | "operator-linebreak": [2, "after"], 162 | "padded-blocks": 0, 163 | "quote-props": 0, 164 | "quotes": [2, "single", "avoid-escape"], 165 | "radix": 2, 166 | "jsx-quotes": [2, "prefer-single"], 167 | "react/display-name": 0, 168 | "react/jsx-boolean-value": 2, 169 | "react/jsx-no-undef": 2, 170 | "react/jsx-sort-prop-types": 0, 171 | "react/jsx-sort-props": 0, 172 | "react/jsx-uses-react": 2, 173 | "react/jsx-uses-vars": 2, 174 | "react/no-did-mount-set-state": 2, 175 | "react/no-did-update-set-state": 2, 176 | "react/no-multi-comp": 2, 177 | "react/no-unknown-property": 2, 178 | "react/prop-types": 2, 179 | "react/react-in-jsx-scope": 2, 180 | "react/self-closing-comp": 2, 181 | "react/sort-comp": 0, 182 | "react/jsx-wrap-multilines": 2, 183 | "semi": [2, "always"], 184 | "semi-spacing": 0, 185 | "sort-vars": 0, 186 | "keyword-spacing": [2, {"before": true, "after": true}], 187 | "space-before-blocks": [2, "always"], 188 | "space-before-function-paren": [2, {"anonymous": "always", "named": "never"}], 189 | "space-in-brackets": 0, 190 | "space-in-parens": [2, "never"], 191 | "space-infix-ops": 2, 192 | "space-unary-ops": [2, { "words": true, "nonwords": false }], 193 | "spaced-comment": [2, "always"], 194 | "strict": 0, 195 | "use-isnan": 2, 196 | "valid-jsdoc": 0, 197 | "valid-typeof": 2, 198 | "vars-on-top": 2, 199 | "wrap-iife": [2, "any"], 200 | "wrap-regex": 0, 201 | "yoda": [2, "never"] 202 | } 203 | } 204 | -------------------------------------------------------------------------------- /lib/app.min.js: -------------------------------------------------------------------------------- 1 | !function(e){function t(o){if(n[o])return n[o].exports;var r=n[o]={exports:{},id:o,loaded:!1};return e[o].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var n={};return t.m=e,t.c=n,t.p="/Users/krasimir/Work/Krasimir/react-webpack-starter/example",t(0)}([function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{"default":e}}var r=n(1),i=o(r),a=n(33),u=o(a),s=n(170),c=o(s);window.onload=function(){u["default"].render(i["default"].createElement(c["default"],null),document.querySelector("#container"))}},function(e,t,n){"use strict";e.exports=n(2)},function(e,t,n){(function(t){"use strict";var o=n(4),r=n(5),i=n(17),a=n(20),u=n(25),s=n(9),c=n(30),l=n(31),p=n(32),d=n(11),f=s.createElement,h=s.createFactory,m=s.cloneElement;if("production"!==t.env.NODE_ENV){var v=n(27);f=v.createElement,h=v.createFactory,m=v.cloneElement}var g=o;if("production"!==t.env.NODE_ENV){var E=!1;g=function(){return"production"!==t.env.NODE_ENV?d(E,"React.__spread is deprecated and should not be used. Use Object.assign directly or another helper function with similar semantics. You may be seeing this warning due to your compiler. See https://fb.me/react-spread-deprecation for more details."):void 0,E=!0,o.apply(null,arguments)}}var y={Children:{map:r.map,forEach:r.forEach,count:r.count,toArray:r.toArray,only:p},Component:i,createElement:f,cloneElement:m,isValidElement:s.isValidElement,PropTypes:c,createClass:a.createClass,createFactory:h,createMixin:function(e){return e},DOM:u,version:l,__spread:g};e.exports=y}).call(t,n(3))},function(e,t){function n(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function r(e){if(l===setTimeout)return setTimeout(e,0);if((l===n||!l)&&setTimeout)return l=setTimeout,setTimeout(e,0);try{return l(e,0)}catch(t){try{return l.call(null,e,0)}catch(t){return l.call(this,e,0)}}}function i(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function a(){m&&f&&(m=!1,f.length?h=f.concat(h):v=-1,h.length&&u())}function u(){if(!m){var e=r(a);m=!0;for(var t=h.length;t;){for(f=h,h=[];++v1)for(var n=1;nn;n++)t["_"+String.fromCharCode(n)]=n;var o=Object.getOwnPropertyNames(t).map(function(e){return t[e]});if("0123456789"!==o.join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijklmnopqrst"!==Object.keys(Object.assign({},r)).join("")?!1:!0}catch(i){return!1}}var r=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;e.exports=o()?Object.assign:function(e,t){for(var o,u,s=n(e),c=1;c1){for(var _=Array(b),N=0;b>N;N++)_[N]=arguments[N+2];m.children=_}if(e&&e.defaultProps){var C=e.defaultProps;for(l in C)void 0===m[l]&&(m[l]=C[l])}if("production"!==t.env.NODE_ENV){var D="function"==typeof e?e.displayName||e.name||"Unknown":e,O=function(){return void(i||(i=!0,"production"!==t.env.NODE_ENV?c(!1,"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://fb.me/react-special-props)",D):void 0))};O.isReactWarning=!0;var T=function(){return void(a||(a=!0,"production"!==t.env.NODE_ENV?c(!1,"%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://fb.me/react-special-props)",D):void 0))};T.isReactWarning=!0,("undefined"==typeof m.$$typeof||m.$$typeof!==d)&&(m.hasOwnProperty("key")||Object.defineProperty(m,"key",{get:O,configurable:!0}),m.hasOwnProperty("ref")||Object.defineProperty(m,"ref",{get:T,configurable:!0}))}return h(e,v,g,E,y,s.current,m)},h.createFactory=function(e){var t=h.createElement.bind(null,e);return t.type=e,t},h.cloneAndReplaceKey=function(e,t){var n=h(e.type,t,e.ref,e._self,e._source,e._owner,e.props);return n},h.cloneElement=function(e,n,i){var a,l=u({},e.props),d=e.key,m=e.ref,v=e._self,g=e._source,E=e._owner;if(null!=n){"production"!==t.env.NODE_ENV&&("production"!==t.env.NODE_ENV?c(null==n.__proto__||n.__proto__===Object.prototype,"React.cloneElement(...): Expected props argument to be a plain object. Properties defined in its prototype chain will be ignored."):void 0),o(n)&&(m=n.ref,E=s.current),r(n)&&(d=""+n.key);var y;e.type&&e.type.defaultProps&&(y=e.type.defaultProps);for(a in n)p.call(n,a)&&!f.hasOwnProperty(a)&&(void 0===n[a]&&void 0!==y?l[a]=y[a]:l[a]=n[a])}var b=arguments.length-2;if(1===b)l.children=i;else if(b>1){for(var _=Array(b),N=0;b>N;N++)_[N]=arguments[N+2];l.children=_}return h(e.type,d,m,v,g,E,l)},h.isValidElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===d},h.REACT_ELEMENT_TYPE=d,e.exports=h}).call(t,n(3))},function(e,t){"use strict";var n={current:null};e.exports=n},function(e,t,n){(function(t){"use strict";var o=n(12),r=o;"production"!==t.env.NODE_ENV&&!function(){var e=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),o=1;t>o;o++)n[o-1]=arguments[o];var r=0,i="Warning: "+e.replace(/%s/g,function(){return n[r++]});"undefined"!=typeof console&&console.error(i);try{throw new Error(i)}catch(a){}};r=function(t,n){if(void 0===n)throw new Error("`warning(condition, format, ...args)` requires a warning message argument");if(0!==n.indexOf("Failed Composite propType: ")&&!t){for(var o=arguments.length,r=Array(o>2?o-2:0),i=2;o>i;i++)r[i-2]=arguments[i];e.apply(void 0,[n].concat(r))}}}(),e.exports=r}).call(t,n(3))},function(e,t){"use strict";function n(e){return function(){return e}}var o=function(){};o.thatReturns=n,o.thatReturnsFalse=n(!1),o.thatReturnsTrue=n(!0),o.thatReturnsNull=n(null),o.thatReturnsThis=function(){return this},o.thatReturnsArgument=function(e){return e},e.exports=o},function(e,t,n){(function(t){"use strict";var n=!1;if("production"!==t.env.NODE_ENV)try{Object.defineProperty({},"x",{get:function(){}}),n=!0}catch(o){}e.exports=n}).call(t,n(3))},function(e,t,n){(function(t){"use strict";function o(e,t){return e&&"object"==typeof e&&null!=e.key?p.escape(e.key):t.toString(36)}function r(e,n,i,v){var g=typeof e;if(("undefined"===g||"boolean"===g)&&(e=null),null===e||"string"===g||"number"===g||s.isValidElement(e))return i(v,e,""===n?f+o(e,0):n),1;var E,y,b=0,_=""===n?f:n+h;if(Array.isArray(e))for(var N=0;N1?u-1:0),c=1;u>c;c++)s[c-1]=arguments[c];if(a!==e&&null!==a)"production"!==t.env.NODE_ENV?C(!1,"bind(): React component methods may only be bound to the component instance. See %s",r):void 0;else if(!s.length)return"production"!==t.env.NODE_ENV?C(!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",r):void 0,o;var l=i.apply(o,arguments);return l.__reactBoundContext=e,l.__reactBoundMethod=n,l.__reactBoundArguments=s,l}}return o}function p(e){for(var t=e.__reactAutoBindPairs,n=0;n.")}return t}function i(e,n){if(e._store&&!e._store.validated&&null==e.key){e._store.validated=!0;var o=v.uniqueKey||(v.uniqueKey={}),i=r(n);if(!o[i]){o[i]=!0;var a="";e&&e._owner&&e._owner!==s.current&&(a=" It was passed a child from "+e._owner.getName()+"."),"production"!==t.env.NODE_ENV?m(!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',i,a,c.getCurrentStackAddendum(e)):void 0}}}function a(e,t){if("object"==typeof e)if(Array.isArray(e))for(var n=0;n>",O={array:i("array"),bool:i("boolean"),func:i("function"),number:i("number"),object:i("object"),string:i("string"),symbol:i("symbol"),any:a(),arrayOf:u,element:s(),instanceOf:c,node:f(),objectOf:p,oneOf:l,oneOfType:d,shape:h};e.exports=O},function(e,t){"use strict";e.exports="15.2.0"},function(e,t,n){(function(t){"use strict";function o(e){return i.isValidElement(e)?void 0:"production"!==t.env.NODE_ENV?a(!1,"onlyChild must be passed a children with exactly one child."):r("23"),e}var r=n(7),i=n(9),a=n(8);e.exports=o}).call(t,n(3))},function(e,t,n){"use strict";e.exports=n(34)},function(e,t,n){(function(t){"use strict";var o=n(35),r=n(38),i=n(162),a=n(64),u=n(55),s=n(31),c=n(167),l=n(168),p=n(169),d=n(11);r.inject();var f={findDOMNode:c,render:i.render,unmountComponentAtNode:i.unmountComponentAtNode,version:s,unstable_batchedUpdates:u.batchedUpdates,unstable_renderSubtreeIntoContainer:p};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject&&__REACT_DEVTOOLS_GLOBAL_HOOK__.inject({ComponentTree:{getClosestInstanceFromNode:o.getClosestInstanceFromNode,getNodeFromInstance:function(e){return e._renderedComponent&&(e=l(e)),e?o.getNodeFromInstance(e):null}},Mount:i,Reconciler:a}),"production"!==t.env.NODE_ENV){var h=n(48);if(h.canUseDOM&&window.top===window.self){if("undefined"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&(navigator.userAgent.indexOf("Chrome")>-1&&-1===navigator.userAgent.indexOf("Edge")||navigator.userAgent.indexOf("Firefox")>-1)){var m=-1===window.location.protocol.indexOf("http")&&-1===navigator.userAgent.indexOf("Firefox");console.debug("Download the React DevTools "+(m?"and use an HTTP server (instead of a file: URL) ":"")+"for a better development experience: https://fb.me/react-devtools")}var v=function(){};"production"!==t.env.NODE_ENV?d(-1!==(v.name||v.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."):void 0;var g=document.documentMode&&document.documentMode<8;"production"!==t.env.NODE_ENV?d(!g,'Internet Explorer is running in compatibility mode; please add the following tag to your HTML to prevent this from happening: '):void 0;for(var E=[Array.isArray,Array.prototype.every,Array.prototype.forEach,Array.prototype.indexOf,Array.prototype.map,Date.now,Function.prototype.bind,Object.keys,String.prototype.split,String.prototype.trim],y=0;y8&&11>=C),T=32,w=String.fromCharCode(T),x=f.topLevelTypes,I={beforeInput:{phasedRegistrationNames:{bubbled:y({onBeforeInput:null}),captured:y({onBeforeInputCapture:null})},dependencies:[x.topCompositionEnd,x.topKeyPress,x.topTextInput,x.topPaste]},compositionEnd:{phasedRegistrationNames:{bubbled:y({onCompositionEnd:null}),captured:y({onCompositionEndCapture:null})},dependencies:[x.topBlur,x.topCompositionEnd,x.topKeyDown,x.topKeyPress,x.topKeyUp,x.topMouseDown]},compositionStart:{phasedRegistrationNames:{bubbled:y({onCompositionStart:null}),captured:y({onCompositionStartCapture:null})},dependencies:[x.topBlur,x.topCompositionStart,x.topKeyDown,x.topKeyPress,x.topKeyUp,x.topMouseDown]},compositionUpdate:{phasedRegistrationNames:{bubbled:y({onCompositionUpdate:null}),captured:y({onCompositionUpdateCapture:null})},dependencies:[x.topBlur,x.topCompositionUpdate,x.topKeyDown,x.topKeyPress,x.topKeyUp,x.topMouseDown]}},k=!1,P=null,S={eventTypes:I,extractEvents:function(e,t,n,o){return[c(e,t,n,o),d(e,t,n,o)]}};e.exports=S},function(e,t,n){"use strict";var o=n(22),r=o({bubbled:null,captured:null}),i=o({topAbort:null,topAnimationEnd:null,topAnimationIteration:null,topAnimationStart:null,topBlur:null,topCanPlay:null,topCanPlayThrough:null,topChange:null,topClick:null,topCompositionEnd:null,topCompositionStart:null,topCompositionUpdate:null,topContextMenu:null,topCopy:null,topCut:null,topDoubleClick:null,topDrag:null,topDragEnd:null,topDragEnter:null,topDragExit:null,topDragLeave:null,topDragOver:null,topDragStart:null,topDrop:null,topDurationChange:null,topEmptied:null,topEncrypted:null,topEnded:null,topError:null,topFocus:null,topInput:null,topInvalid:null,topKeyDown:null,topKeyPress:null,topKeyUp:null,topLoad:null,topLoadedData:null,topLoadedMetadata:null,topLoadStart:null,topMouseDown:null,topMouseMove:null,topMouseOut:null,topMouseOver:null,topMouseUp:null,topPaste:null,topPause:null,topPlay:null,topPlaying:null,topProgress:null,topRateChange:null,topReset:null,topScroll:null,topSeeked:null,topSeeking:null,topSelectionChange:null,topStalled:null,topSubmit:null,topSuspend:null,topTextInput:null,topTimeUpdate:null,topTouchCancel:null,topTouchEnd:null,topTouchMove:null,topTouchStart:null,topTransitionEnd:null,topVolumeChange:null,topWaiting:null,topWheel:null}),a={topLevelTypes:i,PropagationPhases:r};e.exports=a},function(e,t,n){(function(t){"use strict";function o(e,t,n){var o=t.dispatchConfig.phasedRegistrationNames[n];return b(e,o)}function r(e,n,r){"production"!==t.env.NODE_ENV&&("production"!==t.env.NODE_ENV?E(e,"Dispatching inst must not be null"):void 0);var i=n?y.bubbled:y.captured,a=o(e,r,i);a&&(r._dispatchListeners=v(r._dispatchListeners,a),r._dispatchInstances=v(r._dispatchInstances,e))}function i(e){e&&e.dispatchConfig.phasedRegistrationNames&&m.traverseTwoPhase(e._targetInst,r,e)}function a(e){if(e&&e.dispatchConfig.phasedRegistrationNames){var t=e._targetInst,n=t?m.getParentInstance(t):null;m.traverseTwoPhase(n,r,e)}}function u(e,t,n){if(n&&n.dispatchConfig.registrationName){var o=n.dispatchConfig.registrationName,r=b(e,o);r&&(n._dispatchListeners=v(n._dispatchListeners,r),n._dispatchInstances=v(n._dispatchInstances,e))}}function s(e){e&&e.dispatchConfig.registrationName&&u(e._targetInst,null,e)}function c(e){g(e,i)}function l(e){g(e,a)}function p(e,t,n,o){m.traverseEnterLeave(n,o,u,e,t)}function d(e){g(e,s)}var f=n(40),h=n(42),m=n(44),v=n(46),g=n(47),E=n(11),y=f.PropagationPhases,b=h.getListener,_={accumulateTwoPhaseDispatches:c,accumulateTwoPhaseDispatchesSkipTarget:l,accumulateDirectDispatches:d,accumulateEnterLeaveDispatches:p};e.exports=_}).call(t,n(3))},function(e,t,n){(function(t){"use strict";var o=n(7),r=n(43),i=n(44),a=n(45),u=n(46),s=n(47),c=n(8),l={},p=null,d=function(e,t){e&&(i.executeDispatchesInOrder(e,t),e.isPersistent()||e.constructor.release(e))},f=function(e){return d(e,!0)},h=function(e){return d(e,!1)},m={injection:{injectEventPluginOrder:r.injectEventPluginOrder,injectEventPluginsByName:r.injectEventPluginsByName},putListener:function(e,n,i){"function"!=typeof i?"production"!==t.env.NODE_ENV?c(!1,"Expected %s listener to be a function, instead got type %s",n,typeof i):o("94",n,typeof i):void 0;var a=l[n]||(l[n]={});a[e._rootNodeID]=i;var u=r.registrationNameModules[n];u&&u.didPutListener&&u.didPutListener(e,n,i)},getListener:function(e,t){var n=l[t];return n&&n[e._rootNodeID]},deleteListener:function(e,t){var n=r.registrationNameModules[t];n&&n.willDeleteListener&&n.willDeleteListener(e,t);var o=l[t];o&&delete o[e._rootNodeID]},deleteAllListeners:function(e){for(var t in l)if(l.hasOwnProperty(t)&&l[t][e._rootNodeID]){var n=r.registrationNameModules[t];n&&n.willDeleteListener&&n.willDeleteListener(e,t),delete l[t][e._rootNodeID]}},extractEvents:function(e,t,n,o){for(var i,a=r.plugins,s=0;s-1?void 0:"production"!==t.env.NODE_ENV?u(!1,"EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `%s`.",e):a("96",e),!l.plugins[o]){n.extractEvents?void 0:"production"!==t.env.NODE_ENV?u(!1,"EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `%s` does not.",e):a("97",e),l.plugins[o]=n;var i=n.eventTypes;for(var p in i)r(i[p],n,p)?void 0:"production"!==t.env.NODE_ENV?u(!1,"EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.",p,e):a("98",p,e)}}}function r(e,n,o){l.eventNameDispatchConfigs.hasOwnProperty(o)?"production"!==t.env.NODE_ENV?u(!1,"EventPluginHub: More than one plugin attempted to publish the same event name, `%s`.",o):a("99",o):void 0,l.eventNameDispatchConfigs[o]=e;var r=e.phasedRegistrationNames;if(r){for(var s in r)if(r.hasOwnProperty(s)){var c=r[s];i(c,n,o)}return!0}return e.registrationName?(i(e.registrationName,n,o),!0):!1}function i(e,n,o){if(l.registrationNameModules[e]?"production"!==t.env.NODE_ENV?u(!1,"EventPluginHub: More than one plugin attempted to publish the same registration name, `%s`.",e):a("100",e):void 0,l.registrationNameModules[e]=n,l.registrationNameDependencies[e]=n.eventTypes[o].dependencies,"production"!==t.env.NODE_ENV){var r=e.toLowerCase();l.possibleRegistrationNames[r]=e,"onDoubleClick"===e&&(l.possibleRegistrationNames.ondblclick=e)}}var a=n(7),u=n(8),s=null,c={},l={plugins:[],eventNameDispatchConfigs:{},registrationNameModules:{},registrationNameDependencies:{},possibleRegistrationNames:"production"!==t.env.NODE_ENV?{}:null,injectEventPluginOrder:function(e){s?"production"!==t.env.NODE_ENV?u(!1,"EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React."):a("101"):void 0,s=Array.prototype.slice.call(e),o()},injectEventPluginsByName:function(e){var n=!1;for(var r in e)if(e.hasOwnProperty(r)){var i=e[r];c.hasOwnProperty(r)&&c[r]===i||(c[r]?"production"!==t.env.NODE_ENV?u(!1,"EventPluginRegistry: Cannot inject two different event plugins using the same name, `%s`.",r):a("102",r):void 0,c[r]=i,n=!0)}n&&o()},getPluginModuleForEvent:function(e){var t=e.dispatchConfig;if(t.registrationName)return l.registrationNameModules[t.registrationName]||null;for(var n in t.phasedRegistrationNames)if(t.phasedRegistrationNames.hasOwnProperty(n)){var o=l.registrationNameModules[t.phasedRegistrationNames[n]];if(o)return o}return null},_resetEventPlugins:function(){s=null;for(var e in c)c.hasOwnProperty(e)&&delete c[e];l.plugins.length=0;var n=l.eventNameDispatchConfigs;for(var o in n)n.hasOwnProperty(o)&&delete n[o];var r=l.registrationNameModules;for(var i in r)r.hasOwnProperty(i)&&delete r[i];if("production"!==t.env.NODE_ENV){var a=l.possibleRegistrationNames;for(var u in a)a.hasOwnProperty(u)&&delete a[u]}}};e.exports=l}).call(t,n(3))},function(e,t,n){(function(t){"use strict";function o(e){return e===_.topMouseUp||e===_.topTouchEnd||e===_.topTouchCancel}function r(e){return e===_.topMouseMove||e===_.topTouchMove}function i(e){return e===_.topMouseDown||e===_.topTouchStart}function a(e,t,n,o){var r=e.type||"unknown-event";e.currentTarget=N.getNodeFromInstance(o),t?g.invokeGuardedCallbackWithCatch(r,n,e):g.invokeGuardedCallback(r,n,e),e.currentTarget=null}function u(e,n){var o=e._dispatchListeners,r=e._dispatchInstances;if("production"!==t.env.NODE_ENV&&h(e),Array.isArray(o))for(var i=0;ie&&n[e]===r[e];e++);var a=o-e;for(t=1;a>=t&&n[o-t]===r[i-t];t++);var u=t>1?1-t:void 0;return this._fallbackText=r.slice(e,u),this._fallbackText}}),i.addPoolingTo(o),e.exports=o},function(e,t,n){"use strict";function o(){return!i&&r.canUseDOM&&(i="textContent"in document.documentElement?"textContent":"innerText"),i}var r=n(48),i=null;e.exports=o},function(e,t,n){"use strict";function o(e,t,n,o){return r.call(this,e,t,n,o)}var r=n(52),i={data:null};r.augmentClass(o,i),e.exports=o},function(e,t,n){(function(t){"use strict";function o(e,n,o,r){"production"!==t.env.NODE_ENV&&(delete this.nativeEvent,delete this.preventDefault,delete this.stopPropagation),this.dispatchConfig=e,this._targetInst=n,this.nativeEvent=o;var i=this.constructor.Interface;for(var a in i)if(i.hasOwnProperty(a)){"production"!==t.env.NODE_ENV&&delete this[a];var s=i[a];s?this[a]=s(o):"target"===a?this.target=r:this[a]=o[a]}var c=null!=o.defaultPrevented?o.defaultPrevented:o.returnValue===!1;return c?this.isDefaultPrevented=u.thatReturnsTrue:this.isDefaultPrevented=u.thatReturnsFalse,this.isPropagationStopped=u.thatReturnsFalse,this}function r(e,n){function o(e){var t=a?"setting the method":"setting the property";return i(t,"This is effectively a no-op"),e}function r(){var e=a?"accessing the method":"accessing the property",t=a?"This is a no-op function":"This is set to null";return i(e,t),n}function i(n,o){var r=!1;"production"!==t.env.NODE_ENV?s(r,"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.",n,e,o):void 0}var a="function"==typeof n;return{configurable:!0,set:o,get:r}}var i=n(4),a=n(6),u=n(12),s=n(11),c=!1,l="function"==typeof Proxy,p=["dispatchConfig","_targetInst","nativeEvent","isDefaultPrevented","isPropagationStopped","_dispatchListeners","_dispatchInstances"],d={type:null,target:null,currentTarget:u.thatReturnsNull,eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};i(o.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():e.returnValue=!1,this.isDefaultPrevented=u.thatReturnsTrue)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():e.cancelBubble=!0,this.isPropagationStopped=u.thatReturnsTrue)},persist:function(){this.isPersistent=u.thatReturnsTrue},isPersistent:u.thatReturnsFalse,destructor:function(){var e=this.constructor.Interface;for(var n in e)"production"!==t.env.NODE_ENV?Object.defineProperty(this,n,r(n,e[n])):this[n]=null;for(var o=0;o8));var A=!1;_.canUseDOM&&(A=T("input")&&(!("documentMode"in document)||document.documentMode>11));var L={get:function(){return V.get.call(this)},set:function(e){R=""+e,V.set.call(this,e)}},U={eventTypes:k,extractEvents:function(e,t,n,r){var i,a,u=t?N.getNodeFromInstance(t):window;if(o(u)?M?i=s:a=c:w(u)?A?i=f:(i=m,a=h):v(u)&&(i=g),i){var l=i(e,t);if(l){var p=D.getPooled(k.change,l,n,r);return p.type="change",b.accumulateTwoPhaseDispatches(p),p}}a&&a(e,u,t)}};e.exports=U},function(e,t,n){(function(t){"use strict";function o(){I.ReactReconcileTransaction&&C?void 0:"production"!==t.env.NODE_ENV?E(!1,"ReactUpdates: must inject a reconcile transaction class and batching strategy"):l("123")}function r(){this.reinitializeTransaction(),this.dirtyComponentsLength=null,this.callbackQueue=d.getPooled(),this.reconcileTransaction=I.ReactReconcileTransaction.getPooled(!0)}function i(e,t,n,r,i,a){o(),C.batchedUpdates(e,t,n,r,i,a)}function a(e,t){return e._mountOrder-t._mountOrder}function u(e){var n=e.dirtyComponentsLength;n!==y.length?"production"!==t.env.NODE_ENV?E(!1,"Expected flush transaction's stored dirty-components length (%s) to match dirty-components array length (%s).",n,y.length):l("124",n,y.length):void 0,y.sort(a),b++;for(var o=0;n>o;o++){var r=y[o],i=r._pendingCallbacks;r._pendingCallbacks=null;var u;if(h.logTopLevelRenders){var s=r;r._currentElement.props===r._renderedComponent._currentElement&&(s=r._renderedComponent),u="React update: "+s.getName(),console.time(u)}if(v.performUpdateIfNecessary(r,e.reconcileTransaction,b),u&&console.timeEnd(u),i)for(var c=0;c]/,s=n(83),c=s(function(e,t){if(e.namespaceURI!==i.svg||"innerHTML"in e)e.innerHTML=t;else{o=o||document.createElement("div"),o.innerHTML=""+t+"";for(var n=o.firstChild.childNodes,r=0;r]/;e.exports=o},function(e,t,n){(function(t){"use strict";function o(e){return e.substring(1,e.indexOf(" "))}var r=n(7),i=n(80),a=n(48),u=n(87),s=n(12),c=n(89),l=n(8),p=/^(<[^ \/>]+)/,d="data-danger-index",f={dangerouslyRenderMarkup:function(e){a.canUseDOM?void 0:"production"!==t.env.NODE_ENV?l(!1,"dangerouslyRenderMarkup(...): 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."):r("51");for(var n,i={},f=0;f 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()."):r("58"):void 0,"string"==typeof n){var o=u(n,s)[0];e.parentNode.replaceChild(o,e)}else i.replaceChildWithTree(e,n)}};e.exports=f}).call(t,n(3))},function(e,t,n){(function(t){"use strict";function o(e){var t=e.match(l);return t&&t[1].toLowerCase()}function r(e,n){var r=c;c?void 0:"production"!==t.env.NODE_ENV?s(!1,"createNodesFromMarkup dummy not initialized"):s(!1);var i=o(e),l=i&&u(i);if(l){r.innerHTML=l[1]+e+l[2];for(var p=l[0];p--;)r=r.lastChild}else r.innerHTML=e;var d=r.getElementsByTagName("script");d.length&&(n?void 0:"production"!==t.env.NODE_ENV?s(!1,"createNodesFromMarkup(...): Unexpected