mirror of
https://github.com/BoostIo/Boostnote
synced 2025-12-17 11:41:44 +00:00
Merge pull request #2320 from daiyam/tag-autocomplete
add tag autocomplete
This commit is contained in:
@@ -363,6 +363,7 @@ class MarkdownNoteDetail extends React.Component {
|
|||||||
<TagSelect
|
<TagSelect
|
||||||
ref='tags'
|
ref='tags'
|
||||||
value={this.state.note.tags}
|
value={this.state.note.tags}
|
||||||
|
data={data}
|
||||||
onChange={this.handleUpdateTag.bind(this)}
|
onChange={this.handleUpdateTag.bind(this)}
|
||||||
/>
|
/>
|
||||||
<TodoListPercentage percentageOfTodo={getTodoPercentageOfCompleted(note.content)} />
|
<TodoListPercentage percentageOfTodo={getTodoPercentageOfCompleted(note.content)} />
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ $info-margin-under-border = 30px
|
|||||||
display flex
|
display flex
|
||||||
align-items center
|
align-items center
|
||||||
padding 0 20px
|
padding 0 20px
|
||||||
|
z-index 99
|
||||||
|
|
||||||
.info-left
|
.info-left
|
||||||
padding 0 10px
|
padding 0 10px
|
||||||
|
|||||||
@@ -6,71 +6,33 @@ import _ from 'lodash'
|
|||||||
import AwsMobileAnalyticsConfig from 'browser/main/lib/AwsMobileAnalyticsConfig'
|
import AwsMobileAnalyticsConfig from 'browser/main/lib/AwsMobileAnalyticsConfig'
|
||||||
import i18n from 'browser/lib/i18n'
|
import i18n from 'browser/lib/i18n'
|
||||||
import ee from 'browser/main/lib/eventEmitter'
|
import ee from 'browser/main/lib/eventEmitter'
|
||||||
|
import Autosuggest from 'react-autosuggest'
|
||||||
|
|
||||||
class TagSelect extends React.Component {
|
class TagSelect extends React.Component {
|
||||||
constructor (props) {
|
constructor (props) {
|
||||||
super(props)
|
super(props)
|
||||||
|
|
||||||
this.state = {
|
this.state = {
|
||||||
newTag: ''
|
newTag: '',
|
||||||
}
|
suggestions: []
|
||||||
this.addtagHandler = this.handleAddTag.bind(this)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount () {
|
this.handleAddTag = this.handleAddTag.bind(this)
|
||||||
this.value = this.props.value
|
this.onInputBlur = this.onInputBlur.bind(this)
|
||||||
ee.on('editor:add-tag', this.addtagHandler)
|
this.onInputChange = this.onInputChange.bind(this)
|
||||||
|
this.onInputKeyDown = this.onInputKeyDown.bind(this)
|
||||||
|
this.onSuggestionsClearRequested = this.onSuggestionsClearRequested.bind(this)
|
||||||
|
this.onSuggestionsFetchRequested = this.onSuggestionsFetchRequested.bind(this)
|
||||||
|
this.onSuggestionSelected = this.onSuggestionSelected.bind(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidUpdate () {
|
addNewTag (newTag) {
|
||||||
this.value = this.props.value
|
|
||||||
}
|
|
||||||
|
|
||||||
componentWillUnmount () {
|
|
||||||
ee.off('editor:add-tag', this.addtagHandler)
|
|
||||||
}
|
|
||||||
|
|
||||||
handleAddTag () {
|
|
||||||
this.refs.newTag.focus()
|
|
||||||
}
|
|
||||||
|
|
||||||
handleNewTagInputKeyDown (e) {
|
|
||||||
switch (e.keyCode) {
|
|
||||||
case 9:
|
|
||||||
e.preventDefault()
|
|
||||||
this.submitTag()
|
|
||||||
break
|
|
||||||
case 13:
|
|
||||||
this.submitTag()
|
|
||||||
break
|
|
||||||
case 8:
|
|
||||||
if (this.refs.newTag.value.length === 0) {
|
|
||||||
this.removeLastTag()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
handleNewTagBlur (e) {
|
|
||||||
this.submitTag()
|
|
||||||
}
|
|
||||||
|
|
||||||
removeLastTag () {
|
|
||||||
this.removeTagByCallback((value) => {
|
|
||||||
value.pop()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
reset () {
|
|
||||||
this.setState({
|
|
||||||
newTag: ''
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
submitTag () {
|
|
||||||
AwsMobileAnalyticsConfig.recordDynamicCustomEvent('ADD_TAG')
|
AwsMobileAnalyticsConfig.recordDynamicCustomEvent('ADD_TAG')
|
||||||
let { value } = this.props
|
|
||||||
let newTag = this.refs.newTag.value.trim().replace(/ +/g, '_')
|
newTag = newTag.trim().replace(/ +/g, '_')
|
||||||
newTag = newTag.charAt(0) === '#' ? newTag.substring(1) : newTag
|
if (newTag.charAt(0) === '#') {
|
||||||
|
newTag.substring(1)
|
||||||
|
}
|
||||||
|
|
||||||
if (newTag.length <= 0) {
|
if (newTag.length <= 0) {
|
||||||
this.setState({
|
this.setState({
|
||||||
@@ -79,6 +41,7 @@ class TagSelect extends React.Component {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let { value } = this.props
|
||||||
value = _.isArray(value)
|
value = _.isArray(value)
|
||||||
? value.slice()
|
? value.slice()
|
||||||
: []
|
: []
|
||||||
@@ -93,10 +56,36 @@ class TagSelect extends React.Component {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
handleNewTagInputChange (e) {
|
buildSuggestions () {
|
||||||
this.setState({
|
this.suggestions = _.sortBy(this.props.data.tagNoteMap.map(
|
||||||
newTag: this.refs.newTag.value
|
(tag, name) => ({
|
||||||
|
name,
|
||||||
|
nameLC: name.toLowerCase(),
|
||||||
|
size: tag.size
|
||||||
})
|
})
|
||||||
|
).filter(
|
||||||
|
tag => tag.size > 0
|
||||||
|
), ['name'])
|
||||||
|
}
|
||||||
|
|
||||||
|
componentDidMount () {
|
||||||
|
this.value = this.props.value
|
||||||
|
|
||||||
|
this.buildSuggestions()
|
||||||
|
|
||||||
|
ee.on('editor:add-tag', this.handleAddTag)
|
||||||
|
}
|
||||||
|
|
||||||
|
componentDidUpdate () {
|
||||||
|
this.value = this.props.value
|
||||||
|
}
|
||||||
|
|
||||||
|
componentWillUnmount () {
|
||||||
|
ee.off('editor:add-tag', this.handleAddTag)
|
||||||
|
}
|
||||||
|
|
||||||
|
handleAddTag () {
|
||||||
|
this.refs.newTag.input.focus()
|
||||||
}
|
}
|
||||||
|
|
||||||
handleTagRemoveButtonClick (tag) {
|
handleTagRemoveButtonClick (tag) {
|
||||||
@@ -105,6 +94,60 @@ class TagSelect extends React.Component {
|
|||||||
}, tag)
|
}, tag)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onInputBlur (e) {
|
||||||
|
this.submitNewTag()
|
||||||
|
}
|
||||||
|
|
||||||
|
onInputChange (e, { newValue, method }) {
|
||||||
|
this.setState({
|
||||||
|
newTag: newValue
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
onInputKeyDown (e) {
|
||||||
|
switch (e.keyCode) {
|
||||||
|
case 9:
|
||||||
|
e.preventDefault()
|
||||||
|
this.submitNewTag()
|
||||||
|
break
|
||||||
|
case 13:
|
||||||
|
this.submitNewTag()
|
||||||
|
break
|
||||||
|
case 8:
|
||||||
|
if (this.state.newTag.length === 0) {
|
||||||
|
this.removeLastTag()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onSuggestionsClearRequested () {
|
||||||
|
this.setState({
|
||||||
|
suggestions: []
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
onSuggestionsFetchRequested ({ value }) {
|
||||||
|
const valueLC = value.toLowerCase()
|
||||||
|
const suggestions = _.filter(
|
||||||
|
this.suggestions,
|
||||||
|
tag => !_.includes(this.value, tag.name) && tag.nameLC.indexOf(valueLC) !== -1
|
||||||
|
)
|
||||||
|
|
||||||
|
this.setState({
|
||||||
|
suggestions
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
onSuggestionSelected (event, { suggestion, suggestionValue }) {
|
||||||
|
this.addNewTag(suggestionValue)
|
||||||
|
}
|
||||||
|
|
||||||
|
removeLastTag () {
|
||||||
|
this.removeTagByCallback((value) => {
|
||||||
|
value.pop()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
removeTagByCallback (callback, tag = null) {
|
removeTagByCallback (callback, tag = null) {
|
||||||
let { value } = this.props
|
let { value } = this.props
|
||||||
|
|
||||||
@@ -118,6 +161,18 @@ class TagSelect extends React.Component {
|
|||||||
this.props.onChange()
|
this.props.onChange()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reset () {
|
||||||
|
this.buildSuggestions()
|
||||||
|
|
||||||
|
this.setState({
|
||||||
|
newTag: ''
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
submitNewTag () {
|
||||||
|
this.addNewTag(this.refs.newTag.input.value)
|
||||||
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { value, className } = this.props
|
const { value, className } = this.props
|
||||||
|
|
||||||
@@ -138,6 +193,8 @@ class TagSelect extends React.Component {
|
|||||||
})
|
})
|
||||||
: []
|
: []
|
||||||
|
|
||||||
|
const { newTag, suggestions } = this.state
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={_.isString(className)
|
<div className={_.isString(className)
|
||||||
? 'TagSelect ' + className
|
? 'TagSelect ' + className
|
||||||
@@ -146,13 +203,25 @@ class TagSelect extends React.Component {
|
|||||||
styleName='root'
|
styleName='root'
|
||||||
>
|
>
|
||||||
{tagList}
|
{tagList}
|
||||||
<input styleName='newTag'
|
<Autosuggest
|
||||||
ref='newTag'
|
ref='newTag'
|
||||||
value={this.state.newTag}
|
suggestions={suggestions}
|
||||||
placeholder={i18n.__('Add tag...')}
|
onSuggestionsFetchRequested={this.onSuggestionsFetchRequested}
|
||||||
onChange={(e) => this.handleNewTagInputChange(e)}
|
onSuggestionsClearRequested={this.onSuggestionsClearRequested}
|
||||||
onKeyDown={(e) => this.handleNewTagInputKeyDown(e)}
|
onSuggestionSelected={this.onSuggestionSelected}
|
||||||
onBlur={(e) => this.handleNewTagBlur(e)}
|
getSuggestionValue={suggestion => suggestion.name}
|
||||||
|
renderSuggestion={suggestion => (
|
||||||
|
<div>
|
||||||
|
{suggestion.name}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
inputProps={{
|
||||||
|
placeholder: i18n.__('Add tag...'),
|
||||||
|
value: newTag,
|
||||||
|
onChange: this.onInputChange,
|
||||||
|
onKeyDown: this.onInputKeyDown,
|
||||||
|
onBlur: this.onInputBlur
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
@@ -163,7 +232,6 @@ TagSelect.propTypes = {
|
|||||||
className: PropTypes.string,
|
className: PropTypes.string,
|
||||||
value: PropTypes.arrayOf(PropTypes.string),
|
value: PropTypes.arrayOf(PropTypes.string),
|
||||||
onChange: PropTypes.func
|
onChange: PropTypes.func
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default CSSModules(TagSelect, styles)
|
export default CSSModules(TagSelect, styles)
|
||||||
|
|||||||
@@ -42,14 +42,6 @@
|
|||||||
color: $ui-text-color
|
color: $ui-text-color
|
||||||
padding 4px 16px 4px 8px
|
padding 4px 16px 4px 8px
|
||||||
|
|
||||||
.newTag
|
|
||||||
box-sizing border-box
|
|
||||||
border none
|
|
||||||
background-color transparent
|
|
||||||
outline none
|
|
||||||
padding 0 4px
|
|
||||||
font-size 13px
|
|
||||||
|
|
||||||
body[data-theme="dark"]
|
body[data-theme="dark"]
|
||||||
.tag
|
.tag
|
||||||
background-color alpha($ui-dark-tag-backgroundColor, 60%)
|
background-color alpha($ui-dark-tag-backgroundColor, 60%)
|
||||||
@@ -62,11 +54,6 @@ body[data-theme="dark"]
|
|||||||
.tag-label
|
.tag-label
|
||||||
color $ui-dark-text-color
|
color $ui-dark-text-color
|
||||||
|
|
||||||
.newTag
|
|
||||||
border-color none
|
|
||||||
background-color transparent
|
|
||||||
color $ui-dark-text-color
|
|
||||||
|
|
||||||
body[data-theme="solarized-dark"]
|
body[data-theme="solarized-dark"]
|
||||||
.tag
|
.tag
|
||||||
background-color $ui-solarized-dark-tag-backgroundColor
|
background-color $ui-solarized-dark-tag-backgroundColor
|
||||||
@@ -78,11 +65,6 @@ body[data-theme="solarized-dark"]
|
|||||||
.tag-label
|
.tag-label
|
||||||
color $ui-solarized-dark-text-color
|
color $ui-solarized-dark-text-color
|
||||||
|
|
||||||
.newTag
|
|
||||||
border-color none
|
|
||||||
background-color transparent
|
|
||||||
color $ui-solarized-dark-text-color
|
|
||||||
|
|
||||||
body[data-theme="monokai"]
|
body[data-theme="monokai"]
|
||||||
.tag
|
.tag
|
||||||
background-color $ui-monokai-button-backgroundColor
|
background-color $ui-monokai-button-backgroundColor
|
||||||
@@ -93,8 +75,3 @@ body[data-theme="monokai"]
|
|||||||
|
|
||||||
.tag-label
|
.tag-label
|
||||||
color $ui-monokai-text-color
|
color $ui-monokai-text-color
|
||||||
|
|
||||||
.newTag
|
|
||||||
border-color none
|
|
||||||
background-color transparent
|
|
||||||
color $ui-monokai-text-color
|
|
||||||
|
|||||||
@@ -156,3 +156,5 @@ body[data-theme="monokai"]
|
|||||||
body[data-theme="default"]
|
body[data-theme="default"]
|
||||||
.SideNav ::-webkit-scrollbar-thumb
|
.SideNav ::-webkit-scrollbar-thumb
|
||||||
background-color rgba(255, 255, 255, 0.3)
|
background-color rgba(255, 255, 255, 0.3)
|
||||||
|
|
||||||
|
@import '../styles/Detail/TagSelect.styl'
|
||||||
109
browser/styles/Detail/TagSelect.styl
Normal file
109
browser/styles/Detail/TagSelect.styl
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
.TagSelect
|
||||||
|
.react-autosuggest__input
|
||||||
|
box-sizing border-box
|
||||||
|
border none
|
||||||
|
background-color transparent
|
||||||
|
outline none
|
||||||
|
padding 0 4px
|
||||||
|
font-size 13px
|
||||||
|
|
||||||
|
ul
|
||||||
|
position fixed
|
||||||
|
z-index 999
|
||||||
|
box-sizing border-box
|
||||||
|
list-style none
|
||||||
|
padding 0
|
||||||
|
margin 0
|
||||||
|
|
||||||
|
border-radius 4px
|
||||||
|
margin .2em 0 0
|
||||||
|
background-color $ui-noteList-backgroundColor
|
||||||
|
border 1px solid rgba(0,0,0,.3)
|
||||||
|
box-shadow .05em .2em .6em rgba(0,0,0,.2)
|
||||||
|
text-shadow none
|
||||||
|
|
||||||
|
&:empty,
|
||||||
|
&[hidden]
|
||||||
|
display none
|
||||||
|
|
||||||
|
&:before
|
||||||
|
content ""
|
||||||
|
position absolute
|
||||||
|
top -7px
|
||||||
|
left 14px
|
||||||
|
width 0 height 0
|
||||||
|
padding 6px
|
||||||
|
background-color $ui-noteList-backgroundColor
|
||||||
|
border inherit
|
||||||
|
border-right 0
|
||||||
|
border-bottom 0
|
||||||
|
-webkit-transform rotate(45deg)
|
||||||
|
transform rotate(45deg)
|
||||||
|
|
||||||
|
li
|
||||||
|
position relative
|
||||||
|
padding 6px 18px 6px 10px
|
||||||
|
cursor pointer
|
||||||
|
|
||||||
|
li[aria-selected="true"]
|
||||||
|
background-color alpha($ui-button--active-backgroundColor, 40%)
|
||||||
|
color $ui-text-color
|
||||||
|
|
||||||
|
body[data-theme="dark"]
|
||||||
|
.TagSelect
|
||||||
|
.react-autosuggest__input
|
||||||
|
color $ui-dark-text-color
|
||||||
|
|
||||||
|
ul
|
||||||
|
border-color $ui-dark-borderColor
|
||||||
|
background-color $ui-dark-noteList-backgroundColor
|
||||||
|
color $ui-dark-text-color
|
||||||
|
|
||||||
|
&:before
|
||||||
|
background-color $ui-dark-noteList-backgroundColor
|
||||||
|
|
||||||
|
li[aria-selected="true"]
|
||||||
|
background-color $ui-dark-button--active-backgroundColor
|
||||||
|
color $ui-dark-text-color
|
||||||
|
|
||||||
|
body[data-theme="monokai"]
|
||||||
|
.TagSelect
|
||||||
|
.react-autosuggest__input
|
||||||
|
color $ui-monokai-text-color
|
||||||
|
|
||||||
|
ul
|
||||||
|
border-color $ui-monokai-borderColor
|
||||||
|
background-color $ui-monokai-noteList-backgroundColor
|
||||||
|
color $ui-monokai-text-color
|
||||||
|
|
||||||
|
&:before
|
||||||
|
background-color $ui-dark-noteList-backgroundColor
|
||||||
|
|
||||||
|
li[aria-selected="true"]
|
||||||
|
background-color $ui-monokai-button-backgroundColor
|
||||||
|
color $ui-monokai-text-color
|
||||||
|
|
||||||
|
body[data-theme="solarized-dark"]
|
||||||
|
.TagSelect
|
||||||
|
.react-autosuggest__input
|
||||||
|
color $ui-solarized-dark-text-color
|
||||||
|
|
||||||
|
ul
|
||||||
|
border-color $ui-solarized-dark-borderColor
|
||||||
|
background-color $ui-solarized-dark-noteList-backgroundColor
|
||||||
|
color $ui-solarized-dark-text-color
|
||||||
|
|
||||||
|
&:before
|
||||||
|
background-color $ui-solarized-dark-noteList-backgroundColor
|
||||||
|
|
||||||
|
li[aria-selected="true"]
|
||||||
|
background-color $ui-dark-button--active-backgroundColor
|
||||||
|
color $ui-solarized-dark-text-color
|
||||||
|
|
||||||
|
body[data-theme="white"]
|
||||||
|
.TagSelect
|
||||||
|
ul
|
||||||
|
background-color $ui-white-noteList-backgroundColor
|
||||||
|
|
||||||
|
li[aria-selected="true"]
|
||||||
|
background-color $ui-button--active-backgroundColor
|
||||||
@@ -88,6 +88,7 @@
|
|||||||
"node-ipc": "^8.1.0",
|
"node-ipc": "^8.1.0",
|
||||||
"raphael": "^2.2.7",
|
"raphael": "^2.2.7",
|
||||||
"react": "^15.5.4",
|
"react": "^15.5.4",
|
||||||
|
"react-autosuggest": "^9.4.0",
|
||||||
"react-codemirror": "^0.3.0",
|
"react-codemirror": "^0.3.0",
|
||||||
"react-debounce-render": "^4.0.1",
|
"react-debounce-render": "^4.0.1",
|
||||||
"react-dom": "^15.0.2",
|
"react-dom": "^15.0.2",
|
||||||
|
|||||||
34
yarn.lock
34
yarn.lock
@@ -6352,6 +6352,10 @@ oauth-sign@~0.8.2:
|
|||||||
version "0.8.2"
|
version "0.8.2"
|
||||||
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
|
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
|
||||||
|
|
||||||
|
object-assign@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
|
||||||
|
|
||||||
object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
|
object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
|
||||||
version "4.1.1"
|
version "4.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||||
@@ -7190,6 +7194,22 @@ rcedit@^1.0.0:
|
|||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/rcedit/-/rcedit-1.1.0.tgz#ae21c28d4efdd78e95fcab7309a5dd084920b16a"
|
resolved "https://registry.yarnpkg.com/rcedit/-/rcedit-1.1.0.tgz#ae21c28d4efdd78e95fcab7309a5dd084920b16a"
|
||||||
|
|
||||||
|
react-autosuggest@^9.4.0:
|
||||||
|
version "9.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-autosuggest/-/react-autosuggest-9.4.0.tgz#3146bc9afa4f171bed067c542421edec5ca94294"
|
||||||
|
dependencies:
|
||||||
|
prop-types "^15.5.10"
|
||||||
|
react-autowhatever "^10.1.2"
|
||||||
|
shallow-equal "^1.0.0"
|
||||||
|
|
||||||
|
react-autowhatever@^10.1.2:
|
||||||
|
version "10.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-autowhatever/-/react-autowhatever-10.1.2.tgz#200ffc41373b2189e3f6140ac7bdb82363a79fd3"
|
||||||
|
dependencies:
|
||||||
|
prop-types "^15.5.8"
|
||||||
|
react-themeable "^1.1.0"
|
||||||
|
section-iterator "^2.0.0"
|
||||||
|
|
||||||
react-codemirror@^0.3.0:
|
react-codemirror@^0.3.0:
|
||||||
version "0.3.0"
|
version "0.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/react-codemirror/-/react-codemirror-0.3.0.tgz#cd6bd6ef458ec1e035cfd8b3fe7b30c8c7883c6c"
|
resolved "https://registry.yarnpkg.com/react-codemirror/-/react-codemirror-0.3.0.tgz#cd6bd6ef458ec1e035cfd8b3fe7b30c8c7883c6c"
|
||||||
@@ -7290,6 +7310,12 @@ react-test-renderer@^15.6.2:
|
|||||||
fbjs "^0.8.9"
|
fbjs "^0.8.9"
|
||||||
object-assign "^4.1.0"
|
object-assign "^4.1.0"
|
||||||
|
|
||||||
|
react-themeable@^1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-themeable/-/react-themeable-1.1.0.tgz#7d4466dd9b2b5fa75058727825e9f152ba379a0e"
|
||||||
|
dependencies:
|
||||||
|
object-assign "^3.0.0"
|
||||||
|
|
||||||
react-transform-catch-errors@^1.0.2:
|
react-transform-catch-errors@^1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/react-transform-catch-errors/-/react-transform-catch-errors-1.0.2.tgz#1b4d4a76e97271896fc16fe3086c793ec88a9eeb"
|
resolved "https://registry.yarnpkg.com/react-transform-catch-errors/-/react-transform-catch-errors-1.0.2.tgz#1b4d4a76e97271896fc16fe3086c793ec88a9eeb"
|
||||||
@@ -7792,6 +7818,10 @@ scope-css@^1.0.5:
|
|||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "http://registry.npm.taobao.org/scope-css/download/scope-css-1.1.0.tgz#74eff45461bc9d3f3b29ed575b798cd722fa1256"
|
resolved "http://registry.npm.taobao.org/scope-css/download/scope-css-1.1.0.tgz#74eff45461bc9d3f3b29ed575b798cd722fa1256"
|
||||||
|
|
||||||
|
section-iterator@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/section-iterator/-/section-iterator-2.0.0.tgz#bf444d7afeeb94ad43c39ad2fb26151627ccba2a"
|
||||||
|
|
||||||
semver-diff@^2.0.0:
|
semver-diff@^2.0.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
|
resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
|
||||||
@@ -7887,6 +7917,10 @@ sha.js@2.2.6:
|
|||||||
version "2.2.6"
|
version "2.2.6"
|
||||||
resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba"
|
resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba"
|
||||||
|
|
||||||
|
shallow-equal@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.0.0.tgz#508d1838b3de590ab8757b011b25e430900945f7"
|
||||||
|
|
||||||
shebang-command@^1.2.0:
|
shebang-command@^1.2.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
|
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
|
||||||
|
|||||||
Reference in New Issue
Block a user