diff --git a/.eslintrc b/.eslintrc index d90ae86b..d61824f0 100644 --- a/.eslintrc +++ b/.eslintrc @@ -10,19 +10,7 @@ "rules": { "eqeqeq": 2, "no-unused-vars": 2, - // // Bring back after we remove CSS Modules 100% - // "import/order": "warn", - // Prettier automatically uses the least amount of parens possible, so this - // does more harm than good. "no-mixed-operators": "off", - // Temporary fix for a failing import lint - "import/no-unresolved": [ - "error", - { - "ignore": ["slate-drop-or-paste-images"] - } - ], - // Flow "flowtype/require-valid-file-annotation": [ 2, "always", @@ -32,7 +20,6 @@ ], "flowtype/space-after-type-colon": [2, "always"], "flowtype/space-before-type-colon": [2, "never"], - // Enforce that code is formatted with prettier. "prettier/prettier": [ "error", { diff --git a/app/components/Editor/Editor.js b/app/components/Editor/Editor.js index b117ba74..d21f3934 100644 --- a/app/components/Editor/Editor.js +++ b/app/components/Editor/Editor.js @@ -7,8 +7,6 @@ import Embed from './Embed'; import embeds from '../../embeds'; type Props = { - titlePlaceholder?: string, - bodyPlaceholder?: string, defaultValue?: string, readOnly?: boolean, disableEmbeds?: boolean, diff --git a/app/components/Editor/Embed.js b/app/components/Editor/Embed.js index 0b50cf61..74558adb 100644 --- a/app/components/Editor/Embed.js +++ b/app/components/Editor/Embed.js @@ -26,7 +26,7 @@ export default class Embed extends React.Component<*> { const result = this.matches; if (!result) return null; - const { attributes, isSelected } = this.props; + const { attributes, isSelected, children } = this.props; const { component, matches } = result; const EmbedComponent = component; @@ -37,6 +37,7 @@ export default class Embed extends React.Component<*> { {...attributes} > + {children} ); } diff --git a/app/scenes/Document/Document.js b/app/scenes/Document/Document.js index 7c25988c..9f6d4936 100644 --- a/app/scenes/Document/Document.js +++ b/app/scenes/Document/Document.js @@ -49,7 +49,7 @@ You have unsaved changes. Are you sure you want to discard them? `; const UPLOADING_WARNING = ` -Image are still uploading. +Images are still uploading. Are you sure you want to discard them? `; @@ -240,7 +240,7 @@ class DocumentScene extends React.Component { const document = this.document; this.isDirty = - document && this.getEditorText().trim() !== document.text.trim(); + !!document && this.getEditorText().trim() !== document.text.trim(); }, IS_DIRTY_DELAY); onImageUploadStart = () => { @@ -340,11 +340,11 @@ class DocumentScene extends React.Component { {this.isEditing && ( @@ -365,8 +365,6 @@ class DocumentScene extends React.Component { { if (this.editor) this.editor.focusAtEnd(); }; - renderPlaceholder = (props: *) => { - const { editor, node } = props; - - if (editor.state.isComposing) return; - if (node.object !== 'block') return; - if (!Text.isTextList(node.nodes)) return; - if (node.text !== '') return; - - const index = editor.value.document.getBlocks().indexOf(node); - if (index > 1) return; - - const text = - index === 0 ? this.props.titlePlaceholder : this.props.bodyPlaceholder; - - return {editor.props.readOnly ? '' : text}; - }; - render() { const { readOnly } = this.props; @@ -54,7 +35,7 @@ class DocumentEditor extends React.Component { (this.editor = ref)} - renderPlaceholder={this.renderPlaceholder} + plugins={plugins} {...this.props} /> { } } -// additional styles account for placeholder nodes not always re-rendering const StyledEditor = styled(Editor)` display: flex; flex: 0; - ${Placeholder} { - visibility: hidden; - } - - h1:first-of-type { + p { ${Placeholder} { - visibility: visible; + visibility: hidden; } } - p:nth-child(2):last-child { ${Placeholder} { visibility: visible; diff --git a/app/scenes/Document/components/plugins.js b/app/scenes/Document/components/plugins.js new file mode 100644 index 00000000..7d0d04e9 --- /dev/null +++ b/app/scenes/Document/components/plugins.js @@ -0,0 +1,27 @@ +// @flow +import { Node, Editor } from 'slate'; +import Placeholder from 'rich-markdown-editor/lib/plugins/Placeholder'; + +export default [ + Placeholder({ + placeholder: 'Start with a title…', + when: (editor: Editor, node: Node) => { + if (editor.readOnly) return false; + if (node.object !== 'block') return false; + if (node.type !== 'heading1') return false; + if (node.text !== '') return false; + if (editor.value.document.nodes.first() !== node) return false; + return true; + }, + }), + Placeholder({ + placeholder: '…the rest is your canvas', + when: (editor: Editor, node: Node) => { + if (editor.readOnly) return false; + if (node.object !== 'block') return false; + if (node.type !== 'paragraph') return false; + if (node.text !== '') return false; + return true; + }, + }), +]; diff --git a/app/scenes/Document/schema.js b/app/scenes/Document/schema.js index 64a3be4d..87a2f1bf 100644 --- a/app/scenes/Document/schema.js +++ b/app/scenes/Document/schema.js @@ -1,32 +1,39 @@ // @flow import { cloneDeep } from 'lodash'; -import { Block, Change, Node, Mark } from 'slate'; +import { Block, SlateError, Editor } from 'slate'; import { schema as originalSchema } from 'rich-markdown-editor'; const schema = cloneDeep(originalSchema); // add rules to the schema to ensure the first node is a heading -schema.document.nodes.unshift({ types: ['heading1'], min: 1, max: 1 }); -schema.document.normalize = ( - change: Change, - reason: string, - { - node, - child, - mark, - index, - }: { node: Node, mark?: Mark, child: Node, index: number } -) => { - switch (reason) { - case 'child_type_invalid': { - return change.setNodeByKey( - child.key, - index === 0 ? 'heading1' : 'paragraph' +schema.document.nodes.unshift({ match: { type: 'heading1' }, min: 1, max: 1 }); +schema.document.normalize = (editor: Editor, error: SlateError) => { + switch (error.code) { + case 'child_max_invalid': { + return editor.setNodeByKey( + error.child.key, + error.index === 0 ? 'heading1' : 'paragraph' ); } - case 'child_required': { - const block = Block.create(index === 0 ? 'heading1' : 'paragraph'); - return change.insertNodeByKey(node.key, index, block); + case 'child_min_invalid': { + const missingTitle = error.index === 0; + const firstNode = editor.value.document.nodes.get(0); + if (!firstNode) { + editor.insertNodeByKey(error.node.key, 0, Block.create('heading1')); + } else { + editor.setNodeByKey(firstNode.key, { type: 'heading1' }); + } + + const secondNode = editor.value.document.nodes.get(1); + if (!secondNode) { + editor.insertNodeByKey(error.node.key, 1, Block.create('paragraph')); + } else { + editor.setNodeByKey(secondNode.key, { type: 'paragraph' }); + } + + if (missingTitle) setImmediate(() => editor.moveFocusToStartOfDocument()); + + return editor; } default: } diff --git a/flow-typed/npm/@tommoor/slate-drop-or-paste-images_vx.x.x.js b/flow-typed/npm/@tommoor/slate-drop-or-paste-images_vx.x.x.js deleted file mode 100644 index 2858bda9..00000000 --- a/flow-typed/npm/@tommoor/slate-drop-or-paste-images_vx.x.x.js +++ /dev/null @@ -1,67 +0,0 @@ -// flow-typed signature: 331ec8f8b563f7cbdee203ec29d377df -// flow-typed version: <>/@tommoor/slate-drop-or-paste-images_v^0.8.1/flow_v0.86.0 - -/** - * This is an autogenerated libdef stub for: - * - * '@tommoor/slate-drop-or-paste-images' - * - * Fill this stub out by replacing all the `any` types. - * - * Once filled out, we encourage you to share your work with the - * community by sending a pull request to: - * https://github.com/flowtype/flow-typed - */ - -declare module '@tommoor/slate-drop-or-paste-images' { - declare module.exports: any; -} - -/** - * We include stubs for each file inside this npm package in case you need to - * require those files directly. Feel free to delete any files that aren't - * needed. - */ -declare module '@tommoor/slate-drop-or-paste-images/dist/slate-drop-or-paste-images' { - declare module.exports: any; -} - -declare module '@tommoor/slate-drop-or-paste-images/dist/slate-drop-or-paste-images.min' { - declare module.exports: any; -} - -declare module '@tommoor/slate-drop-or-paste-images/lib/data-uri-to-blob' { - declare module.exports: any; -} - -declare module '@tommoor/slate-drop-or-paste-images/lib/image-to-data-uri' { - declare module.exports: any; -} - -declare module '@tommoor/slate-drop-or-paste-images/lib/index' { - declare module.exports: any; -} - -declare module '@tommoor/slate-drop-or-paste-images/lib/load-image-file' { - declare module.exports: any; -} - -// Filename aliases -declare module '@tommoor/slate-drop-or-paste-images/dist/slate-drop-or-paste-images.js' { - declare module.exports: $Exports<'@tommoor/slate-drop-or-paste-images/dist/slate-drop-or-paste-images'>; -} -declare module '@tommoor/slate-drop-or-paste-images/dist/slate-drop-or-paste-images.min.js' { - declare module.exports: $Exports<'@tommoor/slate-drop-or-paste-images/dist/slate-drop-or-paste-images.min'>; -} -declare module '@tommoor/slate-drop-or-paste-images/lib/data-uri-to-blob.js' { - declare module.exports: $Exports<'@tommoor/slate-drop-or-paste-images/lib/data-uri-to-blob'>; -} -declare module '@tommoor/slate-drop-or-paste-images/lib/image-to-data-uri.js' { - declare module.exports: $Exports<'@tommoor/slate-drop-or-paste-images/lib/image-to-data-uri'>; -} -declare module '@tommoor/slate-drop-or-paste-images/lib/index.js' { - declare module.exports: $Exports<'@tommoor/slate-drop-or-paste-images/lib/index'>; -} -declare module '@tommoor/slate-drop-or-paste-images/lib/load-image-file.js' { - declare module.exports: $Exports<'@tommoor/slate-drop-or-paste-images/lib/load-image-file'>; -} diff --git a/flow-typed/npm/slate-drop-or-paste-images_vx.x.x.js b/flow-typed/npm/slate-drop-or-paste-images_vx.x.x.js deleted file mode 100644 index 8efa0222..00000000 --- a/flow-typed/npm/slate-drop-or-paste-images_vx.x.x.js +++ /dev/null @@ -1,46 +0,0 @@ -// flow-typed signature: f847a556b96e1291a39558ffff3aa6b7 -// flow-typed version: <>/slate-drop-or-paste-images_v^0.5.0/flow_v0.49.1 - -/** - * This is an autogenerated libdef stub for: - * - * 'slate-drop-or-paste-images' - * - * Fill this stub out by replacing all the `any` types. - * - * Once filled out, we encourage you to share your work with the - * community by sending a pull request to: - * https://github.com/flowtype/flow-typed - */ - -declare module 'slate-drop-or-paste-images' { - declare module.exports: any; -} - -/** - * We include stubs for each file inside this npm package in case you need to - * require those files directly. Feel free to delete any files that aren't - * needed. - */ -declare module 'slate-drop-or-paste-images/dist/image-to-data-uri' { - declare module.exports: any; -} - -declare module 'slate-drop-or-paste-images/dist/index' { - declare module.exports: any; -} - -declare module 'slate-drop-or-paste-images/dist/load-image-file' { - declare module.exports: any; -} - -// Filename aliases -declare module 'slate-drop-or-paste-images/dist/image-to-data-uri.js' { - declare module.exports: $Exports<'slate-drop-or-paste-images/dist/image-to-data-uri'>; -} -declare module 'slate-drop-or-paste-images/dist/index.js' { - declare module.exports: $Exports<'slate-drop-or-paste-images/dist/index'>; -} -declare module 'slate-drop-or-paste-images/dist/load-image-file.js' { - declare module.exports: $Exports<'slate-drop-or-paste-images/dist/load-image-file'>; -} diff --git a/package.json b/package.json index 992b5170..9ecc7aa2 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,6 @@ }, "dependencies": { "@tommoor/remove-markdown": "0.3.1", - "@tommoor/slate-drop-or-paste-images": "^0.8.1", "autotrack": "^2.4.1", "aws-sdk": "^2.135.0", "babel-core": "^6.24.1", @@ -158,7 +157,7 @@ "react-waypoint": "^7.3.1", "redis": "^2.6.2", "redis-lock": "^0.1.0", - "rich-markdown-editor": "^7.0.0-2", + "rich-markdown-editor": "^8.0.0", "safestart": "1.1.0", "sequelize": "4.28.6", "sequelize-cli": "^2.7.0", diff --git a/yarn.lock b/yarn.lock index 58a66662..aebec204 100644 --- a/yarn.lock +++ b/yarn.lock @@ -91,18 +91,6 @@ version "0.3.1" resolved "https://registry.yarnpkg.com/@tommoor/remove-markdown/-/remove-markdown-0.3.1.tgz#25e7b845d52fcfadf149a3a6a468a931fee7619b" -"@tommoor/slate-drop-or-paste-images@^0.8.1": - version "0.8.1" - resolved "https://registry.npmjs.org/@tommoor/slate-drop-or-paste-images/-/slate-drop-or-paste-images-0.8.1.tgz#4d94b5c1dd2de109546ee1f38a1e4a18df078c1e" - dependencies: - es6-promise "^4.0.5" - image-to-data-uri "^1.0.0" - is-data-uri "^0.1.0" - is-image "^1.0.1" - is-url "^1.2.2" - mime-types "^2.1.11" - slate-dev-logger "^0.1.0" - "@types/geojson@^1.0.0": version "1.0.3" resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-1.0.3.tgz#fbcf7fa5eb6dd108d51385cc6987ec1f24214523" @@ -115,6 +103,23 @@ version "6.0.88" resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.88.tgz#f618f11a944f6a18d92b5c472028728a3e3d4b66" +"@wikifactory/slate-edit-blockquote@^0.7.1": + version "0.7.1" + resolved "https://registry.yarnpkg.com/@wikifactory/slate-edit-blockquote/-/slate-edit-blockquote-0.7.1.tgz#dffb4a3a69dfe6dc35198465be92daa999533357" + +"@wikifactory/slate-edit-code@^0.16.0": + version "0.16.0" + resolved "https://registry.yarnpkg.com/@wikifactory/slate-edit-code/-/slate-edit-code-0.16.0.tgz#226cb4f064a97800fd6bc50b94d86bb913ad8799" + dependencies: + detect-indent "^4.0.0" + detect-newline "^2.1.0" + ends-with "^0.2.0" + is-hotkey "^0.1.1" + +"@wikifactory/slate-trailing-block@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@wikifactory/slate-trailing-block/-/slate-trailing-block-0.6.0.tgz#7cfba15707f55ea41583e03e809c8f3cc9b8b77f" + abab@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" @@ -2528,7 +2533,7 @@ debounce@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.0.2.tgz#503cc674d8d7f737099664fb75ddbd36b9626dc6" -debug@*, debug@2.6.8, debug@^2.2.0, debug@^2.3.2, debug@^2.6.1, debug@^2.6.3, debug@^2.6.8: +debug@*, debug@2.6.8, debug@^2.2.0, debug@^2.6.1, debug@^2.6.3, debug@^2.6.8: version "2.6.8" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" dependencies: @@ -4098,6 +4103,14 @@ glogg@^1.0.0: dependencies: sparkles "^1.0.0" +golery-slate-edit-list@^0.18.0-golery.4: + version "0.18.0-golery.4" + resolved "https://registry.yarnpkg.com/golery-slate-edit-list/-/golery-slate-edit-list-0.18.0-golery.4.tgz#4452588b0571ece63bcf62e5d0dbd0018cbc2a12" + +golery-slate-prism@0.6.0-golery.2: + version "0.6.0-golery.2" + resolved "https://registry.yarnpkg.com/golery-slate-prism/-/golery-slate-prism-0.6.0-golery.2.tgz#d56ae8f2dc8056c752da18cb06298dbf84a3d1b4" + good-listener@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" @@ -4890,10 +4903,6 @@ is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" -is-empty@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-empty/-/is-empty-1.2.0.tgz#de9bb5b278738a05a0b09a57e1fb4d4a341a9f6b" - is-equal-shallow@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" @@ -4938,6 +4947,10 @@ is-hexadecimal@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz#6e084bbc92061fbb0971ec58b6ce6d404e24da69" +is-hotkey@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-hotkey/-/is-hotkey-0.1.4.tgz#c34d2c85d6ec8d09a871dcf71931c8067a824c7d" + is-hotkey@^0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/is-hotkey/-/is-hotkey-0.1.1.tgz#b279a2fd108391be9aa93c6cb317f50357da549a" @@ -5720,10 +5733,6 @@ jws@^3.0.0, jws@^3.1.4: jwa "^1.1.4" safe-buffer "^5.0.1" -keycode@^2.1.2: - version "2.1.9" - resolved "https://registry.npmjs.org/keycode/-/keycode-2.1.9.tgz#964a23c54e4889405b4861a5c9f0480d45141dfa" - keygrip@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.0.2.tgz#ad3297c557069dea8bcfe7a4fa491b75c5ddeb91" @@ -6619,7 +6628,7 @@ miller-rabin@^4.0.0: version "1.30.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" -mime-types@^2.0.7, mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.6, mime-types@~2.1.7, mime-types@~2.1.9: +mime-types@^2.0.7, mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.6, mime-types@~2.1.7, mime-types@~2.1.9: version "2.1.17" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" dependencies: @@ -7307,10 +7316,6 @@ osenv@^0.1.0, osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -outline-icons@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/outline-icons/-/outline-icons-1.0.3.tgz#f0928a8bbc7e7ff4ea6762eee8fb2995d477941e" - outline-icons@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/outline-icons/-/outline-icons-1.6.0.tgz#6c7897d354e6bd77ca5498cd3a989b8cb9482574" @@ -7932,9 +7937,9 @@ pretty-hrtime@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" -prismjs@^1.13.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.13.0.tgz#edcc14a90bbd72a03e5ffd2bab81a04c79a607a6" +prismjs@^1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.15.0.tgz#8801d332e472091ba8def94976c8877ad60398d9" optionalDependencies: clipboard "^2.0.0" @@ -8252,12 +8257,6 @@ react-modal@^3.1.2: exenv "^1.2.0" prop-types "^15.5.10" -react-portal@^3.1.0: - version "3.2.0" - resolved "https://registry.npmjs.org/react-portal/-/react-portal-3.2.0.tgz#4224e19b2b05d5cbe730a7ba0e34ec7585de0043" - dependencies: - prop-types "^15.5.8" - react-portal@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/react-portal/-/react-portal-4.0.0.tgz#d327b495dc72a305e8a3e351f212a2d94677f913" @@ -8804,35 +8803,38 @@ retry-axios@0.3.2, retry-axios@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/retry-axios/-/retry-axios-0.3.2.tgz#5757c80f585b4cc4c4986aa2ffd47a60c6d35e13" -rich-markdown-editor@^7.0.0-2: - version "7.0.0-2" - resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-7.0.0-2.tgz#cba247bd13be3505e9ceec69643db27bfc20cfa3" +rich-markdown-editor@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-8.0.0.tgz#d11a7b81e819bcef1680b60359b8761baeadbb01" dependencies: - "@tommoor/slate-drop-or-paste-images" "^0.8.1" + "@wikifactory/slate-edit-blockquote" "^0.7.1" + "@wikifactory/slate-edit-code" "^0.16.0" + "@wikifactory/slate-trailing-block" "^0.6.0" babel-plugin-transform-async-to-generator "^6.24.1" babel-plugin-transform-runtime "^6.23.0" boundless-arrow-key-navigation "^1.1.0" copy-to-clipboard "^3.0.8" eslint-plugin-flowtype "^2.46.1" eslint-plugin-prettier "^2.6.0" + golery-slate-edit-list "^0.18.0-golery.4" + golery-slate-prism "0.6.0-golery.2" immutable "^3.8.2" lodash "^4.17.11" - outline-icons "^1.0.0" + outline-icons "^1.6.0" + prismjs "^1.15.0" react "^16.6.0" react-dom "^16.6.0" react-keydown "^1.9.7" react-medium-image-zoom "^3.0.10" react-portal "^4.1.4" - slate "^0.34.5" - slate-collapse-on-escape "^0.6.1" - slate-edit-code "^0.15.5" - slate-edit-list "^0.11.3" + slate "^0.44.0" + slate-collapse-on-escape "^0.8.1" + slate-drop-or-paste-images "^0.9.1" slate-md-serializer "^5.2.2" - slate-paste-linkify "^0.5.1" - slate-plain-serializer "0.5.4" - slate-prism "^0.5.0" - slate-react "^0.12.3" - slate-trailing-block "^0.5.0" + slate-paste-linkify "^0.7.0" + slate-plain-serializer "0.6.33" + slate-react "^0.21.15" + slate-schema-violations "^0.1.39" slugify "^1.3.0" styled-components "4.0.3" @@ -9166,38 +9168,45 @@ slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" -slate-base64-serializer@^0.2.28: - version "0.2.28" - resolved "https://registry.yarnpkg.com/slate-base64-serializer/-/slate-base64-serializer-0.2.28.tgz#141a93654b58203e82ee24c4068107a67b72aff8" +slate-base64-serializer@^0.2.94: + version "0.2.94" + resolved "https://registry.yarnpkg.com/slate-base64-serializer/-/slate-base64-serializer-0.2.94.tgz#b908c3af481b9a0ead78f313653414c4b2b4b2d5" dependencies: isomorphic-base64 "^1.0.2" -slate-collapse-on-escape@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/slate-collapse-on-escape/-/slate-collapse-on-escape-0.6.1.tgz#404da2e2a1773fc140c7a8230e4ef50b0459d1ed" +slate-collapse-on-escape@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/slate-collapse-on-escape/-/slate-collapse-on-escape-0.8.1.tgz#a264c6c407cdf4bbe5013aae6c6571d613b58713" dependencies: to-pascal-case "^1.0.0" +slate-dev-environment@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/slate-dev-environment/-/slate-dev-environment-0.2.1.tgz#760f500f18af0dc61bcae39eec4160c420fea537" + dependencies: + is-in-browser "^1.1.3" + slate-dev-logger@^0.1.0: version "0.1.36" resolved "https://registry.npmjs.org/slate-dev-logger/-/slate-dev-logger-0.1.36.tgz#ecdb37dbf944dfc742bab23b6a20d5a0472db95e" -slate-dev-logger@^0.1.39: - version "0.1.39" - resolved "https://registry.yarnpkg.com/slate-dev-logger/-/slate-dev-logger-0.1.39.tgz#744a69b85034244713e6de51483af5713c345af4" - -slate-edit-code@^0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/slate-edit-code/-/slate-edit-code-0.15.5.tgz#9b64ad7150a6eaaa8212d7a2200e1c6ae2332b63" +slate-drop-or-paste-images@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/slate-drop-or-paste-images/-/slate-drop-or-paste-images-0.9.1.tgz#bc3b171ff63e85af91972d79f0751616a00e6ad4" dependencies: - detect-indent "^4.0.0" - detect-newline "^2.1.0" - ends-with "^0.2.0" - is-hotkey "^0.1.1" + es6-promise "^4.0.5" + image-to-data-uri "^1.0.0" + is-data-uri "^0.1.0" + is-image "^1.0.1" + is-url "^1.2.2" + slate-dev-logger "^0.1.0" -slate-edit-list@^0.11.3: - version "0.11.3" - resolved "https://registry.yarnpkg.com/slate-edit-list/-/slate-edit-list-0.11.3.tgz#d27ff2ff93a83bef49131a6a44b87a9558c9d44c" +slate-hotkeys@^0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/slate-hotkeys/-/slate-hotkeys-0.2.8.tgz#7fecf732c512c860113f3f1a6dc1015df9d130a7" + dependencies: + is-hotkey "0.1.4" + slate-dev-environment "^0.2.1" slate-md-serializer@^5.2.2: version "5.2.2" @@ -9205,77 +9214,60 @@ slate-md-serializer@^5.2.2: dependencies: hashtag-regex "^2.0.0" -slate-paste-linkify@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/slate-paste-linkify/-/slate-paste-linkify-0.5.1.tgz#6988a76f121fd1fa26fed06a93892f91208c37df" +slate-paste-linkify@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/slate-paste-linkify/-/slate-paste-linkify-0.7.0.tgz#42adf3a3b40c88086c201666a5b203140da5a6ae" dependencies: is-url "^1.2.2" - to-pascal-case "^1.0.0" -slate-plain-serializer@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/slate-plain-serializer/-/slate-plain-serializer-0.5.4.tgz#ba5a1713a50e6e9020e080c10e5869f38820dc96" - dependencies: - slate-dev-logger "^0.1.39" +slate-plain-serializer@0.6.33, slate-plain-serializer@^0.6.33: + version "0.6.33" + resolved "https://registry.yarnpkg.com/slate-plain-serializer/-/slate-plain-serializer-0.6.33.tgz#b731ecd8757f0d402ab36823f4be641c3f11a229" -slate-plain-serializer@^0.5.9: - version "0.5.9" - resolved "https://registry.yarnpkg.com/slate-plain-serializer/-/slate-plain-serializer-0.5.9.tgz#dc6ac5d10c46cac1bfa8d9af36f5e76d766fd57e" - dependencies: - slate-dev-logger "^0.1.39" +slate-prop-types@^0.5.24: + version "0.5.24" + resolved "https://registry.yarnpkg.com/slate-prop-types/-/slate-prop-types-0.5.24.tgz#ecff6584e250d88ff8384ff2bd820eec7d296913" -slate-prism@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/slate-prism/-/slate-prism-0.5.0.tgz#009eb74fea38ad76c64db67def7ea0884917adec" - dependencies: - prismjs "^1.13.0" +slate-react-placeholder@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/slate-react-placeholder/-/slate-react-placeholder-0.1.12.tgz#d09936acf1570f9178d3a40a56ff0616f67e1fd7" -slate-prop-types@^0.4.26: - version "0.4.26" - resolved "https://registry.yarnpkg.com/slate-prop-types/-/slate-prop-types-0.4.26.tgz#72ef2b6fded5893a2a0a273f679b92c4eee99e73" +slate-react@^0.21.15: + version "0.21.15" + resolved "https://registry.yarnpkg.com/slate-react/-/slate-react-0.21.15.tgz#f616f59f2fd91755704c21512972b87f3df76a9e" dependencies: - slate-dev-logger "^0.1.39" - -slate-react@^0.12.3: - version "0.12.3" - resolved "https://registry.yarnpkg.com/slate-react/-/slate-react-0.12.3.tgz#3d0739af6930ae2a178fa90da480d5106ba1c504" - dependencies: - debug "^2.3.2" + debug "^3.1.0" get-window "^1.1.1" - is-hotkey "^0.1.1" - is-in-browser "^1.1.3" is-window "^1.0.2" - keycode "^2.1.2" lodash "^4.1.1" + memoize-one "^4.0.0" prop-types "^15.5.8" react-immutable-proptypes "^2.1.0" - react-portal "^3.1.0" selection-is-backward "^1.0.0" - slate-base64-serializer "^0.2.28" - slate-dev-logger "^0.1.39" - slate-plain-serializer "^0.5.9" - slate-prop-types "^0.4.26" + slate-base64-serializer "^0.2.94" + slate-dev-environment "^0.2.1" + slate-hotkeys "^0.2.8" + slate-plain-serializer "^0.6.33" + slate-prop-types "^0.5.24" + slate-react-placeholder "^0.1.12" + tiny-invariant "^1.0.1" + tiny-warning "^0.0.3" -slate-schema-violations@^0.1.18: - version "0.1.18" - resolved "https://registry.yarnpkg.com/slate-schema-violations/-/slate-schema-violations-0.1.18.tgz#bc760e17dab85a613cd9a5399b98cbf867db0eb7" +slate-schema-violations@^0.1.39: + version "0.1.39" + resolved "https://registry.yarnpkg.com/slate-schema-violations/-/slate-schema-violations-0.1.39.tgz#854ab5624136419cef4c803b1823acabe11f1c15" -slate-trailing-block@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/slate-trailing-block/-/slate-trailing-block-0.5.0.tgz#cedb4f2975f1167e0fb9d259ce1252b82f4d74ff" - -slate@^0.34.5: - version "0.34.5" - resolved "https://registry.yarnpkg.com/slate/-/slate-0.34.5.tgz#4bc30dc300c924193d42371a7afcc168676f2798" +slate@^0.44.0: + version "0.44.9" + resolved "https://registry.yarnpkg.com/slate/-/slate-0.44.9.tgz#0fc9ba9f08b379b86c4c0a1ddebbe6bf28aa3c4b" dependencies: debug "^3.1.0" direction "^0.1.5" esrever "^0.2.0" - is-empty "^1.0.0" is-plain-object "^2.0.4" lodash "^4.17.4" - slate-dev-logger "^0.1.39" - slate-schema-violations "^0.1.18" + tiny-invariant "^1.0.1" + tiny-warning "^0.0.3" type-of "^2.0.1" slice-ansi@0.0.4: @@ -9876,6 +9868,14 @@ tiny-emitter@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c" +tiny-invariant@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.3.tgz#91efaaa0269ccb6271f0296aeedb05fc3e067b7a" + +tiny-warning@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-0.0.3.tgz#1807eb4c5f81784a6354d58ea1d5024f18c6c81f" + title-case@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa"