├── .babelrc
├── .gitignore
├── README.md
├── package-lock.json
├── package.json
├── timepicker.css
├── timepicker.es6.js
├── timepicker.js
└── timepicker.png
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": [
3 | [
4 | "transform-react-remove-prop-types",
5 | {
6 | "mode": "wrap"
7 | }
8 | ]
9 | ],
10 | "presets": [
11 | "env",
12 | "react"
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://www.npmjs.com/package/react-timepicker)
2 |
3 | # react-timepicker
4 | `Timepicker` is a [React](https://facebook.github.io/react/) timepicker component that looks like Android KitKat one.
5 |
6 | ### Example
7 | [](https://jsfiddle.net/radekm/o7syg3q9/embedded/result/)
8 |
9 | ### Install
10 | From [npm](https://www.npmjs.com/package/react-timepicker)
11 |
12 | ```sh
13 | npm install react-timepicker --save
14 | ```
15 |
16 | ### Quick Start
17 | ```javascript
18 | 'use strict';
19 |
20 | import React from 'react';
21 | import ReactDOM from 'react-dom';
22 | import {Timepicker} from 'react-timepicker';
23 |
24 | // Remember to include timepicker.css
25 | // If you can import CSS in JS:
26 | import 'react-timepicker/timepicker.css';
27 |
28 | class TimepickerExample extends React.Component {
29 | onChange (hours, minutes) {
30 | // ...
31 | },
32 |
33 | render () {
34 | return (
35 |
36 | );
37 | }
38 | }
39 |
40 | ReactDOM.render(, document.getElementById('timepicker-example'));
41 | ```
42 |
43 | ### Prop Values
44 | #### mode
45 | `React.PropTypes.bool`
46 |
47 | Initial mode - `Timepicker.HOURS` or `Timepicker.MINUTES` **(default: `Timepicker.HOURS`)**.
48 |
49 | #### size
50 | `React.PropTypes.number`
51 |
52 | Clock size in pixels **(default: 300)**.
53 |
54 | #### radius
55 | `React.PropTypes.number`
56 |
57 | Clock radius in pixels **(default: 125)**.
58 |
59 | #### hours
60 | `React.PropTypes.number`
61 |
62 | Initial hours **(default: 0)**.
63 |
64 | #### minutes
65 | `React.PropTypes.number`
66 |
67 | Initial minutes **(default: 0)**.
68 |
69 | #### formatNumber
70 | `React.PropTypes.func.isRequired`
71 |
72 | Function `(number, 'info' | 'clock') => string` formatting numbers **(default: left pad with 0)**
73 |
74 | #### militaryTime
75 | `React.PropTypes.bool`
76 |
77 | Military (24-hour) time switch **(default: `true`)**.
78 |
79 | #### onChange
80 | `React.PropTypes.func`
81 |
82 | Callback function when a hour or a minute is changed. Passes 2 parameters: new hours and minutes.
83 |
84 | #### onChangeMode
85 | `React.PropTypes.func`
86 |
87 | Callback function when mode is changed. Passes 1 parameter: new mode.
88 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-timepicker",
3 | "version": "2.0.2",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "ansi-regex": {
8 | "version": "2.1.1",
9 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
10 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
11 | "dev": true
12 | },
13 | "ansi-styles": {
14 | "version": "2.2.1",
15 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
16 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
17 | "dev": true
18 | },
19 | "anymatch": {
20 | "version": "1.3.2",
21 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
22 | "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
23 | "dev": true,
24 | "optional": true,
25 | "requires": {
26 | "micromatch": "2.3.11",
27 | "normalize-path": "2.1.1"
28 | }
29 | },
30 | "arr-diff": {
31 | "version": "2.0.0",
32 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
33 | "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
34 | "dev": true,
35 | "optional": true,
36 | "requires": {
37 | "arr-flatten": "1.1.0"
38 | }
39 | },
40 | "arr-flatten": {
41 | "version": "1.1.0",
42 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
43 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
44 | "dev": true,
45 | "optional": true
46 | },
47 | "array-unique": {
48 | "version": "0.2.1",
49 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
50 | "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
51 | "dev": true,
52 | "optional": true
53 | },
54 | "async-each": {
55 | "version": "1.0.1",
56 | "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
57 | "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
58 | "dev": true,
59 | "optional": true
60 | },
61 | "babel-cli": {
62 | "version": "6.26.0",
63 | "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz",
64 | "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=",
65 | "dev": true,
66 | "requires": {
67 | "babel-core": "6.26.0",
68 | "babel-polyfill": "6.26.0",
69 | "babel-register": "6.26.0",
70 | "babel-runtime": "6.26.0",
71 | "chokidar": "1.7.0",
72 | "commander": "2.11.0",
73 | "convert-source-map": "1.5.0",
74 | "fs-readdir-recursive": "1.0.0",
75 | "glob": "7.1.2",
76 | "lodash": "4.17.4",
77 | "output-file-sync": "1.1.2",
78 | "path-is-absolute": "1.0.1",
79 | "slash": "1.0.0",
80 | "source-map": "0.5.7",
81 | "v8flags": "2.1.1"
82 | }
83 | },
84 | "babel-code-frame": {
85 | "version": "6.26.0",
86 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
87 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
88 | "dev": true,
89 | "requires": {
90 | "chalk": "1.1.3",
91 | "esutils": "2.0.2",
92 | "js-tokens": "3.0.2"
93 | }
94 | },
95 | "babel-core": {
96 | "version": "6.26.0",
97 | "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz",
98 | "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=",
99 | "dev": true,
100 | "requires": {
101 | "babel-code-frame": "6.26.0",
102 | "babel-generator": "6.26.0",
103 | "babel-helpers": "6.24.1",
104 | "babel-messages": "6.23.0",
105 | "babel-register": "6.26.0",
106 | "babel-runtime": "6.26.0",
107 | "babel-template": "6.26.0",
108 | "babel-traverse": "6.26.0",
109 | "babel-types": "6.26.0",
110 | "babylon": "6.18.0",
111 | "convert-source-map": "1.5.0",
112 | "debug": "2.6.9",
113 | "json5": "0.5.1",
114 | "lodash": "4.17.4",
115 | "minimatch": "3.0.4",
116 | "path-is-absolute": "1.0.1",
117 | "private": "0.1.8",
118 | "slash": "1.0.0",
119 | "source-map": "0.5.7"
120 | }
121 | },
122 | "babel-generator": {
123 | "version": "6.26.0",
124 | "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz",
125 | "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
126 | "dev": true,
127 | "requires": {
128 | "babel-messages": "6.23.0",
129 | "babel-runtime": "6.26.0",
130 | "babel-types": "6.26.0",
131 | "detect-indent": "4.0.0",
132 | "jsesc": "1.3.0",
133 | "lodash": "4.17.4",
134 | "source-map": "0.5.7",
135 | "trim-right": "1.0.1"
136 | }
137 | },
138 | "babel-helper-builder-binary-assignment-operator-visitor": {
139 | "version": "6.24.1",
140 | "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",
141 | "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",
142 | "dev": true,
143 | "requires": {
144 | "babel-helper-explode-assignable-expression": "6.24.1",
145 | "babel-runtime": "6.26.0",
146 | "babel-types": "6.26.0"
147 | }
148 | },
149 | "babel-helper-builder-react-jsx": {
150 | "version": "6.26.0",
151 | "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz",
152 | "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=",
153 | "dev": true,
154 | "requires": {
155 | "babel-runtime": "6.26.0",
156 | "babel-types": "6.26.0",
157 | "esutils": "2.0.2"
158 | }
159 | },
160 | "babel-helper-call-delegate": {
161 | "version": "6.24.1",
162 | "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
163 | "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
164 | "dev": true,
165 | "requires": {
166 | "babel-helper-hoist-variables": "6.24.1",
167 | "babel-runtime": "6.26.0",
168 | "babel-traverse": "6.26.0",
169 | "babel-types": "6.26.0"
170 | }
171 | },
172 | "babel-helper-define-map": {
173 | "version": "6.26.0",
174 | "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
175 | "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
176 | "dev": true,
177 | "requires": {
178 | "babel-helper-function-name": "6.24.1",
179 | "babel-runtime": "6.26.0",
180 | "babel-types": "6.26.0",
181 | "lodash": "4.17.4"
182 | }
183 | },
184 | "babel-helper-explode-assignable-expression": {
185 | "version": "6.24.1",
186 | "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz",
187 | "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=",
188 | "dev": true,
189 | "requires": {
190 | "babel-runtime": "6.26.0",
191 | "babel-traverse": "6.26.0",
192 | "babel-types": "6.26.0"
193 | }
194 | },
195 | "babel-helper-function-name": {
196 | "version": "6.24.1",
197 | "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
198 | "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
199 | "dev": true,
200 | "requires": {
201 | "babel-helper-get-function-arity": "6.24.1",
202 | "babel-runtime": "6.26.0",
203 | "babel-template": "6.26.0",
204 | "babel-traverse": "6.26.0",
205 | "babel-types": "6.26.0"
206 | }
207 | },
208 | "babel-helper-get-function-arity": {
209 | "version": "6.24.1",
210 | "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
211 | "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
212 | "dev": true,
213 | "requires": {
214 | "babel-runtime": "6.26.0",
215 | "babel-types": "6.26.0"
216 | }
217 | },
218 | "babel-helper-hoist-variables": {
219 | "version": "6.24.1",
220 | "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
221 | "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
222 | "dev": true,
223 | "requires": {
224 | "babel-runtime": "6.26.0",
225 | "babel-types": "6.26.0"
226 | }
227 | },
228 | "babel-helper-optimise-call-expression": {
229 | "version": "6.24.1",
230 | "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
231 | "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
232 | "dev": true,
233 | "requires": {
234 | "babel-runtime": "6.26.0",
235 | "babel-types": "6.26.0"
236 | }
237 | },
238 | "babel-helper-regex": {
239 | "version": "6.26.0",
240 | "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
241 | "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
242 | "dev": true,
243 | "requires": {
244 | "babel-runtime": "6.26.0",
245 | "babel-types": "6.26.0",
246 | "lodash": "4.17.4"
247 | }
248 | },
249 | "babel-helper-remap-async-to-generator": {
250 | "version": "6.24.1",
251 | "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz",
252 | "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=",
253 | "dev": true,
254 | "requires": {
255 | "babel-helper-function-name": "6.24.1",
256 | "babel-runtime": "6.26.0",
257 | "babel-template": "6.26.0",
258 | "babel-traverse": "6.26.0",
259 | "babel-types": "6.26.0"
260 | }
261 | },
262 | "babel-helper-replace-supers": {
263 | "version": "6.24.1",
264 | "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
265 | "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
266 | "dev": true,
267 | "requires": {
268 | "babel-helper-optimise-call-expression": "6.24.1",
269 | "babel-messages": "6.23.0",
270 | "babel-runtime": "6.26.0",
271 | "babel-template": "6.26.0",
272 | "babel-traverse": "6.26.0",
273 | "babel-types": "6.26.0"
274 | }
275 | },
276 | "babel-helpers": {
277 | "version": "6.24.1",
278 | "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
279 | "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
280 | "dev": true,
281 | "requires": {
282 | "babel-runtime": "6.26.0",
283 | "babel-template": "6.26.0"
284 | }
285 | },
286 | "babel-messages": {
287 | "version": "6.23.0",
288 | "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
289 | "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
290 | "dev": true,
291 | "requires": {
292 | "babel-runtime": "6.26.0"
293 | }
294 | },
295 | "babel-plugin-check-es2015-constants": {
296 | "version": "6.22.0",
297 | "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
298 | "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
299 | "dev": true,
300 | "requires": {
301 | "babel-runtime": "6.26.0"
302 | }
303 | },
304 | "babel-plugin-syntax-async-functions": {
305 | "version": "6.13.0",
306 | "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz",
307 | "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=",
308 | "dev": true
309 | },
310 | "babel-plugin-syntax-exponentiation-operator": {
311 | "version": "6.13.0",
312 | "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
313 | "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=",
314 | "dev": true
315 | },
316 | "babel-plugin-syntax-flow": {
317 | "version": "6.18.0",
318 | "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz",
319 | "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=",
320 | "dev": true
321 | },
322 | "babel-plugin-syntax-jsx": {
323 | "version": "6.18.0",
324 | "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
325 | "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=",
326 | "dev": true
327 | },
328 | "babel-plugin-syntax-trailing-function-commas": {
329 | "version": "6.22.0",
330 | "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",
331 | "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=",
332 | "dev": true
333 | },
334 | "babel-plugin-transform-async-to-generator": {
335 | "version": "6.24.1",
336 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz",
337 | "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
338 | "dev": true,
339 | "requires": {
340 | "babel-helper-remap-async-to-generator": "6.24.1",
341 | "babel-plugin-syntax-async-functions": "6.13.0",
342 | "babel-runtime": "6.26.0"
343 | }
344 | },
345 | "babel-plugin-transform-es2015-arrow-functions": {
346 | "version": "6.22.0",
347 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
348 | "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
349 | "dev": true,
350 | "requires": {
351 | "babel-runtime": "6.26.0"
352 | }
353 | },
354 | "babel-plugin-transform-es2015-block-scoped-functions": {
355 | "version": "6.22.0",
356 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
357 | "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
358 | "dev": true,
359 | "requires": {
360 | "babel-runtime": "6.26.0"
361 | }
362 | },
363 | "babel-plugin-transform-es2015-block-scoping": {
364 | "version": "6.26.0",
365 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
366 | "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
367 | "dev": true,
368 | "requires": {
369 | "babel-runtime": "6.26.0",
370 | "babel-template": "6.26.0",
371 | "babel-traverse": "6.26.0",
372 | "babel-types": "6.26.0",
373 | "lodash": "4.17.4"
374 | }
375 | },
376 | "babel-plugin-transform-es2015-classes": {
377 | "version": "6.24.1",
378 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
379 | "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
380 | "dev": true,
381 | "requires": {
382 | "babel-helper-define-map": "6.26.0",
383 | "babel-helper-function-name": "6.24.1",
384 | "babel-helper-optimise-call-expression": "6.24.1",
385 | "babel-helper-replace-supers": "6.24.1",
386 | "babel-messages": "6.23.0",
387 | "babel-runtime": "6.26.0",
388 | "babel-template": "6.26.0",
389 | "babel-traverse": "6.26.0",
390 | "babel-types": "6.26.0"
391 | }
392 | },
393 | "babel-plugin-transform-es2015-computed-properties": {
394 | "version": "6.24.1",
395 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
396 | "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
397 | "dev": true,
398 | "requires": {
399 | "babel-runtime": "6.26.0",
400 | "babel-template": "6.26.0"
401 | }
402 | },
403 | "babel-plugin-transform-es2015-destructuring": {
404 | "version": "6.23.0",
405 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
406 | "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
407 | "dev": true,
408 | "requires": {
409 | "babel-runtime": "6.26.0"
410 | }
411 | },
412 | "babel-plugin-transform-es2015-duplicate-keys": {
413 | "version": "6.24.1",
414 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
415 | "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
416 | "dev": true,
417 | "requires": {
418 | "babel-runtime": "6.26.0",
419 | "babel-types": "6.26.0"
420 | }
421 | },
422 | "babel-plugin-transform-es2015-for-of": {
423 | "version": "6.23.0",
424 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
425 | "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
426 | "dev": true,
427 | "requires": {
428 | "babel-runtime": "6.26.0"
429 | }
430 | },
431 | "babel-plugin-transform-es2015-function-name": {
432 | "version": "6.24.1",
433 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
434 | "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
435 | "dev": true,
436 | "requires": {
437 | "babel-helper-function-name": "6.24.1",
438 | "babel-runtime": "6.26.0",
439 | "babel-types": "6.26.0"
440 | }
441 | },
442 | "babel-plugin-transform-es2015-literals": {
443 | "version": "6.22.0",
444 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
445 | "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
446 | "dev": true,
447 | "requires": {
448 | "babel-runtime": "6.26.0"
449 | }
450 | },
451 | "babel-plugin-transform-es2015-modules-amd": {
452 | "version": "6.24.1",
453 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
454 | "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
455 | "dev": true,
456 | "requires": {
457 | "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
458 | "babel-runtime": "6.26.0",
459 | "babel-template": "6.26.0"
460 | }
461 | },
462 | "babel-plugin-transform-es2015-modules-commonjs": {
463 | "version": "6.26.0",
464 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz",
465 | "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=",
466 | "dev": true,
467 | "requires": {
468 | "babel-plugin-transform-strict-mode": "6.24.1",
469 | "babel-runtime": "6.26.0",
470 | "babel-template": "6.26.0",
471 | "babel-types": "6.26.0"
472 | }
473 | },
474 | "babel-plugin-transform-es2015-modules-systemjs": {
475 | "version": "6.24.1",
476 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
477 | "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
478 | "dev": true,
479 | "requires": {
480 | "babel-helper-hoist-variables": "6.24.1",
481 | "babel-runtime": "6.26.0",
482 | "babel-template": "6.26.0"
483 | }
484 | },
485 | "babel-plugin-transform-es2015-modules-umd": {
486 | "version": "6.24.1",
487 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
488 | "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
489 | "dev": true,
490 | "requires": {
491 | "babel-plugin-transform-es2015-modules-amd": "6.24.1",
492 | "babel-runtime": "6.26.0",
493 | "babel-template": "6.26.0"
494 | }
495 | },
496 | "babel-plugin-transform-es2015-object-super": {
497 | "version": "6.24.1",
498 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
499 | "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
500 | "dev": true,
501 | "requires": {
502 | "babel-helper-replace-supers": "6.24.1",
503 | "babel-runtime": "6.26.0"
504 | }
505 | },
506 | "babel-plugin-transform-es2015-parameters": {
507 | "version": "6.24.1",
508 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
509 | "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
510 | "dev": true,
511 | "requires": {
512 | "babel-helper-call-delegate": "6.24.1",
513 | "babel-helper-get-function-arity": "6.24.1",
514 | "babel-runtime": "6.26.0",
515 | "babel-template": "6.26.0",
516 | "babel-traverse": "6.26.0",
517 | "babel-types": "6.26.0"
518 | }
519 | },
520 | "babel-plugin-transform-es2015-shorthand-properties": {
521 | "version": "6.24.1",
522 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
523 | "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
524 | "dev": true,
525 | "requires": {
526 | "babel-runtime": "6.26.0",
527 | "babel-types": "6.26.0"
528 | }
529 | },
530 | "babel-plugin-transform-es2015-spread": {
531 | "version": "6.22.0",
532 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
533 | "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
534 | "dev": true,
535 | "requires": {
536 | "babel-runtime": "6.26.0"
537 | }
538 | },
539 | "babel-plugin-transform-es2015-sticky-regex": {
540 | "version": "6.24.1",
541 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
542 | "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
543 | "dev": true,
544 | "requires": {
545 | "babel-helper-regex": "6.26.0",
546 | "babel-runtime": "6.26.0",
547 | "babel-types": "6.26.0"
548 | }
549 | },
550 | "babel-plugin-transform-es2015-template-literals": {
551 | "version": "6.22.0",
552 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
553 | "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
554 | "dev": true,
555 | "requires": {
556 | "babel-runtime": "6.26.0"
557 | }
558 | },
559 | "babel-plugin-transform-es2015-typeof-symbol": {
560 | "version": "6.23.0",
561 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
562 | "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
563 | "dev": true,
564 | "requires": {
565 | "babel-runtime": "6.26.0"
566 | }
567 | },
568 | "babel-plugin-transform-es2015-unicode-regex": {
569 | "version": "6.24.1",
570 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
571 | "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
572 | "dev": true,
573 | "requires": {
574 | "babel-helper-regex": "6.26.0",
575 | "babel-runtime": "6.26.0",
576 | "regexpu-core": "2.0.0"
577 | }
578 | },
579 | "babel-plugin-transform-exponentiation-operator": {
580 | "version": "6.24.1",
581 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz",
582 | "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=",
583 | "dev": true,
584 | "requires": {
585 | "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1",
586 | "babel-plugin-syntax-exponentiation-operator": "6.13.0",
587 | "babel-runtime": "6.26.0"
588 | }
589 | },
590 | "babel-plugin-transform-flow-strip-types": {
591 | "version": "6.22.0",
592 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz",
593 | "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=",
594 | "dev": true,
595 | "requires": {
596 | "babel-plugin-syntax-flow": "6.18.0",
597 | "babel-runtime": "6.26.0"
598 | }
599 | },
600 | "babel-plugin-transform-react-display-name": {
601 | "version": "6.25.0",
602 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz",
603 | "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=",
604 | "dev": true,
605 | "requires": {
606 | "babel-runtime": "6.26.0"
607 | }
608 | },
609 | "babel-plugin-transform-react-jsx": {
610 | "version": "6.24.1",
611 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz",
612 | "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=",
613 | "dev": true,
614 | "requires": {
615 | "babel-helper-builder-react-jsx": "6.26.0",
616 | "babel-plugin-syntax-jsx": "6.18.0",
617 | "babel-runtime": "6.26.0"
618 | }
619 | },
620 | "babel-plugin-transform-react-jsx-self": {
621 | "version": "6.22.0",
622 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz",
623 | "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=",
624 | "dev": true,
625 | "requires": {
626 | "babel-plugin-syntax-jsx": "6.18.0",
627 | "babel-runtime": "6.26.0"
628 | }
629 | },
630 | "babel-plugin-transform-react-jsx-source": {
631 | "version": "6.22.0",
632 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz",
633 | "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=",
634 | "dev": true,
635 | "requires": {
636 | "babel-plugin-syntax-jsx": "6.18.0",
637 | "babel-runtime": "6.26.0"
638 | }
639 | },
640 | "babel-plugin-transform-react-remove-prop-types": {
641 | "version": "0.4.10",
642 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.10.tgz",
643 | "integrity": "sha512-JlT+Bsnuk5gRroIm2Wl4k0e84bVCtqPEfbijvF3Gl8o5+CTrs/lwRiXhZh2cVeHt/KLA89sU9tCkawY8gLoizA==",
644 | "dev": true
645 | },
646 | "babel-plugin-transform-regenerator": {
647 | "version": "6.26.0",
648 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
649 | "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
650 | "dev": true,
651 | "requires": {
652 | "regenerator-transform": "0.10.1"
653 | }
654 | },
655 | "babel-plugin-transform-strict-mode": {
656 | "version": "6.24.1",
657 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
658 | "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
659 | "dev": true,
660 | "requires": {
661 | "babel-runtime": "6.26.0",
662 | "babel-types": "6.26.0"
663 | }
664 | },
665 | "babel-polyfill": {
666 | "version": "6.26.0",
667 | "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
668 | "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
669 | "dev": true,
670 | "requires": {
671 | "babel-runtime": "6.26.0",
672 | "core-js": "2.5.1",
673 | "regenerator-runtime": "0.10.5"
674 | },
675 | "dependencies": {
676 | "regenerator-runtime": {
677 | "version": "0.10.5",
678 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
679 | "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
680 | "dev": true
681 | }
682 | }
683 | },
684 | "babel-preset-env": {
685 | "version": "1.6.1",
686 | "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz",
687 | "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==",
688 | "dev": true,
689 | "requires": {
690 | "babel-plugin-check-es2015-constants": "6.22.0",
691 | "babel-plugin-syntax-trailing-function-commas": "6.22.0",
692 | "babel-plugin-transform-async-to-generator": "6.24.1",
693 | "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
694 | "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
695 | "babel-plugin-transform-es2015-block-scoping": "6.26.0",
696 | "babel-plugin-transform-es2015-classes": "6.24.1",
697 | "babel-plugin-transform-es2015-computed-properties": "6.24.1",
698 | "babel-plugin-transform-es2015-destructuring": "6.23.0",
699 | "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
700 | "babel-plugin-transform-es2015-for-of": "6.23.0",
701 | "babel-plugin-transform-es2015-function-name": "6.24.1",
702 | "babel-plugin-transform-es2015-literals": "6.22.0",
703 | "babel-plugin-transform-es2015-modules-amd": "6.24.1",
704 | "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
705 | "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
706 | "babel-plugin-transform-es2015-modules-umd": "6.24.1",
707 | "babel-plugin-transform-es2015-object-super": "6.24.1",
708 | "babel-plugin-transform-es2015-parameters": "6.24.1",
709 | "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
710 | "babel-plugin-transform-es2015-spread": "6.22.0",
711 | "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
712 | "babel-plugin-transform-es2015-template-literals": "6.22.0",
713 | "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
714 | "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
715 | "babel-plugin-transform-exponentiation-operator": "6.24.1",
716 | "babel-plugin-transform-regenerator": "6.26.0",
717 | "browserslist": "2.5.1",
718 | "invariant": "2.2.2",
719 | "semver": "5.4.1"
720 | }
721 | },
722 | "babel-preset-flow": {
723 | "version": "6.23.0",
724 | "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz",
725 | "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=",
726 | "dev": true,
727 | "requires": {
728 | "babel-plugin-transform-flow-strip-types": "6.22.0"
729 | }
730 | },
731 | "babel-preset-react": {
732 | "version": "6.24.1",
733 | "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz",
734 | "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=",
735 | "dev": true,
736 | "requires": {
737 | "babel-plugin-syntax-jsx": "6.18.0",
738 | "babel-plugin-transform-react-display-name": "6.25.0",
739 | "babel-plugin-transform-react-jsx": "6.24.1",
740 | "babel-plugin-transform-react-jsx-self": "6.22.0",
741 | "babel-plugin-transform-react-jsx-source": "6.22.0",
742 | "babel-preset-flow": "6.23.0"
743 | }
744 | },
745 | "babel-register": {
746 | "version": "6.26.0",
747 | "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
748 | "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
749 | "dev": true,
750 | "requires": {
751 | "babel-core": "6.26.0",
752 | "babel-runtime": "6.26.0",
753 | "core-js": "2.5.1",
754 | "home-or-tmp": "2.0.0",
755 | "lodash": "4.17.4",
756 | "mkdirp": "0.5.1",
757 | "source-map-support": "0.4.18"
758 | }
759 | },
760 | "babel-runtime": {
761 | "version": "6.26.0",
762 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
763 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
764 | "dev": true,
765 | "requires": {
766 | "core-js": "2.5.1",
767 | "regenerator-runtime": "0.11.0"
768 | }
769 | },
770 | "babel-template": {
771 | "version": "6.26.0",
772 | "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
773 | "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
774 | "dev": true,
775 | "requires": {
776 | "babel-runtime": "6.26.0",
777 | "babel-traverse": "6.26.0",
778 | "babel-types": "6.26.0",
779 | "babylon": "6.18.0",
780 | "lodash": "4.17.4"
781 | }
782 | },
783 | "babel-traverse": {
784 | "version": "6.26.0",
785 | "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
786 | "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
787 | "dev": true,
788 | "requires": {
789 | "babel-code-frame": "6.26.0",
790 | "babel-messages": "6.23.0",
791 | "babel-runtime": "6.26.0",
792 | "babel-types": "6.26.0",
793 | "babylon": "6.18.0",
794 | "debug": "2.6.9",
795 | "globals": "9.18.0",
796 | "invariant": "2.2.2",
797 | "lodash": "4.17.4"
798 | }
799 | },
800 | "babel-types": {
801 | "version": "6.26.0",
802 | "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
803 | "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
804 | "dev": true,
805 | "requires": {
806 | "babel-runtime": "6.26.0",
807 | "esutils": "2.0.2",
808 | "lodash": "4.17.4",
809 | "to-fast-properties": "1.0.3"
810 | }
811 | },
812 | "babylon": {
813 | "version": "6.18.0",
814 | "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
815 | "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
816 | "dev": true
817 | },
818 | "balanced-match": {
819 | "version": "1.0.0",
820 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
821 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
822 | "dev": true
823 | },
824 | "binary-extensions": {
825 | "version": "1.10.0",
826 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz",
827 | "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=",
828 | "dev": true,
829 | "optional": true
830 | },
831 | "brace-expansion": {
832 | "version": "1.1.8",
833 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
834 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
835 | "dev": true,
836 | "requires": {
837 | "balanced-match": "1.0.0",
838 | "concat-map": "0.0.1"
839 | }
840 | },
841 | "braces": {
842 | "version": "1.8.5",
843 | "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
844 | "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
845 | "dev": true,
846 | "optional": true,
847 | "requires": {
848 | "expand-range": "1.8.2",
849 | "preserve": "0.2.0",
850 | "repeat-element": "1.1.2"
851 | }
852 | },
853 | "browserslist": {
854 | "version": "2.5.1",
855 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.5.1.tgz",
856 | "integrity": "sha512-jAvM2ku7YDJ+leAq3bFH1DE0Ylw+F+EQDq4GkqZfgPEqpWYw9ofQH85uKSB9r3Tv7XDbfqVtE+sdvKJW7IlPJA==",
857 | "dev": true,
858 | "requires": {
859 | "caniuse-lite": "1.0.30000748",
860 | "electron-to-chromium": "1.3.26"
861 | }
862 | },
863 | "caniuse-lite": {
864 | "version": "1.0.30000748",
865 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000748.tgz",
866 | "integrity": "sha1-RMjW2lKtZaXXudyk7+vQvdmCugk=",
867 | "dev": true
868 | },
869 | "chalk": {
870 | "version": "1.1.3",
871 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
872 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
873 | "dev": true,
874 | "requires": {
875 | "ansi-styles": "2.2.1",
876 | "escape-string-regexp": "1.0.5",
877 | "has-ansi": "2.0.0",
878 | "strip-ansi": "3.0.1",
879 | "supports-color": "2.0.0"
880 | }
881 | },
882 | "chokidar": {
883 | "version": "1.7.0",
884 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
885 | "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
886 | "dev": true,
887 | "optional": true,
888 | "requires": {
889 | "anymatch": "1.3.2",
890 | "async-each": "1.0.1",
891 | "glob-parent": "2.0.0",
892 | "inherits": "2.0.3",
893 | "is-binary-path": "1.0.1",
894 | "is-glob": "2.0.1",
895 | "path-is-absolute": "1.0.1",
896 | "readdirp": "2.1.0"
897 | }
898 | },
899 | "commander": {
900 | "version": "2.11.0",
901 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
902 | "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
903 | "dev": true
904 | },
905 | "concat-map": {
906 | "version": "0.0.1",
907 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
908 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
909 | "dev": true
910 | },
911 | "convert-source-map": {
912 | "version": "1.5.0",
913 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz",
914 | "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=",
915 | "dev": true
916 | },
917 | "core-js": {
918 | "version": "2.5.1",
919 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz",
920 | "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=",
921 | "dev": true
922 | },
923 | "core-util-is": {
924 | "version": "1.0.2",
925 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
926 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
927 | "dev": true,
928 | "optional": true
929 | },
930 | "debug": {
931 | "version": "2.6.9",
932 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
933 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
934 | "dev": true,
935 | "requires": {
936 | "ms": "2.0.0"
937 | }
938 | },
939 | "detect-indent": {
940 | "version": "4.0.0",
941 | "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
942 | "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
943 | "dev": true,
944 | "requires": {
945 | "repeating": "2.0.1"
946 | }
947 | },
948 | "electron-to-chromium": {
949 | "version": "1.3.26",
950 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.26.tgz",
951 | "integrity": "sha1-mWQnKUhhp02cfIK5Jg6jAejALWY=",
952 | "dev": true
953 | },
954 | "escape-string-regexp": {
955 | "version": "1.0.5",
956 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
957 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
958 | "dev": true
959 | },
960 | "esutils": {
961 | "version": "2.0.2",
962 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
963 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
964 | "dev": true
965 | },
966 | "expand-brackets": {
967 | "version": "0.1.5",
968 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
969 | "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
970 | "dev": true,
971 | "optional": true,
972 | "requires": {
973 | "is-posix-bracket": "0.1.1"
974 | }
975 | },
976 | "expand-range": {
977 | "version": "1.8.2",
978 | "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
979 | "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
980 | "dev": true,
981 | "optional": true,
982 | "requires": {
983 | "fill-range": "2.2.3"
984 | }
985 | },
986 | "extglob": {
987 | "version": "0.3.2",
988 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
989 | "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
990 | "dev": true,
991 | "optional": true,
992 | "requires": {
993 | "is-extglob": "1.0.0"
994 | }
995 | },
996 | "filename-regex": {
997 | "version": "2.0.1",
998 | "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
999 | "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
1000 | "dev": true,
1001 | "optional": true
1002 | },
1003 | "fill-range": {
1004 | "version": "2.2.3",
1005 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
1006 | "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
1007 | "dev": true,
1008 | "optional": true,
1009 | "requires": {
1010 | "is-number": "2.1.0",
1011 | "isobject": "2.1.0",
1012 | "randomatic": "1.1.7",
1013 | "repeat-element": "1.1.2",
1014 | "repeat-string": "1.6.1"
1015 | }
1016 | },
1017 | "for-in": {
1018 | "version": "1.0.2",
1019 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
1020 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
1021 | "dev": true,
1022 | "optional": true
1023 | },
1024 | "for-own": {
1025 | "version": "0.1.5",
1026 | "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
1027 | "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
1028 | "dev": true,
1029 | "optional": true,
1030 | "requires": {
1031 | "for-in": "1.0.2"
1032 | }
1033 | },
1034 | "fs-readdir-recursive": {
1035 | "version": "1.0.0",
1036 | "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz",
1037 | "integrity": "sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=",
1038 | "dev": true
1039 | },
1040 | "fs.realpath": {
1041 | "version": "1.0.0",
1042 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1043 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
1044 | "dev": true
1045 | },
1046 | "glob": {
1047 | "version": "7.1.2",
1048 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
1049 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
1050 | "dev": true,
1051 | "requires": {
1052 | "fs.realpath": "1.0.0",
1053 | "inflight": "1.0.6",
1054 | "inherits": "2.0.3",
1055 | "minimatch": "3.0.4",
1056 | "once": "1.4.0",
1057 | "path-is-absolute": "1.0.1"
1058 | }
1059 | },
1060 | "glob-base": {
1061 | "version": "0.3.0",
1062 | "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
1063 | "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
1064 | "dev": true,
1065 | "optional": true,
1066 | "requires": {
1067 | "glob-parent": "2.0.0",
1068 | "is-glob": "2.0.1"
1069 | }
1070 | },
1071 | "glob-parent": {
1072 | "version": "2.0.0",
1073 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
1074 | "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
1075 | "dev": true,
1076 | "requires": {
1077 | "is-glob": "2.0.1"
1078 | }
1079 | },
1080 | "globals": {
1081 | "version": "9.18.0",
1082 | "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
1083 | "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
1084 | "dev": true
1085 | },
1086 | "graceful-fs": {
1087 | "version": "4.1.11",
1088 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
1089 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
1090 | "dev": true
1091 | },
1092 | "has-ansi": {
1093 | "version": "2.0.0",
1094 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
1095 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
1096 | "dev": true,
1097 | "requires": {
1098 | "ansi-regex": "2.1.1"
1099 | }
1100 | },
1101 | "home-or-tmp": {
1102 | "version": "2.0.0",
1103 | "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
1104 | "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
1105 | "dev": true,
1106 | "requires": {
1107 | "os-homedir": "1.0.2",
1108 | "os-tmpdir": "1.0.2"
1109 | }
1110 | },
1111 | "inflight": {
1112 | "version": "1.0.6",
1113 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1114 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1115 | "dev": true,
1116 | "requires": {
1117 | "once": "1.4.0",
1118 | "wrappy": "1.0.2"
1119 | }
1120 | },
1121 | "inherits": {
1122 | "version": "2.0.3",
1123 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
1124 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
1125 | "dev": true
1126 | },
1127 | "invariant": {
1128 | "version": "2.2.2",
1129 | "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
1130 | "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
1131 | "dev": true,
1132 | "requires": {
1133 | "loose-envify": "1.3.1"
1134 | }
1135 | },
1136 | "is-binary-path": {
1137 | "version": "1.0.1",
1138 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
1139 | "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
1140 | "dev": true,
1141 | "optional": true,
1142 | "requires": {
1143 | "binary-extensions": "1.10.0"
1144 | }
1145 | },
1146 | "is-buffer": {
1147 | "version": "1.1.5",
1148 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz",
1149 | "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=",
1150 | "dev": true
1151 | },
1152 | "is-dotfile": {
1153 | "version": "1.0.3",
1154 | "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
1155 | "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
1156 | "dev": true,
1157 | "optional": true
1158 | },
1159 | "is-equal-shallow": {
1160 | "version": "0.1.3",
1161 | "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
1162 | "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
1163 | "dev": true,
1164 | "optional": true,
1165 | "requires": {
1166 | "is-primitive": "2.0.0"
1167 | }
1168 | },
1169 | "is-extendable": {
1170 | "version": "0.1.1",
1171 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
1172 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
1173 | "dev": true,
1174 | "optional": true
1175 | },
1176 | "is-extglob": {
1177 | "version": "1.0.0",
1178 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
1179 | "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
1180 | "dev": true
1181 | },
1182 | "is-finite": {
1183 | "version": "1.0.2",
1184 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
1185 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
1186 | "dev": true,
1187 | "requires": {
1188 | "number-is-nan": "1.0.1"
1189 | }
1190 | },
1191 | "is-glob": {
1192 | "version": "2.0.1",
1193 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
1194 | "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
1195 | "dev": true,
1196 | "requires": {
1197 | "is-extglob": "1.0.0"
1198 | }
1199 | },
1200 | "is-number": {
1201 | "version": "2.1.0",
1202 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
1203 | "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
1204 | "dev": true,
1205 | "optional": true,
1206 | "requires": {
1207 | "kind-of": "3.2.2"
1208 | }
1209 | },
1210 | "is-posix-bracket": {
1211 | "version": "0.1.1",
1212 | "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
1213 | "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
1214 | "dev": true,
1215 | "optional": true
1216 | },
1217 | "is-primitive": {
1218 | "version": "2.0.0",
1219 | "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
1220 | "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
1221 | "dev": true,
1222 | "optional": true
1223 | },
1224 | "isarray": {
1225 | "version": "1.0.0",
1226 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1227 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
1228 | "dev": true
1229 | },
1230 | "isobject": {
1231 | "version": "2.1.0",
1232 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
1233 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
1234 | "dev": true,
1235 | "optional": true,
1236 | "requires": {
1237 | "isarray": "1.0.0"
1238 | }
1239 | },
1240 | "js-tokens": {
1241 | "version": "3.0.2",
1242 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
1243 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
1244 | "dev": true
1245 | },
1246 | "jsesc": {
1247 | "version": "1.3.0",
1248 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
1249 | "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
1250 | "dev": true
1251 | },
1252 | "json5": {
1253 | "version": "0.5.1",
1254 | "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
1255 | "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
1256 | "dev": true
1257 | },
1258 | "kind-of": {
1259 | "version": "3.2.2",
1260 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
1261 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
1262 | "dev": true,
1263 | "requires": {
1264 | "is-buffer": "1.1.5"
1265 | }
1266 | },
1267 | "lodash": {
1268 | "version": "4.17.4",
1269 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
1270 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
1271 | "dev": true
1272 | },
1273 | "loose-envify": {
1274 | "version": "1.3.1",
1275 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
1276 | "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
1277 | "dev": true,
1278 | "requires": {
1279 | "js-tokens": "3.0.2"
1280 | }
1281 | },
1282 | "micromatch": {
1283 | "version": "2.3.11",
1284 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
1285 | "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
1286 | "dev": true,
1287 | "optional": true,
1288 | "requires": {
1289 | "arr-diff": "2.0.0",
1290 | "array-unique": "0.2.1",
1291 | "braces": "1.8.5",
1292 | "expand-brackets": "0.1.5",
1293 | "extglob": "0.3.2",
1294 | "filename-regex": "2.0.1",
1295 | "is-extglob": "1.0.0",
1296 | "is-glob": "2.0.1",
1297 | "kind-of": "3.2.2",
1298 | "normalize-path": "2.1.1",
1299 | "object.omit": "2.0.1",
1300 | "parse-glob": "3.0.4",
1301 | "regex-cache": "0.4.4"
1302 | }
1303 | },
1304 | "minimatch": {
1305 | "version": "3.0.4",
1306 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1307 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1308 | "dev": true,
1309 | "requires": {
1310 | "brace-expansion": "1.1.8"
1311 | }
1312 | },
1313 | "minimist": {
1314 | "version": "0.0.8",
1315 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
1316 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
1317 | "dev": true
1318 | },
1319 | "mkdirp": {
1320 | "version": "0.5.1",
1321 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
1322 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
1323 | "dev": true,
1324 | "requires": {
1325 | "minimist": "0.0.8"
1326 | }
1327 | },
1328 | "ms": {
1329 | "version": "2.0.0",
1330 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1331 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
1332 | "dev": true
1333 | },
1334 | "normalize-path": {
1335 | "version": "2.1.1",
1336 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
1337 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
1338 | "dev": true,
1339 | "requires": {
1340 | "remove-trailing-separator": "1.1.0"
1341 | }
1342 | },
1343 | "number-is-nan": {
1344 | "version": "1.0.1",
1345 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
1346 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
1347 | "dev": true
1348 | },
1349 | "object-assign": {
1350 | "version": "4.1.1",
1351 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1352 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
1353 | "dev": true
1354 | },
1355 | "object.omit": {
1356 | "version": "2.0.1",
1357 | "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
1358 | "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
1359 | "dev": true,
1360 | "optional": true,
1361 | "requires": {
1362 | "for-own": "0.1.5",
1363 | "is-extendable": "0.1.1"
1364 | }
1365 | },
1366 | "once": {
1367 | "version": "1.4.0",
1368 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1369 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1370 | "dev": true,
1371 | "requires": {
1372 | "wrappy": "1.0.2"
1373 | }
1374 | },
1375 | "os-homedir": {
1376 | "version": "1.0.2",
1377 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
1378 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
1379 | "dev": true
1380 | },
1381 | "os-tmpdir": {
1382 | "version": "1.0.2",
1383 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
1384 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
1385 | "dev": true
1386 | },
1387 | "output-file-sync": {
1388 | "version": "1.1.2",
1389 | "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz",
1390 | "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=",
1391 | "dev": true,
1392 | "requires": {
1393 | "graceful-fs": "4.1.11",
1394 | "mkdirp": "0.5.1",
1395 | "object-assign": "4.1.1"
1396 | }
1397 | },
1398 | "parse-glob": {
1399 | "version": "3.0.4",
1400 | "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
1401 | "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
1402 | "dev": true,
1403 | "optional": true,
1404 | "requires": {
1405 | "glob-base": "0.3.0",
1406 | "is-dotfile": "1.0.3",
1407 | "is-extglob": "1.0.0",
1408 | "is-glob": "2.0.1"
1409 | }
1410 | },
1411 | "path-is-absolute": {
1412 | "version": "1.0.1",
1413 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1414 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1415 | "dev": true
1416 | },
1417 | "preserve": {
1418 | "version": "0.2.0",
1419 | "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
1420 | "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
1421 | "dev": true,
1422 | "optional": true
1423 | },
1424 | "private": {
1425 | "version": "0.1.8",
1426 | "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
1427 | "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
1428 | "dev": true
1429 | },
1430 | "process-nextick-args": {
1431 | "version": "1.0.7",
1432 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
1433 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
1434 | "dev": true,
1435 | "optional": true
1436 | },
1437 | "randomatic": {
1438 | "version": "1.1.7",
1439 | "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
1440 | "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==",
1441 | "dev": true,
1442 | "optional": true,
1443 | "requires": {
1444 | "is-number": "3.0.0",
1445 | "kind-of": "4.0.0"
1446 | },
1447 | "dependencies": {
1448 | "is-number": {
1449 | "version": "3.0.0",
1450 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
1451 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
1452 | "dev": true,
1453 | "optional": true,
1454 | "requires": {
1455 | "kind-of": "3.2.2"
1456 | },
1457 | "dependencies": {
1458 | "kind-of": {
1459 | "version": "3.2.2",
1460 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
1461 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
1462 | "dev": true,
1463 | "optional": true,
1464 | "requires": {
1465 | "is-buffer": "1.1.5"
1466 | }
1467 | }
1468 | }
1469 | },
1470 | "kind-of": {
1471 | "version": "4.0.0",
1472 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
1473 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
1474 | "dev": true,
1475 | "optional": true,
1476 | "requires": {
1477 | "is-buffer": "1.1.5"
1478 | }
1479 | }
1480 | }
1481 | },
1482 | "readable-stream": {
1483 | "version": "2.3.3",
1484 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
1485 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
1486 | "dev": true,
1487 | "optional": true,
1488 | "requires": {
1489 | "core-util-is": "1.0.2",
1490 | "inherits": "2.0.3",
1491 | "isarray": "1.0.0",
1492 | "process-nextick-args": "1.0.7",
1493 | "safe-buffer": "5.1.1",
1494 | "string_decoder": "1.0.3",
1495 | "util-deprecate": "1.0.2"
1496 | }
1497 | },
1498 | "readdirp": {
1499 | "version": "2.1.0",
1500 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
1501 | "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
1502 | "dev": true,
1503 | "optional": true,
1504 | "requires": {
1505 | "graceful-fs": "4.1.11",
1506 | "minimatch": "3.0.4",
1507 | "readable-stream": "2.3.3",
1508 | "set-immediate-shim": "1.0.1"
1509 | }
1510 | },
1511 | "regenerate": {
1512 | "version": "1.3.3",
1513 | "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
1514 | "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==",
1515 | "dev": true
1516 | },
1517 | "regenerator-runtime": {
1518 | "version": "0.11.0",
1519 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz",
1520 | "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==",
1521 | "dev": true
1522 | },
1523 | "regenerator-transform": {
1524 | "version": "0.10.1",
1525 | "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
1526 | "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
1527 | "dev": true,
1528 | "requires": {
1529 | "babel-runtime": "6.26.0",
1530 | "babel-types": "6.26.0",
1531 | "private": "0.1.8"
1532 | }
1533 | },
1534 | "regex-cache": {
1535 | "version": "0.4.4",
1536 | "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
1537 | "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
1538 | "dev": true,
1539 | "optional": true,
1540 | "requires": {
1541 | "is-equal-shallow": "0.1.3"
1542 | }
1543 | },
1544 | "regexpu-core": {
1545 | "version": "2.0.0",
1546 | "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
1547 | "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
1548 | "dev": true,
1549 | "requires": {
1550 | "regenerate": "1.3.3",
1551 | "regjsgen": "0.2.0",
1552 | "regjsparser": "0.1.5"
1553 | }
1554 | },
1555 | "regjsgen": {
1556 | "version": "0.2.0",
1557 | "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
1558 | "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
1559 | "dev": true
1560 | },
1561 | "regjsparser": {
1562 | "version": "0.1.5",
1563 | "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
1564 | "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
1565 | "dev": true,
1566 | "requires": {
1567 | "jsesc": "0.5.0"
1568 | },
1569 | "dependencies": {
1570 | "jsesc": {
1571 | "version": "0.5.0",
1572 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
1573 | "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
1574 | "dev": true
1575 | }
1576 | }
1577 | },
1578 | "remove-trailing-separator": {
1579 | "version": "1.1.0",
1580 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
1581 | "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
1582 | "dev": true
1583 | },
1584 | "repeat-element": {
1585 | "version": "1.1.2",
1586 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
1587 | "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
1588 | "dev": true
1589 | },
1590 | "repeat-string": {
1591 | "version": "1.6.1",
1592 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
1593 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
1594 | "dev": true,
1595 | "optional": true
1596 | },
1597 | "repeating": {
1598 | "version": "2.0.1",
1599 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
1600 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
1601 | "dev": true,
1602 | "requires": {
1603 | "is-finite": "1.0.2"
1604 | }
1605 | },
1606 | "safe-buffer": {
1607 | "version": "5.1.1",
1608 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
1609 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
1610 | "dev": true
1611 | },
1612 | "semver": {
1613 | "version": "5.4.1",
1614 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
1615 | "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
1616 | "dev": true
1617 | },
1618 | "set-immediate-shim": {
1619 | "version": "1.0.1",
1620 | "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
1621 | "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
1622 | "dev": true,
1623 | "optional": true
1624 | },
1625 | "slash": {
1626 | "version": "1.0.0",
1627 | "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
1628 | "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
1629 | "dev": true
1630 | },
1631 | "source-map": {
1632 | "version": "0.5.7",
1633 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
1634 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
1635 | "dev": true
1636 | },
1637 | "source-map-support": {
1638 | "version": "0.4.18",
1639 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
1640 | "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
1641 | "dev": true,
1642 | "requires": {
1643 | "source-map": "0.5.7"
1644 | }
1645 | },
1646 | "string_decoder": {
1647 | "version": "1.0.3",
1648 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
1649 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
1650 | "dev": true,
1651 | "optional": true,
1652 | "requires": {
1653 | "safe-buffer": "5.1.1"
1654 | }
1655 | },
1656 | "strip-ansi": {
1657 | "version": "3.0.1",
1658 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
1659 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
1660 | "dev": true,
1661 | "requires": {
1662 | "ansi-regex": "2.1.1"
1663 | }
1664 | },
1665 | "supports-color": {
1666 | "version": "2.0.0",
1667 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
1668 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
1669 | "dev": true
1670 | },
1671 | "to-fast-properties": {
1672 | "version": "1.0.3",
1673 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
1674 | "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
1675 | "dev": true
1676 | },
1677 | "trim-right": {
1678 | "version": "1.0.1",
1679 | "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
1680 | "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
1681 | "dev": true
1682 | },
1683 | "user-home": {
1684 | "version": "1.1.1",
1685 | "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
1686 | "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
1687 | "dev": true
1688 | },
1689 | "util-deprecate": {
1690 | "version": "1.0.2",
1691 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1692 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
1693 | "dev": true,
1694 | "optional": true
1695 | },
1696 | "v8flags": {
1697 | "version": "2.1.1",
1698 | "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
1699 | "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
1700 | "dev": true,
1701 | "requires": {
1702 | "user-home": "1.1.1"
1703 | }
1704 | },
1705 | "wrappy": {
1706 | "version": "1.0.2",
1707 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1708 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1709 | "dev": true
1710 | }
1711 | }
1712 | }
1713 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-timepicker",
3 | "version": "2.0.2",
4 | "license": "MIT",
5 | "author": "Radosław Miernik",
6 | "main": "timepicker.js",
7 | "jsnext:main": "timepicker.es6.js",
8 | "description": "React timepicker in Android KitKat style",
9 | "repository": "https://github.com/radekmie/react-timepicker",
10 | "bugs": "https://github.com/radekmie/react-timepicker/issues",
11 | "keywords": [
12 | "android",
13 | "svg",
14 | "react",
15 | "reactjs",
16 | "react-component",
17 | "time",
18 | "timepicker",
19 | "time picker",
20 | "time-picker"
21 | ],
22 | "files": [
23 | "timepicker.css",
24 | "timepicker.es6.js",
25 | "timepicker.js"
26 | ],
27 | "devDependencies": {
28 | "babel-cli": "6.26.0",
29 | "babel-plugin-transform-react-remove-prop-types": "0.4.10",
30 | "babel-preset-env": "1.6.1",
31 | "babel-preset-react": "6.24.1"
32 | },
33 | "peerDependencies": {
34 | "prop-types": ">= 15.5.7",
35 | "react": ">= 15.5.0"
36 | },
37 | "scripts": {
38 | "build": "babel --compact --minified timepicker.es6.js > timepicker.js"
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/timepicker.css:
--------------------------------------------------------------------------------
1 | .timepicker {
2 | -webkit-user-select: none;
3 | -moz-user-select: none;
4 | -ms-user-select: none;
5 | user-select: none;
6 | }
7 |
8 | .timepicker-bubble {
9 | cursor: pointer;
10 | }
11 |
12 | .timepicker-bubble circle {
13 | r: 15;
14 |
15 | fill: #79c7ff;
16 |
17 | opacity: 0.75;
18 |
19 | -webkit-transition: fill 0.25s linear, opacity 0.25s linear;
20 | -moz-transition: fill 0.25s linear, opacity 0.25s linear;
21 | -o-transition: fill 0.25s linear, opacity 0.25s linear;
22 | transition: fill 0.25s linear, opacity 0.25s linear;
23 | }
24 |
25 | .timepicker-bubble.small circle {
26 | r: 0;
27 |
28 | fill: none;
29 |
30 | -webkit-transition: r 0.25s linear;
31 | -moz-transition: r 0.25s linear;
32 | -o-transition: r 0.25s linear;
33 | transition: r 0.25s linear;
34 | }
35 |
36 | .timepicker-bubble.small.active circle {
37 | r: 5;
38 |
39 | -webkit-transition-delay: 0.25s;
40 | -moz-transition-delay: 0.25s;
41 | -o-transition-delay: 0.25s;
42 | transition-delay: 0.25s;
43 |
44 | -webkit-transition-duration: 0.1s;
45 | -moz-transition-duration: 0.1s;
46 | -o-transition-duration: 0.1s;
47 | transition-duration: 0.1s;
48 | }
49 |
50 | .timepicker-bubble.small circle + circle {
51 | r: 10;
52 |
53 | fill: transparent;
54 | }
55 |
56 | .timepicker-bubble:hover circle,
57 | .timepicker-bubble.active circle {
58 | opacity: 1;
59 |
60 | fill: #3caeff;
61 | }
62 |
63 | .timepicker-bubble text {
64 | fill: #ffffff;
65 |
66 | font-family: monospace;
67 |
68 | text-anchor: middle;
69 | dominant-baseline: middle;
70 | }
71 |
72 | .timepicker-hand {
73 | opacity: 0.25;
74 |
75 | stroke: #3caeff;
76 | stroke-width: 5;
77 | stroke-linecap: round;
78 |
79 | -webkit-transition-duration: 0.25s;
80 | -moz-transition-duration: 0.25s;
81 | -o-transition-duration: 0.25s;
82 | transition-duration: 0.25s;
83 |
84 | -webkit-transition-timing-function: linear;
85 | -moz-transition-timing-function: linear;
86 | -o-transition-timing-function: linear;
87 | transition-timing-function: linear;
88 | }
89 |
90 | .timepicker-visible,
91 | .timepicker-invisible {
92 | -webkit-transform-origin: center;
93 | -moz-transform-origin: center;
94 | -ms-transform-origin: center;
95 | -o-transform-origin: center;
96 | transform-origin: center;
97 |
98 | -webkit-transition: opacity 0.5s linear, visibility 0.5s linear, -webkit-transform 0.25s linear;
99 | transition: opacity 0.5s linear, visibility 0.5s linear, -webkit-transform 0.25s linear;
100 | -moz-transition: opacity 0.5s linear, transform 0.25s linear, visibility 0.5s linear, -moz-transform 0.25s linear;
101 | -o-transition: opacity 0.5s linear, transform 0.25s linear, visibility 0.5s linear, -o-transform 0.25s linear;
102 | transition: opacity 0.5s linear, transform 0.25s linear, visibility 0.5s linear;
103 | transition: opacity 0.5s linear, transform 0.25s linear, visibility 0.5s linear, -webkit-transform 0.25s linear, -moz-transform 0.25s linear, -o-transform 0.25s linear;
104 | }
105 |
106 | .timepicker-invisible {
107 | opacity: 0;
108 |
109 | visibility: hidden;
110 |
111 | -webkit-transform: scale(0.75);
112 | -moz-transform: scale(0.75);
113 | -ms-transform: scale(0.75);
114 | -o-transform: scale(0.75);
115 | transform: scale(0.75);
116 | }
117 |
118 | .timepicker-visible {
119 | opacity: 1;
120 |
121 | visibility: visible;
122 |
123 | -webkit-transform: scale(1);
124 | -moz-transform: scale(1);
125 | -ms-transform: scale(1);
126 | -o-transform: scale(1);
127 | transform: scale(1);
128 | }
129 |
130 | .timepicker-info {
131 | color: #bac0c5;
132 |
133 | margin: 0;
134 |
135 | font-size: 2em;
136 | line-height: 1em;
137 | font-weight: bold;
138 |
139 | text-align: center;
140 | }
141 |
142 | .timepicker-info-digits {
143 | cursor: pointer;
144 |
145 | -webkit-transition: color 0.25s linear;
146 | -moz-transition: color 0.25s linear;
147 | -o-transition: color 0.25s linear;
148 | transition: color 0.25s linear;
149 | }
150 |
151 | .timepicker-info-digits.active {
152 | color: #3caeff;
153 | }
154 |
--------------------------------------------------------------------------------
/timepicker.es6.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import React from 'react';
3 |
4 | export class Timepicker extends React.Component {
5 | constructor ({hours, minutes, mode}) {
6 | super(...arguments);
7 |
8 | this.state = {hours, minutes, mode};
9 |
10 | this.onChange = this.onChange.bind(this);
11 | this.onChangeMode = this.onChangeMode.bind(this);
12 | }
13 |
14 | componentWillReceiveProps ({hours, minutes, mode}) {
15 | const diff = {};
16 | const props = this.props;
17 |
18 | if (props.hours !== hours) diff.hours = hours;
19 | if (props.minutes !== minutes) diff.minutes = minutes;
20 | if (props.mode !== mode) diff.mode = mode;
21 |
22 | this.setState(diff);
23 | }
24 |
25 | render () {
26 | const {hours, minutes, mode} = this.state;
27 | const {formatNumber, militaryTime, radius, size} = this.props;
28 |
29 | return (
30 |
31 |
39 |
40 |
51 |
52 | );
53 | }
54 |
55 | onChange (hours, minutes) {
56 | this.setState({hours, minutes});
57 |
58 | if (this.props.onChange)
59 | this.props.onChange(hours, minutes);
60 | }
61 |
62 | onChangeMode (mode) {
63 | this.setState({mode});
64 |
65 | if (this.props.onChangeMode)
66 | this.props.onChangeMode(mode);
67 | }
68 | }
69 |
70 | Timepicker.HOURS = true;
71 | Timepicker.MINUTES = false;
72 |
73 | Timepicker.propTypes = {
74 | formatNumber: PropTypes.func,
75 | hours: PropTypes.number,
76 | militaryTime: PropTypes.bool,
77 | minutes: PropTypes.number,
78 | mode: PropTypes.bool,
79 | onChange: PropTypes.func,
80 | onChangeMode: PropTypes.func,
81 | radius: PropTypes.number,
82 | size: PropTypes.number
83 | };
84 |
85 | Timepicker.defaultProps = {
86 | formatNumber: (value/*, mode */) => value < 10 ? '0' + value : value,
87 | hours: 0,
88 | militaryTime: true,
89 | minutes: 0,
90 | mode: Timepicker.HOURS,
91 | radius: 125,
92 | size: 300
93 | };
94 |
95 | export class Info extends React.Component {
96 | constructor () {
97 | super(...arguments);
98 |
99 | this.onClickHours = this.onClickHours.bind(this);
100 | this.onClickMinutes = this.onClickMinutes.bind(this);
101 | }
102 |
103 | render () {
104 | const {formatNumber, hours, minutes, mode, size} = this.props;
105 |
106 | return (
107 |
108 |
109 | {formatNumber(hours, 'info')}
110 |
111 | :
112 |
113 | {formatNumber(minutes, 'info')}
114 |
115 |
116 | );
117 | }
118 |
119 | onClickHours () {
120 | if (this.props.onChangeMode)
121 | this.props.onChangeMode(Timepicker.HOURS);
122 | }
123 |
124 | onClickMinutes () {
125 | if (this.props.onChangeMode)
126 | this.props.onChangeMode(Timepicker.MINUTES);
127 | }
128 | }
129 |
130 | Info.propTypes = {
131 | formatNumber: PropTypes.func.isRequired,
132 | hours: PropTypes.number.isRequired,
133 | minutes: PropTypes.number.isRequired,
134 | mode: PropTypes.bool.isRequired,
135 | onChangeMode: PropTypes.func,
136 | size: PropTypes.number.isRequired
137 | };
138 |
139 | Timepicker.Info = Info;
140 |
141 | export class Clock extends React.Component {
142 | constructor ({hours, militaryTime, minutes, mode}) {
143 | super(...arguments);
144 |
145 | this.state = {
146 | even: true,
147 | hours: hours % (militaryTime ? 24 : 12),
148 | minutes: minutes % 60,
149 | mode: mode,
150 | positionsHours: this.calculatePositionsHours(),
151 | positionsMinutes: this.calculatePositionsMinutes()
152 | };
153 |
154 | this.onHand1 = this.onHand1.bind(this);
155 | this.onHand2 = this.onHand2.bind(this);
156 | }
157 |
158 | componentWillReceiveProps ({hours, militaryTime, minutes, mode, radius, size}) {
159 | const props = this.props;
160 |
161 | if (size !== props.size || radius !== props.radius) {
162 | this.setState({
163 | positionsHours: this.calculatePositionsHours(),
164 | positionsMinutes: this.calculatePositionsMinutes()
165 | });
166 | } else if (militaryTime !== props.militaryTime) {
167 | this.setState({
168 | positionsHours: this.calculatePositionsHours()
169 | });
170 | }
171 |
172 | if (mode !== props.mode)
173 | this.setState({mode: mode});
174 |
175 | if (hours !== props.hours)
176 | this.setState({hours: hours % (militaryTime ? 24 : 12)});
177 |
178 | if (minutes !== props.minutes)
179 | this.setState({minutes: minutes % 60});
180 | }
181 |
182 | componentDidMount () {
183 | this.componentDidUpdate({});
184 | }
185 |
186 | componentDidUpdate (previousProps, previousState) {
187 | const {militaryTime, mode, size} = this.props;
188 | const {even, hours, minutes, positionsHours, positionsMinutes} = this.state;
189 |
190 | if (previousProps.mode === mode && previousState.hours === hours && previousState.minutes === minutes)
191 | return;
192 |
193 | const hand1 = even ? this.hand1 : this.hand2;
194 | const hand2 = even ? this.hand2 : this.hand1;
195 |
196 | hand1.setAttribute('x2', mode ? positionsHours[hours === 0 ? militaryTime ? 23 : 11 : hours - 1][0] : positionsMinutes[minutes][0]);
197 | hand1.setAttribute('y2', mode ? positionsHours[hours === 0 ? militaryTime ? 23 : 11 : hours - 1][1] : positionsMinutes[minutes][1]);
198 |
199 | if (previousProps.mode !== mode) {
200 | hand2.setAttribute('x2', size / 2);
201 | hand2.setAttribute('y2', size / 2);
202 | }
203 |
204 | const dx1 = hand1.getAttribute('x1') - hand1.getAttribute('x2');
205 | const dy1 = hand1.getAttribute('y1') - hand1.getAttribute('y2');
206 | const dx2 = hand2.getAttribute('x1') - hand2.getAttribute('x2');
207 | const dy2 = hand2.getAttribute('y1') - hand2.getAttribute('y2');
208 |
209 | const hand1Length = Math.ceil(Math.sqrt(dx1 * dx1 + dy1 * dy1));
210 | const hand2Length = Math.ceil(Math.sqrt(dx2 * dx2 + dy2 * dy2));
211 |
212 | hand1.style.strokeDasharray = hand1Length;
213 | hand2.style.strokeDasharray = hand2Length;
214 | hand1.style.strokeDashoffset = hand1Length;
215 | hand2.style.strokeDashoffset = '0';
216 | hand1.style.transitionProperty = 'none';
217 | hand2.style.transitionProperty = 'none';
218 |
219 | hand1.getBoundingClientRect();
220 | hand2.getBoundingClientRect();
221 | hand1.style.transitionProperty = 'stroke-dashoffset';
222 | hand2.style.transitionProperty = 'stroke-dashoffset';
223 | hand1.style.strokeDashoffset = '0';
224 | hand2.style.strokeDashoffset = hand2Length;
225 | }
226 |
227 | render () {
228 | const size = this.props.size;
229 | const mode = this.state.mode;
230 |
231 | return (
232 |
243 | );
244 | }
245 |
246 | renderHoursBubbles () {
247 | const {formatNumber} = this.props;
248 | const {hours, positionsHours: positions} = this.state;
249 |
250 | const bubbles = [];
251 |
252 | for (let index = 0; index < positions.length; ++index) {
253 | const x = positions[index][0];
254 | const y = positions[index][1];
255 |
256 | const hour = (index + 1) % 24;
257 |
258 | const onClick = this.onClickHour(hour);
259 | const onMouseMove = this.onMouseMoveHour(hour);
260 |
261 | bubbles.push(
262 |
269 |
270 |
271 |
272 | {formatNumber(hour, 'clock')}
273 |
274 |
275 | );
276 | }
277 |
278 | return bubbles;
279 | }
280 |
281 | renderMinutesBubbles () {
282 | const {formatNumber} = this.props;
283 | const {minutes, positionsMinutes: positions} = this.state;
284 |
285 | const bubbles = [];
286 |
287 | for (let minute = 0; minute < positions.length; ++minute) {
288 | const x = positions[minute][0];
289 | const y = positions[minute][1];
290 |
291 | const onClick = this.onClickMinute(minute);
292 | const onMouseMove = this.onMouseMoveMinute(minute);
293 |
294 | bubbles.push(
295 |
301 |
302 |
303 | {minute % 5 ? (
304 |
305 | ) : (
306 |
307 | {formatNumber(minute, 'clock')}
308 |
309 | )}
310 |
311 | );
312 | }
313 |
314 | return bubbles;
315 | }
316 |
317 | onChange () {
318 | if (this.props.onChange)
319 | this.props.onChange(this.state.hours, this.state.minutes);
320 |
321 | if (this.props.onChangeMode)
322 | this.props.onChangeMode(this.state.mode);
323 | }
324 |
325 | onClickHour (hours) {
326 | return (event, preventChangeMode) => {
327 | if (this.state.hours === hours && preventChangeMode)
328 | return;
329 |
330 | this.setState({
331 | even: !this.state.even,
332 | hours,
333 | mode: preventChangeMode
334 | ? this.state.mode === Timepicker.HOURS ? Timepicker.HOURS : Timepicker.MINUTES
335 | : this.state.mode === Timepicker.HOURS ? Timepicker.MINUTES : Timepicker.HOURS
336 | }, () => this.onChange());
337 | };
338 | }
339 |
340 | onClickMinute (minutes) {
341 | return () => {
342 | if (this.state.minutes === minutes)
343 | return;
344 |
345 | this.setState({minutes: minutes, even: !this.state.even}, () => this.onChange());
346 | };
347 | }
348 |
349 | onHand1 (hand1) {
350 | this.hand1 = hand1;
351 | }
352 |
353 | onHand2 (hand2) {
354 | this.hand2 = hand2;
355 | }
356 |
357 | onMouseMoveHour (hours) {
358 | const onClickHour = this.onClickHour(hours);
359 |
360 | return function (event) {
361 | const isMouseUp = event.type === 'mouseup';
362 | if (isMouseUp || event.buttons === 1)
363 | onClickHour(event, !isMouseUp);
364 | };
365 | }
366 |
367 | onMouseMoveMinute (minutes) {
368 | const onClickMinute = this.onClickMinute(minutes);
369 |
370 | return function (event) {
371 | if (event.buttons === 1)
372 | onClickMinute();
373 | };
374 | }
375 |
376 | calculatePositionsHours () {
377 | const {militaryTime, radius, size} = this.props;
378 |
379 | const positions = [];
380 |
381 | for (let index = 1; index <= (militaryTime ? 24 : 12); ++index) {
382 | positions.push([
383 | Math.round(size / 2 + radius * (militaryTime ? index > 12 ? 1 : 0.65 : 1) * Math.cos((index % 12 / 6 - 0.5) * Math.PI)),
384 | Math.round(size / 2 + radius * (militaryTime ? index > 12 ? 1 : 0.65 : 1) * Math.sin((index % 12 / 6 - 0.5) * Math.PI))
385 | ]);
386 | }
387 |
388 | return positions;
389 | }
390 |
391 | calculatePositionsMinutes () {
392 | const {radius, size} = this.props;
393 |
394 | const positions = [];
395 |
396 | for (let index = 0; index < 60; ++index) {
397 | positions.push([
398 | Math.round(size / 2 + radius * Math.cos((index / 30 - 0.5) * Math.PI)),
399 | Math.round(size / 2 + radius * Math.sin((index / 30 - 0.5) * Math.PI))
400 | ]);
401 | }
402 |
403 | return positions;
404 | }
405 | }
406 |
407 | Clock.propTypes = {
408 | formatNumber: PropTypes.func.isRequired,
409 | hours: PropTypes.number.isRequired,
410 | militaryTime: PropTypes.bool.isRequired,
411 | minutes: PropTypes.number.isRequired,
412 | mode: PropTypes.bool.isRequired,
413 | onChange: PropTypes.func,
414 | onChangeMode: PropTypes.func,
415 | radius: PropTypes.number.isRequired,
416 | size: PropTypes.number.isRequired
417 | };
418 |
419 | Timepicker.Clock = Clock;
420 |
--------------------------------------------------------------------------------
/timepicker.js:
--------------------------------------------------------------------------------
1 | 'use strict';Object.defineProperty(exports,'__esModule',{value:true});exports.Clock=exports.Info=exports.Timepicker=undefined;var _createClass=function(){function defineProperties(target,props){for(var i=0;i12?1:0.65:1)*Math.cos((index%12/6-0.5)*Math.PI)),Math.round(size/2+radius*(militaryTime?index>12?1:0.65:1)*Math.sin((index%12/6-0.5)*Math.PI))])}return positions}},{key:'calculatePositionsMinutes',value:function calculatePositionsMinutes(){var _props5=this.props,radius=_props5.radius,size=_props5.size;var positions=[];for(var index=0;index<60;++index){positions.push([Math.round(size/2+radius*Math.cos((index/30-0.5)*Math.PI)),Math.round(size/2+radius*Math.sin((index/30-0.5)*Math.PI))])}return positions}}]);return Clock}(_react2.default.Component);Clock.propTypes=process.env.NODE_ENV!=='production'?{formatNumber:_propTypes2.default.func.isRequired,hours:_propTypes2.default.number.isRequired,militaryTime:_propTypes2.default.bool.isRequired,minutes:_propTypes2.default.number.isRequired,mode:_propTypes2.default.bool.isRequired,onChange:_propTypes2.default.func,onChangeMode:_propTypes2.default.func,radius:_propTypes2.default.number.isRequired,size:_propTypes2.default.number.isRequired}:{};Timepicker.Clock=Clock;
2 |
3 |
--------------------------------------------------------------------------------
/timepicker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/radekmie/react-timepicker/030a73b01f08a37ea59808227909f347a5323273/timepicker.png
--------------------------------------------------------------------------------