[
  {
    "path": ".babelrc",
    "content": "{\n  \"presets\": [ \"es2015\", \"stage-0\", \"react\" ]\n}\n"
  },
  {
    "path": ".editorconfig",
    "content": "# EditorConfig helps developers define and maintain consistent\n# coding styles between different editors and IDEs\n# editorconfig.org\n\nroot = true\n\n[*]\n\n# Change these settings to your own preference\nindent_style = space\nindent_size = 2\n\n# We recommend you to keep these unchanged\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.md]\ntrim_trailing_whitespace = false\n"
  },
  {
    "path": ".eslintignore",
    "content": "lib\ndist\n**/node_modules\n**/webpack.config.js\nexamples/**/server.js\n"
  },
  {
    "path": ".eslintrc",
    "content": "{\n  \"parser\": \"babel-eslint\",\n\n  \"plugins\": [ \"react\" ],\n\n  \"ecmaFeatures\": {\n    \"jsx\": true\n  },\n  \"env\": {\n    \"es6\": true,\n    \"browser\": true,\n    \"mocha\": true,\n    \"node\": true\n  },\n\n  \"rules\": {\n    \"array-bracket-spacing\": 0,\n    \"camelcase\": 2,\n    \"consistent-return\": 2,\n    \"dot-notation\": 0,\n    \"eol-last\": 2,\n    \"eqeqeq\": 2,\n    \"new-cap\": [\n      2,\n      {\n        \"capIsNew\": false\n      }\n    ],\n    \"no-eq-null\": 2,\n    \"no-mixed-spaces-and-tabs\": 2,\n    \"no-multiple-empty-lines\": [\n      2,\n      {\n        \"max\": 2\n      }\n    ],\n    \"no-trailing-spaces\": 2,\n    \"no-use-before-define\": [\n      2,\n      \"nofunc\"\n    ],\n    \"no-undef\": 2,\n    \"no-underscore-dangle\": 0,\n    \"no-var\": 2,\n    \"object-curly-spacing\": [\n      2,\n      \"always\"\n    ],\n    \"quotes\": [\n      2,\n      \"single\"\n    ],\n    \"keyword-spacing\": 2,\n    \"space-before-blocks\": [\n      2,\n      \"always\"\n    ],\n    \"space-before-function-paren\": [\n      2,\n      \"always\"\n    ],\n    \"strict\": 0,\n    \"vars-on-top\": 2,\n    \"indent\": [\n      2,\n      2,\n      {\n        \"SwitchCase\": 1\n      }\n    ]\n  },\n\n  \"react/display-name\": 0,\n  \"react/jsx-boolean-value\": 2,\n  \"react/jsx-quotes\": 2,\n  \"react/jsx-no-undef\": 2,\n  \"react/jsx-sort-props\": 0,\n  \"react/jsx-uses-react\": 2,\n  \"react/jsx-uses-vars\": 2,\n  \"react/no-did-mount-set-state\": 2,\n  \"react/no-did-update-set-state\": 2,\n  \"react/no-multi-comp\": 0,\n  \"react/no-unknown-property\": 2,\n  \"react/prop-types\": 2,\n  \"react/react-in-jsx-scope\": 2,\n  \"react/self-closing-comp\": 2,\n  \"react/wrap-multilines\": 2\n}\n"
  },
  {
    "path": ".gitignore",
    "content": "build/\nnode_modules/\nnpm-debug.log\n.idea\n.DS_Store\n"
  },
  {
    "path": ".npmignore",
    "content": "build/\nnode_modules/\nnpm-debug.log"
  },
  {
    "path": "LICENSE",
    "content": "Copyright (c) 2014 Mikhail Novikov\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE."
  },
  {
    "path": "README.md",
    "content": "react-calendar\n==============\n[![NPM version][npm-image]][npm-url]\n[![Downloads][downloads-image]][downloads-url]\n\nCalendars for React v15.\n\nNot just calendar component, but a modular toolkit for building everything\nrelated to calendars in React, such as Datepickers.\n\nIn early alpha stage, documentation and features will arrive.\n\nExample\n-------\n\n```\nnpm install\nnpm run\n```\n\nOne year calendar ([Demo](http://freiksenet.github.io/react-calendar/)):\n\n```html\n<Calendar startDate={ moment() }\n          endDate={ moment().endOf('year') } <!-- Base calendar component -->\n          weekNumbers={true}\n          size={12}\n          mods={\n            [                           <!-- Pass modifier objects to change rendering -->\n              {\n                date: moment(),\n                classNames: [ 'current' ],\n                component: [ 'day', 'month', 'week' ] <!-- This shows the current day, week, and month. -->\n              }\n            ]\n          }\n\n          />\n```\n\nEach component can be used separately ~~AND passed to other components to modify\nrendering.~~ We have deprecated this in favor of passing a more flexible modifier object.\n\n```html\n<Month date={moment()} />\n```\n\nIf a modifier is passed without date it modifies *all* components of this type in\nthe tree. Useful, for example, for passing callbacks.\n\n```html\n<Calendar firstMonth={1}\n          date={moment(\"2014-01-01\")}\n          weekNumbers={true}\n          size={12}\n          startDate={ moment() }\n          endDate={ moment().endOf('year') } <!-- Base calendar compoment -->\n          weekNumbers={true}\n          size={12}\n          mods={\n            [\n              {\n                component: [ 'day' ],\n                events: {\n                  onClick: (date) => alert(date)\n                }\n              }\n            ]\n          } />\n```\n\nEvents\n------\n\nAll mouse and touch events are supported on all components with react style\nonCamelCase props (eg. onClick). Event handlers receives two arguments -\ndate in moment.js format and the original react event.\n\nStyling\n-------\n\nThere is no style by default, but an example theme using bootstrap is included\nin less/bootstrap-theme.less.\n\nreact-calendar uses SuitCSS style (a variant of BEM) to make default class hierarchy,\nif you want to add a class that is separate from that hierarchy just pass `classes`\nprop to any component. `classes` is an object with keys as class names and values as\nboolean-like values (this will be probably changed to just passing array of classes in\nfuture API). If you want to add SuitCSS modifier classes (eg `rc-Day--current`),\npass similar object via `modifiers` prop (again this will probably become an array\nin next version of API).\n\nFor example:\n\n```html\n<Day date={moment()} mods={[{bar: true}]} />\n```\n\nwill yield the following classes: `\"rc-Day rc-Day--bar\".`\n\nTODO\n----\n\n- [ ] Merging of modifiers and classe\n- [ ] Docs\n- [ ] Calendar should be able to page\n- [ ] A component for Year - Calendar is supposed to be a 'controller' component for pageable stuff\n- [ ] A component that is on lower level that Day - for events.\n- [x] ~~Utils to create range of components for modifying multiple components easier~~\n- [ ] An example datepicker component using react-calendar\n- [x] ~~Basic unit tests~~\n- [ ] More Tests!\n\n[npm-image]: https://img.shields.io/npm/v/react-calendar.svg?style=flat-square\n[npm-url]: https://npmjs.org/package/react-calendar\n[downloads-image]: https://img.shields.io/npm/dm/react-calendar.svg?style=flat-square\n[downloads-url]: https://npmjs.org/package/react-calendar\n"
  },
  {
    "path": "css/bootstrap-theme.css",
    "content": ".cell {\n  display: inline-block;\n  width: 32px;\n  height: 32px;\n  padding: 5px;\n  text-align: center;\n}\n.rc-Calendar-header {\n  text-align: center;\n  font-weight: bolder;\n}\n.rc-Month {\n  display: inline-block;\n  vertical-align: top;\n  margin: 0 0 10px 10px;\n}\n.rc-Month-header {\n  text-align: center;\n  font-weight: bolder;\n}\n.rc-Month-weekdays {\n  margin-left: 32px;\n}\n.rc-Month-weekdays-weekday {\n  display: inline-block;\n  width: 32px;\n  height: 32px;\n  padding: 5px;\n  text-align: center;\n  font-weight: bolder;\n}\n.rc-Month--current .rc-Month-header {\n  color: #337ab7;\n}\n.rc-Week {\n  height: 32px;\n}\n.rc-Week-number {\n  color: #777777;\n  display: inline-block;\n  width: 32px;\n  height: 32px;\n  padding: 5px;\n  text-align: center;\n}\n.rc-Week-days {\n  border-left: 1px solid #eeeeee;\n  border-top: 1px solid #eeeeee;\n  display: inline-block;\n}\n.rc-Week:last-child .rc-Week-days {\n  border-bottom: 1px solid #eeeeee;\n}\n.rc-Week--current {\n  background-color: #5bc0de;\n}\n.rc-Day {\n  display: inline-block;\n  width: 32px;\n  height: 32px;\n  padding: 5px;\n  text-align: center;\n  border-right: 1px solid #eeeeee;\n  cursor: pointer;\n}\n.rc-Day:hover {\n  background-color: #5bc0de;\n}\n.rc-Day--outside {\n  cursor: default;\n  color: #eeeeee;\n}\n.rc-Day--outside:hover {\n  background-color: transparent;\n}\n.rc-Day--event {\n  background-color: #eeeeee;\n}\n.rc-Day--current {\n  background-color: #337ab7;\n}\n.rc-Day--longEvent {\n  background-color: #5cb85c;\n}\n.rc-Day--warning {\n  background-color: #f0ad4e;\n}\n"
  },
  {
    "path": "demo.js",
    "content": "import moment from 'moment';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport Calendar from './src/Calendar';\nimport Week from './src/Week';\nimport Month from './src/Month';\n\nrequire('./less/bootstrap-theme.less');\n\nconst PagingCalendar = React.createClass({\n  getInitialState: function () {\n    return {\n      date: moment().startOf('year')\n    };\n  },\n\n  handlePrevYear: function (e) {\n    e.preventDefault();\n    this.setState({\n      date: this.state.date.clone().subtract(1, 'year')\n    });\n  },\n\n  handleNextYear: function (e) {\n    e.preventDefault();\n    this.setState({\n      date: this.state.date.clone().add(1, 'year')\n    });\n  },\n\n  render: function () {\n    return (\n      <div>\n        <a href=\"#\" className=\"prevYear\" onClick={this.handlePrevYear}>\n          Prev Year\n        </a>\n        <a href=\"#\" className=\"nextYear\" onClick={this.handleNextYear}>\n          Next Year\n        </a>\n        <Calendar weekNumbers={ true }\n                  startDate={ this.state.date }\n                  date={ this.state.date }\n                  endDate={ this.state.date.clone().endOf('year') }\n                  mods={\n                  [\n                    {\n                      date: moment(),\n                      classNames: [ 'current' ],\n                      component: [ 'day', 'month', 'week' ]\n                    },\n                    {\n                      startDate: moment().add(3, 'days'),\n                      endDate: moment().add(7, 'days'),\n                      classNames: [ 'longEvent' ],\n                      component: [ 'day' ]\n                    },\n                    {\n                      date: moment().add(3, 'days'),\n                      classNames: [ 'appointment' ],\n                      component: [ 'day' ]\n                    },\n                    {\n                      date: moment().add(4, 'days'),\n                      classNames: [ 'event', 'warning' ],\n                      component: [ 'day' ],\n                      events: {\n                        onClick: (date, e) => alert(`${date.format('dddd')}'s event!`)\n                      }\n                    },\n                    {\n                      date: moment().add(5, 'days'),\n                      classNames: [ 'event' ],\n                      component: [ 'day' ]\n                    },\n                    {\n                      component: 'day',\n                      events: {\n                        onClick: (date, e) => alert(date.format())\n                      }\n                    }\n                  ]\n                } />\n      </div>\n    );\n  }\n});\n\nReactDOM.render(\n  <PagingCalendar />,\n  document.getElementById('app')\n);\n"
  },
  {
    "path": "dist/react-calendar.js",
    "content": "(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"), require(\"moment\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\", \"moment\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ReactCalendar\"] = factory(require(\"react\"), require(\"moment\"));\n\telse\n\t\troot[\"ReactCalendar\"] = factory(root[\"React\"], root[\"moment\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_2__, __WEBPACK_EXTERNAL_MODULE_3__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\n\tvar _Calendar = __webpack_require__(1);\n\n\tObject.defineProperty(exports, 'Calendar', {\n\t  enumerable: true,\n\t  get: function get() {\n\t    return _interopRequireDefault(_Calendar).default;\n\t  }\n\t});\n\n\tvar _Month = __webpack_require__(6);\n\n\tObject.defineProperty(exports, 'Month', {\n\t  enumerable: true,\n\t  get: function get() {\n\t    return _interopRequireDefault(_Month).default;\n\t  }\n\t});\n\n\tvar _Week = __webpack_require__(8);\n\n\tObject.defineProperty(exports, 'Week', {\n\t  enumerable: true,\n\t  get: function get() {\n\t    return _interopRequireDefault(_Week).default;\n\t  }\n\t});\n\n\tvar _Day = __webpack_require__(9);\n\n\tObject.defineProperty(exports, 'Day', {\n\t  enumerable: true,\n\t  get: function get() {\n\t    return _interopRequireDefault(_Day).default;\n\t  }\n\t});\n\n\tvar _util = __webpack_require__(5);\n\n\tObject.defineProperty(exports, 'util', {\n\t  enumerable: true,\n\t  get: function get() {\n\t    return _interopRequireDefault(_util).default;\n\t  }\n\t});\n\n\tvar _dateUtils = __webpack_require__(7);\n\n\tObject.defineProperty(exports, 'dateUtils', {\n\t  enumerable: true,\n\t  get: function get() {\n\t    return _interopRequireDefault(_dateUtils).default;\n\t  }\n\t});\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\n\tvar _react = __webpack_require__(2);\n\n\tvar _react2 = _interopRequireDefault(_react);\n\n\tvar _moment2 = __webpack_require__(3);\n\n\tvar _moment3 = _interopRequireDefault(_moment2);\n\n\tvar _classnames = __webpack_require__(4);\n\n\tvar _classnames2 = _interopRequireDefault(_classnames);\n\n\tvar _util = __webpack_require__(5);\n\n\tvar _Month = __webpack_require__(6);\n\n\tvar _Month2 = _interopRequireDefault(_Month);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\tfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\tvar Calendar = function (_Component) {\n\t  _inherits(Calendar, _Component);\n\n\t  function Calendar(props, context) {\n\t    _classCallCheck(this, Calendar);\n\n\t    return _possibleConstructorReturn(this, Object.getPrototypeOf(Calendar).call(this, props, context));\n\t  }\n\n\t  _createClass(Calendar, [{\n\t    key: 'moment',\n\t    value: function moment() {\n\t      var localMoment = _moment3.default.apply(null, arguments);\n\n\t      localMoment.locale(this.props.locale);\n\n\t      return localMoment;\n\t    }\n\t  }, {\n\t    key: 'renderHeader',\n\t    value: function renderHeader() {\n\t      return _react2.default.createElement(\n\t        'header',\n\t        { key: 'header', className: (0, _classnames2.default)('rc-Calendar-header') },\n\t        this.moment(this.props.date).format(this.props.yearHeaderFormat)\n\t      );\n\t    }\n\t  }, {\n\t    key: 'getMonthRange',\n\t    value: function getMonthRange() {\n\t      var focus = this.moment(this.props.date || this.props.startDate).startOf('month');\n\t      var start = this.moment(this.props.startDate);\n\t      var end = this.moment(this.props.endDate);\n\t      var size = end.diff(start, 'month') + 1;\n\n\t      return Array(size).fill(0).map(function (n, i) {\n\t        return focus.clone().add(n + i, 'months');\n\t      });\n\t    }\n\t  }, {\n\t    key: 'render',\n\t    value: function render() {\n\t      var _this2 = this;\n\n\t      var mods = this.props.mods;\n\n\t      var monthMods = (0, _util.getModsByCompType)('month', mods);\n\t      var weekMods = (0, _util.getModsByCompType)('week', mods);\n\t      var dayMods = (0, _util.getModsByCompType)('day', mods);\n\n\t      return _react2.default.createElement(\n\t        'div',\n\t        null,\n\t        this.renderHeader(),\n\t        this.getMonthRange().map(function (date, i) {\n\t          return _react2.default.createElement(_Month2.default, { key: 'month-' + i,\n\t            date: date,\n\t            weekNumbers: _this2.props.weekNumbers,\n\t            mods: monthMods,\n\t            week: weekMods,\n\t            day: dayMods });\n\t        })\n\t      );\n\t    }\n\t  }]);\n\n\t  return Calendar;\n\t}(_react.Component);\n\n\tCalendar.propTypes = {\n\t  startDate: _react.PropTypes.object.isRequired,\n\t  endDate: _react.PropTypes.object.isRequired,\n\t  weekNumbers: _react.PropTypes.bool,\n\t  locale: _react.PropTypes.string,\n\t  month: _react.PropTypes.array,\n\t  yearHeaderFormat: _react.PropTypes.string\n\t};\n\tCalendar.defaultProps = {\n\t  locale: 'en',\n\t  yearHeaderFormat: 'YYYY'\n\t};\n\texports.default = Calendar;\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_2__;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_3__;\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n\t  Copyright (c) 2016 Jed Watson.\n\t  Licensed under the MIT License (MIT), see\n\t  http://jedwatson.github.io/classnames\n\t*/\n\t/* global define */\n\n\t(function () {\n\t\t'use strict';\n\n\t\tvar hasOwn = {}.hasOwnProperty;\n\n\t\tfunction classNames () {\n\t\t\tvar classes = [];\n\n\t\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\t\tvar arg = arguments[i];\n\t\t\t\tif (!arg) continue;\n\n\t\t\t\tvar argType = typeof arg;\n\n\t\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\t\tclasses.push(arg);\n\t\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\t\tclasses.push(classNames.apply(null, arg));\n\t\t\t\t} else if (argType === 'object') {\n\t\t\t\t\tfor (var key in arg) {\n\t\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn classes.join(' ');\n\t\t}\n\n\t\tif (typeof module !== 'undefined' && module.exports) {\n\t\t\tmodule.exports = classNames;\n\t\t} else if (true) {\n\t\t\t// register as 'classnames', consistent with npm package name\n\t\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {\n\t\t\t\treturn classNames;\n\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\t} else {\n\t\t\twindow.classNames = classNames;\n\t\t}\n\t}());\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\tfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n\tvar bindEvents = function bindEvents(events, date) {\n\t  var boundEvents = {};\n\n\t  if (!events) return null;\n\n\t  Object.keys(events).forEach(function (key) {\n\t    return boundEvents[key] = events[key].bind(null, date);\n\t  });\n\n\t  return boundEvents;\n\t};\n\n\tvar getClsMods = function getClsMods(clsPrefix, mods) {\n\t  return !mods || !mods.classNames ? null : mods.classNames.map(function (cls) {\n\t    return clsPrefix + '--' + cls;\n\t  });\n\t};\n\n\t/**\n\t  * Internal: Creates a single modifier object for a date\n\t  */\n\tvar getModByDate = function getModByDate(mods, date, type) {\n\t  var modifier = {\n\t    date: null,\n\t    classNames: [],\n\t    events: {}\n\t  };\n\n\t  mods.filter(function (mod) {\n\t    return mod.date ? mod.date.isSame(date, type) : null;\n\t  }).forEach(function (_mod) {\n\t    modifier.date = _mod.date;\n\t    modifier.events = _mod.events;\n\t    if (Array.isArray(_mod.classNames)) {\n\t      var _modifier$classNames;\n\n\t      (_modifier$classNames = modifier.classNames).push.apply(_modifier$classNames, _toConsumableArray(_mod.classNames));\n\t    }\n\t  });\n\n\t  return modifier;\n\t};\n\n\tvar getModsWithDateRange = function getModsWithDateRange(mods) {\n\t  return mods.filter(function (mod) {\n\t    return !!mod.startDate;\n\t  });\n\t};\n\n\tvar explodeDateRanges = function explodeDateRanges(mods) {\n\t  return mods.map(function (mod) {\n\t    var diff = mod.endDate.diff(mod.startDate, 'days');\n\n\t    if (!diff) {\n\t      // if the diff is 0 just return the mod\n\t      mod.date = mod.startDate.clone();\n\t      return mod;\n\t    }\n\n\t    return Array(diff).fill(mod).map(function (mod, i) {\n\t      return _extends({}, mod, {\n\t        date: mod.startDate.clone().add(i, 'days')\n\t      });\n\t    });\n\t  }).reduce(function (a, b) {\n\t    return a.concat(b);\n\t  }, []);\n\t};\n\n\t// const getModsWithSingleDate = (mods) =>\n\t// mods.filter((mod) => !mod.startDate && mod.date)\n\n\tvar getModsWithoutDate = function getModsWithoutDate(mods) {\n\t  return mods.filter(function (mod) {\n\t    return !mod.date;\n\t  });\n\t};\n\n\tvar getModsByCompType = exports.getModsByCompType = function getModsByCompType(componentType, mods) {\n\t  if (!mods) {\n\t    return [];\n\t  }\n\n\t  return mods.filter(function (_ref) {\n\t    var component = _ref.component;\n\t    return component.indexOf(componentType.toLowerCase()) > -1;\n\t  });\n\t};\n\n\tvar getMods = exports.getMods = function getMods(mods, date, clsPrefix, type) {\n\t  if (!mods) {\n\t    return null;\n\t  }\n\n\t  var events = {};\n\t  var exploded = explodeDateRanges(getModsWithDateRange(mods));\n\t  var mod = getModByDate([].concat(_toConsumableArray(mods), _toConsumableArray(exploded)), date, type);\n\t  var clsMods = getClsMods(clsPrefix, mod) || [];\n\t  var clsCompMods = getClsMods(clsPrefix, getModsWithoutDate(mods)) || [];\n\n\t  getModsWithoutDate(mods).forEach(function (mod) {\n\t    return Object.assign(events, bindEvents(mod.events, date));\n\t  });\n\n\t  if (mod && mod.events) {\n\t    Object.assign(events, bindEvents(mod.events, date));\n\t  }\n\n\t  return { clsMods: [].concat(_toConsumableArray(clsMods), _toConsumableArray(clsCompMods)), events: events };\n\t};\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\tvar _react = __webpack_require__(2);\n\n\tvar _react2 = _interopRequireDefault(_react);\n\n\tvar _classnames = __webpack_require__(4);\n\n\tvar _classnames2 = _interopRequireDefault(_classnames);\n\n\tvar _dateUtils = __webpack_require__(7);\n\n\tvar _util = __webpack_require__(5);\n\n\tvar _Week = __webpack_require__(8);\n\n\tvar _Week2 = _interopRequireDefault(_Week);\n\n\tvar _Day = __webpack_require__(9);\n\n\tvar _Day2 = _interopRequireDefault(_Day);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar clsPrefix = 'rc-Month';\n\n\tvar renderWeekHeader = function renderWeekHeader(props) {\n\t  return _react2.default.createElement(\n\t    'div',\n\t    { className: clsPrefix + '-weekdays' },\n\t    (0, _dateUtils.daysOfWeek)(props.date).map(function (weekday, i) {\n\t      return _react2.default.createElement(\n\t        'div',\n\t        { key: 'weekday-header-' + i, className: (0, _classnames2.default)(clsPrefix + '-weekdays-weekday') },\n\t        weekday.format(props.weekdayFormat)\n\t      );\n\t    })\n\t  );\n\t};\n\n\tvar renderHeader = function renderHeader(props) {\n\t  if (props.renderHeader) {\n\t    return props.renderHeader(props);\n\t  }\n\n\t  if (!props.monthNames) {\n\t    return null;\n\t  }\n\n\t  return _react2.default.createElement(\n\t    'header',\n\t    { key: 'header', className: (0, _classnames2.default)(clsPrefix + '-header') },\n\t    props.date.format(props.monthNameFormat)\n\t  );\n\t};\n\n\tvar Month = function Month(props) {\n\t  var date = props.date;\n\t  var weekNumbers = props.weekNumbers;\n\n\t  var edges = (0, _dateUtils.monthEdges)(date);\n\n\t  var mods = props.mods;\n\t  var day = props.day;\n\t  var week = props.week;\n\n\t  var clsMods = void 0,\n\t      events = void 0;\n\n\t  if (!props.day) {\n\t    day = (0, _util.getModsByCompType)('day', mods);\n\t  }\n\n\t  if (!props.week) {\n\t    week = (0, _util.getModsByCompType)('week', mods);\n\t  }\n\n\t  if (!props.day || !props.week) {\n\t    // this means we're probably just rendering a single month and need to filter our component types again.\n\t    mods = (0, _util.getModsByCompType)('month', mods);\n\t  }\n\n\t  var fWeekMods = week.filter(function (mod, j) {\n\t    return mod.date ? mod.date.isSame(date, 'month') : true;\n\t  });\n\t  var fDayMods = day.filter(function (mod, k) {\n\t    return mod.date ? mod.date.isSame(date, 'month') : true;\n\t  });\n\n\t  var modifiers = (0, _util.getMods)(mods, date, clsPrefix, 'month');\n\n\t  if (modifiers) {\n\t    clsMods = modifiers.clsMods;\n\t    events = modifiers.events;\n\t  }\n\n\t  return _react2.default.createElement(\n\t    'div',\n\t    _extends({ className: (0, _classnames2.default)(clsPrefix, clsMods) }, events),\n\t    renderHeader(props),\n\t    renderWeekHeader(props),\n\t    (0, _dateUtils.weeksOfMonth)(props.date).map(function (wDate, i) {\n\t      return _react2.default.createElement(_Week2.default, { key: 'week-' + i,\n\t        date: wDate,\n\t        edges: edges,\n\t        weekNumbers: weekNumbers,\n\t        mods: fWeekMods,\n\t        day: fDayMods });\n\t    })\n\t  );\n\t};\n\n\tMonth.propTypes = {\n\t  monthNames: _react.PropTypes.bool,\n\t  monthNameFormat: _react.PropTypes.string,\n\t  weekdayNames: _react.PropTypes.bool,\n\t  weekdayFormat: _react.PropTypes.string,\n\t  mod: _react.PropTypes.object\n\t};\n\n\tMonth.defaultProps = {\n\t  monthNames: true,\n\t  monthNameFormat: 'MMMM YYYY',\n\t  weekdayNames: true,\n\t  weekdayFormat: 'dd'\n\t};\n\n\texports.default = Month;\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.weeksOfMonth = weeksOfMonth;\n\texports.monthEdges = monthEdges;\n\texports.daysOfWeek = daysOfWeek;\n\n\tvar _moment = __webpack_require__(3);\n\n\tvar _moment2 = _interopRequireDefault(_moment);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/** Returns moment objects for first day of each week of the month.\n\t *  Can return moments from previous month if week start is in them.\n\t *  @param {string|Date|moment} month any date in a month to create weeks for\n\t */\n\tfunction weeksOfMonth(month) {\n\t  var thisMonth = month.month();\n\t  var weeks = [];\n\n\t  month = (0, _moment2.default)(month).startOf('month').startOf('week');\n\n\t  do {\n\t    weeks.push(month.clone());\n\t    month.add(1, 'week');\n\t  } while (month.month() === thisMonth);\n\n\t  return weeks;\n\t}\n\n\t/** Returns moments for each day that is not in the month, but is part of\n\t *  weeks that are.\n\t *  Week contents is locale aware.\n\t *  @param {string|Date|moment} moment any date in the target month\n\t */\n\tfunction monthEdges(month) {\n\t  var start = (0, _moment2.default)(month).startOf('month').startOf('week');\n\t  var end = (0, _moment2.default)(month).endOf('month').endOf('week');\n\n\t  var result = [];\n\n\t  while (start.month() !== month.month()) {\n\t    result.push(start.clone());\n\t    start.add(1, 'day');\n\t  }\n\n\t  while (end.month() !== month.month()) {\n\t    result.push(end.clone());\n\t    end.subtract(1, 'day');\n\t  }\n\n\t  return result;\n\t}\n\n\t/** Returns moment objects for each day of the week.\n\t *  Ordering is locale aware.\n\t *  @param {string|Date|moment} week any date in a week to create days for\n\t */\n\tfunction daysOfWeek(week) {\n\t  week = (0, _moment2.default)(week).startOf('week');\n\n\t  return Array(7).fill(0).map(function (n, i) {\n\t    return week.clone().add(n + i, 'day');\n\t  });\n\t}\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\tvar _react = __webpack_require__(2);\n\n\tvar _react2 = _interopRequireDefault(_react);\n\n\tvar _classnames = __webpack_require__(4);\n\n\tvar _classnames2 = _interopRequireDefault(_classnames);\n\n\tvar _util = __webpack_require__(5);\n\n\tvar _dateUtils = __webpack_require__(7);\n\n\tvar _Day = __webpack_require__(9);\n\n\tvar _Day2 = _interopRequireDefault(_Day);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar clsPrefix = 'rc-Week';\n\n\tvar makeWeekNumber = function makeWeekNumber(props) {\n\t  if (!props.weekNumbers) {\n\t    return null;\n\t  }\n\n\t  return _react2.default.createElement(\n\t    'div',\n\t    { key: 'weekNumber', className: (0, _classnames2.default)(clsPrefix + '-number') },\n\t    props.date.format(props.weekNumberFormat)\n\t  );\n\t};\n\n\tvar renderWeekHeader = function renderWeekHeader(props) {\n\t  if (!props.weekHeader) {\n\t    return null;\n\t  }\n\n\t  return _react2.default.createElement(\n\t    'div',\n\t    { className: clsPrefix + '-weekdays' },\n\t    (0, _dateUtils.daysOfWeek)(props.date).map(function (weekday, i) {\n\t      return _react2.default.createElement(\n\t        'div',\n\t        { key: 'weekday-header-' + i, className: (0, _classnames2.default)(clsPrefix + '-weekdays-weekday') },\n\t        weekday.format(props.weekdayFormat)\n\t      );\n\t    })\n\t  );\n\t};\n\n\tvar Week = function Week(props) {\n\t  var mods = props.mods;\n\t  var date = props.date;\n\t  var clsMods = void 0;var events = void 0;var week = void 0;var day = props.day;\n\n\n\t  week = (0, _util.getModsByCompType)('week', mods);\n\t  var modifiers = (0, _util.getMods)(week, date, clsPrefix, 'week');\n\n\t  if (modifiers) {\n\t    clsMods = modifiers.clsMods;\n\t    events = modifiers.events;\n\t  }\n\n\t  if (!props.day) {\n\t    day = (0, _util.getModsByCompType)('day', mods);\n\t  }\n\n\t  return _react2.default.createElement(\n\t    'div',\n\t    _extends({ key: 'days', className: (0, _classnames2.default)(clsPrefix, clsMods) }, events),\n\t    renderWeekHeader(props),\n\t    makeWeekNumber(props),\n\t    _react2.default.createElement(\n\t      'div',\n\t      { className: (0, _classnames2.default)(clsPrefix + '-days') },\n\t      (0, _dateUtils.daysOfWeek)(props.date).map(function (date, i) {\n\t        var outside = void 0;\n\n\t        if (props.edges) {\n\t          outside = Boolean(props.edges.find(function (edge, j) {\n\t            return edge.isSame(date, 'month', 'week', 'year');\n\t          }));\n\t        }\n\n\t        return _react2.default.createElement(_Day2.default, { outside: !!outside, key: 'day-' + i, date: date, mods: day });\n\t      })\n\t    )\n\t  );\n\t};\n\n\tWeek.propTypes = {\n\t  weekHeader: _react.PropTypes.bool,\n\t  weekNumbers: _react.PropTypes.bool,\n\t  weekNumberFormat: _react.PropTypes.string,\n\t  weekdayFormat: _react.PropTypes.string\n\t};\n\n\tWeek.defaultProps = {\n\t  weekHeader: false,\n\t  weekNumbers: false,\n\t  weekNumberFormat: 'w',\n\t  weekdayFormat: 'dd'\n\t};\n\n\texports.default = Week;\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\tvar _react = __webpack_require__(2);\n\n\tvar _react2 = _interopRequireDefault(_react);\n\n\tvar _classnames = __webpack_require__(4);\n\n\tvar _classnames2 = _interopRequireDefault(_classnames);\n\n\tvar _util = __webpack_require__(5);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar clsPrefix = 'rc-Day';\n\n\tvar renderHeader = function renderHeader(props) {\n\t  if (!props.dayHeader) {\n\t    return null;\n\t  }\n\n\t  return _react2.default.createElement(\n\t    'header',\n\t    { className: clsPrefix + '-Day-header' },\n\t    props.date.format(props.dayHeaderFormat)\n\t  );\n\t};\n\n\tvar renderAgenda = function renderAgenda(props) {\n\t  if (!props.dayAgenda) {\n\t    return null;\n\t  }\n\n\t  return _react2.default.createElement(\n\t    'div',\n\t    { key: 'agenda', className: clsPrefix + '-Day-agenda' },\n\t    props.children\n\t  );\n\t};\n\n\tvar Day = function Day(props) {\n\t  var clsPrefix = 'rc-Day';\n\t  var date = props.date;\n\t  var mods = props.mods;\n\t  var outside = props.outside;\n\n\t  var modifiers = (0, _util.getMods)(mods, date, clsPrefix, 'day');\n\n\t  var clsMods = void 0,\n\t      events = void 0;\n\n\t  if (modifiers) {\n\t    clsMods = modifiers.clsMods;\n\t    events = modifiers.events;\n\t  }\n\n\t  var clsDay = (0, _classnames2.default)(clsPrefix, { 'rc-Day--outside': outside }, clsMods);\n\n\t  return _react2.default.createElement(\n\t    'div',\n\t    _extends({ className: clsDay }, events),\n\t    renderHeader(props),\n\t    date.format(props.dayFormat),\n\t    renderAgenda(props)\n\t  );\n\t};\n\n\tDay.propTypes = {\n\t  date: _react2.default.PropTypes.object.isRequired,\n\t  dayAgenda: _react2.default.PropTypes.bool,\n\t  dayHeader: _react2.default.PropTypes.bool,\n\t  dayHeaderFormat: _react2.default.PropTypes.string,\n\t  dayFormat: _react2.default.PropTypes.string,\n\t  mods: _react.PropTypes.array\n\t};\n\n\tDay.defaultProps = {\n\t  dayAgenda: false,\n\t  dayHeader: false,\n\t  dayHeaderFormat: 'MMM Do',\n\t  dayFormat: 'D'\n\t};\n\n\texports.default = Day;\n\n/***/ }\n/******/ ])\n});\n;"
  },
  {
    "path": "index.html",
    "content": "<!DOCTYPE html>\n<head>\n  <title>\n    react-calendar demos\n  </title>\n  <style>\n    #app {\n      width: 1068px;\n    }\n    .nextYear {\n      float: right;\n    }\n  </style>\n<body>\n  <nav class=\"navbar navbar-default\" role=\"navigation\">\n  <div class=\"container-fluid\">\n    <div class=\"navbar-header\">\n      <a class=\"navbar-brand\" href=\"#\">react-calendar examples</a>\n    </div>\n  </div>\n  </nav>\n  <div class=\"container-fluid\">\n    <div id=\"app\"></div>\n  </div>\n  <script src=\"//cdnjs.cloudflare.com/ajax/libs/react/15.0.1/react.js\"></script>\n  <script src=\"//cdnjs.cloudflare.com/ajax/libs/react/15.0.1/react-dom.js\"></script>\n  <script src=\"//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.3/moment-with-locales.min.js\"></script>\n  <script src=\"react-calendar.js\"></script>\n</body>\n"
  },
  {
    "path": "less/bootstrap-theme.less",
    "content": "// Sample bootstrap theme for react-calendar\n\n@import '~bootstrap/less/bootstrap.less';\n@import '~bootstrap/less/theme.less';\n\n.cell {\n  display: inline-block;\n  width: 32px;\n  height: 32px;\n  padding: 5px;\n  text-align: center;\n}\n\n.rc {\n  &-Calendar {\n    &-header {\n      text-align: center;\n      font-weight: bolder;\n    }\n  }\n  &-Month {\n    display: inline-block;\n    vertical-align: top;\n    margin: 0 0 10px 10px;\n    &-header {\n      text-align: center;\n      font-weight: bolder;\n    }\n    &-weekdays {\n      margin-left: 32px;\n      &-weekday {\n        .cell();\n        font-weight: bolder;\n      }\n    }\n    &--current {\n      .rc-Month-header {\n        color: @brand-primary;\n      }\n    }\n  }\n  &-Week {\n    height: 32px;\n    &-number {\n      color: @gray-light;\n      .cell();\n    }\n    &-days {\n      border-left: 1px solid @gray-lighter;\n      border-top: 1px solid @gray-lighter;\n      display: inline-block;\n    }\n    &:last-child {\n      .rc-Week-days {\n        border-bottom: 1px solid @gray-lighter;\n      }\n    }\n    &--current {\n      background-color: @brand-info;\n    }\n  }\n  &-Day {\n    .cell();\n    border-right: 1px solid @gray-lighter;\n    cursor: pointer;\n    &:hover {\n      background-color: @brand-info;\n    }\n    &--outside {\n      cursor: default;\n      color: @gray-lighter;\n      &:hover {\n        background-color: transparent;\n      }\n    }\n    &--event {\n      background-color: @gray-lighter;\n    }\n    &--current {\n      background-color: @brand-primary;\n    }\n    &--longEvent {\n      background-color: @brand-success;\n    }\n    &--warning {\n      background-color: @brand-warning;\n    }\n  }\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"react-calendar\",\n  \"version\": \"1.1.0\",\n  \"author\": \"Mikhail <freiksenet@gmail.com> Novikov\",\n  \"description\": \"Calendar component for ReactJS\",\n  \"keywords\": [\n    \"react\",\n    \"react-component\",\n    \"calendar\",\n    \"browser\"\n  ],\n  \"license\": \"MIT\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/freiksenet/react-calendar.git\"\n  },\n  \"dependencies\": {\n    \"classnames\": \"^2.2.3\"\n  },\n  \"peerDependencies\": {\n    \"moment\": \"^2.8.3\",\n    \"react\": \"15.x\",\n    \"react-dom\": \"15.x\"\n  },\n  \"devDependencies\": {\n    \"babel-cli\": \"^6.5.1\",\n    \"babel-core\": \"^6.5.1\",\n    \"babel-eslint\": \"^4.1.8\",\n    \"babel-loader\": \"^6.2.2\",\n    \"babel-plugin-react-transform\": \"^2.0.0\",\n    \"babel-plugin-transform-runtime\": \"^6.5.0\",\n    \"babel-polyfill\": \"^6.5.0\",\n    \"babel-preset-es2015\": \"^6.5.0\",\n    \"babel-preset-react\": \"^6.5.0\",\n    \"babel-preset-stage-0\": \"^6.5.0\",\n    \"babel-runtime\": \"^6.5.0\",\n    \"bootstrap\": \"~3.2.0\",\n    \"chai\": \"^3.5.0\",\n    \"css-loader\": \"^0.23.1\",\n    \"enzyme\": \"^2.0.0\",\n    \"eslint-plugin-react\": \"^3.16.1\",\n    \"file-loader\": \"^0.7.2\",\n    \"isparta\": \"^4.0.0\",\n    \"jsx-loader\": \"^0.12.2\",\n    \"less\": \"^2.6.0\",\n    \"less-loader\": \"^2.2.2\",\n    \"mocha\": \"^2.4.5\",\n    \"moment\": \"^2.8.3\",\n    \"raw-loader\": \"^0.5.1\",\n    \"react\": \"15.x\",\n    \"react-dom\": \"15.x\",\n    \"react-addons-test-utils\": \"15.x\",\n    \"react-hot-loader\": \"^1.3.0\",\n    \"rimraf\": \"^2.5.2\",\n    \"style-loader\": \"^0.13.0\",\n    \"url-loader\": \"^0.5.5\",\n    \"webpack\": \"^1.4.3\",\n    \"webpack-dev-server\": \"^1.14.1\"\n  },\n  \"main\": \"./dist/react-calendar.js\",\n  \"scripts\": {\n    \"clean\": \"rimraf build dist\",\n    \"test\": \"npm run umd && NODE_ENV=test mocha\",\n    \"test:watch\": \"NODE_ENV=test mocha --watch\",\n    \"prepublish\": \"webpack\",\n    \"umd\": \"REACT_CALENDAR_WEBPACK=umd webpack\",\n    \"umd-min\": \"REACT_CALENDAR_WEBPACK=umd_min webpack\",\n    \"demo\": \"REACT_CALENDAR_WEBPACK=umd webpack --entry ./demo.js\",\n    \"start\": \"REACT_CALENDAR_WEBPACK=server webpack-dev-server -d --entry ./demo.js --hot --progress --colors --inline\",\n    \"gh-pages\": \"./scripts/gh-pages.sh\"\n  }\n}\n"
  },
  {
    "path": "react-calendar.js",
    "content": "export { default as Calendar } from './src/Calendar';\nexport { default as Month } from './src/Month';\nexport { default as Week } from './src/Week';\nexport { default as Day } from './src/Day';\nexport { default as util } from './src/util';\nexport { default as dateUtils } from './src/dateUtils';\n"
  },
  {
    "path": "scripts/gh-pages.sh",
    "content": "#!/bin/bash\n\nset -e\necho $(git rev-parse --show-toplevel) # to fail if we are in wrong place\ncd \"$(git rev-parse --show-toplevel)\"\nrm -rf build/\nnpm run demo\ncp index.html build/\ncd build/\ngit init .\ngit add .\ngit commit -m \"Update pages\"\ngit push git@github.com:freiksenet/react-calendar.git master:gh-pages --force\nrm -rf .git\n"
  },
  {
    "path": "src/Calendar.js",
    "content": "import React, { Component, PropTypes } from 'react';\nimport moment from 'moment';\nimport classnames from 'classnames';\nimport { getModsByCompType } from './util';\n\nimport Month from './Month';\n\nexport default class Calendar extends Component {\n  static propTypes = {\n    startDate: PropTypes.object.isRequired,\n    endDate: PropTypes.object.isRequired,\n    weekNumbers: PropTypes.bool,\n    locale: PropTypes.string,\n    month: PropTypes.array,\n    yearHeaderFormat: PropTypes.string\n  };\n\n  static defaultProps = {\n    locale: 'en',\n    yearHeaderFormat: 'YYYY'\n  };\n\n  constructor (props, context) {\n    super(props, context);\n  }\n\n  moment () {\n    const localMoment = moment.apply(null, arguments);\n\n    localMoment.locale(this.props.locale);\n\n    return localMoment;\n  }\n\n  renderHeader () {\n    return (\n      <header key=\"header\" className={classnames('rc-Calendar-header')}>\n        { this.moment(this.props.date).format(this.props.yearHeaderFormat) }\n      </header>\n    );\n  }\n\n  getMonthRange () {\n    const focus = this.moment(this.props.date || this.props.startDate).startOf('month');\n    const start = this.moment(this.props.startDate);\n    const end = this.moment(this.props.endDate);\n    const size = end.diff(start, 'month') + 1;\n\n    return Array(size).fill(0).map((n, i) => focus.clone().add(n + i, 'months'));\n  }\n\n  render () {\n    const { mods } = this.props;\n    const monthMods = getModsByCompType('month', mods);\n    let weekMods = getModsByCompType('week', mods);\n    let dayMods = getModsByCompType('day', mods);\n\n    return (\n      <div>\n        { this.renderHeader() }\n        {\n          this.getMonthRange().map((date, i) =>\n           <Month key={ `month-${i}` }\n                  date={ date }\n                  weekNumbers={ this.props.weekNumbers }\n                  mods={ monthMods }\n                  week={ weekMods }\n                  day={ dayMods } />\n          )\n        }\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "src/Day.js",
    "content": "import React, { PropTypes } from 'react';\nimport classnames from 'classnames';\n\nimport { getMods } from './util';\n\nconst clsPrefix = 'rc-Day';\n\nconst renderHeader = (props) => {\n  if (!props.dayHeader) {\n    return null;\n  }\n\n  return (\n    <header className={`${clsPrefix}-Day-header`}>\n      { props.date.format(props.dayHeaderFormat) }\n    </header>\n  );\n};\n\nconst renderAgenda = (props) => {\n  if (!props.dayAgenda) {\n    return null;\n  }\n\n  return (\n    <div key=\"agenda\" className={`${clsPrefix}-Day-agenda`}>\n      { props.children }\n    </div>\n  );\n};\n\nconst Day = (props) => {\n  const clsPrefix = 'rc-Day';\n  const { date, mods, outside } = props;\n  const modifiers = getMods(mods, date, clsPrefix, 'day');\n\n  let clsMods, events;\n\n  if (modifiers) {\n    clsMods = modifiers.clsMods;\n    events = modifiers.events;\n  }\n\n  const clsDay = classnames(clsPrefix, { 'rc-Day--outside': outside }, clsMods);\n\n  return (\n    <div className={ clsDay } { ...events }>\n      { renderHeader(props) }\n      { date.format(props.dayFormat) }\n      { renderAgenda(props) }\n    </div>\n  );\n};\n\nDay.propTypes = {\n  date: React.PropTypes.object.isRequired,\n  dayAgenda: React.PropTypes.bool,\n  dayHeader: React.PropTypes.bool,\n  dayHeaderFormat: React.PropTypes.string,\n  dayFormat: React.PropTypes.string,\n  mods: PropTypes.array\n};\n\nDay.defaultProps = {\n  dayAgenda: false,\n  dayHeader: false,\n  dayHeaderFormat: 'MMM Do',\n  dayFormat: 'D'\n};\n\nexport default Day;\n"
  },
  {
    "path": "src/Month.js",
    "content": "import React, { PropTypes } from 'react';\nimport classnames from 'classnames';\n\nimport { monthEdges, weeksOfMonth, daysOfWeek } from './dateUtils';\nimport { getMods, getModsByCompType } from './util';\nimport Week from './Week';\nimport Day from './Day';\n\nconst clsPrefix = 'rc-Month';\n\nconst renderWeekHeader = (props) => {\n  return (\n    if (!props.weekdayNames) {\n      return null;\n    }\n    \n    <div className={`${clsPrefix}-weekdays`}>\n      {\n        daysOfWeek(props.date).map((weekday, i) =>\n          <div key={ `weekday-header-${i}` } className={ classnames(`${clsPrefix}-weekdays-weekday`) }>\n            { weekday.format(props.weekdayFormat) }\n          </div>\n        )\n      }\n    </div>\n  );\n};\n\nconst renderHeader = (props) => {\n  if (props.renderHeader) {\n    return props.renderHeader(props);\n  }\n\n  if (!props.monthNames) {\n    return null;\n  }\n\n  return (\n    <header key=\"header\" className={ classnames(`${clsPrefix}-header`) }>\n      { props.date.format(props.monthNameFormat) }\n    </header>\n  );\n};\n\nconst Month = (props) => {\n  const { date, weekNumbers } = props;\n  const edges = monthEdges(date);\n\n  let { mods, day, week } = props;\n  let clsMods, events;\n\n  if (!props.day) {\n    day = getModsByCompType('day', mods);\n  }\n\n  if (!props.week) {\n    week = getModsByCompType('week', mods);\n  }\n\n  if (!props.day || !props.week) { // this means we're probably just rendering a single month and need to filter our component types again.\n    mods = getModsByCompType('month', mods);\n  }\n\n  let fWeekMods = week.filter((mod, j) => mod.date ? mod.date.isSame(date, 'month') : true);\n  let fDayMods = day.filter((mod, k) => mod.date ? mod.date.isSame(date, 'month') : true);\n\n  const modifiers = getMods(mods, date, clsPrefix, 'month');\n\n  if (modifiers) {\n    clsMods = modifiers.clsMods;\n    events = modifiers.events;\n  }\n\n  return (\n    <div className={ classnames(clsPrefix, clsMods) } { ...events }>\n      { renderHeader(props) }\n      { renderWeekHeader(props) }\n      {\n        weeksOfMonth(props.date).map((wDate, i) =>\n          <Week key={ `week-${i}` }\n                date={ wDate }\n                edges={ edges }\n                weekNumbers={ weekNumbers }\n                mods={ fWeekMods }\n                day={ fDayMods } />\n        )\n      }\n    </div>\n  );\n};\n\nMonth.propTypes = {\n  monthNames: PropTypes.bool,\n  monthNameFormat: PropTypes.string,\n  weekdayNames: PropTypes.bool,\n  weekdayFormat: PropTypes.string,\n  mod: PropTypes.object\n};\n\nMonth.defaultProps = {\n  monthNames: true,\n  monthNameFormat: 'MMMM YYYY',\n  weekdayNames: true,\n  weekdayFormat: 'dd'\n};\n\nexport default Month;\n"
  },
  {
    "path": "src/Week.js",
    "content": "import React, { PropTypes } from 'react';\nimport classnames from 'classnames';\n\nimport { getMods, getModsByCompType } from './util';\nimport { daysOfWeek } from './dateUtils';\nimport Day from './Day';\n\nconst clsPrefix = 'rc-Week';\n\nconst makeWeekNumber = (props) => {\n  if (!props.weekNumbers) {\n    return null;\n  }\n\n  return (\n    <div key=\"weekNumber\" className={ classnames(`${clsPrefix}-number`) }>\n      { props.date.format(props.weekNumberFormat) }\n    </div>\n  );\n};\n\nconst renderWeekHeader = (props) => {\n  if (!props.weekHeader) {\n    return null;\n  }\n\n  return (\n    <div className={`${clsPrefix}-weekdays`}>\n      {\n        daysOfWeek(props.date).map((weekday, i) =>\n          <div key={ `weekday-header-${i}` } className={ classnames(`${clsPrefix}-weekdays-weekday`) }>\n            { weekday.format(props.weekdayFormat) }\n          </div>\n        )\n      }\n    </div>\n  );\n};\n\nconst Week = (props) => {\n  const { mods, date } = props;\n  let clsMods, events, week, { day } = props;\n\n  week = getModsByCompType('week', mods);\n  const modifiers = getMods(week, date, clsPrefix, 'week');\n\n  if (modifiers) {\n    clsMods = modifiers.clsMods;\n    events = modifiers.events;\n  }\n\n  if (!props.day) {\n    day = getModsByCompType('day', mods);\n  }\n\n  return (\n    <div key=\"days\" className={ classnames(clsPrefix, clsMods) } { ...events }>\n      { renderWeekHeader(props) }\n      { makeWeekNumber(props) }\n      <div className={ classnames(`${clsPrefix}-days`) }>\n        {\n          daysOfWeek(props.date).map((date, i) => {\n            let outside;\n\n            if (props.edges) {\n              outside = Boolean(props.edges.find((edge, j) => edge.isSame(date, 'month', 'week', 'year')));\n            }\n\n            return <Day outside={ !!outside } key={ `day-${i}` } date={ date } mods={ day } />\n          })\n        }\n      </div>\n    </div>\n  );\n};\n\nWeek.propTypes = {\n  weekHeader: PropTypes.bool,\n  weekNumbers: PropTypes.bool,\n  weekNumberFormat: PropTypes.string,\n  weekdayFormat: PropTypes.string,\n};\n\nWeek.defaultProps = {\n  weekHeader: false,\n  weekNumbers: false,\n  weekNumberFormat: 'w',\n  weekdayFormat: 'dd',\n};\n\nexport default Week;\n"
  },
  {
    "path": "src/dateUtils.js",
    "content": "'use strict';\n\nimport moment from 'moment';\n\n/** Returns moment objects for first day of each week of the month.\n *  Can return moments from previous month if week start is in them.\n *  @param {string|Date|moment} month any date in a month to create weeks for\n */\nexport function weeksOfMonth (month) {\n  const thisMonth = month.month();\n  const weeks = [];\n\n  month = moment(month).startOf('month').startOf('week');\n\n  do {\n    weeks.push(month.clone());\n    month.add(1, 'week');\n  } while (month.month() === thisMonth)\n\n  return weeks;\n}\n\n/** Returns moments for each day that is not in the month, but is part of\n *  weeks that are.\n *  Week contents is locale aware.\n *  @param {string|Date|moment} moment any date in the target month\n */\nexport function monthEdges (month) {\n  const start = moment(month).startOf('month').startOf('week');\n  const end = moment(month).endOf('month').endOf('week');\n\n  const result = [];\n\n  while (start.month() !== month.month()) {\n    result.push(start.clone());\n    start.add(1, 'day');\n  }\n\n  while (end.month() !== month.month()) {\n    result.push(end.clone());\n    end.subtract(1, 'day');\n  }\n\n  return result;\n}\n\n/** Returns moment objects for each day of the week.\n *  Ordering is locale aware.\n *  @param {string|Date|moment} week any date in a week to create days for\n */\nexport function daysOfWeek (week) {\n  week = moment(week).startOf('week');\n\n  return Array(7).fill(0).map((n, i) => week.clone().add(n + i, 'day'));\n}\n"
  },
  {
    "path": "src/util.js",
    "content": "const bindEvents = (events, date) => {\n  const boundEvents = {};\n\n  if (!events) return null;\n\n  Object.keys(events)\n    .forEach((key) => boundEvents[key] = events[key].bind(null, date));\n\n  return boundEvents;\n}\n\nconst getClsMods = (clsPrefix, mods) =>\n  !mods || !mods.classNames ? null : mods.classNames.map((cls) => `${clsPrefix}--${cls}`);\n\n/**\n  * Internal: Creates a single modifier object for a date\n  */\nconst getModByDate = (mods, date, type) => {\n  const modifier = {\n    date: null,\n    classNames: [],\n    events: {}\n  };\n\n  mods.filter((mod) => mod.date ? mod.date.isSame(date, type) : null)\n    .forEach((_mod) => {\n      modifier.date = _mod.date;\n      modifier.events = _mod.events;\n      if (Array.isArray(_mod.classNames)) {\n        modifier.classNames.push(..._mod.classNames);\n      }\n    });\n\n  return modifier;\n}\n\nconst getModsWithDateRange = (mods) =>\n  mods.filter((mod) => !!mod.startDate)\n\nconst explodeDateRanges = (mods) => {\n  return mods.map((mod) => {\n    const diff = mod.endDate.diff(mod.startDate, 'days');\n\n    if (!diff) { // if the diff is 0 just return the mod\n      mod.date = mod.startDate.clone();\n      return mod;\n    }\n\n    return Array(diff).fill(mod).map((mod, i) => {\n      return {\n        ...mod,\n        date: mod.startDate.clone().add(i, 'days')\n      }\n    });\n  })\n  .reduce((a, b) => a.concat(b), []);\n}\n\nconst getModsWithSingleDate = (mods) =>\n  mods.filter((mod) => !mod.startDate && mod.date)\n\nconst getModsWithoutDate = (mods) =>\n  mods.filter((mod) => !mod.date)\n\nexport const getModsByCompType = (componentType, mods) => {\n  if (!Array.isArray(mods)) {\n    return [];\n  }\n\n  return mods.filter(({ component }) => component.indexOf(componentType.toLowerCase()) > -1)\n};\n\nexport const getMods = (mods, date, clsPrefix, type) => {\n  if (!mods) {\n    return null;\n  }\n\n  const events = {};\n  const exploded = explodeDateRanges(getModsWithDateRange(mods));\n  const mod = getModByDate([ ...mods, ...exploded ], date, type);\n  const clsMods = getClsMods(clsPrefix, mod) || [];\n  const clsCompMods = getClsMods(clsPrefix, getModsWithoutDate(mods)) || [];\n\n  getModsWithoutDate(mods)\n    .forEach((mod) => Object.assign(events, bindEvents(mod.events, date)));\n\n  if (mod && mod.events) {\n    Object.assign(events, bindEvents(mod.events, date));\n  }\n\n  return { clsMods: [ ...clsMods, ...clsCompMods ], events };\n};\n"
  },
  {
    "path": "test/Calendar.spec.js",
    "content": "import React from 'react';\nimport { expect } from 'chai';\nimport { shallow } from 'enzyme';\n\nimport moment from 'moment';\nimport Calendar from '../src/Calendar';\n\ndescribe('<Calendar />', () => {\n  let wrapper;\n  before(() => {\n    const date = moment().startOf('year');\n\n    wrapper = shallow(<Calendar date={ date }\n               weekNumbers={ true }\n               startDate={ date }\n               endDate={ date.clone().endOf('year') }\n               mods={\n                 [\n                   {\n                     date: moment(),\n                     classNames: [ 'current' ],\n                     component: [ 'day', 'month', 'week' ]\n                   },\n                   {\n                     date: moment().add(3, 'days'),\n                     classNames: [ 'event' ],\n                     component: [ 'day' ]\n                   },\n                   {\n                     date: moment().add(4, 'days'),\n                     classNames: [ 'event', 'warning' ],\n                     component: [ 'day' ],\n                     events: {\n                       onClick: (date, e) => alert(`${date.format('dddd')}'s event!`)\n                     }\n                   },\n                   {\n                     date: moment().add(5, 'days'),\n                     classNames: [ 'event' ],\n                     component: [ 'day' ]\n                   },\n                   {\n                     component: 'day',\n                     events: {\n                       onClick: (date, e) => alert(date.format())\n                     }\n                   }\n                 ]\n               } />);\n  });\n\n  it('should render a year', () => {\n    expect(wrapper.find('Month')).to.have.length(12);\n  });\n});\n"
  },
  {
    "path": "test/Day.spec.js",
    "content": "import React from 'react';\nimport { expect } from 'chai';\nimport { shallow } from 'enzyme';\n\nimport moment from 'moment';\nimport Day from '../src/Day';\n\ndescribe('<Day />', () => {\n  let wrapper;\n  before(() => {\n    wrapper = shallow(<Day date={ moment() } />);\n  });\n\n  it('should render a single <Day />', () => {\n    expect(wrapper.find('.rc-Day')).to.have.length(1);\n  });\n});\n"
  },
  {
    "path": "test/Month.spec.js",
    "content": "import React from 'react';\nimport { expect } from 'chai';\nimport { shallow } from 'enzyme';\n\nimport moment from 'moment';\nimport Month from '../src/Month';\n\ndescribe('<Month />', () => {\n  let wrapper;\n  before(() => {\n    wrapper = shallow(<Month date={ moment() } />);\n  });\n\n  it('should render 4 or 5 weeks depending on the month', () => {\n    expect(wrapper.find('Week').length).to.be.gte(4);\n  });\n});\n"
  },
  {
    "path": "test/Week.spec.js",
    "content": "import React from 'react';\nimport { expect } from 'chai';\nimport { shallow } from 'enzyme';\n\nimport moment from 'moment';\nimport Week from '../src/Week';\n\ndescribe('<Week />', () => {\n  let wrapper;\n  before(() => {\n    wrapper = shallow(<Week date={ moment() } />);\n  });\n\n  it('should render 7 <Day />\\'s', () => {\n    expect(wrapper.find('Day')).to.have.length(7);\n  });\n});\n"
  },
  {
    "path": "test/mocha.opts",
    "content": "--compilers js:babel-core/register\n--recursive\n"
  },
  {
    "path": "test/utils/document.js",
    "content": "if (typeof document === 'undefined') {\n  global.document = {};\n}\n"
  },
  {
    "path": "webpack.config.js",
    "content": "var webpack = require('webpack');\n\nvar config = {\n  entry: './react-calendar.js',\n  output: {\n    path: 'dist',\n    filename: 'react-calendar.js',\n    library: 'ReactCalendar',\n    libraryTarget: 'umd'\n  },\n  module: {\n    loaders: [\n      {\n        test: /\\.js$/,\n        loader: 'babel?presets[]=react,presets[]=es2015,presets[]=stage-0',\n        exclude: [ /node_modules/, /.less$/, 'demo.js' ]\n      },\n      // For sample theme\n      { test: /\\.less$/, loader: 'style-loader!css-loader!less-loader' },\n      { test: /\\.css/, loader: 'style-loader!css-loader' },\n      { test: /\\.woff$/, loader: 'file-loader' },\n      { test: /\\.ttf$/, loader: 'file-loader' },\n      { test: /\\.eot$/, loader: 'file-loader' },\n      { test: /\\.svg$/, loader: 'file-loader' }\n    ]\n  },\n  externals: {\n    react: {\n      root: 'React',\n      commonjs: 'react',\n      commonjs2: 'react',\n      amd: 'react'\n    },\n    moment: 'moment'\n  },\n  plugins: []\n};\n\nif (process.env.REACT_CALENDAR_WEBPACK === 'umd_min') {\n  config.plugins = [\n    new webpack.optimize.UglifyJsPlugin()\n  ];\n  config.output.path = 'build';\n  config.output.filename = config.output.filename.replace(/\\.js$/, '.min.js');\n}\n\nif (process.env.REACT_CALENDAR_WEBPACK === 'umd') {\n  config.output.path = 'build';\n}\n\nif (process.env.REACT_CALENDAR_WEBPACK === 'server') {\n  config.module.loaders = [\n    {\n      test: /\\.js$/,\n      loader: 'react-hot!babel?presets[]=react,presets[]=es2015,presets[]=stage-0',\n    },\n    { test: /\\.less$/, loader: 'style-loader!css-loader!less-loader' },\n    { test: /\\.css/, loader: 'style-loader!css-loader' },\n    { test: /\\.woff$/, loader: 'file-loader' },\n    { test: /\\.ttf$/, loader: 'file-loader' },\n    { test: /\\.eot$/, loader: 'file-loader' },\n    { test: /\\.svg$/, loader: 'file-loader' }\n  ];\n  config.plugins = [\n    new webpack.NoErrorsPlugin()\n  ];\n}\n\nmodule.exports = config;\n"
  }
]