diff --git a/examples/block-switcher/package-lock.json b/examples/block-switcher/package-lock.json index c202f93..6307a49 100644 --- a/examples/block-switcher/package-lock.json +++ b/examples/block-switcher/package-lock.json @@ -4,19 +4,20 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@babel/runtime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz", - "integrity": "sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==", + "@djsp/atomic-block": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/@djsp/atomic-block/download/@djsp/atomic-block-0.1.0.tgz", + "integrity": "sha1-enUuOcoTzsuStTRiSZxjWGh5/eM=", "requires": { - "regenerator-runtime": "^0.12.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" - } + "@djsp/core": "^0.1.0" + } + }, + "@djsp/core": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/@djsp/core/download/@djsp/core-0.1.0.tgz", + "integrity": "sha1-7CASr9PEfhUX9853wfYBFPAfm3Y=", + "requires": { + "draft-js": "^0.10.5" } }, "abab": { @@ -2429,11 +2430,6 @@ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" }, - "css-color-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=" - }, "css-color-names": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", @@ -2524,16 +2520,6 @@ } } }, - "css-to-react-native": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-2.2.2.tgz", - "integrity": "sha512-w99Fzop1FO8XKm0VpbQp3y5mnTnaS+rtCvS+ylSEOK76YXO5zoHQx/QMB1N54Cp+Ya9jB9922EHrh14ld4xmmw==", - "requires": { - "css-color-keywords": "^1.0.0", - "fbjs": "^0.8.5", - "postcss-value-parser": "^3.3.0" - } - }, "css-what": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", @@ -2986,7 +2972,6 @@ "version": "0.10.5", "resolved": "https://registry.npmjs.org/draft-js/-/draft-js-0.10.5.tgz", "integrity": "sha512-LE6jSCV9nkPhfVX2ggcRLA4FKs6zWq9ceuO/88BpXdNCS7mjRTgs0NsV6piUCJX9YxMsB9An33wnkMmU2sD2Zg==", - "dev": true, "requires": { "fbjs": "^0.8.15", "immutable": "~3.7.4", @@ -4470,11 +4455,6 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" }, - "get-node-dimensions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-node-dimensions/-/get-node-dimensions-1.2.1.tgz", - "integrity": "sha512-2MSPMu7S1iOTL+BOa6K1S62hB2zUAYNF/lV0gSVlOaacd087lc6nR1H1r0e3B1CerTo+RceOmi1iJW+vp21xcQ==" - }, "get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", @@ -4755,11 +4735,6 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - }, "home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", @@ -5006,8 +4981,7 @@ "immutable": { "version": "3.7.6", "resolved": "http://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", - "integrity": "sha1-E7TTyxK++hVIKib+Gy665kAHHks=", - "dev": true + "integrity": "sha1-E7TTyxK++hVIKib+Gy665kAHHks=" }, "import-lazy": { "version": "2.1.0", @@ -8535,31 +8509,6 @@ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-4.0.1.tgz", "integrity": "sha512-xXUbDAZkU08aAkjtUvldqbvI04ogv+a1XdHxvYuHPYKIVk/42BIOD0zSKTHAWV4+gDy3yGm283z2072rA2gdtw==" }, - "react-event-listener": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/react-event-listener/-/react-event-listener-0.6.4.tgz", - "integrity": "sha512-t7VSjIuUFmN+GeyKb+wm025YLeojVB85kJL6sSs0wEBJddfmKBEQz+CNBZ2zBLKVWkPy/fZXM6U5yvojjYBVYQ==", - "requires": { - "@babel/runtime": "7.0.0", - "prop-types": "^15.6.0", - "warning": "^4.0.1" - } - }, - "react-is": { - "version": "16.5.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.5.2.tgz", - "integrity": "sha512-hSl7E6l25GTjNEZATqZIuWOgSnpXb3kD0DVCujmg46K5zLxsbiKaaT6VO9slkSBDPZfYs30lwfJwbOFOnoEnKQ==" - }, - "react-measure": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/react-measure/-/react-measure-2.1.2.tgz", - "integrity": "sha512-2xgrlj77Pv8MIYhm+S5s4Q+QnsYFT3CXzoUkx2mWZBIWzQnT7ubMtmsVtCoNdYV5PGKjTlwo9iGAtS3SrTG/Gg==", - "requires": { - "get-node-dimensions": "^1.2.0", - "prop-types": "^15.5.10", - "resize-observer-polyfill": "^1.4.2" - } - }, "react-scripts": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-1.1.5.tgz", @@ -8621,24 +8570,6 @@ } } }, - "react-text-selection-popover": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/react-text-selection-popover/-/react-text-selection-popover-1.2.1.tgz", - "integrity": "sha512-yiyntKCo/L9ESvxNFlIDekM7CsLGX0TKMBVVDSbU2cg4iFiVyryIk6jHOjHidyRhKMHJihG8QvGXa1nhPVUXRw==", - "requires": { - "invariant": "^2.2.4", - "lodash.debounce": "^4.0.8", - "react-event-listener": "^0.6.1", - "react-measure": "^2.1.2", - "react-window-dimensions": "^1.0.2", - "rollup-plugin-copy": "^0.2.3" - } - }, - "react-window-dimensions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/react-window-dimensions/-/react-window-dimensions-1.0.2.tgz", - "integrity": "sha512-G1q7VE+gncnNPyEwiLAbPk/vx7iEsarkd6kEUtTCIxImY1ZStj9BXuaR3dbWP/+gBvRgBn/jE8ZtnxZoVZXKNg==" - }, "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", @@ -9190,11 +9121,6 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, - "resize-observer-polyfill": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.0.tgz", - "integrity": "sha512-M2AelyJDVR/oLnToJLtuDJRBBWUGUvvGigj1411hXhAdyFWqMaqHp7TixW3FpiLuVaikIcR1QL+zqoJoZlOgpg==" - }, "resolve": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.6.0.tgz", @@ -9276,15 +9202,6 @@ "inherits": "^2.0.1" } }, - "rollup-plugin-copy": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-0.2.3.tgz", - "integrity": "sha1-2sGrgdHyILrrmOXEwBCCUuHtu5g=", - "requires": { - "colors": "^1.1.2", - "fs-extra": "^3.0.0" - } - }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -9958,56 +9875,6 @@ "schema-utils": "^0.3.0" } }, - "styled-components": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-3.4.9.tgz", - "integrity": "sha512-3z3IEkAeDOUa0RBxJUQDK5V5gqL56sqGxyK2Ycaryz2jn3PMgmEMkisSR9RdbFP/RDTDu9n761rNhLC89vofBA==", - "requires": { - "buffer": "^5.0.3", - "css-to-react-native": "^2.0.3", - "fbjs": "^0.8.16", - "hoist-non-react-statics": "^2.5.0", - "prop-types": "^15.5.4", - "react-is": "^16.3.1", - "stylis": "^3.5.0", - "stylis-rule-sheet": "^0.0.10", - "supports-color": "^3.2.3" - }, - "dependencies": { - "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "stylis": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.3.tgz", - "integrity": "sha512-TxU0aAscJghF9I3V9q601xcK3Uw1JbXvpsBGj/HULqexKOKlOEzzlIpLFRbKkCK990ccuxfXUqmPbIIo7Fq/cQ==" - }, - "stylis-rule-sheet": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", - "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==" - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -10687,14 +10554,6 @@ "makeerror": "1.0.x" } }, - "warning": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.2.tgz", - "integrity": "sha512-wbTp09q/9C+jJn4KKJfJfoS6VleK/Dti0yqWSm6KMvJ4MRCXFQNapHuJXutJIrWV0Cf4AhTdeIe4qdKHR1+Hug==", - "requires": { - "loose-envify": "^1.0.0" - } - }, "watch": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/watch/-/watch-0.10.0.tgz", diff --git a/examples/block-switcher/package.json b/examples/block-switcher/package.json index e8e7f94..49d7338 100644 --- a/examples/block-switcher/package.json +++ b/examples/block-switcher/package.json @@ -11,9 +11,7 @@ "prop-types": "^15.6.1", "react": "^16.5.0", "react-dom": "^16.2.0", - "react-scripts": "^1.1.1", - "react-text-selection-popover": "^1.0.3", - "styled-components": "^3.4.5" + "react-scripts": "^1.1.1" }, "scripts": { "start": "react-scripts start", diff --git a/examples/block-switcher/src/Mentions.js b/examples/block-switcher/src/Mentions.js deleted file mode 100644 index 72f0d4e..0000000 --- a/examples/block-switcher/src/Mentions.js +++ /dev/null @@ -1,143 +0,0 @@ -// @flow - -import React, { Component } from 'react' -import { withEditorContext } from '@djsp/core' -import Popover from 'react-text-selection-popover' - -type Props = { - trigger: string | (textUntilCursor => ?string), - renderSuggestion: { suggestion: any, onSelect: any => void }, - pluginProps: Object, - getSuggestions: (searchText: string) => Array | Promise>, -} - -class Suggestions extends Component { - static defaultProps = { - trigger: '@', - renderSuggestion: ({ suggestion, onSelect }) => { - return ( -
  • onSelect(suggestion)}> - {suggestion.label} -
  • - ) - }, - } - - state = { - isOpen: false, - isSearching: false, - suggestions: [], - } - - componentDidMount() { - const { - pluginProps: { registerPlugin }, - } = this.props - this._unregister = registerPlugin({ - onChange: this.onChange, - }) - } - - componentWillUnmount() { - this._unregister() - } - - selectSuggestion = suggestion => { - console.log('select suggestion', suggestion) - } - - openSuggestions = searchText => { - const result = this.props.getSuggestions(searchText) - if (result.then != null) { - this.setState({ - isOpen: true, - isSearching: true, - }) - result - .then(suggestions => - this.setState({ - isSearching: false, - suggestions, - }) - ) - .catch(err => - this.setState({ - isSearching: false, - error: err.message, - }) - ) - } else if (result != null) { - this.setState({ - isOpen: true, - suggestions: result, - }) - } - } - - onChange = editorState => { - const { trigger } = this.props - const selection = editorState.getSelection() - if (!selection.isCollapsed()) { - return - } - - const textUntilCursor = editorState - .getCurrentContent() - .getBlockForKey(selection.getStartKey()) - .getText() - .slice(0, selection.getStartOffset()) - - if (typeof trigger === 'string') { - const lastWord = textUntilCursor.split(/\s/).slice(-1)[0] - if (lastWord != null && lastWord[0] === trigger) { - this.openSuggestions(lastWord.slice(1)) - } else { - this.setState({ isOpen: false }) - } - } else if (typeof trigger === 'function') { - const match = trigger(textUntilCursor) - if (match != null) { - this.openSuggestions(match) - } else { - this.setState({ isOpen: false }) - } - } else { - this.setState({ isOpen: false }) - } - } - - renderSuggestions = () => { - if (this.state.isOpen === true && this.state.isSearching) { - return
    Searching ...
    - } else if ( - this.state.isOpen === true && - this.state.suggestions.length === 0 - ) { - return
    No results ...
    - } else if ( - this.state.isOpen === true && - this.state.suggestions.length > 0 - ) { - return ( -
      - {this.state.suggestions.map(suggestion => - this.props.renderSuggestion({ - suggestion, - onSelect: this.selectSuggestion, - }) - )} -
    - ) - } - } - - render() { - return ( - this.state.isOpen === true && ( - {this.renderSuggestions()} - ) - ) - } -} - -export default withEditorContext(Suggestions)