├── .gitignore ├── LICENSE ├── README.md ├── dist ├── react-chartjs.js └── react-chartjs.min.js ├── index.js ├── lib ├── bar.js ├── core.js ├── doughnut.js ├── line.js ├── pie.js ├── polar-area.js └── radar.js ├── package-lock.json ├── package.json ├── release-notes.md └── webpack.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | 5 | # Runtime data 6 | pids 7 | *.pid 8 | *.seed 9 | 10 | # Directory for instrumented libs generated by jscoverage/JSCover 11 | lib-cov 12 | 13 | # Coverage directory used by tools like istanbul 14 | coverage 15 | 16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 17 | .grunt 18 | 19 | # Compiled binary addons (http://nodejs.org/api/addons.html) 20 | build/Release 21 | 22 | # Dependency directory 23 | # Commenting this out is preferred by some people, see 24 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git- 25 | node_modules 26 | 27 | # Users Environment Variables 28 | .lock-wscript 29 | 30 | .DS_Store 31 | showcase 32 | .generator-release 33 | 34 | .idea/* -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Joe Hudson 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-chartjs 2 | ============ 3 | 4 | rich interactive react charting components using [chart.js](http://www.chartjs.org/) including 5 | 6 | * Line chart 7 | * Bar chart 8 | * Radar chart 9 | * Polar area chart 10 | * Pie chart 11 | * Doughnut chart 12 | 13 | [view chart examples](http://reactjs.github.io/react-chartjs/index.html) 14 | 15 | Installation 16 | ------------ 17 | This is a CommonJS component only (to be used with something like Webpack or Browserify) 18 | ``` 19 | npm install --save react-chartjs 20 | ``` 21 | You must also include [chart.js](https://www.npmjs.com/package/chart.js) and [React](https://www.npmjs.com/package/react) as dependencies. 22 | ``` 23 | npm install --save chart.js@^1.1.1 react react-dom 24 | ``` 25 | 26 | Example Usage 27 | ------------- 28 | ```javascript 29 | var LineChart = require("react-chartjs").Line; 30 | 31 | var MyComponent = React.createClass({ 32 | render: function() { 33 | return 34 | } 35 | }); 36 | ``` 37 | 38 | * ```data``` represents the chart data (see [chart.js](https://github.com/chartjs/Chart.js/tree/v1.1.1/docs) for details) 39 | * ```options``` represents the chart options (see [chart.js](https://github.com/chartjs/Chart.js/tree/v1.1.1/docs) for details) 40 | * all other parameters will be passed through to the ```canvas``` element 41 | * if data passed into the component changes, points will animate between values using chart.js' ```.update()```. If you want the chart destroyed and redrawn on every change, pass in ```redraw``` as a prop. For example `````` 42 | 43 | Chart References 44 | ---------------- 45 | The ```canvas``` element can be retrieved using ```getCanvas``` and the ```chartjs object``` can be retrieved using ```getChart```. 46 | -------------------------------------------------------------------------------- /dist/react-chartjs.js: -------------------------------------------------------------------------------- 1 | (function webpackUniversalModuleDefinition(root, factory) { 2 | if(typeof exports === 'object' && typeof module === 'object') 3 | module.exports = factory(require("react"), require("react-dom"), require("Chartjs")); 4 | else if(typeof define === 'function' && define.amd) 5 | define(["react", "react-dom", "Chartjs"], factory); 6 | else if(typeof exports === 'object') 7 | exports["react-chartjs"] = factory(require("react"), require("react-dom"), require("Chartjs")); 8 | else 9 | root["react-chartjs"] = factory(root["React"], root["ReactDOM"], root["Chart"]); 10 | })(this, function(__WEBPACK_EXTERNAL_MODULE_3__, __WEBPACK_EXTERNAL_MODULE_12__, __WEBPACK_EXTERNAL_MODULE_13__) { 11 | return /******/ (function(modules) { // webpackBootstrap 12 | /******/ // The module cache 13 | /******/ var installedModules = {}; 14 | 15 | /******/ // The require function 16 | /******/ function __webpack_require__(moduleId) { 17 | 18 | /******/ // Check if module is in cache 19 | /******/ if(installedModules[moduleId]) 20 | /******/ return installedModules[moduleId].exports; 21 | 22 | /******/ // Create a new module (and put it into the cache) 23 | /******/ var module = installedModules[moduleId] = { 24 | /******/ exports: {}, 25 | /******/ id: moduleId, 26 | /******/ loaded: false 27 | /******/ }; 28 | 29 | /******/ // Execute the module function 30 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 31 | 32 | /******/ // Flag the module as loaded 33 | /******/ module.loaded = true; 34 | 35 | /******/ // Return the exports of the module 36 | /******/ return module.exports; 37 | /******/ } 38 | 39 | 40 | /******/ // expose the modules object (__webpack_modules__) 41 | /******/ __webpack_require__.m = modules; 42 | 43 | /******/ // expose the module cache 44 | /******/ __webpack_require__.c = installedModules; 45 | 46 | /******/ // __webpack_public_path__ 47 | /******/ __webpack_require__.p = ""; 48 | 49 | /******/ // Load entry module and return exports 50 | /******/ return __webpack_require__(0); 51 | /******/ }) 52 | /************************************************************************/ 53 | /******/ ([ 54 | /* 0 */ 55 | /***/ (function(module, exports, __webpack_require__) { 56 | 57 | module.exports = { 58 | Bar: __webpack_require__(1), 59 | Doughnut: __webpack_require__(14), 60 | Line: __webpack_require__(15), 61 | Pie: __webpack_require__(16), 62 | PolarArea: __webpack_require__(17), 63 | Radar: __webpack_require__(18), 64 | createClass: __webpack_require__(2).createClass 65 | }; 66 | 67 | 68 | /***/ }), 69 | /* 1 */ 70 | /***/ (function(module, exports, __webpack_require__) { 71 | 72 | var vars = __webpack_require__(2); 73 | 74 | module.exports = vars.createClass('Bar', ['getBarsAtEvent']); 75 | 76 | 77 | /***/ }), 78 | /* 2 */ 79 | /***/ (function(module, exports, __webpack_require__) { 80 | 81 | var React = __webpack_require__(3); 82 | var createReactClass = __webpack_require__(4); 83 | var ReactDOM = __webpack_require__(12); 84 | 85 | module.exports = { 86 | createClass: function(chartType, methodNames, dataKey) { 87 | var excludedProps = ['data', 'options', 'redraw']; 88 | var classData = { 89 | displayName: chartType + 'Chart', 90 | getInitialState: function() { return {}; }, 91 | render: function() { 92 | var _props = { 93 | ref: 'canvass' 94 | }; 95 | for (var name in this.props) { 96 | if (this.props.hasOwnProperty(name)) { 97 | if (excludedProps.indexOf(name) === -1) { 98 | _props[name] = this.props[name]; 99 | } 100 | } 101 | } 102 | return React.createElement('canvas', _props); 103 | } 104 | }; 105 | 106 | var extras = ['clear', 'stop', 'resize', 'toBase64Image', 'generateLegend', 'update', 'addData', 'removeData']; 107 | function extra(type) { 108 | classData[type] = function() { 109 | return this.state.chart[type].apply(this.state.chart, arguments); 110 | }; 111 | } 112 | 113 | classData.componentDidMount = function() { 114 | this.initializeChart(this.props); 115 | }; 116 | 117 | classData.componentWillUnmount = function() { 118 | var chart = this.state.chart; 119 | chart.destroy(); 120 | }; 121 | 122 | classData.componentWillReceiveProps = function(nextProps) { 123 | var chart = this.state.chart; 124 | if (nextProps.redraw) { 125 | chart.destroy(); 126 | this.initializeChart(nextProps); 127 | } else { 128 | dataKey = dataKey || dataKeys[chart.name]; 129 | updatePoints(nextProps, chart, dataKey); 130 | if (chart.scale) { 131 | chart.scale.xLabels = nextProps.data.labels; 132 | 133 | if (chart.scale.calculateXLabelRotation){ 134 | chart.scale.calculateXLabelRotation(); 135 | } 136 | } 137 | chart.update(); 138 | } 139 | }; 140 | 141 | classData.initializeChart = function(nextProps) { 142 | var Chart = __webpack_require__(13); 143 | var el = ReactDOM.findDOMNode(this); 144 | var ctx = el.getContext("2d"); 145 | var chart = new Chart(ctx)[chartType](nextProps.data, nextProps.options || {}); 146 | this.state.chart = chart; 147 | }; 148 | 149 | // return the chartjs instance 150 | classData.getChart = function() { 151 | return this.state.chart; 152 | }; 153 | 154 | // return the canvass element that contains the chart 155 | classData.getCanvass = function() { 156 | return this.refs.canvass; 157 | }; 158 | 159 | classData.getCanvas = classData.getCanvass; 160 | 161 | var i; 162 | for (i=0; i nextProps.data.labels.length) { 209 | chart.removeData(); 210 | } 211 | nextProps.data.datasets.forEach(function(set, setIndex) { 212 | set.data.forEach(function(val, pointIndex) { 213 | if (typeof(chart.datasets[setIndex][dataKey][pointIndex]) == "undefined") { 214 | addData(nextProps, chart, setIndex, pointIndex); 215 | } else { 216 | chart.datasets[setIndex][dataKey][pointIndex].value = val; 217 | } 218 | }); 219 | }); 220 | } 221 | }; 222 | 223 | var addData = function(nextProps, chart, setIndex, pointIndex) { 224 | var values = []; 225 | nextProps.data.datasets.forEach(function(set) { 226 | values.push(set.data[pointIndex]); 227 | }); 228 | chart.addData(values, nextProps.data.labels[setIndex]); 229 | }; 230 | 231 | 232 | /***/ }), 233 | /* 3 */ 234 | /***/ (function(module, exports) { 235 | 236 | module.exports = __WEBPACK_EXTERNAL_MODULE_3__; 237 | 238 | /***/ }), 239 | /* 4 */ 240 | /***/ (function(module, exports, __webpack_require__) { 241 | 242 | /** 243 | * Copyright (c) 2013-present, Facebook, Inc. 244 | * 245 | * This source code is licensed under the MIT license found in the 246 | * LICENSE file in the root directory of this source tree. 247 | * 248 | */ 249 | 250 | 'use strict'; 251 | 252 | var React = __webpack_require__(3); 253 | var factory = __webpack_require__(5); 254 | 255 | if (typeof React === 'undefined') { 256 | throw Error( 257 | 'create-react-class could not find the React object. If you are using script tags, ' + 258 | 'make sure that React is being loaded before create-react-class.' 259 | ); 260 | } 261 | 262 | // Hack to grab NoopUpdateQueue from isomorphic React 263 | var ReactNoopUpdateQueue = new React.Component().updater; 264 | 265 | module.exports = factory( 266 | React.Component, 267 | React.isValidElement, 268 | ReactNoopUpdateQueue 269 | ); 270 | 271 | 272 | /***/ }), 273 | /* 5 */ 274 | /***/ (function(module, exports, __webpack_require__) { 275 | 276 | /* WEBPACK VAR INJECTION */(function(process) {/** 277 | * Copyright (c) 2013-present, Facebook, Inc. 278 | * 279 | * This source code is licensed under the MIT license found in the 280 | * LICENSE file in the root directory of this source tree. 281 | * 282 | */ 283 | 284 | 'use strict'; 285 | 286 | var _assign = __webpack_require__(7); 287 | 288 | var emptyObject = __webpack_require__(8); 289 | var _invariant = __webpack_require__(9); 290 | 291 | if (process.env.NODE_ENV !== 'production') { 292 | var warning = __webpack_require__(10); 293 | } 294 | 295 | var MIXINS_KEY = 'mixins'; 296 | 297 | // Helper function to allow the creation of anonymous functions which do not 298 | // have .name set to the name of the variable being assigned to. 299 | function identity(fn) { 300 | return fn; 301 | } 302 | 303 | var ReactPropTypeLocationNames; 304 | if (process.env.NODE_ENV !== 'production') { 305 | ReactPropTypeLocationNames = { 306 | prop: 'prop', 307 | context: 'context', 308 | childContext: 'child context' 309 | }; 310 | } else { 311 | ReactPropTypeLocationNames = {}; 312 | } 313 | 314 | function factory(ReactComponent, isValidElement, ReactNoopUpdateQueue) { 315 | /** 316 | * Policies that describe methods in `ReactClassInterface`. 317 | */ 318 | 319 | var injectedMixins = []; 320 | 321 | /** 322 | * Composite components are higher-level components that compose other composite 323 | * or host components. 324 | * 325 | * To create a new type of `ReactClass`, pass a specification of 326 | * your new class to `React.createClass`. The only requirement of your class 327 | * specification is that you implement a `render` method. 328 | * 329 | * var MyComponent = React.createClass({ 330 | * render: function() { 331 | * return
Hello World
; 332 | * } 333 | * }); 334 | * 335 | * The class specification supports a specific protocol of methods that have 336 | * special meaning (e.g. `render`). See `ReactClassInterface` for 337 | * more the comprehensive protocol. Any other properties and methods in the 338 | * class specification will be available on the prototype. 339 | * 340 | * @interface ReactClassInterface 341 | * @internal 342 | */ 343 | var ReactClassInterface = { 344 | /** 345 | * An array of Mixin objects to include when defining your component. 346 | * 347 | * @type {array} 348 | * @optional 349 | */ 350 | mixins: 'DEFINE_MANY', 351 | 352 | /** 353 | * An object containing properties and methods that should be defined on 354 | * the component's constructor instead of its prototype (static methods). 355 | * 356 | * @type {object} 357 | * @optional 358 | */ 359 | statics: 'DEFINE_MANY', 360 | 361 | /** 362 | * Definition of prop types for this component. 363 | * 364 | * @type {object} 365 | * @optional 366 | */ 367 | propTypes: 'DEFINE_MANY', 368 | 369 | /** 370 | * Definition of context types for this component. 371 | * 372 | * @type {object} 373 | * @optional 374 | */ 375 | contextTypes: 'DEFINE_MANY', 376 | 377 | /** 378 | * Definition of context types this component sets for its children. 379 | * 380 | * @type {object} 381 | * @optional 382 | */ 383 | childContextTypes: 'DEFINE_MANY', 384 | 385 | // ==== Definition methods ==== 386 | 387 | /** 388 | * Invoked when the component is mounted. Values in the mapping will be set on 389 | * `this.props` if that prop is not specified (i.e. using an `in` check). 390 | * 391 | * This method is invoked before `getInitialState` and therefore cannot rely 392 | * on `this.state` or use `this.setState`. 393 | * 394 | * @return {object} 395 | * @optional 396 | */ 397 | getDefaultProps: 'DEFINE_MANY_MERGED', 398 | 399 | /** 400 | * Invoked once before the component is mounted. The return value will be used 401 | * as the initial value of `this.state`. 402 | * 403 | * getInitialState: function() { 404 | * return { 405 | * isOn: false, 406 | * fooBaz: new BazFoo() 407 | * } 408 | * } 409 | * 410 | * @return {object} 411 | * @optional 412 | */ 413 | getInitialState: 'DEFINE_MANY_MERGED', 414 | 415 | /** 416 | * @return {object} 417 | * @optional 418 | */ 419 | getChildContext: 'DEFINE_MANY_MERGED', 420 | 421 | /** 422 | * Uses props from `this.props` and state from `this.state` to render the 423 | * structure of the component. 424 | * 425 | * No guarantees are made about when or how often this method is invoked, so 426 | * it must not have side effects. 427 | * 428 | * render: function() { 429 | * var name = this.props.name; 430 | * return
Hello, {name}!
; 431 | * } 432 | * 433 | * @return {ReactComponent} 434 | * @required 435 | */ 436 | render: 'DEFINE_ONCE', 437 | 438 | // ==== Delegate methods ==== 439 | 440 | /** 441 | * Invoked when the component is initially created and about to be mounted. 442 | * This may have side effects, but any external subscriptions or data created 443 | * by this method must be cleaned up in `componentWillUnmount`. 444 | * 445 | * @optional 446 | */ 447 | componentWillMount: 'DEFINE_MANY', 448 | 449 | /** 450 | * Invoked when the component has been mounted and has a DOM representation. 451 | * However, there is no guarantee that the DOM node is in the document. 452 | * 453 | * Use this as an opportunity to operate on the DOM when the component has 454 | * been mounted (initialized and rendered) for the first time. 455 | * 456 | * @param {DOMElement} rootNode DOM element representing the component. 457 | * @optional 458 | */ 459 | componentDidMount: 'DEFINE_MANY', 460 | 461 | /** 462 | * Invoked before the component receives new props. 463 | * 464 | * Use this as an opportunity to react to a prop transition by updating the 465 | * state using `this.setState`. Current props are accessed via `this.props`. 466 | * 467 | * componentWillReceiveProps: function(nextProps, nextContext) { 468 | * this.setState({ 469 | * likesIncreasing: nextProps.likeCount > this.props.likeCount 470 | * }); 471 | * } 472 | * 473 | * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop 474 | * transition may cause a state change, but the opposite is not true. If you 475 | * need it, you are probably looking for `componentWillUpdate`. 476 | * 477 | * @param {object} nextProps 478 | * @optional 479 | */ 480 | componentWillReceiveProps: 'DEFINE_MANY', 481 | 482 | /** 483 | * Invoked while deciding if the component should be updated as a result of 484 | * receiving new props, state and/or context. 485 | * 486 | * Use this as an opportunity to `return false` when you're certain that the 487 | * transition to the new props/state/context will not require a component 488 | * update. 489 | * 490 | * shouldComponentUpdate: function(nextProps, nextState, nextContext) { 491 | * return !equal(nextProps, this.props) || 492 | * !equal(nextState, this.state) || 493 | * !equal(nextContext, this.context); 494 | * } 495 | * 496 | * @param {object} nextProps 497 | * @param {?object} nextState 498 | * @param {?object} nextContext 499 | * @return {boolean} True if the component should update. 500 | * @optional 501 | */ 502 | shouldComponentUpdate: 'DEFINE_ONCE', 503 | 504 | /** 505 | * Invoked when the component is about to update due to a transition from 506 | * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState` 507 | * and `nextContext`. 508 | * 509 | * Use this as an opportunity to perform preparation before an update occurs. 510 | * 511 | * NOTE: You **cannot** use `this.setState()` in this method. 512 | * 513 | * @param {object} nextProps 514 | * @param {?object} nextState 515 | * @param {?object} nextContext 516 | * @param {ReactReconcileTransaction} transaction 517 | * @optional 518 | */ 519 | componentWillUpdate: 'DEFINE_MANY', 520 | 521 | /** 522 | * Invoked when the component's DOM representation has been updated. 523 | * 524 | * Use this as an opportunity to operate on the DOM when the component has 525 | * been updated. 526 | * 527 | * @param {object} prevProps 528 | * @param {?object} prevState 529 | * @param {?object} prevContext 530 | * @param {DOMElement} rootNode DOM element representing the component. 531 | * @optional 532 | */ 533 | componentDidUpdate: 'DEFINE_MANY', 534 | 535 | /** 536 | * Invoked when the component is about to be removed from its parent and have 537 | * its DOM representation destroyed. 538 | * 539 | * Use this as an opportunity to deallocate any external resources. 540 | * 541 | * NOTE: There is no `componentDidUnmount` since your component will have been 542 | * destroyed by that point. 543 | * 544 | * @optional 545 | */ 546 | componentWillUnmount: 'DEFINE_MANY', 547 | 548 | // ==== Advanced methods ==== 549 | 550 | /** 551 | * Updates the component's currently mounted DOM representation. 552 | * 553 | * By default, this implements React's rendering and reconciliation algorithm. 554 | * Sophisticated clients may wish to override this. 555 | * 556 | * @param {ReactReconcileTransaction} transaction 557 | * @internal 558 | * @overridable 559 | */ 560 | updateComponent: 'OVERRIDE_BASE' 561 | }; 562 | 563 | /** 564 | * Mapping from class specification keys to special processing functions. 565 | * 566 | * Although these are declared like instance properties in the specification 567 | * when defining classes using `React.createClass`, they are actually static 568 | * and are accessible on the constructor instead of the prototype. Despite 569 | * being static, they must be defined outside of the "statics" key under 570 | * which all other static methods are defined. 571 | */ 572 | var RESERVED_SPEC_KEYS = { 573 | displayName: function(Constructor, displayName) { 574 | Constructor.displayName = displayName; 575 | }, 576 | mixins: function(Constructor, mixins) { 577 | if (mixins) { 578 | for (var i = 0; i < mixins.length; i++) { 579 | mixSpecIntoComponent(Constructor, mixins[i]); 580 | } 581 | } 582 | }, 583 | childContextTypes: function(Constructor, childContextTypes) { 584 | if (process.env.NODE_ENV !== 'production') { 585 | validateTypeDef(Constructor, childContextTypes, 'childContext'); 586 | } 587 | Constructor.childContextTypes = _assign( 588 | {}, 589 | Constructor.childContextTypes, 590 | childContextTypes 591 | ); 592 | }, 593 | contextTypes: function(Constructor, contextTypes) { 594 | if (process.env.NODE_ENV !== 'production') { 595 | validateTypeDef(Constructor, contextTypes, 'context'); 596 | } 597 | Constructor.contextTypes = _assign( 598 | {}, 599 | Constructor.contextTypes, 600 | contextTypes 601 | ); 602 | }, 603 | /** 604 | * Special case getDefaultProps which should move into statics but requires 605 | * automatic merging. 606 | */ 607 | getDefaultProps: function(Constructor, getDefaultProps) { 608 | if (Constructor.getDefaultProps) { 609 | Constructor.getDefaultProps = createMergedResultFunction( 610 | Constructor.getDefaultProps, 611 | getDefaultProps 612 | ); 613 | } else { 614 | Constructor.getDefaultProps = getDefaultProps; 615 | } 616 | }, 617 | propTypes: function(Constructor, propTypes) { 618 | if (process.env.NODE_ENV !== 'production') { 619 | validateTypeDef(Constructor, propTypes, 'prop'); 620 | } 621 | Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes); 622 | }, 623 | statics: function(Constructor, statics) { 624 | mixStaticSpecIntoComponent(Constructor, statics); 625 | }, 626 | autobind: function() {} 627 | }; 628 | 629 | function validateTypeDef(Constructor, typeDef, location) { 630 | for (var propName in typeDef) { 631 | if (typeDef.hasOwnProperty(propName)) { 632 | // use a warning instead of an _invariant so components 633 | // don't show up in prod but only in __DEV__ 634 | if (process.env.NODE_ENV !== 'production') { 635 | warning( 636 | typeof typeDef[propName] === 'function', 637 | '%s: %s type `%s` is invalid; it must be a function, usually from ' + 638 | 'React.PropTypes.', 639 | Constructor.displayName || 'ReactClass', 640 | ReactPropTypeLocationNames[location], 641 | propName 642 | ); 643 | } 644 | } 645 | } 646 | } 647 | 648 | function validateMethodOverride(isAlreadyDefined, name) { 649 | var specPolicy = ReactClassInterface.hasOwnProperty(name) 650 | ? ReactClassInterface[name] 651 | : null; 652 | 653 | // Disallow overriding of base class methods unless explicitly allowed. 654 | if (ReactClassMixin.hasOwnProperty(name)) { 655 | _invariant( 656 | specPolicy === 'OVERRIDE_BASE', 657 | 'ReactClassInterface: You are attempting to override ' + 658 | '`%s` from your class specification. Ensure that your method names ' + 659 | 'do not overlap with React methods.', 660 | name 661 | ); 662 | } 663 | 664 | // Disallow defining methods more than once unless explicitly allowed. 665 | if (isAlreadyDefined) { 666 | _invariant( 667 | specPolicy === 'DEFINE_MANY' || specPolicy === 'DEFINE_MANY_MERGED', 668 | 'ReactClassInterface: You are attempting to define ' + 669 | '`%s` on your component more than once. This conflict may be due ' + 670 | 'to a mixin.', 671 | name 672 | ); 673 | } 674 | } 675 | 676 | /** 677 | * Mixin helper which handles policy validation and reserved 678 | * specification keys when building React classes. 679 | */ 680 | function mixSpecIntoComponent(Constructor, spec) { 681 | if (!spec) { 682 | if (process.env.NODE_ENV !== 'production') { 683 | var typeofSpec = typeof spec; 684 | var isMixinValid = typeofSpec === 'object' && spec !== null; 685 | 686 | if (process.env.NODE_ENV !== 'production') { 687 | warning( 688 | isMixinValid, 689 | "%s: You're attempting to include a mixin that is either null " + 690 | 'or not an object. Check the mixins included by the component, ' + 691 | 'as well as any mixins they include themselves. ' + 692 | 'Expected object but got %s.', 693 | Constructor.displayName || 'ReactClass', 694 | spec === null ? null : typeofSpec 695 | ); 696 | } 697 | } 698 | 699 | return; 700 | } 701 | 702 | _invariant( 703 | typeof spec !== 'function', 704 | "ReactClass: You're attempting to " + 705 | 'use a component class or function as a mixin. Instead, just use a ' + 706 | 'regular object.' 707 | ); 708 | _invariant( 709 | !isValidElement(spec), 710 | "ReactClass: You're attempting to " + 711 | 'use a component as a mixin. Instead, just use a regular object.' 712 | ); 713 | 714 | var proto = Constructor.prototype; 715 | var autoBindPairs = proto.__reactAutoBindPairs; 716 | 717 | // By handling mixins before any other properties, we ensure the same 718 | // chaining order is applied to methods with DEFINE_MANY policy, whether 719 | // mixins are listed before or after these methods in the spec. 720 | if (spec.hasOwnProperty(MIXINS_KEY)) { 721 | RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins); 722 | } 723 | 724 | for (var name in spec) { 725 | if (!spec.hasOwnProperty(name)) { 726 | continue; 727 | } 728 | 729 | if (name === MIXINS_KEY) { 730 | // We have already handled mixins in a special case above. 731 | continue; 732 | } 733 | 734 | var property = spec[name]; 735 | var isAlreadyDefined = proto.hasOwnProperty(name); 736 | validateMethodOverride(isAlreadyDefined, name); 737 | 738 | if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) { 739 | RESERVED_SPEC_KEYS[name](Constructor, property); 740 | } else { 741 | // Setup methods on prototype: 742 | // The following member methods should not be automatically bound: 743 | // 1. Expected ReactClass methods (in the "interface"). 744 | // 2. Overridden methods (that were mixed in). 745 | var isReactClassMethod = ReactClassInterface.hasOwnProperty(name); 746 | var isFunction = typeof property === 'function'; 747 | var shouldAutoBind = 748 | isFunction && 749 | !isReactClassMethod && 750 | !isAlreadyDefined && 751 | spec.autobind !== false; 752 | 753 | if (shouldAutoBind) { 754 | autoBindPairs.push(name, property); 755 | proto[name] = property; 756 | } else { 757 | if (isAlreadyDefined) { 758 | var specPolicy = ReactClassInterface[name]; 759 | 760 | // These cases should already be caught by validateMethodOverride. 761 | _invariant( 762 | isReactClassMethod && 763 | (specPolicy === 'DEFINE_MANY_MERGED' || 764 | specPolicy === 'DEFINE_MANY'), 765 | 'ReactClass: Unexpected spec policy %s for key %s ' + 766 | 'when mixing in component specs.', 767 | specPolicy, 768 | name 769 | ); 770 | 771 | // For methods which are defined more than once, call the existing 772 | // methods before calling the new property, merging if appropriate. 773 | if (specPolicy === 'DEFINE_MANY_MERGED') { 774 | proto[name] = createMergedResultFunction(proto[name], property); 775 | } else if (specPolicy === 'DEFINE_MANY') { 776 | proto[name] = createChainedFunction(proto[name], property); 777 | } 778 | } else { 779 | proto[name] = property; 780 | if (process.env.NODE_ENV !== 'production') { 781 | // Add verbose displayName to the function, which helps when looking 782 | // at profiling tools. 783 | if (typeof property === 'function' && spec.displayName) { 784 | proto[name].displayName = spec.displayName + '_' + name; 785 | } 786 | } 787 | } 788 | } 789 | } 790 | } 791 | } 792 | 793 | function mixStaticSpecIntoComponent(Constructor, statics) { 794 | if (!statics) { 795 | return; 796 | } 797 | for (var name in statics) { 798 | var property = statics[name]; 799 | if (!statics.hasOwnProperty(name)) { 800 | continue; 801 | } 802 | 803 | var isReserved = name in RESERVED_SPEC_KEYS; 804 | _invariant( 805 | !isReserved, 806 | 'ReactClass: You are attempting to define a reserved ' + 807 | 'property, `%s`, that shouldn\'t be on the "statics" key. Define it ' + 808 | 'as an instance property instead; it will still be accessible on the ' + 809 | 'constructor.', 810 | name 811 | ); 812 | 813 | var isInherited = name in Constructor; 814 | _invariant( 815 | !isInherited, 816 | 'ReactClass: You are attempting to define ' + 817 | '`%s` on your component more than once. This conflict may be ' + 818 | 'due to a mixin.', 819 | name 820 | ); 821 | Constructor[name] = property; 822 | } 823 | } 824 | 825 | /** 826 | * Merge two objects, but throw if both contain the same key. 827 | * 828 | * @param {object} one The first object, which is mutated. 829 | * @param {object} two The second object 830 | * @return {object} one after it has been mutated to contain everything in two. 831 | */ 832 | function mergeIntoWithNoDuplicateKeys(one, two) { 833 | _invariant( 834 | one && two && typeof one === 'object' && typeof two === 'object', 835 | 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.' 836 | ); 837 | 838 | for (var key in two) { 839 | if (two.hasOwnProperty(key)) { 840 | _invariant( 841 | one[key] === undefined, 842 | 'mergeIntoWithNoDuplicateKeys(): ' + 843 | 'Tried to merge two objects with the same key: `%s`. This conflict ' + 844 | 'may be due to a mixin; in particular, this may be caused by two ' + 845 | 'getInitialState() or getDefaultProps() methods returning objects ' + 846 | 'with clashing keys.', 847 | key 848 | ); 849 | one[key] = two[key]; 850 | } 851 | } 852 | return one; 853 | } 854 | 855 | /** 856 | * Creates a function that invokes two functions and merges their return values. 857 | * 858 | * @param {function} one Function to invoke first. 859 | * @param {function} two Function to invoke second. 860 | * @return {function} Function that invokes the two argument functions. 861 | * @private 862 | */ 863 | function createMergedResultFunction(one, two) { 864 | return function mergedResult() { 865 | var a = one.apply(this, arguments); 866 | var b = two.apply(this, arguments); 867 | if (a == null) { 868 | return b; 869 | } else if (b == null) { 870 | return a; 871 | } 872 | var c = {}; 873 | mergeIntoWithNoDuplicateKeys(c, a); 874 | mergeIntoWithNoDuplicateKeys(c, b); 875 | return c; 876 | }; 877 | } 878 | 879 | /** 880 | * Creates a function that invokes two functions and ignores their return vales. 881 | * 882 | * @param {function} one Function to invoke first. 883 | * @param {function} two Function to invoke second. 884 | * @return {function} Function that invokes the two argument functions. 885 | * @private 886 | */ 887 | function createChainedFunction(one, two) { 888 | return function chainedFunction() { 889 | one.apply(this, arguments); 890 | two.apply(this, arguments); 891 | }; 892 | } 893 | 894 | /** 895 | * Binds a method to the component. 896 | * 897 | * @param {object} component Component whose method is going to be bound. 898 | * @param {function} method Method to be bound. 899 | * @return {function} The bound method. 900 | */ 901 | function bindAutoBindMethod(component, method) { 902 | var boundMethod = method.bind(component); 903 | if (process.env.NODE_ENV !== 'production') { 904 | boundMethod.__reactBoundContext = component; 905 | boundMethod.__reactBoundMethod = method; 906 | boundMethod.__reactBoundArguments = null; 907 | var componentName = component.constructor.displayName; 908 | var _bind = boundMethod.bind; 909 | boundMethod.bind = function(newThis) { 910 | for ( 911 | var _len = arguments.length, 912 | args = Array(_len > 1 ? _len - 1 : 0), 913 | _key = 1; 914 | _key < _len; 915 | _key++ 916 | ) { 917 | args[_key - 1] = arguments[_key]; 918 | } 919 | 920 | // User is trying to bind() an autobound method; we effectively will 921 | // ignore the value of "this" that the user is trying to use, so 922 | // let's warn. 923 | if (newThis !== component && newThis !== null) { 924 | if (process.env.NODE_ENV !== 'production') { 925 | warning( 926 | false, 927 | 'bind(): React component methods may only be bound to the ' + 928 | 'component instance. See %s', 929 | componentName 930 | ); 931 | } 932 | } else if (!args.length) { 933 | if (process.env.NODE_ENV !== 'production') { 934 | warning( 935 | false, 936 | 'bind(): You are binding a component method to the component. ' + 937 | 'React does this for you automatically in a high-performance ' + 938 | 'way, so you can safely remove this call. See %s', 939 | componentName 940 | ); 941 | } 942 | return boundMethod; 943 | } 944 | var reboundMethod = _bind.apply(boundMethod, arguments); 945 | reboundMethod.__reactBoundContext = component; 946 | reboundMethod.__reactBoundMethod = method; 947 | reboundMethod.__reactBoundArguments = args; 948 | return reboundMethod; 949 | }; 950 | } 951 | return boundMethod; 952 | } 953 | 954 | /** 955 | * Binds all auto-bound methods in a component. 956 | * 957 | * @param {object} component Component whose method is going to be bound. 958 | */ 959 | function bindAutoBindMethods(component) { 960 | var pairs = component.__reactAutoBindPairs; 961 | for (var i = 0; i < pairs.length; i += 2) { 962 | var autoBindKey = pairs[i]; 963 | var method = pairs[i + 1]; 964 | component[autoBindKey] = bindAutoBindMethod(component, method); 965 | } 966 | } 967 | 968 | var IsMountedPreMixin = { 969 | componentDidMount: function() { 970 | this.__isMounted = true; 971 | } 972 | }; 973 | 974 | var IsMountedPostMixin = { 975 | componentWillUnmount: function() { 976 | this.__isMounted = false; 977 | } 978 | }; 979 | 980 | /** 981 | * Add more to the ReactClass base class. These are all legacy features and 982 | * therefore not already part of the modern ReactComponent. 983 | */ 984 | var ReactClassMixin = { 985 | /** 986 | * TODO: This will be deprecated because state should always keep a consistent 987 | * type signature and the only use case for this, is to avoid that. 988 | */ 989 | replaceState: function(newState, callback) { 990 | this.updater.enqueueReplaceState(this, newState, callback); 991 | }, 992 | 993 | /** 994 | * Checks whether or not this composite component is mounted. 995 | * @return {boolean} True if mounted, false otherwise. 996 | * @protected 997 | * @final 998 | */ 999 | isMounted: function() { 1000 | if (process.env.NODE_ENV !== 'production') { 1001 | warning( 1002 | this.__didWarnIsMounted, 1003 | '%s: isMounted is deprecated. Instead, make sure to clean up ' + 1004 | 'subscriptions and pending requests in componentWillUnmount to ' + 1005 | 'prevent memory leaks.', 1006 | (this.constructor && this.constructor.displayName) || 1007 | this.name || 1008 | 'Component' 1009 | ); 1010 | this.__didWarnIsMounted = true; 1011 | } 1012 | return !!this.__isMounted; 1013 | } 1014 | }; 1015 | 1016 | var ReactClassComponent = function() {}; 1017 | _assign( 1018 | ReactClassComponent.prototype, 1019 | ReactComponent.prototype, 1020 | ReactClassMixin 1021 | ); 1022 | 1023 | /** 1024 | * Creates a composite component class given a class specification. 1025 | * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass 1026 | * 1027 | * @param {object} spec Class specification (which must define `render`). 1028 | * @return {function} Component constructor function. 1029 | * @public 1030 | */ 1031 | function createClass(spec) { 1032 | // To keep our warnings more understandable, we'll use a little hack here to 1033 | // ensure that Constructor.name !== 'Constructor'. This makes sure we don't 1034 | // unnecessarily identify a class without displayName as 'Constructor'. 1035 | var Constructor = identity(function(props, context, updater) { 1036 | // This constructor gets overridden by mocks. The argument is used 1037 | // by mocks to assert on what gets mounted. 1038 | 1039 | if (process.env.NODE_ENV !== 'production') { 1040 | warning( 1041 | this instanceof Constructor, 1042 | 'Something is calling a React component directly. Use a factory or ' + 1043 | 'JSX instead. See: https://fb.me/react-legacyfactory' 1044 | ); 1045 | } 1046 | 1047 | // Wire up auto-binding 1048 | if (this.__reactAutoBindPairs.length) { 1049 | bindAutoBindMethods(this); 1050 | } 1051 | 1052 | this.props = props; 1053 | this.context = context; 1054 | this.refs = emptyObject; 1055 | this.updater = updater || ReactNoopUpdateQueue; 1056 | 1057 | this.state = null; 1058 | 1059 | // ReactClasses doesn't have constructors. Instead, they use the 1060 | // getInitialState and componentWillMount methods for initialization. 1061 | 1062 | var initialState = this.getInitialState ? this.getInitialState() : null; 1063 | if (process.env.NODE_ENV !== 'production') { 1064 | // We allow auto-mocks to proceed as if they're returning null. 1065 | if ( 1066 | initialState === undefined && 1067 | this.getInitialState._isMockFunction 1068 | ) { 1069 | // This is probably bad practice. Consider warning here and 1070 | // deprecating this convenience. 1071 | initialState = null; 1072 | } 1073 | } 1074 | _invariant( 1075 | typeof initialState === 'object' && !Array.isArray(initialState), 1076 | '%s.getInitialState(): must return an object or null', 1077 | Constructor.displayName || 'ReactCompositeComponent' 1078 | ); 1079 | 1080 | this.state = initialState; 1081 | }); 1082 | Constructor.prototype = new ReactClassComponent(); 1083 | Constructor.prototype.constructor = Constructor; 1084 | Constructor.prototype.__reactAutoBindPairs = []; 1085 | 1086 | injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor)); 1087 | 1088 | mixSpecIntoComponent(Constructor, IsMountedPreMixin); 1089 | mixSpecIntoComponent(Constructor, spec); 1090 | mixSpecIntoComponent(Constructor, IsMountedPostMixin); 1091 | 1092 | // Initialize the defaultProps property after all mixins have been merged. 1093 | if (Constructor.getDefaultProps) { 1094 | Constructor.defaultProps = Constructor.getDefaultProps(); 1095 | } 1096 | 1097 | if (process.env.NODE_ENV !== 'production') { 1098 | // This is a tag to indicate that the use of these method names is ok, 1099 | // since it's used with createClass. If it's not, then it's likely a 1100 | // mistake so we'll warn you to use the static property, property 1101 | // initializer or constructor respectively. 1102 | if (Constructor.getDefaultProps) { 1103 | Constructor.getDefaultProps.isReactClassApproved = {}; 1104 | } 1105 | if (Constructor.prototype.getInitialState) { 1106 | Constructor.prototype.getInitialState.isReactClassApproved = {}; 1107 | } 1108 | } 1109 | 1110 | _invariant( 1111 | Constructor.prototype.render, 1112 | 'createClass(...): Class specification must implement a `render` method.' 1113 | ); 1114 | 1115 | if (process.env.NODE_ENV !== 'production') { 1116 | warning( 1117 | !Constructor.prototype.componentShouldUpdate, 1118 | '%s has a method called ' + 1119 | 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 1120 | 'The name is phrased as a question because the function is ' + 1121 | 'expected to return a value.', 1122 | spec.displayName || 'A component' 1123 | ); 1124 | warning( 1125 | !Constructor.prototype.componentWillRecieveProps, 1126 | '%s has a method called ' + 1127 | 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', 1128 | spec.displayName || 'A component' 1129 | ); 1130 | } 1131 | 1132 | // Reduce time spent doing lookups by setting these on the prototype. 1133 | for (var methodName in ReactClassInterface) { 1134 | if (!Constructor.prototype[methodName]) { 1135 | Constructor.prototype[methodName] = null; 1136 | } 1137 | } 1138 | 1139 | return Constructor; 1140 | } 1141 | 1142 | return createClass; 1143 | } 1144 | 1145 | module.exports = factory; 1146 | 1147 | /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) 1148 | 1149 | /***/ }), 1150 | /* 6 */ 1151 | /***/ (function(module, exports) { 1152 | 1153 | // shim for using process in browser 1154 | var process = module.exports = {}; 1155 | 1156 | // cached from whatever global is present so that test runners that stub it 1157 | // don't break things. But we need to wrap it in a try catch in case it is 1158 | // wrapped in strict mode code which doesn't define any globals. It's inside a 1159 | // function because try/catches deoptimize in certain engines. 1160 | 1161 | var cachedSetTimeout; 1162 | var cachedClearTimeout; 1163 | 1164 | function defaultSetTimout() { 1165 | throw new Error('setTimeout has not been defined'); 1166 | } 1167 | function defaultClearTimeout () { 1168 | throw new Error('clearTimeout has not been defined'); 1169 | } 1170 | (function () { 1171 | try { 1172 | if (typeof setTimeout === 'function') { 1173 | cachedSetTimeout = setTimeout; 1174 | } else { 1175 | cachedSetTimeout = defaultSetTimout; 1176 | } 1177 | } catch (e) { 1178 | cachedSetTimeout = defaultSetTimout; 1179 | } 1180 | try { 1181 | if (typeof clearTimeout === 'function') { 1182 | cachedClearTimeout = clearTimeout; 1183 | } else { 1184 | cachedClearTimeout = defaultClearTimeout; 1185 | } 1186 | } catch (e) { 1187 | cachedClearTimeout = defaultClearTimeout; 1188 | } 1189 | } ()) 1190 | function runTimeout(fun) { 1191 | if (cachedSetTimeout === setTimeout) { 1192 | //normal enviroments in sane situations 1193 | return setTimeout(fun, 0); 1194 | } 1195 | // if setTimeout wasn't available but was latter defined 1196 | if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { 1197 | cachedSetTimeout = setTimeout; 1198 | return setTimeout(fun, 0); 1199 | } 1200 | try { 1201 | // when when somebody has screwed with setTimeout but no I.E. maddness 1202 | return cachedSetTimeout(fun, 0); 1203 | } catch(e){ 1204 | try { 1205 | // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally 1206 | return cachedSetTimeout.call(null, fun, 0); 1207 | } catch(e){ 1208 | // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error 1209 | return cachedSetTimeout.call(this, fun, 0); 1210 | } 1211 | } 1212 | 1213 | 1214 | } 1215 | function runClearTimeout(marker) { 1216 | if (cachedClearTimeout === clearTimeout) { 1217 | //normal enviroments in sane situations 1218 | return clearTimeout(marker); 1219 | } 1220 | // if clearTimeout wasn't available but was latter defined 1221 | if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { 1222 | cachedClearTimeout = clearTimeout; 1223 | return clearTimeout(marker); 1224 | } 1225 | try { 1226 | // when when somebody has screwed with setTimeout but no I.E. maddness 1227 | return cachedClearTimeout(marker); 1228 | } catch (e){ 1229 | try { 1230 | // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally 1231 | return cachedClearTimeout.call(null, marker); 1232 | } catch (e){ 1233 | // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. 1234 | // Some versions of I.E. have different rules for clearTimeout vs setTimeout 1235 | return cachedClearTimeout.call(this, marker); 1236 | } 1237 | } 1238 | 1239 | 1240 | 1241 | } 1242 | var queue = []; 1243 | var draining = false; 1244 | var currentQueue; 1245 | var queueIndex = -1; 1246 | 1247 | function cleanUpNextTick() { 1248 | if (!draining || !currentQueue) { 1249 | return; 1250 | } 1251 | draining = false; 1252 | if (currentQueue.length) { 1253 | queue = currentQueue.concat(queue); 1254 | } else { 1255 | queueIndex = -1; 1256 | } 1257 | if (queue.length) { 1258 | drainQueue(); 1259 | } 1260 | } 1261 | 1262 | function drainQueue() { 1263 | if (draining) { 1264 | return; 1265 | } 1266 | var timeout = runTimeout(cleanUpNextTick); 1267 | draining = true; 1268 | 1269 | var len = queue.length; 1270 | while(len) { 1271 | currentQueue = queue; 1272 | queue = []; 1273 | while (++queueIndex < len) { 1274 | if (currentQueue) { 1275 | currentQueue[queueIndex].run(); 1276 | } 1277 | } 1278 | queueIndex = -1; 1279 | len = queue.length; 1280 | } 1281 | currentQueue = null; 1282 | draining = false; 1283 | runClearTimeout(timeout); 1284 | } 1285 | 1286 | process.nextTick = function (fun) { 1287 | var args = new Array(arguments.length - 1); 1288 | if (arguments.length > 1) { 1289 | for (var i = 1; i < arguments.length; i++) { 1290 | args[i - 1] = arguments[i]; 1291 | } 1292 | } 1293 | queue.push(new Item(fun, args)); 1294 | if (queue.length === 1 && !draining) { 1295 | runTimeout(drainQueue); 1296 | } 1297 | }; 1298 | 1299 | // v8 likes predictible objects 1300 | function Item(fun, array) { 1301 | this.fun = fun; 1302 | this.array = array; 1303 | } 1304 | Item.prototype.run = function () { 1305 | this.fun.apply(null, this.array); 1306 | }; 1307 | process.title = 'browser'; 1308 | process.browser = true; 1309 | process.env = {}; 1310 | process.argv = []; 1311 | process.version = ''; // empty string to avoid regexp issues 1312 | process.versions = {}; 1313 | 1314 | function noop() {} 1315 | 1316 | process.on = noop; 1317 | process.addListener = noop; 1318 | process.once = noop; 1319 | process.off = noop; 1320 | process.removeListener = noop; 1321 | process.removeAllListeners = noop; 1322 | process.emit = noop; 1323 | process.prependListener = noop; 1324 | process.prependOnceListener = noop; 1325 | 1326 | process.listeners = function (name) { return [] } 1327 | 1328 | process.binding = function (name) { 1329 | throw new Error('process.binding is not supported'); 1330 | }; 1331 | 1332 | process.cwd = function () { return '/' }; 1333 | process.chdir = function (dir) { 1334 | throw new Error('process.chdir is not supported'); 1335 | }; 1336 | process.umask = function() { return 0; }; 1337 | 1338 | 1339 | /***/ }), 1340 | /* 7 */ 1341 | /***/ (function(module, exports) { 1342 | 1343 | /* 1344 | object-assign 1345 | (c) Sindre Sorhus 1346 | @license MIT 1347 | */ 1348 | 1349 | 'use strict'; 1350 | /* eslint-disable no-unused-vars */ 1351 | var getOwnPropertySymbols = Object.getOwnPropertySymbols; 1352 | var hasOwnProperty = Object.prototype.hasOwnProperty; 1353 | var propIsEnumerable = Object.prototype.propertyIsEnumerable; 1354 | 1355 | function toObject(val) { 1356 | if (val === null || val === undefined) { 1357 | throw new TypeError('Object.assign cannot be called with null or undefined'); 1358 | } 1359 | 1360 | return Object(val); 1361 | } 1362 | 1363 | function shouldUseNative() { 1364 | try { 1365 | if (!Object.assign) { 1366 | return false; 1367 | } 1368 | 1369 | // Detect buggy property enumeration order in older V8 versions. 1370 | 1371 | // https://bugs.chromium.org/p/v8/issues/detail?id=4118 1372 | var test1 = new String('abc'); // eslint-disable-line no-new-wrappers 1373 | test1[5] = 'de'; 1374 | if (Object.getOwnPropertyNames(test1)[0] === '5') { 1375 | return false; 1376 | } 1377 | 1378 | // https://bugs.chromium.org/p/v8/issues/detail?id=3056 1379 | var test2 = {}; 1380 | for (var i = 0; i < 10; i++) { 1381 | test2['_' + String.fromCharCode(i)] = i; 1382 | } 1383 | var order2 = Object.getOwnPropertyNames(test2).map(function (n) { 1384 | return test2[n]; 1385 | }); 1386 | if (order2.join('') !== '0123456789') { 1387 | return false; 1388 | } 1389 | 1390 | // https://bugs.chromium.org/p/v8/issues/detail?id=3056 1391 | var test3 = {}; 1392 | 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { 1393 | test3[letter] = letter; 1394 | }); 1395 | if (Object.keys(Object.assign({}, test3)).join('') !== 1396 | 'abcdefghijklmnopqrst') { 1397 | return false; 1398 | } 1399 | 1400 | return true; 1401 | } catch (err) { 1402 | // We don't expect any of the above to throw, but better to be safe. 1403 | return false; 1404 | } 1405 | } 1406 | 1407 | module.exports = shouldUseNative() ? Object.assign : function (target, source) { 1408 | var from; 1409 | var to = toObject(target); 1410 | var symbols; 1411 | 1412 | for (var s = 1; s < arguments.length; s++) { 1413 | from = Object(arguments[s]); 1414 | 1415 | for (var key in from) { 1416 | if (hasOwnProperty.call(from, key)) { 1417 | to[key] = from[key]; 1418 | } 1419 | } 1420 | 1421 | if (getOwnPropertySymbols) { 1422 | symbols = getOwnPropertySymbols(from); 1423 | for (var i = 0; i < symbols.length; i++) { 1424 | if (propIsEnumerable.call(from, symbols[i])) { 1425 | to[symbols[i]] = from[symbols[i]]; 1426 | } 1427 | } 1428 | } 1429 | } 1430 | 1431 | return to; 1432 | }; 1433 | 1434 | 1435 | /***/ }), 1436 | /* 8 */ 1437 | /***/ (function(module, exports, __webpack_require__) { 1438 | 1439 | /* WEBPACK VAR INJECTION */(function(process) {/** 1440 | * Copyright (c) 2013-present, Facebook, Inc. 1441 | * 1442 | * This source code is licensed under the MIT license found in the 1443 | * LICENSE file in the root directory of this source tree. 1444 | * 1445 | */ 1446 | 1447 | 'use strict'; 1448 | 1449 | var emptyObject = {}; 1450 | 1451 | if (process.env.NODE_ENV !== 'production') { 1452 | Object.freeze(emptyObject); 1453 | } 1454 | 1455 | module.exports = emptyObject; 1456 | /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) 1457 | 1458 | /***/ }), 1459 | /* 9 */ 1460 | /***/ (function(module, exports, __webpack_require__) { 1461 | 1462 | /* WEBPACK VAR INJECTION */(function(process) {/** 1463 | * Copyright (c) 2013-present, Facebook, Inc. 1464 | * 1465 | * This source code is licensed under the MIT license found in the 1466 | * LICENSE file in the root directory of this source tree. 1467 | * 1468 | */ 1469 | 1470 | 'use strict'; 1471 | 1472 | /** 1473 | * Use invariant() to assert state which your program assumes to be true. 1474 | * 1475 | * Provide sprintf-style format (only %s is supported) and arguments 1476 | * to provide information about what broke and what you were 1477 | * expecting. 1478 | * 1479 | * The invariant message will be stripped in production, but the invariant 1480 | * will remain to ensure logic does not differ in production. 1481 | */ 1482 | 1483 | var validateFormat = function validateFormat(format) {}; 1484 | 1485 | if (process.env.NODE_ENV !== 'production') { 1486 | validateFormat = function validateFormat(format) { 1487 | if (format === undefined) { 1488 | throw new Error('invariant requires an error message argument'); 1489 | } 1490 | }; 1491 | } 1492 | 1493 | function invariant(condition, format, a, b, c, d, e, f) { 1494 | validateFormat(format); 1495 | 1496 | if (!condition) { 1497 | var error; 1498 | if (format === undefined) { 1499 | error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.'); 1500 | } else { 1501 | var args = [a, b, c, d, e, f]; 1502 | var argIndex = 0; 1503 | error = new Error(format.replace(/%s/g, function () { 1504 | return args[argIndex++]; 1505 | })); 1506 | error.name = 'Invariant Violation'; 1507 | } 1508 | 1509 | error.framesToPop = 1; // we don't care about invariant's own frame 1510 | throw error; 1511 | } 1512 | } 1513 | 1514 | module.exports = invariant; 1515 | /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) 1516 | 1517 | /***/ }), 1518 | /* 10 */ 1519 | /***/ (function(module, exports, __webpack_require__) { 1520 | 1521 | /* WEBPACK VAR INJECTION */(function(process) {/** 1522 | * Copyright (c) 2014-present, Facebook, Inc. 1523 | * 1524 | * This source code is licensed under the MIT license found in the 1525 | * LICENSE file in the root directory of this source tree. 1526 | * 1527 | */ 1528 | 1529 | 'use strict'; 1530 | 1531 | var emptyFunction = __webpack_require__(11); 1532 | 1533 | /** 1534 | * Similar to invariant but only logs a warning if the condition is not met. 1535 | * This can be used to log issues in development environments in critical 1536 | * paths. Removing the logging code for production environments will keep the 1537 | * same logic and follow the same code paths. 1538 | */ 1539 | 1540 | var warning = emptyFunction; 1541 | 1542 | if (process.env.NODE_ENV !== 'production') { 1543 | var printWarning = function printWarning(format) { 1544 | for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { 1545 | args[_key - 1] = arguments[_key]; 1546 | } 1547 | 1548 | var argIndex = 0; 1549 | var message = 'Warning: ' + format.replace(/%s/g, function () { 1550 | return args[argIndex++]; 1551 | }); 1552 | if (typeof console !== 'undefined') { 1553 | console.error(message); 1554 | } 1555 | try { 1556 | // --- Welcome to debugging React --- 1557 | // This error was thrown as a convenience so that you can use this stack 1558 | // to find the callsite that caused this warning to fire. 1559 | throw new Error(message); 1560 | } catch (x) {} 1561 | }; 1562 | 1563 | warning = function warning(condition, format) { 1564 | if (format === undefined) { 1565 | throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); 1566 | } 1567 | 1568 | if (format.indexOf('Failed Composite propType: ') === 0) { 1569 | return; // Ignore CompositeComponent proptype check. 1570 | } 1571 | 1572 | if (!condition) { 1573 | for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { 1574 | args[_key2 - 2] = arguments[_key2]; 1575 | } 1576 | 1577 | printWarning.apply(undefined, [format].concat(args)); 1578 | } 1579 | }; 1580 | } 1581 | 1582 | module.exports = warning; 1583 | /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) 1584 | 1585 | /***/ }), 1586 | /* 11 */ 1587 | /***/ (function(module, exports) { 1588 | 1589 | "use strict"; 1590 | 1591 | /** 1592 | * Copyright (c) 2013-present, Facebook, Inc. 1593 | * 1594 | * This source code is licensed under the MIT license found in the 1595 | * LICENSE file in the root directory of this source tree. 1596 | * 1597 | * 1598 | */ 1599 | 1600 | function makeEmptyFunction(arg) { 1601 | return function () { 1602 | return arg; 1603 | }; 1604 | } 1605 | 1606 | /** 1607 | * This function accepts and discards inputs; it has no side effects. This is 1608 | * primarily useful idiomatically for overridable function endpoints which 1609 | * always need to be callable, since JS lacks a null-call idiom ala Cocoa. 1610 | */ 1611 | var emptyFunction = function emptyFunction() {}; 1612 | 1613 | emptyFunction.thatReturns = makeEmptyFunction; 1614 | emptyFunction.thatReturnsFalse = makeEmptyFunction(false); 1615 | emptyFunction.thatReturnsTrue = makeEmptyFunction(true); 1616 | emptyFunction.thatReturnsNull = makeEmptyFunction(null); 1617 | emptyFunction.thatReturnsThis = function () { 1618 | return this; 1619 | }; 1620 | emptyFunction.thatReturnsArgument = function (arg) { 1621 | return arg; 1622 | }; 1623 | 1624 | module.exports = emptyFunction; 1625 | 1626 | /***/ }), 1627 | /* 12 */ 1628 | /***/ (function(module, exports) { 1629 | 1630 | module.exports = __WEBPACK_EXTERNAL_MODULE_12__; 1631 | 1632 | /***/ }), 1633 | /* 13 */ 1634 | /***/ (function(module, exports) { 1635 | 1636 | module.exports = __WEBPACK_EXTERNAL_MODULE_13__; 1637 | 1638 | /***/ }), 1639 | /* 14 */ 1640 | /***/ (function(module, exports, __webpack_require__) { 1641 | 1642 | var vars = __webpack_require__(2); 1643 | 1644 | module.exports = vars.createClass('Doughnut', ['getSegmentsAtEvent']); 1645 | 1646 | 1647 | /***/ }), 1648 | /* 15 */ 1649 | /***/ (function(module, exports, __webpack_require__) { 1650 | 1651 | var vars = __webpack_require__(2); 1652 | 1653 | module.exports = vars.createClass('Line', ['getPointsAtEvent']); 1654 | 1655 | 1656 | /***/ }), 1657 | /* 16 */ 1658 | /***/ (function(module, exports, __webpack_require__) { 1659 | 1660 | var vars = __webpack_require__(2); 1661 | 1662 | module.exports = vars.createClass('Pie', ['getSegmentsAtEvent']); 1663 | 1664 | 1665 | /***/ }), 1666 | /* 17 */ 1667 | /***/ (function(module, exports, __webpack_require__) { 1668 | 1669 | var vars = __webpack_require__(2); 1670 | 1671 | module.exports = vars.createClass('PolarArea', ['getSegmentsAtEvent']); 1672 | 1673 | 1674 | /***/ }), 1675 | /* 18 */ 1676 | /***/ (function(module, exports, __webpack_require__) { 1677 | 1678 | var vars = __webpack_require__(2); 1679 | 1680 | module.exports = vars.createClass('Radar', ['getPointsAtEvent']); 1681 | 1682 | 1683 | /***/ }) 1684 | /******/ ]) 1685 | }); 1686 | ; -------------------------------------------------------------------------------- /dist/react-chartjs.min.js: -------------------------------------------------------------------------------- 1 | !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("react"),require("react-dom"),require("Chartjs")):"function"==typeof define&&define.amd?define(["react","react-dom","Chartjs"],e):"object"==typeof exports?exports["react-chartjs"]=e(require("react"),require("react-dom"),require("Chartjs")):t["react-chartjs"]=e(t.React,t.ReactDOM,t.Chart)}(this,function(t,e,n){return function(t){function e(o){if(n[o])return n[o].exports;var r=n[o]={exports:{},id:o,loaded:!1};return t[o].call(r.exports,r,r.exports,e),r.loaded=!0,r.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){t.exports={Bar:n(1),Doughnut:n(14),Line:n(15),Pie:n(16),PolarArea:n(17),Radar:n(18),createClass:n(2).createClass}},function(t,e,n){var o=n(2);t.exports=o.createClass("Bar",["getBarsAtEvent"])},function(t,e,n){var o=n(3),r=n(4),a=n(12);t.exports={createClass:function(t,e,c){function u(t){l[t]=function(){return this.state.chart[t].apply(this.state.chart,arguments)}}var p=["data","options","redraw"],l={displayName:t+"Chart",getInitialState:function(){return{}},render:function(){var t={ref:"canvass"};for(var e in this.props)this.props.hasOwnProperty(e)&&p.indexOf(e)===-1&&(t[e]=this.props[e]);return o.createElement("canvas",t)}},f=["clear","stop","resize","toBase64Image","generateLegend","update","addData","removeData"];l.componentDidMount=function(){this.initializeChart(this.props)},l.componentWillUnmount=function(){var t=this.state.chart;t.destroy()},l.componentWillReceiveProps=function(t){var e=this.state.chart;t.redraw?(e.destroy(),this.initializeChart(t)):(c=c||i[e.name],s(t,e,c),e.scale&&(e.scale.xLabels=t.data.labels,e.scale.calculateXLabelRotation&&e.scale.calculateXLabelRotation()),e.update())},l.initializeChart=function(e){var o=n(13),r=a.findDOMNode(this),i=r.getContext("2d"),s=new o(i)[t](e.data,e.options||{});this.state.chart=s},l.getChart=function(){return this.state.chart},l.getCanvass=function(){return this.refs.canvass},l.getCanvas=l.getCanvass;var d;for(d=0;dt.data.labels.length;)e.removeData();t.data.datasets.forEach(function(o,r){o.data.forEach(function(o,a){"undefined"==typeof e.datasets[r][n][a]?c(t,e,r,a):e.datasets[r][n][a].value=o})})}},c=function(t,e,n,o){var r=[];t.data.datasets.forEach(function(t){r.push(t.data[o])}),e.addData(r,t.data.labels[n])}},function(e,n){e.exports=t},function(t,e,n){"use strict";var o=n(3),r=n(5);if("undefined"==typeof o)throw Error("create-react-class could not find the React object. If you are using script tags, make sure that React is being loaded before create-react-class.");var a=(new o.Component).updater;t.exports=r(o.Component,o.isValidElement,a)},function(t,e,n){(function(e){"use strict";function o(t){return t}function r(t,n,r){function l(t,n,o){for(var r in n)n.hasOwnProperty(r)&&"production"!==e.env.NODE_ENV&&c("function"==typeof n[r],"%s: %s type `%s` is invalid; it must be a function, usually from React.PropTypes.",t.displayName||"ReactClass",u[o],r)}function f(t,e){var n=D.hasOwnProperty(e)?D[e]:null;w.hasOwnProperty(e)&&s("OVERRIDE_BASE"===n,"ReactClassInterface: You are attempting to override `%s` from your class specification. Ensure that your method names do not overlap with React methods.",e),t&&s("DEFINE_MANY"===n||"DEFINE_MANY_MERGED"===n,"ReactClassInterface: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.",e)}function d(t,o){if(o){s("function"!=typeof o,"ReactClass: You're attempting to use a component class or function as a mixin. Instead, just use a regular object."),s(!n(o),"ReactClass: You're attempting to use a component as a mixin. Instead, just use a regular object.");var r=t.prototype,a=r.__reactAutoBindPairs;o.hasOwnProperty(p)&&b.mixins(t,o.mixins);for(var i in o)if(o.hasOwnProperty(i)&&i!==p){var u=o[i],l=r.hasOwnProperty(i);if(f(l,i),b.hasOwnProperty(i))b[i](t,u);else{var d=D.hasOwnProperty(i),h="function"==typeof u,m=h&&!d&&!l&&o.autobind!==!1;if(m)a.push(i,u),r[i]=u;else if(l){var E=D[i];s(d&&("DEFINE_MANY_MERGED"===E||"DEFINE_MANY"===E),"ReactClass: Unexpected spec policy %s for key %s when mixing in component specs.",E,i),"DEFINE_MANY_MERGED"===E?r[i]=y(r[i],u):"DEFINE_MANY"===E&&(r[i]=v(r[i],u))}else r[i]=u,"production"!==e.env.NODE_ENV&&"function"==typeof u&&o.displayName&&(r[i].displayName=o.displayName+"_"+i)}}}else if("production"!==e.env.NODE_ENV){var g=typeof o,N="object"===g&&null!==o;"production"!==e.env.NODE_ENV&&c(N,"%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.",t.displayName||"ReactClass",null===o?null:g)}}function h(t,e){if(e)for(var n in e){var o=e[n];if(e.hasOwnProperty(n)){var r=n in b;s(!r,'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.',n);var a=n in t;s(!a,"ReactClass: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.",n),t[n]=o}}}function m(t,e){s(t&&e&&"object"==typeof t&&"object"==typeof e,"mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.");for(var n in e)e.hasOwnProperty(n)&&(s(void 0===t[n],"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.",n),t[n]=e[n]);return t}function y(t,e){return function(){var n=t.apply(this,arguments),o=e.apply(this,arguments);if(null==n)return o;if(null==o)return n;var r={};return m(r,n),m(r,o),r}}function v(t,e){return function(){t.apply(this,arguments),e.apply(this,arguments)}}function E(t,n){var o=n.bind(t);if("production"!==e.env.NODE_ENV){o.__reactBoundContext=t,o.__reactBoundMethod=n,o.__reactBoundArguments=null;var r=t.constructor.displayName,a=o.bind;o.bind=function(i){for(var s=arguments.length,u=Array(s>1?s-1:0),p=1;p1)for(var n=1;n1?e-1:0),o=1;o2?n-2:0),r=2;r nextProps.data.labels.length) { 129 | chart.removeData(); 130 | } 131 | nextProps.data.datasets.forEach(function(set, setIndex) { 132 | set.data.forEach(function(val, pointIndex) { 133 | if (typeof(chart.datasets[setIndex][dataKey][pointIndex]) == "undefined") { 134 | addData(nextProps, chart, setIndex, pointIndex); 135 | } else { 136 | chart.datasets[setIndex][dataKey][pointIndex].value = val; 137 | } 138 | }); 139 | }); 140 | } 141 | }; 142 | 143 | var addData = function(nextProps, chart, setIndex, pointIndex) { 144 | var values = []; 145 | nextProps.data.datasets.forEach(function(set) { 146 | values.push(set.data[pointIndex]); 147 | }); 148 | chart.addData(values, nextProps.data.labels[setIndex]); 149 | }; 150 | -------------------------------------------------------------------------------- /lib/doughnut.js: -------------------------------------------------------------------------------- 1 | var vars = require('./core'); 2 | 3 | module.exports = vars.createClass('Doughnut', ['getSegmentsAtEvent']); 4 | -------------------------------------------------------------------------------- /lib/line.js: -------------------------------------------------------------------------------- 1 | var vars = require('./core'); 2 | 3 | module.exports = vars.createClass('Line', ['getPointsAtEvent']); 4 | -------------------------------------------------------------------------------- /lib/pie.js: -------------------------------------------------------------------------------- 1 | var vars = require('./core'); 2 | 3 | module.exports = vars.createClass('Pie', ['getSegmentsAtEvent']); 4 | -------------------------------------------------------------------------------- /lib/polar-area.js: -------------------------------------------------------------------------------- 1 | var vars = require('./core'); 2 | 3 | module.exports = vars.createClass('PolarArea', ['getSegmentsAtEvent']); 4 | -------------------------------------------------------------------------------- /lib/radar.js: -------------------------------------------------------------------------------- 1 | var vars = require('./core'); 2 | 3 | module.exports = vars.createClass('Radar', ['getPointsAtEvent']); 4 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-chartjs", 3 | "version": "1.2.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "acorn": { 8 | "version": "3.3.0", 9 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", 10 | "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", 11 | "dev": true 12 | }, 13 | "align-text": { 14 | "version": "0.1.4", 15 | "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", 16 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", 17 | "dev": true, 18 | "requires": { 19 | "kind-of": "3.2.2", 20 | "longest": "1.0.1", 21 | "repeat-string": "1.6.1" 22 | } 23 | }, 24 | "amdefine": { 25 | "version": "1.0.1", 26 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", 27 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", 28 | "dev": true 29 | }, 30 | "anymatch": { 31 | "version": "1.3.2", 32 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", 33 | "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", 34 | "dev": true, 35 | "requires": { 36 | "micromatch": "2.3.11", 37 | "normalize-path": "2.1.1" 38 | } 39 | }, 40 | "arr-diff": { 41 | "version": "2.0.0", 42 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", 43 | "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", 44 | "dev": true, 45 | "requires": { 46 | "arr-flatten": "1.1.0" 47 | } 48 | }, 49 | "arr-flatten": { 50 | "version": "1.1.0", 51 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", 52 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", 53 | "dev": true 54 | }, 55 | "array-unique": { 56 | "version": "0.2.1", 57 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", 58 | "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", 59 | "dev": true 60 | }, 61 | "asap": { 62 | "version": "2.0.6", 63 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 64 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" 65 | }, 66 | "assert": { 67 | "version": "1.4.1", 68 | "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", 69 | "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", 70 | "dev": true, 71 | "requires": { 72 | "util": "0.10.3" 73 | } 74 | }, 75 | "async": { 76 | "version": "1.5.2", 77 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", 78 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", 79 | "dev": true 80 | }, 81 | "async-each": { 82 | "version": "1.0.1", 83 | "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", 84 | "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", 85 | "dev": true 86 | }, 87 | "balanced-match": { 88 | "version": "1.0.0", 89 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 90 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 91 | "dev": true 92 | }, 93 | "base64-js": { 94 | "version": "1.2.1", 95 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", 96 | "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", 97 | "dev": true 98 | }, 99 | "big.js": { 100 | "version": "3.2.0", 101 | "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", 102 | "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", 103 | "dev": true 104 | }, 105 | "binary-extensions": { 106 | "version": "1.11.0", 107 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", 108 | "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", 109 | "dev": true 110 | }, 111 | "brace-expansion": { 112 | "version": "1.1.8", 113 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 114 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 115 | "dev": true, 116 | "requires": { 117 | "balanced-match": "1.0.0", 118 | "concat-map": "0.0.1" 119 | } 120 | }, 121 | "braces": { 122 | "version": "1.8.5", 123 | "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", 124 | "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", 125 | "dev": true, 126 | "requires": { 127 | "expand-range": "1.8.2", 128 | "preserve": "0.2.0", 129 | "repeat-element": "1.1.2" 130 | } 131 | }, 132 | "browserify-aes": { 133 | "version": "0.4.0", 134 | "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-0.4.0.tgz", 135 | "integrity": "sha1-BnFJtmjfMcS1hTPgLQHoBthgjiw=", 136 | "dev": true, 137 | "requires": { 138 | "inherits": "2.0.3" 139 | } 140 | }, 141 | "browserify-zlib": { 142 | "version": "0.1.4", 143 | "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", 144 | "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", 145 | "dev": true, 146 | "requires": { 147 | "pako": "0.2.9" 148 | } 149 | }, 150 | "buffer": { 151 | "version": "4.9.1", 152 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", 153 | "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", 154 | "dev": true, 155 | "requires": { 156 | "base64-js": "1.2.1", 157 | "ieee754": "1.1.8", 158 | "isarray": "1.0.0" 159 | } 160 | }, 161 | "builtin-status-codes": { 162 | "version": "3.0.0", 163 | "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", 164 | "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", 165 | "dev": true 166 | }, 167 | "camelcase": { 168 | "version": "1.2.1", 169 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", 170 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", 171 | "dev": true 172 | }, 173 | "center-align": { 174 | "version": "0.1.3", 175 | "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", 176 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", 177 | "dev": true, 178 | "requires": { 179 | "align-text": "0.1.4", 180 | "lazy-cache": "1.0.4" 181 | } 182 | }, 183 | "chokidar": { 184 | "version": "1.7.0", 185 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", 186 | "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", 187 | "dev": true, 188 | "requires": { 189 | "anymatch": "1.3.2", 190 | "async-each": "1.0.1", 191 | "glob-parent": "2.0.0", 192 | "inherits": "2.0.3", 193 | "is-binary-path": "1.0.1", 194 | "is-glob": "2.0.1", 195 | "path-is-absolute": "1.0.1", 196 | "readdirp": "2.1.0" 197 | } 198 | }, 199 | "cliui": { 200 | "version": "2.1.0", 201 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", 202 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", 203 | "dev": true, 204 | "requires": { 205 | "center-align": "0.1.3", 206 | "right-align": "0.1.3", 207 | "wordwrap": "0.0.2" 208 | } 209 | }, 210 | "clone": { 211 | "version": "1.0.3", 212 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", 213 | "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", 214 | "dev": true 215 | }, 216 | "concat-map": { 217 | "version": "0.0.1", 218 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 219 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 220 | "dev": true 221 | }, 222 | "console-browserify": { 223 | "version": "1.1.0", 224 | "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", 225 | "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", 226 | "dev": true, 227 | "requires": { 228 | "date-now": "0.1.4" 229 | } 230 | }, 231 | "constants-browserify": { 232 | "version": "1.0.0", 233 | "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", 234 | "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", 235 | "dev": true 236 | }, 237 | "core-js": { 238 | "version": "1.2.7", 239 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", 240 | "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" 241 | }, 242 | "core-util-is": { 243 | "version": "1.0.2", 244 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 245 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 246 | "dev": true 247 | }, 248 | "create-react-class": { 249 | "version": "15.6.2", 250 | "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.2.tgz", 251 | "integrity": "sha1-zx7RXxKq1/FO9fLf4F5sQvke8Co=", 252 | "requires": { 253 | "fbjs": "0.8.16", 254 | "loose-envify": "1.3.1", 255 | "object-assign": "4.1.1" 256 | } 257 | }, 258 | "crypto-browserify": { 259 | "version": "3.3.0", 260 | "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.3.0.tgz", 261 | "integrity": "sha1-ufx1u0oO1h3PHNXa6W6zDJw+UGw=", 262 | "dev": true, 263 | "requires": { 264 | "browserify-aes": "0.4.0", 265 | "pbkdf2-compat": "2.0.1", 266 | "ripemd160": "0.2.0", 267 | "sha.js": "2.2.6" 268 | } 269 | }, 270 | "date-now": { 271 | "version": "0.1.4", 272 | "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", 273 | "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", 274 | "dev": true 275 | }, 276 | "decamelize": { 277 | "version": "1.2.0", 278 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 279 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 280 | "dev": true 281 | }, 282 | "domain-browser": { 283 | "version": "1.1.7", 284 | "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", 285 | "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", 286 | "dev": true 287 | }, 288 | "emojis-list": { 289 | "version": "2.1.0", 290 | "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", 291 | "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", 292 | "dev": true 293 | }, 294 | "encoding": { 295 | "version": "0.1.12", 296 | "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", 297 | "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", 298 | "requires": { 299 | "iconv-lite": "0.4.19" 300 | } 301 | }, 302 | "enhanced-resolve": { 303 | "version": "0.9.1", 304 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", 305 | "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=", 306 | "dev": true, 307 | "requires": { 308 | "graceful-fs": "4.1.11", 309 | "memory-fs": "0.2.0", 310 | "tapable": "0.1.10" 311 | }, 312 | "dependencies": { 313 | "memory-fs": { 314 | "version": "0.2.0", 315 | "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz", 316 | "integrity": "sha1-8rslNovBIeORwlIN6Slpyu4KApA=", 317 | "dev": true 318 | } 319 | } 320 | }, 321 | "errno": { 322 | "version": "0.1.6", 323 | "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.6.tgz", 324 | "integrity": "sha512-IsORQDpaaSwcDP4ZZnHxgE85werpo34VYn1Ud3mq+eUsF593faR8oCZNXrROVkpFu2TsbrNhHin0aUrTsQ9vNw==", 325 | "dev": true, 326 | "requires": { 327 | "prr": "1.0.1" 328 | } 329 | }, 330 | "events": { 331 | "version": "1.1.1", 332 | "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", 333 | "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", 334 | "dev": true 335 | }, 336 | "expand-brackets": { 337 | "version": "0.1.5", 338 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", 339 | "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", 340 | "dev": true, 341 | "requires": { 342 | "is-posix-bracket": "0.1.1" 343 | } 344 | }, 345 | "expand-range": { 346 | "version": "1.8.2", 347 | "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", 348 | "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", 349 | "dev": true, 350 | "requires": { 351 | "fill-range": "2.2.3" 352 | } 353 | }, 354 | "extglob": { 355 | "version": "0.3.2", 356 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", 357 | "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", 358 | "dev": true, 359 | "requires": { 360 | "is-extglob": "1.0.0" 361 | } 362 | }, 363 | "fbjs": { 364 | "version": "0.8.16", 365 | "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", 366 | "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", 367 | "requires": { 368 | "core-js": "1.2.7", 369 | "isomorphic-fetch": "2.2.1", 370 | "loose-envify": "1.3.1", 371 | "object-assign": "4.1.1", 372 | "promise": "7.3.1", 373 | "setimmediate": "1.0.5", 374 | "ua-parser-js": "0.7.17" 375 | } 376 | }, 377 | "filename-regex": { 378 | "version": "2.0.1", 379 | "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", 380 | "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", 381 | "dev": true 382 | }, 383 | "fill-range": { 384 | "version": "2.2.3", 385 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", 386 | "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", 387 | "dev": true, 388 | "requires": { 389 | "is-number": "2.1.0", 390 | "isobject": "2.1.0", 391 | "randomatic": "1.1.7", 392 | "repeat-element": "1.1.2", 393 | "repeat-string": "1.6.1" 394 | } 395 | }, 396 | "for-in": { 397 | "version": "1.0.2", 398 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 399 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", 400 | "dev": true 401 | }, 402 | "for-own": { 403 | "version": "0.1.5", 404 | "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", 405 | "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", 406 | "dev": true, 407 | "requires": { 408 | "for-in": "1.0.2" 409 | } 410 | }, 411 | "glob-base": { 412 | "version": "0.3.0", 413 | "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", 414 | "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", 415 | "dev": true, 416 | "requires": { 417 | "glob-parent": "2.0.0", 418 | "is-glob": "2.0.1" 419 | } 420 | }, 421 | "glob-parent": { 422 | "version": "2.0.0", 423 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", 424 | "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", 425 | "dev": true, 426 | "requires": { 427 | "is-glob": "2.0.1" 428 | } 429 | }, 430 | "graceful-fs": { 431 | "version": "4.1.11", 432 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 433 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 434 | "dev": true 435 | }, 436 | "has-flag": { 437 | "version": "1.0.0", 438 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", 439 | "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", 440 | "dev": true 441 | }, 442 | "https-browserify": { 443 | "version": "0.0.1", 444 | "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", 445 | "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", 446 | "dev": true 447 | }, 448 | "iconv-lite": { 449 | "version": "0.4.19", 450 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", 451 | "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" 452 | }, 453 | "ieee754": { 454 | "version": "1.1.8", 455 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", 456 | "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", 457 | "dev": true 458 | }, 459 | "indexof": { 460 | "version": "0.0.1", 461 | "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", 462 | "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", 463 | "dev": true 464 | }, 465 | "inherits": { 466 | "version": "2.0.3", 467 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 468 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 469 | "dev": true 470 | }, 471 | "interpret": { 472 | "version": "0.6.6", 473 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-0.6.6.tgz", 474 | "integrity": "sha1-/s16GOfOXKar+5U+H4YhOknxYls=", 475 | "dev": true 476 | }, 477 | "is-binary-path": { 478 | "version": "1.0.1", 479 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", 480 | "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", 481 | "dev": true, 482 | "requires": { 483 | "binary-extensions": "1.11.0" 484 | } 485 | }, 486 | "is-buffer": { 487 | "version": "1.1.6", 488 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 489 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 490 | "dev": true 491 | }, 492 | "is-dotfile": { 493 | "version": "1.0.3", 494 | "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", 495 | "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", 496 | "dev": true 497 | }, 498 | "is-equal-shallow": { 499 | "version": "0.1.3", 500 | "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", 501 | "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", 502 | "dev": true, 503 | "requires": { 504 | "is-primitive": "2.0.0" 505 | } 506 | }, 507 | "is-extendable": { 508 | "version": "0.1.1", 509 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 510 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", 511 | "dev": true 512 | }, 513 | "is-extglob": { 514 | "version": "1.0.0", 515 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", 516 | "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", 517 | "dev": true 518 | }, 519 | "is-glob": { 520 | "version": "2.0.1", 521 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", 522 | "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", 523 | "dev": true, 524 | "requires": { 525 | "is-extglob": "1.0.0" 526 | } 527 | }, 528 | "is-number": { 529 | "version": "2.1.0", 530 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", 531 | "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", 532 | "dev": true, 533 | "requires": { 534 | "kind-of": "3.2.2" 535 | } 536 | }, 537 | "is-posix-bracket": { 538 | "version": "0.1.1", 539 | "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", 540 | "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", 541 | "dev": true 542 | }, 543 | "is-primitive": { 544 | "version": "2.0.0", 545 | "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", 546 | "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", 547 | "dev": true 548 | }, 549 | "is-stream": { 550 | "version": "1.1.0", 551 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 552 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 553 | }, 554 | "isarray": { 555 | "version": "1.0.0", 556 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 557 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 558 | "dev": true 559 | }, 560 | "isobject": { 561 | "version": "2.1.0", 562 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", 563 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", 564 | "dev": true, 565 | "requires": { 566 | "isarray": "1.0.0" 567 | } 568 | }, 569 | "isomorphic-fetch": { 570 | "version": "2.2.1", 571 | "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", 572 | "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", 573 | "requires": { 574 | "node-fetch": "1.7.3", 575 | "whatwg-fetch": "2.0.3" 576 | } 577 | }, 578 | "js-tokens": { 579 | "version": "3.0.2", 580 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", 581 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" 582 | }, 583 | "json5": { 584 | "version": "0.5.1", 585 | "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", 586 | "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", 587 | "dev": true 588 | }, 589 | "kind-of": { 590 | "version": "3.2.2", 591 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 592 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 593 | "dev": true, 594 | "requires": { 595 | "is-buffer": "1.1.6" 596 | } 597 | }, 598 | "lazy-cache": { 599 | "version": "1.0.4", 600 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", 601 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", 602 | "dev": true 603 | }, 604 | "loader-utils": { 605 | "version": "0.2.17", 606 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", 607 | "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", 608 | "dev": true, 609 | "requires": { 610 | "big.js": "3.2.0", 611 | "emojis-list": "2.1.0", 612 | "json5": "0.5.1", 613 | "object-assign": "4.1.1" 614 | } 615 | }, 616 | "longest": { 617 | "version": "1.0.1", 618 | "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", 619 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", 620 | "dev": true 621 | }, 622 | "loose-envify": { 623 | "version": "1.3.1", 624 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", 625 | "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", 626 | "requires": { 627 | "js-tokens": "3.0.2" 628 | } 629 | }, 630 | "memory-fs": { 631 | "version": "0.3.0", 632 | "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.3.0.tgz", 633 | "integrity": "sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=", 634 | "dev": true, 635 | "requires": { 636 | "errno": "0.1.6", 637 | "readable-stream": "2.3.3" 638 | } 639 | }, 640 | "micromatch": { 641 | "version": "2.3.11", 642 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", 643 | "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", 644 | "dev": true, 645 | "requires": { 646 | "arr-diff": "2.0.0", 647 | "array-unique": "0.2.1", 648 | "braces": "1.8.5", 649 | "expand-brackets": "0.1.5", 650 | "extglob": "0.3.2", 651 | "filename-regex": "2.0.1", 652 | "is-extglob": "1.0.0", 653 | "is-glob": "2.0.1", 654 | "kind-of": "3.2.2", 655 | "normalize-path": "2.1.1", 656 | "object.omit": "2.0.1", 657 | "parse-glob": "3.0.4", 658 | "regex-cache": "0.4.4" 659 | } 660 | }, 661 | "minimatch": { 662 | "version": "3.0.4", 663 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 664 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 665 | "dev": true, 666 | "requires": { 667 | "brace-expansion": "1.1.8" 668 | } 669 | }, 670 | "minimist": { 671 | "version": "0.0.8", 672 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 673 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 674 | "dev": true 675 | }, 676 | "mkdirp": { 677 | "version": "0.5.1", 678 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 679 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 680 | "dev": true, 681 | "requires": { 682 | "minimist": "0.0.8" 683 | } 684 | }, 685 | "node-fetch": { 686 | "version": "1.7.3", 687 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", 688 | "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", 689 | "requires": { 690 | "encoding": "0.1.12", 691 | "is-stream": "1.1.0" 692 | } 693 | }, 694 | "node-libs-browser": { 695 | "version": "0.7.0", 696 | "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-0.7.0.tgz", 697 | "integrity": "sha1-PicsCBnjCJNeJmdECNevDhSRuDs=", 698 | "dev": true, 699 | "requires": { 700 | "assert": "1.4.1", 701 | "browserify-zlib": "0.1.4", 702 | "buffer": "4.9.1", 703 | "console-browserify": "1.1.0", 704 | "constants-browserify": "1.0.0", 705 | "crypto-browserify": "3.3.0", 706 | "domain-browser": "1.1.7", 707 | "events": "1.1.1", 708 | "https-browserify": "0.0.1", 709 | "os-browserify": "0.2.1", 710 | "path-browserify": "0.0.0", 711 | "process": "0.11.10", 712 | "punycode": "1.4.1", 713 | "querystring-es3": "0.2.1", 714 | "readable-stream": "2.3.3", 715 | "stream-browserify": "2.0.1", 716 | "stream-http": "2.7.2", 717 | "string_decoder": "0.10.31", 718 | "timers-browserify": "2.0.4", 719 | "tty-browserify": "0.0.0", 720 | "url": "0.11.0", 721 | "util": "0.10.3", 722 | "vm-browserify": "0.0.4" 723 | }, 724 | "dependencies": { 725 | "string_decoder": { 726 | "version": "0.10.31", 727 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 728 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 729 | "dev": true 730 | } 731 | } 732 | }, 733 | "normalize-path": { 734 | "version": "2.1.1", 735 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", 736 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", 737 | "dev": true, 738 | "requires": { 739 | "remove-trailing-separator": "1.1.0" 740 | } 741 | }, 742 | "object-assign": { 743 | "version": "4.1.1", 744 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 745 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 746 | }, 747 | "object.omit": { 748 | "version": "2.0.1", 749 | "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", 750 | "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", 751 | "dev": true, 752 | "requires": { 753 | "for-own": "0.1.5", 754 | "is-extendable": "0.1.1" 755 | } 756 | }, 757 | "optimist": { 758 | "version": "0.6.1", 759 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", 760 | "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", 761 | "dev": true, 762 | "requires": { 763 | "minimist": "0.0.8", 764 | "wordwrap": "0.0.2" 765 | } 766 | }, 767 | "os-browserify": { 768 | "version": "0.2.1", 769 | "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", 770 | "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=", 771 | "dev": true 772 | }, 773 | "pako": { 774 | "version": "0.2.9", 775 | "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", 776 | "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", 777 | "dev": true 778 | }, 779 | "parse-glob": { 780 | "version": "3.0.4", 781 | "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", 782 | "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", 783 | "dev": true, 784 | "requires": { 785 | "glob-base": "0.3.0", 786 | "is-dotfile": "1.0.3", 787 | "is-extglob": "1.0.0", 788 | "is-glob": "2.0.1" 789 | } 790 | }, 791 | "path-browserify": { 792 | "version": "0.0.0", 793 | "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", 794 | "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", 795 | "dev": true 796 | }, 797 | "path-is-absolute": { 798 | "version": "1.0.1", 799 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 800 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 801 | "dev": true 802 | }, 803 | "pbkdf2-compat": { 804 | "version": "2.0.1", 805 | "resolved": "https://registry.npmjs.org/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz", 806 | "integrity": "sha1-tuDI+plJTZTgURV1gCpZpcFC8og=", 807 | "dev": true 808 | }, 809 | "preserve": { 810 | "version": "0.2.0", 811 | "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", 812 | "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", 813 | "dev": true 814 | }, 815 | "process": { 816 | "version": "0.11.10", 817 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 818 | "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", 819 | "dev": true 820 | }, 821 | "process-nextick-args": { 822 | "version": "1.0.7", 823 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 824 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", 825 | "dev": true 826 | }, 827 | "promise": { 828 | "version": "7.3.1", 829 | "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", 830 | "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", 831 | "requires": { 832 | "asap": "2.0.6" 833 | } 834 | }, 835 | "prr": { 836 | "version": "1.0.1", 837 | "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", 838 | "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", 839 | "dev": true 840 | }, 841 | "punycode": { 842 | "version": "1.4.1", 843 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 844 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 845 | "dev": true 846 | }, 847 | "querystring": { 848 | "version": "0.2.0", 849 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 850 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", 851 | "dev": true 852 | }, 853 | "querystring-es3": { 854 | "version": "0.2.1", 855 | "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", 856 | "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", 857 | "dev": true 858 | }, 859 | "randomatic": { 860 | "version": "1.1.7", 861 | "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", 862 | "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", 863 | "dev": true, 864 | "requires": { 865 | "is-number": "3.0.0", 866 | "kind-of": "4.0.0" 867 | }, 868 | "dependencies": { 869 | "is-number": { 870 | "version": "3.0.0", 871 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 872 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 873 | "dev": true, 874 | "requires": { 875 | "kind-of": "3.2.2" 876 | }, 877 | "dependencies": { 878 | "kind-of": { 879 | "version": "3.2.2", 880 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 881 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 882 | "dev": true, 883 | "requires": { 884 | "is-buffer": "1.1.6" 885 | } 886 | } 887 | } 888 | }, 889 | "kind-of": { 890 | "version": "4.0.0", 891 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", 892 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", 893 | "dev": true, 894 | "requires": { 895 | "is-buffer": "1.1.6" 896 | } 897 | } 898 | } 899 | }, 900 | "readable-stream": { 901 | "version": "2.3.3", 902 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 903 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 904 | "dev": true, 905 | "requires": { 906 | "core-util-is": "1.0.2", 907 | "inherits": "2.0.3", 908 | "isarray": "1.0.0", 909 | "process-nextick-args": "1.0.7", 910 | "safe-buffer": "5.1.1", 911 | "string_decoder": "1.0.3", 912 | "util-deprecate": "1.0.2" 913 | } 914 | }, 915 | "readdirp": { 916 | "version": "2.1.0", 917 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", 918 | "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", 919 | "dev": true, 920 | "requires": { 921 | "graceful-fs": "4.1.11", 922 | "minimatch": "3.0.4", 923 | "readable-stream": "2.3.3", 924 | "set-immediate-shim": "1.0.1" 925 | } 926 | }, 927 | "regex-cache": { 928 | "version": "0.4.4", 929 | "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", 930 | "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", 931 | "dev": true, 932 | "requires": { 933 | "is-equal-shallow": "0.1.3" 934 | } 935 | }, 936 | "remove-trailing-separator": { 937 | "version": "1.1.0", 938 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", 939 | "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", 940 | "dev": true 941 | }, 942 | "repeat-element": { 943 | "version": "1.1.2", 944 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", 945 | "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", 946 | "dev": true 947 | }, 948 | "repeat-string": { 949 | "version": "1.6.1", 950 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 951 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", 952 | "dev": true 953 | }, 954 | "right-align": { 955 | "version": "0.1.3", 956 | "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", 957 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", 958 | "dev": true, 959 | "requires": { 960 | "align-text": "0.1.4" 961 | } 962 | }, 963 | "ripemd160": { 964 | "version": "0.2.0", 965 | "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-0.2.0.tgz", 966 | "integrity": "sha1-K/GYveFnys+lHAqSjoS2i74XH84=", 967 | "dev": true 968 | }, 969 | "safe-buffer": { 970 | "version": "5.1.1", 971 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 972 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", 973 | "dev": true 974 | }, 975 | "set-immediate-shim": { 976 | "version": "1.0.1", 977 | "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", 978 | "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", 979 | "dev": true 980 | }, 981 | "setimmediate": { 982 | "version": "1.0.5", 983 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", 984 | "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" 985 | }, 986 | "sha.js": { 987 | "version": "2.2.6", 988 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.2.6.tgz", 989 | "integrity": "sha1-F93t3F9yL7ZlAWWIlUYZd4ZzFbo=", 990 | "dev": true 991 | }, 992 | "source-list-map": { 993 | "version": "0.1.8", 994 | "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", 995 | "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", 996 | "dev": true 997 | }, 998 | "source-map": { 999 | "version": "0.5.7", 1000 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 1001 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 1002 | "dev": true 1003 | }, 1004 | "stream-browserify": { 1005 | "version": "2.0.1", 1006 | "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", 1007 | "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", 1008 | "dev": true, 1009 | "requires": { 1010 | "inherits": "2.0.3", 1011 | "readable-stream": "2.3.3" 1012 | } 1013 | }, 1014 | "stream-http": { 1015 | "version": "2.7.2", 1016 | "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", 1017 | "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", 1018 | "dev": true, 1019 | "requires": { 1020 | "builtin-status-codes": "3.0.0", 1021 | "inherits": "2.0.3", 1022 | "readable-stream": "2.3.3", 1023 | "to-arraybuffer": "1.0.1", 1024 | "xtend": "4.0.1" 1025 | } 1026 | }, 1027 | "string_decoder": { 1028 | "version": "1.0.3", 1029 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 1030 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 1031 | "dev": true, 1032 | "requires": { 1033 | "safe-buffer": "5.1.1" 1034 | } 1035 | }, 1036 | "supports-color": { 1037 | "version": "3.2.3", 1038 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", 1039 | "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", 1040 | "dev": true, 1041 | "requires": { 1042 | "has-flag": "1.0.0" 1043 | } 1044 | }, 1045 | "tapable": { 1046 | "version": "0.1.10", 1047 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", 1048 | "integrity": "sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=", 1049 | "dev": true 1050 | }, 1051 | "timers-browserify": { 1052 | "version": "2.0.4", 1053 | "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", 1054 | "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==", 1055 | "dev": true, 1056 | "requires": { 1057 | "setimmediate": "1.0.5" 1058 | } 1059 | }, 1060 | "to-arraybuffer": { 1061 | "version": "1.0.1", 1062 | "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", 1063 | "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", 1064 | "dev": true 1065 | }, 1066 | "tty-browserify": { 1067 | "version": "0.0.0", 1068 | "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", 1069 | "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", 1070 | "dev": true 1071 | }, 1072 | "ua-parser-js": { 1073 | "version": "0.7.17", 1074 | "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", 1075 | "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==" 1076 | }, 1077 | "uglify-js": { 1078 | "version": "2.8.29", 1079 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", 1080 | "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", 1081 | "dev": true, 1082 | "requires": { 1083 | "source-map": "0.5.7", 1084 | "uglify-to-browserify": "1.0.2", 1085 | "yargs": "3.10.0" 1086 | } 1087 | }, 1088 | "uglify-to-browserify": { 1089 | "version": "1.0.2", 1090 | "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", 1091 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", 1092 | "dev": true 1093 | }, 1094 | "url": { 1095 | "version": "0.11.0", 1096 | "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", 1097 | "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", 1098 | "dev": true, 1099 | "requires": { 1100 | "punycode": "1.3.2", 1101 | "querystring": "0.2.0" 1102 | }, 1103 | "dependencies": { 1104 | "punycode": { 1105 | "version": "1.3.2", 1106 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 1107 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", 1108 | "dev": true 1109 | } 1110 | } 1111 | }, 1112 | "util": { 1113 | "version": "0.10.3", 1114 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", 1115 | "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", 1116 | "dev": true, 1117 | "requires": { 1118 | "inherits": "2.0.1" 1119 | }, 1120 | "dependencies": { 1121 | "inherits": { 1122 | "version": "2.0.1", 1123 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 1124 | "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", 1125 | "dev": true 1126 | } 1127 | } 1128 | }, 1129 | "util-deprecate": { 1130 | "version": "1.0.2", 1131 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1132 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1133 | "dev": true 1134 | }, 1135 | "vm-browserify": { 1136 | "version": "0.0.4", 1137 | "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", 1138 | "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", 1139 | "dev": true, 1140 | "requires": { 1141 | "indexof": "0.0.1" 1142 | } 1143 | }, 1144 | "watchpack": { 1145 | "version": "0.2.9", 1146 | "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-0.2.9.tgz", 1147 | "integrity": "sha1-Yuqkq15bo1/fwBgnVibjwPXj+ws=", 1148 | "dev": true, 1149 | "requires": { 1150 | "async": "0.9.2", 1151 | "chokidar": "1.7.0", 1152 | "graceful-fs": "4.1.11" 1153 | }, 1154 | "dependencies": { 1155 | "async": { 1156 | "version": "0.9.2", 1157 | "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", 1158 | "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", 1159 | "dev": true 1160 | } 1161 | } 1162 | }, 1163 | "webpack": { 1164 | "version": "1.15.0", 1165 | "resolved": "https://registry.npmjs.org/webpack/-/webpack-1.15.0.tgz", 1166 | "integrity": "sha1-T/MfU9sDM55VFkqdRo7gMklo/pg=", 1167 | "dev": true, 1168 | "requires": { 1169 | "acorn": "3.3.0", 1170 | "async": "1.5.2", 1171 | "clone": "1.0.3", 1172 | "enhanced-resolve": "0.9.1", 1173 | "interpret": "0.6.6", 1174 | "loader-utils": "0.2.17", 1175 | "memory-fs": "0.3.0", 1176 | "mkdirp": "0.5.1", 1177 | "node-libs-browser": "0.7.0", 1178 | "optimist": "0.6.1", 1179 | "supports-color": "3.2.3", 1180 | "tapable": "0.1.10", 1181 | "uglify-js": "2.7.5", 1182 | "watchpack": "0.2.9", 1183 | "webpack-core": "0.6.9" 1184 | }, 1185 | "dependencies": { 1186 | "uglify-js": { 1187 | "version": "2.7.5", 1188 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz", 1189 | "integrity": "sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=", 1190 | "dev": true, 1191 | "requires": { 1192 | "async": "0.2.10", 1193 | "source-map": "0.5.7", 1194 | "uglify-to-browserify": "1.0.2", 1195 | "yargs": "3.10.0" 1196 | }, 1197 | "dependencies": { 1198 | "async": { 1199 | "version": "0.2.10", 1200 | "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", 1201 | "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", 1202 | "dev": true 1203 | } 1204 | } 1205 | } 1206 | } 1207 | }, 1208 | "webpack-core": { 1209 | "version": "0.6.9", 1210 | "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz", 1211 | "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", 1212 | "dev": true, 1213 | "requires": { 1214 | "source-list-map": "0.1.8", 1215 | "source-map": "0.4.4" 1216 | }, 1217 | "dependencies": { 1218 | "source-map": { 1219 | "version": "0.4.4", 1220 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", 1221 | "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", 1222 | "dev": true, 1223 | "requires": { 1224 | "amdefine": "1.0.1" 1225 | } 1226 | } 1227 | } 1228 | }, 1229 | "whatwg-fetch": { 1230 | "version": "2.0.3", 1231 | "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", 1232 | "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=" 1233 | }, 1234 | "window-size": { 1235 | "version": "0.1.0", 1236 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", 1237 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", 1238 | "dev": true 1239 | }, 1240 | "wordwrap": { 1241 | "version": "0.0.2", 1242 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", 1243 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", 1244 | "dev": true 1245 | }, 1246 | "xtend": { 1247 | "version": "4.0.1", 1248 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 1249 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", 1250 | "dev": true 1251 | }, 1252 | "yargs": { 1253 | "version": "3.10.0", 1254 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", 1255 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", 1256 | "dev": true, 1257 | "requires": { 1258 | "camelcase": "1.2.1", 1259 | "cliui": "2.1.0", 1260 | "decamelize": "1.2.0", 1261 | "window-size": "0.1.0" 1262 | } 1263 | } 1264 | } 1265 | } 1266 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-chartjs", 3 | "version": "1.2.0", 4 | "description": "react charting components using the chartjs lib", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "mocha", 8 | "build": "webpack index.js dist/react-chartjs.js", 9 | "dist": "COMPRESS=1 webpack index.js dist/react-chartjs.min.js", 10 | "prepublishOnly": "npm run build && npm run dist" 11 | }, 12 | "repository": { 13 | "type": "git", 14 | "url": "https://github.com/jhudson8/react-chartjs" 15 | }, 16 | "keywords": [ 17 | "react", 18 | "react-component", 19 | "chart", 20 | "charts", 21 | "graph", 22 | "chartjs" 23 | ], 24 | "author": "Joe Hudson", 25 | "license": "MIT", 26 | "bugs": { 27 | "url": "https://github.com/jhudson8/react-chartjs/issues" 28 | }, 29 | "homepage": "https://github.com/jhudson8/react-chartjs", 30 | "peerDependencies": { 31 | "react": "*", 32 | "react-dom": "*", 33 | "chart.js": "^1.1.1" 34 | }, 35 | "devDependencies": { 36 | "uglify-js": "^2.4.16", 37 | "webpack": "^1.4.14" 38 | }, 39 | "dependencies": { 40 | "create-react-class": "^15.6.2" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /release-notes.md: -------------------------------------------------------------------------------- 1 | # Release Notes 2 | 3 | ## v0.6.0 - March 25th, 2015 4 | - [#12](https://github.com/jhudson8/react-chartjs/pull/12) - Allow custom chart types. ([@tcard](https://api.github.com/users/tcard)) 5 | - [#11](https://github.com/jhudson8/react-chartjs/pull/11) - fix failed to update points for doughnut chart ([@neoalienson](https://api.github.com/users/neoal 6 | ienson)) 7 | 8 | a ```createChart``` method is exposed 9 | 10 | description from associated PR 11 | 12 | This changeset exposes the createClass method in lib/core, and adds a third argument to it so that you can pass the dataKey value that was previously fixed in the dataKeys variable. 13 | 14 | E. g. if you want to use https://github.com/Regaddi/Chart.StackedBar.js, you would do something like var StackedBarChart = require('react-chartjs').createClass('StackedBar', ['getBarsAtEvent'], 'bars'); (provided you previously registered StackedBar with Chart.js, of course). 15 | 16 | 17 | ## v0.5.0 - February 23rd, 2015 18 | - Added a ```getChart``` method on the chart components to return the chartjs object 19 | - Added a ```getCanvass``` method on the chart components to return the canvass DOM element 20 | 21 | ## v0.4.0 - February 7th, 2015 22 | - Added Chart.js as a peer dependency (thanks @pghalliday) 23 | 24 | ## v0.3.0 - February 6th, 2015 25 | - Remove AMD and javascript include support to make commonjs behavior simple (thanks @seanadkinson) 26 | 27 | ## v0.2.1 - January 26th, 2015 28 | - AMD bug fix 29 | 30 | 31 | ## v0.2.0 - January 26th, 2015 32 | - Allow for commonJS code to not require initialization 33 | 34 | 35 | ## v0.1.3 - January 19th, 2015 36 | - Actually include the commit mentioned with the 1.2 release 37 | 38 | 39 | ## v0.1.2 - January 13th, 2015 40 | - fix chart rendering error when properties change 41 | 42 | 43 | ## v0.1.1 - December 28th, 2014 44 | - fix AMD loader - 8c6b8ea 45 | 46 | 47 | ## v0.1.0 - December 28th, 2014 48 | - add AMD loader - c04a10a 49 | 50 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | var webpack = require('webpack'), 2 | plugins = []; 3 | 4 | if (process.env.COMPRESS) { 5 | plugins.push( 6 | new webpack.optimize.UglifyJsPlugin({ 7 | compressor: { 8 | warnings: false 9 | } 10 | }) 11 | ); 12 | } 13 | 14 | module.exports = { 15 | 16 | output: { 17 | library: 'react-chartjs', 18 | libraryTarget: 'umd' 19 | }, 20 | 21 | externals: [ 22 | { 23 | "react": { 24 | root: "React", 25 | commonjs2: "react", 26 | commonjs: "react", 27 | amd: "react" 28 | }, 29 | "react-dom": { 30 | root: "ReactDOM", 31 | commonjs2: "react-dom", 32 | commonjs: "react-dom", 33 | amd: "react-dom" 34 | }, 35 | "chart.js": { 36 | root: "Chart", 37 | commonjs2: "Chartjs", 38 | commonjs: "Chartjs", 39 | amd: "Chartjs" 40 | } 41 | } 42 | ], 43 | 44 | node: { 45 | Buffer: false 46 | }, 47 | 48 | plugins: plugins 49 | 50 | }; 51 | --------------------------------------------------------------------------------