├── .babelrc
├── .gitignore
├── .npmignore
├── .travis.yml
├── CHANGELOG.md
├── README.md
├── example
├── .babelrc
├── BasicExample.js
├── CustomBlocksAndStyles.js
├── CustomExample.js
├── DropdownExample.js
├── app.js
├── build
│ ├── Draft.css
│ ├── app.js
│ └── index.html
├── package.json
└── yarn.lock
├── package.json
└── src
├── BlockButton
└── index.js
├── StyleButton
└── index.js
├── __test__
└── index.js
├── config
└── types.js
└── index.js
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["react", "es2015", "stage-0"]
3 | }
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | lib/*
2 | node_modules
3 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | # Dependency directory
2 | # Commenting this out is preferred by some people, see
3 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git-
4 | node_modules
5 | example
6 |
7 | # sources
8 | /src/
9 | .babelrc
10 | .gitignore
11 | README.md
12 | CHANGELOG.md
13 |
14 | # NPM debug
15 | npm-debug.log
16 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - "node"
4 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | All notable changes to this project will be documented in this file.
4 | This project adheres to [Semantic Versioning](http://semver.org/).
5 |
6 | ## 2.2.0 - 2018-01-26
7 |
8 | Buttons for custom block types or custom inline styles can now easily be generated; see the example at `/example/CustomBlocksAndStyles.js`.
9 |
10 | ## 2.1.0 - 2017-06-22
11 | Updated key handling code to use new signature from recent draft-js changes; move to latest release candidate of draft-js-plugins.
12 |
13 | ## 2.0.0 - 2017-03-03
14 | Compatibility with draft-js-plugins 2.0 beta / release candidates (note: use 1.x.x release of this plugin if sticking with draft-js-plugins v1.x.x)
15 |
16 | ## 1.0.1 - 2016-06-17
17 | Cleand up npm module
18 |
19 | ## 1.0.0 - 2016-06-16
20 | Released the first working version of DraftJS RichButtons Plugin
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # DraftJS RichButtons Plugin
2 |
3 | [](http://badge.fury.io/js/draft-js-richbuttons-plugin) [](https://travis-ci.org/jasonphillips/draft-js-richbuttons-plugin) [](https://www.npmjs.com/package/draft-js-richbuttons-plugin)
4 |
5 | *This is a plugin for the `draft-js-plugins-editor`.*
6 | This plugin allows you to add essential rich formatting buttons (inline and block styles) to your plugins-enabled editor.
7 |
8 | ## Usage
9 |
10 | First instantiate the plugin:
11 |
12 | ```js
13 | import createRichButtonsPlugin from 'draft-js-richbuttons-plugin';
14 |
15 | const richButtonsPlugin = createRichButtonsPlugin();
16 | ```
17 |
18 | Now get any desired components for inline or block formatting buttons from the instance:
19 |
20 | ```js
21 | /* import only the ones you need; all available shown */
22 | const {
23 | // inline buttons
24 | ItalicButton, BoldButton, MonospaceButton, UnderlineButton,
25 | // block buttons
26 | ParagraphButton, BlockquoteButton, CodeButton, OLButton, ULButton, H1Button, H2Button, H3Button, H4Button, H5Button, H6Button
27 | } = richButtonsPlugin;
28 | ```
29 |
30 | Render these where desired in your component:
31 |
32 | ```HTML
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | ```
42 |
43 | ## Custom Block Types or Inline Styles
44 |
45 | Button components behaving exactly like those above can be obtained for any custom block or inline style types used in your draft instance, by invoking either `createStyleButton` or `createBlockButton`:
46 |
47 | ```js
48 | const { createStyleButton, createBlockButton } = richButtonsPlugin;
49 |
50 | // create a custom inlinestyle button
51 | const RedStyleButton = createStyleButton({style: 'RED', label: 'Red'});
52 |
53 | // create a custom block-type button
54 | const BorderedBlockButton = createBlockButton({type: 'BorderedBox', label: 'LittleBox'});
55 | ```
56 |
57 | See more complete code in the included example.
58 |
59 | ## Rendering Your Own Buttons
60 |
61 | The default buttons are intentionally plain, but will pass the needed props down to their child, allowing you to customize rendering to your needs.
62 |
63 | Props passed to both inline and block buttons:
64 |
65 | - **isActive** (_bool_) - true if style / blocktype active in selection
66 | - **label** (_string_) - default label
67 |
68 | Props unique to inline buttons:
69 |
70 | - **toggleInlineStyle** (_func_) - to be attached to your click event
71 | - **inlineStyle** (_string_) - the draft code for the style
72 | - **onMouseDown** (_func_) - attach this to the onMouseDown event of your custom controls; important for preventing focus from leaving the editor when toggling an inline style with a click
73 |
74 | Props unique to block buttons:
75 |
76 | - **toggleBlockType** (_func_) - to be attached to your click event
77 | - **blockType** (_string_) - the draft code for the block type
78 |
79 | Example:
80 |
81 | ```js
82 | /*
83 | Stateless component for inline style buttons, using the passed props as well as a custom prop "iconName"
84 | */
85 | const MyIconButton = ({iconName, toggleInlineStyle, isActive, label, inlineStyle, onMouseDown, title}) =>
86 |
87 |
92 | ;
93 | ```
94 |
95 | The above presentational component could then be used this way:
96 |
97 | ```html
98 |
99 |
100 |
101 |
102 |
103 |
104 | ```
105 |
106 | ## Key Bindings
107 |
108 | The plugin automatically applies default key bindings from draft's `RichUtils`, including Tab / Shift-Tab behavior for nested lists.
109 |
110 | ## License
111 |
112 | MIT
113 |
--------------------------------------------------------------------------------
/example/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["react", "es2015", "stage-0"]
3 | }
4 |
--------------------------------------------------------------------------------
/example/BasicExample.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Well, Panel } from 'react-bootstrap';
3 |
4 | import Draft from 'draft-js';
5 | import DraftPasteProcessor from 'draft-js/lib/DraftPasteProcessor';
6 | const { EditorState, ContentState } = Draft;
7 | import Editor from 'draft-js-plugins-editor';
8 |
9 | import createBlockBreakoutPlugin from 'draft-js-block-breakout-plugin';
10 | const blockBreakoutPlugin = createBlockBreakoutPlugin();
11 |
12 | import createRichButtonsPlugin from 'draft-js-richbuttons-plugin';
13 | const richButtonsPlugin = createRichButtonsPlugin();
14 |
15 | const {
16 | // inline buttons
17 | ItalicButton, BoldButton, MonospaceButton, UnderlineButton,
18 | // block buttons
19 | ParagraphButton, H1Button, H2Button, ULButton, OLButton
20 | } = richButtonsPlugin;
21 |
22 |
23 | class BasicExample extends React.Component {
24 |
25 | state = {
26 | editorState: this._getPlaceholder()
27 | }
28 |
29 | _getPlaceholder() {
30 | const placeholder = 'Add rich controls to your editor with minimal hassle.
';
31 | const contentHTML = DraftPasteProcessor.processHTML(placeholder);
32 | const state = ContentState.createFromBlockArray(contentHTML);
33 | return Draft.EditorState.createWithContent(state);
34 | }
35 |
36 | _onChange(editorState) {
37 | this.setState({editorState});
38 | }
39 |
40 | render() {
41 | let { editorState } = this.state;
42 |
43 | return (
44 |
45 |
46 |
47 |
48 |
49 |
50 | |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
64 |
65 |
66 |
67 | );
68 | }
69 | }
70 |
71 | export default BasicExample;
72 |
--------------------------------------------------------------------------------
/example/CustomBlocksAndStyles.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Well, Panel } from 'react-bootstrap';
3 | import Immutable from 'immutable';
4 |
5 | import Draft from 'draft-js';
6 | import DraftPasteProcessor from 'draft-js/lib/DraftPasteProcessor';
7 | const { EditorState, ContentState } = Draft;
8 | import Editor from 'draft-js-plugins-editor';
9 |
10 | import createBlockBreakoutPlugin from 'draft-js-block-breakout-plugin';
11 | const blockBreakoutPlugin = createBlockBreakoutPlugin();
12 |
13 | import createRichButtonsPlugin from '../' // from 'draft-js-richbuttons-plugin';
14 | const richButtonsPlugin = createRichButtonsPlugin();
15 |
16 | const {
17 | // inline buttons
18 | ItalicButton, BoldButton, createStyleButton,
19 | // block buttons
20 | ParagraphButton, H2Button, createBlockButton,
21 | } = richButtonsPlugin;
22 |
23 | // create your custom inlinestyle button
24 | const RedStyleButton = createStyleButton({style: 'RED', label: 'Red'});
25 |
26 | // create your custom block-type button
27 | const BorderedBlockButton = createBlockButton({type: 'BorderedBox', label: 'LittleBox'});
28 |
29 | // draft style map to apply that custom RED style
30 | const styleMap = {
31 | 'RED': {
32 | color: '#900',
33 | },
34 | };
35 |
36 | // all this does is set a css class (.bordered_style) on the custom block
37 | const blockStyleFn = (contentBlock) => {
38 | const type = contentBlock.getType();
39 | if (type==='BorderedBox') {
40 | return 'bordered_style';
41 | }
42 | }
43 |
44 | // this maps tags to the custom block type mainly so that I can create them in the placeholder HTML below
45 | const blockRenderMap = Draft.DefaultDraftBlockRenderMap.merge(
46 | Immutable.Map({
47 | 'BorderedBox': {
48 | element: 'summary',
49 | }
50 | })
51 | );
52 |
53 |
54 | class BasicExample extends React.Component {
55 |
56 | state = {
57 | editorState: this._getPlaceholder()
58 | }
59 |
60 | _getPlaceholder() {
61 | const placeholder = `
62 | You can also create custom styles or block types.
63 | Press the LittleBox button above to toggle a custom block like this one; and try the Red button to highlight text in red.
64 | See the example code for usage.
65 | `;
66 | const blocksFromHTML = Draft.convertFromHTML(
67 | placeholder,
68 | Draft.getSafeBodyFromHTML,
69 | blockRenderMap
70 | );
71 | const state = ContentState.createFromBlockArray(
72 | blocksFromHTML.contentBlocks,
73 | blocksFromHTML.entityMap
74 | );
75 | return Draft.EditorState.createWithContent(state);
76 | }
77 |
78 | _onChange(editorState) {
79 | this.setState({editorState});
80 | }
81 |
82 | render() {
83 | let { editorState } = this.state;
84 |
85 | return (
86 |
87 |
88 |
89 |
90 |
91 | |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
107 |
108 |
109 |
110 | );
111 | }
112 | }
113 |
114 | export default BasicExample;
115 |
--------------------------------------------------------------------------------
/example/CustomExample.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Well, Panel, Button, ButtonToolbar, ButtonGroup, Glyphicon } from 'react-bootstrap';
3 |
4 | import Draft from 'draft-js';
5 | import DraftPasteProcessor from 'draft-js/lib/DraftPasteProcessor';
6 | const { EditorState, ContentState } = Draft;
7 | import Editor from 'draft-js-plugins-editor';
8 |
9 | import createBlockBreakoutPlugin from 'draft-js-block-breakout-plugin';
10 | const blockBreakoutPlugin = createBlockBreakoutPlugin();
11 |
12 | import createRichButtonsPlugin from '../' // from 'draft-js-richbuttons-plugin';
13 | const richButtonsPlugin = createRichButtonsPlugin();
14 |
15 | const {
16 | // inline buttons
17 | ItalicButton, BoldButton,
18 | // block buttons
19 | H2Button, H3Button, ULButton, OLButton
20 | } = richButtonsPlugin;
21 |
22 | // custom inline button
23 | const MyIconButton = ({glyph, toggleInlineStyle, isActive, label, inlineStyle, onMouseDown }) =>
24 | ;
30 |
31 | // custom block button
32 | const MyBlockButton = ({ toggleBlockType, isActive, label, blockType }) =>
33 | {label} ;
38 |
39 |
40 | class CustomExample extends React.Component {
41 |
42 | state = {
43 | editorState: this._getPlaceholder()
44 | }
45 |
46 | _getPlaceholder() {
47 | const placeholder =
48 | 'You can customize your own buttons easily.
' +
49 | ''
50 | ;
51 | const contentHTML = DraftPasteProcessor.processHTML(placeholder);
52 | const state = ContentState.createFromBlockArray(contentHTML);
53 | return Draft.EditorState.createWithContent(state);
54 | }
55 |
56 | _onChange(editorState) {
57 | this.setState({editorState});
58 | }
59 |
60 | render() {
61 | let { editorState } = this.state;
62 |
63 | return (
64 |
65 |
66 |
67 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 | );
90 | }
91 | }
92 |
93 | export default CustomExample;
94 |
--------------------------------------------------------------------------------
/example/DropdownExample.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Well, Panel, Button, ButtonToolbar, ButtonGroup, Glyphicon, DropdownButton, MenuItem } from 'react-bootstrap';
3 |
4 | import Draft from 'draft-js';
5 | import DraftPasteProcessor from 'draft-js/lib/DraftPasteProcessor';
6 | const { EditorState, ContentState } = Draft;
7 | import Editor from 'draft-js-plugins-editor';
8 |
9 | import createBlockBreakoutPlugin from 'draft-js-block-breakout-plugin';
10 | const blockBreakoutPlugin = createBlockBreakoutPlugin();
11 |
12 | import createRichButtonsPlugin from '../';
13 | const richButtonsPlugin = createRichButtonsPlugin();
14 |
15 | const {
16 | // inline buttons
17 | ItalicButton, BoldButton, UnderlineButton,
18 | // single component for block controls
19 | BlockControls
20 | } = richButtonsPlugin;
21 |
22 | // custom inline button
23 | const CustomButton = ({children, toggleInlineStyle, isActive, label, inlineStyle, onMouseDown }) =>
24 | {children} ;
30 |
31 | // custom dropdown for block types
32 | const MySelect = ({blockTypes, activeType, activeLabel, selectBlockType}) =>
33 |
34 | {blockTypes.map(({style, label}) =>
35 | { label }
36 | )}
37 |
38 |
39 |
40 | class DropdownExample extends React.Component {
41 |
42 | state = {
43 | editorState: this._getPlaceholder()
44 | }
45 |
46 | _getPlaceholder() {
47 | const placeholder =
48 | 'Another option provided for block controls is a dropdown menu.
'
49 | ;
50 | const contentHTML = DraftPasteProcessor.processHTML(placeholder);
51 | const state = ContentState.createFromBlockArray(contentHTML);
52 | return Draft.EditorState.createWithContent(state);
53 | }
54 |
55 | _onChange(editorState) {
56 | this.setState({editorState});
57 | }
58 |
59 | render() {
60 | let { editorState } = this.state;
61 |
62 | return (
63 |
64 |
65 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 | Abc
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 | );
94 | }
95 | }
96 |
97 | export default DropdownExample;
98 |
--------------------------------------------------------------------------------
/example/app.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import BasicExample from './BasicExample';
4 | import CustomExample from './CustomExample';
5 | import CustomTypes from './CustomBlocksAndStyles';
6 | import { Grid, Alert } from 'react-bootstrap';
7 |
8 | class App extends React.Component {
9 | render() {
10 | return (
11 |
12 | DraftJS RichButtons Plugin
13 |
14 | A plugin for the
15 | DraftJS Plugins Editor
16 | that provides a simple way to add customizable rich-text controls to your draft-js instance.
17 |
18 |
19 |
24 |
25 |
26 | Custom Buttons Example
27 |
28 | {code}
29 |
30 |
31 |
32 |
33 |
34 | Custom Block Types & Styles
35 |
36 | {code}
37 |
38 |
39 |
40 |
41 | );
42 | }
43 | }
44 |
45 | ReactDOM.render( , document.getElementById( 'app' ));
46 |
--------------------------------------------------------------------------------
/example/build/Draft.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Draft v0.7.0
3 | *
4 | * Copyright (c) 2013-present, Facebook, Inc.
5 | * All rights reserved.
6 | *
7 | * This source code is licensed under the BSD-style license found in the
8 | * LICENSE file in the root directory of this source tree. An additional grant
9 | * of patent rights can be found in the PATENTS file in the same directory.
10 | */
11 | .DraftEditor-editorContainer,.DraftEditor-root,.public-DraftEditor-content{height:inherit;text-align:initial}.DraftEditor-root{position:relative}.DraftEditor-editorContainer{background-color:rgba(255,255,255,0);border-left:.1px solid transparent;position:relative;z-index:1}.public-DraftEditor-block{position:relative}.DraftEditor-alignLeft .public-DraftStyleDefault-block{text-align:left}.DraftEditor-alignLeft .public-DraftEditorPlaceholder-root{left:0;text-align:left}.DraftEditor-alignCenter .public-DraftStyleDefault-block{text-align:center}.DraftEditor-alignCenter .public-DraftEditorPlaceholder-root{margin:0 auto;text-align:center;width:100%}.DraftEditor-alignRight .public-DraftStyleDefault-block{text-align:right}.DraftEditor-alignRight .public-DraftEditorPlaceholder-root{right:0;text-align:right}.public-DraftEditorPlaceholder-root{color:#9197a3;position:absolute;z-index:0}.public-DraftEditorPlaceholder-hasFocus{color:#bdc1c9}.DraftEditorPlaceholder-hidden{display:none}.public-DraftStyleDefault-block{position:relative;white-space:pre-wrap}.public-DraftStyleDefault-ltr{direction:ltr;text-align:left}.public-DraftStyleDefault-rtl{direction:rtl;text-align:right}.public-DraftStyleDefault-listLTR{direction:ltr}.public-DraftStyleDefault-listRTL{direction:rtl}.public-DraftStyleDefault-ol,.public-DraftStyleDefault-ul{margin:16px 0;padding:0}.public-DraftStyleDefault-depth0.public-DraftStyleDefault-listLTR{margin-left:1.5em}.public-DraftStyleDefault-depth0.public-DraftStyleDefault-listRTL{margin-right:1.5em}.public-DraftStyleDefault-depth1.public-DraftStyleDefault-listLTR{margin-left:3em}.public-DraftStyleDefault-depth1.public-DraftStyleDefault-listRTL{margin-right:3em}.public-DraftStyleDefault-depth2.public-DraftStyleDefault-listLTR{margin-left:4.5em}.public-DraftStyleDefault-depth2.public-DraftStyleDefault-listRTL{margin-right:4.5em}.public-DraftStyleDefault-depth3.public-DraftStyleDefault-listLTR{margin-left:6em}.public-DraftStyleDefault-depth3.public-DraftStyleDefault-listRTL{margin-right:6em}.public-DraftStyleDefault-depth4.public-DraftStyleDefault-listLTR{margin-left:7.5em}.public-DraftStyleDefault-depth4.public-DraftStyleDefault-listRTL{margin-right:7.5em}.public-DraftStyleDefault-unorderedListItem{list-style-type:square;position:relative}.public-DraftStyleDefault-unorderedListItem.public-DraftStyleDefault-depth0{list-style-type:disc}.public-DraftStyleDefault-unorderedListItem.public-DraftStyleDefault-depth1{list-style-type:circle}.public-DraftStyleDefault-orderedListItem{list-style-type:none;position:relative}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-listLTR:before{left:-36px;position:absolute;text-align:right;width:30px}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-listRTL:before{position:absolute;right:-36px;text-align:left;width:30px}.public-DraftStyleDefault-orderedListItem:before{content:counter(ol0) ". ";counter-increment:ol0}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-depth1:before{content:counter(ol1) ". ";counter-increment:ol1}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-depth2:before{content:counter(ol2) ". ";counter-increment:ol2}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-depth3:before{content:counter(ol3) ". ";counter-increment:ol3}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-depth4:before{content:counter(ol4) ". ";counter-increment:ol4}.public-DraftStyleDefault-depth0.public-DraftStyleDefault-reset{counter-reset:ol0}.public-DraftStyleDefault-depth1.public-DraftStyleDefault-reset{counter-reset:ol1}.public-DraftStyleDefault-depth2.public-DraftStyleDefault-reset{counter-reset:ol2}.public-DraftStyleDefault-depth3.public-DraftStyleDefault-reset{counter-reset:ol3}.public-DraftStyleDefault-depth4.public-DraftStyleDefault-reset{counter-reset:ol4}
--------------------------------------------------------------------------------
/example/build/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | DraftJS RichButtons Plugin
7 |
8 |
9 |
10 |
11 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/example/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "draft-js-richbuttons-plugin-example",
3 | "version": "1.0.0",
4 | "description": "Demonstration of the plugin",
5 | "main": "app.js",
6 | "scripts": {
7 | "build": "browserify ./app.js -t babelify --outfile build/app.js"
8 | },
9 | "author": "",
10 | "license": "MIT",
11 | "devDependencies": {
12 | "babel-preset-es2015": "^6.9.0",
13 | "babel-preset-react": "^6.5.0",
14 | "babel-preset-stage-2": "^6.5.0",
15 | "babelify": "^7.3.0",
16 | "browserify": "^13.0.1"
17 | },
18 | "dependencies": {
19 | "draft-js-block-breakout-plugin": "2.0.1",
20 | "draft-js-richbuttons-plugin": "^2.1.0",
21 | "draft-js-plugins-editor": "~2.0.4",
22 | "draft-js": "~0.10.5",
23 | "prop-types": "^15.5.10",
24 | "react": "^16.0.0",
25 | "react-bootstrap": "^0.32.1",
26 | "react-dom": "^16.0.0"
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/example/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | JSONStream@^1.0.3:
6 | version "1.3.2"
7 | resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea"
8 | dependencies:
9 | jsonparse "^1.2.0"
10 | through ">=2.2.7 <3"
11 |
12 | acorn@^4.0.3:
13 | version "4.0.13"
14 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
15 |
16 | acorn@^5.2.1:
17 | version "5.3.0"
18 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.3.0.tgz#7446d39459c54fb49a80e6ee6478149b940ec822"
19 |
20 | ansi-regex@^2.0.0:
21 | version "2.1.1"
22 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
23 |
24 | ansi-styles@^2.2.1:
25 | version "2.2.1"
26 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
27 |
28 | array-filter@~0.0.0:
29 | version "0.0.1"
30 | resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec"
31 |
32 | array-map@~0.0.0:
33 | version "0.0.0"
34 | resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662"
35 |
36 | array-reduce@~0.0.0:
37 | version "0.0.0"
38 | resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b"
39 |
40 | asap@~2.0.3:
41 | version "2.0.6"
42 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
43 |
44 | asn1.js@^4.0.0:
45 | version "4.9.2"
46 | resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.2.tgz#8117ef4f7ed87cd8f89044b5bff97ac243a16c9a"
47 | dependencies:
48 | bn.js "^4.0.0"
49 | inherits "^2.0.1"
50 | minimalistic-assert "^1.0.0"
51 |
52 | assert@^1.4.0:
53 | version "1.4.1"
54 | resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
55 | dependencies:
56 | util "0.10.3"
57 |
58 | astw@^2.0.0:
59 | version "2.2.0"
60 | resolved "https://registry.yarnpkg.com/astw/-/astw-2.2.0.tgz#7bd41784d32493987aeb239b6b4e1c57a873b917"
61 | dependencies:
62 | acorn "^4.0.3"
63 |
64 | babel-code-frame@^6.26.0:
65 | version "6.26.0"
66 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
67 | dependencies:
68 | chalk "^1.1.3"
69 | esutils "^2.0.2"
70 | js-tokens "^3.0.2"
71 |
72 | babel-core@^6.0.14, babel-core@^6.26.0:
73 | version "6.26.0"
74 | resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8"
75 | dependencies:
76 | babel-code-frame "^6.26.0"
77 | babel-generator "^6.26.0"
78 | babel-helpers "^6.24.1"
79 | babel-messages "^6.23.0"
80 | babel-register "^6.26.0"
81 | babel-runtime "^6.26.0"
82 | babel-template "^6.26.0"
83 | babel-traverse "^6.26.0"
84 | babel-types "^6.26.0"
85 | babylon "^6.18.0"
86 | convert-source-map "^1.5.0"
87 | debug "^2.6.8"
88 | json5 "^0.5.1"
89 | lodash "^4.17.4"
90 | minimatch "^3.0.4"
91 | path-is-absolute "^1.0.1"
92 | private "^0.1.7"
93 | slash "^1.0.0"
94 | source-map "^0.5.6"
95 |
96 | babel-generator@^6.26.0:
97 | version "6.26.0"
98 | resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5"
99 | dependencies:
100 | babel-messages "^6.23.0"
101 | babel-runtime "^6.26.0"
102 | babel-types "^6.26.0"
103 | detect-indent "^4.0.0"
104 | jsesc "^1.3.0"
105 | lodash "^4.17.4"
106 | source-map "^0.5.6"
107 | trim-right "^1.0.1"
108 |
109 | babel-helper-bindify-decorators@^6.24.1:
110 | version "6.24.1"
111 | resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330"
112 | dependencies:
113 | babel-runtime "^6.22.0"
114 | babel-traverse "^6.24.1"
115 | babel-types "^6.24.1"
116 |
117 | babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
118 | version "6.24.1"
119 | resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664"
120 | dependencies:
121 | babel-helper-explode-assignable-expression "^6.24.1"
122 | babel-runtime "^6.22.0"
123 | babel-types "^6.24.1"
124 |
125 | babel-helper-builder-react-jsx@^6.24.1:
126 | version "6.26.0"
127 | resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0"
128 | dependencies:
129 | babel-runtime "^6.26.0"
130 | babel-types "^6.26.0"
131 | esutils "^2.0.2"
132 |
133 | babel-helper-call-delegate@^6.24.1:
134 | version "6.24.1"
135 | resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d"
136 | dependencies:
137 | babel-helper-hoist-variables "^6.24.1"
138 | babel-runtime "^6.22.0"
139 | babel-traverse "^6.24.1"
140 | babel-types "^6.24.1"
141 |
142 | babel-helper-define-map@^6.24.1:
143 | version "6.26.0"
144 | resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f"
145 | dependencies:
146 | babel-helper-function-name "^6.24.1"
147 | babel-runtime "^6.26.0"
148 | babel-types "^6.26.0"
149 | lodash "^4.17.4"
150 |
151 | babel-helper-explode-assignable-expression@^6.24.1:
152 | version "6.24.1"
153 | resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa"
154 | dependencies:
155 | babel-runtime "^6.22.0"
156 | babel-traverse "^6.24.1"
157 | babel-types "^6.24.1"
158 |
159 | babel-helper-explode-class@^6.24.1:
160 | version "6.24.1"
161 | resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb"
162 | dependencies:
163 | babel-helper-bindify-decorators "^6.24.1"
164 | babel-runtime "^6.22.0"
165 | babel-traverse "^6.24.1"
166 | babel-types "^6.24.1"
167 |
168 | babel-helper-function-name@^6.24.1:
169 | version "6.24.1"
170 | resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9"
171 | dependencies:
172 | babel-helper-get-function-arity "^6.24.1"
173 | babel-runtime "^6.22.0"
174 | babel-template "^6.24.1"
175 | babel-traverse "^6.24.1"
176 | babel-types "^6.24.1"
177 |
178 | babel-helper-get-function-arity@^6.24.1:
179 | version "6.24.1"
180 | resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d"
181 | dependencies:
182 | babel-runtime "^6.22.0"
183 | babel-types "^6.24.1"
184 |
185 | babel-helper-hoist-variables@^6.24.1:
186 | version "6.24.1"
187 | resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76"
188 | dependencies:
189 | babel-runtime "^6.22.0"
190 | babel-types "^6.24.1"
191 |
192 | babel-helper-optimise-call-expression@^6.24.1:
193 | version "6.24.1"
194 | resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257"
195 | dependencies:
196 | babel-runtime "^6.22.0"
197 | babel-types "^6.24.1"
198 |
199 | babel-helper-regex@^6.24.1:
200 | version "6.26.0"
201 | resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72"
202 | dependencies:
203 | babel-runtime "^6.26.0"
204 | babel-types "^6.26.0"
205 | lodash "^4.17.4"
206 |
207 | babel-helper-remap-async-to-generator@^6.24.1:
208 | version "6.24.1"
209 | resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b"
210 | dependencies:
211 | babel-helper-function-name "^6.24.1"
212 | babel-runtime "^6.22.0"
213 | babel-template "^6.24.1"
214 | babel-traverse "^6.24.1"
215 | babel-types "^6.24.1"
216 |
217 | babel-helper-replace-supers@^6.24.1:
218 | version "6.24.1"
219 | resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a"
220 | dependencies:
221 | babel-helper-optimise-call-expression "^6.24.1"
222 | babel-messages "^6.23.0"
223 | babel-runtime "^6.22.0"
224 | babel-template "^6.24.1"
225 | babel-traverse "^6.24.1"
226 | babel-types "^6.24.1"
227 |
228 | babel-helpers@^6.24.1:
229 | version "6.24.1"
230 | resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
231 | dependencies:
232 | babel-runtime "^6.22.0"
233 | babel-template "^6.24.1"
234 |
235 | babel-messages@^6.23.0:
236 | version "6.23.0"
237 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
238 | dependencies:
239 | babel-runtime "^6.22.0"
240 |
241 | babel-plugin-check-es2015-constants@^6.22.0:
242 | version "6.22.0"
243 | resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a"
244 | dependencies:
245 | babel-runtime "^6.22.0"
246 |
247 | babel-plugin-syntax-async-functions@^6.8.0:
248 | version "6.13.0"
249 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
250 |
251 | babel-plugin-syntax-async-generators@^6.5.0:
252 | version "6.13.0"
253 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a"
254 |
255 | babel-plugin-syntax-class-properties@^6.8.0:
256 | version "6.13.0"
257 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de"
258 |
259 | babel-plugin-syntax-decorators@^6.13.0:
260 | version "6.13.0"
261 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b"
262 |
263 | babel-plugin-syntax-dynamic-import@^6.18.0:
264 | version "6.18.0"
265 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da"
266 |
267 | babel-plugin-syntax-exponentiation-operator@^6.8.0:
268 | version "6.13.0"
269 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
270 |
271 | babel-plugin-syntax-flow@^6.18.0:
272 | version "6.18.0"
273 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d"
274 |
275 | babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0:
276 | version "6.18.0"
277 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
278 |
279 | babel-plugin-syntax-object-rest-spread@^6.8.0:
280 | version "6.13.0"
281 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
282 |
283 | babel-plugin-syntax-trailing-function-commas@^6.22.0:
284 | version "6.22.0"
285 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3"
286 |
287 | babel-plugin-transform-async-generator-functions@^6.24.1:
288 | version "6.24.1"
289 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db"
290 | dependencies:
291 | babel-helper-remap-async-to-generator "^6.24.1"
292 | babel-plugin-syntax-async-generators "^6.5.0"
293 | babel-runtime "^6.22.0"
294 |
295 | babel-plugin-transform-async-to-generator@^6.24.1:
296 | version "6.24.1"
297 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761"
298 | dependencies:
299 | babel-helper-remap-async-to-generator "^6.24.1"
300 | babel-plugin-syntax-async-functions "^6.8.0"
301 | babel-runtime "^6.22.0"
302 |
303 | babel-plugin-transform-class-properties@^6.24.1:
304 | version "6.24.1"
305 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac"
306 | dependencies:
307 | babel-helper-function-name "^6.24.1"
308 | babel-plugin-syntax-class-properties "^6.8.0"
309 | babel-runtime "^6.22.0"
310 | babel-template "^6.24.1"
311 |
312 | babel-plugin-transform-decorators@^6.24.1:
313 | version "6.24.1"
314 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d"
315 | dependencies:
316 | babel-helper-explode-class "^6.24.1"
317 | babel-plugin-syntax-decorators "^6.13.0"
318 | babel-runtime "^6.22.0"
319 | babel-template "^6.24.1"
320 | babel-types "^6.24.1"
321 |
322 | babel-plugin-transform-es2015-arrow-functions@^6.22.0:
323 | version "6.22.0"
324 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
325 | dependencies:
326 | babel-runtime "^6.22.0"
327 |
328 | babel-plugin-transform-es2015-block-scoped-functions@^6.22.0:
329 | version "6.22.0"
330 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141"
331 | dependencies:
332 | babel-runtime "^6.22.0"
333 |
334 | babel-plugin-transform-es2015-block-scoping@^6.24.1:
335 | version "6.26.0"
336 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f"
337 | dependencies:
338 | babel-runtime "^6.26.0"
339 | babel-template "^6.26.0"
340 | babel-traverse "^6.26.0"
341 | babel-types "^6.26.0"
342 | lodash "^4.17.4"
343 |
344 | babel-plugin-transform-es2015-classes@^6.24.1:
345 | version "6.24.1"
346 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db"
347 | dependencies:
348 | babel-helper-define-map "^6.24.1"
349 | babel-helper-function-name "^6.24.1"
350 | babel-helper-optimise-call-expression "^6.24.1"
351 | babel-helper-replace-supers "^6.24.1"
352 | babel-messages "^6.23.0"
353 | babel-runtime "^6.22.0"
354 | babel-template "^6.24.1"
355 | babel-traverse "^6.24.1"
356 | babel-types "^6.24.1"
357 |
358 | babel-plugin-transform-es2015-computed-properties@^6.24.1:
359 | version "6.24.1"
360 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3"
361 | dependencies:
362 | babel-runtime "^6.22.0"
363 | babel-template "^6.24.1"
364 |
365 | babel-plugin-transform-es2015-destructuring@^6.22.0:
366 | version "6.23.0"
367 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d"
368 | dependencies:
369 | babel-runtime "^6.22.0"
370 |
371 | babel-plugin-transform-es2015-duplicate-keys@^6.24.1:
372 | version "6.24.1"
373 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e"
374 | dependencies:
375 | babel-runtime "^6.22.0"
376 | babel-types "^6.24.1"
377 |
378 | babel-plugin-transform-es2015-for-of@^6.22.0:
379 | version "6.23.0"
380 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691"
381 | dependencies:
382 | babel-runtime "^6.22.0"
383 |
384 | babel-plugin-transform-es2015-function-name@^6.24.1:
385 | version "6.24.1"
386 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b"
387 | dependencies:
388 | babel-helper-function-name "^6.24.1"
389 | babel-runtime "^6.22.0"
390 | babel-types "^6.24.1"
391 |
392 | babel-plugin-transform-es2015-literals@^6.22.0:
393 | version "6.22.0"
394 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e"
395 | dependencies:
396 | babel-runtime "^6.22.0"
397 |
398 | babel-plugin-transform-es2015-modules-amd@^6.24.1:
399 | version "6.24.1"
400 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154"
401 | dependencies:
402 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
403 | babel-runtime "^6.22.0"
404 | babel-template "^6.24.1"
405 |
406 | babel-plugin-transform-es2015-modules-commonjs@^6.24.1:
407 | version "6.26.0"
408 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a"
409 | dependencies:
410 | babel-plugin-transform-strict-mode "^6.24.1"
411 | babel-runtime "^6.26.0"
412 | babel-template "^6.26.0"
413 | babel-types "^6.26.0"
414 |
415 | babel-plugin-transform-es2015-modules-systemjs@^6.24.1:
416 | version "6.24.1"
417 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23"
418 | dependencies:
419 | babel-helper-hoist-variables "^6.24.1"
420 | babel-runtime "^6.22.0"
421 | babel-template "^6.24.1"
422 |
423 | babel-plugin-transform-es2015-modules-umd@^6.24.1:
424 | version "6.24.1"
425 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468"
426 | dependencies:
427 | babel-plugin-transform-es2015-modules-amd "^6.24.1"
428 | babel-runtime "^6.22.0"
429 | babel-template "^6.24.1"
430 |
431 | babel-plugin-transform-es2015-object-super@^6.24.1:
432 | version "6.24.1"
433 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d"
434 | dependencies:
435 | babel-helper-replace-supers "^6.24.1"
436 | babel-runtime "^6.22.0"
437 |
438 | babel-plugin-transform-es2015-parameters@^6.24.1:
439 | version "6.24.1"
440 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b"
441 | dependencies:
442 | babel-helper-call-delegate "^6.24.1"
443 | babel-helper-get-function-arity "^6.24.1"
444 | babel-runtime "^6.22.0"
445 | babel-template "^6.24.1"
446 | babel-traverse "^6.24.1"
447 | babel-types "^6.24.1"
448 |
449 | babel-plugin-transform-es2015-shorthand-properties@^6.24.1:
450 | version "6.24.1"
451 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0"
452 | dependencies:
453 | babel-runtime "^6.22.0"
454 | babel-types "^6.24.1"
455 |
456 | babel-plugin-transform-es2015-spread@^6.22.0:
457 | version "6.22.0"
458 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"
459 | dependencies:
460 | babel-runtime "^6.22.0"
461 |
462 | babel-plugin-transform-es2015-sticky-regex@^6.24.1:
463 | version "6.24.1"
464 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc"
465 | dependencies:
466 | babel-helper-regex "^6.24.1"
467 | babel-runtime "^6.22.0"
468 | babel-types "^6.24.1"
469 |
470 | babel-plugin-transform-es2015-template-literals@^6.22.0:
471 | version "6.22.0"
472 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"
473 | dependencies:
474 | babel-runtime "^6.22.0"
475 |
476 | babel-plugin-transform-es2015-typeof-symbol@^6.22.0:
477 | version "6.23.0"
478 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372"
479 | dependencies:
480 | babel-runtime "^6.22.0"
481 |
482 | babel-plugin-transform-es2015-unicode-regex@^6.24.1:
483 | version "6.24.1"
484 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9"
485 | dependencies:
486 | babel-helper-regex "^6.24.1"
487 | babel-runtime "^6.22.0"
488 | regexpu-core "^2.0.0"
489 |
490 | babel-plugin-transform-exponentiation-operator@^6.24.1:
491 | version "6.24.1"
492 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e"
493 | dependencies:
494 | babel-helper-builder-binary-assignment-operator-visitor "^6.24.1"
495 | babel-plugin-syntax-exponentiation-operator "^6.8.0"
496 | babel-runtime "^6.22.0"
497 |
498 | babel-plugin-transform-flow-strip-types@^6.22.0:
499 | version "6.22.0"
500 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf"
501 | dependencies:
502 | babel-plugin-syntax-flow "^6.18.0"
503 | babel-runtime "^6.22.0"
504 |
505 | babel-plugin-transform-object-rest-spread@^6.22.0:
506 | version "6.26.0"
507 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06"
508 | dependencies:
509 | babel-plugin-syntax-object-rest-spread "^6.8.0"
510 | babel-runtime "^6.26.0"
511 |
512 | babel-plugin-transform-react-display-name@^6.23.0:
513 | version "6.25.0"
514 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1"
515 | dependencies:
516 | babel-runtime "^6.22.0"
517 |
518 | babel-plugin-transform-react-jsx-self@^6.22.0:
519 | version "6.22.0"
520 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e"
521 | dependencies:
522 | babel-plugin-syntax-jsx "^6.8.0"
523 | babel-runtime "^6.22.0"
524 |
525 | babel-plugin-transform-react-jsx-source@^6.22.0:
526 | version "6.22.0"
527 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6"
528 | dependencies:
529 | babel-plugin-syntax-jsx "^6.8.0"
530 | babel-runtime "^6.22.0"
531 |
532 | babel-plugin-transform-react-jsx@^6.24.1:
533 | version "6.24.1"
534 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3"
535 | dependencies:
536 | babel-helper-builder-react-jsx "^6.24.1"
537 | babel-plugin-syntax-jsx "^6.8.0"
538 | babel-runtime "^6.22.0"
539 |
540 | babel-plugin-transform-regenerator@^6.24.1:
541 | version "6.26.0"
542 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f"
543 | dependencies:
544 | regenerator-transform "^0.10.0"
545 |
546 | babel-plugin-transform-strict-mode@^6.24.1:
547 | version "6.24.1"
548 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
549 | dependencies:
550 | babel-runtime "^6.22.0"
551 | babel-types "^6.24.1"
552 |
553 | babel-preset-es2015@^6.9.0:
554 | version "6.24.1"
555 | resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939"
556 | dependencies:
557 | babel-plugin-check-es2015-constants "^6.22.0"
558 | babel-plugin-transform-es2015-arrow-functions "^6.22.0"
559 | babel-plugin-transform-es2015-block-scoped-functions "^6.22.0"
560 | babel-plugin-transform-es2015-block-scoping "^6.24.1"
561 | babel-plugin-transform-es2015-classes "^6.24.1"
562 | babel-plugin-transform-es2015-computed-properties "^6.24.1"
563 | babel-plugin-transform-es2015-destructuring "^6.22.0"
564 | babel-plugin-transform-es2015-duplicate-keys "^6.24.1"
565 | babel-plugin-transform-es2015-for-of "^6.22.0"
566 | babel-plugin-transform-es2015-function-name "^6.24.1"
567 | babel-plugin-transform-es2015-literals "^6.22.0"
568 | babel-plugin-transform-es2015-modules-amd "^6.24.1"
569 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
570 | babel-plugin-transform-es2015-modules-systemjs "^6.24.1"
571 | babel-plugin-transform-es2015-modules-umd "^6.24.1"
572 | babel-plugin-transform-es2015-object-super "^6.24.1"
573 | babel-plugin-transform-es2015-parameters "^6.24.1"
574 | babel-plugin-transform-es2015-shorthand-properties "^6.24.1"
575 | babel-plugin-transform-es2015-spread "^6.22.0"
576 | babel-plugin-transform-es2015-sticky-regex "^6.24.1"
577 | babel-plugin-transform-es2015-template-literals "^6.22.0"
578 | babel-plugin-transform-es2015-typeof-symbol "^6.22.0"
579 | babel-plugin-transform-es2015-unicode-regex "^6.24.1"
580 | babel-plugin-transform-regenerator "^6.24.1"
581 |
582 | babel-preset-flow@^6.23.0:
583 | version "6.23.0"
584 | resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d"
585 | dependencies:
586 | babel-plugin-transform-flow-strip-types "^6.22.0"
587 |
588 | babel-preset-react@^6.5.0:
589 | version "6.24.1"
590 | resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380"
591 | dependencies:
592 | babel-plugin-syntax-jsx "^6.3.13"
593 | babel-plugin-transform-react-display-name "^6.23.0"
594 | babel-plugin-transform-react-jsx "^6.24.1"
595 | babel-plugin-transform-react-jsx-self "^6.22.0"
596 | babel-plugin-transform-react-jsx-source "^6.22.0"
597 | babel-preset-flow "^6.23.0"
598 |
599 | babel-preset-stage-2@^6.5.0:
600 | version "6.24.1"
601 | resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1"
602 | dependencies:
603 | babel-plugin-syntax-dynamic-import "^6.18.0"
604 | babel-plugin-transform-class-properties "^6.24.1"
605 | babel-plugin-transform-decorators "^6.24.1"
606 | babel-preset-stage-3 "^6.24.1"
607 |
608 | babel-preset-stage-3@^6.24.1:
609 | version "6.24.1"
610 | resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395"
611 | dependencies:
612 | babel-plugin-syntax-trailing-function-commas "^6.22.0"
613 | babel-plugin-transform-async-generator-functions "^6.24.1"
614 | babel-plugin-transform-async-to-generator "^6.24.1"
615 | babel-plugin-transform-exponentiation-operator "^6.24.1"
616 | babel-plugin-transform-object-rest-spread "^6.22.0"
617 |
618 | babel-register@^6.26.0:
619 | version "6.26.0"
620 | resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
621 | dependencies:
622 | babel-core "^6.26.0"
623 | babel-runtime "^6.26.0"
624 | core-js "^2.5.0"
625 | home-or-tmp "^2.0.0"
626 | lodash "^4.17.4"
627 | mkdirp "^0.5.1"
628 | source-map-support "^0.4.15"
629 |
630 | babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
631 | version "6.26.0"
632 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
633 | dependencies:
634 | core-js "^2.4.0"
635 | regenerator-runtime "^0.11.0"
636 |
637 | babel-template@^6.24.1, babel-template@^6.26.0:
638 | version "6.26.0"
639 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
640 | dependencies:
641 | babel-runtime "^6.26.0"
642 | babel-traverse "^6.26.0"
643 | babel-types "^6.26.0"
644 | babylon "^6.18.0"
645 | lodash "^4.17.4"
646 |
647 | babel-traverse@^6.24.1, babel-traverse@^6.26.0:
648 | version "6.26.0"
649 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
650 | dependencies:
651 | babel-code-frame "^6.26.0"
652 | babel-messages "^6.23.0"
653 | babel-runtime "^6.26.0"
654 | babel-types "^6.26.0"
655 | babylon "^6.18.0"
656 | debug "^2.6.8"
657 | globals "^9.18.0"
658 | invariant "^2.2.2"
659 | lodash "^4.17.4"
660 |
661 | babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
662 | version "6.26.0"
663 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
664 | dependencies:
665 | babel-runtime "^6.26.0"
666 | esutils "^2.0.2"
667 | lodash "^4.17.4"
668 | to-fast-properties "^1.0.3"
669 |
670 | babelify@^7.3.0:
671 | version "7.3.0"
672 | resolved "https://registry.yarnpkg.com/babelify/-/babelify-7.3.0.tgz#aa56aede7067fd7bd549666ee16dc285087e88e5"
673 | dependencies:
674 | babel-core "^6.0.14"
675 | object-assign "^4.0.0"
676 |
677 | babylon@^6.18.0:
678 | version "6.18.0"
679 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
680 |
681 | balanced-match@^1.0.0:
682 | version "1.0.0"
683 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
684 |
685 | base64-js@^1.0.2:
686 | version "1.2.1"
687 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886"
688 |
689 | bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
690 | version "4.11.8"
691 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
692 |
693 | brace-expansion@^1.1.7:
694 | version "1.1.8"
695 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
696 | dependencies:
697 | balanced-match "^1.0.0"
698 | concat-map "0.0.1"
699 |
700 | brorand@^1.0.1:
701 | version "1.1.0"
702 | resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
703 |
704 | browser-pack@^6.0.1:
705 | version "6.0.3"
706 | resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.0.3.tgz#91ca96518583ef580ab063a309de62e407767a39"
707 | dependencies:
708 | JSONStream "^1.0.3"
709 | combine-source-map "~0.8.0"
710 | defined "^1.0.0"
711 | safe-buffer "^5.1.1"
712 | through2 "^2.0.0"
713 | umd "^3.0.0"
714 |
715 | browser-resolve@^1.11.0, browser-resolve@^1.7.0:
716 | version "1.11.2"
717 | resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
718 | dependencies:
719 | resolve "1.1.7"
720 |
721 | browserify-aes@^1.0.0, browserify-aes@^1.0.4:
722 | version "1.1.1"
723 | resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f"
724 | dependencies:
725 | buffer-xor "^1.0.3"
726 | cipher-base "^1.0.0"
727 | create-hash "^1.1.0"
728 | evp_bytestokey "^1.0.3"
729 | inherits "^2.0.1"
730 | safe-buffer "^5.0.1"
731 |
732 | browserify-cipher@^1.0.0:
733 | version "1.0.0"
734 | resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a"
735 | dependencies:
736 | browserify-aes "^1.0.4"
737 | browserify-des "^1.0.0"
738 | evp_bytestokey "^1.0.0"
739 |
740 | browserify-des@^1.0.0:
741 | version "1.0.0"
742 | resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd"
743 | dependencies:
744 | cipher-base "^1.0.1"
745 | des.js "^1.0.0"
746 | inherits "^2.0.1"
747 |
748 | browserify-rsa@^4.0.0:
749 | version "4.0.1"
750 | resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
751 | dependencies:
752 | bn.js "^4.1.0"
753 | randombytes "^2.0.1"
754 |
755 | browserify-sign@^4.0.0:
756 | version "4.0.4"
757 | resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
758 | dependencies:
759 | bn.js "^4.1.1"
760 | browserify-rsa "^4.0.0"
761 | create-hash "^1.1.0"
762 | create-hmac "^1.1.2"
763 | elliptic "^6.0.0"
764 | inherits "^2.0.1"
765 | parse-asn1 "^5.0.0"
766 |
767 | browserify-zlib@~0.1.2:
768 | version "0.1.4"
769 | resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
770 | dependencies:
771 | pako "~0.2.0"
772 |
773 | browserify@^13.0.1:
774 | version "13.3.0"
775 | resolved "https://registry.yarnpkg.com/browserify/-/browserify-13.3.0.tgz#b5a9c9020243f0c70e4675bec8223bc627e415ce"
776 | dependencies:
777 | JSONStream "^1.0.3"
778 | assert "^1.4.0"
779 | browser-pack "^6.0.1"
780 | browser-resolve "^1.11.0"
781 | browserify-zlib "~0.1.2"
782 | buffer "^4.1.0"
783 | cached-path-relative "^1.0.0"
784 | concat-stream "~1.5.1"
785 | console-browserify "^1.1.0"
786 | constants-browserify "~1.0.0"
787 | crypto-browserify "^3.0.0"
788 | defined "^1.0.0"
789 | deps-sort "^2.0.0"
790 | domain-browser "~1.1.0"
791 | duplexer2 "~0.1.2"
792 | events "~1.1.0"
793 | glob "^7.1.0"
794 | has "^1.0.0"
795 | htmlescape "^1.1.0"
796 | https-browserify "~0.0.0"
797 | inherits "~2.0.1"
798 | insert-module-globals "^7.0.0"
799 | labeled-stream-splicer "^2.0.0"
800 | module-deps "^4.0.8"
801 | os-browserify "~0.1.1"
802 | parents "^1.0.1"
803 | path-browserify "~0.0.0"
804 | process "~0.11.0"
805 | punycode "^1.3.2"
806 | querystring-es3 "~0.2.0"
807 | read-only-stream "^2.0.0"
808 | readable-stream "^2.0.2"
809 | resolve "^1.1.4"
810 | shasum "^1.0.0"
811 | shell-quote "^1.6.1"
812 | stream-browserify "^2.0.0"
813 | stream-http "^2.0.0"
814 | string_decoder "~0.10.0"
815 | subarg "^1.0.0"
816 | syntax-error "^1.1.1"
817 | through2 "^2.0.0"
818 | timers-browserify "^1.0.1"
819 | tty-browserify "~0.0.0"
820 | url "~0.11.0"
821 | util "~0.10.1"
822 | vm-browserify "~0.0.1"
823 | xtend "^4.0.0"
824 |
825 | buffer-xor@^1.0.3:
826 | version "1.0.3"
827 | resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
828 |
829 | buffer@^4.1.0:
830 | version "4.9.1"
831 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
832 | dependencies:
833 | base64-js "^1.0.2"
834 | ieee754 "^1.1.4"
835 | isarray "^1.0.0"
836 |
837 | builtin-status-codes@^3.0.0:
838 | version "3.0.0"
839 | resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
840 |
841 | cached-path-relative@^1.0.0:
842 | version "1.0.1"
843 | resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.1.tgz#d09c4b52800aa4c078e2dd81a869aac90d2e54e7"
844 |
845 | chain-function@^1.0.0:
846 | version "1.0.0"
847 | resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc"
848 |
849 | chalk@^1.1.3:
850 | version "1.1.3"
851 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
852 | dependencies:
853 | ansi-styles "^2.2.1"
854 | escape-string-regexp "^1.0.2"
855 | has-ansi "^2.0.0"
856 | strip-ansi "^3.0.0"
857 | supports-color "^2.0.0"
858 |
859 | cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
860 | version "1.0.4"
861 | resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
862 | dependencies:
863 | inherits "^2.0.1"
864 | safe-buffer "^5.0.1"
865 |
866 | classnames@^2.2.5:
867 | version "2.2.5"
868 | resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d"
869 |
870 | combine-source-map@~0.7.1:
871 | version "0.7.2"
872 | resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.7.2.tgz#0870312856b307a87cc4ac486f3a9a62aeccc09e"
873 | dependencies:
874 | convert-source-map "~1.1.0"
875 | inline-source-map "~0.6.0"
876 | lodash.memoize "~3.0.3"
877 | source-map "~0.5.3"
878 |
879 | combine-source-map@~0.8.0:
880 | version "0.8.0"
881 | resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b"
882 | dependencies:
883 | convert-source-map "~1.1.0"
884 | inline-source-map "~0.6.0"
885 | lodash.memoize "~3.0.3"
886 | source-map "~0.5.3"
887 |
888 | concat-map@0.0.1:
889 | version "0.0.1"
890 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
891 |
892 | concat-stream@~1.5.0, concat-stream@~1.5.1:
893 | version "1.5.2"
894 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266"
895 | dependencies:
896 | inherits "~2.0.1"
897 | readable-stream "~2.0.0"
898 | typedarray "~0.0.5"
899 |
900 | console-browserify@^1.1.0:
901 | version "1.1.0"
902 | resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
903 | dependencies:
904 | date-now "^0.1.4"
905 |
906 | constants-browserify@~1.0.0:
907 | version "1.0.0"
908 | resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
909 |
910 | convert-source-map@^1.5.0:
911 | version "1.5.1"
912 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5"
913 |
914 | convert-source-map@~1.1.0:
915 | version "1.1.3"
916 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860"
917 |
918 | core-js@^1.0.0:
919 | version "1.2.7"
920 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
921 |
922 | core-js@^2.4.0, core-js@^2.5.0:
923 | version "2.5.3"
924 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e"
925 |
926 | core-util-is@~1.0.0:
927 | version "1.0.2"
928 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
929 |
930 | create-ecdh@^4.0.0:
931 | version "4.0.0"
932 | resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d"
933 | dependencies:
934 | bn.js "^4.1.0"
935 | elliptic "^6.0.0"
936 |
937 | create-hash@^1.1.0, create-hash@^1.1.2:
938 | version "1.1.3"
939 | resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd"
940 | dependencies:
941 | cipher-base "^1.0.1"
942 | inherits "^2.0.1"
943 | ripemd160 "^2.0.0"
944 | sha.js "^2.4.0"
945 |
946 | create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
947 | version "1.1.6"
948 | resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06"
949 | dependencies:
950 | cipher-base "^1.0.3"
951 | create-hash "^1.1.0"
952 | inherits "^2.0.1"
953 | ripemd160 "^2.0.0"
954 | safe-buffer "^5.0.1"
955 | sha.js "^2.4.8"
956 |
957 | crypto-browserify@^3.0.0:
958 | version "3.12.0"
959 | resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
960 | dependencies:
961 | browserify-cipher "^1.0.0"
962 | browserify-sign "^4.0.0"
963 | create-ecdh "^4.0.0"
964 | create-hash "^1.1.0"
965 | create-hmac "^1.1.0"
966 | diffie-hellman "^5.0.0"
967 | inherits "^2.0.1"
968 | pbkdf2 "^3.0.3"
969 | public-encrypt "^4.0.0"
970 | randombytes "^2.0.0"
971 | randomfill "^1.0.3"
972 |
973 | date-now@^0.1.4:
974 | version "0.1.4"
975 | resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
976 |
977 | debug@^2.6.8:
978 | version "2.6.9"
979 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
980 | dependencies:
981 | ms "2.0.0"
982 |
983 | decorate-component-with-props@^1.0.2:
984 | version "1.1.0"
985 | resolved "https://registry.yarnpkg.com/decorate-component-with-props/-/decorate-component-with-props-1.1.0.tgz#b496c814c6a2aba0cf2ad26e44cbedb8ead42f15"
986 |
987 | defined@^1.0.0:
988 | version "1.0.0"
989 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
990 |
991 | deps-sort@^2.0.0:
992 | version "2.0.0"
993 | resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.0.tgz#091724902e84658260eb910748cccd1af6e21fb5"
994 | dependencies:
995 | JSONStream "^1.0.3"
996 | shasum "^1.0.0"
997 | subarg "^1.0.0"
998 | through2 "^2.0.0"
999 |
1000 | des.js@^1.0.0:
1001 | version "1.0.0"
1002 | resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
1003 | dependencies:
1004 | inherits "^2.0.1"
1005 | minimalistic-assert "^1.0.0"
1006 |
1007 | detect-indent@^4.0.0:
1008 | version "4.0.0"
1009 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
1010 | dependencies:
1011 | repeating "^2.0.0"
1012 |
1013 | detective@^4.0.0:
1014 | version "4.7.1"
1015 | resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e"
1016 | dependencies:
1017 | acorn "^5.2.1"
1018 | defined "^1.0.0"
1019 |
1020 | diffie-hellman@^5.0.0:
1021 | version "5.0.2"
1022 | resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e"
1023 | dependencies:
1024 | bn.js "^4.1.0"
1025 | miller-rabin "^4.0.0"
1026 | randombytes "^2.0.0"
1027 |
1028 | dom-helpers@^3.2.0, dom-helpers@^3.2.1:
1029 | version "3.3.1"
1030 | resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6"
1031 |
1032 | domain-browser@~1.1.0:
1033 | version "1.1.7"
1034 | resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
1035 |
1036 | draft-js-block-breakout-plugin@2.0.1:
1037 | version "2.0.1"
1038 | resolved "https://registry.yarnpkg.com/draft-js-block-breakout-plugin/-/draft-js-block-breakout-plugin-2.0.1.tgz#a38e3bd68d9538d7af15d4d966844d6e6d2ad850"
1039 | dependencies:
1040 | immutable "~3.7.4"
1041 |
1042 | draft-js-plugins-editor@~2.0.4:
1043 | version "2.0.4"
1044 | resolved "https://registry.yarnpkg.com/draft-js-plugins-editor/-/draft-js-plugins-editor-2.0.4.tgz#ab7178de886d6d11f9f43a448c844da6266053e0"
1045 | dependencies:
1046 | decorate-component-with-props "^1.0.2"
1047 | find-with-regex "^1.0.2"
1048 | immutable "~3.7.4"
1049 | prop-types "^15.5.8"
1050 | union-class-names "^1.0.0"
1051 |
1052 | draft-js-richbuttons-plugin@^2.1.0:
1053 | version "2.1.0"
1054 | resolved "https://registry.yarnpkg.com/draft-js-richbuttons-plugin/-/draft-js-richbuttons-plugin-2.1.0.tgz#a78500fac3575b0e8bd5eaf143ed51a1ead37451"
1055 | dependencies:
1056 | decorate-component-with-props "^1.0.2"
1057 | prop-types "^15.5.10"
1058 |
1059 | draft-js@~0.10.5:
1060 | version "0.10.5"
1061 | resolved "https://registry.yarnpkg.com/draft-js/-/draft-js-0.10.5.tgz#bfa9beb018fe0533dbb08d6675c371a6b08fa742"
1062 | dependencies:
1063 | fbjs "^0.8.15"
1064 | immutable "~3.7.4"
1065 | object-assign "^4.1.0"
1066 |
1067 | duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2:
1068 | version "0.1.4"
1069 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
1070 | dependencies:
1071 | readable-stream "^2.0.2"
1072 |
1073 | elliptic@^6.0.0:
1074 | version "6.4.0"
1075 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df"
1076 | dependencies:
1077 | bn.js "^4.4.0"
1078 | brorand "^1.0.1"
1079 | hash.js "^1.0.0"
1080 | hmac-drbg "^1.0.0"
1081 | inherits "^2.0.1"
1082 | minimalistic-assert "^1.0.0"
1083 | minimalistic-crypto-utils "^1.0.0"
1084 |
1085 | encoding@^0.1.11:
1086 | version "0.1.12"
1087 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
1088 | dependencies:
1089 | iconv-lite "~0.4.13"
1090 |
1091 | escape-string-regexp@^1.0.2:
1092 | version "1.0.5"
1093 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
1094 |
1095 | esutils@^2.0.2:
1096 | version "2.0.2"
1097 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
1098 |
1099 | events@~1.1.0:
1100 | version "1.1.1"
1101 | resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
1102 |
1103 | evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
1104 | version "1.0.3"
1105 | resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
1106 | dependencies:
1107 | md5.js "^1.3.4"
1108 | safe-buffer "^5.1.1"
1109 |
1110 | fbjs@^0.8.15, fbjs@^0.8.16:
1111 | version "0.8.16"
1112 | resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db"
1113 | dependencies:
1114 | core-js "^1.0.0"
1115 | isomorphic-fetch "^2.1.1"
1116 | loose-envify "^1.0.0"
1117 | object-assign "^4.1.0"
1118 | promise "^7.1.1"
1119 | setimmediate "^1.0.5"
1120 | ua-parser-js "^0.7.9"
1121 |
1122 | find-with-regex@^1.0.2:
1123 | version "1.0.2"
1124 | resolved "https://registry.yarnpkg.com/find-with-regex/-/find-with-regex-1.0.2.tgz#d3b36286539f14c527e31f194159c6d251651a45"
1125 |
1126 | fs.realpath@^1.0.0:
1127 | version "1.0.0"
1128 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
1129 |
1130 | function-bind@^1.0.2:
1131 | version "1.1.1"
1132 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
1133 |
1134 | glob@^7.1.0:
1135 | version "7.1.2"
1136 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
1137 | dependencies:
1138 | fs.realpath "^1.0.0"
1139 | inflight "^1.0.4"
1140 | inherits "2"
1141 | minimatch "^3.0.4"
1142 | once "^1.3.0"
1143 | path-is-absolute "^1.0.0"
1144 |
1145 | globals@^9.18.0:
1146 | version "9.18.0"
1147 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
1148 |
1149 | has-ansi@^2.0.0:
1150 | version "2.0.0"
1151 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
1152 | dependencies:
1153 | ansi-regex "^2.0.0"
1154 |
1155 | has@^1.0.0:
1156 | version "1.0.1"
1157 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
1158 | dependencies:
1159 | function-bind "^1.0.2"
1160 |
1161 | hash-base@^2.0.0:
1162 | version "2.0.2"
1163 | resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1"
1164 | dependencies:
1165 | inherits "^2.0.1"
1166 |
1167 | hash-base@^3.0.0:
1168 | version "3.0.4"
1169 | resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
1170 | dependencies:
1171 | inherits "^2.0.1"
1172 | safe-buffer "^5.0.1"
1173 |
1174 | hash.js@^1.0.0, hash.js@^1.0.3:
1175 | version "1.1.3"
1176 | resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846"
1177 | dependencies:
1178 | inherits "^2.0.3"
1179 | minimalistic-assert "^1.0.0"
1180 |
1181 | hmac-drbg@^1.0.0:
1182 | version "1.0.1"
1183 | resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
1184 | dependencies:
1185 | hash.js "^1.0.3"
1186 | minimalistic-assert "^1.0.0"
1187 | minimalistic-crypto-utils "^1.0.1"
1188 |
1189 | home-or-tmp@^2.0.0:
1190 | version "2.0.0"
1191 | resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
1192 | dependencies:
1193 | os-homedir "^1.0.0"
1194 | os-tmpdir "^1.0.1"
1195 |
1196 | htmlescape@^1.1.0:
1197 | version "1.1.1"
1198 | resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351"
1199 |
1200 | https-browserify@~0.0.0:
1201 | version "0.0.1"
1202 | resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
1203 |
1204 | iconv-lite@~0.4.13:
1205 | version "0.4.19"
1206 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
1207 |
1208 | ieee754@^1.1.4:
1209 | version "1.1.8"
1210 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
1211 |
1212 | immutable@~3.7.4:
1213 | version "3.7.6"
1214 | resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b"
1215 |
1216 | indexof@0.0.1:
1217 | version "0.0.1"
1218 | resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
1219 |
1220 | inflight@^1.0.4:
1221 | version "1.0.6"
1222 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
1223 | dependencies:
1224 | once "^1.3.0"
1225 | wrappy "1"
1226 |
1227 | inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
1228 | version "2.0.3"
1229 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
1230 |
1231 | inherits@2.0.1:
1232 | version "2.0.1"
1233 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
1234 |
1235 | inline-source-map@~0.6.0:
1236 | version "0.6.2"
1237 | resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5"
1238 | dependencies:
1239 | source-map "~0.5.3"
1240 |
1241 | insert-module-globals@^7.0.0:
1242 | version "7.0.1"
1243 | resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.0.1.tgz#c03bf4e01cb086d5b5e5ace8ad0afe7889d638c3"
1244 | dependencies:
1245 | JSONStream "^1.0.3"
1246 | combine-source-map "~0.7.1"
1247 | concat-stream "~1.5.1"
1248 | is-buffer "^1.1.0"
1249 | lexical-scope "^1.2.0"
1250 | process "~0.11.0"
1251 | through2 "^2.0.0"
1252 | xtend "^4.0.0"
1253 |
1254 | invariant@^2.1.0, invariant@^2.2.1, invariant@^2.2.2:
1255 | version "2.2.2"
1256 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
1257 | dependencies:
1258 | loose-envify "^1.0.0"
1259 |
1260 | is-buffer@^1.1.0:
1261 | version "1.1.6"
1262 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
1263 |
1264 | is-finite@^1.0.0:
1265 | version "1.0.2"
1266 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
1267 | dependencies:
1268 | number-is-nan "^1.0.0"
1269 |
1270 | is-stream@^1.0.1:
1271 | version "1.1.0"
1272 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
1273 |
1274 | isarray@^1.0.0, isarray@~1.0.0:
1275 | version "1.0.0"
1276 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
1277 |
1278 | isarray@~0.0.1:
1279 | version "0.0.1"
1280 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
1281 |
1282 | isomorphic-fetch@^2.1.1:
1283 | version "2.2.1"
1284 | resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
1285 | dependencies:
1286 | node-fetch "^1.0.1"
1287 | whatwg-fetch ">=0.10.0"
1288 |
1289 | js-tokens@^3.0.0, js-tokens@^3.0.2:
1290 | version "3.0.2"
1291 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
1292 |
1293 | jsesc@^1.3.0:
1294 | version "1.3.0"
1295 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
1296 |
1297 | jsesc@~0.5.0:
1298 | version "0.5.0"
1299 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
1300 |
1301 | json-stable-stringify@~0.0.0:
1302 | version "0.0.1"
1303 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45"
1304 | dependencies:
1305 | jsonify "~0.0.0"
1306 |
1307 | json5@^0.5.1:
1308 | version "0.5.1"
1309 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
1310 |
1311 | jsonify@~0.0.0:
1312 | version "0.0.0"
1313 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
1314 |
1315 | jsonparse@^1.2.0:
1316 | version "1.3.1"
1317 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
1318 |
1319 | keycode@^2.1.2:
1320 | version "2.1.9"
1321 | resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.1.9.tgz#964a23c54e4889405b4861a5c9f0480d45141dfa"
1322 |
1323 | labeled-stream-splicer@^2.0.0:
1324 | version "2.0.0"
1325 | resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz#a52e1d138024c00b86b1c0c91f677918b8ae0a59"
1326 | dependencies:
1327 | inherits "^2.0.1"
1328 | isarray "~0.0.1"
1329 | stream-splicer "^2.0.0"
1330 |
1331 | lexical-scope@^1.2.0:
1332 | version "1.2.0"
1333 | resolved "https://registry.yarnpkg.com/lexical-scope/-/lexical-scope-1.2.0.tgz#fcea5edc704a4b3a8796cdca419c3a0afaf22df4"
1334 | dependencies:
1335 | astw "^2.0.0"
1336 |
1337 | lodash.memoize@~3.0.3:
1338 | version "3.0.4"
1339 | resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f"
1340 |
1341 | lodash@^4.17.4:
1342 | version "4.17.4"
1343 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
1344 |
1345 | loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1:
1346 | version "1.3.1"
1347 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
1348 | dependencies:
1349 | js-tokens "^3.0.0"
1350 |
1351 | md5.js@^1.3.4:
1352 | version "1.3.4"
1353 | resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d"
1354 | dependencies:
1355 | hash-base "^3.0.0"
1356 | inherits "^2.0.1"
1357 |
1358 | miller-rabin@^4.0.0:
1359 | version "4.0.1"
1360 | resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
1361 | dependencies:
1362 | bn.js "^4.0.0"
1363 | brorand "^1.0.1"
1364 |
1365 | minimalistic-assert@^1.0.0:
1366 | version "1.0.0"
1367 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3"
1368 |
1369 | minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
1370 | version "1.0.1"
1371 | resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
1372 |
1373 | minimatch@^3.0.4:
1374 | version "3.0.4"
1375 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
1376 | dependencies:
1377 | brace-expansion "^1.1.7"
1378 |
1379 | minimist@0.0.8:
1380 | version "0.0.8"
1381 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
1382 |
1383 | minimist@^1.1.0:
1384 | version "1.2.0"
1385 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
1386 |
1387 | mkdirp@^0.5.1:
1388 | version "0.5.1"
1389 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
1390 | dependencies:
1391 | minimist "0.0.8"
1392 |
1393 | module-deps@^4.0.8:
1394 | version "4.1.1"
1395 | resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-4.1.1.tgz#23215833f1da13fd606ccb8087b44852dcb821fd"
1396 | dependencies:
1397 | JSONStream "^1.0.3"
1398 | browser-resolve "^1.7.0"
1399 | cached-path-relative "^1.0.0"
1400 | concat-stream "~1.5.0"
1401 | defined "^1.0.0"
1402 | detective "^4.0.0"
1403 | duplexer2 "^0.1.2"
1404 | inherits "^2.0.1"
1405 | parents "^1.0.0"
1406 | readable-stream "^2.0.2"
1407 | resolve "^1.1.3"
1408 | stream-combiner2 "^1.1.1"
1409 | subarg "^1.0.0"
1410 | through2 "^2.0.0"
1411 | xtend "^4.0.0"
1412 |
1413 | ms@2.0.0:
1414 | version "2.0.0"
1415 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
1416 |
1417 | node-fetch@^1.0.1:
1418 | version "1.7.3"
1419 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
1420 | dependencies:
1421 | encoding "^0.1.11"
1422 | is-stream "^1.0.1"
1423 |
1424 | number-is-nan@^1.0.0:
1425 | version "1.0.1"
1426 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
1427 |
1428 | object-assign@^4.0.0, object-assign@^4.1.0, object-assign@^4.1.1:
1429 | version "4.1.1"
1430 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1431 |
1432 | once@^1.3.0:
1433 | version "1.4.0"
1434 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1435 | dependencies:
1436 | wrappy "1"
1437 |
1438 | os-browserify@~0.1.1:
1439 | version "0.1.2"
1440 | resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.1.2.tgz#49ca0293e0b19590a5f5de10c7f265a617d8fe54"
1441 |
1442 | os-homedir@^1.0.0:
1443 | version "1.0.2"
1444 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
1445 |
1446 | os-tmpdir@^1.0.1:
1447 | version "1.0.2"
1448 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
1449 |
1450 | pako@~0.2.0:
1451 | version "0.2.9"
1452 | resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
1453 |
1454 | parents@^1.0.0, parents@^1.0.1:
1455 | version "1.0.1"
1456 | resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751"
1457 | dependencies:
1458 | path-platform "~0.11.15"
1459 |
1460 | parse-asn1@^5.0.0:
1461 | version "5.1.0"
1462 | resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712"
1463 | dependencies:
1464 | asn1.js "^4.0.0"
1465 | browserify-aes "^1.0.0"
1466 | create-hash "^1.1.0"
1467 | evp_bytestokey "^1.0.0"
1468 | pbkdf2 "^3.0.3"
1469 |
1470 | path-browserify@~0.0.0:
1471 | version "0.0.0"
1472 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
1473 |
1474 | path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
1475 | version "1.0.1"
1476 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1477 |
1478 | path-parse@^1.0.5:
1479 | version "1.0.5"
1480 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
1481 |
1482 | path-platform@~0.11.15:
1483 | version "0.11.15"
1484 | resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2"
1485 |
1486 | pbkdf2@^3.0.3:
1487 | version "3.0.14"
1488 | resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade"
1489 | dependencies:
1490 | create-hash "^1.1.2"
1491 | create-hmac "^1.1.4"
1492 | ripemd160 "^2.0.1"
1493 | safe-buffer "^5.0.1"
1494 | sha.js "^2.4.8"
1495 |
1496 | private@^0.1.6, private@^0.1.7:
1497 | version "0.1.8"
1498 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
1499 |
1500 | process-nextick-args@~1.0.6:
1501 | version "1.0.7"
1502 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
1503 |
1504 | process@~0.11.0:
1505 | version "0.11.10"
1506 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
1507 |
1508 | promise@^7.1.1:
1509 | version "7.3.1"
1510 | resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
1511 | dependencies:
1512 | asap "~2.0.3"
1513 |
1514 | prop-types-extra@^1.0.1:
1515 | version "1.0.1"
1516 | resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.0.1.tgz#a57bd4810e82d27a3ff4317ecc1b4ad005f79a82"
1517 | dependencies:
1518 | warning "^3.0.0"
1519 |
1520 | prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0:
1521 | version "15.6.0"
1522 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856"
1523 | dependencies:
1524 | fbjs "^0.8.16"
1525 | loose-envify "^1.3.1"
1526 | object-assign "^4.1.1"
1527 |
1528 | public-encrypt@^4.0.0:
1529 | version "4.0.0"
1530 | resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6"
1531 | dependencies:
1532 | bn.js "^4.1.0"
1533 | browserify-rsa "^4.0.0"
1534 | create-hash "^1.1.0"
1535 | parse-asn1 "^5.0.0"
1536 | randombytes "^2.0.1"
1537 |
1538 | punycode@1.3.2:
1539 | version "1.3.2"
1540 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
1541 |
1542 | punycode@^1.3.2:
1543 | version "1.4.1"
1544 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
1545 |
1546 | querystring-es3@~0.2.0:
1547 | version "0.2.1"
1548 | resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
1549 |
1550 | querystring@0.2.0:
1551 | version "0.2.0"
1552 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
1553 |
1554 | randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
1555 | version "2.0.6"
1556 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80"
1557 | dependencies:
1558 | safe-buffer "^5.1.0"
1559 |
1560 | randomfill@^1.0.3:
1561 | version "1.0.3"
1562 | resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.3.tgz#b96b7df587f01dd91726c418f30553b1418e3d62"
1563 | dependencies:
1564 | randombytes "^2.0.5"
1565 | safe-buffer "^5.1.0"
1566 |
1567 | react-bootstrap@^0.32.1:
1568 | version "0.32.1"
1569 | resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-0.32.1.tgz#60624c1b48a39d773ef6cce6421a4f33ecc166bb"
1570 | dependencies:
1571 | babel-runtime "^6.11.6"
1572 | classnames "^2.2.5"
1573 | dom-helpers "^3.2.0"
1574 | invariant "^2.2.1"
1575 | keycode "^2.1.2"
1576 | prop-types "^15.5.10"
1577 | prop-types-extra "^1.0.1"
1578 | react-overlays "^0.8.0"
1579 | react-prop-types "^0.4.0"
1580 | react-transition-group "^2.0.0"
1581 | uncontrollable "^4.1.0"
1582 | warning "^3.0.0"
1583 |
1584 | react-dom@^16.0.0:
1585 | version "16.2.0"
1586 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044"
1587 | dependencies:
1588 | fbjs "^0.8.16"
1589 | loose-envify "^1.1.0"
1590 | object-assign "^4.1.1"
1591 | prop-types "^15.6.0"
1592 |
1593 | react-overlays@^0.8.0:
1594 | version "0.8.3"
1595 | resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-0.8.3.tgz#fad65eea5b24301cca192a169f5dddb0b20d3ac5"
1596 | dependencies:
1597 | classnames "^2.2.5"
1598 | dom-helpers "^3.2.1"
1599 | prop-types "^15.5.10"
1600 | prop-types-extra "^1.0.1"
1601 | react-transition-group "^2.2.0"
1602 | warning "^3.0.0"
1603 |
1604 | react-prop-types@^0.4.0:
1605 | version "0.4.0"
1606 | resolved "https://registry.yarnpkg.com/react-prop-types/-/react-prop-types-0.4.0.tgz#f99b0bfb4006929c9af2051e7c1414a5c75b93d0"
1607 | dependencies:
1608 | warning "^3.0.0"
1609 |
1610 | react-transition-group@^2.0.0, react-transition-group@^2.2.0:
1611 | version "2.2.1"
1612 | resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.2.1.tgz#e9fb677b79e6455fd391b03823afe84849df4a10"
1613 | dependencies:
1614 | chain-function "^1.0.0"
1615 | classnames "^2.2.5"
1616 | dom-helpers "^3.2.0"
1617 | loose-envify "^1.3.1"
1618 | prop-types "^15.5.8"
1619 | warning "^3.0.0"
1620 |
1621 | react@^16.0.0:
1622 | version "16.2.0"
1623 | resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba"
1624 | dependencies:
1625 | fbjs "^0.8.16"
1626 | loose-envify "^1.1.0"
1627 | object-assign "^4.1.1"
1628 | prop-types "^15.6.0"
1629 |
1630 | read-only-stream@^2.0.0:
1631 | version "2.0.0"
1632 | resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0"
1633 | dependencies:
1634 | readable-stream "^2.0.2"
1635 |
1636 | readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.3.3:
1637 | version "2.3.3"
1638 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
1639 | dependencies:
1640 | core-util-is "~1.0.0"
1641 | inherits "~2.0.3"
1642 | isarray "~1.0.0"
1643 | process-nextick-args "~1.0.6"
1644 | safe-buffer "~5.1.1"
1645 | string_decoder "~1.0.3"
1646 | util-deprecate "~1.0.1"
1647 |
1648 | readable-stream@~2.0.0:
1649 | version "2.0.6"
1650 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e"
1651 | dependencies:
1652 | core-util-is "~1.0.0"
1653 | inherits "~2.0.1"
1654 | isarray "~1.0.0"
1655 | process-nextick-args "~1.0.6"
1656 | string_decoder "~0.10.x"
1657 | util-deprecate "~1.0.1"
1658 |
1659 | regenerate@^1.2.1:
1660 | version "1.3.3"
1661 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f"
1662 |
1663 | regenerator-runtime@^0.11.0:
1664 | version "0.11.1"
1665 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
1666 |
1667 | regenerator-transform@^0.10.0:
1668 | version "0.10.1"
1669 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
1670 | dependencies:
1671 | babel-runtime "^6.18.0"
1672 | babel-types "^6.19.0"
1673 | private "^0.1.6"
1674 |
1675 | regexpu-core@^2.0.0:
1676 | version "2.0.0"
1677 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240"
1678 | dependencies:
1679 | regenerate "^1.2.1"
1680 | regjsgen "^0.2.0"
1681 | regjsparser "^0.1.4"
1682 |
1683 | regjsgen@^0.2.0:
1684 | version "0.2.0"
1685 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
1686 |
1687 | regjsparser@^0.1.4:
1688 | version "0.1.5"
1689 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
1690 | dependencies:
1691 | jsesc "~0.5.0"
1692 |
1693 | repeating@^2.0.0:
1694 | version "2.0.1"
1695 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
1696 | dependencies:
1697 | is-finite "^1.0.0"
1698 |
1699 | resolve@1.1.7:
1700 | version "1.1.7"
1701 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
1702 |
1703 | resolve@^1.1.3, resolve@^1.1.4:
1704 | version "1.5.0"
1705 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36"
1706 | dependencies:
1707 | path-parse "^1.0.5"
1708 |
1709 | ripemd160@^2.0.0, ripemd160@^2.0.1:
1710 | version "2.0.1"
1711 | resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7"
1712 | dependencies:
1713 | hash-base "^2.0.0"
1714 | inherits "^2.0.1"
1715 |
1716 | safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
1717 | version "5.1.1"
1718 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
1719 |
1720 | setimmediate@^1.0.5:
1721 | version "1.0.5"
1722 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
1723 |
1724 | sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4:
1725 | version "2.4.10"
1726 | resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.10.tgz#b1fde5cd7d11a5626638a07c604ab909cfa31f9b"
1727 | dependencies:
1728 | inherits "^2.0.1"
1729 | safe-buffer "^5.0.1"
1730 |
1731 | shasum@^1.0.0:
1732 | version "1.0.2"
1733 | resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f"
1734 | dependencies:
1735 | json-stable-stringify "~0.0.0"
1736 | sha.js "~2.4.4"
1737 |
1738 | shell-quote@^1.6.1:
1739 | version "1.6.1"
1740 | resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767"
1741 | dependencies:
1742 | array-filter "~0.0.0"
1743 | array-map "~0.0.0"
1744 | array-reduce "~0.0.0"
1745 | jsonify "~0.0.0"
1746 |
1747 | slash@^1.0.0:
1748 | version "1.0.0"
1749 | resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
1750 |
1751 | source-map-support@^0.4.15:
1752 | version "0.4.18"
1753 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
1754 | dependencies:
1755 | source-map "^0.5.6"
1756 |
1757 | source-map@^0.5.6, source-map@~0.5.3:
1758 | version "0.5.7"
1759 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
1760 |
1761 | stream-browserify@^2.0.0:
1762 | version "2.0.1"
1763 | resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
1764 | dependencies:
1765 | inherits "~2.0.1"
1766 | readable-stream "^2.0.2"
1767 |
1768 | stream-combiner2@^1.1.1:
1769 | version "1.1.1"
1770 | resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe"
1771 | dependencies:
1772 | duplexer2 "~0.1.0"
1773 | readable-stream "^2.0.2"
1774 |
1775 | stream-http@^2.0.0:
1776 | version "2.8.0"
1777 | resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10"
1778 | dependencies:
1779 | builtin-status-codes "^3.0.0"
1780 | inherits "^2.0.1"
1781 | readable-stream "^2.3.3"
1782 | to-arraybuffer "^1.0.0"
1783 | xtend "^4.0.0"
1784 |
1785 | stream-splicer@^2.0.0:
1786 | version "2.0.0"
1787 | resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.0.tgz#1b63be438a133e4b671cc1935197600175910d83"
1788 | dependencies:
1789 | inherits "^2.0.1"
1790 | readable-stream "^2.0.2"
1791 |
1792 | string_decoder@~0.10.0, string_decoder@~0.10.x:
1793 | version "0.10.31"
1794 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
1795 |
1796 | string_decoder@~1.0.3:
1797 | version "1.0.3"
1798 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
1799 | dependencies:
1800 | safe-buffer "~5.1.0"
1801 |
1802 | strip-ansi@^3.0.0:
1803 | version "3.0.1"
1804 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
1805 | dependencies:
1806 | ansi-regex "^2.0.0"
1807 |
1808 | subarg@^1.0.0:
1809 | version "1.0.0"
1810 | resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2"
1811 | dependencies:
1812 | minimist "^1.1.0"
1813 |
1814 | supports-color@^2.0.0:
1815 | version "2.0.0"
1816 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
1817 |
1818 | syntax-error@^1.1.1:
1819 | version "1.3.0"
1820 | resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.3.0.tgz#1ed9266c4d40be75dc55bf9bb1cb77062bb96ca1"
1821 | dependencies:
1822 | acorn "^4.0.3"
1823 |
1824 | through2@^2.0.0:
1825 | version "2.0.3"
1826 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
1827 | dependencies:
1828 | readable-stream "^2.1.5"
1829 | xtend "~4.0.1"
1830 |
1831 | "through@>=2.2.7 <3":
1832 | version "2.3.8"
1833 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
1834 |
1835 | timers-browserify@^1.0.1:
1836 | version "1.4.2"
1837 | resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d"
1838 | dependencies:
1839 | process "~0.11.0"
1840 |
1841 | to-arraybuffer@^1.0.0:
1842 | version "1.0.1"
1843 | resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
1844 |
1845 | to-fast-properties@^1.0.3:
1846 | version "1.0.3"
1847 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
1848 |
1849 | trim-right@^1.0.1:
1850 | version "1.0.1"
1851 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
1852 |
1853 | tty-browserify@~0.0.0:
1854 | version "0.0.0"
1855 | resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
1856 |
1857 | typedarray@~0.0.5:
1858 | version "0.0.6"
1859 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
1860 |
1861 | ua-parser-js@^0.7.9:
1862 | version "0.7.17"
1863 | resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac"
1864 |
1865 | umd@^3.0.0:
1866 | version "3.0.1"
1867 | resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.1.tgz#8ae556e11011f63c2596708a8837259f01b3d60e"
1868 |
1869 | uncontrollable@^4.1.0:
1870 | version "4.1.0"
1871 | resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-4.1.0.tgz#e0358291252e1865222d90939b19f2f49f81c1a9"
1872 | dependencies:
1873 | invariant "^2.1.0"
1874 |
1875 | union-class-names@^1.0.0:
1876 | version "1.0.0"
1877 | resolved "https://registry.yarnpkg.com/union-class-names/-/union-class-names-1.0.0.tgz#9259608adacc39094a2b0cfe16c78e6200617847"
1878 |
1879 | url@~0.11.0:
1880 | version "0.11.0"
1881 | resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
1882 | dependencies:
1883 | punycode "1.3.2"
1884 | querystring "0.2.0"
1885 |
1886 | util-deprecate@~1.0.1:
1887 | version "1.0.2"
1888 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1889 |
1890 | util@0.10.3, util@~0.10.1:
1891 | version "0.10.3"
1892 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
1893 | dependencies:
1894 | inherits "2.0.1"
1895 |
1896 | vm-browserify@~0.0.1:
1897 | version "0.0.4"
1898 | resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
1899 | dependencies:
1900 | indexof "0.0.1"
1901 |
1902 | warning@^3.0.0:
1903 | version "3.0.0"
1904 | resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c"
1905 | dependencies:
1906 | loose-envify "^1.0.0"
1907 |
1908 | whatwg-fetch@>=0.10.0:
1909 | version "2.0.3"
1910 | resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
1911 |
1912 | wrappy@1:
1913 | version "1.0.2"
1914 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1915 |
1916 | xtend@^4.0.0, xtend@~4.0.1:
1917 | version "4.0.1"
1918 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
1919 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "draft-js-richbuttons-plugin",
3 | "version": "2.2.0",
4 | "description": "Rich Editing Buttons Plugin for DraftJS Plugins Editor",
5 | "author": {
6 | "name": "Jason Phillips",
7 | "url": "https://github.com/jasonphillips"
8 | },
9 | "repository": {
10 | "type": "git",
11 | "url": "https://github.com/jasonphillips/draft-js-richbuttons-plugin.git"
12 | },
13 | "main": "lib/index.js",
14 | "keywords": [
15 | "editor",
16 | "wysiwyg",
17 | "draft",
18 | "react",
19 | "ux",
20 | "components",
21 | "widget",
22 | "react-component"
23 | ],
24 | "peerDependencies": {
25 | "draft-js-plugins-editor": "^2.0.0",
26 | "react": "^15.0.0 || ^16.0.0",
27 | "react-dom": "^15.0.0 || ^16.0.0"
28 | },
29 | "scripts": {
30 | "clean": "rimraf lib",
31 | "build": "npm run clean && npm run build:js",
32 | "build:js": "BABEL_DISABLE_CACHE=1 BABEL_ENV=production NODE_ENV=production babel --out-dir='lib' --ignore='__test__/*' src",
33 | "prepublish": "npm run build",
34 | "test": "mocha --compilers js:babel-core/register --require jsdom-global/register **/__test__/*.js"
35 | },
36 | "license": "MIT",
37 | "dependencies": {
38 | "decorate-component-with-props": "^1.0.2",
39 | "prop-types": "^15.5.10"
40 | },
41 | "devDependencies": {
42 | "babel-cli": "^6.18.0",
43 | "babel-preset-es2015": "^6.18.0",
44 | "babel-preset-react": "^6.16.0",
45 | "babel-preset-react-hmre": "^1.1.1",
46 | "babel-preset-stage-0": "^6.16.0",
47 | "chai": "^3.5.0",
48 | "chai-enzyme": "^0.7.1",
49 | "draft-js-plugins-editor": "~2.0.4",
50 | "draft-js": "~0.10.5",
51 | "enzyme": "^2.9.0",
52 | "jsdom": "^9.8.3",
53 | "jsdom-global": "^2.1.0",
54 | "mocha": "^3.2.0",
55 | "react": "^15.5.0",
56 | "react-dom": "^15.5.0",
57 | "react-test-renderer": "^15.6.1",
58 | "rimraf": "^2.5.4",
59 | "sinon": "^1.17.6",
60 | "sinon-chai": "^2.8.0"
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/src/BlockButton/index.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import PropTypes from 'prop-types';
3 |
4 | class BlockButton extends Component {
5 |
6 | static propTypes = {
7 | store: PropTypes.object,
8 | bindToState: PropTypes.func,
9 | label: PropTypes.string,
10 | blockType: PropTypes.string
11 | };
12 |
13 | constructor(props) {
14 | super(props);
15 | this.componentWillMount = this.componentWillMount.bind(this);
16 | this.componentWillUnmount = this.componentWillUnmount.bind(this);
17 | }
18 |
19 | // register with store updates to ensure rerender
20 | componentWillMount() {
21 | this.props.bindToState(this);
22 | }
23 |
24 | componentWillUnmount() {
25 | this.props.bindToState(this, true);
26 | }
27 |
28 | render() {
29 | const { store, blockType, label, children } = this.props;
30 | const toggleBlockType = store.toggleBlockType.bind(store, blockType);
31 | let isActive = undefined;
32 |
33 | if (store.getEditorState) {
34 | const editorState = store.getEditorState();
35 | const selection = editorState.getSelection();
36 | const currentType = editorState
37 | .getCurrentContent()
38 | .getBlockForKey(selection.getStartKey())
39 | .getType();
40 | isActive = currentType == blockType;
41 | } else {
42 | // editor not yet available / initialized
43 | isActive = false;
44 | }
45 |
46 | if (children && typeof children == 'object') {
47 | const ChildInput = React.cloneElement(children, {
48 | toggleBlockType,
49 | isActive,
50 | label,
51 | blockType
52 | });
53 |
54 | return ChildInput;
55 | }
56 |
57 | const spanStyle = {
58 | color: isActive ? '#900' : '#999',
59 | cursor: 'pointer',
60 | display: 'inline-block',
61 | marginRight: '1em'
62 | }
63 |
64 | return (
65 |
66 | { label }
67 |
68 | );
69 | }
70 | }
71 |
72 | export default BlockButton;
73 |
--------------------------------------------------------------------------------
/src/StyleButton/index.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import PropTypes from 'prop-types';
3 |
4 | const preventDefault = (event) => event.preventDefault();
5 |
6 | const wrapPrevent = (callback) => {
7 | return (event) => {
8 | event.preventDefault();
9 | callback();
10 | }
11 | }
12 |
13 | class StyleButton extends Component {
14 |
15 | static propTypes = {
16 | store: PropTypes.object,
17 | bindToState: PropTypes.func,
18 | label: PropTypes.string,
19 | inlineStyle: PropTypes.string
20 | };
21 |
22 | constructor(props) {
23 | super(props);
24 | this.componentWillMount = this.componentWillMount.bind(this);
25 | this.componentWillUnmount = this.componentWillUnmount.bind(this);
26 | }
27 |
28 | // register with store updates to ensure rerender
29 | componentWillMount() {
30 | this.props.bindToState(this);
31 | }
32 |
33 | componentWillUnmount() {
34 | this.props.bindToState(this, true);
35 | }
36 |
37 | render() {
38 | const { store, inlineStyle, label, children } = this.props;
39 | const toggleInlineStyle = store.toggleInlineStyle.bind(store, inlineStyle);
40 | let isActive = undefined;
41 |
42 | if (store.getEditorState) {
43 | const currentStyle = store.getEditorState().getCurrentInlineStyle();
44 | isActive = currentStyle.has(inlineStyle);
45 | } else {
46 | // editor not yet available / initialized
47 | isActive = false;
48 | }
49 |
50 | if (children && typeof children == 'object') {
51 | const ChildInput = React.cloneElement(children, {
52 | toggleInlineStyle: wrapPrevent(toggleInlineStyle),
53 | isActive,
54 | label,
55 | inlineStyle,
56 | onMouseDown: preventDefault
57 | });
58 |
59 | return ChildInput;
60 | }
61 |
62 | const spanStyle = {
63 | color: isActive ? '#900' : '#999',
64 | cursor: 'pointer',
65 | display: 'inline-block',
66 | marginRight: '1em'
67 | }
68 |
69 | return (
70 |
75 | { label }
76 |
77 | );
78 | }
79 | }
80 |
81 | export default StyleButton;
82 |
--------------------------------------------------------------------------------
/src/__test__/index.js:
--------------------------------------------------------------------------------
1 | import { jsdom } from 'jsdom';
2 | import React from 'react';
3 | import { mount } from 'enzyme';
4 | import { EditorState, ContentState } from 'draft-js';
5 | import DraftPasteProcessor from 'draft-js/lib/DraftPasteProcessor';
6 | import chai from 'chai';
7 | const expect = chai.expect;
8 |
9 | import createRichButtonsPlugin from '../index';
10 | import { MAX_LIST_DEPTH, INLINE_STYLES, BLOCK_TYPES } from '../config/types';
11 |
12 | process.env.NODE_ENV = 'test';
13 |
14 | const exposedProperties = ['window', 'navigator', 'document'];
15 | const blankEvent = {preventDefault: () => null}
16 |
17 | global.document = jsdom('');
18 | global.window = document.defaultView;
19 | Object.keys(document.defaultView).forEach((property) => {
20 | if (typeof global[property] === 'undefined') {
21 | exposedProperties.push(property);
22 | global[property] = document.defaultView[property];
23 | }
24 | });
25 |
26 | // chaiEnzyme needs to be initialised here, so that canUseDOM is set
27 | // to true when react-dom initialises (which chai-enzyme depends upon)
28 | const chaiEnzyme = require('chai-enzyme');
29 | chai.use(chaiEnzyme());
30 |
31 | describe('Draft RichButtons Plugin', () => {
32 | const createEditorStateFromHTML = (html) => {
33 | const blocks = DraftPasteProcessor.processHTML(html);
34 | const contentState = ContentState.createFromBlockArray(blocks);
35 | return EditorState.createWithContent(contentState);
36 | };
37 |
38 | const getCurrentBlockType = (editorState) => {
39 | const selection = editorState.getSelection();
40 | return editorState
41 | .getCurrentContent()
42 | .getBlockForKey(selection.getStartKey())
43 | .getType();
44 | };
45 |
46 | let richButtonsPlugin;
47 |
48 | describe('style buttons', () => {
49 | richButtonsPlugin = createRichButtonsPlugin();
50 | const html = 'Some normal text
';
51 | let editorState = createEditorStateFromHTML(html);
52 |
53 | richButtonsPlugin.initialize({
54 | getEditorState: () => editorState,
55 | setEditorState: (newState) => {
56 | editorState = newState;
57 | return editorState;
58 | }
59 | });
60 |
61 | const {
62 | ItalicButton, BoldButton, MonospaceButton, UnderlineButton,
63 | createStyleButton,
64 | } = richButtonsPlugin;
65 |
66 | describe('default buttons', () => {
67 | // render with refs for iteration
68 | class ButtonsBar extends React.Component {
69 | render() {
70 | return (
71 |
72 |
73 |
74 |
75 |
76 |
77 | );
78 | }
79 | }
80 | const buttons = mount( );
81 |
82 | INLINE_STYLES.forEach(({ label, style }) => {
83 | describe(`${label}Button`, () => {
84 |
85 | it('renders with default labels', () => {
86 | expect(buttons.ref(label)).to.have.text(label);
87 | });
88 |
89 | it('toggles current style on and off', () => {
90 | expect(editorState.getCurrentInlineStyle().has(style)).to.be.false;
91 | buttons.ref(label).simulate('click');
92 | expect(editorState.getCurrentInlineStyle().has(style)).to.be.true;
93 | buttons.ref(label).simulate('click');
94 | expect(editorState.getCurrentInlineStyle().has(style)).to.be.false;
95 | });
96 |
97 | });
98 | });
99 | })
100 |
101 | describe('custom inline style with createStyleButton()', () => {
102 | // create a custom inline style button
103 | const BarStyleButton = createStyleButton({style: 'bar', label:'Bar'});
104 |
105 | // render with refs for iteration
106 | class ButtonsBar extends React.Component {
107 | render() {
108 | return (
109 |
110 |
111 |
112 | );
113 | }
114 | }
115 | const buttons = mount( );
116 |
117 | it('renders with correct label', () => {
118 | expect(buttons.ref('BarButton')).to.have.text('Bar');
119 | });
120 |
121 | it('toggles custom inline style on and off', () => {
122 | expect(editorState.getCurrentInlineStyle().has('bar')).to.be.false;
123 | buttons.ref('BarButton').simulate('click');
124 | expect(editorState.getCurrentInlineStyle().has('bar')).to.be.true;
125 | buttons.ref('BarButton').simulate('click');
126 | expect(editorState.getCurrentInlineStyle().has('bar')).to.be.false;
127 | });
128 | });
129 |
130 | describe('custom buttons', () => {
131 | // render with refs for iteration
132 | class CustomButtonsBar extends React.Component {
133 | render() {
134 | return (
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 | );
150 | }
151 | }
152 | const buttons = mount( );
153 |
154 | INLINE_STYLES.forEach(({ label, style }) => {
155 | describe(`Custom ${label}Button`, () => {
156 | const childWithProps = buttons.ref(`${label}Child`);
157 |
158 | it('passes properties to child component', () => {
159 | expect(childWithProps.prop('label')).to.be.a.string;
160 | expect(childWithProps.prop('inlineStyle')).to.be.a.string;
161 | expect(childWithProps.prop('toggleInlineStyle')).to.be.a.function;
162 | });
163 |
164 | it('toggles isActive prop of child', () => {
165 | expect(childWithProps.prop('isActive')).to.be.false;
166 |
167 | childWithProps.prop('toggleInlineStyle')(blankEvent);
168 | expect(editorState.getCurrentInlineStyle().has(style)).to.be.true;
169 | expect(childWithProps.prop('isActive')).to.be.true;
170 |
171 | childWithProps.prop('toggleInlineStyle')(blankEvent);
172 | expect(childWithProps.prop('isActive')).to.be.false;
173 | });
174 |
175 | });
176 | });
177 | });
178 | });
179 |
180 | describe('block buttons', () => {
181 | richButtonsPlugin = createRichButtonsPlugin();
182 | const html = 'Some normal text
';
183 | let editorState = createEditorStateFromHTML(html);
184 |
185 | richButtonsPlugin.initialize({
186 | getEditorState: () => editorState,
187 | setEditorState: (newState) => {
188 | editorState = newState;
189 | return editorState;
190 | }
191 | });
192 |
193 | const {
194 | ParagraphButton, BlockquoteButton, CodeButton, OLButton, ULButton,
195 | H1Button, H2Button, H3Button, H4Button, H5Button, H6Button,
196 | createBlockButton,
197 | } = richButtonsPlugin;
198 |
199 | describe('default buttons', () => {
200 | // render with refs for iteration
201 | class ButtonsBar extends React.Component {
202 | render() {
203 | return (
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 | );
218 | }
219 | }
220 | const buttons = mount( );
221 |
222 | BLOCK_TYPES.forEach(({ label, style }) => {
223 | describe(`${label}Button`, () => {
224 |
225 | it('renders with default labels', () => {
226 | expect(buttons.ref(label)).to.have.text(label);
227 | });
228 |
229 | it('toggles current block style on and off', () => {
230 | if (label=='Paragraph') return;
231 |
232 | expect(getCurrentBlockType(editorState)).to.not.equal(style);
233 | buttons.ref(label).simulate('click');
234 | expect(getCurrentBlockType(editorState)).to.equal(style);
235 | buttons.ref(label).simulate('click');
236 | expect(getCurrentBlockType(editorState)).to.not.equal(style);
237 | });
238 | });
239 | });
240 | });
241 |
242 | describe('custom block with createBlockButton()', () => {
243 | // create a custom block type
244 | const FooBlockButton = createBlockButton({type: 'foo', label:'Foo'});
245 |
246 | // render with refs for iteration
247 | class ButtonsBar extends React.Component {
248 | render() {
249 | return (
250 |
251 |
252 |
253 | );
254 | }
255 | }
256 | const buttons = mount( );
257 |
258 | it('renders with correct label', () => {
259 | expect(buttons.ref('FooButton')).to.have.text('Foo');
260 | });
261 |
262 | it('toggles custom block type on and off', () => {
263 | expect(getCurrentBlockType(editorState)).to.not.equal('foo');
264 | buttons.ref('FooButton').simulate('click');
265 | expect(getCurrentBlockType(editorState)).to.equal('foo');
266 | buttons.ref('FooButton').simulate('click');
267 | expect(getCurrentBlockType(editorState)).to.not.equal('foo');
268 | });
269 | });
270 |
271 | describe('custom buttons', () => {
272 | // render with refs for iteration
273 | class CustomButtonsBar extends React.Component {
274 | render() {
275 | return (
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 | );
312 | }
313 | }
314 | const buttons = mount( );
315 |
316 | BLOCK_TYPES.forEach(({ label, style }) => {
317 | describe(`Custom ${label}Button`, () => {
318 | const childWithProps = buttons.ref(`${label}Child`);
319 |
320 | it('passes properties to child component', () => {
321 | expect(childWithProps.prop('label')).to.be.a.string;
322 | expect(childWithProps.prop('blockType')).to.be.a.string;
323 | expect(childWithProps.prop('toggleBlockType')).to.be.a.function;
324 | });
325 |
326 | it('toggles isActive prop of child', () => {
327 | if (label=='Paragraph') return;
328 |
329 | expect(getCurrentBlockType(editorState)).to.not.equal(style);
330 | expect(childWithProps.prop('isActive')).to.be.false;
331 |
332 | childWithProps.prop('toggleBlockType')();
333 | expect(getCurrentBlockType(editorState)).to.equal(style);
334 | expect(childWithProps.prop('isActive')).to.be.true;
335 |
336 | childWithProps.prop('toggleBlockType')();
337 | expect(getCurrentBlockType(editorState)).to.not.equal(style);
338 | expect(childWithProps.prop('isActive')).to.be.false;
339 | });
340 |
341 | });
342 | });
343 | });
344 | });
345 |
346 | });
347 |
--------------------------------------------------------------------------------
/src/config/types.js:
--------------------------------------------------------------------------------
1 | export const MAX_LIST_DEPTH = 5;
2 |
3 | export const INLINE_STYLES = [
4 | { label: 'Bold', style: 'BOLD' },
5 | { label: 'Italic', style: 'ITALIC' },
6 | { label: 'Underline', style: 'UNDERLINE' },
7 | { label: 'Monospace', style: 'CODE' },
8 | ];
9 |
10 | export const BLOCK_TYPES = [
11 | { label: 'H1', style: 'header-one' },
12 | { label: 'H2', style: 'header-two' },
13 | { label: 'H3', style: 'header-three' },
14 | { label: 'H4', style: 'header-four' },
15 | { label: 'H5', style: 'header-five' },
16 | { label: 'H6', style: 'header-six' },
17 | { label: 'Blockquote', style: 'blockquote' },
18 | { label: 'UL', style: 'unordered-list-item' },
19 | { label: 'OL', style: 'ordered-list-item' },
20 | { label: 'Code', style: 'code-block' },
21 | { label: 'Paragraph', style: 'unstyled' }
22 | ];
23 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import StyleButton from './StyleButton';
2 | import BlockButton from './BlockButton';
3 | import { RichUtils, EditorState } from 'draft-js';
4 | import { MAX_LIST_DEPTH, INLINE_STYLES, BLOCK_TYPES } from './config/types';
5 |
6 | import decorateComponentWithProps from 'decorate-component-with-props';
7 |
8 | const richButtonsPlugin = () => {
9 | const store = {
10 | getEditorState: undefined,
11 | setEditorState: undefined,
12 | currentState: undefined,
13 |
14 | onChange: function onChange(newState) {
15 | if (newState!==this.currentState) {
16 | this.currentState = newState;
17 | this.notifyBound();
18 | }
19 | return newState;
20 | },
21 |
22 | // buttons must be subscribed explicitly to ensure rerender
23 | boundComponents: [],
24 | bindToState: function bindToState(component, remove) {
25 | if (remove) {
26 | this.boundComponents = this.boundComponents.filter((registered) =>
27 | registered!==component
28 | );
29 | } else {
30 | this.boundComponents.push(component);
31 | }
32 | },
33 | notifyBound: function notifyBound() {
34 | this.boundComponents.forEach((component) => component.forceUpdate());
35 | },
36 |
37 | toggleInlineStyle: function toggleInlineStyle(inlineStyle) {
38 | const state = this.getEditorState();
39 | const newState = RichUtils.toggleInlineStyle(
40 | state,
41 | inlineStyle
42 | );
43 | this.setEditorState(
44 | newState
45 | );
46 | },
47 |
48 | toggleBlockType: function toggleBlockType(blockType) {
49 | const state = this.getEditorState();
50 | const newState = RichUtils.toggleBlockType(
51 | state,
52 | blockType
53 | );
54 | this.setEditorState(
55 | EditorState.forceSelection(
56 | newState, newState.getCurrentContent().getSelectionAfter()
57 | )
58 | );
59 | }
60 | };
61 |
62 | const configured = {
63 | initialize: ({ getEditorState, setEditorState }) => {
64 | store.currentState = getEditorState();
65 | store.getEditorState = () => store.currentState;
66 | store.setEditorState = (newState) => {
67 | store.onChange(newState);
68 | setEditorState(newState);
69 | };
70 | },
71 |
72 | handleKeyCommand: (command, state, { getEditorState, setEditorState }) => {
73 | const editorState = getEditorState();
74 | const newState = RichUtils.handleKeyCommand(editorState, command);
75 | if (newState) {
76 | setEditorState(newState);
77 | return true;
78 | }
79 | return false;
80 | },
81 |
82 | onTab: (event, { getEditorState, setEditorState }) => {
83 | const editorState = getEditorState();
84 | const newState = RichUtils.onTab(event, editorState, MAX_LIST_DEPTH);
85 |
86 | if (newState !== editorState) {
87 | setEditorState(newState);
88 | }
89 | },
90 |
91 | onChange: (newState) => store.onChange(newState)
92 | };
93 |
94 | INLINE_STYLES.forEach((inlineStyle) => {
95 | configured[`${inlineStyle.label}Button`] = decorateComponentWithProps(
96 | StyleButton, {
97 | store,
98 | bindToState: store.bindToState.bind(store),
99 | label: inlineStyle.label,
100 | inlineStyle: inlineStyle.style
101 | }
102 | );
103 | });
104 |
105 | BLOCK_TYPES.forEach((blockType) => {
106 | configured[`${blockType.label}Button`] = decorateComponentWithProps(
107 | BlockButton, {
108 | store,
109 | bindToState: store.bindToState.bind(store),
110 | label: blockType.label,
111 | blockType: blockType.style
112 | }
113 | );
114 | });
115 |
116 | configured.createBlockButton = ({type, label}) => decorateComponentWithProps(
117 | BlockButton, {
118 | store,
119 | bindToState: store.bindToState.bind(store),
120 | label: label,
121 | blockType: type
122 | }
123 | );
124 |
125 | configured.createStyleButton = ({style, label}) => decorateComponentWithProps(
126 | StyleButton, {
127 | store,
128 | bindToState: store.bindToState.bind(store),
129 | label: label,
130 | inlineStyle: style
131 | }
132 | );
133 |
134 | return configured;
135 | };
136 |
137 | export default richButtonsPlugin;
138 |
--------------------------------------------------------------------------------