Upgrade Editor – Slate 0.44 / RME 8.0.0 (#863)
* Upgrade Slate * Normalization * Remove dupe dep * Fixes placeholders * Image uploading fixed * Verbose but solid placeholder handling * RME 8.0.0 * Fixes: Ability to delete embeds
This commit is contained in:
parent
0be5aef1c6
commit
d21dd710bb
13
.eslintrc
13
.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",
|
||||
{
|
||||
|
|
|
@ -7,8 +7,6 @@ import Embed from './Embed';
|
|||
import embeds from '../../embeds';
|
||||
|
||||
type Props = {
|
||||
titlePlaceholder?: string,
|
||||
bodyPlaceholder?: string,
|
||||
defaultValue?: string,
|
||||
readOnly?: boolean,
|
||||
disableEmbeds?: boolean,
|
||||
|
|
|
@ -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}
|
||||
>
|
||||
<EmbedComponent matches={matches} url={this.url} />
|
||||
{children}
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -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<Props> {
|
|||
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<Props> {
|
|||
{this.isEditing && (
|
||||
<React.Fragment>
|
||||
<Prompt
|
||||
when={this.isDirty || false}
|
||||
when={this.isDirty && !this.isUploading}
|
||||
message={DISCARD_CHANGES}
|
||||
/>
|
||||
<Prompt
|
||||
when={this.isUploading || false}
|
||||
when={this.isUploading && !this.isDirty}
|
||||
message={UPLOADING_WARNING}
|
||||
/>
|
||||
</React.Fragment>
|
||||
|
@ -365,8 +365,6 @@ class DocumentScene extends React.Component<Props> {
|
|||
<MaxWidth column auto>
|
||||
<Editor
|
||||
key={embedsDisabled ? 'embeds-disabled' : 'embeds-enabled'}
|
||||
titlePlaceholder="Start with a title…"
|
||||
bodyPlaceholder="…the rest is your canvas"
|
||||
defaultValue={revision ? revision.text : document.text}
|
||||
pretitle={document.emoji}
|
||||
disableEmbeds={embedsDisabled}
|
||||
|
|
|
@ -1,14 +1,12 @@
|
|||
// @flow
|
||||
import * as React from 'react';
|
||||
import styled from 'styled-components';
|
||||
import { Text } from 'slate';
|
||||
import { Placeholder } from 'rich-markdown-editor';
|
||||
import Editor from 'components/Editor';
|
||||
import Placeholder from 'rich-markdown-editor/lib/components/Placeholder';
|
||||
import ClickablePadding from 'components/ClickablePadding';
|
||||
import plugins from './plugins';
|
||||
|
||||
type Props = {
|
||||
titlePlaceholder?: string,
|
||||
bodyPlaceholder?: string,
|
||||
defaultValue?: string,
|
||||
readOnly?: boolean,
|
||||
};
|
||||
|
@ -30,23 +28,6 @@ class DocumentEditor extends React.Component<Props> {
|
|||
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 <Placeholder>{editor.props.readOnly ? '' : text}</Placeholder>;
|
||||
};
|
||||
|
||||
render() {
|
||||
const { readOnly } = this.props;
|
||||
|
||||
|
@ -54,7 +35,7 @@ class DocumentEditor extends React.Component<Props> {
|
|||
<React.Fragment>
|
||||
<StyledEditor
|
||||
ref={ref => (this.editor = ref)}
|
||||
renderPlaceholder={this.renderPlaceholder}
|
||||
plugins={plugins}
|
||||
{...this.props}
|
||||
/>
|
||||
<ClickablePadding
|
||||
|
@ -66,21 +47,15 @@ class DocumentEditor extends React.Component<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;
|
||||
|
|
|
@ -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;
|
||||
},
|
||||
}),
|
||||
];
|
|
@ -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:
|
||||
}
|
||||
|
|
|
@ -1,67 +0,0 @@
|
|||
// flow-typed signature: 331ec8f8b563f7cbdee203ec29d377df
|
||||
// flow-typed version: <<STUB>>/@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'>;
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
// flow-typed signature: f847a556b96e1291a39558ffff3aa6b7
|
||||
// flow-typed version: <<STUB>>/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'>;
|
||||
}
|
|
@ -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",
|
||||
|
|
238
yarn.lock
238
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"
|
||||
|
|
Reference in New Issue